{"version":3,"file":"static/js/main.d01c216d.js","mappings":"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,kBACA,eACA,eACA,sBACA,mBACA,gBACA,WACA,eACA,aACA,eACA,aACA,iBACA,eACA,MACA,QACA,cACA,cACA,cACA,gBACA,YACA,YACA,cACA,WACA,qBACA,iBACA,eACA,aACA,YACA,eACA,cACA,cACA,cACA,gBACA,kBACA,oBACA,kBACA,qBACA,qBACA,iBACA,uBACA,iBACA,qBACA,mBACA,mBACA,OACA,SACA,cACA,YACA,iBACA,UACA,YACA,aACA,gBACA,aACA,WACA,aACA,gBACA,YACA,qBACA,aACA,gBACA,YACA,cACA,iBACA,sBACA,sBACA,0BACA,sBACA,gBACA,mBACA,qBACA,aACA,cACA,UACA,sBACA,eACA,YACA,iBACA,eACA,eACA,gBACA,eACA,YACA,YACA,cACA,kBACA,kBACA,OACA,aACA,WACA,aACA,YACA,YACA,SACA,WACA,QACA,SACA,eACA,qBACA,mBACA,oBACA,oBACA,iBACA,kBACA,mBACA,gBACA,iBACA,qBACA,kBACA,qBACA,2BACA,aACA,8CClLJ7vF,OAAOC,eAAenC,EAAS,aAAc,CACzCoB,OAAO,IAEX,SAAiBqC,EAAQsR,GACrB,IAAI,IAAInL,KAAQmL,EAAI7S,OAAOC,eAAesB,EAAQmG,EAAM,CACpDxH,YAAY,EACZyR,IAAKkB,EAAInL,KAGjBioJ,CAAQ7xJ,EAAS,CACb8xJ,YAAa,kBAAIA,GACjBC,iBAAkB,kBAAIA,GACtBpzH,QAAS,kBAAIozD,KAEjB,IAAMigE,EAA4B7/D,EAAuBlmF,EAAQ,OAC3DgmJ,EAAqB9/D,EAAuBlmF,EAAQ,OAC1D,SAASkmF,EAAuBnwF,GAC5B,OAAOA,GAAOA,EAAIzB,WAAayB,EAAM,CACjC28B,QAAS38B,GAGjB,IAAIi9B,EAAW,CACXizH,2BAA2B,GAE3BC,EAAe,CACfpvF,OAAQ,CACJ,yBACA,kCAEJqvF,aAAc,CACV,4BACA,iBAGR,SAASN,EAAY1+I,EAAQi/I,GAErB,IAAIrkD,EACAskD,EAAMC,EAINC,EACAC,EAAMC,EAPd,OAAIP,EAAapvF,OAAO5mD,SAA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G,IACHC,SAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,OAAG,KACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,OAAG,IACHC,SAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,SAAG,IACHC,SAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,OAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,KACHC,SAAG,KACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,KACHC,SAAG,KACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,KACHC,SAAG,KACHC,SAAG,IACHC,SAAG,IACHC,OAAG,KACHC,OAAG,KACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,SAAG,SACHC,SAAG,SACHC,SAAG,SACHC,SAAG,SACHC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,eAAI,IACJC,eAAI,IACJC,aAAI,IACJC,aAAI,IACJC,UAAI,IACJC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,SAAG,IACHC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,eAAI,IACJC,eAAI,IACJC,SAAG,IACHC,SAAG,IACHC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,IACJC,UAAI,I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ACE24L,GAAY,CACVx2L,GAAIk3L,OAbLA,IAkBP,kBAAKjuG,UAAU,kEAAf,WACI6kP,IACA,iBAAK7kP,UAAU,UAAf,UACE,UAAC,GAAD,CAAwB8jP,aAAcA,OAG1C,UAAC,GAAD,CAAmBj9G,cAAc,UACjC,UAAC,GAAD,cH9DLg9G,SAAAA,GAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,CAAAA,KAAAA,GAAAA,KAWL,IAAMiB,GAAiD,CACrD,CACEC,gBAAiB,SACjBC,SAAUnB,GAASoB,SACnBnhU,KAAM,4BAER,CACEihU,gBAAiB,QACjBC,SAAUnB,GAASoB,SACnBnhU,KAAM,+BAER,CACEihU,gBAAiB,MACjBC,SAAUnB,GAASoB,SACnBnhU,KAAM,8BAER,CACEihU,gBAAiB,WACjBC,SAAUnB,GAASoB,SACnBnhU,KAAM,4BAER,CACEihU,gBAAiB,YACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,6BAER,CACEihU,gBAAiB,UACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,2BAER,CACEihU,gBAAiB,uBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,2BAER,CACEihU,gBAAiB,iBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,gCAER,CACEihU,gBAAiB,cACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,gCAER,CACEihU,gBAAiB,YACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,8BAER,CACEihU,gBAAiB,eACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,8BAER,CACEihU,gBAAiB,OACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,8BAER,CACEihU,gBAAiB,eACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,8BAER,CACEihU,gBAAiB,YACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,8BAER,CACEihU,gBAAiB,qBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,oCAER,CACEihU,gBAAiB,mBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCAER,CACEihU,gBAAiB,gBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCAER,CACEihU,gBAAiB,iBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,gCAER,CACEihU,gBAAiB,cACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,oCAER,CACEihU,gBAAiB,gBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,qCAER,CACEihU,gBAAiB,oBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,mCAER,CACEihU,gBAAiB,iBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,mCAER,CACEihU,gBAAiB,mBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCAER,CACEihU,gBAAiB,gBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCAER,CACEihU,gBAAiB,gBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCAER,CACEihU,gBAAiB,mBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCAER,CACEihU,gBAAiB,WACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCAER,CACEihU,gBAAiB,oBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,mCAER,CACEihU,gBAAiB,iBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,mCAER,CACEihU,gBAAiB,iBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,gCAER,CACEihU,gBAAiB,cACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,gCAER,CACEihU,gBAAiB,mBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCAER,CACEihU,gBAAiB,gBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCAER,CACEihU,gBAAiB,kBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,oCAER,CACEihU,gBAAiB,qBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,oCAER,CACEihU,gBAAiB,aACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,oCAER,CACEihU,gBAAiB,iBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,gCAER,CACEihU,gBAAiB,cACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,gCAER,CACEihU,gBAAiB,kBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,iCAER,CACEihU,gBAAiB,eACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,iCAER,CACEihU,gBAAiB,gBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,+BAER,CACEihU,gBAAiB,aACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,+BAER,CACEihU,gBAAiB,kBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,iCAER,CACEihU,gBAAiB,eACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,iCAER,CACEihU,gBAAiB,eACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,iCAER,CACEihU,gBAAiB,cACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,gCAER,CACEihU,gBAAiB,cACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,gCAER,CACEihU,gBAAiB,kBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,oCAER,CACEihU,gBAAiB,oBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,sCAER,CACEihU,gBAAiB,aACjBC,SAAUnB,GAASoB,SACnBnhU,KAAM,kCAER,CACEihU,gBAAiB,eACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,iCAER,CACEihU,gBAAiB,sBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,oCAER,CACEihU,gBAAiB,0BACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,oCAER,CACEihU,gBAAiB,kBACjBC,SAAUnB,GAASqB,MACnBphU,KAAM,kCA0CV,GAlCK,SAAC,GAQC,IAPLihU,EAOI,EAPJA,gBACAI,EAMI,EANJA,aACA7iB,EAKI,EALJA,YAMM8iB,EAAYN,GAAqB33L,MACrC,SAACgjD,GAAD,OAAUA,EAAK40I,kBAAoBA,KAGrC,OAAOK,GACL,gCACGA,EAAUJ,WAAanB,GAASoB,UAC/B,eACEjlP,UAAS,UAAKolP,EAAUthU,KAAf,YAAuBw+S,GAChCpyH,MAAO60I,KAGT,iBACE/rM,IAAKosM,EAAUthU,KACfk8E,UAAWmlP,EACXzuH,IAAK0uH,EAAUL,gBACf70I,MAAO60I,OAKb,2BIhTJ,GAVK,SAAC,GAAkB,IAAhBx5O,EAAe,EAAfA,SACE0uG,EAAiBzyC,GAAY,SAAChkK,GAAD,OAAsBA,EAAMy0J,QAAzDgiD,aAER,OACE,iBAAKj6G,UAAS,UAAKi6G,EAAe,UAAY,GAAhC,mBAAd,SACG1uG,KCEP,SAAS85O,GAAiBvmV,GACxB,OAAKA,GACI,EAMX,SAASwmV,GAA4BxmV,GACnC,OAAKA,GAAmB,MAAVA,EAIPA,EAHE,IAMX,SAASymV,GAAaC,GACpB,OACE,kBAAKxlP,UAAU,oBAAf,WACE,UAAC,GAAD,CACE+kP,gBAAiBS,EACjBljB,YAAY,oBACZ6iB,aAAa,cAEf,kBAAMnlP,UAAU,yBAAhB,SAA0CwlP,OAKhD,IAAMC,GAAqBrnB,KAE3B,SAASxkB,GAAa8rC,EAAoBl9T,GACxC,OACE,iBAAKw3E,UAAU,oBAAf,UACE,mBAAMA,UAAU,WAAhB,UACG0lP,EACAl9T,GACC,iBAAKw3E,UAAU,sDAAf,UACE,UAAC,GAAD,CAASjsE,KAAMmyM,GAAYq5G,WAG7B,+BAOV,IAAMoG,GAAqB,IA8gB3B,SAASC,GAAa9mV,EAAe6mF,GACnC,IAAMkgQ,EAAmB/mV,EAAQ6mF,EAAS,IAE1C,OAAI3+E,MAAM6+U,GACD,GAGH,IAAN,OAAWA,EAAgBjgQ,QAAQ,GAAnC,MC/kBK,SAASkgQ,GAAkB1xC,EAAc2xC,GAC9C,OAAOA,GAAgB3xC,EAAO2xC,EAAe3xC,EAAO,EAG/C,SAAS4xC,GAAiB5xC,EAAc2xC,GAC7C,OAAOA,GAAgB3xC,EAAO2xC,EAAe3xC,EAAO,EAG/C,SAAS6xC,GAAiB7xC,EAAc8xC,EAAeC,GAC5D,IAAMC,EAAqBF,EAAQC,EACnC,OAAO/xC,GAAQgyC,EAAqBhyC,EAAOgyC,EAAqB,EAG3D,SAASC,GAAiBjyC,EAAckyC,GAC7C,OAAOlyC,GAAQkyC,EAAOlyC,EAAOkyC,EAAO,ECE/B,IA8CMC,GAAoC,SAC/CttK,EACAutK,EACAC,GAEA,IADmB,EAKbnC,EAJiBrrK,EAAQl4K,QAC7B,SAACm4K,GAAD,OAAYA,EAAOwtK,uBAAyBF,KAGT5uU,QACnC,SAAC+uU,EAAYztK,GACX,IAAM0tK,EAAiBD,EAAWx5L,MAChC,SAACnzI,GAAD,OAAOA,EAAEuqU,QAAUrrK,EAAOI,kBAG5B,GAAIstK,EACFA,EAAe1tK,EAAOypK,YAAc,CAClC6B,KAAMtrK,EAAO2tK,iBACb5vS,QAAS,OAEN,CACL,IAAM6vS,GAAuB,QAC3BvC,MAAOrrK,EAAOI,gBACbJ,EAAOypK,WAAa,CACnB6B,KAAMtrK,EAAO2tK,iBACb5vS,QAAS,IAGb0vS,EAAU,aAAOA,GAAP,CAAmBG,IAG/B,OAAOH,IAET,IA7BiB,KAgCI1tK,EAAQl4K,QAC7B,SAACm4K,GAAD,OAAYA,EAAOwtK,uBAAyBD,MAjC3B,yBAoCRM,EApCQ,QAqCXC,EAA4B1C,EAAct0S,WAC9C,SAACi3S,GAAD,OAAYA,EAAO1C,QAAUwC,EAAcztK,kBAG7C,GAAI0tK,GAA6B,EAAG,CAClC,IAAIE,EAAuB5C,EAAc0C,GACrCG,EAAsBD,EACxBH,EAAcpE,YAGhBwE,GAAmB,oBACdA,GADc,IAEjBlwS,QAAS8vS,EAAcF,mBAGzBK,EAAuB5C,EAAc0C,IAAd,oBAClB1C,EAAc0C,IADI,cAEpBD,EAAcpE,WAAawE,QAEzB,CACL,IAAMC,GAAuB,QAC3B7C,MAAOwC,EAAcztK,gBACpBytK,EAAcpE,WAAa,CAC1B6B,KAAM,EACNvtS,QAAS8vS,EAAcF,mBAG3BvC,EAAc9jV,KAAK4mV,KA5BvB,2BAA6C,IApC1B,8BAgHnB,OA5CA9C,EAAchjV,SAAQ,SAAC43K,GAAY,IAAD,qBAiDpC,SAA8CA,GAA6B,IAAD,kBACxEA,EAAO+oK,GAAAA,QAAP,UACE/oK,EAAO+oK,GAAAA,eADT,QAEG,CACCuC,KAAM,EACNvtS,QAAS,GAEbiiI,EAAO+oK,GAAAA,aAAP,UACE/oK,EAAO+oK,GAAAA,oBADT,QAEG,CACCuC,KAAM,EACNvtS,QAAS,GAEbiiI,EAAO+oK,GAAAA,cAAP,UACE/oK,EAAO+oK,GAAAA,qBADT,QAEG,CACCuC,KAAM,EACNvtS,QAAS,GAEbiiI,EAAO+oK,GAAAA,KAAP,UACE/oK,EAAO+oK,GAAAA,YADT,QAEG,CACCuC,KAAM,EACNvtS,QAAS,GAEbiiI,EAAO+oK,GAAAA,eAAP,UACE/oK,EAAO+oK,GAAAA,sBADT,QAEG,CACCuC,KAAM,EACNvtS,QAAS,GAEbiiI,EAAO+oK,GAAAA,oBAAP,UACE/oK,EAAO+oK,GAAAA,2BADT,QAEG,CACCuC,KAAM,EACNvtS,QAAS,GAEbiiI,EAAO+oK,GAAAA,UAAP,UACE/oK,EAAO+oK,GAAAA,iBADT,QAEG,CACCuC,KAAM,EACNvtS,QAAS,GAEbiiI,EAAO+oK,GAAAA,gBAAP,UACE/oK,EAAO+oK,GAAAA,uBADT,QAEG,CACCuC,KAAM,EACNvtS,QAAS,GAEbiiI,EAAO+oK,GAAAA,MAAP,UACE/oK,EAAO+oK,GAAAA,aADT,QAEG,CACCuC,KAAM,EACNvtS,QAAS,GApGXowS,CAAqCnuK,GAErC,IAAMk7H,EAAOl7H,EAAO+oK,GAAAA,MACdiE,EAAQhtK,EAAO+oK,GAAAA,KACfkE,EAAQjtK,EAAO+oK,GAAAA,cACfnwI,EAAU54B,EAAO+oK,GAAAA,UACjB8D,EAAe7sK,EAAO+oK,GAAAA,gBAEtBqF,EAAa,UAAIlzC,EAAKowC,YAAT,QAA4B,EACzC+C,EAAc,UAAIrB,EAAM1B,YAAV,QAA6B,EAC3CgD,EAAc,UAAIrB,EAAM3B,YAAV,QAA6B,EAC3CiD,EAAgB,UAAI31I,EAAQ0yI,YAAZ,QAA+B,EAC/CkD,EAAsB,UAAI3B,EAAavB,YAAjB,QAAoC,EAE1DmD,EAAgB,UAAIvzC,EAAKn9P,eAAT,QAA+B,EAC/C2wS,EAAiB,UAAI1B,EAAMjvS,eAAV,QAAgC,EACjD4wS,EAAiB,UAAI1B,EAAMlvS,eAAV,QAAgC,EACjD6wS,EAAmB,UAAIh2I,EAAQ76J,eAAZ,QAAkC,EACrD8wS,EAAyB,UAAIhC,EAAa9uS,eAAjB,QAAuC,EAEtEiiI,EAAO+oK,GAAAA,KAAmB,CACxBuC,KAAMyB,GAAiBqB,EAAeC,EAAgBC,GACtDvwS,QAASgvS,GACP0B,EACAC,EACAC,IAGJ3uK,EAAO+oK,GAAAA,KAAmB,CACxBuC,KAAM6B,GAAiBiB,EAAeG,GACtCxwS,QAASovS,GAAiBsB,EAAkBG,IAE9C5uK,EAAO+oK,GAAAA,KAAmB,CACxBuC,KAAMwB,GAAiBsB,EAAeI,GACtCzwS,QAAS+uS,GAAiB2B,EAAkBI,IAE9C7uK,EAAO+oK,GAAAA,MAAoB,CACzBuC,KAAMsB,GAAkBwB,EAAeI,GACvCzwS,QAAS6uS,GAAkB6B,EAAkBI,OAI1CzD,GA8DF,ICnPM0D,GAAoB,SAACC,GAChC,MAAM,GAAN,cAAUA,QAAV,IAAUA,EAAAA,EAAc,UAAxB,eCkBF,GAjB2C,YAIQ,IAHjD90O,EAGgD,EAHhDA,OACA+0O,EAEgD,EAFhDA,aACAC,EACgD,EADhDA,qBAEA,OACE,kBAAKnoP,UAAWmT,EAAOi1O,uBAAvB,UACGD,GAAwBD,EACrBC,EAAqBD,GACrB,MACJ,eACEloP,UAAS,sCAAiCmT,EAAOk1O,2BCR5C74B,GAUR,SAAC,GAUC,IATL7hH,EASI,EATJA,YACAiB,EAQI,EARJA,WACAS,EAOI,EAPJA,aACAoP,EAMI,EANJA,UACAD,EAKI,EALJA,gBACA8pI,EAII,EAJJA,SACA1pI,EAGI,EAHJA,WACAD,EAEI,EAFJA,eACAE,EACI,EADJA,kBAEA,OACE,kBACE7+G,UAAS,4DACPsoP,EAAW,uBAAyB,IAFxC,WAKE,oBACE9zO,SAAUm5F,GAAe,EACzB3tG,UAAS,8CACTgL,QAAS2zG,EAHX,UAKE,eAAG3+G,UAAU,0DAGf,kBAAMA,UAAU,iDAAhB,SACG4uG,EAAa,EAAIjB,EAAc,KAElC,kBAAM3tG,UAAU,iDAAhB,iBACA,kBAAMA,UAAU,iDAAhB,SACG4uG,KAEH,mBAAM5uG,UAAU,iDAAhB,mCACkBqvG,QADlB,IACkBA,EAAAA,EAAgB,MAGlC,oBACE76F,SAAUm5F,GAAeiB,EACzB5uG,UAAS,+CACTgL,QAAS4zG,EAHX,UAKE,eAAG5+G,UAAU,2DAGf,UAAC,GAAD,CACE4mI,cAAenoB,EACfwoB,mBAAoB,SAACshH,GAAD,OAAiB1pI,GAAmB0pI,IACxD5hH,qBAAsB,CAAEuhH,aAAc1pI,GACtCsoB,uBAAuB,WAJzB,UAME,UAAC,GAAD,CACE3zH,OAAQ,CACNi1O,uBAAwB,8BACxBC,oBAAqB,iCAEvBF,qBAAsB,SAACK,GAAD,OACpB,mBAAMxoP,UAAU,qCAAhB,wBACcwoP,cCvD1B,SAASC,GACPxvK,EACAO,GAOA,OALsBP,EACnBl4K,QAAO,SAACm4K,GAAD,OAAYA,EAAOM,WAAaA,KACvC5jK,KAAI,SAACsjK,GAAD,OAAYA,EAAOW,eACvBjiK,QAAO,SAAC+tE,EAAOk0F,GAAR,OAAyBl0F,EAASk0F,IAAc,GAK5D,SAAS6uK,GACPC,EACAC,EACApvK,GAOA,MALsC,CACpCqvK,aAAcJ,GAA0BE,EAAgBnvK,GACxDsvK,aAAcL,GAA0BG,EAAgBpvK,IAMrD,IAAMuvK,GAAa,SACxBJ,EACAC,GAEA,IAAMI,EAAU,aACXL,EAAeM,aADJ,GAEXN,EAAeO,QAFJ,GAGXP,EAAexC,OAHJ,GAIXwC,EAAeQ,MAJJ,GAKXR,EAAeS,MALJ,GAMXT,EAAeU,WANJ,GAOXV,EAAet0C,OAPJ,GAQXs0C,EAAevtI,UARJ,GASXutI,EAAeW,OATJ,GAUXV,EAAeK,aAVJ,GAWXL,EAAeM,QAXJ,GAYXN,EAAezC,OAZJ,GAaXyC,EAAeO,MAbJ,GAcXP,EAAeQ,MAdJ,GAeXR,EAAeS,WAfJ,GAgBXT,EAAev0C,OAhBJ,GAiBXu0C,EAAextI,UAjBJ,GAkBXwtI,EAAeU,QAGdC,EAAqB,IAAInhU,IAAJ,GACtB4gU,EAAWpzU,KAAI,SAACsjK,GAAD,OAAYA,EAAOM,cAIjCH,EADgB,GAAOkwK,GACO3zU,KAAI,SAAC4jK,GACvC,IAAMN,EAAS8vK,EAAW77L,MAAK,SAACnzI,GAAD,OAAOA,EAAEw/J,WAAaA,KAC/Cl6K,EAAOopV,GACXC,EAAexC,MACfyC,EAAezC,MACf3sK,GAEI06H,EAAMw0C,GACVC,EAAeQ,KACfP,EAAeO,KACf3vK,GAEI46H,EAAOs0C,GACXC,EAAeW,MACfV,EAAeU,MACf9vK,GAEIs4B,EAAU42I,GACdC,EAAevtI,SACfwtI,EAAextI,SACf5hC,GAEI66H,EAAQq0C,GACZC,EAAet0C,MACfu0C,EAAev0C,MACf76H,GAgEF,MA7DoC,CAClCziK,GAAIyiK,EACJgwK,SAAUtwK,EAAOO,eACjBgwK,YAAaT,EAAWnrU,MAAK,SAAC7D,GAAD,OAAOA,EAAEy/J,iBAAmBD,KACzD1oB,MAAOooB,EAAOpoB,MACd5uE,MAAOg3F,EAAOI,eACdowK,gBAAiBxwK,EAAOS,0BACxBsvK,YAAaP,GACXC,EAAeM,YACfL,EAAeK,YACfzvK,GAEF0vK,OAAQR,GACNC,EAAeO,OACfN,EAAeM,OACf1vK,GAEFl6K,KAAAA,EACA40S,IAAAA,EACAt4F,YAAa8sI,GACXC,EAAeS,KACfR,EAAeQ,KACf5vK,GAEFmwK,iBAAkBjB,GAChBC,EAAeU,UACfT,EAAeS,UACf7vK,GAEF66H,MAAAA,EACAviG,QAAAA,EACAsiG,KAAAA,EACAw1C,IAAK,CACHf,aAAc5C,GACZ7xC,EAAKy0C,aACL30C,EAAI20C,aACJvpV,EAAKupV,cAEPC,aAAc7C,GACZ7xC,EAAK00C,aACL50C,EAAI40C,aACJxpV,EAAKwpV,eAGTe,IAAK,CACHhB,aAAcxC,GAAiBjyC,EAAKy0C,aAAcx0C,EAAMw0C,cACxDC,aAAczC,GAAiBjyC,EAAK00C,aAAcz0C,EAAMy0C,eAE1DgB,IAAK,CACHjB,aAAc7C,GAAiB5xC,EAAKy0C,aAAc/2I,EAAQ+2I,cAC1DC,aAAc9C,GAAiB5xC,EAAK00C,aAAch3I,EAAQg3I,eAE5DjlH,KAAM,CACJglH,aAAc/C,GACZ1xC,EAAKy0C,aACL/2I,EAAQ+2I,cAEVC,aAAchD,GAAkB1xC,EAAK00C,aAAch3I,EAAQg3I,mBAOjE,OAAOzvK,GAGI0wK,GAAiB,SAC5B12R,GAEA,IAAM/zD,EAAOivT,GACXl7P,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIxtF,KAAKupV,gBAC3Bx1R,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIxtF,KAAKwpV,iBAEvB50C,EAAMqa,GACVl7P,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIonN,IAAI20C,gBAC1Bx1R,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIonN,IAAI40C,iBAEtBz0C,EAAQka,GACZl7P,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIunN,MAAMw0C,gBAC5Bx1R,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIunN,MAAMy0C,iBAExBh3I,EAAUy8G,GACdl7P,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIglH,QAAQ+2I,gBAC9Bx1R,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIglH,QAAQg3I,iBAE1B10C,EAAOma,GACXl7P,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIsnN,KAAKy0C,gBAC3Bx1R,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIsnN,KAAK00C,iBAyD7B,MAtDyC,CACvC/xU,GAAI,QACJyyU,SAAU,GACVC,aAAa,EACb34L,MAAO,EACP5uE,MAAO,QACPwnQ,iBAAiB,EACjBT,YAAa16B,GACXl7P,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIm8P,YAAYJ,gBAClCx1R,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIm8P,YAAYH,iBAEpCI,OAAQ36B,GACNl7P,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIo8P,OAAOL,gBAC7Bx1R,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAIo8P,OAAOJ,iBAE/BxpV,KAAAA,EACA40S,IAAAA,EACAt4F,YAAa2yG,GACXl7P,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAI8uH,YAAYitI,gBAClCx1R,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAI8uH,YAAYktI,iBAEpCa,iBAAkBp7B,GAChBl7P,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAI68P,iBAAiBd,gBACvCx1R,EAAKz9C,KAAI,SAACk3E,GAAD,OAASA,EAAI68P,iBAAiBb,iBAEzCz0C,MAAAA,EACAviG,QAAAA,EACAsiG,KAAAA,EACAw1C,IAAK,CACHf,aAAc5C,GACZ7xC,EAAKy0C,aACL30C,EAAI20C,aACJvpV,EAAKupV,cAEPC,aAAc7C,GACZ7xC,EAAK00C,aACL50C,EAAI40C,aACJxpV,EAAKwpV,eAGTe,IAAK,CACHhB,aAAcxC,GAAiBjyC,EAAKy0C,aAAcx0C,EAAMw0C,cACxDC,aAAczC,GAAiBjyC,EAAK00C,aAAcz0C,EAAMy0C,eAE1DgB,IAAK,CACHjB,aAAc7C,GAAiB5xC,EAAKy0C,aAAc/2I,EAAQ+2I,cAC1DC,aAAc9C,GAAiB5xC,EAAK00C,aAAch3I,EAAQg3I,eAE5DjlH,KAAM,CACJglH,aAAc/C,GAAkB1xC,EAAKy0C,aAAc/2I,EAAQ+2I,cAC3DC,aAAchD,GAAkB1xC,EAAK00C,aAAch3I,EAAQg3I,iBAOjE,SAASv6B,GACPy7B,EACAC,GAaA,MAXsC,CACpCpB,aAAcmB,EAAcpyU,QAC1B,SAAC+tE,EAAOt7E,GAAR,OAAqBs7E,EAASt7E,IAC9B,GAEFy+U,aAAcmB,EAAcryU,QAC1B,SAAC+tE,EAAOt7E,GAAR,OAAqBs7E,EAASt7E,IAC9B,IAOC,IAiBM6/U,GAA8C,SACzDhG,EACA+E,EACAC,EACA/C,EACAD,EACAkD,EACAC,EACAh1C,EACAj5F,EACAkuI,GAEA,IAAMa,EAAyBlB,EAAYrzU,KAAI,SAACw0U,GAC9C,MAAO,CACL1D,qBAAsBxC,EACtB2C,iBAAkBuD,EAAIvwK,YACtB8oK,WAAYV,GAAAA,YACZ3oK,eAAgB8wK,EAAI9wK,mBAIlB+wK,EAAoBnB,EAAOtzU,KAAI,SAAC0+J,GACpC,MAAO,CACLoyK,qBAAsBxC,EACtB2C,iBAAkBvyK,EAAMuF,YACxB8oK,WAAYV,GAAAA,OACZ3oK,eAAgBhF,EAAMgF,mBAIpBgxK,EAAmBnE,EAAMvwU,KAAI,SAACtW,GAClC,MAAO,CACLonV,qBAAsBxC,EACtB2C,iBAAkBvnV,EAAKu6K,YACvB8oK,WAAYV,GAAAA,aACZ3oK,eAAgBh6K,EAAKg6K,mBAInBixK,EAAoBrE,EAAMtwU,KAAI,SAAC4oI,GACnC,MAAO,CACLkoM,qBAAsBxC,EACtB2C,iBAAkBroM,EAAKq7B,YACvB8oK,WAAYV,GAAAA,IACZ3oK,eAAgB96B,EAAK86B,mBAInBkxK,EAAmBpB,EAAKxzU,KAAI,SAACmvM,GACjC,MAAO,CACL2hI,qBAAsBxC,EACtB2C,iBAAkB9hI,EAAIlrC,YACtB8oK,WAAYV,GAAAA,cACZ3oK,eAAgByrC,EAAIzrC,mBAIlBmxK,EAAwBpB,EAAUzzU,KAAI,SAAC80U,GAC3C,MAAO,CACLhE,qBAAsBxC,EACtB2C,iBAAkB6D,EAAS7wK,YAC3B8oK,WAAYV,GAAAA,mBACZ3oK,eAAgBoxK,EAASpxK,mBAIvBqxK,EAAoBt2C,EAAMz+R,KAAI,SAAC0wU,GACnC,MAAO,CACLI,qBAAsBxC,EACtB2C,iBAAkBP,EAAKzsK,YACvB8oK,WAAYV,GAAAA,SACZ3oK,eAAgBgtK,EAAKhtK,mBAInBsxK,EAAuBxvI,EAASxlM,KAAI,SAACihM,GACzC,MAAO,CACL6vI,qBAAsBxC,EACtB2C,iBAAkBhwI,EAAIh9B,YACtB8oK,WAAYV,GAAAA,eACZ3oK,eAAgBu9B,EAAIv9B,mBAIlBuxK,EAAoBvB,EAAM1zU,KAAI,SAACw+R,GACnC,MAAO,CACLsyC,qBAAsBxC,EACtB2C,iBAAkBzyC,EAAKv6H,YACvB8oK,WAAYV,GAAAA,KACZ3oK,eAAgB86H,EAAK96H,mBAIzB,MAAM,GAAN,UACK6wK,GADL,GAEKE,GAFL,GAGKC,GAHL,GAIKC,GAJL,GAKKC,GALL,GAMKC,GANL,GAOKE,GAPL,GAQKC,GARL,GASKC,KC9XMC,GAAW,SACtBz3R,EACA03R,EACAhqB,GAEA,OAAQgqB,GACN,KAAK9I,GAAAA,YACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAIm8P,YAAYJ,gBACxCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAIm8P,YAAYJ,gBAC7C,KAAK5G,GAAAA,OACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAIo8P,OAAOL,gBACnCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAIo8P,OAAOL,gBACxC,KAAK5G,GAAAA,aACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAIxtF,KAAKupV,gBACjCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAIxtF,KAAKupV,gBACtC,KAAK5G,GAAAA,IACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAIonN,IAAI20C,gBAChCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAIonN,IAAI20C,gBACrC,KAAK5G,GAAAA,cACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAI8uH,YAAYitI,gBACxCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAI8uH,YAAYitI,gBAC7C,KAAK5G,GAAAA,mBACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAI68P,iBAAiBd,gBAC7CoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAI68P,iBAAiBd,gBAClD,KAAK5G,GAAAA,SACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAIunN,MAAMw0C,gBAClCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAIunN,MAAMw0C,gBACvC,KAAK5G,GAAAA,eACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAIglH,QAAQ+2I,gBACpCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAIglH,QAAQ+2I,gBACzC,KAAK5G,GAAAA,KACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAIsnN,KAAKy0C,gBACjCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAIsnN,KAAKy0C,gBACtC,KAAK5G,GAAAA,IACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAI88P,IAAIf,gBAChCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAI88P,IAAIf,gBACrC,KAAK5G,GAAAA,IACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAI+8P,IAAIhB,gBAChCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAI+8P,IAAIhB,gBACrC,KAAK5G,GAAAA,IACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAIg9P,IAAIjB,gBAChCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAIg9P,IAAIjB,gBACrC,KAAK5G,GAAAA,KACH,OAAOlhB,EACHiqB,GAAS33R,GAAM,SAACy5B,GAAD,OAASA,EAAI+2I,KAAKglH,gBACjCoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAI+2I,KAAKglH,gBACtC,QACE,OAAOoC,GAAQ53R,GAAM,SAACy5B,GAAD,OAASA,EAAI/1E,QAIxC,SAASk0U,GACP53R,EACAp6B,GAEA,OAAOo6B,EAAK17C,MAAK,SAAC0O,EAAGuN,GAAJ,OAAWqF,EAAU5S,GAAK4S,EAAUrF,GAAK,GAAK,KAGjE,SAASo3T,GACP33R,EACAp6B,GAEA,OAAOo6B,EAAK17C,MAAK,SAAC0O,EAAGuN,GAAJ,OAAWqF,EAAU5S,GAAK4S,EAAUrF,IAAM,EAAI,KCnEjE,IAqCA,GArCsC,SAAC,GAGI,IAFzCyiL,EAEwC,EAFxCA,MACA60I,EACwC,EADxCA,SAEMt2U,EAAWi0J,IACXsuC,EAAS3vC,GAAY,SAAChkK,GAAD,OACzBihN,GAAgBjhN,EAAO6yM,MAezB,OACE,iCACE,oBACErrG,QAfc,WACdkgP,GAQJt2U,EAAS0vM,GAJ0B,CACjCjO,MAAAA,MAUEr2G,UAAS,kBAAakrP,EAAW,2BAA6B,IAC9Dn0U,GAAE,UAAKs/L,EAAL,oBAHJ,UAKE,eACEr2G,UAAS,2DACPm3G,EAAS,WAAa,gCCzBlC,SAASmuI,GAA4BxmV,GACnC,OAAKA,GAAmB,MAAVA,EAIPA,EAHE,IAMX,IAAM2mV,GAAqBrnB,KAE3B,SAASxkB,GAAa8rC,EAAoBl9T,GACxC,OACE,iBAAKw3E,UAAU,oBAAf,UACE,mBAAMA,UAAU,WAAhB,UACG0lP,EACAl9T,GACC,iBAAKw3E,UAAU,sDAAf,UACE,UAAC,GAAD,CAASjsE,KAAMmyM,GAAYq5G,WAG7B,+BAOH,IAAM4L,GAAgB,QA+P7B,SAAS5F,GAAaC,GACpB,OACE,kBAAKxlP,UAAU,oBAAf,WACE,UAAC,GAAD,CACE+kP,gBAAiBS,EACjBljB,YAAY,oBACZ6iB,aAAa,cAEf,kBAAMnlP,UAAU,gCAAhB,SAAiDwlP,OAIhD,ICrTK4F,GDqTCC,GAAkB,SAC7BvsV,EACAu3M,EACAi1I,EACAC,GAJ6B,OAM7B,kBAAKvrP,UAAU,6BAAf,WACE,iBAAKA,UAAU,oBAAf,UACE,UAAC,GAAD,CAA+Bq2G,MAAOA,EAAO60I,UAAWI,MAGzDC,GACC,UAAC,GAAD,UAAOhG,GAAazmV,KAEpBymV,GAAazmV,OAKN0sV,GAAwB,SACnCxqL,EACA6jL,GAFmC,OAInC,6BACE,iBAAK7kP,UAAU,gCAAf,SACGslP,GACC99J,KAAKmD,aAAa,QAAS,CACzBq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,iBAGlBhE,GACC,iBAAK7kP,UAAU,gCAAf,SACGslP,GACC99J,KAAKmD,aAAa,QAAS,CACzBq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,kBAInB,8BAKO2C,GAAmB,SAC9BzqL,EACA6jL,GAF8B,OAI9B,6BACE,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,gBAEhBhE,GACC,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,iBAGjB,8BAKO4C,GAAiB,SAC5B1qL,EACA6jL,GAF4B,OAI5B,6BACE,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,gBAEhBhE,GACC,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,iBAGjB,8BAKO6C,GAAgB,SAC3B3qL,EACA6jL,GAF2B,OAI3B,6BACE,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,gBAEhBhE,GACC,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,iBAGjB,8BAKO8C,GAAwB,SACnC5qL,EACA6jL,GAFmC,OAInC,6BACE,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,gBAEhBhE,GACC,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,iBAGjB,8BAKO+C,GAA6B,SACxC7qL,EACAga,EACA6pK,GAHwC,OAKxC,6BACE,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,kBAGlBhE,GACC,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,mBAInB,8BAKOgD,GAAiB,SAC5B9qL,EACA6jL,GAF4B,OAI5B,6BACE,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,gBAEhBhE,GACC,iBAAK7kP,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,iBAGjB,8BAKOiD,GAAoB,SAC/B/qL,EACAga,EACA6pK,GAH+B,OAK/B,6BACE,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,kBAGlBhE,GACC,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,mBAInB,8BAKOkD,GAAiB,SAC5BhrL,EACAga,EACA6pK,GAH4B,OAK5B,6BACE,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,kBAGlBhE,GACC,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,mBAInB,8BAKOmD,GAAgB,SAC3BjrL,EACAga,EACA6pK,GAH2B,OAK3B,6BACE,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,kBAGlBhE,GACC,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,mBAInB,8BAKOoD,GAAgB,SAC3BlrL,EACAga,EACA6pK,GAH2B,OAK3B,6BACE,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,kBAGlBhE,GACC,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,mBAInB,8BAKOqD,GAAgB,SAC3BnrL,EACAga,EACA6pK,GAH2B,OAK3B,6BACE,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,kBAGlBhE,GACC,iBAAK7kP,UAAU,UAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,mBAInB,8BAKOsD,GAAiB,SAC5BprL,EACA6jL,GAF4B,OAI5B,6BACE,iBAAK7kP,UAAU,UAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,gBAEhBhE,GACC,iBAAK7kP,UAAU,UAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOq/H,EAAK8nL,iBAGjB,8BExWN,GAhPmD,SAAC,GAG7C,IAFLuD,EAEI,EAFJA,mBACApE,EACI,EADJA,WAEMrzU,EAAWi0J,IACVk3I,EAAP,IAA2BruK,EAAAA,EAAAA,UAA2B,YAAtD,MACA,MAA8BA,EAAAA,EAAAA,UAAuB,IAArD,GAAOsmL,EAAP,KAAgBc,EAAhB,KACA,MAAoCpnL,EAAAA,EAAAA,UAAiB,IAArD,GAAO46M,EAAP,KAAmBC,EAAnB,KAEMC,EAAoBhlL,EAAYs3C,IAE9B9R,EAAuBxlC,GAAY,SAAChkK,GAAD,OACzCgqM,GAAmBhqM,EAAOwkV,GAAkBC,OADtCj7I,mBAGF61B,EAAuBr7D,EAAYuyC,IAEjCz4B,EAAoB9Z,GAC1B,SAAChkK,GAAD,OAAsBA,EAAMk+K,aADtBJ,gBAIF8gK,EAA2B56K,GAAY,SAAChkK,GAAD,OAC3C6+K,GAA4B7+K,EAAO89K,MAG/BujK,EAAwCr9K,GAC5C,SAAChkK,GAAD,OAAsBihL,GAAoCjhL,MAGtDipV,EAAkCjlL,GAAY,SAAChkK,GAAD,OAClDkhL,GAAmClhL,EAAO89K,MAGtCt8I,EAAQwiI,EAAY4jC,KAE1Bj6D,EAAAA,EAAAA,YAAU,WACRo7M,EAAcv/I,KACb,CAACA,IAEJ,IAAM0/I,GAAoDn7M,EAAAA,EAAAA,UAAQ,WAChE,MAAO,CACL40M,MAAOkG,EAAmB7H,KAAK2B,MAAMtzU,KACrCo2U,YAAaoD,EAAmB7H,KAAKyE,YAAYp2U,KACjDq2U,OAAQmD,EAAmB7H,KAAK0E,OAAOr2U,KACvCy2U,MAAO+C,EAAmB7H,KAAKpwC,KAAKvhS,KACpCu2U,KAAMiD,EAAmB7H,KAAK4E,KAAKv2U,KACnCw2U,UAAWgD,EAAmB7H,KAAK6E,UAAUx2U,KAC7CuoM,SAAUixI,EAAmB7H,KAAKppI,SAASvoM,KAC3CwhS,MAAOg4C,EAAmB7H,KAAKnwC,MAAMxhS,KACrCs2U,KAAMkD,EAAmB7H,KAAK0B,MAAMrzU,QAErC,CAACw5U,IAEEM,GAAoDp7M,EAAAA,EAAAA,UAAQ,WAChE,MAAO,CACL40M,MAAOkG,EAAmBp1S,QAAQkvS,MAAMtzU,KACxCo2U,YAAaoD,EAAmBp1S,QAAQgyS,YAAYp2U,KACpDq2U,OAAQmD,EAAmBp1S,QAAQiyS,OAAOr2U,KAC1Cy2U,MAAO+C,EAAmBp1S,QAAQm9P,KAAKvhS,KACvCu2U,KAAMiD,EAAmBp1S,QAAQmyS,KAAKv2U,KACtCw2U,UAAWgD,EAAmBp1S,QAAQoyS,UAAUx2U,KAChDuoM,SAAUixI,EAAmBp1S,QAAQmkK,SAASvoM,KAC9CwhS,MAAOg4C,EAAmBp1S,QAAQo9P,MAAMxhS,KACxCs2U,KAAMkD,EAAmBp1S,QAAQivS,MAAMrzU,QAExC,CAACw5U,IAEEhzK,GAAa9nC,EAAAA,EAAAA,UAAQ,WACzB,IAAM8nC,EAAa0vK,GAAW2D,EAAmBC,GAC3CC,EAAW7C,GAAe1wK,GAE1BwzK,EAAO,aAAOxzK,GAAP,CAAmBuzK,IAOhC,OAJE50B,EAAQn6T,OAAS,EACbitV,GAAS+B,EAAS70B,EAAQ,GAAGjhT,GAAIihT,EAAQ,GAAG18Q,MAC5CwvS,GAAS+B,EAAS1B,IAAe,KAGtC,CAACuB,EAAmBC,EAAmB30B,IAEpC40B,GAAWr7M,EAAAA,EAAAA,UAAQ,WAEvB,OADiBw4M,GAAe1wK,KAE/B,CAACA,IAEEkyK,GAAwBh6M,EAAAA,EAAAA,UAAQ,WACpC,MAAqC,YAApB,OAAV02M,QAAU,IAAVA,OAAA,EAAAA,EAAY7qT,iBAClB,CAAC6qT,IAEE9qB,GAAa5rL,EAAAA,EAAAA,UAAQ,WACzB,OXpFkC,SACpCu7M,EACAvB,EACA1G,EACAwH,EACArxK,GAEA,IAAM+xK,EACJV,EAAmB7H,KAAKyE,YAAYn5K,WAChCk9K,EAA2BX,EAAmB7H,KAAK0E,OAAOp5K,WAC1Dm9K,EAA0BZ,EAAmB7H,KAAK2B,MAAMr2K,WACxDo9K,EAA0Bb,EAAmB7H,KAAK0B,MAAMp2K,WACxDq9K,EAAyBd,EAAmB7H,KAAK4E,KAAKt5K,WACtDs9K,EACJf,EAAmB7H,KAAK6E,UAAUv5K,WAC9Bu9K,EAA0BhB,EAAmB7H,KAAKnwC,MAAMvkI,WACxDw9K,EAA4BjB,EAAmB7H,KAAKppI,SAAStrC,WAC7Dy9K,EAAyBlB,EAAmB7H,KAAKpwC,KAAK5rR,UACtDglU,EACJnB,EAAmBp1S,QAAQgyS,YAAYn5K,WACnC29K,EACJpB,EAAmBp1S,QAAQiyS,OAAOp5K,WAC9B49K,EACJrB,EAAmBp1S,QAAQkvS,MAAMr2K,WAC7B69K,EACJtB,EAAmBp1S,QAAQivS,MAAMp2K,WAC7B89K,EAA4BvB,EAAmBp1S,QAAQmyS,KAAKt5K,WAC5D+9K,EACJxB,EAAmBp1S,QAAQoyS,UAAUv5K,WACjCg+K,EACJzB,EAAmBp1S,QAAQo9P,MAAMvkI,WAC7Bi+K,EACJ1B,EAAmBp1S,QAAQmkK,SAAStrC,WAChCk+K,EAA4B3B,EAAmBp1S,QAAQm9P,KAAKtkI,WAElE,MAAO,CACL21K,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI5K,QAAO,CAC9CnrE,GAAI,QACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJulV,GACE,UAAC,GAAD,UAAOhG,GAAav/U,EAAK8gH,cAEzBy+N,GAAav/U,EAAK8gH,aAEtB10G,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,SAGV53B,oBAAoB,EACpBrlK,QAAS,MAEX4hM,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIm8P,cAAa,CACpDlyU,GAAIkrU,GAAAA,YACJ35P,OAAQ,kBACNsxN,GACE,cACAmzC,GAAiCS,IAErC5kC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,yBAAhB,SACGslP,GACC99J,KAAKmD,aAAa,QAAS,CACzBq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,kBAG9ChE,GACC,iCACE,kBAAM7kP,UAAU,yBAAhB,SACGslP,GACC99J,KAAKmD,aAAa,QAAS,CACzBq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,qBAKjD,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIo8P,SAAQ,CAC/CnyU,GAAIkrU,GAAAA,OACJ35P,OAAQ,kBACNsxN,GACE,SACAozC,GAA4BS,IAEhC7kC,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,yBAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,iBAE5ChE,GACC,iCACE,kBAAM7kP,UAAU,yBAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,oBAI/C,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIxtF,OAAM,CAC7CyX,GAAIkrU,GAAAA,aACJ35P,OAAQ,kBACNsxN,GACE,QACAqzC,GAA2BS,IAE/B9kC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,yBAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,iBAE5ChE,GACC,kBAAM7kP,UAAU,yBAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,kBAG7C,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIonN,MAAK,CAC5Cn9R,GAAIkrU,GAAAA,IACJ35P,OAAQ,kBACNsxN,GACE,QACAszC,GAA2BS,IAE/B/kC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mBAAMg6F,UAAU,WAAhB,WACE,kBAAMA,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,iBAEhB,UAA5B7iV,EAAK8mF,IAAIs5E,SAASlkF,OACjB,kBAAM8d,UAAU,yBAAhB,SACG4lP,IACE5/U,EAAK8gH,YACLgmO,EAAmB54C,IAAI20C,iBAI5B,0BAEDhE,GACC,mCACE,oBACA,kBAAM7kP,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,qBAI/C,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI8uH,cAAa,CACpD7kM,GAAIkrU,GAAAA,cACJ35P,OAAQ,kBACNsxN,GACE,OACAuzC,GAA0BS,IAE9BhlC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mBAAMg6F,UAAU,WAAhB,WACE,kBAAMA,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,iBAE5ChE,GACC,mCACE,oBACA,kBAAM7kP,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,qBAI/C,0BAE2B,UAA5B9iV,EAAK8mF,IAAIs5E,SAASlkF,OACjB,kBAAM8d,UAAU,yBAAhB,SACG4lP,IACE5/U,EAAK8gH,YACLgmO,EAAmBlxI,YAAYitI,iBAIpC,8BAIN90T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI68P,mBAAkB,CACzD5yU,GAAIkrU,GAAAA,mBACJ35P,OAAQ,kBACNsxN,GACE,cACAwzC,GAA+BS,IAEnCjlC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,mBAG9ChE,GACC,iCACE,kBAAM7kP,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,sBAKjD,8BAIN/0T,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIunN,QAAO,CAC9Ct9R,GAAIkrU,GAAAA,SACJ35P,OAAQ,kBACNsxN,GACE,QACAyzC,GAA2BS,IAE/BllC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mBAAMg6F,UAAU,WAAhB,WACE,kBAAMA,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,iBAEhB,UAA5B7iV,EAAK8mF,IAAIs5E,SAASlkF,OACjB,kBAAM8d,UAAU,yBAAhB,SACG4lP,IACE5/U,EAAK8gH,YACLgmO,EAAmBz4C,MAAMw0C,iBAI9B,0BAEDhE,GACC,mCACE,oBACA,kBAAM7kP,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,qBAI/C,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIglH,UAAS,CAChD/6L,GAAIkrU,GAAAA,eACJ35P,OAAQ,kBACNsxN,GACE,UACA0zC,GAA6BS,IAEjCnlC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,mBAG9ChE,GACC,kBAAM7kP,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,oBAI/C,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIsnN,OAAM,CAC7Cr9R,GAAIkrU,GAAAA,KACJ35P,OAAQ,kBACNsxN,GACE,OACA2zC,GAA0BS,IAE9BplC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,mBAG9ChE,GACC,kBAAM7kP,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,oBAI/C,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI88P,MAAK,CAC5C7yU,GAAIkrU,GAAAA,IACJ35P,OAAQ,kBACNsxN,GACE,MACA2zC,GACEL,GACAD,GACAe,GACAL,GACAD,IAEN9kC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,mBAG9ChE,GACC,kBAAM7kP,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,oBAI/C,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI+8P,MAAK,CAC5C9yU,GAAIkrU,GAAAA,IACJ35P,OAAQ,kBACNsxN,GACE,MACA2zC,GACEF,GACAW,GACAF,IAENllC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,mBAG9ChE,GACC,kBAAM7kP,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,oBAI/C,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIg9P,MAAK,CAC5C/yU,GAAIkrU,GAAAA,IACJ35P,OAAQ,kBACNsxN,GACE,MACA2zC,GACED,GACAU,GACAD,IAENnlC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,mBAG9ChE,GACC,kBAAM7kP,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,oBAI/C,8BAIN/0T,KAAM4xT,KAERF,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI+2I,OAAM,CAC7C9sN,GAAIkrU,GAAAA,KACJ35P,OAAQ,kBACNsxN,GACE,OACA2zC,GACED,GACAU,GACAD,IAENnlC,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,mCACE,kBAAMg6F,UAAU,yBAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAW+hO,iBAE5ChE,GACC,kBAAM7kP,UAAU,yBAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO0jT,GAAiBr/U,EAAK8gH,WAAWgiO,kBAG7C,8BAIN/0T,KAAM4xT,MAER5kV,QAAO,SAAC0wF,GAAD,YAAuB1rF,IAAX0rF,KWrbZw8P,CACLrB,EACArB,EACA1G,EACAwH,EACAxpH,KAED,CACD+pH,EACA/pH,EACA0oH,EACA1G,EACAwH,IAGI/H,GAAgB/yM,EAAAA,EAAAA,UAAQ,WAC5B,IAAM28M,EAAqBhE,GACzB9H,EACAiK,EAAmB7H,KAAKyE,YAAYp2U,KACpCw5U,EAAmB7H,KAAK0E,OAAOr2U,KAC/Bw5U,EAAmB7H,KAAK2B,MAAMtzU,KAC9Bw5U,EAAmB7H,KAAK0B,MAAMrzU,KAC9Bw5U,EAAmB7H,KAAK4E,KAAKv2U,KAC7Bw5U,EAAmB7H,KAAK6E,UAAUx2U,KAClCw5U,EAAmB7H,KAAKnwC,MAAMxhS,KAC9Bw5U,EAAmB7H,KAAKppI,SAASvoM,KACjCw5U,EAAmB7H,KAAKpwC,KAAKvhS,MAG/B,OAAO0zU,GACL2H,EACA9L,EACAqK,EAAgC11U,MAEjC,CACDs1U,EACAjK,EACAqK,IAGI3I,GAAevyM,EAAAA,EAAAA,UAAQ,WAS3B,MARmC,CACjC6yM,uBAAwBjnB,EAAWvnT,KAAI,SAAC67E,GAAD,OAAYA,EAAO16E,MAC1DutU,cAAAA,EACAt/S,MAAAA,EACAg2I,aAAc6nD,EACdlvD,WAAYq5B,EACZk3I,iBAAkB9B,KAGnB,CACDjlB,EACAn4R,EACA69L,EACA71B,EACAo1I,EACAkC,IAGI6J,EAAcrsB,GAAc,CAChCjvT,KAAMwmK,EACN9wF,QAAS40O,EACTvC,eAAe,EACfp3T,MAAO,CACLw0T,QAAAA,EACApQ,aAAc0kC,EACd78B,WAAY,CACVC,UAAW88B,EAAkB7+I,YAAc,EAC3CnnD,SAAUgmM,EAAkBhuI,kBAGhC05G,gBAAiBY,EACjB3Q,gBAAiBA,KACjBkD,oBAAqBA,KACrBvD,qBAAsBykC,EACtBh7B,sBAAuBA,KACvBtJ,eAAgBg2B,GAChBj9B,sBAAsB,EACtBjB,iBAAAA,EACAoR,YAAY,EACZ5V,cAAc,EACdoY,cAAc,IAGVy6B,EAAoBD,EAAY9iC,sBAAsBh4P,KAAKx1D,OAE3DwwV,GAAS98M,EAAAA,EAAAA,UAAQ,WAkBrB,MAjBkC,CAChC+2M,UAAU,EACV36I,YAAa6+I,EAAkB7+I,YAC/B6Q,gBAAiBguI,EAAkBhuI,gBACnCC,UAAW+tI,EAAkB/tI,UAAU7oM,KACrC,SAAC4wI,GACC,IAAM8nM,EAAiB9nM,EAASh9I,WAChC,MAAO,CACL7J,IAAK2uV,EACLhiP,MAAOgiP,EACPniL,SAAU3lB,IAAagmM,EAAkBhuI,oBAI/CnP,aAAc++I,KAIf,CAAC5B,EAAmB4B,IAEvB,OACE,mCACE,iBAAKpuP,UAAU,SAAf,UACE,UAAC,GAAD,CACEiuG,YAAa+5I,GAAkBC,GAC/BnE,aAAcA,MAGjBzqK,GAAcuzK,GACb,UAAC,GAAD,CAA2B5sP,UAAU,qGAArC,UACE,mCACE,UAACghP,GAAD,CAEE/yI,YAAa+5I,GAAkBC,GAC/BllJ,MAAOorJ,EACP/M,cAAc,wBAJhB,UACU6G,EADV,YAWA,UAAC,GAAD,CACEt6I,YAAa0gJ,EAAO1gJ,YACpB6Q,gBAAiB6vI,EAAO7vI,gBACxB5P,WAAYu/I,EAAYl9B,eACxB5hH,aAAcg/I,EAAOh/I,aACrBoP,UAAW4vI,EAAO5vI,UAClB6pI,SAAU+F,EAAO/F,SACjB3pI,eAAgB,kBAAM/pM,EAAS+pM,OAC/BC,WAAY,kBAAMhqM,EAASgqM,OAC3BC,kBAAmB,SAAC0vI,GAAD,OACjB35U,EAASiqM,GAAkB0vI,aAMnC,+BDpSR,SAAYnD,GAAAA,EAAAA,OAAAA,SAAAA,EAAAA,eAAAA,gBAAAA,EAAAA,uBAAAA,wBAAAA,EAAAA,QAAAA,SAAAA,EAAAA,YAAAA,cAAAA,EAAAA,QAAAA,UAAAA,EAAAA,MAAAA,QAAAA,EAAAA,YAAAA,cAAAA,EAAAA,kBAAAA,mBAAZ,CAAYA,KAAAA,GAAAA,KEEL,IAAMoD,GAAmB,SAACvG,GAC/B,OAAQA,GACN,IAAK,SACH,OAAO1yK,GAAek5K,iBACxB,IAAK,WACH,OAAOl5K,GAAemD,QACxB,IAAK,eACH,OAAOnD,GAAeoD,aACxB,IAAK,WACH,OAAOpD,GAAeqD,SACxB,IAAK,eACH,OAAOrD,GAAesD,aACxB,IAAK,aACH,OAAOtD,GAAeuD,WACxB,IAAK,cACH,OAAOvD,GAAewD,YACxB,IAAK,UACH,OAAOxD,GAAem5K,QACxB,IAAK,KACH,OAAOn5K,GAAeo5K,gBACxB,IAAK,SACH,OAAOp5K,GAAeq5K,OACxB,QACE,MAAMjrV,MAAM,kDAAD,OACyCskV,MCJ7C4G,GAAc,WACzB,IAAQ5G,EAAe70H,KAAf60H,WAGA3mK,GAFSzY,IAEWrB,GAC1B,SAAChkK,GAAD,OAAsBA,EAAMk+K,aADtBJ,iBAIF8gK,EAA2B56K,GAAY,SAAChkK,GAK5C,OAJiC6+K,GAC/B7+K,EACA89K,MAKEwtK,EAAqCtnL,GAAY,SAAChkK,GACtD,OAAOihL,GAAoCjhL,MAGvC6oV,ECiBwB,SAC9BpE,GAEA,IAAMjjT,EAAQwiI,EAAY4jC,IAClB/wB,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OAEF00K,EAAoBvnL,EAAYid,IAE9BnD,EAAoB9Z,GAC1B,SAAChkK,GAAD,OAAsBA,EAAMk+K,aADtBJ,gBAIF8gK,EAA2B56K,GAAY,SAAChkK,GAM5C,OALiC6+K,GAC/B7+K,EACA89K,MAMQmrK,EAAoCjlL,GAC9C,SAAChkK,GAAD,OACEkhL,GAAmClhL,EAAO89K,MAFtCvqK,GAKF8rN,EAAuBr7D,EAAYuyC,IAEnCi1I,GAAUz9M,EAAAA,EAAAA,UAAQ,kBAAMqrE,OAAQ,IAEhCqyI,EAAoB,SACxBhH,GAEA,MAAO,CACL,CACEiH,QAAS,GACT/jO,MAAO,EACPyuD,gBAAiB40K,GAAiBvG,GAClC7lI,UAAW4sI,EACXxtI,YAAanB,GAAaoB,mBAKhC,EAII99B,GAAsB,CACxBh/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BgE,YAC9C1I,qBAAsBtE,EACtBpnK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,KAV7BoH,EADR,EACEx8U,KACWy8U,EAFb,EAEE9mU,UACY+mU,EAHd,EAGEz/K,WAWF,EAII8T,GAA4B,CAC9Bj/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BoE,eAC9C9I,qBAAsBtE,EACtBpnK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,KAV7BwH,EADR,EACE58U,KACW68U,EAFb,EAEElnU,UACYmnU,EAHd,EAGE7/K,WAWF,EAII8T,GAA4B,CAC9Bj/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BwE,uBAC9ClJ,qBAAsBtE,EACtBpnK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,KAV7B4H,EADR,EACEh9U,KACWi9U,EAFb,EAEEtnU,UACYunU,EAHd,EAGEjgL,WAWF,EAII4T,GAAwB,CAC1B/+I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+B4E,OAC9CtJ,qBAAsBtE,EACtBpnK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,KAV7BgI,EADR,EACEp9U,KACWq9U,EAFb,EAEE1nU,UACY2nU,EAHd,EAGErgL,WAWF,EAII6T,GAAsB,CACxBh/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BgF,QAC9C1J,qBAAsBtE,EACtBpnK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,KAV7BoI,EADR,EACEx9U,KACWy9U,EAFb,EAEE9nU,UACY+nU,EAHd,EAGEzgL,WAWF,EAII+T,GAAyB,CAC3Bl/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BoF,QAC9C9J,qBAAsBtE,EACtBpnK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,KAV7BwI,EADR,EACE59U,KACW69U,EAFb,EAEEloU,UACYmoU,EAHd,EAGE7gL,WAWF,EAII+T,GAAyB,CAC3Bl/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BwF,MAC9ClK,qBAAsBtE,EACtBpnK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,KAV7B4I,EADR,EACEh+U,KACWi+U,EAFb,EAEEtoU,UACYuoU,EAHd,EAGEjhL,WAWF,EAIIgU,GAA6B,CAC/Bn/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+B4F,YAC9CtK,qBAAsBtE,EACtBpnK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,KAV7BgJ,EADR,EACEp+U,KACWq+U,EAFb,EAEE1oU,UACY2oU,EAHd,EAGErhL,WAWF,EAIIgU,GAA6B,CAC/Bn/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BgG,kBAC9C1K,qBAAsBtE,EACtBpnK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,KAV7BoJ,EADR,EACEx+U,KACWy+U,EAFb,EAEE9oU,UACY+oU,EAHd,EAGEzhL,WAWF,EAII6T,GACF,CACEh/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BgE,YAC9C1I,qBAAsB+F,EACtBzxK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,IAErC,CACEx3K,MAAOs+K,IAdHyC,EADR,EACE3+U,KACW4+U,EAFb,EAEEjpU,UACYkpU,EAHd,EAGE5hL,WAgBF,EAII8T,GACF,CACEj/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BoE,eAC9C9I,qBAAsB+F,EACtBzxK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,IAErC,CACEx3K,MAAOs+K,IAdH4C,EADR,EACE9+U,KACW++U,GAFb,EAEEppU,UACYqpU,GAHd,EAGE/hL,WAgBF,GAII8T,GACF,CACEj/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BwE,uBAC9ClJ,qBAAsB+F,EACtBzxK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,IAErC,CACEx3K,MAAOs+K,IAdH+C,GADR,GACEj/U,KACWk/U,GAFb,GAEEvpU,UACYwpU,GAHd,GAGEliL,WAgBF,GAII4T,GACF,CACE/+I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+B4E,OAC9CtJ,qBAAsB+F,EACtBzxK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,IAErC,CACEx3K,MAAOs+K,IAdHkD,GADR,GACEp/U,KACWq/U,GAFb,GAEE1pU,UACY2pU,GAHd,GAGEriL,WAgBF,GAII6T,GACF,CACEh/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BgF,QAC9C1J,qBAAsB+F,EACtBzxK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,IAErC,CACEx3K,MAAOs+K,IAdHqD,GADR,GACEv/U,KACWw/U,GAFb,GAEE7pU,UACY8pU,GAHd,GAGExiL,WAgBF,GAII+T,GACF,CACEl/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BoF,QAC9C9J,qBAAsB+F,EACtBzxK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,IAErC,CACEx3K,MAAOs+K,IAdHwD,GADR,GACE1/U,KACW2/U,GAFb,GAEEhqU,UACYiqU,GAHd,GAGE3iL,WAgBF,GAII+T,GACF,CACEl/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BwF,MAC9ClK,qBAAsB+F,EACtBzxK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,IAErC,CACEx3K,MAAOs+K,IAdH2D,GADR,GACE7/U,KACW8/U,GAFb,GAEEnqU,UACYoqU,GAHd,GAGE9iL,WAgBF,GAIIgU,GACF,CACEn/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+B4F,YAC9CtK,qBAAsB+F,EACtBzxK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,IAErC,CACEx3K,MAAOs+K,IAdH8D,GADR,GACEhgV,KACWigV,GAFb,GAEEtqU,UACYuqU,GAHd,GAGEjjL,WAgBF,GAIIgU,GACF,CACEn/I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bw1I,OAAAA,EACA80K,cAAe/D,GAA+BgG,kBAC9C1K,qBAAsB+F,EACtBzxK,aAAc6nD,EACdzpD,gBAAiB61K,EAAkBhH,IAErC,CACEx3K,MAAOs+K,IAdHiE,GADR,GACEngV,KACWogV,GAFb,GAEEzqU,UAiBF,MAAO,CACLg8T,KAAM,CACJyE,YAAa,CACXn5K,WAAYy/K,EACZ/mU,UAAW8mU,EACXz8U,KAAI,OAAEw8U,QAAF,IAAEA,EAAAA,EAAyB,IAEjCnG,OAAQ,CACNp5K,WAAYqgL,EACZ3nU,UAAW0nU,EACXr9U,KAAI,OAAEo9U,QAAF,IAAEA,EAAAA,EAAoB,IAE5B9J,MAAO,CACLr2K,WAAYigL,EACZvnU,UAAWsnU,EACXj9U,KAAI,OAAEg9U,QAAF,IAAEA,EAAAA,EAAoC,IAE5C3J,MAAO,CACLp2K,WAAY6/K,EACZnnU,UAAWknU,EACX78U,KAAI,OAAE48U,QAAF,IAAEA,EAAAA,EAA4B,IAEpCrG,KAAM,CACJt5K,WAAYqhL,EACZ3oU,UAAW0oU,EACXr+U,KAAI,OAAEo+U,QAAF,IAAEA,EAAAA,EAAyB,IAEjC5H,UAAW,CACTv5K,WAAYyhL,EACZ/oU,UAAW8oU,EACXz+U,KAAI,OAAEw+U,QAAF,IAAEA,EAAAA,EAA+B,IAEvCh9C,MAAO,CACLvkI,WAAYihL,EACZvoU,UAAWsoU,EACXj+U,KAAI,OAAEg+U,QAAF,IAAEA,EAAAA,EAAmB,IAE3Bz1I,SAAU,CACRtrC,WAAY6gL,EACZnoU,UAAWkoU,EACX79U,KAAI,OAAE49U,QAAF,IAAEA,EAAAA,EAAqB,IAE7Br8C,KAAM,CACJtkI,WAAYygL,EACZ/nU,UAAW8nU,EACXz9U,KAAI,OAAEw9U,QAAF,IAAEA,EAAAA,EAAkB,KAG5Bp5S,QAAS,CACPgyS,YAAa,CACXn5K,WAAY4hL,EACZlpU,UAAWipU,EACX5+U,KAAI,OAAE2+U,QAAF,IAAEA,EAAAA,EAAgC,IAExCtI,OAAQ,CACNp5K,WAAYqiL,GACZ3pU,UAAW0pU,GACXr/U,KAAI,OAAEo/U,SAAF,IAAEA,GAAAA,GAA2B,IAEnC9L,MAAO,CACLr2K,WAAYkiL,GACZxpU,UAAWupU,GACXl/U,KAAI,OAAEi/U,SAAF,IAAEA,GAAAA,GAA2C,IAEnD5L,MAAO,CACLp2K,WAAY+hL,GACZrpU,UAAWopU,GACX/+U,KAAI,OAAE8+U,QAAF,IAAEA,EAAAA,EAAmC,IAE3CvI,KAAM,CACJt5K,WAAYijL,GACZvqU,UAAWsqU,GACXjgV,KAAI,OAAEggV,SAAF,IAAEA,GAAAA,GAAgC,IAExCxJ,UAAW,CACTv5K,WA9FN,GAGEA,WA4FItnJ,UAAWyqU,GACXpgV,KAAI,OAAEmgV,SAAF,IAAEA,GAAAA,GAAsC,IAE9C3+C,MAAO,CACLvkI,WAAY8iL,GACZpqU,UAAWmqU,GACX9/U,KAAI,OAAE6/U,SAAF,IAAEA,GAAAA,GAA0B,IAElCt3I,SAAU,CACRtrC,WAAY2iL,GACZjqU,UAAWgqU,GACX3/U,KAAI,OAAE0/U,SAAF,IAAEA,GAAAA,GAA4B,IAEpCn+C,KAAM,CACJtkI,WAAYwiL,GACZ9pU,UAAW6pU,GACXx/U,KAAI,OAAEu/U,SAAF,IAAEA,GAAAA,GAAyB,MDlcVc,CAAgB,OAACjL,QAAD,IAACA,EAAAA,EAAc,IAEpDkL,EACW,WAAflL,IAA4B6G,EAEtB9hJ,EAAuBxlC,GAAY,SAAChkK,GAAD,OACzCgqM,GAAmBhqM,EAAOwkV,GAAkBC,OADtCj7I,mBAIFomJ,GAAe7hN,EAAAA,EAAAA,UAAQ,WAC3B,OACE86M,EAAmB7H,KAAKyE,YAAYzgU,WACpC6jU,EAAmB7H,KAAK2B,MAAM39T,WAC9B6jU,EAAmB7H,KAAK0B,MAAM19T,WAC9B6jU,EAAmB7H,KAAK0E,OAAO1gU,WAC/B6jU,EAAmB7H,KAAKpwC,KAAK5rR,WAC7B6jU,EAAmB7H,KAAKppI,SAAS5yL,WACjC6jU,EAAmB7H,KAAKnwC,MAAM7rR,WAC9B6jU,EAAmB7H,KAAK4E,KAAK5gU,WAC7B6jU,EAAmB7H,KAAK6E,UAAU7gU,WAClC6jU,EAAmBp1S,QAAQgyS,YAAYzgU,WACvC6jU,EAAmBp1S,QAAQkvS,MAAM39T,WACjC6jU,EAAmBp1S,QAAQivS,MAAM19T,WACjC6jU,EAAmBp1S,QAAQiyS,OAAO1gU,WAClC6jU,EAAmBp1S,QAAQm9P,KAAK5rR,WAChC6jU,EAAmBp1S,QAAQmkK,SAAS5yL,WACpC6jU,EAAmBp1S,QAAQo9P,MAAM7rR,WACjC6jU,EAAmBp1S,QAAQmyS,KAAK5gU,WAChC6jU,EAAmBp1S,QAAQoyS,UAAU7gU,YAEtC,CAAC6jU,IAEEgH,GAAgB9hN,EAAAA,EAAAA,UAAQ,WAC5B,OACE86M,EAAmB7H,KAAKyE,YAAYn5K,YACpCu8K,EAAmB7H,KAAK2B,MAAMr2K,YAC9Bu8K,EAAmB7H,KAAK0B,MAAMp2K,YAC9Bu8K,EAAmB7H,KAAK0E,OAAOp5K,YAC/Bu8K,EAAmB7H,KAAKpwC,KAAKtkI,YAC7Bu8K,EAAmB7H,KAAKppI,SAAStrC,YACjCu8K,EAAmB7H,KAAKnwC,MAAMvkI,YAC9Bu8K,EAAmB7H,KAAK4E,KAAKt5K,YAC7Bu8K,EAAmB7H,KAAK6E,UAAUv5K,YAClCu8K,EAAmBp1S,QAAQgyS,YAAYn5K,YACvCu8K,EAAmBp1S,QAAQkvS,MAAMr2K,YACjCu8K,EAAmBp1S,QAAQivS,MAAMp2K,YACjCu8K,EAAmBp1S,QAAQiyS,OAAOp5K,YAClCu8K,EAAmBp1S,QAAQm9P,KAAKtkI,YAChCu8K,EAAmBp1S,QAAQmkK,SAAStrC,YACpCu8K,EAAmBp1S,QAAQo9P,MAAMvkI,YACjCu8K,EAAmBp1S,QAAQmyS,KAAKt5K,YAChCu8K,EAAmBp1S,QAAQoyS,UAAUv5K,aAEtC,CAACu8K,IAEEiH,GAAkB/hN,EAAAA,EAAAA,UAAQ,WAC9B,MAAM,GAAN,UACK86M,EAAmB7H,KAAKyE,YAAYp2U,MADzC,GAEKw5U,EAAmB7H,KAAK2B,MAAMtzU,MAFnC,GAGKw5U,EAAmB7H,KAAK0B,MAAMrzU,MAHnC,GAIKw5U,EAAmB7H,KAAK0E,OAAOr2U,MAJpC,GAKKw5U,EAAmB7H,KAAKpwC,KAAKvhS,MALlC,GAMKw5U,EAAmB7H,KAAKppI,SAASvoM,MANtC,GAOKw5U,EAAmB7H,KAAKnwC,MAAMxhS,MAPnC,GAQKw5U,EAAmB7H,KAAK4E,KAAKv2U,MARlC,GASKw5U,EAAmB7H,KAAK6E,UAAUx2U,MATvC,GAUKw5U,EAAmBp1S,QAAQgyS,YAAYp2U,MAV5C,GAWKw5U,EAAmBp1S,QAAQkvS,MAAMtzU,MAXtC,GAYKw5U,EAAmBp1S,QAAQivS,MAAMrzU,MAZtC,GAaKw5U,EAAmBp1S,QAAQiyS,OAAOr2U,MAbvC,GAcKw5U,EAAmBp1S,QAAQm9P,KAAKvhS,MAdrC,GAeKw5U,EAAmBp1S,QAAQmkK,SAASvoM,MAfzC,GAgBKw5U,EAAmBp1S,QAAQo9P,MAAMxhS,MAhBtC,GAiBKw5U,EAAmBp1S,QAAQmyS,KAAKv2U,MAjBrC,GAkBKw5U,EAAmBp1S,QAAQoyS,UAAUx2U,SAEzC,CAACw5U,IAEEkH,GAAmBhiN,EAAAA,EAAAA,UAAQ,WAC/B,GAAI+hN,EACF,OXvG2C,SAC/Cr6K,EACAmpK,EACAoR,GAEA,IAAMC,EAAoBD,EAAap2T,cAEjCwwQ,EAAwC30H,EAC3Cl4K,QACC,SAACm4K,GAAD,OACEA,EAAOwtK,uBAAyBtE,GAChClpK,EAAOI,eAAel8I,cAAcvjB,SAAS45U,MAEhD79U,KAoBH,SACEsjK,GAQA,MANwC,CACtC62H,gBAAiB72H,EAAOI,eACxB40H,iBAAkBw0C,GAA0BxpK,EAAOypK,YACnD7jV,MAAOo6K,EAAO2tK,qBARlB,MAhBiC,CAC/B9vU,GAAI6lM,KACJ1M,MAAO,GACP3rM,KAAM2xN,GAActyH,OACpBisM,wBAAyB55E,GAAiBwR,YAC1CisE,6BAA6B,EAC7B/G,YAAa,IAAInlH,KAAKmD,aAAa,QAAS,CAAEq5C,sBAAuB,IACrE+kE,cAAe,IAAIvhH,KAAKmD,aAAa,QAAS,CAC5Cq5C,sBAAuB,IAEzB4oE,WAAY,GACZC,WAAY,GACZe,cAAAA,EACAb,eAAe,GW2EN2mD,CACLxJ,GACE9H,EACAiK,EAAmB7H,KAAKyE,YAAYp2U,KACpCw5U,EAAmB7H,KAAK0E,OAAOr2U,KAC/Bw5U,EAAmB7H,KAAK2B,MAAMtzU,KAC9Bw5U,EAAmB7H,KAAK0B,MAAMrzU,KAC9Bw5U,EAAmB7H,KAAK4E,KAAKv2U,KAC7Bw5U,EAAmB7H,KAAK6E,UAAUx2U,KAClCw5U,EAAmB7H,KAAKnwC,MAAMxhS,KAC9Bw5U,EAAmB7H,KAAKppI,SAASvoM,KACjCw5U,EAAmB7H,KAAKpwC,KAAKvhS,MAE/BuvU,EACAp1I,KAGH,CACDq/I,EACAjK,EACAp1I,EACAsmJ,IAGF,OACE,iCACE,WAAC,GAAD,CAAmBtzP,UAAU,GAA7B,UACGmzP,GACC,UAAC,GAAD,CAAMnzP,UAAU,kBAAhB,UACE,iBAAKA,UAAU,oBAAf,SACIozP,GAAiBC,IAAiBE,GAGlC,UAAC,GAAD,KAFA,UAAC,GAAD,CAAajnJ,MAAOinJ,SAO1B,2BAEF,UAAC,GAAD,CACElH,mBAAoBA,EACpBpE,WAAYA,UExJhB0L,GACJ,iHA2LF,GAzLwB,WACtB,UAAkCjiN,EAAAA,EAAAA,UAAuB,CACvDnV,SAAU,GACVq3N,SAAU,KAFZ,GAAOC,EAAP,KAAkBC,EAAlB,KAKA,MAAoCpiN,EAAAA,EAAAA,UAA0B,CAC5DqiN,gBAAiB,KACjBC,gBAAiB,KACjBC,sCAAsC,IAHxC,GAAOC,EAAP,KAAmBC,EAAnB,KAMA,KAAoCp9K,KAApC,GAAOf,EAAP,YAAgBttJ,EAAhB,EAAgBA,QAAS9iB,EAAzB,EAAyBA,MACnBqtN,EAAWH,KAwBXshI,EAAe,SAAC,GAEsB,IAAD,IADzCjzV,OAAUmG,EAC+B,EAD/BA,KAAMxI,EACyB,EADzBA,MAEhBq1V,EAAc,CACZJ,iBAAiB,EACjBC,iBAAiB,EACjBC,sCAAsC,IAExCH,GAAa,SAAC9rV,GAAD,gBAAC,WAAeA,GAAhB,cAAuBV,EAAOxI,QAG7C,OACE,iCACE,sBAASkhG,UAAU,sCAAnB,WACE,kBAAKA,UAAU,mFAAf,WACE,iBACEg5C,IAAI,yBACJh5C,UAAU,OACV02H,IAAI,qBAEN,mBACE+rH,SAAU,SAAC1jV,GACT,IAAMmmG,EAAO,+BAAG,wFACdnmG,EAAEgrD,iBAEG8pS,EAAUD,UAAaC,EAAUt3N,SAHxB,uBAIZ43N,EAAc,CACZJ,iBAAiB,EACjBC,iBAAiB,EACjBC,sCAAsC,IAP5B,6BAYTJ,EAAUD,SAZD,uBAaZO,EAAc,CACZJ,iBAAiB,EACjBC,iBAAiB,EACjBC,sCAAsC,IAhB5B,6BAqBTJ,EAAUt3N,SArBD,wBAsBZ43N,EAAc,CACZJ,iBAAiB,EACjBC,iBAAiB,EACjBC,sCAAsC,IAzB5B,kCA8BRI,EAAqB,IAAIC,UACtB/rS,OAAO,WAAYsrS,EAAUD,UACtCS,EAAS9rS,OAAO,WAAYsrS,EAAUt3N,UAEtC43N,EAAc,CACZJ,iBAAiB,EACjBC,iBAAiB,EACjBC,sCAAsC,IArC1B,UAwCYj+K,EAAMq+K,GAxClB,eA0CFzuV,OACVqtN,EAAS,cA3CG,4CAAH,qDA8Cb/tH,IAAU7lF,OAAM,SAACzZ,GAAD,OAAW8J,QAAQuhH,IAAIrrH,OAEzCo6F,UAAU,iEAlDZ,UAoDGt3E,IAAYwrU,EAAWD,uCACtB,iBAAKj0P,UAAU,uFAAf,UACE,iBAAKA,UAAU,iCAAf,SAhGW,SACvBp6F,GAEA,GAAIA,EAAO,CACT,IAAI2uV,EAAuBZ,GAC3B,MAAI,WAAY/tV,GAEd2uV,EACE,mBAAoB3uV,GAAkC,MAAzBA,EAAMgN,eAC/B,6CACA+gV,IAGJ,2BACE,0BAAMY,QAIH,0BAAMA,KA+EFC,CAAiB5uV,QAIxB,6BACE,mBAAO6uV,QAAQ,WAAWz0P,UAAU,qBAApC,uBAGW,OAAVk0P,QAAU,IAAVA,OAAA,EAAAA,EAAYH,mBACX,eAAG/zP,UAAU,gCAAb,0CAIF,mBACEz7F,KAAK,WACL+C,KAAK,WACLyP,GAAG,WACHipF,UAAU,kIACV8U,YAAY,sBACZtB,SAAU4gP,EACVM,aAAa,WAGjB,kBAAK10P,UAAU,OAAf,WACE,mBAAOy0P,QAAQ,WAAWz0P,UAAU,qBAApC,uBAGW,OAAVk0P,QAAU,IAAVA,OAAA,EAAAA,EAAYF,mBACX,eAAGh0P,UAAU,gCAAb,0CAIF,mBACEz7F,KAAK,WACL+C,KAAK,WACLyP,GAAG,WACHipF,UAAU,kIACV8U,YAAY,sBACZtB,SAAU4gP,EACVM,aAAa,WAGjB,oBACE10P,UAAU,0NACVz7F,KAAK,SAFP,uBAQF,gBAAGy7F,UAAU,2BAAb,sCACiC,IADjC,QAEE,eACEA,UAAU,oBACVyL,KAAK,4CAFP,gCAQJ,iBAAKzL,UAAU,+CAAf,UACE,eACEA,UAAU,kDACVyL,KAAK,yDAFP,UAIE,iBAAKutC,IAAI,qDCxLR27M,GAAU,WAKrB,IAAMv9K,EAAkB5P,EAAYuQ,IAC9BV,EAAU7P,EAAYmQ,IACtBi9K,EAAcptL,EAAYoQ,IAEhC,OAAOrmC,EAAAA,EAAAA,UACL,iBAAO,CAAE6lC,gBAAAA,EAAiBC,QAAAA,EAASu9K,YAAAA,KACnC,CAACx9K,EAAiBC,EAASu9K,KChBxB,SAASC,KACd,IAAM/+K,EAAO6+K,KACPxsP,EAAW0qH,KAEjB,OAAO/8C,EAAKsB,iBACV,UAACs8C,GAAD,KAEA,UAACD,GAAD,CAAU5nN,GAAG,SAASrI,MAAO,CAAEtD,KAAMioG,KCDzC,ICFY2sP,GD2CZ,GAzCyE,SAAC,GAGnE,IAFLzyB,EAEI,EAFJA,cACAmc,EACI,EADJA,YAEM5pU,EAAWi0J,IACTuO,EAAoBu9K,KAApBv9K,gBAiCR,OAAO,gCA/Bc,WACnB,GAAKA,EAIL,OACE,oBACEpsE,QAAS,WACPp2F,EAAS2iK,MACT3iK,EAASgsK,MACThsK,EAASolK,GAASp/J,KAAKC,iBACvBjG,EAASihK,GAAQj7J,KAAKC,iBACtByzM,GAAAA,QAEG5oN,MAAK,WACJgK,QAAQuhH,IAAI,uBAEb5xG,OAAM,WACL3P,QAAQuhH,IAAI,8BAGlBjxB,UAAS,UAAKqiO,GAfhB,UAiBE,mBAAMriO,UAAU,oBAAhB,WACE,eAAGA,UAAU,oEACb,kBAAMA,UAAU,YAAhB,SAA6Bw+O,SAM3BuW,MElBZ,GAxBkD,SAAC,GAAuB,IAArB1yB,EAAoB,EAApBA,cAC3CpoH,EAAiBg8F,IAAiB,SAACzyS,GAAD,OAAWA,EAAMy0J,QAAnDgiD,aAEFrlM,EAAWi0J,IAEjB,OACE,iCACE,oBAAQ79D,QAAS,kBAAMp2F,EAASulM,OAAen6G,UAAWqiO,EAA1D,SACGpoH,GACC,mBAAMj6G,UAAU,oBAAhB,WACE,eAAGA,UAAU,yDACb,kBAAMA,UAAU,YAAhB,wBAGF,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,uDACb,kBAAMA,UAAU,YAAhB,0BCgIZ,GAxIuB,WACrB,IAAMprF,EAAWi0J,IACT4X,EAAcjZ,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAtDJ,UACAw5B,EAAiBzyC,GAAY,SAAChkK,GAAD,OAAsBA,EAAMy0J,QAAzDgiD,aAER,MAAoCvoE,EAAAA,EAAAA,UAAS,IAA7C,GAAOiiC,EAAP,KAAmBmsK,EAAnB,KACA,MAA0CpuM,EAAAA,EAAAA,UAAS+uC,GAAnD,GAAOu0K,EAAP,KAAsBC,EAAtB,KACA,MAAwCvjN,EAAAA,EAAAA,WAAS,GAAjD,GAAOwjN,EAAP,KAAqBC,EAArB,KACMC,GAAgB3jN,EAAAA,EAAAA,QAAO,MAE7B,EAAkD4sC,KAApCg3K,EAAd,EAAQxiV,KAAgB2V,EAAxB,EAAwBA,UAAWsnJ,EAAnC,EAAmCA,WAE7BwlL,EAAgBhX,GAAkB+W,EAAU1hL,GAAY,SAACyG,EAAM4lK,GAAP,OAC5D5lK,EAAK9tE,MAAM5jE,cAAc7uB,SAASmmU,MAQpC,OALA54G,GAAaguH,GAAe,WAC1BH,EAAiBx0K,GACjB00K,GAAgB,MAGb10K,EAID40K,GAAgC,IAApBA,EAASx3V,QAErB,iBAAKmiG,UAAU,qHAAf,SACGq1P,EAAS,GAAG/oP,MAAMzU,SAAS,KACxBw9P,EAAS,GAAG/oP,MAAMpkG,MAAM,GAAI,GAC5BmtV,EAAS,GAAG/oP,QAKlB2tG,GACK,0BAGJzxL,GAAcsnJ,GAqFf,iBAAK9vE,UAAU,iBAAiB0L,IAAK0pP,EAArC,UACE,kBAAKp1P,UAAU,mEAAf,WACE,iBAAKA,UAAU,4BAAf,UACE,UAAC,GAAD,OAEF,eAAGA,UAAU,6EAzFdq1P,GAAgC,IAApBA,EAASx3V,QAWxB,iBAAKmiG,UAAU,iBAAiB0L,IAAK0pP,EAArC,UACE,mCACE,kBACEp1P,UAAU,sEACVgL,QAAS,WACPmqP,GAAiBD,IAHrB,WAME,kBAAKl1P,UAAU,WAAf,WACE,mBACEA,UAAU,4BACVz7F,KAAK,SACLwS,GAAG,cACHzP,KAAK,cACLxI,MAAOk2V,EACP,gBAAc,OACdxhP,SAAU,SAACz0G,GACTk2V,EAAiBl2V,EAAEoC,OAAOrC,OAC1BghV,EAAc/gV,EAAEoC,OAAOrC,OAClBo2V,GACHC,GAAgB,IAGpBnqP,QAAS,SAACjsG,GACRk2V,EAAiBthL,GACZuhL,GACHC,GAAgB,MAIrBxhL,GACC,oBACE3zE,UAAU,oFACVgL,QAAS,SAACjsG,GACRA,EAAEgrD,iBACF+1R,EAAc,KAJlB,UAOE,eAAG9/O,UAAU,qDAEb,SAEN,eAAGA,UAAU,2EAEdk1P,GACC,iBAAKl1P,UAAU,oHAAf,UACE,iBAAKA,UAAU,+EAAf,SACGs1P,EAAc1/U,KAAI,SAACwkK,GAClB,OACE,iBACEp6E,UAAS,6FACPo6E,EAAK9tE,QAAUm0E,EACX,kCACA,iCAGNz1E,QAAS,WACPp2F,EAAS+rK,GAAWvG,IACpB66K,EAAiB76K,EAAK9tE,QAT1B,UAYE,6BAAS8tE,EAAK9tE,SAZhB,2BAM2B8tE,EAAKrjK,YAYtC,WA5EN,iBAAKipF,UAAU,iBAAiB0L,IAAK0pP,EAArC,UACE,iBAAKp1P,UAAU,sEAAf,UACE,eAAGA,UAAU,WAAb,iCAtBD,2BCiLX,GArMmB,WAAO,IAAD,IACfshF,EAAoB20H,IAC1B,SAACzyS,GAAD,OAAsBA,EAAMk+K,aADtBJ,gBAIAszK,EAAgBD,KAAhBC,YAEFz8C,EAAiC3wI,GAAY,SAAChkK,GAAD,OACjD49M,GAAkB59M,EAAO67M,GAAWwB,sBAGhCu3F,EAAsBnC,IAC1B,SAACzyS,GAAD,OAAsBA,EAAM4yS,QAAQ5mG,iBAGhCA,EAAgBhoC,EAAYqpC,IAElC,MAA4Cn/D,EAAAA,EAAAA,WAAS,GAArD,GAAOw1F,EAAP,KAAuBC,EAAvB,KAEA,OACE,iCACE,iBACEnnI,UAAS,mEACN,iBAACm4M,QAAD,IAACA,OAAD,EAACA,EAAgCvnM,eAAjC,UACC4+F,GACD,YAAC,OAAC2oG,QAAD,IAACA,GAAAA,EAAgCvnM,gBAAlC,UACCwnM,EACE,WACA,YAPR,UAUE,kBAAKp4M,UAAU,+EAAf,WACE,UAAC,GAAD,KACA,iBAAKA,UAAU,uEAAf,UACE,iBAAKA,UAAU,oCAAf,UACE,WAAC,GAAD,CACEknI,eAAgBA,EAChBs3G,YAAY,GACZnc,cAAc,yDACdkc,kBAAkB,oDAClBK,oBAAoB,oCACpBE,kBAAmB,kBAAM33G,GAAmBD,IAC5Cb,YAAa,kBAAMc,GAAkB,IAPvC,WASE,UAAC,GAAD,CACEt7N,GAAE,aACFm0F,UACE,sIAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,wDACb,kBAAMA,UAAU,YAAhB,8BAGJ,UAAC,GAAD,CACEn0F,GAAE,sBACFm0F,UACE,sIAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,2DACb,kBAAMA,UAAU,YAAhB,uCAIJ,UAAC,GAAD,CACEn0F,GAAE,oBACFm0F,UACE,sIAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,gEACb,kBAAMA,UAAU,YAAhB,2BAIHshF,GACC,UAAC,GAAD,CACEz1K,GAAE,sBACFm0F,UACE,sIAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,gEACb,kBAAMA,UAAU,YAAhB,8BAIJ,0BAGDshF,GACC,UAAC,GAAD,CACEz1K,GAAE,+BACFm0F,UACE,oHAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,iEACb,eAAGA,UAAU,YAAb,gCAIJ,0BAGDshF,GACC,UAAC,GAAD,CACEz1K,GAAE,8BACFm0F,UACE,sIAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,wDACb,kBAAMA,UAAU,YAAhB,sCAIJ,0BAEDshF,GACC,UAAC,GAAD,CACEz1K,GAAE,mBACFm0F,UACE,sIAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,sDACb,kBAAMA,UAAU,YAAhB,2BAIJ,2BAEF,gBAAIA,UAAU,mCAEb40P,GACC,UAAC,GAAD,CACE/oV,GAAE,oBACFm0F,UACE,sIAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,4DACb,kBAAMA,UAAU,YAAhB,qCAIJ,2BAGF,UAAC,GAAD,CACEn0F,GAAE,mBACFm0F,UACE,sIAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,4DACb,kBAAMA,UAAU,YAAhB,4BAGJ,gBAAIA,UAAU,oCACd,UAAC,GAAD,CAAYqiO,cAAc,mJAC1B,UAAC,GAAD,CACEmc,YAAY,SACZnc,cAAc,mJAEhB,gBAAIriO,UAAU,oCACd,UAAC,GAAD,CACEn0F,GAAE,OACFm0F,UACE,sIAHJ,UAME,mBAAMA,UAAU,oBAAhB,WACE,eAAGA,UAAU,4DACb,kBAAMA,UAAU,YAAhB,6DCvJpB,GA/BI,SAAC,GAOE,IANLsM,EAMI,EANJA,MACA9mF,EAKI,EALJA,QACG3U,EAIC,SACE0kV,GAAmBtkN,EAAAA,EAAAA,cAAY,WACnC,OAAOzrH,EAAQ3H,MAAK,SAAC3H,GAAD,OAAYA,EAAOsS,eACtC,CAAChD,IAEJ,OACE,iCACE,UAAC,IAAD,kBACEohN,cAAephN,EACfyhN,mBAAoB,SAACtnO,GAAD,uBAClB6lB,EAAQ2nI,MAAK,SAACj3I,GAAD,OAAYA,EAAOvW,MAAQA,YADtB,aAClB,EAA8C61V,aAE5C3kV,GALN,cAOE,UAAC,GAAD,CACE82N,cAAer7H,EACfs7H,2BAA2B,0DAC3Bp/M,UAAW+sU,YCXrB,GAxBK,SAAC,GAMC,IALL/sU,EAKI,EALJA,UACAitU,EAII,EAJJA,SAKA,OACE,iCACE,UAAC,GAAD,CACE3rV,MAAOo4U,GAAYa,OACnB3gB,WAAW,SACXp3N,QAASyqP,EACTjtU,UAAWA,EAJb,UAME,kBAAKw3E,UAAU,oCAAf,WACE,eAAGA,UAAU,iDACb,+CLRR,SATU80P,GAAAA,EAAAA,4BAAAA,2BAAAA,EAAAA,iCAAAA,gCAAAA,EAAAA,4CAAAA,wCASV,CATUA,KAAAA,GAAAA,KAUL,IAAMY,GAAY,WAAO,IAAD,MACvB9gV,EAAWi0J,IACjB,EAIIrB,GAAY,SAAChkK,GAAD,OAAsBm0M,GAAYn0M,MAHnC8zM,EADf,EACEJ,UAAaI,WACbH,EAFF,EAEEA,OACA3uL,EAHF,EAGEA,UAGI0nL,EAAK,iBAAGoH,QAAH,IAAGA,OAAH,EAAGA,EAAYpH,aAAf,QAAwB,cAC7BtmM,EAAO,iBAAG0tM,QAAH,IAAGA,OAAH,EAAGA,EAAY1tM,eAAf,QAA0B,gBACjC+rV,EAAU,iBAAGr+I,QAAH,IAAGA,OAAH,EAAGA,EAAYq+I,kBAAf,QAA6B,SAM7C,OACE,gCACGx+I,GACC,kBACEn3G,UAAU,gBACV,kBAAgB,cAChBunI,KAAK,SACL,aAAW,OAJb,WAME,iBAAKvnI,UAAU,4DAEf,iBAAKA,UAAU,qCAAf,UACE,iBAAKA,UAAU,kFAAf,UACE,kBAAKA,UAAU,0HAAf,WACE,iBAAKA,UAAU,yCAAf,UACE,kBAAKA,UAAU,yBAAf,WAEE,iBAAKA,UAAU,qHAAf,UACE,iBACEA,UAAU,qBACV41P,MAAM,6BACNjiP,KAAK,OACLkiP,QAAQ,YACR9pO,YAAY,MACZ+4C,OAAO,eACP,cAAY,OAPd,UASE,kBACEgxL,cAAc,QACdC,eAAe,QACfhwU,EAAE,0LAMR,kBAAKi6E,UAAU,gDAAf,WACE,gBACEA,UAAU,8CACVjpF,GAAG,cAFL,SAIGm5L,KAEH,iBAAKlwG,UAAU,OAAf,UACE,eAAGA,UAAU,wBAAb,SAAsCp2F,eAK9C,kBAAKo2F,UAAU,2DAAf,WACE,qBACEz7F,KAAK,SACLy7F,UAAU,2QACVgL,QAzDG,SAACP,GACpB71F,EAAS6iM,OAqDK,UAKGjvL,GACC,iBAAKw3E,UAAU,qCAAf,UACE,UAAC,GAAD,MAEA,MACJ,eAAGA,UAAS,UAAKx3E,EAAY,YAAc,IAA3C,SACGmtU,QAGL,oBACEpxV,KAAK,SACLy7F,UAAU,4QACVgL,QAAS,kBAAMp2F,EAAS8iM,OAH1B,iCAYR,QM6GV,GAvLK,SAAC,GAMC,IAAD,EALJzJ,EAKI,EALJA,YACA+nJ,EAII,EAJJA,gBAKMphV,EAAWi0J,IAETmkC,EAAuBxlC,GAAY,SAAChkK,GAAD,OACzCgqM,GAAmBhqM,EAAOyqM,MADpBjB,mBAIF35I,EAAOm0G,GAAY,SAAChkK,GAAD,OACvBwzM,GAAwBxzM,EAAOyqM,MAGzB5zB,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACR,EAA+B7S,EAAY6jC,IAAnC1mK,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,QAEbkpK,EAAoBvmC,GAAY,SAAChkK,GAAD,OACpC4rM,GAAwB5rM,EAAOyqM,MAG3B40B,EAAuBr7D,EAAYuyC,IAEnC/nM,EAAsC,CAC1CqoK,OAAAA,EACA11I,UAAAA,EACAE,QAAAA,EACAm2I,aAAc6nD,EACdlvD,WAAU,iBAAEo6B,QAAF,IAAEA,OAAF,EAAEA,EAAmBp6B,kBAArB,QAAmC,GAC7C8H,SAAUu6K,GAGZ,KACE92K,KADF,GAAO+2K,EAAP,KAAqCC,EAArC,KAA0B1tU,UAGpB2tU,EAAiB,SAAC16K,GACtB7mK,EACE8jM,GAAgB,CACdx9F,aAAcugE,EACdwyB,YAAAA,MAKC4D,EAAP,GAAiCqD,KAAjC,MAEMkhJ,EAAwB,+BAAG,WAAOC,GAAP,+EACzBC,EAAuBD,EAAazgV,KACxC,SAACk3E,GAMC,MALsC,CACpCgqH,UAAWhqH,EAAIupH,MACfkgJ,sBAAuBzpQ,EAAI0pQ,YALF,kBAavB3kJ,EAAuB,CAC3Bx3B,OAAAA,EACAy3B,QAASwkJ,EACTroJ,YAAAA,IACChlL,SAjB0B,sDAmB7BvZ,QAAQ9J,MAAM,4BAAd,MAnB6B,wDAAH,sDAuB9B,OACE,iCACE,kBAAKo6F,UAAU,mEAAf,WACE,UAAC,GAAD,CACEsiP,YAAat1I,EACbu1I,gBAAiB,SAAC5uK,GAChB/+J,EACE04L,GAA2B,CACzBv2L,GAAIk3L,EACJb,cAAez5B,MAIrB6uK,gBAAiB,WACf5tU,EACE24L,GAAY,CACVx2L,GAAIk3L,SAKZ,kBAAKjuG,UAAU,oBAAf,WACE,UAAC,GAAD,CACEy1P,SAAU,kBACRS,EAAmB,KAAOD,EAAgBjkV,IAE5CwW,UAAW0tU,KAEb,oBACEl2P,UAAS,8EACPg2P,IAAoBtkJ,GAAS8G,OACzB,qBACA,sBAHG,KAKTxtG,QAAS,kBAAMmrP,EAAezkJ,GAAS8G,SANzC,qBAWA,oBACEx4G,UAAS,8EACPg2P,IAAoBtkJ,GAAS+kJ,SACzB,qBACA,sBAHG,KAKTzrP,QAAS,kBAAMmrP,EAAezkJ,GAAS+kJ,WANzC,uBAWA,iBAAKz2P,UAAU,OAAf,UACE,UAAC,GAAD,CACEsM,MAAM,UACN9mF,QAAS,CACP,CACE8mF,MAAO,uBACP3sG,IAAK,SACLwsK,UAAU,EACVqpL,SAAU,WACY,IAAhBniS,EAAKx1D,SAIT+W,GACEklB,EAAAA,EAAAA,aAAY,CACV7M,cAAewqL,GACft+K,OAAO,WAAD,oBAAE,WAAOjjB,EAAQkjB,GAAf,iFACNA,EAAYc,wBAGN12B,EAAQ41B,EAAYtpB,WAEpBumV,EAAer/I,GACnBxzM,EACAyqM,GARI,SAWAmoJ,EAAyBC,GAXzB,OAaNj9T,EAAYxkB,SAAS8iM,MAErBt+K,EAAYjQ,cAfN,2CAAF,qDAAC,MAoBXvU,EACEyiM,GAAU,CACRE,UAAW,gBACXD,WAAY,CACVpH,MAAO,iBACPtmM,QAAQ,6EAAD,OAA+EypD,EAAKx1D,OAApF,wCACP83V,WAAY,SACZ1nJ,YAAAA,GAEFuJ,iBACEs9I,GAAkB4B,iCAI1BluU,WAAW,iBC7MhBmuU,GAAuC,CAClD,CAAEh3V,IAAK,IAAK2sG,MAAO,IAAK6/D,UAAU,GAClC,CAAExsK,IAAK,KAAM2sG,MAAO,KAAM6/D,UAAU,GACpC,CAAExsK,IAAK,KAAM2sG,MAAO,KAAM6/D,UAAU,GACpC,CAAExsK,IAAK,KAAM2sG,MAAO,KAAM6/D,UAAU,GACpC,CACExsK,IAAK,MACL2sG,MAAO,MACP6/D,UAAU,GAEZ,CAAExsK,IAAK,MAAO2sG,MAAO,MAAO6/D,UAAU,GACtC,CAAExsK,IAAK,OAAQ2sG,MAAO,OAAQ6/D,UAAU,ICG7ByqL,GAA6C,SAAC,GAAqB,IAAnB3oJ,EAAkB,EAAlBA,YAC3D,EAA4DzmC,GAC1D,SAAChkK,GAAD,OAAsB4rM,GAAwB5rM,EAAOyqM,MAD/CN,EAAR,EAAQA,YAAannD,EAArB,EAAqBA,SAAUooD,EAA/B,EAA+BA,WAAYS,EAA3C,EAA2CA,aAIrCz6L,EAAWi0J,IAEjB,MAAkCn3B,EAAAA,EAAAA,UAChCilN,IADF,GAAOl4I,EAAP,KAAkBo4I,EAAlB,KAmBA,OAXA1lN,EAAAA,EAAAA,YAAU,gBAEOprI,IAAbygJ,GACA26B,GAAwBs9B,EAAWj4D,EAASh9I,aAE5CqtV,EACEz1K,GAAgCq9B,EAAWj4D,EAASh9I,eAGvD,CAACi1M,EAAWj4D,KAGb,UAAC,GAAD,CACEmnD,YAAaA,EACbiB,WAAYA,EACZS,aAAcA,EACdmP,gBAAiBh4D,EACjBi4D,UAAWA,EACX6pI,UAAU,EACV3pI,eAAgB,kBAAM/pM,EAASm6L,GAAa,CAAEd,YAAAA,MAC9C2Q,WAAY,kBAAMhqM,EAAS+5L,GAAS,CAAEV,YAAAA,MACtC4Q,kBAzBoC,SAACr4D,GACvC5xI,EAAS45L,GAAY,CAAEP,YAAAA,EAAaznD,SAAAA,SCV3BswM,GAAwC,SAAC,GAQ5B,IAPxBvuQ,EAOuB,EAPvBA,QACA11E,EAMuB,EANvBA,KACAo7L,EAKuB,EALvBA,YACAn+B,EAIuB,EAJvBA,WACAtnJ,EAGuB,EAHvBA,UACAg0S,EAEuB,EAFvBA,SAGMu6B,GADiB,EADvBC,YAEqBzlN,EAAAA,EAAAA,UAAQ,kBAAM1+H,IAAM,CAACA,KACpCokV,GAAkB1lN,EAAAA,EAAAA,UAAQ,kBAAMhpD,IAAS,CAACA,IACzCw3N,EAAP,IAA2BruK,EAAAA,EAAAA,UAA2B,YAAtD,MACM98H,EAAWi0J,IAEXklC,EAAoBvmC,GAAY,SAAChkK,GAAD,OACpC4rM,GAAwB5rM,EAAOyqM,MAG3B7xB,EAAc,OAAG2xB,QAAH,IAAGA,OAAH,EAAGA,EAAmB3xB,eACpCF,EAAc,OAAG6xB,QAAH,IAAGA,OAAH,EAAGA,EAAmB7xB,eAEpC87I,GAAUzmL,EAAAA,EAAAA,UAAsB,WACpC,MAAO,CACL,CACEx6H,GAAE,OAAEmlK,QAAF,IAAEA,EAAAA,EAAkB,GACtB5gI,KAAyB,SAAnB8gI,MAGT,CAACA,EAAgBF,IAed6mB,EAAQ++H,GAAc,CAC1BjvT,KAAMkkV,EACNxuQ,QAAS0uQ,EACT9uC,gBAAiBA,KACjBnH,sBAAsB,EACtBjB,iBAAAA,EACAv8S,MAAO,CAAEw0T,QAAAA,GACT4C,eAAe,EACfhB,sBAAsB,EACtB1B,gBAtBiB,SAACg/B,GAClB,IAAMC,EAAeD,IACfxoJ,EAAayoJ,EAAa,GAAGpgV,GAC7BqlK,EAAiB+6K,EAAa,GAAG77S,KAAO,OAAS,MACvD1mC,EACE65L,GAAiB,CACfR,YAAAA,EACAS,WAAAA,EACAtyB,eAAAA,MAeJogJ,SAAAA,EACArL,YAAY,EACZ5V,cAAc,EACdoY,cAAc,IAGhB,OACE,WAAC,EAAA/6Q,SAAD,YACE,iBAEEonD,UAAU,qCAFZ,SAIGx3E,GAAasnJ,GACZ,iBAAK9vE,UAAU,MAAf,UACE,UAAC,GAAD,OAGF,UAACghP,GAAD,CACEj+I,MAAOA,EACPkL,YAAaA,EACbgzI,YAAY,kBAZlB,UACUhzI,EADV,YAgBA,UAAC2oJ,GAAD,CAEE3oJ,YAAaA,GAFf,UACUA,EADV,sBAjBF,UAAkBA,EAAlB,sBCrDG,SAASmpJ,GACdC,EACAC,EAIArpJ,EACAspJ,EACAC,GAEA,IAAMC,GAAiBhmN,EAAAA,EAAAA,SAAO,GACxB78H,EAAWi0J,IACTwR,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACFq9K,EAAwBlwL,GAAY,SAAChkK,GAAD,OACxC+rM,GAA4B/rM,EAAOyqM,MAE/BF,EAAoBvmC,GAAY,SAAChkK,GAAD,OACpC8rM,GAAgC9rM,EAAOyqM,MAGpCF,GACHn5L,EACEu5L,GAA4B,CAC1BF,YAAAA,EACAL,kBAAmB4pJ,EAAsBG,kBACzCv7K,eAAgBo7K,EAAsBI,yBAK5C,MAA+BpwL,GAC7B,SAAChkK,GAAD,OAAsBA,EAAMkzG,aADtB/xE,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,QAsDb/lC,EAIFu4V,GAtDgB9lN,EAAAA,EAAAA,UAAwC,WAAO,IAAD,QAC5DqiC,EAA6B,OAAGm6B,QAAH,IAAGA,OAAH,EAAGA,EAAmBn6B,UACnDC,EAA0B,OAAGk6B,QAAH,IAAGA,OAAH,EAAGA,EAAmBl6B,OAChDsI,EAAiC,OAAG4xB,QAAH,IAAGA,OAAH,EAAGA,EAAmB5xB,cAa3D,OAVEvI,GACAC,GACAsI,IACC,OAAC4xB,QAAD,IAACA,IAAAA,EAAmBJ,aAAkD,KAAlB,OAAjBI,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBJ,gBAEvD/5B,OAAY7tK,EACZ8tK,OAAS9tK,EACTo2K,OAAgBp2K,GAGX,CACLygJ,SAAQ,iBAAEunD,QAAF,IAAEA,OAAF,EAAEA,EAAmBvnD,gBAArB,QArDY,GAsDpBn8C,KAAI,iBAAE0jG,QAAF,IAAEA,OAAF,EAAEA,EAAmBJ,mBAArB,QAAoC,EACxChpK,UAAWm+L,KAAOn+L,GAAWhD,OAAO,cACpCkD,QAASi+L,KAAOj+L,GAASlD,OAAO,cAChCs6I,gBAAe,oBAAMs7K,GAAP,IAA2Bl9K,OAAAA,IACzC1G,WAAU,OAAEo6B,QAAF,IAAEA,OAAF,EAAEA,EAAmBp6B,WAC/BC,UAAAA,EACAC,OAAAA,EACAsI,cAAAA,EACAD,eAAc,iBACZ6xB,QADY,IACZA,OADY,EACZA,EAAmB7xB,sBADP,QAEZs7K,EAAsBG,kBACxBv7K,eAAc,iBACZ2xB,QADY,IACZA,OADY,EACZA,EAAmB3xB,sBADP,QAEZo7K,EAAsBI,yBAEzB,QACD7pJ,QADC,IACDA,OADC,EACDA,EAAmBn6B,UADlB,OAEDm6B,QAFC,IAEDA,OAFC,EAEDA,EAAmBl6B,OAFlB,OAGDk6B,QAHC,IAGDA,OAHC,EAGDA,EAAmB5xB,cAHlB,OAID4xB,QAJC,IAIDA,OAJC,EAIDA,EAAmBJ,YAJlB,OAKDI,QALC,IAKDA,OALC,EAKDA,EAAmBvnD,SALlB,OAMDunD,QANC,IAMDA,OANC,EAMDA,EAAmBp6B,WANlB,OAODo6B,QAPC,IAODA,OAPC,EAODA,EAAmB7xB,eAPlB,OAQD6xB,QARC,IAQDA,OARC,EAQDA,EAAmB3xB,eACnBz3I,EACAE,EACA0yT,EACAl9K,EACAm9K,EAAsBG,kBACtBH,EAAsBI,yBASlBC,GAAe5mN,EAAAA,EAAAA,cACnB,SAACj/H,GACCslV,EAAetlV,KAEjB,CAACslV,IAkFH,OA/EAnmN,EAAAA,EAAAA,YAAU,WACR,GAAqB,cAAjBryI,EAAM0P,OAAwB,CAChC,IAAMspV,EACJh5V,EAAM+T,MAEN4kV,EAAeptV,SA6EvB,YAYqC,EAXnCwI,KAWoC,IAVpCw3F,EAUmC,EAVnCA,KACAm8C,EASmC,EATnCA,SACAooD,EAQmC,EARnCA,WACAS,EAOmC,EAPnCA,aACAR,EAMmC,EANnCA,iBACAC,EAKmC,EALnCA,cACAE,EAImC,EAJnCA,kBACAC,EAGmC,EAHnCA,eACA/yB,EAEmC,EAFnCA,eACAE,EACmC,EADnCA,eAEA,OACE/xE,GACAm8C,GACAooD,GACAS,GACAR,GACAC,GACAE,GACAC,GACA/yB,GACAE,EAnGK27K,CAAgCD,IAuGzC,cAoCY,IAlCFE,EAkCC,EAlCP3tP,KACU4tP,EAiCH,EAjCPzxM,SACY0xM,EAgCL,EAhCPtpJ,WACcupJ,EA+BP,EA/BP9oJ,aACkB+oJ,EA8BX,EA9BPvpJ,iBACewpJ,EA6BR,EA7BPvpJ,cACmBwpJ,EA4BZ,EA5BPtpJ,kBACgBupJ,EA2BT,EA3BPtpJ,eACgBupJ,EA0BT,EA1BPt8K,eACgBu8K,EAyBT,EAzBPr8K,eAGas8K,EAsBN,EAtBP/qJ,YACUgrJ,EAqBH,EArBPnyM,SACYoyM,EAoBL,EApBPhqJ,WACciqJ,EAmBP,EAnBPxpJ,aACkBypJ,EAkBX,EAlBPjqJ,iBACekqJ,EAiBR,EAjBPjqJ,cACmBkqJ,EAgBZ,EAhBPhqJ,kBACgBiqJ,EAeT,EAfPhqJ,eACgBiqJ,EAcT,EAdPh9K,eACgBi9K,EAaT,EAbP/8K,eAcF,QACE47K,IAAYU,GACZT,IAAgBU,GAChBT,IAAkBU,GAClBT,IAAoBU,GACpBT,IAAwBU,GACxBT,IAAqBU,GACrBT,IAAyBU,GACzBT,IAAsBU,GACtBT,IAAsBU,GACtBT,IAAsBU,GArJhBC,CACEtB,EACAJ,MAGJD,EAAeptV,SAAU,EAErBytV,EAAuBlpJ,WAAa,GACtCipJ,EAAa,CACXxtP,KAAMytP,EAAuBztP,KAAO,EACpCm8C,SAAUsxM,EAAuBtxM,SACjC7hH,UAAWm+L,KAAOn+L,GAAWhD,OAAO,cACpCkD,QAASi+L,KAAOj+L,GAASlD,OAAO,cAChCs6I,gBAAe,oBAAMs7K,GAAP,IAA2Bl9K,OAAAA,IACzC1G,WAAU,OAAEo6B,QAAF,IAAEA,OAAF,EAAEA,EAAmBp6B,WAC/BC,UAAWkkL,EAAuBjpJ,iBAClCh7B,OAAQikL,EAAuBhpJ,cAC/B3yB,cAAe,cACfD,eAAgB47K,EAAuB57K,eAAexzI,cACtD0zI,eAAgB07K,EAAuB17K,iBAIvC07K,EAAuBztP,KAAO,GAChCwtP,EAAa,CACXxtP,KAAMytP,EAAuBztP,KAAO,EACpCm8C,SAAUsxM,EAAuBtxM,SACjC7hH,UAAWm+L,KAAOn+L,GAAWhD,OAAO,cACpCkD,QAASi+L,KAAOj+L,GAASlD,OAAO,cAChCs6I,gBAAe,oBAAMs7K,GAAP,IAA2Bl9K,OAAAA,IACzC1G,WAAU,OAAEo6B,QAAF,IAAEA,OAAF,EAAEA,EAAmBp6B,WAC/BC,UAAWkkL,EAAuB9oJ,kBAClCn7B,OAAQikL,EAAuB7oJ,eAC/B9yB,cAAe,eACfD,eAAgB47K,EAAuB57K,eAAexzI,cACtD0zI,eAAgB07K,EAAuB17K,iBAI3CxnK,EACE25L,GAAmB,CACjBN,YAAAA,EACAJ,gBAAiB,CACfF,YAAamqJ,EAAuBztP,KACpCm8C,SAAUsxM,EAAuBtxM,SACjCooD,WAAYkpJ,EAAuBlpJ,WACnCS,aAAcyoJ,EAAuBzoJ,aACrCR,iBAAkBipJ,EAAuBjpJ,iBACzCC,cAAegpJ,EAAuBhpJ,cACtCE,kBAAmB8oJ,EAAuB9oJ,kBAC1CC,eAAgB6oJ,EAAuB7oJ,eACvC7yB,eAAgB07K,EAAuB17K,eACvCF,eAAgB47K,EAAuB57K,uBAMhD,CACD+xB,EACAr5L,EACAiwB,EACA0yT,EACAG,EALC,OAMD3pJ,QANC,IAMDA,OANC,EAMDA,EAAmBp6B,WACnBkkL,EACAx9K,EACA11I,EACA7lC,EAAM+T,KACN/T,EAAM0P,SAGD1P,ECzMF,IAAMu6V,GAA6B,SACxC3wQ,GAEA,OAAOA,EAAO3nF,QAAO,wCAAOpB,EAAP,EAAOA,IAAP,EAAYb,MAAZ,OAA0Ba,EAAI8R,WAAW,WAGnD6nV,GAA+B,SAAC5wQ,GAC3C,OAAOA,EAAO3nF,QACZ,wCAAOpB,EAAP,EAAOA,IAAP,EAAYb,MAAZ,OACG,CACC,UACA,SACA,OACA,SACA,YACA,qBACA+a,SAASla,OCdJ45V,GAIR,SAAC,GAAoC,IAAlCn3B,EAAiC,EAAjCA,WAAYtjU,EAAqB,EAArBA,MAAO06V,EAAc,EAAdA,QACzB,OACE,kBACEx5P,UAAS,kHACPw5P,QADO,IACPA,EAAAA,EAAW,IAFf,UAKGp3B,EALH,KAKiBtjU,MCGR26V,GAET,SAAC,GAGE,IAAD,IAFJC,YAAepxQ,EAEX,EAFWA,OAAQqxQ,EAEnB,EAFmBA,UAAWjxQ,EAE9B,EAF8BA,OAClCkxQ,EACI,EADJA,uBAEA,IAAKlxQ,EACH,OAAO,KAET,IAAMmxQ,EAAiBD,EACrBP,GAA2Bz5V,OAAOoP,QAAQ05E,KAG5C,OACE,kBAAKsX,UAAU,mDAAf,WACE,kBAAKA,UAAU,oBAAf,WACE,UAAC,GAAD,CACE+kP,gBAAiBz8P,EACjB68P,aAAa,eACb7iB,YAAY,uBAEd,0BAAMh6O,OAEPqxQ,GACC,eACEluP,KAAI,YAAOkuP,GACXx4V,OAAO,SACPm1N,IAAI,aACJt2H,UAAU,uDAJZ,UAME,2BAAO25P,OAGT,2BAEF,UAAC,GAAD,UACGE,EAAejkV,KAAI,WAAsB46B,GAAW,IAAD,wBAAzB7wC,EAAyB,EAAzBA,IAAKb,EAAoB,EAApBA,MAC9B,OACE,UAAC,EAAA85C,SAAD,WACE,UAAC2gT,GAAD,CAAWn3B,WAAYziU,EAAKb,MAAOA,KADrC,qBAA6BwpF,EAA7B,YAAuC93C,aCpDtCspT,GAAe,SAAC/zU,GAC3BA,EAAIhJ,OAAOgJ,GACX,IAAM+tD,EAAO3gE,KAAKqvB,MAAMzc,EAAI,MACtB6uD,EAASzhE,KAAKqvB,MAAOzc,EAAI,KAAQ,IACjC8uD,EAAS1hE,KAAKqvB,MAAOzc,EAAI,KAAQ,IAEjCg0U,EAAWjmR,EAAO,EAAP,UAAcA,EAAd,OAA0B,GACrCkmR,EAAWplR,EAAS,EAAT,UAAgBA,EAAhB,OAA8B,GACzCqlR,EAAWplR,EAAS,EAAT,UAAgBA,EAAhB,MAA6B,GAE9C,OAAOklR,GAAYC,GAAYC,EAC3BF,EAAWC,EAAWC,EACtB,OAGOC,GAAuC,SAClDr8T,GAGA,OAAKA,GAASilM,KAAOjlM,GAAM2M,UAIpBs4L,KAAOjlM,GAAM8D,OAAO,oBAHlB,IAcEw4T,GAAuC,SAACt8T,GACnD,OAAOilM,KAAOjlM,GAAM8D,OAAO,UCD7B,GA7BK,SAAC,GAA+B,IAA7By4T,EAA4B,EAA5BA,UAAWC,EAAiB,EAAjBA,WACjB,IAAKD,EACH,OAAO,KAGT,IAAMprV,EACJorV,aAAqB9/T,IAArB,GACQ8/T,EAAUprV,WACdpP,OAAOoP,QAAQorV,GAErB,OACE,iBAAKp6P,UAAU,mDAAf,SACGhxF,EAAQ4G,KAAI,WAAe46B,GAAW,IAAD,UAAvB7wC,EAAuB,KAAlBb,EAAkB,KACpC,OAAKA,GAKH,UAAC,EAAA85C,SAAD,WACE,UAAC,GAAD,WACE,UAAC2gT,GAAD,CAAWn3B,WAAYziU,EAAKb,MAAOA,OAFvC,qBAA6Bu7V,EAA7B,YAA2C7pT,IAJpC,sDCZJ8pT,GAKT,SAAC,GAQgC,IAPnCrsJ,EAOkC,EAPlCA,YACAssJ,EAMkC,EANlCA,UAMkC,IALlCv6P,UAAAA,OAKkC,MALtB,GAKsB,EAJ/BnvF,EAI+B,SAC5B+D,EAAWi0J,IAEX2xL,EAAkBhzL,GAAY,SAAChkK,GAAD,OAClCwzM,GAAwBxzM,EAAOyqM,MAG3BwsJ,GAAYlpN,EAAAA,EAAAA,UAAQ,WACxB,OAAOgpN,EAAUx8U,OAAM,SAAC+uE,GAAD,OACrB0tQ,EAAgB38U,MAAK,SAACnL,GAAD,OAAOA,EAAE2jM,QAAUvpH,EAAIupH,cAE7C,CAACmkJ,EAAiBD,IAErB,OACE,4BACEh2V,KAAK,WACLy7F,UAAWA,EAAY,kBACvBknB,QAASuzO,EACTjnP,SAAU,WACR5+F,EAAS2hM,GAAW,CAAEtI,YAAAA,EAAauI,aAAc+jJ,OAE/C1pV,sDCnCG6pV,GAMT,SAAC,GAUgC,IATnCzsJ,EASkC,EATlCA,YACAoI,EAQkC,EARlCA,MACAmgJ,EAOkC,EAPlCA,QAOkC,IANlCx2P,UAAAA,OAMkC,MANtB,GAMsB,EAL/BnvF,EAK+B,SAC5B+D,EAAWi0J,IAEXotC,EAAczuC,GAAY,SAAChkK,GAAD,OAC9ByzM,GAA4BzzM,EAAOyqM,EAAnCgJ,CAAgDZ,MAGlD,OACE,4BACE9xM,KAAK,WACLy7F,UAAWA,EAAY,kBACvBknB,UAAW+uF,EACXziG,SAAU,WACR5+F,EACEohM,GAAU,CACR/H,YAAAA,EACAgI,YAAa,CACXI,MAAAA,EACAmgJ,QAAAA,QAKJ3lV,KC7CG8pV,GAAmB,SAAC7tQ,GAAD,OAC9B,mCACE,2BACE,0BAAMA,EAAI2vK,OAAOrgO,KAAK,SAEvB0wD,EAAI8tQ,WACH,iCACE,6BACE,kBAAM56P,UAAU,OAAhB,qBACClT,EAAI8tQ,gBAIT,8BCfOC,GAAuB,SAClC1qT,GAEA,OAAOA,EAAMv4B,QAAkC,SAACC,EAAD,GAA2B,IAAnBvQ,EAAkB,EAAlBA,KAAMxI,EAAY,EAAZA,MAE3D,OADA+Y,EAAIvQ,GAAQxI,EACL+Y,IACN,KCSCijV,GAAsB18B,KAUrB,IA0MP,GA1MuC,SACrCnwH,EACA8sJ,EACA//K,GAEA,IAAMmiJ,EAAa,CACjB29B,GAAoBz8B,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CAC5CA,GAAI,SACJgjT,eAAe,EACfzxO,OAAQ,SAACtiF,GACP,IAAMu0V,EAAYv0V,EAAK+8L,MACpB6hH,cACAvxP,KAAKz9C,KAAqB,SAACk3E,GAAD,MAAU,CACnCupH,MAAOvpH,EAAIg6B,SAAS,UACpB0vO,QAAS1pQ,EAAIg6B,SAAS,6BAG1B,OACE,UAACwzO,GAAD,CACErsJ,YAAaA,EACbssJ,UAAWA,KAIjBv5L,KAAM,gBAAGl0E,EAAH,EAAGA,IAAH,OACJ,UAAC4tQ,GAAD,CACEzsJ,YAAaA,EACboI,MAAOvpH,EAAIg6B,SAAS,UACpB0vO,QAAS1pQ,EAAIg6B,SAAS,4BAG1B8hM,oBAAoB,EACpB70R,KAAM,KAER+mU,GAAoBz8B,UAAS,SAACvxO,GAAD,OAASA,EAAIypQ,wBAAuB,CAC/Dx/U,GAAI,wBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjDg0O,GAAoBz8B,UAAS,SAACvxO,GAAD,OAASA,EAAIhuF,QAAO,CAC/CiY,GAAI,iBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,UAACw8N,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,QA7Da7iC,EA6DWkH,EAAK8gH,WA5DnChoH,GACI,MAFX,IAA0BA,KAiEtBg8V,GAAoBz8B,UAAS,SAACvxO,GAAD,OAASA,EAAIkuQ,2BAA0B,CAClEjkV,GAAI,4BACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJi1V,GAAsB,CACpBb,UAAWp0V,EAAK8gH,WAChBuzO,WAAY,qBAGlBS,GAAoBz8B,UAAS,SAACvxO,GAAD,OAASA,EAAI2vK,SAAQ,CAChD1lP,GAAI,SACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU20V,GAAiB30V,EAAK8mF,IAAIs5E,aAE5C00L,GAAoBz8B,UAClB,SAACvxO,GAAS,IAAD,EACP,MAAO,CACLxE,OAAQwE,EAAIouQ,iBACZvB,UAC2B,aAAzB7sQ,EAAIouQ,iBAAJ,UACIpuQ,EAAIquQ,kBADR,aACI,EAAgBC,kBAChBr1V,EACN2iF,OAAQoE,EAAIuuQ,0BAGhB,CACEtkV,GAAI,aACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,UAACyzV,GAAD,CACEG,uBAAwB,SAAClxQ,GAAD,OACtB4wQ,GAA6B5wQ,IAE/BgxQ,YAAa1zV,EAAK8gH,WAClBqpF,KAAK,QAKb2qJ,GAAoBz8B,UAClB,SAACvxO,GAAS,IAAD,EACP,MAAO,CACLxE,OAAQwE,EAAIwuQ,gBACZ3B,UAC0B,aAAxB7sQ,EAAIwuQ,gBAAJ,UACIxuQ,EAAIyuQ,iBADR,aACI,EAAeC,kBACfz1V,EACN2iF,OAAQoE,EAAI2uQ,yBAGhB,CACE1kV,GAAI,YACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,UAACyzV,GAAD,CACEG,uBAAwB,SAAClxQ,GAAD,OACtB4wQ,GAA6B5wQ,IAE/BgxQ,YAAa1zV,EAAK8gH,WAClBqpF,KAAK,QAKb2qJ,GAAoBz8B,UAAS,SAACvxO,GAAD,OAASA,EAAI4uQ,YAAW,CACnD3kV,GAAI,YACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg0O,GAAoBz8B,UAAS,SAACvxO,GAAD,OAASA,EAAI6uQ,2BAA0B,CAClE5kV,GAAI,2BACJuxE,OAAQ,kBAAM,gDACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,IAAM21V,EAA2B31V,EAAK8gH,WAKhCszO,EAAYS,GAAqBc,GAEvC,OAAOV,GAAsB,CAC3Bb,UAAAA,EACAC,WAAY,gCAIlBS,GAAoBz8B,UAAS,SAACvxO,GAAD,OAASA,EAAI8tF,YAAW,CACnD7jK,GAAI,UACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,IAAM40K,EAAY50K,EAAK8gH,WAEvB,OAAK8zD,GAKH,UAAC,GAAD,CACEs1B,MAAM,OACNrkM,GAAE,oBAAe+uK,GACjB56E,UAAU,yPAHZ,mBAJO,2BAaX5tF,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,UAGVhgC,gBAAgB,KAgBpB,OAZIi6C,GACF59B,EAAWj8Q,QACT45S,GAAoBz8B,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CAC5CA,GAAI,KACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,iBAKjDq2M,GChOIy+B,GAAsB,SAAC98V,GAClC,MAAiB,kBAAVA,EAA4B,GAAKA,GC6B1C,GArBK,SAAC,GAA+B,IAA7Bs7V,EAA4B,EAA5BA,UAAWC,EAAiB,EAAjBA,WACjB,GAAkB,OAAdD,QAAoCr0V,IAAdq0V,EACxB,OAAO,KAGT,IAAMP,EAAiBR,GAA2Bz5V,OAAOoP,QAAQorV,IACjE,OACE,iBAAKp6P,UAAU,0CAAf,SACG65P,EAAejkV,KAAI,WAAsB46B,GAAW,IAAD,wBAAzB7wC,EAAyB,EAAzBA,IAAKb,EAAoB,EAApBA,MAC9B,OACE,UAAC,EAAA85C,SAAD,WACE,UAAC,GAAD,WACE,UAAC2gT,GAAD,CAAWn3B,WAAYziU,EAAKb,MAAOA,OAFvC,qBAA6Bu7V,EAA7B,YAA2C7pT,UCnB9C,SAASqrT,GAA8B/gL,GAC5C,OAAQA,GACN,IAAK,MACH,MAAO,OACT,IAAK,cACH,MAAO,aACT,QACE,OAAOA,GCiBb,IAAMghL,GAAuB19B,KAooB7B,GAloBkC,SAChCnwH,EACAp7L,EACAmoK,EACA+/K,GAEA,IAAMgB,EAA2B,CAC/BD,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkvQ,sBAAb,aAAS,EAAoBz3V,OAAM,CAC/DwS,GAAI,sBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,qCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkvQ,sBAAb,aAAS,EAAoB36V,SAAQ,CACjE0V,GAAI,wBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,uCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,eAIzB,OAAIj0G,QAAJ,IAAIA,GAAAA,EAAMgL,MAAK,SAACtP,GAAD,uBAAcA,EAASytV,sBAAvB,aAAc,EAAyBC,qBACpDF,EAAyBv7V,KAAzB,MAAAu7V,EAAwB,GACnBlpV,EAAK+E,QACN,SAACC,EAAKqkV,EAAc1rT,GAAW,IAAD,EACtByrT,EAAgB,UACpBC,EAAaF,sBADO,aACpB,EAA6BC,iBA6B/B,OA5BAr8V,OAAOoP,QAAP,OAAeitV,QAAf,IAAeA,EAAAA,EAAoB,IAAI36V,SAAQ,YAAgB,IACrD3B,EADoD,WACpDA,IAER,GAAIkY,EAAIgG,MAAK,SAACwiS,GAAD,uBAAeA,EAAUtpS,UAAzB,aAAe,EAAc8C,SAASla,MACjD,OAAOkY,EAGT,IAAMskV,EAAYL,GAAqBz9B,UACrC,SAACvxO,GAAS,IAAD,MACEsvQ,EAAT,aACEx8V,OAAOoP,QAAP,oBACE89E,EAAIkvQ,sBADN,aACE,EAAoBC,wBADtB,QAC0C,IACxC9uM,MAAK,SAACjrE,GAAD,OAAWA,EAAM,GAAGviF,MAAQA,YAHrC,QAG6C,GAH7C,MAIA,cAAOy8V,QAAP,IAAOA,OAAP,EAAOA,EAAUt9V,QAEnB,CACEiY,GAAIpX,EACJipT,oBAAoB,EACpBtgO,OAAQ,kBAAM,2BAAO3oF,KACrBo6T,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAKxCjvG,EAAIrX,KAAK27V,MAEJtkV,IAET,MAKN,IAAMwkV,EAActB,EAChB,CACEe,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CAC7CA,GAAI,KACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,2CACd04E,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,iBAGtD,GAEJ,MAAM,GAAN,OACKu1O,EADL,CAEEP,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CAC7CA,GAAI,SACJ6xS,oBAAoB,EACpBmR,eAAe,EACfzxO,OAAQ,SAACtiF,GACP,IAAMu0V,EAAYv0V,EAAK+8L,MACpB6hH,cACAvxP,KAAKz9C,KAAqB,SAACk3E,GAAD,MAAU,CACnCupH,MAAOvpH,EAAIg6B,SAAS,UACpB0vO,QAAS1pQ,EAAIg6B,SAAS,6BAG1B,OACE,UAACwzO,GAAD,CACErsJ,YAAaA,EACbssJ,UAAWA,KAIjBv5L,KAAM,gBAAGl0E,EAAH,EAAGA,IAAH,OACJ,UAAC4tQ,GAAD,CACEzsJ,YAAaA,EACboI,MAAOvpH,EAAIg6B,SAAS,UACpB0vO,QAAS1pQ,EAAIg6B,SAAS,4BAG1B/yF,KAAM,KAER+nU,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIypQ,wBAAuB,CAChEx/U,GAAI,wBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,qCACdv0D,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIwvQ,WAAU,CACnDvlV,GAAI,WACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,0CACdv0D,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIhuF,QAAO,CAChDiY,GAAI,iBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,sCACdv0D,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAACw8N,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,WAAa9gH,EAAK8gH,WAAa,QAIpDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIkuQ,2BAA0B,CACnEjkV,GAAI,4BACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJi1V,GAAsB,CACpBb,UAAWp0V,EAAK8gH,WAChBuzO,WAAY,qBAGlByB,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI4uQ,YAAW,CACpD3kV,GAAI,YACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI2vK,SAAQ,CACjD1lP,GAAI,SACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,uCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU20V,GAAiB30V,EAAK8mF,IAAIs5E,aAE5C01L,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI6uQ,2BAA0B,CACnE5kV,GAAI,2BACJuxE,OAAQ,kBAAM,gDACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,IAAM21V,EAA2B31V,EAAK8gH,WAKhCszO,EAAYS,GAAqBc,GAEvC,OAAOV,GAAsB,CAC3Bb,UAAAA,EACAC,WAAY,gCAIlByB,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIguF,iBAAgB,CACzD/jK,GAAI,iBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,gDACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU61V,GAA8B71V,EAAK8gH,eAErDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyvQ,kBAAiB,CAC1DxlV,GAAI,kBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,gDACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGh6F,EAAK8gH,WACJozO,GAAqCl0V,EAAK8gH,aAE1C,+BAKRg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIg2B,UAAS,CAClD/rG,GAAI,UACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,wCACdyxO,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJA,EAAK8gH,WAAWlxG,KAAI,SAAC9W,EAAO0xC,GAAR,OAClB,kBAAiBwvD,UAAU,yBAA3B,WACE,UAAC,GAAD,CACE+kP,gBAAiBjmV,EACjBwjU,YAAY,oBACZ6iB,aAAa,kBAEf,2BAAOrmV,MANC0xC,SAUhBsrT,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI0vQ,0BAAyB,CAClEzlV,GAAI,gBACJ6xS,oBAAoB,EACpBtgO,OAAQ,iBAAM,UACdyxO,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJy2V,GAAe,CACbrC,UAAWp0V,EAAK8gH,WAChBuzO,WAAY,qBAGlByB,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI4vQ,UAAS,CAClD3lV,GAAI,UACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI6vQ,mBAAkB,CAC3D5lV,GAAI,mBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,2CACdv0D,KAAM,IACNgmS,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI8vQ,WAAU,CACnD7lV,GAAI,WACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UACnB,SAACvxO,GAAD,OAASA,EAAI+vQ,wCACb,CACE9lV,GAAI,wCACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdv0D,KAAM,IACNgmS,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJA,EAAK8gH,WAAagzO,GAAa9zV,EAAK8gH,aAAe,6BAGzDg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,cACRC,QAAS,CACPuzQ,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB95V,SAAQ,CAC7D0V,GAAI,oBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,uCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB78B,QAAO,CAC5DvnT,GAAI,mBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,sCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU41V,GAAoB51V,EAAK8gH,eAE3Cg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB2B,WAAU,CAC/D/lV,GAAI,sBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB4B,cAAa,CAClEhmV,GAAI,yBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,6CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBC,eAAc,CACnErkV,GAAI,0BACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,8CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB6B,eAAc,CACnEjmV,GAAI,0BACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,8CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBK,eAAc,CACnEzkV,GAAI,0BACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,8CACdyxO,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAEpDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB8B,cAAa,CAClElmV,GAAI,yBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,6CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB+B,aAAY,CACjEnmV,GAAI,wBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,4CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBgC,YAAW,CAChEpmV,GAAI,uBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,2CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBiC,YAAW,CAChErmV,GAAI,uBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,2CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBkC,UAAS,CAC9DtmV,GAAI,qBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBmC,aAAY,CACjEvmV,GAAI,wBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,4CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBoC,SAAQ,CAC7DxmV,GAAI,oBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,uCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBqC,YAAW,CAChEzmV,GAAI,uBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,0CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBsC,WAAU,CAC/D1mV,GAAI,sBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBuC,aAAY,CACjE3mV,GAAI,wBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,4CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBwC,YAAW,CAChE5mV,GAAI,uBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,2CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgByC,QAAO,CAC5D7mV,GAAI,mBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,sCACdyxO,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,qBAM5Cg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,aACRC,QAAS,CACPuzQ,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAel6V,SAAQ,CAC5D0V,GAAI,mBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,uCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAej9B,QAAO,CAC3DvnT,GAAI,kBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,sCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU41V,GAAoB51V,EAAK8gH,eAE3Cg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeuB,WAAU,CAC9D/lV,GAAI,qBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAewB,cAAa,CACjEhmV,GAAI,wBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,6CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeH,eAAc,CAClErkV,GAAI,yBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,8CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeyB,eAAc,CAClEjmV,GAAI,yBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,8CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeC,eAAc,CAClEzkV,GAAI,yBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,8CACdyxO,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAEpDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe0B,cAAa,CACjElmV,GAAI,wBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,6CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe2B,aAAY,CAChEnmV,GAAI,uBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,4CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe4B,YAAW,CAC/DpmV,GAAI,sBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,2CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe6B,YAAW,CAC/DrmV,GAAI,sBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,2CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe8B,UAAS,CAC7DtmV,GAAI,oBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe+B,aAAY,CAChEvmV,GAAI,uBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,4CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAegC,SAAQ,CAC5DxmV,GAAI,mBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,uCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeiC,YAAW,CAC/DzmV,GAAI,sBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,0CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAekC,WAAU,CAC9D1mV,GAAI,qBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAemC,aAAY,CAChE3mV,GAAI,uBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,4CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeoC,YAAW,CAC/D5mV,GAAI,sBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,2CACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeqC,QAAO,CAC3D7mV,GAAI,kBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,sCACdyxO,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,qBAM5Cg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,sBACRC,QAAS,CACPuzQ,GAAqBz9B,UACnB,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuBj2S,WAChC,CACE7wC,GAAI,6BACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,yCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAGzBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuBC,UAAS,CACrE/mV,GAAI,4BACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,wCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UACnB,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuBE,kBAChC,CACEhnV,GAAI,oCACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,mCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,iBAK7Bg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,WACRC,QAAS,CACPuzQ,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIkxQ,SAAS1hO,QAAO,CACzDvlH,GAAI,kBACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,sCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,iBAI3Bg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,kBACRC,QAASwzQ,IAEXD,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI8tF,YAAW,CACpD7jK,GAAI,UACJ6xS,oBAAoB,EACpBtgO,OAAQ,kBAAM,wCACdyxO,eAAe,EACf/4J,KAAM,SAACh7J,GACL,IAAM40K,EAAY50K,EAAK8gH,WAEvB,OAAK8zD,GAKH,UAAC,GAAD,CACEs1B,MAAM,OACNrkM,GAAE,oBAAe+uK,GACjB56E,UAAU,yPAHZ,mBAJO,2BAaX5tF,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,UAGVhgC,gBAAgB,EAChB/sR,KAAM,SCjpBNkqU,GAAa,SAAC15V,GAClB,OAAQA,GACN,IAAK,UACH,MAAO,2DACT,IAAK,QACH,MAAO,uDACT,IAAK,UACH,MAAO,2DACT,IAAK,OACH,MAAO,+DACT,QACE,MAAM,IAAIZ,MAAJ,+CAAkDY,MAIxD25V,GAAW,SAAC35V,GAChB,OAAQA,GACN,IAAK,UACH,MAAO,2BACT,IAAK,QACH,MAAO,yBACT,IAAK,UACH,MAAO,2BACT,IAAK,OACH,MAAO,iCACT,QACE,MAAM,IAAIZ,MAAJ,+CAAkDY,MAoB9D,GAhBc,SAACusF,GACb,IAAQvsF,EAAyBusF,EAAzBvsF,KAAM6vB,EAAmB08D,EAAnB18D,QAAS87K,EAAUp/G,EAAVo/G,MAEvB,OACE,iBAAKlwG,UAAWi+P,GAAW15V,GAA3B,UACE,mBAAMy7F,UAAU,mCAAhB,WACE,eAAGA,UAAS,UAAKk+P,GAAS35V,GAAd,iBACZ,kBAAKy7F,UAAU,WAAf,UACGkwG,GAAQ,iBAAKlwG,UAAU,mBAAf,SAAmCkwG,KAAe,0BAC1D97K,WC6DX,GArFoB,WAAO,IAAD,EAClB+pU,EAAqB,oBACrBt7H,EAAuBr7D,EAAYuyC,IAEnCqkJ,EAAkB52L,GAAY,SAAChkK,GAAD,OAClC49M,GAAkB59M,EAAO67M,GAAWoB,qBAGnBu1I,EAAoBxuL,GAAY,SAAChkK,GAAD,OACjDo1M,GAAiCp1M,EAAO26V,MADlC5lJ,UAIF8lJ,EAAoB72L,GAAY,SAAChkK,GAAD,OACpC6hN,GAAwC7hN,EAAO26V,MAG3CG,EAAe7rL,GAAY,uBACjC,EAAwC2kL,GAItC/3K,GACAi/K,EACAH,EACA,CACEnjL,aAAc6nD,GAEhB,CACE80H,kBAAmB,wBACnBC,sBAAuB,QAZnB/kV,EAAR,EAAQA,KAAM2V,EAAd,EAAcA,UAAWsnJ,EAAzB,EAAyBA,WAgBnBqtJ,GAAa5rL,EAAAA,EAAAA,UAAQ,WAAO,IAAD,MAC/B,OAAOykN,IAAoBtkJ,GAAS8G,OAChC+lJ,GACEJ,EADqB,iBAErBC,QAFqB,IAErBA,OAFqB,EAErBA,EAAiBxtP,eAFI,SAGrBiyH,GAEF27H,GACEL,EADuB,iBAEvBtrV,QAFuB,IAEvBA,OAFuB,EAEvBA,EAAMA,YAFiB,QAET,GACdgwN,EAHuB,iBAIvBu7H,QAJuB,IAIvBA,OAJuB,EAIvBA,EAAiBxtP,eAJM,YAM5B,CAACwtP,EAAiBv7H,EAAsBmzH,EAAiBnjV,IAE5D,OAAK2V,GAAcsnJ,GAAej9J,GAKhC,UAAC,GAAD,WACE,mCACE,UAAC,GAAD,CACEo7L,YAAakwJ,EACbnI,gBAAiBA,IAElBqI,IACC,UAAC,GAAD,CACE95V,KAAK,OACL2rM,MAAM,+BACN97K,QAAQ,mJAIZ,UAAC,GAAD,CAA2B4rE,UAAU,4GAArC,UACE,UAAC82P,GAAD,CACEvuQ,QAAS40O,EACTtqT,KAAI,iBAAEA,QAAF,IAAEA,OAAF,EAAEA,EAAMA,YAAR,QAAgB,GACpB2V,UAAWA,EACXsnJ,WAAYA,EACZm+B,YAAakwJ,EACb3hC,SAAU,SAAC1vO,EAAK2xQ,EAAe1/S,GAC7B,OAAO+tC,EAAI4xQ,cAAgB5xQ,EAAI4xQ,cAAc3nV,GAAK+1E,EAAI/1E,IAExDigV,WAAY,kBAAM,gBA5BnB,2BCgBX,GA7EuD,WACrD,IAAMpiV,EAAWi0J,IACTwR,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACA4iC,EAAuBz1C,GAC7B,SAAChkK,GAAD,OAAsBA,EAAM+6M,qBADtBtB,mBAGF37B,EAAkB9Z,GACtB,SAAChkK,GAAD,OAAsBA,EAAMk+K,UAAUJ,mBAGxC,EACE7B,GAAkC,CAAEpF,OAAAA,IADxBgkC,EAAd,EAAQxrM,KAA2B8rV,EAAnC,EAAwBn2U,UAGlBo2U,GAAmBrtN,EAAAA,EAAAA,UAAQ,WAC/B,GAAI8sE,GAAYA,EAASxgN,OAAS,EAOhC,OANsByjL,EAClB+8B,EACAA,EAASt9M,QACP,SAAC67K,GAAD,OAAcA,EAAQx/I,cAAc3rB,WAAW,eAGhCmE,KAAsB,SAACgnK,EAASpsI,GACnD,MAAO,CACL7wC,IAAKi9K,EACLtwE,MAAOswE,EACPzQ,SAAU8wC,EACNA,IAAuBrgC,EACb,IAAVpsI,QAIT,CAAC6tK,EAAUpB,EAAoB37B,IAE5Bu9K,GAAuBttN,EAAAA,EAAAA,UAAQ,WACnC,GAAIqtN,EAAkB,CACpB,IAAMhiL,EAAUgiL,EAAiBzxM,MAC/B,SAACxuJ,GAAD,OAAOA,EAAEgB,MAAQs9M,KAEnB,OAAOrgC,KAIR,CAACgiL,EAAkB3hJ,IAEtB,OACE,iCACE,kBAAKj9G,UAAU,4BAAf,WACE,gBAAIA,UAAU,2BAAd,sCACA,2BACE,iBAAKA,UAAU,oBAAf,UACE,iBAAKA,UAAU,OAAf,UACI2+P,GACFC,GACAC,GACE,UAAC,GAAD,CACEj4H,cAAeg4H,EACf33H,mBAAoB,SAACihH,GAAD,OAClBtzU,EAAS8oM,GAAiBwqI,KAH9B,UAME,UAAC,GAAD,CACEvgH,cAAek3H,EAAqBvyP,MACpCs7H,2BAA2B,6CAC3BC,WAAY,YAIhB,sCC/DHi3H,GAAoC,SAC/CC,GAEA,IAAMC,EAAmBD,EAAQlhJ,UAAUjoM,KACzC,SAACkoM,GAAD,OAAcA,EAASC,6BAGnBkhJ,EAqDN,SACEphJ,EACAmhJ,GAiBA,OAfiBA,EAAiBppV,KAAI,SAACm6R,GAAqB,IAAD,IACnDmvD,EAAK,oBACTrhJ,EAAU1wD,MACR,SAAC2wD,GAAD,OAAcA,EAASC,4BAA8BgyF,YAF9C,aACT,EAEGmvD,aAHM,QAGG,EAQd,MAN2C,CACzCnvD,gBAAAA,EACA7B,iBAAkB,QAClBpvS,MAAOogW,EAAQH,EAAQliL,kBAlEPsiL,CACpBJ,EAAQlhJ,UACRmhJ,GAGII,EAsEN,SACEvhJ,EACAmhJ,GAEA,IAAMK,EAAWL,EAAiBppV,KAAI,SAACm6R,GAAqB,IAAD,IACnDj+F,EAAO,oBACX+L,EAAU1wD,MACR,SAAC2wD,GAAD,OAAcA,EAASC,4BAA8BgyF,YAF5C,aACX,EAEGj+F,eAHQ,QAGG,EAQhB,MAN2C,CACzCi+F,gBAAAA,EACA7B,iBAAkB,UAClBpvS,MAAOgzM,EAAUitJ,EAAQliL,kBAM7B,OAAOwiL,EAzFeC,CACtBP,EAAQlhJ,UACRmhJ,GAGIvsD,EAAgB,aAAOwsD,GAAP,GAAyBG,IACzCtyD,EAAgB2F,EAAiB76R,QACrC,SAAC2nV,EAAcvuJ,GAAf,OACEA,EAAalyM,MAAQygW,EAAevuJ,EAAalyM,MAAQygW,IAC3D,GAGIptD,EAgFN,SACEt0F,EACAmhJ,GA8BA,OA5BYA,EAAiBppV,KAAI,SAACm6R,GAChC,IAAMjyF,EAAWD,EAAU1wD,MACzB,SAAC2wD,GAAD,OAAcA,EAASC,4BAA8BgyF,KAGvD,IAAKjyF,EACH,MAAMn6M,MAAM,qCAAD,OAAsCosS,IAmBnD,MAhBuC,CACrC7B,iBAAkB,MAClB6B,gBAAAA,EACAuC,UAAW,KACX3F,YAAa,IAAInlH,KAAKmD,aAAa,QAAS,CAC1Cj2E,MAAO,UACPsvH,sBAAuB,IAEzBuuE,mBAAoB,IAAI/qH,KAAKmD,aAAa,QAAS,CACjDj2E,MAAO,UACPsvH,sBAAuB,IAEzB6oE,WAAY,GACZ/tS,MAAOg/M,EAAShM,QAAUgM,EAASohJ,UA1GZM,CAC3BT,EAAQlhJ,UACRmhJ,GAEI5sD,EAAuBD,EAAqBv6R,QAChD,SAAC2nV,EAAcvuJ,GAAf,OACEA,EAAalyM,MAAQygW,EAAevuJ,EAAalyM,MAAQygW,IAC3D,GAGF,MAAO,CACLxoV,GAAI6lM,KACJr4M,KAAM2xN,GAAc09E,mBACpB/D,wBAAyB55E,GAAiBwpI,MAC1C/rD,6BAA6B,EAC7BxjG,MAAO,GACPuiG,iBAAAA,EACAN,qBAAAA,EACAxF,YAAa,IAAInlH,KAAKmD,aAAa,QAAS,CAC1Cj2E,MAAO,WACP6lE,SAAU,MACVmlL,yBAA0B,EAC1B/hH,SAAU,YAEZorD,cAAe,IAAIvhH,KAAKmD,aAAa,QAAS,CAC5Cj2E,MAAO,WACP6lE,SAAU,MACVmlL,yBAA0B,EAC1B/hH,SAAU,YAEZivD,WAAY,GACZC,WAAY,QACZC,cAAAA,EACAsF,qBAAAA,ICtEG,SAASz5G,GAAI0kD,GAClB,OAAOA,EAAQzlO,QACb,SAAC+nV,EAAeC,GAAhB,OAAmCD,EAAiBC,IACpD,GAIG,SAASC,GAAUjhW,GACxB,OAAOA,EAAQ,IAAJA,EAAW,ECMjB,IAAMkhW,GAAgC,SAC3Cf,GAEA,IAAMC,EAAmBD,EAAQlhJ,UAAUjoM,KACzC,SAACkoM,GAAD,OAAcA,EAASC,6BAGnBkhJ,EA6CR,SACEphJ,EACAmhJ,GAiBA,OAfiBA,EAAiBppV,KAAI,SAACm6R,GAAqB,IAAD,IACnDmvD,EAAK,oBACTrhJ,EAAU1wD,MACR,SAAC2wD,GAAD,OAAcA,EAASC,4BAA8BgyF,YAF9C,aACT,EAEGmvD,aAHM,QAGG,EAQd,MAN2C,CACzCnvD,gBAAAA,EACA7B,iBAAkB,QAClBpvS,MAAO+gW,GAAUX,OA1DCC,CACpBJ,EAAQlhJ,UACRmhJ,GAGII,EA8DR,SACEvhJ,EACAmhJ,GAEA,IAAMK,EAAWL,EAAiBppV,KAAI,SAACm6R,GAAqB,IAAD,IACnDj+F,EAAO,oBACX+L,EAAU1wD,MACR,SAAC2wD,GAAD,OAAcA,EAASC,4BAA8BgyF,YAF5C,aACX,EAEGj+F,eAHQ,QAGG,EAQhB,MAN2C,CACzCi+F,gBAAAA,EACA7B,iBAAkB,UAClBpvS,MAAO+gW,GAAU/tJ,OAMrB,OAAOutJ,EAjFiBC,CACtBP,EAAQlhJ,UACRmhJ,GAGIvsD,EAAgB,aAAOwsD,GAAP,GAAyBG,IACzCtyD,EAAgB2F,EAAiB76R,QACrC,SAAC2nV,EAAcvuJ,GAAf,OACEA,EAAalyM,MAAQygW,EAAevuJ,EAAalyM,MAAQygW,IAC3D,GA4BF,MAzBiC,CAC/BxoV,GAAI6lM,KACJr4M,KAAM2xN,GAActyH,OACpBssG,MAAO,GACP09F,cAAe6E,EACf9F,YAAa,IAAInlH,KAAKmD,aAAa,QAAS,CAC1Cj2E,MAAO,WACP6lE,SAAU,MACVmlL,yBAA0B,EAC1B/hH,SAAU,YAEZorD,cAAe,IAAIvhH,KAAKmD,aAAa,QAAS,CAC5Cj2E,MAAO,WACP6lE,SAAU,MACVmlL,yBAA0B,EAC1B/hH,SAAU,YAEZivD,WAAY,GACZC,WAAY,QACZC,cAAAA,EACA+C,wBAAyB55E,GAAiBq6E,SAC1CvD,eAAe,EACf2G,6BAA6B,ICpD1B,ICRKqsD,GCoEZ,GAzDwD,WACtD,IAAQ1lL,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACA4iC,EAAuBz1C,GAC7B,SAAChkK,GAAD,OAAsBA,EAAM+6M,qBADtBtB,mBAIR,EACEv9B,GACE,CACErF,OAAAA,EACAuC,QAASqgC,GAEX,CACExsC,KAAMwsC,EAAmBp/M,OAAS,IAP1B+/M,EAAd,EAAQ/qM,KAAkCmtV,EAA1C,EAA8BlwL,WAWxB6kF,GAASpjH,EAAAA,EAAAA,UAAQ,WACrB,IAAKyuN,GAAyBpiJ,EAC5B,MFnB6B,CAC/BqiJ,qBAAsBnB,GAHxBoB,EEqBmCtiJ,GFjBjCuiJ,mBAAoBL,GAA8BI,IALf,IACrCA,IEuBG,CAACtiJ,EAAgBoiJ,IAEpB,OACE,6BACE,UAAC,GAAD,KACA,UAAC,GAAD,CAAmBhgQ,UAAU,+BAA7B,UACE,kBAAKA,UAAU,cAAf,WACE,gBAAIA,UAAU,OAAd,sCACA,UAAC,GAAD,WACE,iBAAKA,UAAU,mBAAf,SACG20J,IAAWqrG,GACV,UAAC,GAAD,CAAa1zJ,MAAOqoD,EAAOsrG,wBAE3B,UAAC,GAAD,kBD7ChB,SAAYF,GAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,YAAAA,GAAAA,cAAZ,CAAYA,KAAAA,GAAAA,KEEL,IC4DP,GAzCK,SAAC,GAA6D,IAA3DhpV,EAA0D,EAA1DA,GAAIqpV,EAAsD,EAAtDA,gBAAiB5gP,EAAqC,EAArCA,cAAejU,EAAsB,EAAtBA,SAAUzhG,EAAY,EAAZA,MAC5CqtM,EAAW3vC,GAAY,SAAChkK,GAAD,OAC7B00M,GAAgB10M,EAAOuT,MADjBogM,OAGFviM,EAAWi0J,IACjB,EDxB6B,SAC7B/+J,GAEA,OAAQA,GACN,KAAKi2V,GAAe1zV,QAKpB,KAAK0zV,GAAeM,YAClB,MAAO,CACLC,sBAAuB,iBACvBC,uBAAmBx6V,GAEvB,KAAKg6V,GAAevP,QAClB,MAAO,CACL8P,sBAAuB,kBACvBC,kBAAmB,uBAEvB,KAAKR,GAAe/O,YAClB,MAAO,CACLsP,sBAAuB,gBACvBC,kBAAmB,qBAEvB,QACE,MAAO,ICD0C3d,CAAgB94U,GAA7Dw2V,EAAR,EAAQA,sBAAuBC,EAA/B,EAA+BA,kBAC/B,OACE,kBACEvgQ,UAAS,0DAAqDugQ,GADhE,WAGE,iBAAKvgQ,UAAS,kBAAd,UACE,qBACEjpF,GAAIA,EACJipF,UAAS,mEAA8DsgQ,GACvEt1P,QAAS,WACPp2F,EAASmjM,GAAiB,CAAE9J,YAAal3L,MAJ7C,UAOGqpV,GAAkB,UAACA,GAAD,WAAqB5gP,KAAoB,oBAE5D,iBAAKxf,UAAU,oDAAf,UACE,eACEA,UAAS,2DACPm3G,EAAS,aAAe,cAOlC,iBACEn3G,UAAS,4DACPm3G,EAAS,iBAAmB,WAFhC,SAKG5rG,QCrDIi1P,GAKR,SAAC,GAA4C,ItBoBY3iU,EsBpBtD8G,EAAyC,EAAzCA,UAAW87T,EAA8B,EAA9BA,UAAWn4Q,EAAmB,EAAnBA,OAAQ3sE,EAAW,EAAXA,KACpC,OACE,kBAAKqkF,UAAU,wCAAf,WACE,kBAAKA,UAAU,mEAAf,WACE,eAAGA,UAAU,oEtBgByCniE,EsBfP8G,EtBgB9Cm+L,KAAOjlM,GAAM8D,OAAO,qBsBdvB,kBAAKq+D,UAAU,gFAAf,WACE,iBAAKA,UAAU,yBAAf,SAAyC1X,KAEzC,iBAAK0X,UAAU,oDAAf,SACGrkF,OAGJ8kV,EAAY,GACX,iBAAKzgQ,UAAU,qEAAf,SACiB,IAAdygQ,EAAA,mBAAgCA,EAAhC,aAGH,8BAKKC,GAER,SAAC,GAAe,IAAbxwJ,EAAY,EAAZA,MACN,OACE,gBAAIlwG,UAAU,iDAAd,SAAgEkwG,KC5BvDywJ,GAAoB,SAAC,GAI3B,IAAD,IAHJj+H,SAAYp2H,EAGR,EAHQA,MAAO/+D,EAGf,EAHeA,MAAO2rI,EAGtB,EAHsBA,OAItB0nL,EAAgB,GACdC,EAA4B3nL,EAAS,GAAKA,EAAS,EACnD4nL,EAAkB5nL,EAAO4qD,eAAe,QAAS,CACrDE,sBAAuB,EACvBD,sBAAuB,IAQzB,OALI7qD,EAAS,EACX0nL,EAAgBE,EAAkB,wBACzB5nL,EAAS,IAClB0nL,EAAgBE,EAAgB/uV,QAAQ,IAAK,IAAM,yBAGnD,iCACE,kBAAKiuF,UAAU,YAAf,WACE,kBAAKA,UAAU,oCAAf,WACE,6BACE,oBAAQA,UAAU,0CAAlB,SACGsM,KAEH,UAAC,GAAD,WACE,eAAGtM,UAAU,0CAAb,SAAwDzyD,SAG3DszT,GACC,UAAC,GAAD,WACE,kBACE7gQ,UAAS,UACP8gQ,EAAgBjnV,SAAS,KACrB,iBACA,oBAHG,4EADX,WAOE,2BAAOinV,EAAgBjnV,SAAS,KAAO,IAAM,OAC7C,qCACA,6BAAOinV,EAAgB/uV,QAAQ,IAAK,IAApC,YAGF,SAGN,iBAAKiuF,UAAU,iCAAf,SAAiD4gQ,MA3BnBt0P,MCf/B,SAASy0P,GACdC,EACAnuV,EACAouV,GACkC,IAAD,EAC3B7tS,EAAO,iBACXvgD,QADW,IACXA,OADW,EACXA,EACI+E,QAAwC,SAACC,EAAKqzR,GAC9C,IAAMxzD,ECNP,SACLwpH,EACAC,GAQA,IANA,IAAMpzD,EAAiB,GAEjB/zR,EAAIknV,EAAKrjW,OACTe,EAAIuiW,EAAKtjW,OAGNC,EAAI,EAAGA,GAAKkc,EAAGlc,IAAK,CAC3BiwS,EAAGjwS,GAAK,GACR,IAAK,IAAImwD,EAAI,EAAGA,GAAKrvD,EAAGqvD,IAIZ,IAANnwD,EACFiwS,EAAGjwS,GAAGmwD,GAAKA,EAKE,IAANA,EACP8/O,EAAGjwS,GAAGmwD,GAAS,IAAJnwD,EAKJojW,EAAKpjW,EAAI,KAAOqjW,EAAKlzS,EAAI,GAChC8/O,EAAGjwS,GAAGmwD,GAAK8/O,EAAGjwS,EAAI,GAAGmwD,EAAI,GAMzB8/O,EAAGjwS,GAAGmwD,GAAK96C,KAAKC,IACd26R,EAAGjwS,GAAGmwD,EAAI,GAAK,EACf8/O,EAAGjwS,EAAI,GAAGmwD,GAAK,IACf8/O,EAAGjwS,EAAI,GAAGmwD,EAAI,GAAK,KAS3B,OAAO8/O,EAAG/zR,GAAGpb,GDzCUwiW,CACfJ,EACA91D,EAASvrS,IAAI+oC,eAGf,GAAIgvM,EAAWupH,EACb,OAAOppV,EAGT,IAAMwpV,EAAiB,CAAE3pH,SAAAA,EAAU7kO,KAAMq4R,GAGzC,OADArzR,EAAIrX,KAAK6gW,GACFxpV,IACN,IACFF,MAAK,SAAC0O,EAAGuN,GAAJ,OAAUvN,EAAEqxN,SAAW9jN,EAAE8jN,mBAjBtB,QAiBmC,GAEhD,OAAOtkL,EE6CT,OA/EA,SAEEvgD,GACA,IAaoB,IAbdyuV,EAAoB,WACpBC,EAAqB,YACrBC,EAAoB,WAGpBC,EAGF,GAEAC,EAAa,OAAG7uV,QAAH,IAAGA,OAAH,EAAGA,EAAMs6I,MACxB,SAAC99I,GAAD,OAAOA,EAAE1P,IAAI+oC,gBAAkB44T,KAOjC,GALKI,IACHA,EAAa,oBACXX,GAAmBO,EAAmBzuV,EAAM,IAAI,UADrC,aACX,EAAoDA,YADzC,QACiD,MAG5D6uV,EACF,OAAOA,EAAc5iW,MAAM4pC,cAG7B,IAGqB,IAHjBi5T,EAAc,OAAG9uV,QAAH,IAAGA,OAAH,EAAGA,EAAMs6I,MACzB,SAAC99I,GAAD,OAAOA,EAAE1P,IAAI+oC,gBAAkB64T,KAE5BI,IACHA,EAAc,oBACZZ,GAAmBQ,EAAoB1uV,EAAM,IAAI,UADrC,aACZ,EAAqDA,YADzC,QACiD,MAG7D8uV,IACFF,EAAWG,UAAYD,EAAe7iW,OAGxC,IAIoB,IAeb,MACD+iW,EApBFC,EAAa,OAAGjvV,QAAH,IAAGA,OAAH,EAAGA,EAAMs6I,MACxB,SAAC99I,GAAD,OAAOA,EAAE1P,IAAI+oC,gBAAkB84T,KAYjC,OATKM,IACHA,EAAa,oBACXf,GAAmBS,EAAmB3uV,EAAM,IAAI,UADrC,aACX,EAAoDA,YADzC,QACiD,MAG5DivV,IACFL,EAAWM,SAAWD,EAAchjW,OAGlC2iW,EAAWG,WAAaH,EAAWM,SAEnCN,EAAWG,UAAUl5T,cACrB,IACA+4T,EAAWM,SAASr5T,eAhDC,CAAC,QAoDPpnC,SAAQ,SAAC0+U,GACxB,IAEkB,IAFdgiB,EAAW,OAAGnvV,QAAH,IAAGA,OAAH,EAAGA,EAAMs6I,MAAK,SAAC99I,GAAD,OAAOA,EAAE1P,IAAI+oC,gBAAkBs3S,KAEvDgiB,IACHA,EAAW,oBAAGjB,GAAmB/gB,EAAMntU,EAAM,IAAI,UAAtC,aAAG,EAAuCA,YAA1C,QAAkD,MAG3DmvV,IACFH,EAAcG,EAAYljW,MAAM4pC,kBAIpC,8BACEm5T,SADF,QAEEJ,EAAWG,iBAFb,QAGEH,EAAWM,gBAHb,QAIE,sBCxDN,OAlBA,SACElvV,GAEA,IAIiB,IAJXovV,EAAiB,QAEnBC,EAAU,OAAGrvV,QAAH,IAAGA,OAAH,EAAGA,EAAMs6I,MAAK,SAAC99I,GAAD,OAAOA,EAAE1P,IAAI+oC,gBAAkBu5T,KAM3D,OAJKC,IACHA,EAAU,oBAAGnB,GAAmBkB,EAAgBpvV,EAAM,IAAI,UAAhD,aAAG,EAAiDA,YAApD,QAA4D,MAGpEqvV,EACKA,EAAWpjW,MAAM4pC,cAGnB,yBCQT,OAzBA,SAAyB5pC,GACvB,GAAIA,EAAM+a,SAAS,eAAgB,CACjC,IAAMsoV,GAAe,IAAIhlV,MAAO0hB,WAGhC,OAAqB,IAAjBsjU,EACK,mCAIY,KAAjBA,EACK,qCAIY,IAAjBA,EACK,+BAGF,6BAGT,MAAO,gCCST,OA7BA,SACEtvV,GACgB,IAAD,EAKE,IAObgvV,EAXEO,EAAiB,QAGnBC,EAAU,OAAGxvV,QAAH,IAAGA,OAAH,EAAGA,EAAMs6I,MAAK,SAAC99I,GAAD,OAAOA,EAAE1P,IAAI+oC,gBAAkB05T,KAI3D,OAHKC,IACHA,EAAU,oBAAGtB,GAAmBqB,EAAgBvvV,EAAM,IAAI,UAAhD,aAAG,EAAiDA,YAApD,QAA4D,MAEpEwvV,EACKA,EAAWvjW,MAAM4pC,eAPD,CAAC,UAWTpnC,SAAQ,SAAC0+U,GACxB,IACkB,IADdgiB,EAAW,OAAGnvV,QAAH,IAAGA,OAAH,EAAGA,EAAMs6I,MAAK,SAAC99I,GAAD,OAAOA,EAAE1P,IAAI+oC,gBAAkBs3S,KACvDgiB,IACHA,EAAW,oBAAGjB,GAAmB/gB,EAAMntU,EAAM,IAAI,UAAtC,aAAG,EAAuCA,YAA1C,QAAkD,MAG3DmvV,IACFH,EAAcG,EAAYljW,MAAM4pC,kBAIpC,UAAOm5T,SAAP,QAAsB,OCTxB,OAjBA,SAEEhvV,GACA,IAIe,IAFXyvV,EAAQ,OAAGzvV,QAAH,IAAGA,OAAH,EAAGA,EAAMs6I,MAAK,SAAC99I,GAAD,MAFA,QAEOA,EAAE1P,IAAI+oC,iBAKvC,OAHK45T,IACHA,EAAQ,oBAAGvB,GALa,MAKyBluV,EAAM,IAAI,UAAnD,aAAG,EAAoDA,YAAvD,QAA+D,MAErEyvV,EACKA,EAASxjW,MAAM4pC,cAGjB,MCaT,GAlBK,SAAC,GAAgC,IAA9B0vK,EAA6B,EAA7BA,aAAc7sG,EAAe,EAAfA,SACd32F,EAAWi0J,IACX05L,EAA2B/6L,GAAY,SAAChkK,GAAD,OAC3C20M,GAAqB30M,EAAO40M,MAY9B,OAREjnE,EAAAA,EAAAA,YAAU,WACHoxN,GACH3tV,EAASqjM,GAAc,CAAEhK,YAAamK,EAAa,QAEpD,KAIE,iBAAKp4G,UAAU,GAAf,SAAmBuL,KCxBb,SAASi3P,GAAYh+V,EAAI+jE,EAAIqnE,QAC7B,IAAPrnE,IAAiBA,EAAK,QACb,IAATqnE,IAAmBA,EAAO,IAC9B,IAAI1gI,ECJO,SAAsB1K,EAAI+jE,QAC1B,IAAPA,IAAiBA,EAAK,GAC1B,IAAIza,GAAQ2jF,EAAAA,EAAAA,SAAO,GACfp+H,GAAUo+H,EAAAA,EAAAA,UACVt6G,GAAWs6G,EAAAA,EAAAA,QAAOjtI,GAClBi+V,GAAUxxN,EAAAA,EAAAA,cAAY,WAAc,OAAOnjF,EAAMzjD,UAAY,IAC7DiH,GAAM2/H,EAAAA,EAAAA,cAAY,WAClBnjF,EAAMzjD,SAAU,EAChBgJ,EAAQhJ,SAAWyQ,aAAazH,EAAQhJ,SACxCgJ,EAAQhJ,QAAUkJ,YAAW,WACzBu6C,EAAMzjD,SAAU,EAChB8sB,EAAS9sB,YACVk+D,KACJ,CAACA,IACA/sC,GAAQy1G,EAAAA,EAAAA,cAAY,WACpBnjF,EAAMzjD,QAAU,KAChBgJ,EAAQhJ,SAAWyQ,aAAazH,EAAQhJ,WACzC,IAUH,OARA8mI,EAAAA,EAAAA,YAAU,WACNh6G,EAAS9sB,QAAU7F,IACpB,CAACA,KAEJ2sI,EAAAA,EAAAA,YAAU,WAEN,OADA7/H,IACOkqB,IACR,CAAC+sC,IACG,CAACk6R,EAASjnU,EAAOlqB,GDvBfoxV,CAAal+V,EAAI+jE,GAAKk6R,EAAUvzV,EAAG,GAAI4pB,EAAS5pB,EAAG,GAAIrI,EAAQqI,EAAG,GAE3E,OADAiiI,EAAAA,EAAAA,WAAUtqI,EAAO+oI,GACV,CAAC6yN,EAAS3pU,GEWd,IClBK+qT,GDkBC8e,GAKR,SAAC,GAAqD,IAAnD10J,EAAkD,EAAlDA,YAAa20J,EAAqC,EAArCA,UAAWC,EAA0B,EAA1BA,SAAUC,EAAgB,EAAhBA,UAClCluV,EAAWi0J,KACjB13B,EAAAA,EAAAA,YAAU,WACRv8H,EACEqkM,GAAmB,CACjBhL,YAAAA,EACAiL,qBAAqB,GAAD,OAAK4pJ,EAAU,GAAGC,KAAlB,aAA2BD,EAAU,GAAGE,WAAxC,aAAuDF,EAAU,GAAGG,SACxF9pJ,iBAAkB,QAGrB,IAEH,MACE3xC,GAAY,SAAChkK,GAAD,OACVm2M,GAA4Bn2M,EAAOyqM,MAF/BoL,EAAR,EAAQA,oBAAqBE,EAA7B,EAA6BA,qBAAsBD,EAAnD,EAAmDA,iBAmBnD,OACE,iCACE,kBAAKt5G,UAAU,WAAf,WACE,iBAAKA,UAAU,6BAAf,UACE,UAAC,GAAD,CACEgL,QAAS,kBAAMp2F,EAAS6kM,GAAOxL,KAC/Bm0H,WAAW,UACXt4T,MAAOo4U,GAAYiB,QACnBI,eAAe,oCAJjB,UAME,sCAIJ,iBAAKvjP,UAAU,4BAAf,UACE,UAAC,GAAD,CACEgL,QAAS,kBAAMp2F,EAAS8kM,GAAQzL,KAChCm0H,WAAW,WACXt4T,MAAOo4U,GAAYiB,QACnBI,eAAe,4CAJjB,UAME,sCAIJ,iBAAKvjP,UAAU,yBAAf,UACE,UAAC,GAAD,CACEgL,QAAS,kBACPp2F,EACEqkM,GAAmB,CACjBhL,YAAAA,EACAiL,qBAAqB,GAAD,OAAK4pJ,EAAU,GAAGC,KAAlB,aAA2BD,EAAU,GAAGE,WAAxC,aAAuDF,EAAU,GAAGG,SACxF9pJ,iBAAkB,OAIxBipH,WAAW,QACXt4T,MAAOo4U,GAAYkB,SACnBG,eAAe,oCAZjB,UAcE,0CAIJ,eACEvjP,UAAU,8DACV0U,MAAO,CAAE8qD,gBAAiB,oCAE5B,iBACEx/D,UAAU,+BACVg5C,IA/DFqgE,GAAuBypJ,EAAUjlW,OAAS,EACtC,sDAAN,OACEq3B,0CADF,iBAES2tU,EAFT,YAEqBD,EAFrB,oBAE0CE,EACvCltV,KACC,SAACuyF,GAAD,gBACKA,EAAS46P,KADd,aACuB56P,EAAS66P,WADhC,aAC+C76P,EAAS86P,YAEzD7mU,KAAK,QAEF,sDAAN,OAA6DlH,0CAA7D,iBAA0G2tU,EAA1G,YAAsHD,EAAtH,oBAA2IrpJ,EAA3I,iBAAwKD,YCnD9K,SAAYuqI,GAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAZ,CAAYA,KAAAA,GAAAA,KCSZ,IAAMqf,GAAiD,CACrD,CACEC,iBAAkB,CAAC,WACnBne,SAAUnB,GAAAA,MACV//T,KAAM,iCAER,CACEq/U,iBAAkB,CAAC,QAAS,OAC5Bne,SAAUnB,GAAAA,MACV//T,KAAM,+BAER,CACEq/U,iBAAkB,CAAC,UACnBne,SAAUnB,GAAAA,MACV//T,KAAM,gCAER,CACEq/U,iBAAkB,CAAC,SACnBne,SAAUnB,GAAAA,MACV//T,KAAM,+BAER,CACEq/U,iBAAkB,CAAC,WACnBne,SAAUnB,GAAAA,MACV//T,KAAM,oCAwCV,GAhCK,SAAC,GAQC,IAPLi6U,EAOI,EAPJA,gBACA5Y,EAMI,EANJA,aACA7iB,EAKI,EALJA,YAMM8gC,EAAuBrF,EAAgB3gU,cAEvCgoT,EAAY8d,GAAqB/1M,MAAK,SAACk2M,GAAD,OAC1CA,EAAKF,iBAAiBtlV,MAAK,SAACylV,GAAD,OAAQF,EAAqBvpV,SAASypV,SAGnE,OAAOle,GACL,gCACGA,EAAUJ,WAAanB,GAAAA,UACtB,eAAG7jP,UAAS,UAAKolP,EAAUthU,KAAf,YAAuBw+S,MAEnC,iBACEtpL,IAAKosM,EAAUthU,KACfk8E,UAAWmlP,EACXzuH,IAAKqnI,OAKX,2BC5DEwF,GAAiC,CACrC,CACEzF,QAAS,SACT9Y,SAAUnB,GAAAA,MACV//T,KAAM,gCAER,CACEg6U,QAAS,OACT9Y,SAAUnB,GAAAA,MACV//T,KAAM,8BAER,CACEg6U,QAAS,WACT9Y,SAAUnB,GAAAA,MACV//T,KAAM,kCAER,CACEg6U,QAAS,UACT9Y,SAAUnB,GAAAA,MACV//T,KAAM,iCAER,CACEg6U,QAAS,oBACT9Y,SAAUnB,GAAAA,MACV//T,KAAM,4BAER,CACEg6U,QAAS,QACT9Y,SAAUnB,GAAAA,MACV//T,KAAM,+BAER,CACEg6U,QAAS,SACT9Y,SAAUnB,GAAAA,MACV//T,KAAM,gCAER,CACEg6U,QAAS,UACT9Y,SAAUnB,GAAAA,MACV//T,KAAM,kCAoCV,GA5BK,SAAC,GAQC,IAPLg6U,EAOI,EAPJA,QACA3Y,EAMI,EANJA,aACA7iB,EAKI,EALJA,YAMM8iB,EAAYme,GAAap2M,MAAK,SAACk2M,GAAD,OAAUvF,EAAQjkV,SAASwpV,EAAKvF,YAEpE,OAAO1Y,GACL,gCACGA,EAAUJ,WAAanB,GAAAA,UACtB,eAAG7jP,UAAS,UAAKolP,EAAUthU,KAAf,YAAuBw+S,MAEnC,iBACEtpL,IAAKosM,EAAUthU,KACfk8E,UAAWmlP,EACXzuH,IAAK0uH,EAAU0Y,aAKrB,2BCnCE7vJ,GAAc,oBACdu1J,GAAoB,CAAC,eAAgB,gBAcrCC,GAA0B,CAAC,UAKjC,IA00BA,GA10BoB,WAAO,IAAD,YAChB7oL,EAAcw4C,KAAdx4C,UACFhmK,EAAWi0J,IACX66L,EAAoBl8L,GACxB,SAAChkK,GAAD,OAAsBA,EAAM4yS,QAAQ3mG,wBAEtC,EAA6BjoC,GAC3B,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBADtBxG,EAAR,EAAQA,OAAQE,EAAhB,EAAgBA,SAIVsoD,EAAuBr7D,EAAYuyC,IAEzC,EAIIx7B,GAAyB,CAC3BlE,OAAAA,EACAO,UAAAA,EACAI,aAAc6nD,IANR8gI,EADR,EACE9wV,KACW+wV,EAFb,EAEEp7U,UACWq7U,EAHb,EAGEp7U,UAOF,EACEy3J,GAA8B,CAC5B7F,OAAAA,EACAO,UAAAA,EACAL,SAAUsoD,IAJAihI,EAAd,EAAQjxV,KAAqCkxV,EAA7C,EAAkCv7U,UAOlC,EAGIy3J,GAAoC,CACtC5F,OAAAA,EACAO,UAAAA,EACAL,SAAUsoD,IALJmhI,EADR,EACEnxV,KACWoxV,EAFb,EAEEz7U,UAOF,EACEg2J,GAAmC,CACjCnE,OAAAA,EACAO,UAAAA,EACAI,aAAc6nD,IAJJqhI,EAAd,EAAQrxV,KAA2CsxV,EAAnD,EAAwC37U,UAOxC,GAOI+oH,EAAAA,EAAAA,UAAQ,WAAO,IAAD,QACV2iK,EAAG,OAAGyvD,QAAH,IAAGA,OAAH,EAAGA,EAAmBS,kBAAkBrjW,QAC/C,SAACsjW,GAAD,MAA0D,QAApCA,EAAiBvpL,kBAEnCq5H,EAAW,OAAGwvD,QAAH,IAAGA,OAAH,EAAGA,EAAmBS,kBAAkBrjW,QACvD,SAACsjW,GAAD,MAA0D,gBAApCA,EAAiBvpL,kBAEnCwpL,EAAkB,OAAGX,QAAH,IAAGA,OAAH,EAAGA,EAAmB/G,SAAShnV,KAAI,SAAC2uV,GAC1D,OAAO,oBACFA,GADL,IAEE/lU,SAAU+lU,EAAQC,cAClB/D,UAAW8D,EAAQE,aAAa5mW,OAChCg2M,sBAAuB0wJ,EAAQE,aAAa7uV,KAAI,SAAC8uV,EAAUl0T,GACzD,OACE,kBACEwvD,UAAU,mEADZ,WAIE,iBAAKA,UAAU,sDAAf,SACGm6P,GAAqCuK,EAASnI,oBAEjD,kBAAKv8P,UAAU,2BAAf,WACE,eACEyL,KAAMi5P,EAASC,QACfxjW,OAAO,SACPm1N,IAAI,aACJt2H,UAAU,qCAJZ,UAME,UAAC,GAAD,WACE,2BAAO0kQ,EAASE,gBAGnBvL,GACCz5V,OAAOoP,QAAQ01V,EAASG,WACxBjvV,KAAI,WAAsB46B,GAAW,IAAD,wBAAzB7wC,EAAyB,EAAzBA,IAAKb,EAAoB,EAApBA,MAChB,OA3FlB,SAAyBa,GACvB,OAAQ8jW,GAAwB5pV,SAASla,GA0FrB+pV,CAAgB/pV,IAEhB,UAAC,GAAD,WACE,UAAC45V,GAAD,CAEEn3B,WAAYziU,EACZb,MAAOA,EACP06V,QAAQ,mBAHHhpT,IAFEA,IAWb,UAAC+oT,GAAD,CAEEn3B,WAAYziU,EACZb,MAAOA,EACP06V,QAAQ,mBAHHhpT,MAOV6oT,GACCz5V,OAAOoP,QAAQ01V,EAASI,oBACxBlvV,KAAI,WAAsB46B,GAAW,IAAD,wBAAzB7wC,EAAyB,EAAzBA,IAAKb,EAAoB,EAApBA,MAChB,OACE,UAAC,GAAD,WACE,UAACy6V,GAAD,CAAuBn3B,WAAYziU,EAAKb,MAAOA,GAA/B0xC,IADPA,MAKdk0T,EAASK,aAAanvV,KAAI,SAAC29C,EAAM/iB,GAChC,OACE,UAAC,GAAD,WACE,UAAC+oT,GAAD,CAAuBn3B,WAAW,OAAOtjU,MAAOy0D,GAAhC/iB,IADPA,WAnDZA,MA4DX83C,QACE,mCACE,UAAC,GAAD,CACEy8P,gBAAiBwf,EAAQxf,gBACzBziB,YAAY,oBACZ6iB,aAAa,kBAEf,4BACGof,EAAQxf,gBACRwf,EAAQS,aACP,eACEv5P,KAAM84P,EAAQS,YACd7jW,OAAO,SACPm1N,IAAI,aACJt2H,UAAU,uDAJZ,UAME,2BAAOukQ,EAAQS,iBAGjB,0BAEDT,EAAQU,eACP,kBAAMjlQ,UAAU,uCAAhB,SACGukQ,EAAQU,iBAGX,gCAKRtpV,MACE,mCACE,kBACEqkF,UAAS,UACPukQ,EAAQW,gBAAgBrrV,SAAS,gBACd,YAAnB0qV,EAAQruV,OACJ,cACA,GAJG,4DADX,SAQGquV,EAAQW,gBAAgBrrV,SAAS,gBACf,YAAnB0qV,EAAQruV,OACJ,OACA,QAEN,kBACE8pF,UAAS,UACPukQ,EAAQW,gBAAgBrrV,SAAS,QACd,YAAnB0qV,EAAQruV,OACJ,kBACA,GAJG,oEADX,SAQGquV,EAAQW,gBAAgBrrV,SAAS,QACf,YAAnB0qV,EAAQruV,OACJ,OACA,UAIVpM,MAAOi2V,GAAeM,iBAIpB8E,EAAe,OAAGrB,QAAH,IAAGA,OAAH,EAAGA,EAAoBluV,KAAI,SAAC2uV,GAC/C,OAAO,oBACFA,GADL,IAEE/lU,SAAU+lU,EAAQa,yBAClB3E,UAAW,EACX5sJ,sBAAuB,EACrB,kBACE7zG,UAAU,mEADZ,WAIE,iBAAKA,UAAU,sDAAf,SACGm6P,GACCoK,EAAQa,6BAGZ,kBAAKplQ,UAAU,2BAAf,UACGukQ,EAAQ9nG,OAAO7mP,KAAI,SAAC29C,EAAM/iB,GACzB,OACE,UAAC,GAAD,WACE,UAAC+oT,GAAD,CAAuBn3B,WAAW,QAAQtjU,MAAOy0D,GAAjC/iB,IADPA,MAKd+zT,EAAQc,eACP,UAAC,GAAD,WACE,UAAC9L,GAAD,CAEEn3B,WAAW,gBACXtjU,MAAOylW,EAAQc,cAFVd,EAAQc,eAFNd,EAAQc,cAQpBd,EAAQe,cACP,UAAC,GAAD,WACE,UAAC/L,GAAD,CAEEn3B,WAAW,eACXtjU,MAAOylW,EAAQe,aAFVf,EAAQe,cAFNf,EAAQe,aAQpBf,EAAQgB,OACP,UAAC,GAAD,WACE,UAAChM,GAAD,CAEEn3B,WAAW,OACXtjU,MAAOylW,EAAQgB,MAFVhB,EAAQgB,OAFNhB,EAAQgB,MAQpBhB,EAAQiB,eACP,UAAC,GAAD,WACE,UAACjM,GAAD,CAEEn3B,WAAW,UACXtjU,MAAOylW,EAAQiB,cAFVjB,EAAQiB,eAFNjB,EAAQiB,mBA3ClB,IAsDTl9Q,QACE,iCACE,iBAAK0X,UAAU,gBAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAc6nD,EAAtC,UACE,gCACGr7C,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO4iU,EAAQzlW,eAM5B6c,MACE,kBAAMqkF,UAAU,mFAAhB,qBAIFjpF,GAAIwtV,EAAQztJ,UACZouJ,gBAAiB,GACjBhvV,OAAQ,QACRpM,MAAOi2V,GAAevP,aAIpBiV,EAAmB,OAAGzB,QAAH,IAAGA,OAAH,EAAGA,EAA0BpuV,KAAI,SAAC2uV,GACzD,OAAO,oBACFA,GADL,IAEE/lU,SAAU+lU,EAAQmB,uBAClBjF,UAAW,EACX5sJ,sBAAuB,EACrB,kBACE7zG,UAAU,mEADZ,WAIE,iBAAKA,UAAU,sDAAf,SACGm6P,GACCoK,EAAQmB,2BAGZ,kBAAK1lQ,UAAU,2BAAf,UACGukQ,EAAQ9nG,OAAO7mP,KAAI,SAAC29C,EAAM/iB,GACzB,OACE,UAAC,GAAD,WACE,UAAC+oT,GAAD,CAAuBn3B,WAAW,QAAQtjU,MAAOy0D,GAAjC/iB,IADPA,MAKd+zT,EAAQc,eACP,UAAC,GAAD,WACE,UAAC9L,GAAD,CAEEn3B,WAAW,gBACXtjU,MAAOylW,EAAQc,cAFVd,EAAQc,eAFNd,EAAQc,cAQpBd,EAAQe,cACP,UAAC,GAAD,WACE,UAAC/L,GAAD,CAEEn3B,WAAW,eACXtjU,MAAOylW,EAAQe,aAFVf,EAAQe,cAFNf,EAAQe,aAQpBf,EAAQgB,OACP,UAAC,GAAD,WACE,UAAChM,GAAD,CAEEn3B,WAAW,OACXtjU,MAAOylW,EAAQgB,MAFVhB,EAAQgB,OAFNhB,EAAQgB,MAQpBhB,EAAQiB,eACP,UAAC,GAAD,WACE,UAACjM,GAAD,CAEEn3B,WAAW,UACXtjU,MAAOylW,EAAQiB,cAFVjB,EAAQiB,eAFNjB,EAAQiB,mBA3ClB,IAsDTl9Q,QACE,mCACE,iBAAK0X,UAAU,gBAAf,UACE,UAACwiI,GAAD,CAAwBxnD,aAAc6nD,EAAtC,UACE,gCACGr7C,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO4iU,EAAQzlW,cAIxB,iBAAKkhG,UAAU,sBAAf,SAAsCukQ,EAAQoB,mBAGlDhqV,MACE,kBAAMqkF,UAAU,+EAAhB,yBAIFjpF,GAAIwtV,EAAQv/I,cACZkgJ,gBAAiB,GACjBhvV,OAAQ,QACRpM,MAAOi2V,GAAe/O,iBAI1B,OAAO,oBACF2S,GADL,IAEEiC,QAAO,iBACL1xD,QADK,IACLA,OADK,EACLA,EACIhsS,QACDyP,MACC,SAAC0O,EAAGuN,GAAJ,OACE,IAAIzW,KAAKyW,EAAE2oU,iBAAiBriS,UAC5B,IAAI/8C,KAAKkJ,EAAEk2U,iBAAiBriS,oBAN7B,QAOE,GACT2rS,gBAAe,OAAE1xD,QAAF,IAAEA,EAAAA,EAAe,GAChCyoD,SAAQ,iBACN0H,QADM,IACNA,GADM,UACNA,EACI72V,OADJ,OACW03V,QADX,IACWA,EAAAA,EAAmB,WAFxB,iBACN,EAEI13V,OAFJ,OAEWg4V,QAFX,IAEWA,EAAAA,EAAuB,WAH5B,aACN,EAGIv9V,QACDyP,MACC,SAAC0O,EAAGuN,GAAJ,OACE,IAAIzW,KAAKyW,EAAE4K,UAAU07B,UAAY,IAAI/8C,KAAKkJ,EAAEmY,UAAU07B,oBAPtD,QAQC,OAEV,CACDypS,EACAG,EACAE,EACAnhI,IA7VA+5H,EADF,EACEA,SACAkJ,EAFF,EAEEA,eACAF,EAHF,EAGEA,QACAC,EAJF,EAIEA,gBACAE,EALF,EAKEA,cACAC,EANF,EAMEA,WA2VIC,EAAYrJ,EACf5mM,SAAQ,SAACuuM,GAAD,OAAaA,EAAQ9D,aAC7B7oV,QAAO,SAACnF,EAAKmtV,GAAN,OAAwBntV,EAAMmtV,IAAe,GAEjDsG,EAAgBtJ,EAAS/+V,OAEzBsoW,EAA+B,oBACnCvJ,EACGzvM,MAAK,SAAC99I,GAAD,MAAoB,YAAbA,EAAE6G,iBAFkB,aACnC,EAEIgvV,gBAAgBtvV,KAGtB,SAAiCwwV,GAC/B,OAAQA,GACN,IAAK,MACH,MAAO,OACT,IAAK,cACH,MAAO,OACT,QACE,OAAOA,MATRhqU,KAAK,aAJ2B,QAIlB,GAanB,SAAoCilT,KAApC,GAAOglB,EAAP,YAAiBvoU,EAAjB,EAAiBA,MAAO9xB,EAAxB,EAAwBA,OAExB,MAAgC0lI,EAAAA,EAAAA,UAAiB5zG,GAAjD,GAAO+kU,EAAP,KAAiByD,EAAjB,KACA,MAAkC50N,EAAAA,EAAAA,UAAiB1lI,GAAnD,GAAO42V,EAAP,KAAkB2D,EAAlB,KAEA,EAAsD/+L,GACpD,SAAChkK,GAAD,OAAsBm2M,GAA4Bn2M,EAAOyqM,OADnDsL,EAAR,EAAQA,qBAAsBF,EAA9B,EAA8BA,oBAI9BmpJ,IACE,WACE,IAAMgE,EAAgB1oU,EAAQ,IAAMA,EAAQ,IACtC2oU,EAAiBz6V,EAAS,IAAMA,EAAS,IAE/Cs6V,EAAYnzV,KAAK8sB,MAAMumU,IACvBD,EAAapzV,KAAK8sB,MAAMwmU,MAE1B,IACA,CAAC3oU,EAAO9xB,KAIRmlI,EAAAA,EAAAA,YAAU,YACmB,IAAvBuyN,GACF9uV,EAASi7L,QAEV,IAIL,IAAMo0B,EAAiB,SACrBR,EACAl2L,EACA2rI,GAEA,MAAO,CACL5sE,MAAOm3H,EACPl2L,MAAAA,EACA2rI,OAAAA,IAIJ,OACE,mCACE,eAAGl5E,UAAU,0EAAb,6BAGC4jQ,GACC,UAAC,GAAD,KAEA,iCACE,kBAAK5jQ,UAAU,iDAAf,WAEE,kBAAKA,UAAU,0CAAf,WAEE,kBAAKA,UAAU,2DAAf,WACE,kBAAKA,UAAU,uGAAf,WACE,iBAAK0L,IAAK26P,EAAQrmQ,UAAU,sBAA5B,SACG6jQ,GAAuB,OACxBF,QADwB,IACxBA,GAAAA,EAAmB+C,gBAAgB,GAChB,OAAjB/C,QAAiB,IAAjBA,GAAA,UAAAA,EAAmB+C,gBAAgB,UAAnC,SAAuCC,UAAvC,OACAhD,QADA,IACAA,GADA,UACAA,EAAmB+C,gBAAgB,UADnC,OACA,EAAuCE,WACvC/C,GACAhB,GACAD,GACE,iCACE,UAACD,GAAD,CACE10J,YAAaA,GACb20J,UAAWA,EACXC,SAAUA,EACVC,UAAWa,EAAkB+C,qBAIjC,UAAC,GAAD,KAGF,eACE1mQ,UAAU,iDACV0U,MAAO,CACL8qD,gBAAiB,sCAKzB,kBAAKx/D,UAAU,oCAAf,WACE,kBAAKA,UAAU,oCAAf,WACE,2BACE,WAAC,GAAD,YACE,eAAGA,UAAU,mCAAb,SACG6mQ,GAA8BjB,MAEjC,eAAG5lQ,UAAU,qBAAb,SACG8mQ,GAA8BlB,WAIrC,iBAAK5lQ,UAAU,6CAAf,UACE,UAAC,GAAD,WACE,iBACEA,UAAU,2CACVg5C,IAAK+tN,GACHC,GAA2BpB,cAMrC,kBAAK5lQ,UAAU,QAAf,WACE,gBAAGA,UAAU,2CAAb,WACE,eAAGA,UAAU,4DACb,UAAC,GAAD,WACE,iCAAQgnQ,GAA2BpB,WAJzC,OAOGjC,QAPH,IAOGA,OAPH,EAOGA,EAAmB+C,gBAAgB9wV,KAClC,SAACqxV,EAAgBz2T,GACf,IAAM23D,EAAQ,UAAM8+P,EAAelE,KAArB,aAA8BkE,EAAejE,WAA7C,aAA4DiE,EAAehE,SACzF,OACE,qBACEj4P,QAAS,kBACPp2F,EACE4kM,GAAc,CACZvL,YAAAA,GACAuL,cAAerxG,MAKrBnI,UAAS,+DACNq5G,IACgB,OAAjBsqJ,QAAiB,IAAjBA,OAAA,EAAAA,EAAmB+C,gBAAgB7oW,QAAS,GAC5C07M,IAAyBpxG,EACrB,aACA,IAfR,WAkBE,eAAGnI,UAAU,kEACb,UAAC,GAAD,WACE,qCACMinQ,EAAelE,KADrB,aAC8BkE,EAAehE,eAZ1CzyT,OAoBb,gBAAGwvD,UAAU,eAAb,WACE,eAAGA,UAAU,8DACb,UAAC,GAAD,WACE,+CACGknQ,GAA2BtB,UAD9B,QAEIsB,GAA2BrB,UAF/B,QAGI,wCAOd,kBAAK7lQ,UAAU,iEAAf,WAEE,UAAC,GAAD,CAAMA,UAAU,SAAhB,SACImkQ,GAAgD,MAA5BD,GAcpB,UAAC,GAAD,KAbA,UAACvD,GAAD,CACEj+H,SAAUuB,EACR,UADsB,iBAEnB1pD,QAFmB,IAEnBA,EAAAA,EAAY,IAFO,OAEFiN,KAAKmD,aAAa,QAAS,CAC7Co5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OACDuiU,EAAyBiD,sBAE3BjD,EAAyBzuD,2BAOjC,UAAC,GAAD,CAAMz1M,UAAU,SAAhB,UACE,UAAC2gQ,GAAD,CACEj+H,SAAUuB,EACRkiI,EAAgCtsV,SAAS,KACrC,qBACA,oBACJssV,EACA,SAIN,UAAC,GAAD,CAAMnmQ,UAAU,SAAhB,UACE,UAAC2gQ,GAAD,CACEj+H,SAAUuB,EAAe,aAAcgiI,EAAW,SAGtD,UAAC,GAAD,CAAMjmQ,UAAU,SAAhB,UACE,UAAC2gQ,GAAD,CACEj+H,SAAUuB,EAAe,WAAYiiI,EAAe,eAM5D,iBAAKlmQ,UAAU,kDAAf,UAEE,kBAAKA,UAAU,2BAAf,UACI+jQ,GACoB,MAAtBD,GACCG,GAC2B,MAA5BD,GAGE,iBAAKhkQ,UAAU,OAAf,UACE,UAAC,GAAD,OAHF,0BAMD2jQ,IAAsBC,GACrB,UAAC,GAAD,CACExrJ,aAAcwkJ,EAAShnV,KAAI,SAAC2uV,GAAD,OAAaA,EAAQxtV,MADlD,gBAGG6lV,QAHH,IAGGA,OAHH,EAGGA,EAAUhnV,KAAI,SAAC2uV,GACd,OACE,UAAC,GAAD,CAEEnE,gBAAiBI,GACjBhhP,cAAe,CACb76E,UAAW4/T,EAAQ/lU,SACnBiiU,UAAW8D,EAAQ9D,UACnBn4Q,OAAQi8Q,EAAQj8Q,OAChB3sE,KAAM4oV,EAAQ5oV,MAEhB5E,GAAIwtV,EAAQxtV,GACZjN,MAAOy6V,EAAQz6V,MAVjB,UAYE,iBAAKk2F,UAAU,SAAf,SACGukQ,EAAQ1wJ,yBAZN0wJ,EAAQxtV,SAkBnB,cAIV,iBAAKipF,UAAU,mBAAf,UACE,kBAAKA,UAAU,iDAAf,UACG8lQ,GAAkBA,EAAejoW,OAAS,GACzC,UAAC,GAAD,CACEuiW,gBAAiBM,GACjBlhP,cAAe,CACb0wF,MAAO,WAETn5L,GAAG,kBACHjN,MAAOi2V,GAAe1zV,QANxB,UAQE,iBAAK2zF,UAAU,YAAf,gBACG8lQ,QADH,IACGA,OADH,EACGA,EAAgBlwV,KAAI,SAACwxV,EAAe52T,GACnC,OACE,kBACEwvD,UAAU,qFADZ,WAIE,iBAAKA,UAAU,sDAAf,SACGonQ,EAAcznW,OAEjB,kBAAKqgG,UAAU,wCAAf,UACyB,qBAAtBonQ,EAAcznW,KACb,UAAC,GAAD,CACEo+V,gBAAiBqJ,EAActoW,MAC/BqmV,aAAa,kBAGf,0BAEqB,YAAtBiiB,EAAcznW,KACb,UAAC,GAAD,CACEm+V,QAASsJ,EAActoW,MACvBqmV,aAAa,kBAGf,2BAEF,kBAAMnlP,UAAU,sBAAhB,SACGonQ,EAActoW,aAvBd0xC,UA+Bb,KACHo1T,GAAWA,EAAQ/nW,OAAS,GAC3B,UAAC,GAAD,CACEuiW,gBAAiBM,GACjBlhP,cAAe,CACb0wF,MAAO,QAETn5L,GAAG,kBACHjN,MAAOi2V,GAAe1zV,QANxB,gBAQGu5V,QARH,IAQGA,OARH,EAQGA,EAAShwV,KAAI,SAACyxV,EAAgB72T,GAC7B,OACE,kBACEwvD,UAAU,2DADZ,WAIE,iBAAKA,UAAU,kEAAf,SACGqnQ,EAAe1nW,OAElB,iBAAKqgG,UAAU,0CAAf,UACE,UAAC,GAAD,WACE,2BAAOqnQ,EAAevoW,cAPrB0xC,QAcX,KACHu1T,GAAiBA,EAAcloW,OAAS,GACvC,UAAC,GAAD,CACEuiW,gBAAiBM,GACjBlhP,cAAe,CACb0wF,MAAO,kBAETn5L,GAAG,wBACHjN,MAAOi2V,GAAe1zV,QANxB,UAQE,iBAAK2zF,UAAU,YAAf,gBACG+lQ,QADH,IACGA,OADH,EACGA,EAAenwV,KAAI,SAACg3G,EAAOp8E,GAC1B,OACE,kBACEwvD,UAAU,0EADZ,WAIE,iBAAKA,UAAU,sDAAf,SACG4sB,EAAMjtH,OAET,iBAAKqgG,UAAU,0CAAf,UACE,UAAC,GAAD,WACE,2BAAO4sB,EAAM9tH,cAPZ0xC,UAeb,KACHq1T,GAAmBA,EAAgBhoW,OAAS,GAC3C,UAAC,GAAD,CACEuiW,gBAAiBM,GACjBlhP,cAAe,CACb0wF,MAAO,cAETn5L,GAAG,0BACHjN,MAAOi2V,GAAe1zV,QANxB,gBAQGw5V,QARH,IAQGA,OARH,EAQGA,EAAiBjwV,KAAI,SAACyxV,EAAgB72T,GACrC,OACE,kBACEwvD,UAAU,2DADZ,WAIE,iBAAKA,UAAU,sDAAf,SACGqnQ,EAAe1nW,OAElB,iBAAKqgG,UAAU,0CAAf,SACGwjQ,GAAkB3pV,SAASwtV,EAAe1nW,MACzC,UAAC,GAAD,WACE,iCAAQ0nW,EAAevoW,WAGzBuoW,EAAevoW,UAXd0xC,QAkBX,KAEHw1T,GAAcA,EAAWnoW,OAAS,GACjC,UAAC,GAAD,CACEuiW,gBAAiBM,GACjBlhP,cAAe,CACb0wF,MAAO,WAETn5L,GAAG,yBACHjN,MAAOi2V,GAAe1zV,QANxB,gBAQG25V,QARH,IAQGA,OARH,EAQGA,EAAYpwV,KAAI,SAAC0xV,EAAQ92T,GACxB,OACE,kBACEwvD,UAAU,2DADZ,WAIE,iBAAKA,UAAU,sDAAf,SACGsnQ,EAAOC,cAEV,iBAAKvnQ,UAAU,0CAAf,SACGsnQ,EAAOE,gBANLh3T,QAYX,mBC/3BPmqT,GAAmB,SAC9B7tQ,GAD8B,OAG9B,mCACE,2BACE,0BAAMA,EAAI2vK,OAAOrgO,KAAK,SAEvB0wD,EAAI8tQ,WACH,iCACE,6BACE,kBAAM56P,UAAU,OAAhB,qBACClT,EAAI8tQ,gBAIT,8BCHA6M,GAAerpC,KAERspC,GAAgC,SAC3Cz5J,EACAjzB,GAF2C,MAGxC,CACHysL,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CACrCA,GAAI,SACJgjT,eAAe,EACfzxO,OAAQ,SAACtiF,GACP,IAAMu0V,EAAYv0V,EAAK+8L,MACpB6hH,cACAvxP,KAAKz9C,KAAqB,SAACk3E,GAAD,MAAU,CACnCupH,MAAOvpH,EAAIg6B,SAAS,UACpB0vO,QAAS1pQ,EAAIg6B,SAAS,2BAG1B,OACE,UAACwzO,GAAD,CACErsJ,YAAaA,EACbssJ,UAAWA,KAIjB3xC,oBAAoB,EACpB5nJ,KAAM,gBAAGl0E,EAAH,EAAGA,IAAH,OACJ,UAAC4tQ,GAAD,CACEzsJ,YAAaA,EACboI,MAAOvpH,EAAIg6B,SAAS,UACpB0vO,QAAS1pQ,EAAIg6B,SAAS,0BAG1B/yF,KAAM,KAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI66Q,sBAAqB,CACtD5wV,GAAI,sBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIhuF,QAAO,CACxCiY,GAAI,mBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,UAACw8N,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,iBAIrB2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIkuQ,2BAA0B,CAC3DjkV,GAAI,4BACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ4hW,GAAiB,CACfxN,UAAWp0V,EAAK8gH,WAChBuzO,WAAY,gCAGlBoN,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI64Q,gBAAe,CAChD5uV,GAAI,gBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UACX,SAACvxO,GAAS,IAAD,EACP,MAAO,CACLxE,OAAQwE,EAAIouQ,iBACZvB,UAC2B,aAAzB7sQ,EAAIouQ,iBAAJ,UACIpuQ,EAAIquQ,kBADR,aACI,EAAgBC,kBAChBr1V,EACN2iF,OAAQoE,EAAIuuQ,0BAGhB,CACEtkV,GAAI,aACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,UAACyzV,GAAD,CACEG,uBAAwB,SAAClxQ,GAAD,OACtB4wQ,GAA6B5wQ,IAE/BgxQ,YAAa1zV,EAAK8gH,WAClBqpF,KAAK,QAKbs3J,GAAappC,UACX,SAACvxO,GAAS,IAAD,EACP,MAAO,CACLxE,OAAQwE,EAAIwuQ,gBACZ3B,UAC0B,aAAxB7sQ,EAAIwuQ,gBAAJ,UACIxuQ,EAAIyuQ,iBADR,aACI,EAAeC,kBACfz1V,EACN2iF,OAAQoE,EAAI2uQ,yBAGhB,CACE1kV,GAAI,YACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,UAACyzV,GAAD,CACEG,uBAAwB,SAAClxQ,GAAD,OACtB4wQ,GAA6B5wQ,IAE/BgxQ,YAAa1zV,EAAK8gH,WAClBqpF,KAAK,QAKbs3J,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI2vK,SAAQ,CACzC1lP,GAAI,SACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU20V,GAAiB30V,EAAK8mF,IAAIs5E,aAE5CqhM,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI4uQ,YAAW,CAC5C3kV,GAAI,YACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI6uQ,2BAA0B,CAC3D5kV,GAAI,2BACJuxE,OAAQ,kBAAM,gDACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,IAAM21V,EAA2B31V,EAAK8gH,WAKhCszO,EAAYS,GAAqBc,GAEvC,OAAOiM,GAAiB,CACtBxN,UAAAA,EACAC,WAAY,gCAIlBoN,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI8tF,YAAW,CAC5C7jK,GAAI,UACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,OAAKA,EAAK8gH,YAIN,UAAC,GAAD,CACEopF,MAAM,OACNrkM,GAAE,oBAAe7F,EAAK8gH,YACtB9mB,UAAU,oFAHZ,kBAHK,UC0Bf,GAhLK,SAAC,GAMC,IAAD,EALJiuG,EAKI,EALJA,YACA+nJ,EAII,EAJJA,gBAKMphV,EAAWi0J,IAETmkC,EAAuBxlC,GAAY,SAAChkK,GAAD,OACzCgqM,GAAmBhqM,EAAOyqM,MADpBjB,mBAIFe,EAAoBvmC,GAAY,SAAChkK,GAAD,OACpC4rM,GAAwB5rM,EAAOyqM,MAGzB5zB,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACR,EAA+B7S,EAAY6jC,IAAnC1mK,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,QAEbg+L,EAAuBr7D,EAAYuyC,IAEnC/nM,EAAoC,CACxCqoK,OAAAA,EACA11I,UAAAA,EACAE,QAAAA,EACAm2I,aAAc6nD,EACdlvD,WAAU,iBAAEo6B,QAAF,IAAEA,OAAF,EAAEA,EAAmBp6B,kBAArB,QAAmC,IAG/C,KACEwL,KADF,GAAO82K,EAAP,KAAqCC,EAArC,KAA0B1tU,UAGpB2tU,EAAiB,SAAC16K,GACtB7mK,EACE8jM,GAAgB,CACdx9F,aAAcugE,EACdwyB,YAAAA,MAKA56I,EAAOm0G,GAAY,SAAChkK,GAAD,OACvBwzM,GAAwBxzM,EAAOyqM,MAG1B8D,EAAP,GACEoD,KADF,MAGM0yJ,EAA6B,+BAAG,WAAOxR,GAAP,+EAC9ByR,EAAsBzR,EAAazgV,KAAI,SAACk3E,GAM5C,MAL0C,CACxCk4H,cAAel4H,EAAIupH,MACnBsxJ,oBAAqB76Q,EAAI0pQ,YAJO,kBAW5BzkJ,EAA4B,CAChCC,cAAe81J,EACfztL,OAAAA,EACA4zB,YAAAA,IACChlL,SAf+B,sDAiBlCvZ,QAAQ9J,MAAM,kCAAd,MAjBkC,wDAAH,sDAqBnC,OACE,iCACE,kBAAKo6F,UAAU,mEAAf,WACE,UAAC,GAAD,CACEsiP,YAAat1I,EACbu1I,gBAAiB,SAAC5uK,GAChB/+J,EACE04L,GAA2B,CACzBv2L,GAAIk3L,EACJb,cAAez5B,MAIrB6uK,gBAAiB,WACf5tU,EACE24L,GAAY,CACVx2L,GAAIk3L,SAKZ,kBAAKjuG,UAAU,oBAAf,WACE,UAAC,GAAD,CACEy1P,SAAU,kBACRS,EAAmB,KAAOD,EAAgBjkV,IAE5CwW,UAAW0tU,KAEb,oBACEl2P,UAAS,8EACPg2P,IAAoBtkJ,GAAS8G,OACzB,qBACA,sBAHG,KAKTxtG,QAAS,kBAAMmrP,EAAezkJ,GAAS8G,SANzC,qBAWA,oBACEx4G,UAAS,8EACPg2P,IAAoBtkJ,GAAS+kJ,SACzB,qBACA,sBAHG,KAKTzrP,QAAS,kBAAMmrP,EAAezkJ,GAAS+kJ,WANzC,uBAUA,iBAAKz2P,UAAU,OAAf,UACE,UAAC,GAAD,CACEsM,MAAM,UACN9mF,QAAS,CACP,CACE8mF,MAAO,uBACP3sG,IAAK,SACLwsK,UAAU,EACVqpL,SAAU,WACR5gV,GACEklB,EAAAA,EAAAA,aAAY,CACV7M,cAAewqL,GACft+K,OAAO,WAAD,oBAAE,WAAOjjB,EAAQkjB,GAAf,iFACNA,EAAYc,wBAGN12B,EAAQ41B,EAAYtpB,WAEpBumV,EAAer/I,GACnBxzM,EACAyqM,GARI,SAWA45J,EAA8BxR,GAX9B,OAaNj9T,EAAYxkB,SAAS8iM,MAErBt+K,EAAYjQ,cAfN,2CAAF,qDAAC,MAoBXvU,EACEyiM,GAAU,CACRE,UAAW,sBACXD,WAAY,CACVpH,MAAO,uBACPtmM,QAAQ,6EAAD,OAA+EypD,EAAKx1D,OAApF,wCACP83V,WAAY,SACZ1nJ,YAAAA,GAEFuJ,iBACEs9I,GAAkBiT,qCAI1Bv/U,WAAW,iBCjLvBszU,GAAuB19B,KAwnB7B,GAtnB+C,SAC7CnwH,EACAp7L,EACAmoK,EACAgtL,GAEA,IAAMjM,EAA2B,CAC/BD,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkvQ,sBAAb,aAAS,EAAoBz3V,OAAM,CAC/DwS,GAAI,sBACJuxE,OAAQ,kBAAM,qCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkvQ,sBAAb,aAAS,EAAoB36V,SAAQ,CACjE0V,GAAI,wBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,eAIzB,OAAIj0G,QAAJ,IAAIA,GAAAA,EAAMgL,MAAK,SAACtP,GAAD,uBAAcA,EAASytV,sBAAvB,aAAc,EAAyBC,qBACpDF,EAAyBv7V,KAAzB,MAAAu7V,EAAwB,GACnBlpV,EAAK+E,QACN,SAACC,EAAKqkV,EAAc1rT,GAAW,IAAD,EACtByrT,EAAgB,UACpBC,EAAaF,sBADO,aACpB,EAA6BC,iBA6B/B,OA5BAr8V,OAAOoP,QAAP,OAAeitV,QAAf,IAAeA,EAAAA,EAAoB,IAAI36V,SAAQ,YAAgB,IACrD3B,EADoD,WACpDA,IAER,GAAIkY,EAAIgG,MAAK,SAACwiS,GAAD,uBAAeA,EAAUtpS,UAAzB,aAAe,EAAc8C,SAASla,MACjD,OAAOkY,EAGT,IAAMskV,EAAYL,GAAqBz9B,UACrC,SAACvxO,GAAS,IAAD,MACEsvQ,EAAT,aACEx8V,OAAOoP,QAAP,oBACE89E,EAAIkvQ,sBADN,aACE,EAAoBC,wBADtB,QAC0C,IACxC9uM,MAAK,SAACjrE,GAAD,OAAWA,EAAM,GAAGviF,MAAQA,YAHrC,QAG6C,GAH7C,MAIA,cAAOy8V,QAAP,IAAOA,OAAP,EAAOA,EAAUt9V,QAEnB,CACEiY,GAAIpX,EACJ2oF,OAAQ,kBAAM,2BAAO3oF,KACrBipT,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAKxCjvG,EAAIrX,KAAK27V,MAEJtkV,IAET,MAKN,IAAMowV,EAAWD,EACb,CACElM,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CAC7CA,GAAI,KACJuxE,OAAQ,kBAAM,+CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,iBAGtD,GAEJ,MAAM,GAAN,OACKmhP,EADL,CAEEnM,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CAC7CA,GAAI,SACJgjT,eAAe,EACfnR,oBAAoB,EACpBtgO,OAAQ,SAACtiF,GACP,IAAMu0V,EAAYv0V,EAAK+8L,MACpB6hH,cACAvxP,KAAKz9C,KAAqB,SAACk3E,GAAD,MAAU,CACnCupH,MAAOvpH,EAAIg6B,SAAS,UACpB0vO,QAAS1pQ,EAAIg6B,SAAS,2BAG1B,OACE,UAACwzO,GAAD,CACErsJ,YAAaA,EACbssJ,UAAWA,KAIjBv5L,KAAM,gBAAGl0E,EAAH,EAAGA,IAAH,OACJ,UAAC4tQ,GAAD,CACEzsJ,YAAaA,EACboI,MAAOvpH,EAAIg6B,SAAS,UACpB0vO,QAAS1pQ,EAAIg6B,SAAS,0BAG1B/yF,KAAM,KAER+nU,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI66Q,sBAAqB,CAC9D5wV,GAAI,sBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIhuF,QAAO,CAChDiY,GAAI,mBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAACw8N,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,WAAa9gH,EAAK8gH,WAAa,QAIpDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIkuQ,2BAA0B,CACnEjkV,GAAI,4BACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ4hW,GAAiB,CACfxN,UAAWp0V,EAAK8gH,WAChBuzO,WAAY,qBAGlByB,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI4uQ,YAAW,CACpD3kV,GAAI,YACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI64Q,gBAAe,CACxD5uV,GAAI,gBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI2vK,SAAQ,CACjD1lP,GAAI,SACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU20V,GAAiB30V,EAAK8mF,IAAIs5E,aAE5C01L,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI6uQ,2BAA0B,CACnE5kV,GAAI,2BACJuxE,OAAQ,kBAAM,gDACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,IAAM21V,EAA2B31V,EAAK8gH,WAKhCszO,EAAYS,GAAqBc,GAEvC,OAAOiM,GAAiB,CACtBxN,UAAAA,EACAC,WAAY,gCAIlByB,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIguF,iBAAgB,CACzD/jK,GAAI,iBACJuxE,OAAQ,kBAAM,gDACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU61V,GAA8B71V,EAAK8gH,eAErDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyvQ,kBAAiB,CAC1DxlV,GAAI,kBACJuxE,OAAQ,kBAAM,gDACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGh6F,EAAK8gH,WACJozO,GAAqCl0V,EAAK8gH,aAE1C,+BAKRg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIg2B,UAAS,CAClD/rG,GAAI,UACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJA,EAAK8gH,WAAWlxG,KAAI,SAAC9W,EAAO0xC,GAAR,OAClB,kBAAiBwvD,UAAU,yBAA3B,WACE,UAAC,GAAD,CACE+kP,gBAAiBjmV,EACjBwjU,YAAY,oBACZ6iB,aAAa,kBAEf,2BAAOrmV,MANC0xC,SAUhBsrT,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI0vQ,0BAAyB,CAClEzlV,GAAI,gBACJuxE,OAAQ,iBAAM,UACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJy2V,GAAe,CACbrC,UAAWp0V,EAAK8gH,WAChBuzO,WAAY,qBAGlByB,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI6vQ,mBAAkB,CAC3D5lV,GAAI,mBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpB70R,KAAM,IACNgmS,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI8vQ,WAAU,CACnD7lV,GAAI,WACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UACnB,SAACvxO,GAAD,OAASA,EAAI+vQ,wCACb,CACE9lV,GAAI,wCACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpB70R,KAAM,IACNgmS,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJA,EAAK8gH,WAAagzO,GAAa9zV,EAAK8gH,aAAe,6BAGzDg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,cACRC,QAAS,CACPuzQ,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB95V,SAAQ,CAC7D0V,GAAI,oBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB78B,QAAO,CAC5DvnT,GAAI,mBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU41V,GAAoB51V,EAAK8gH,eAE3Cg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB2B,WAAU,CAC/D/lV,GAAI,sBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB4B,cAAa,CAClEhmV,GAAI,yBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBC,eAAc,CACnErkV,GAAI,0BACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB6B,eAAc,CACnEjmV,GAAI,0BACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBK,eAAc,CACnEzkV,GAAI,0BACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAEpDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB8B,cAAa,CAClElmV,GAAI,yBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB+B,aAAY,CACjEnmV,GAAI,wBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBgC,YAAW,CAChEpmV,GAAI,uBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBiC,YAAW,CAChErmV,GAAI,uBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBkC,UAAS,CAC9DtmV,GAAI,qBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBmC,aAAY,CACjEvmV,GAAI,wBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBoC,SAAQ,CAC7DxmV,GAAI,oBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBqC,YAAW,CAChEzmV,GAAI,uBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBsC,WAAU,CAC/D1mV,GAAI,sBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBuC,aAAY,CACjE3mV,GAAI,wBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBwC,YAAW,CAChE5mV,GAAI,uBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgByC,QAAO,CAC5D7mV,GAAI,mBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,qBAM5Cg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,aACRC,QAAS,CACPuzQ,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAel6V,SAAQ,CAC5D0V,GAAI,mBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAej9B,QAAO,CAC3DvnT,GAAI,kBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU41V,GAAoB51V,EAAK8gH,eAE3Cg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeuB,WAAU,CAC9D/lV,GAAI,qBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAewB,cAAa,CACjEhmV,GAAI,wBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeH,eAAc,CAClErkV,GAAI,yBACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeyB,eAAc,CAClEjmV,GAAI,yBACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeC,eAAc,CAClEzkV,GAAI,yBACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAEpDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe0B,cAAa,CACjElmV,GAAI,wBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe2B,aAAY,CAChEnmV,GAAI,uBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe4B,YAAW,CAC/DpmV,GAAI,sBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe6B,YAAW,CAC/DrmV,GAAI,sBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe8B,UAAS,CAC7DtmV,GAAI,oBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe+B,aAAY,CAChEvmV,GAAI,uBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAegC,SAAQ,CAC5DxmV,GAAI,mBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeiC,YAAW,CAC/DzmV,GAAI,sBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAekC,WAAU,CAC9D1mV,GAAI,qBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAemC,aAAY,CAChE3mV,GAAI,uBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeoC,YAAW,CAC/D5mV,GAAI,sBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeqC,QAAO,CAC3D7mV,GAAI,kBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,qBAM5Cg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,sBACRC,QAAS,CACPuzQ,GAAqBz9B,UACnB,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuBj2S,WAChC,CACE7wC,GAAI,6BACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAGzBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuBC,UAAS,CACrE/mV,GAAI,4BACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UACnB,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuBE,kBAChC,CACEhnV,GAAI,oCACJuxE,OAAQ,kBAAM,mCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,iBAK7Bg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,WACRC,QAAS,CACPuzQ,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkxQ,gBAAb,aAAS,EAAc1hO,QAAO,CAC1DvlH,GAAI,iBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,iBAI3Bg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,kBACRC,QAASwzQ,IAEXD,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI8tF,YAAW,CACpD7jK,GAAI,UACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,IAAM40K,EAAY50K,EAAK8gH,WAEvB,OAAK8zD,GAKH,UAAC,GAAD,CACEs1B,MAAM,OACNrkM,GAAE,oBAAe+uK,GACjB56E,UAAU,yPAHZ,mBAJO,2BAaX5tF,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,UAGVhgC,gBAAgB,EAChB/sR,KAAM,SCvhBZ,GAxF0B,WAAO,IAAD,EACxBm0U,EAA2B,0BAE3BC,EAAsB3gM,GAAY,SAAChkK,GAAD,OACtC49M,GAAkB59M,EAAO67M,GAAWqB,yBAGhC29I,EAAoB72L,GAAY,SAAChkK,GAAD,OACpC6hN,GAAwC7hN,EAAO0kW,MAG3CltL,EAAexT,EAAYuyC,IAC3B1/B,EAAS47H,IAAiB,SAACzyS,GAAD,OAAWA,EAAMq9K,aAAaxG,UAE3C27K,EAAoBxuL,GAAY,SAAChkK,GAAD,OACjDo1M,GAAiCp1M,EAAO0kW,MADlC3vJ,UAIF6vJ,EAAoD,CACxD/tL,OAAAA,EACAW,aAAAA,GAGIsjL,EAAe7rL,GAAY,6BACjC,EAAwC2kL,GAItC93K,GACAg/K,EACA4J,EACAE,EACA,CACEzQ,kBAAmB,sBACnBC,sBAAuB,QAVnB/kV,EAAR,EAAQA,KAAM2V,EAAd,EAAcA,UAAWsnJ,EAAzB,EAAyBA,WAcnBqtJ,GAAa5rL,EAAAA,EAAAA,UAAQ,WAAO,IAAD,IAC/B,OAAOykN,IAAoBtkJ,GAAS8G,OAChCkvJ,GAA8BQ,EAA0BltL,GACxDqtL,GACEH,EAD6B,iBAE7Br1V,QAF6B,IAE7BA,OAF6B,EAE7BA,EAAMA,YAFuB,QAEf,GACdmoK,EAH6B,iBAI7BmtL,QAJ6B,IAI7BA,OAJ6B,EAI7BA,EAAqBv3P,eAJQ,YAMlC,CAACoqE,EAAcg7K,EAAiBnjV,EAAMs1V,IAKzC,OAAK3/U,GAAcsnJ,GAAej9J,GAKhC,UAAC,GAAD,WACE,mCACE,UAAC,GAAD,CACEo7L,YAAai6J,EACblS,gBAAiBA,IAElBqI,IACC,UAAC,GAAD,CACE95V,KAAK,OACL2rM,MAAM,mCACN97K,QAAQ,uJAGZ,UAAC,GAAD,CAA2B4rE,UAAU,4GAArC,UACE,UAAC82P,GAAD,CACEvuQ,QAAS40O,EACTtqT,KAAI,iBAAEA,QAAF,IAAEA,OAAF,EAAEA,EAAMA,YAAR,QAAgB,GACpB2V,UAAWA,EACXsnJ,WAAYA,EACZm+B,YAAai6J,EACb1rC,SAAU,SAAC1vO,GACT,OAAOA,EAAI8uH,YAAc9uH,EAAI8uH,YAAY7kM,GAAK+1E,EAAI/1E,IAEpDigV,WA/BS,SAACnkV,EAAWmyM,GAAZ,cACjBnyM,QADiB,IACjBA,OADiB,EACjBA,EAAMs6I,MAAK,SAACpnI,GAAD,OAAYA,EAAEi/L,gBAAkBA,gBAGpC,2BCbX,GA5DqB,WACnB,IAAMpwM,EAAWi0J,IACXy/L,EAAaryD,IAAiB,SAACzyS,GAAD,OAAWA,EAAMm5M,MAAMD,UAuB3D,OACE,gCACG4rJ,EAAW1yV,KAAI,SAAC+mM,GACf,SAxBgB,SAAC4rJ,GACrB,OAAQA,GACN,KAAKjsJ,GAAUO,QACb,MAAO,CACL,qBACA,mBACA,0BAEJ,KAAKP,GAAU34M,MACb,MAAO,CACL,mBACA,iBACA,4BAEJ,QACE,MAAMA,MAAM,yBAAD,OACgB4kW,EADhB,+BAS6CC,CACtD7rJ,EAAMp4M,MADR,GAAOg8V,EAAP,KAA0BkI,EAA1B,KAA2CC,EAA3C,KAIA,OACE,iBAEE1oQ,UAAS,+BAA0BugQ,EAA1B,oEACTh5H,KAAK,QAHP,UAKE,kBAAKvnI,UAAU,mBAAf,WACE,eAAGA,UAAS,kBAAayoQ,EAAb,YAAgCC,MAC5C,kBAAK1oQ,UAAU,OAAf,WACE,6BAAS28G,EAAMzM,SACf,eAAGlwG,UAAU,UAAb,SAAwB28G,EAAMlnM,kBAEhC,oBACEu1F,QAAS,kBAAMp2F,EAASkoM,GAAYH,EAAM5lM,MAC1CipF,UAAU,UAFZ,UAIE,eACEA,UAAS,2CAAsCyoQ,WAfhD9rJ,EAAM5lM,iECNvB,GAdiB,CACf8mB,MAAMoO,EAAAA,GAAAA,GAAkB,CACtBE,QApBc,CAChB7/B,KAAM,oBACNmkC,KAAM,cACNC,OAAQ,aACR1B,MAAO,cAiBL9C,aAAc,SAEhBlO,MAAMiO,EAAAA,GAAAA,GAAkB,CACtBE,QAlBc,CAChB7/B,KAAM,gBACNmkC,KAAM,aACNC,OAAQ,WACR1B,MAAO,SAeL9C,aAAc,SAEhB1N,UAAUyN,EAAAA,GAAAA,GAAkB,CAC1BE,QAhBkB,CACpB7/B,KAAM,yBACNmkC,KAAM,yBACNC,OAAQ,qBACR1B,MAAO,sBAaL9C,aAAc,UCFlB,GAda,CACX1U,KAAM,QACNmZ,eAAgBA,GAAAA,EAChB/S,WAAYA,GACZgT,eAAgBA,GAAAA,EAChBhK,SAAUA,GAAAA,EACVnsB,MAAOA,GAAAA,EACP5G,QAAS,CACPguB,aAAc,EAGdlB,sBAAuB,eCuF3B,GAjGwB,WACtB,IAAM+qE,GAAM+lC,EAAAA,EAAAA,QAAuB,MAE3B3zG,EAAUy6Q,KAAVz6Q,MAEF6qU,GAAWp3N,EAAAA,EAAAA,UAAQ,WACvB,OAAOzzG,EAAQ,MACd,CAACA,IAEElpB,EAAWi0J,IACjB,MAA0Cn3B,EAAAA,EAAAA,WAAS,GAAnD,GAAOk3N,EAAP,KAAsBC,EAAtB,KAEA,EAAoCrhM,EAAY4jC,IAAxCzmK,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,QAASllC,EAA5B,EAA4BA,IAE5BynO,GAAa17H,GAAK,WAChBm9P,GAAiB,MAGnB,IAoBMC,EAAe,SAACv1S,GACpB,IAAM/8C,EAT2B,SAAC+8C,GAClC,MAAO,CACL5uB,UAAW4uB,EAAK5uB,UAAU+2C,cAC1B72C,QAAS0uB,EAAK1uB,QAAQ62C,cACtB/7E,IAAK4zD,EAAK5zD,KAKIopW,CAjBE,SAACx1S,GAAiC,IAAD,IACnD,MAAO,CACL5uB,UAAWmmK,GAAK,UAACv3I,EAAK5uB,iBAAN,QAAmB,IAAIxnB,MACvC0nB,QAASimK,GAAK,UAACv3I,EAAK1uB,eAAN,QAAiB,IAAI1nB,MACnCxd,IAAAA,GAayCqpW,CAAYz1S,IACvD3+C,EAASu2L,GAAgB30L,KAG3B,OACE,iCACE,kBAAKwpF,UAAU,WAAW0L,IAAKA,EAA/B,WACE,kBACE1L,UAAU,yFACVgL,QA9BY,WAClB69P,GAAiB,SAACI,GAAD,OAAyBA,MA2BtC,WAIE,eAAGjpQ,UAAU,+DACb,oBAAQA,UAAU,sBAAlB,mBACM4pF,GAASghB,WAAWjmK,GAAW03J,SACjC,UAFJ,cAGSzS,GAASghB,WAAW/lK,GAASw3J,SAAS,cAE/C,eAAGr8F,UAAU,gFAGd4oQ,GACC,iBACE5oQ,UAAU,8HAEVjpF,GAAG,qBACH,gBAAc,OACdwwN,KAAK,OALP,UAOE,iBAAKvnI,UAAU,mBAAf,UAEE,UAAC,MAAD,CACE+T,YAAa,CACXjqG,GAAAA,OAAAA,KACAA,GAAAA,OAAAA,KACAA,GAAAA,OAAAA,MAEFipG,yBAAyB,EACzBhtC,OAAQ,EACRmsC,QAAS,IAAI/0F,KACb82F,oBAAoB,EACpB8E,aAAa,EACbz/B,UAAS,UAAKqvR,EAAW,WAAa,cACtC70P,OAAQ,CAAC,CAAEnvE,UAAAA,EAAWE,QAAAA,EAASllC,IAAAA,IAC/B6zG,SAAU,SAACjgD,GAAD,OAAUu1S,EAAav1S,EAAKglJ,YACtCzlG,gBAAgB,EAChBiE,qBAAqB,QACrBzF,oBAAoB,EACpB+I,2BAA2B,EAC3B55E,OAAQyoU,SAIZ,WCtGNC,GAA6B,CACjC,2BACA,YACA,qBACA,YACA,+BACA,YACA,iCAmDF,SAASC,GAAaloL,GACpB,GAAIA,EAAMzvK,WAAW,QAAS,CAC5B,IAAM43V,EAA8BnoL,EAAMt/K,QAAQ,KAAO,EACnD0nW,EAAiBpoL,EAAMv2I,UAAU0+T,GACvC,MAAM,OAAN,OAAcC,GAGhB,MAAc,OAAVpoL,EACK,KAGFA,EAAMqoL,WAAW,IAAK,KAG/B,OA9D8B,WAAO,IAAD,EAC9Bl6I,EAAmB,CAAC,aAClBlnH,EAAW0qH,KACXrD,EAAQ,iBAAGrnH,QAAH,IAAGA,OAAH,EAAGA,EAAUqnH,gBAAb,QAAyB,GAEvCH,EAASG,EAASg6I,UAAUz3V,QAAQ,IAAK,IAAIA,QAAQ,KAAM,IAAIq0D,MAAM,KAEpD,MAAbopJ,IACFH,EAAS,CAAC,cAGZ,IAAMo6I,GAA2BN,GAA2BtrV,MAAK,SAACqjK,GAAD,OAC/DsuC,EAAS/9M,WAAWyvK,MAoBtB,OAAOuoL,GACL,iCACE,kBAAKzpQ,UAAU,kEAAf,WACE,iBAAKA,UAAU,4CAAf,SACGqvH,EAAOz5M,KAAI,SAACsrK,GAAD,OArBW,SAACA,GAC9B,IAAM1wI,EAAQ6+K,EAAOr/K,WACnB,SAAC05T,GAAD,OAA0BA,IAAiBxoL,KAG7C,OACE,WAAC,EAAAtoI,SAAD,YACE,eAAGonD,UAAU,qEAAb,SACGopQ,GAAaloL,KAEf1wI,IAAU6+K,EAAOxxN,OAAS,IACzB,eAAGmiG,UAAU,mEALFkhF,GAeoByoL,CAAWzoL,SAE5C,iBAAKlhF,UAAU,WAAf,UACE,UAAC,GAAD,YAKN,2BChBJ,GAjC8B,WAAO,IAAD,IAC5Bm4M,EAAiC3wI,GAAY,SAAChkK,GAAD,OACjD49M,GAAkB59M,EAAO67M,GAAWwB,sBAGhCu3F,EAAsBnC,IAC1B,SAACzyS,GAAD,OAAsBA,EAAM4yS,QAAQ5mG,iBAGhCA,EAAgBhoC,EAAYqpC,IAClC,OACE,iCACE,iBACE7wG,UAAS,mDACN,iBAACm4M,QAAD,IAACA,OAAD,EAACA,EAAgCvnM,eAAjC,UACC4+F,GACD,YAAC,OAAC2oG,QAAD,IAACA,GAAAA,EAAgCvnM,gBAAlC,UACCwnM,EACE,WACA,YAPR,UAUE,kBAAKp4M,UAAU,4BAAf,WACE,UAAC,GAAD,KACA,2BACE,UAAC0zH,GAAD,cCKZ,GAhCK,SAAC,GAUC,IATL50N,EASI,EATJA,MACA+xC,EAQI,EARJA,IACAmvD,EAOI,EAPJA,UACAwT,EAMI,EANJA,SAYA,OACE,iCACE,mBACEz8F,GAAG,iBACHxS,KAAK,QACL6O,IAAI,IACJy9B,IAAKA,EACL/xC,MAAOA,EACP00G,SAbe,SAAC/I,GACpB,IAAM3rG,GAAS2rG,EAAMtpG,OAAOrC,MAC5B00G,EAAS10G,IAYLS,KAAK,IACLygG,UAAS,kCAAsBA,QAAtB,IAAsBA,EAAAA,EAAa,SCoBvC4pQ,GAAyC,SACpDC,GAEA,IADuC,EACjCj8D,EAAoD,GADnB,KAGhBi8D,EAAYhsJ,WAHI,IAGvC,2BACE,IAD6C,IAApCC,EAAmC,QAEtCgsJ,EAAgB,EACpBA,EAAgBhsJ,EAASM,qBAAuB,EAChD0rJ,IACA,CACA,IAAMt7D,EAAiD,CACrDoD,OAAQk4D,EAAgBD,EAAYhtL,cACpCg1H,OACE/zF,EAASisJ,aAAaD,GAAiBD,EAAYhtL,cACrDqxH,iBAAkBpwF,EAASC,2BAG7B6vF,EAAcptS,KAAKguS,IAhBgB,8BAoBvC,OAAOZ,GCtEIo8D,GAAc,cCcpB,ICnBKC,GCAAC,GFmBCC,GAA8B,SACzCN,GAEA,IAAMO,EFJ6C,SACnDP,GAEA,IAAMj8D,EACJi8D,EAAYhsJ,UAAU7nD,SAAQ,SAAC8nD,GAAD,OAC5BA,EAASisJ,aAAan0V,KAAI,SAAC9W,EAAO0xC,GAChC,IAAM65T,EAAe75T,GAASstK,EAASI,iBAEjCxpG,EAAQ21P,EACVl0I,GAAkBm0I,OAClBn0I,GAAkB87E,MAEhB/D,EAAmBm8D,EAAY,qBACnBvsJ,EAASC,2BACvBD,EAASC,0BAEPwsJ,EAAyBF,EAC3BvsJ,EAASC,0BACT,GAUJ,MARkD,CAChD6zF,OAAQphQ,EAAQq5T,EAAYhtL,cAC5Bg1H,OAAQ/yS,EAAQ+qW,EAAYhtL,cAC5BqxH,iBAAAA,EACA4C,6BAA8By5D,EAC9B71P,MAAAA,SAOR,OAAOk5L,EE3BL48D,CAAsCX,GAElCY,EAAuD,CAC3D1zV,GAAI6lM,KACJr4M,KAAM2xN,GAAc29E,kBACpB3jG,MAAO,GACPwjG,6BAA6B,EAC7B/C,4BAA6By5D,EAC7Bv6D,wBAAyB55E,GAAiByR,KAC1CklE,WAAY,QACZC,WAAY,UACZF,YAAa,IAAInlH,KAAKmD,aAAa,SACnCo+G,cAAe,IAAIvhH,KAAKmD,aAAa,SACrCimH,8BAA+B,IAG3B85D,EDQD,SACLb,GAEA,IADwB,EAClBj8D,EAAwC,GADtB,KAGDi8D,EAAYhsJ,WAHX,IAGxB,2BAA8C,CAAC,IAApCC,EAAmC,QACtC6sJ,EAAwChyK,GAC5CkxK,EAAYhsJ,UAAUjoM,KAAI,SAACkoM,GAAD,OAAcA,EAASohJ,UAG7C0L,EAAa9sJ,EAASohJ,MAAQyL,EAE9Bn8D,EAAqC,CACzCuB,gBAAiBjyF,EAASC,0BAC1BmwF,iBAAkB87D,GAClBlrW,MAAO8rW,GAGTh9D,EAAcptS,KAAKguS,IAhBG,8BAmBxB,OAAOZ,EC7BoBi9D,CAAyBhB,GAC9CiB,EDjCD,SACLjB,GAEA,IADqC,EAC/Bj8D,EAAqD,IAAItzQ,IAD1B,KAMduvU,EAAYhsJ,WANE,IAMrC,2BAA8C,CAAC,IAApCC,EAAmC,QACxCitJ,EAA+Bn9D,EAAcr8R,IAC/CusM,EAASC,2BAGNgtJ,IACHn9D,EAAct8R,IAAIwsM,EAASC,0BAA2B,IACtDgtJ,EAA+Bn9D,EAAcr8R,IAC3CusM,EAASC,4BAIb,IACE,IAAI+rJ,EAAgB,EACpBA,EAAgBhsJ,EAASM,qBACzB0rJ,IACA,CAAC,IAAD,EACM5K,EAAK,UAAGphJ,EAASisJ,aAAaD,UAAzB,QAA2C,EAEhDt7D,EAAqC,CACzCuB,gBAAiBjyF,EAASC,0BAC1BmwF,iBAAkB,kBAClBpvS,MAAOogW,EAAQA,EAAQ,IAAQ,GAGjC6L,EAA8BvqW,KAAKguS,KA/BF,8BAmCrC,OAAOZ,ECJwBo9D,CAA6BnB,GAEtDoB,EAA4BjtW,MAAMkC,KACtC4qW,EAAuB9lW,UACvBgxJ,SAAQ,SAACo4I,GAAD,OAASA,KAEb88D,EAA0B,aAC3BR,GAD2B,GAE3BO,IAGCE,EAA0C,CAC9Cp0V,GAAI6lM,KACJr4M,KAAM2xN,GAActyH,OACpBssG,MAAO,GACPwjG,6BAA6B,EAC7B9F,cAAe88D,EACf/9D,YAAa,IAAInlH,KAAKmD,aAAa,QAAS,CAC1Cj2E,MAAO,YAETq0L,cAAe,IAAIvhH,KAAKmD,aAAa,QAAS,CAC5Cj2E,MAAO,UACPsvH,sBAAuB,IAEzB4oE,WAAY,GACZC,WAAY,iBACZgD,wBAAyB55E,GAAiBk6E,IAC1CrD,cAAe35R,KAAK09B,IAAL,MAAA19B,KAAI,GACd+3V,EAA2Bt1V,KAAI,SAACw4R,GAAD,OAASA,EAAItvS,WAEjDiuS,eAAe,GAWjB,MARsC,CACpC09D,wBAAAA,EACAW,iDACExB,GAAuCC,GACzCsB,qBAAAA,EACAE,8CAA+CP,IGnB7CQ,GAAwBltC,KC4J9B,GA1L4D,WAC1D,IAAMxpT,EAAWi0J,IAETwR,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACA4iC,EAAuBz1C,GAC7B,SAAChkK,GAAD,OAAsBA,EAAM+6M,qBADtBtB,mBAGFD,EAAex1C,EAAY82C,IAEjC,EACE5+B,GACE,CACErF,OAAAA,EACAuC,QAASqgC,GAEX,CACExsC,KAAMwsC,EAAmBp/M,OAAS,IAP1B+/M,EAAd,EAAQ/qM,KAAkCmtV,EAA1C,EAA8BlwL,WAWxB6kF,GAASpjH,EAAAA,EAAAA,UAAQ,WACrB,IAAKyuN,GAAyBpiJ,EAC5B,OAAOusJ,GAA4BvsJ,KAEpC,CAACA,EAAgBoiJ,IAEd7iC,GAAa5rL,EAAAA,EAAAA,UAAQ,WACzB,ODK8CypC,OCJzBj1K,IAAnB63M,EAA+BA,EAAe2tJ,aAAe,MDIQ,CACzED,GAAsBjtC,UAAS,SAACvxO,GAAD,OAASA,EAAI0+Q,UAAS,CACnDz0V,GAAI,kBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,2BAAOA,EAAK8gH,cAC5B/yF,KAAM,KAERu3U,GAAsBhtC,MAAM,CAC1Bh2O,OAAQ,UACRyxO,eAAe,EACfnR,oBAAoB,EACpBrgO,QAAS,CACP+iR,GAAsBjtC,UAAS,SAACvxO,GAAD,OAASA,EAAI2+Q,eAAc,CACxD10V,GAAI,gBACJuxE,OAAQ,kBAAM,sCACdyxO,eAAe,EACfnR,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAACw8N,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,iBAIrBwkP,GAAsBjtC,UAAS,SAACvxO,GAAD,OAASA,EAAI4+Q,iBAAgB,CAC1D30V,GAAI,kBACJuxE,OAAQ,kBAAM,wCACdyxO,eAAe,EACfnR,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAACw8N,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,oBAMzBwkP,GAAsBhtC,MAAM,CAC1Bh2O,OAAQ,YACRyxO,eAAe,EACfnR,oBAAoB,EACpBrgO,QAAS,CACP+iR,GAAsBjtC,UAAS,SAACvxO,GAAD,OAASA,EAAImxH,iBAAgB,CAC1DlnM,GAAI,kBACJuxE,OAAQ,kBAAM,sCACdyxO,eAAe,EACfnR,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAACw8N,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,iBAIrBwkP,GAAsBjtC,UAAS,SAACvxO,GAAD,OAASA,EAAI6+Q,mBAAkB,CAC5D50V,GAAI,oBACJuxE,OAAQ,kBAAM,wCACdyxO,eAAe,EACfnR,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAACw8N,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,oBAMzBwkP,GAAsBhtC,MAAM,CAC1Bh2O,OAAQ,SACRyxO,eAAe,EACfnR,oBAAoB,EACpBrgO,QAAS,CACP+iR,GAAsBjtC,UAAS,SAACvxO,GAAD,OAASA,EAAI8+Q,eAAc,CACxD70V,GAAI,gBACJuxE,OAAQ,kBAAM,uCACdyxO,eAAe,EACfnR,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAACw8N,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,iBAIrBwkP,GAAsBjtC,UAAS,SAACvxO,GAAD,OAASA,EAAI+2I,OAAM,CAChD9sN,GAAI,cACJuxE,OAAQ,kBAAM,qCACdyxO,eAAe,EACfnR,oBAAoB,EACpB70R,KAAM,GACNitI,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,qBAhHsB,IAACk0D,ICF7C,CAAC4iC,IAEEiuJ,GAA2Bt6N,EAAAA,EAAAA,UAAQ,WACvC,OAAIqsE,GAAkBZ,EAAan/M,OAAS,EDvDF,SAC5CiuW,EACA9uJ,GAEA,IAAM+uJ,EAAkB,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAASjuJ,UAAUjoM,KAAI,SAACkoM,GACjD,IAAMP,EAAcP,EAAa7vD,MAC/B,SAAC9oC,GAAD,OAAQA,EAAGm5F,qBAAuBM,EAASC,6BAGvC4tJ,GACHpuJ,EAAYS,qBAAuB,EAChCF,EAASisJ,aAAaxsJ,EAAYS,sBAClCF,EAASisJ,aAAa,IAAM+B,EAAQjvL,cAEpCmvL,EACJL,EAAmB,EAAI,EAAIA,EAAmBG,EAAQjvL,cAiBxD,MAfoD,CAClD2uL,QAAS1tJ,EAASC,0BAClB0tJ,aAAc3tJ,EAASohJ,MAAQ4M,EAAQjvL,cACvC6uL,eAAgB5tJ,EAAShM,QAAUg6J,EAAQjvL,cAC3CohC,eAAgBV,EAAYS,qBAAuB8tJ,EAAQjvL,cAC3D8uL,iBAAAA,EACAC,cACGruJ,EAAYS,qBAAuBF,EAASohJ,OAC7C4M,EAAQjvL,cACVgnD,KACwC,IAAtCmoI,EACI,EACAA,EAAoCzuJ,EAAYS,yBAMpD4uI,EAAoC,CACxC4e,QAAS,QACTC,aAAc9yK,GAAIozK,EAAmBn2V,KAAI,SAACk3E,GAAD,OAASA,EAAI2+Q,iBACtDC,eAAgB/yK,GAAIozK,EAAmBn2V,KAAI,SAACk3E,GAAD,OAASA,EAAI4+Q,mBACxDztJ,eAAgBtlB,GAAIozK,EAAmBn2V,KAAI,SAACk3E,GAAD,OAASA,EAAImxH,mBACxD0tJ,iBAAkBhzK,GAChBozK,EAAmBn2V,KAAI,SAACk3E,GAAD,OAASA,EAAI6+Q,qBAEtCC,aAAcjzK,GAAIozK,EAAmBn2V,KAAI,SAACk3E,GAAD,OAASA,EAAI8+Q,iBACtD/nI,KACElrC,GAAIozK,EAAmBn2V,KAAI,SAACk3E,GAAD,OAASA,EAAI6+Q,qBACxChzK,GAAIozK,EAAmBn2V,KAAI,SAACk3E,GAAD,OAASA,EAAImxH,oBAG5C,MAAM,GAAN,UAAW8tJ,GAAX,CAA+Bnf,ICOpBqf,CAA+BruJ,EAAgBZ,GAGjD,KACN,CAACY,EAAgBZ,IA6CdkvJ,EAAWpqC,GAAc,CAC7BjvT,KAAMg5V,EACNtjR,QAAS40O,EACThV,gBAAiBA,OAenB,OACE,6BACE,UAAC,GAAD,KAEA,iBAAKnoN,UAAU,0BAAf,UACE,WAAC,GAAD,CAAmBA,UAAU,oDAA7B,WACE,kBAAKA,UAAU,0CAAf,WACE,gBAAIA,UAAU,OAAd,kCACA,UAAC,GAAD,CAAMA,UAAU,6FAAhB,UACE,iBAAKA,UAAU,mBAAf,SACG20J,IAAWqrG,GACV,UAAC,GAAD,CAAa1zJ,MAxEM,WACjC,IAAMshG,EAAgB5wF,EAAahnD,SAAQ,SAACunD,GAAD,OACzCo3C,EAAQy2G,iDAAiDrqW,QACvD,SAACqtS,GAAD,OACEA,EAAIF,mBAAqB3wF,EAAYC,oBACrC4wF,EAAIwD,eACkB7rS,IAAnB63M,EACGL,EAAYS,qBAAuBJ,EAAe/gC,cAClD,SAIZ,OAAO,oBACF83E,EAAQ81G,yBADb,IAEE75D,8BAA+BhD,IA0DCu+D,MAEpB,UAAC,GAAD,YAMR,kBAAKnsQ,UAAU,0CAAf,WACE,gBAAIA,UAAU,OAAd,qCACA,UAAC,GAAD,CAAMA,UAAU,kEAAhB,UACE,iBAAKA,UAAU,MAAf,SACG20J,IAAWqrG,GACV,UAAChf,GAAD,CAEE/yI,YAAa,gCACblL,MAAOmpK,EACPhrB,cAAc,UACdC,YAAY,gBALd,qBAQA,UAAC,GAAD,YAMR,kBAAKnhP,UAAU,4BAAf,WACE,gBAAIA,UAAU,OAAd,+BACA,UAAC,GAAD,WACE,iBAAKA,UAAU,YAAf,SACG20J,IAAWqrG,GACV,UAAC,GAAD,CAAa1zJ,MAtFG,WAC9B,IAAM8/J,EAAmBpvJ,EAAahnD,SAAQ,SAACunD,GAC7C,IAAM8uJ,EACJ9uJ,EAAYS,uBAAyBT,EAAYY,aAC7CZ,EAAYS,qBAAuB,EACnCT,EAAYS,qBAOlB,OAJE22C,EAAQ02G,8CAA8C95V,IACpDgsM,EAAYC,oBACX6uJ,MAKDC,EAAc33G,EAAQw2G,qBAAqBv9D,cAAc7sS,QAC7D,SAACqtS,GAAD,OAASA,EAAIF,mBAAqB87D,MAGpC,OAAO,oBACFr1G,EAAQw2G,sBADb,IAEEv9D,cAAc,GAAD,UAAM0+D,GAAN,GAAsBF,MAiEHG,MAEpB,UAAC,GAAD,YAMR,kBAAKvsQ,UAAU,wDAAf,WACE,gBAAIA,UAAU,OAAd,uCACA,UAAC,GAAD,CAAMA,UAAU,OAAhB,UACE,iBAAKA,UAAU,OAAf,SACG20J,IAAWqrG,GACV,0BACGhjJ,EAAapnM,KAAI,SAAC2nM,EAAa/sK,GAAd,OAChB,kBAAqCwvD,UAAU,OAA/C,WACE,mBAAOA,UAAU,gBAAjB,SACGu9G,EAAYC,sBAEf,UAAC,GAAD,CACEx9G,UAAU,SACVlhG,MAAOy+M,EAAYS,qBACnBntK,IAAK0sK,EAAYY,aACjB3qG,SAAU,SAACg5P,GAAD,OA9EV,SACtBjvJ,EACAivJ,GAEA,IAAMpvJ,GAA2B,oBAC5BG,GAD4B,IAE/BS,qBAAsBwuJ,IAGxB53V,EAASuoM,GAAqBC,IAsENqvJ,CAAgBlvJ,EAAaivJ,QATnC,yBAA4Bh8T,UAgBhC,UAAC,GAAD,oBCtIlB,GAxD4E,SAAC,GAItE,IAAD,EAHJk8T,EAGI,EAHJA,sBACA9lI,EAEI,EAFJA,cACAK,EACI,EADJA,mBAEMv7H,GAAM+lC,EAAAA,EAAAA,QAAO,MACnB,MAA4CC,EAAAA,EAAAA,WAAS,GAArD,GAAOw1F,EAAP,KAAuBC,EAAvB,KAEAC,GAAa17H,GAAK,kBAAMy7H,GAAkB,MAE1C,IAAMwlI,EAAsB/lI,EAAcz5E,MACxC,SAACvI,GAAD,OAAWA,EAAMrxF,OAASm5S,KAG5B,OACE,iCACE,kBAAK1sQ,UAAU,iBAAiB0L,IAAKA,EAArC,WACE,oBACE,gBAAc,OACd,gBAAc,gBACdV,QAAS,kBAAMm8H,GAAmBD,IAClClnI,UAAU,YAJZ,UAME,mBAAMA,UAAU,mEAAhB,2BACG2sQ,QADH,IACGA,OADH,EACGA,EAAqBrgQ,aADxB,QACiC,eAC/B,eAAGtM,UAAU,mEAIhBknI,GACC,iBACElnI,UAAS,mEACTjpF,GAAG,uCACHwwN,KAAK,OAHP,UAKE,iBAAKvnI,UAAU,sEAAf,SACG4mI,EAAchxN,KAAI,SAAC29C,EAAM/iB,GAAP,OACjB,iBAEEwvD,UAAU,+DACVgL,QAAS,WACPi8H,EAAmB1zK,EAAKA,KAAMqzK,GAC9BO,GAAkB,IALtB,SAQG5zK,EAAK+4C,OARR,UACU/4C,EAAKA,KADf,4CACuD/iB,WAY3D,WCtDCo8T,GAAsB,WACjC,IAAMh4V,EAAWi0J,IAEXg6D,EAAuBr7D,GAC3B,SAAChkK,GAAD,OAAsBA,EAAMw2M,SAASh/B,gBAevC,OACE,UAAC,GAAD,WACE,UAAC,GAAD,CAA2Bh7E,UAAU,qGAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,mDAAd,uBAGA,UAAC,GAAD,CACE4mI,cApByC,CACjD,CAAEt6H,MAAO,uBAAwB/4C,KAAM,OACvC,CAAE+4C,MAAO,8BAA+B/4C,KAAM,OAC9C,CAAE+4C,MAAO,cAAe/4C,KAAM,OAC9B,CAAE+4C,MAAO,yBAA0B/4C,KAAM,OACzC,CAAE+4C,MAAO,4BAA6B/4C,KAAM,OAC5C,CAAE+4C,MAAO,0BAA2B/4C,KAAM,OAC1C,CAAE+4C,MAAO,2BAA4B/4C,KAAM,OAC3C,CAAE+4C,MAAO,2BAA4B/4C,KAAM,OAC3C,CAAE+4C,MAAO,0BAA2B/4C,KAAM,QAYlCm5S,sBAAuB7pI,EACvBoE,mBAAoB,SAACtnO,EAAK6f,GACxB5K,EAASklM,GAAgBn6M,0BCwBvC,GArDkB,YAA0D,IAApCktW,EAAmC,EAAnCA,UAChCj4V,EAAWi0J,IACXikM,GAAkBr7N,EAAAA,EAAAA,QAAO,MA+B/B,OACE,6BACE,mBACEltI,KAAK,OACLwoW,OAAO,OACPv5P,SAlCmB,SAAC/I,GAA0C,IAAD,EAC3D9gB,EAAI,UAAG8gB,EAAMtpG,OAAOuoF,aAAhB,aAAG,EAAqB,GAE9BC,IACF96E,EAAAA,GAAAA,OAAe86E,EAAM,CACnBrB,QAAQ,EACRz/E,SAAU,SAACuqD,GACT,IAAMvgD,EAAOugD,EAAQvgD,KACrBg6V,EAAUh6V,EAAM82E,EAAKriF,MACrBmjG,EAAMtpG,OAAOrC,MAAQ,IAEvB8G,MAAO,SAACA,EAAc+jF,GACpBj6E,QAAQ9J,MAAM,qBAAsBA,GACpCgP,EACEoiB,GAAQ,CACNk5K,MAAO,uBACPz6L,YACE,mEAkBRi2F,IAAKohQ,EACL9sQ,UAAU,YAEZ,UAAC,GAAD,CACEoiO,WAAW,cACXt4T,MAAOo4U,GAAYY,UACnB93O,QAhBc,WACjB8hQ,EAAgBziW,QAAgBiqK,SAY/B,UAKE,iDC1BR,GArBK,SAAC,GAMC,IAAD,IALJzgB,WAAAA,OAKI,MALS,EAKT,MAJJnxG,SAKA,EAhBuB,SAACA,GACxB,OAAOA,EACH,CAAC,eAAgB,gBACjB,CAAC,mBAAoB,kBAauBsqT,MAD5C,UACJ,UAAOC,EAAP,KAAuB3M,EAAvB,KAEA,OACE,iCACE,iBAAKtgQ,UAAS,6BAAwBsgQ,GAAtC,UACE,iBACE5rP,MAAO,CAAE52E,MAAM,GAAD,OAAK+1H,EAAL,MACd7zD,UAAS,qCAAgCitQ,UCzBtCC,GAA2B,SACtCC,GAEA,OAAKA,EAEEA,EAAuB/mS,MAAM,KAAKxwD,KAAI,SAACglC,GAC5C,MAAsBA,EACnBwrB,MAAM,KACNxwD,KAAI,SAAC49I,GAAD,OAAUA,EAAKptF,MAAM,KAAKxwD,KAAI,SAACjX,GAAD,OAAOA,EAAE6S,aAF9C,UAAOlK,EAAP,KAAaxI,EAAb,KAGA,MAAO,CAAEa,IAAK2H,EAAK,GAAIxI,MAAOA,EAAQA,EAAM,GAAK,OANf,ICmChCsuW,GAAiC,SACrCtgR,GAEA,IAAMkuQ,EAA2B,GA2BjC,OAzBIluQ,EAAI8nF,cACNomL,EAAyBx6V,KAAK,CAC5Bb,IAAK,eACLb,MAAOguF,EAAI8nF,eAIX9nF,EAAIugR,cACNrS,EAAyBx6V,KAAK,CAC5Bb,IAAK,eACLb,MAAOguF,EAAIugR,eAIXvgR,EAAI6nF,MACNqmL,EAAyBx6V,KAAK,CAAEb,IAAK,OAAQb,MAAOguF,EAAI6nF,OAGtD7nF,EAAI+nF,aACNmmL,EAAyBx6V,KAAK,CAC5Bb,IAAK,cACLb,MAAOguF,EAAI+nF,cAIRmmL,GAwDHsS,GAAiB,SAACx7J,GAAD,OACpB9qM,MAAM8qM,EAAQhzM,QACfgzM,EAAQy7J,kBAAkB1vW,OAAS,GACnCi0M,EAAQ92B,aAAan9K,OAAS,GAEnB2vW,GAAqB,WAChC,IAAM54V,EAAWi0J,IACX33D,GAAgBugC,EAAAA,EAAAA,SAAO,GAEzBvgC,EAAc7mG,UAChBuK,EAAS6lM,MACTvpG,EAAc7mG,SAAU,GAG1B,IAAQgwK,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACA+/B,EACN67F,GAAiBn7F,IADXV,6BAGFqzJ,EAAmBx3D,GAAiBj7F,IAE1C,MAA8CtpE,EAAAA,EAAAA,UAAuB,IAArE,GAAOg8N,EAAP,KAAwBC,EAAxB,KACA,MAA0Cj8N,EAAAA,EAAAA,UAAiB,IAA3D,GAAOk8N,EAAP,KAAsBC,EAAtB,KACA,MAAsCn8N,EAAAA,EAAAA,WAAkB,GAAxD,GAAOo8N,EAAP,KAAoBC,EAApB,KACA,MAAgDr8N,EAAAA,EAAAA,WAAkB,GAAlE,GAAOs8N,EAAP,KAAyBC,EAAzB,KACA,MAA0Cv8N,EAAAA,EAAAA,UACxC,IADF,GAAOw8N,EAAP,KAAsBC,EAAtB,KA6DOC,EAAP,GAAgCvyJ,KAAhC,MA+CA,OACE,mCACE,UAAC,GAAD,CAAWgxJ,UA1GO,SAACh6V,EAAuBuhK,GAC5C,IAAMi6L,EAlFe,SAACh7S,GACxB,IAD4E,EACtEi7S,EAAqBj7S,EAAKz7C,QAAwB,SAAC22V,EAAOzhR,GAC9D,IAAM0hR,EAAoBD,EAAMphN,MAC9B,SAACpnI,GAAD,OACEA,EAAE4uJ,OAAS7nF,EAAI6nF,MACf5uJ,EAAE6uJ,eAAiB9nF,EAAI8nF,cACvB7uJ,EAAE8uJ,cAAgB/nF,EAAI+nF,aACtB9uJ,EAAEsnV,eAAiBvgR,EAAIugR,cACvBtnV,EAAE0oV,oBAAsB3hR,EAAI2hR,qBAGhC,OAAgBD,EAAiB,aAAOD,GAAP,CAAcC,IAAqBD,IACnE,IAEGG,EAAiD,GAdqB,KAgBpDJ,GAhBoD,yBAgBjEK,EAhBiE,QAiBpEC,EAAqBF,EAAqBvhN,MAC9C,SAAC9mI,GAAD,OACEA,EAAEymE,IAAI6nF,OAASg6L,EAAUh6L,MACzBtuJ,EAAEymE,IAAI8nF,eAAiB+5L,EAAU/5L,cACjCvuJ,EAAEymE,IAAI+nF,cAAgB85L,EAAU95L,aAChCxuJ,EAAEymE,IAAIugR,eAAiBsB,EAAUtB,cACjChnV,EAAEymE,IAAI2hR,oBAAsBE,EAAUF,qBAGtCG,EACFA,EAAmBrhU,MAAQqhU,EAAmBrhU,MAAQ,EAEtDmhU,EAAqBluW,KAAK,CACxB+sC,MAAO,EACPu/C,IAAK6hR,KAfX,2BAA6C,IAhB+B,8BAoC5E,OAAOD,EA8CcG,CAAiBh8V,GAE9B66V,EAAgC76V,EACnC+C,KAAI,SAACk5V,GACJ,IA/Ce5nV,EA+CT6nV,EAAYnvW,OAAOgB,KAAKkuW,GAAe/tW,QAAO,SAACijH,GAAD,OAClDA,EAAavyG,WAAW,YAGpBkqV,EAA2BuR,GAC/B4B,EAAcE,0BACdp5V,KAAI,SAACglC,GAAD,MAAW,CAAEtzC,KAAMszC,EAAKj7C,IAAKb,MAAO87C,EAAK97C,UAE/C,OAAKgwW,IAvDU5nV,EAuDsB4nV,EA5CP,IAJVlvW,OAAOgB,KANmB,CAClD6tW,kBAAmB,SACnBQ,aAAc,SACdC,MAAO,WAGqCnuW,QAC5C,SAACpB,GAAD,YAAwBoG,IAAfmhB,EAAMvnB,MAGQ9B,QA+CS,CAC1BiB,MAAOgwW,EAAcI,MAAMrxW,OAAS,EAAIwkC,KAAOysU,EAAcI,MAC7D3B,kBAAmBuB,EAAcL,kBACjCnS,SAAUwS,EAAcK,SACxB1yG,OAAQsyG,EACLn5V,KAAI,SAACw5V,GAAD,OAAcN,EAAcM,MAChCruW,QAAO,SAACsuW,GAAD,MAA+B,KAAfA,KAC1Br0L,aAAc8zL,EAAcG,aAC5BjU,yBACEoS,GAA+B0B,GACjCnT,yBAAAA,EACAD,UAAWoT,EAAcQ,WAblB,QAiBVvuW,QACC,SAACwuW,GAAD,OACiB,OAAfA,QAAsCxpW,IAAfwpW,KAGE7B,EAAgB3vV,MAAMuvV,KAarDK,EAAmBD,GACnBG,EAAiBz5L,GACjB65L,GAAoB,GACpBE,EAAiBE,GACjBz5V,EAAS8lM,GAAsCgzJ,EAAgB7vW,SAC/D+W,EAAS+lM,GAAsC,KAf7C/lM,EACEoiB,GAAQ,CACNk5K,MAAO,eACPz6L,YACE,qFAgEN,kBAAKuqF,UAAU,OAAf,WACE,kBAAMA,UAAU,cAAhB,8BACA,kBAAMA,UAAU,OAAhB,SAAwB4tQ,QAE1B,kBAAK5tQ,UAAU,OAAf,WACE,kBAAMA,UAAU,cAAhB,mDAGA,kBAAMA,UAAU,OAAhB,SAAwBo6G,QAE1B,kBAAKp6G,UAAU,OAAf,WACE,6CACCkuQ,EAAcrwW,OAAS,GACtB,iCACE,oDAGFqwW,EAAct4V,KAAI,SAAC+4V,EAAWn+T,GAC5B,OACE,kBAAiBwvD,UAAU,yBAA3B,WACE,+BAAS2uQ,EAAUphU,MAAnB,oBACA,kBAAMyyD,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAI2hR,oBACrCE,EAAU7hR,IAAI6nF,MACb,kBAAM30E,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAI6nF,QAEtC,0BAEDg6L,EAAU7hR,IAAI8nF,cACb,kBAAM50E,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAI8nF,gBAEtC,0BACC,IACF+5L,EAAU7hR,IAAI+nF,aACb,kBAAM70E,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAI+nF,eAEtC,0BACC,IACF85L,EAAU7hR,IAAIugR,cACb,kBAAMrtQ,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAIugR,gBAEtC,4BArBM78T,UA4BlB,iBAAKwvD,UAAU,OAAf,UACE,UAAC,GAAD,CACEoiO,WAAW,gBACXt4T,MAAOo4U,GAAYW,QACnBxiM,WAAYqtN,EAAgB7vW,OAAS,EACrC2qB,UAAWslV,EACX9iQ,QAAS,kBApGf+iQ,GAAe,QAEVK,EAAsB,CACzB/zL,OAAAA,EACA+gC,SAAUsyJ,IAETzkV,SACAvjB,MAAK,SAACF,GACL,GAAIA,EAAOg2M,mBACTuyJ,GAAe,GAEfn5V,EACE2xC,GAAU,CACR2pJ,MAAO,iBACPz6L,YACE,oGAGD,CACLw4V,GAAoB,GACpB,IAAMuB,EAAYhqW,EAAOk2M,kBACnBjmM,EAAcjQ,EAAOmlF,OAAP,8BACO6kR,EADP,aACqB5vW,OAAOoF,OAC1CQ,EAAOmlF,QACPvuD,KAAK,OACP,+FACJxnB,EACEoiB,GAAQ,CACNk5K,MAAO,sCACPz6L,YAAAA,SAKPg6V,SAAQ,WACP9B,EAAmB,IACnBE,EAAiB,IACjBE,GAAe,GACfI,EAAiB,IACjBv5V,EAAS8lM,GAAsC,IAC/C9lM,EAAS+lM,GAAsC,QAuD/C,UAOE,gDAIJ,iBAAK36G,UAAU,OAAf,SACG8tQ,GACC,UAAC,GAAD,CACEj6M,WAAY45M,EACZ/qT,SAAUsrT,KAGZ,gCC9RJZ,GAAiC,SACrCtgR,GAEA,IAAMkuQ,EAA2B,GA2BjC,OAzBIluQ,EAAI8nF,cACNomL,EAAyBx6V,KAAK,CAC5Bb,IAAK,eACLb,MAAOguF,EAAI8nF,eAIX9nF,EAAIugR,cACNrS,EAAyBx6V,KAAK,CAC5Bb,IAAK,eACLb,MAAOguF,EAAIugR,eAIXvgR,EAAI6nF,MACNqmL,EAAyBx6V,KAAK,CAAEb,IAAK,OAAQb,MAAOguF,EAAI6nF,OAGtD7nF,EAAI+nF,aACNmmL,EAAyBx6V,KAAK,CAC5Bb,IAAK,cACLb,MAAOguF,EAAI+nF,cAIRmmL,GAiEH0U,GAAqB,SAAC9zJ,GAAD,OACxB50M,MAAM40M,EAAY+tI,mBACnB/tI,EAAY+rJ,oBAAoB9pW,OAAS,GACzC+9M,EAAY+pJ,cAAc9nW,OAAS,GACnC+9M,EAAY5gC,aAAan9K,OAAS,GAEvB8xW,GAA0B,WACrC,IAAM/6V,EAAWi0J,IACX33D,GAAgBugC,EAAAA,EAAAA,SAAO,GAEzBvgC,EAAc7mG,UAChBuK,EAAS6lM,MACTvpG,EAAc7mG,SAAU,GAG1B,IAAQgwK,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACAigC,EACN27F,GAAiBn7F,IADXR,iCAGFmzJ,EAAmBx3D,GACvBh7F,IAGF,MAA0DvpE,EAAAA,EAAAA,UAExD,IAFF,GAAOk+N,EAAP,KAA8BC,EAA9B,KAGA,MAA0Cn+N,EAAAA,EAAAA,UAAiB,IAA3D,GAAOk8N,EAAP,KAAsBC,EAAtB,KACA,MAAsCn8N,EAAAA,EAAAA,WAAkB,GAAxD,GAAOo8N,EAAP,KAAoBC,EAApB,KACA,MAAgDr8N,EAAAA,EAAAA,WAAkB,GAAlE,GAAOs8N,EAAP,KAAyBC,EAAzB,KACA,MAA0Cv8N,EAAAA,EAAAA,UAExC,IAFF,GAAOw8N,EAAP,KAAsBC,EAAtB,KAmEO2B,EAAP,GAAsCh0J,KAAtC,MAEM6zJ,EAAsB,WAC1B5B,GAAe,GAEV+B,EAA4B,CAC/Bz1L,OAAAA,EACA23B,cAAe49J,IAEd3mV,SACAvjB,MAAK,SAACF,GACL,GAAIA,EAAOg2M,mBACTuyJ,GAAe,GAEfn5V,EACE2xC,GAAU,CACR2pJ,MAAO,iBACPz6L,YACE,2GAGD,CACLw4V,GAAoB,GACpB,IAAMuB,EAAYhqW,EAAOk2M,kBACnBjmM,EAAcjQ,EAAOmlF,OAAP,8BACO6kR,EADP,aACqB5vW,OAAOoF,OAC1CQ,EAAOmlF,QACPvuD,KAAK,OACP,qGACJxnB,EACEoiB,GAAQ,CACNk5K,MAAO,4CACPz6L,YAAAA,SAKPg6V,SAAQ,WACPI,EAAyB,IACzBhC,EAAiB,IACjBE,GAAe,GACfI,EAAiB,IACjBv5V,EAASgmM,GAA0C,IACnDhmM,EAASimM,GAA0C,QAIzD,OACE,mCACE,UAAC,GAAD,CAAWgyJ,UAhHO,SAACh6V,EAA2BuhK,GAChD,IAAMi6L,EAhGe,SACvBh7S,GAEA,IADiC,EAC3Bi7S,EAAqBj7S,EAAKz7C,QAA4B,SAAC22V,EAAOzhR,GAClE,IAAM0hR,EAAoBD,EAAMphN,MAC9B,SAACpnI,GAAD,OACEA,EAAE4uJ,OAAS7nF,EAAI6nF,MACf5uJ,EAAE6uJ,eAAiB9nF,EAAI8nF,cACvB7uJ,EAAE8uJ,cAAgB/nF,EAAI+nF,aACtB9uJ,EAAEsnV,eAAiBvgR,EAAIugR,cACvBtnV,EAAEgqV,sBAAwBjjR,EAAIijR,qBAC9BhqV,EAAEiqV,gBAAkBljR,EAAIkjR,iBAG5B,OAAOxB,EAAiB,aAAOD,GAAP,CAAcC,IAAqBD,IAC1D,IAEGG,EAAqD,GAf1B,KAiBTJ,GAjBS,yBAiBtBK,EAjBsB,QAkBzBC,EAAqBF,EAAqBvhN,MAC9C,SAAC9mI,GAAD,OACEA,EAAEymE,IAAI6nF,OAASg6L,EAAUh6L,MACzBtuJ,EAAEymE,IAAI8nF,eAAiB+5L,EAAU/5L,cACjCvuJ,EAAEymE,IAAI+nF,cAAgB85L,EAAU95L,aAChCxuJ,EAAEymE,IAAIugR,eAAiBsB,EAAUtB,cACjChnV,EAAEymE,IAAIijR,sBAAwBpB,EAAUoB,qBACxC1pV,EAAEymE,IAAIkjR,gBAAkBrB,EAAUqB,iBAGlCpB,EACFA,EAAmBrhU,MAAQqhU,EAAmBrhU,MAAQ,EAEtDmhU,EAAqBluW,KAAK,CACxB+sC,MAAO,EACPu/C,IAAK6hR,KAhBX,2BAA6C,IAjBZ,8BAsCjC,OAAOD,EAwDcG,CAAiBh8V,GAK9B+8V,EAJqB/8V,EAAK9R,QAC9B,SAACkvW,GAAD,OACEA,IAxDmB/oV,EAwDoB+oV,EAxCT,IAJVrwW,OAAOgB,KAXuB,CACtDmvW,oBAAqB,SACrBd,aAAc,SACdiB,iBAAkB,SAClBF,cAAe,SACfp7L,aAAc,SACdy4L,aAAc,SACd14L,KAAM,SACNE,YAAa,WAG+B9zK,QAC5C,SAACpB,GAAD,YAAwBoG,IAAfmhB,EAAMvnB,MAGQ9B,QAhBD,IAACqpB,KA2DpBtR,KAAI,SAACq6V,GACJ,IAAMlB,EAAYnvW,OAAOgB,KAAKqvW,GAAmBlvW,QAC/C,SAACijH,GAAD,OAAkBA,EAAavyG,WAAW,YAGtCkqV,EAA2BuR,GAC/B+C,EAAkBjB,0BAClBp5V,KAAI,SAACglC,GAAD,MAAW,CAAEtzC,KAAMszC,EAAKj7C,IAAKb,MAAO87C,EAAK97C,UAkB/C,MAhBoC,CAClC6qV,iBACEsmB,EAAkBC,iBAAiBryW,OAAS,EACxCwkC,KACC4tU,EAAkBC,iBACzBvI,oBAAqBsI,EAAkBF,oBACvCpK,cAAesK,EAAkBD,cACjCvzG,OAAQsyG,EACLn5V,KAAI,SAACw5V,GAAD,OAAca,EAAkBb,MACpCruW,QAAO,SAACsuW,GAAD,MAA+B,KAAfA,KAC1Br0L,aAAci1L,EAAkBhB,aAChCjU,yBACEoS,GAA+B6C,GACjCtU,yBAAAA,EACAD,UAAWuU,EAAkBX,cAIhCvuW,QACC,SAACovW,GAAD,OACqB,OAAnBA,QAA8CpqW,IAAnBoqW,KAI/BP,EAAsB7xV,MAAM2xV,KAa9BG,EAAyBD,GACzB/B,EAAiBz5L,GACjB65L,GAAoB,GACpBE,EAAiBE,GACjBz5V,EACEgmM,GAA0Cg1J,EAAsB/xW,SAElE+W,EAASimM,GAA0C,KAjBjDjmM,EACEoiB,GAAQ,CACNk5K,MAAO,eACPz6L,YACE,qFAkEN,kBAAKuqF,UAAU,OAAf,WACE,kBAAMA,UAAU,cAAhB,8BACA,kBAAMA,UAAU,OAAhB,SAAwB4tQ,QAE1B,kBAAK5tQ,UAAU,OAAf,WACE,kBAAMA,UAAU,cAAhB,uDAGA,kBAAMA,UAAU,OAAhB,SAAwBs6G,QAE1B,kBAAKt6G,UAAU,OAAf,WACE,6CACCkuQ,EAAcrwW,OAAS,GACtB,iCACE,oDAGFqwW,EAAct4V,KAAI,SAAC+4V,EAAWn+T,GAC5B,OACE,kBAAiBwvD,UAAU,yBAA3B,WACE,+BAAS2uQ,EAAUphU,MAAnB,oBACA,kBAAMyyD,UAAU,OAAhB,SACG2uQ,EAAU7hR,IAAIijR,uBAEjB,kBAAM/vQ,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAIkjR,gBACrCrB,EAAU7hR,IAAI6nF,MACb,kBAAM30E,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAI6nF,QAEtC,0BAEDg6L,EAAU7hR,IAAI8nF,cACb,kBAAM50E,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAI8nF,gBAEtC,0BACC,IACF+5L,EAAU7hR,IAAI+nF,aACb,kBAAM70E,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAI+nF,eAEtC,0BACC,IACF85L,EAAU7hR,IAAIugR,cACb,kBAAMrtQ,UAAU,OAAhB,SAAwB2uQ,EAAU7hR,IAAIugR,gBAEtC,4BAxBM78T,UA+BlB,iBAAKwvD,UAAU,OAAf,UACE,UAAC,GAAD,CACEoiO,WAAW,sBACXt4T,MAAOo4U,GAAYW,QACnBxiM,WAAYuvN,EAAsB/xW,OAAS,EAC3C2qB,UAAWslV,EACX9iQ,QAAS,kBAAM2kQ,KALjB,UAOE,sDAIJ,iBAAK3vQ,UAAU,OAAf,SACG8tQ,GACC,UAAC,GAAD,CACEj6M,WAAY45M,EACZ/qT,SAAUsrT,KAGZ,gCCvVGoC,GAAyB,WACpC,OACE,WAAC,GAAD,YACE,UAAC,GAAD,CAA2BpwQ,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,+EAAd,0BAGA,UAACwtQ,GAAD,UAIJ,UAAC,GAAD,CAA2BxtQ,UAAU,yFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,+EAAd,8BAGA,UAAC2vQ,GAAD,aCXK,SAASU,GAAT,GAMS,IALtBvmW,EAKqB,EALrBA,MACAs4T,EAIqB,EAJrBA,WACAmhB,EAGqB,EAHrBA,eACA13U,EAEqB,EAFrBA,GACA0/F,EACqB,EADrBA,SAEMtvE,EAAO,OAAGsnT,QAAH,IAAGA,EAAAA,EAAkB,cAC5BC,EAAeZ,GAAgB94U,GAErC,OACE,iCACE,UAAC,GAAD,CACE+B,GAAIA,EACJkL,GAAIqrT,EACJpiO,UAAS,qEAAgEwjP,EAAhE,YAAgFvnT,GAH3F,SAKGsvE,MCpBT,SAAS0yP,GAAWn0V,GAClB,OAAQA,GACN,KAAKmgW,GAAUjnB,QACb,MAAO,2DACT,KAAKinB,GAAU/mB,MACb,MAAO,qDACT,KAAK+mB,GAAUqG,SACb,MAAO,4DACT,KAAKrG,GAAU52J,WACb,MAAO,2DACT,KAAK42J,GAAUsG,UACb,MAAO,iEACT,QACE,MAAM,IAAI5sW,MAAJ,uDAA0DmG,KAIvD,SAAS0mW,GAAT,GAKA,IAJbjlQ,EAIY,EAJZA,SACAzhG,EAGY,EAHZA,MACAy5U,EAEY,EAFZA,eACAktB,EACY,EADZA,YAEMx0U,EAAO,OAAGsnT,QAAH,IAAGA,EAAAA,EAAkB,wCAClC,OAAIz5U,IAAUmgW,GAAU/mB,OAEpB,kBACEljP,UAAS,UAAKi+P,GACZn0V,GADO,YAEJmyB,EAFI,iCADX,UAKGsvE,GACD,kBAAMvL,UAAU,+JAAhB,SACGywQ,QAML,iBAAKzwQ,UAAS,UAAKi+P,GAAWn0V,GAAhB,YAA0BmyB,EAA1B,2BAAd,SACGsvE,KbjDT,SAAY0+P,GAAAA,EAAAA,QAAAA,UAAAA,EAAAA,MAAAA,QAAAA,EAAAA,SAAAA,WAAAA,EAAAA,WAAAA,aAAAA,EAAAA,UAAAA,YAAZ,CAAYA,KAAAA,GAAAA,KCAZ,SAAYC,GAAAA,EAAAA,MAAAA,QAAAA,EAAAA,QAAAA,UAAAA,EAAAA,SAAAA,WAAAA,EAAAA,QAAAA,UAAZ,CAAYA,KAAAA,GAAAA,KaAL,IAAMwG,GAAuB,SAACvzL,GAAD,8BACjBA,IAENwzL,GAAmC,SAACzgW,GAAD,+BAC5BA,IC0EpB,GA/CmC,SAAC,GAGJ,IAF9B0gW,EAE6B,EAF7BA,cACAzzL,EAC6B,EAD7BA,UAEMrzK,EAxBmB,SAAC0E,GAC1B,OAAQA,GACN,KAAK07V,GAAc2G,MACjB,OAAO5G,GAAUjnB,QACnB,KAAKknB,GAAcpyK,QACjB,OAAOmyK,GAAU/mB,MACnB,KAAKgnB,GAAcoG,SACjB,OAAOrG,GAAUqG,SACnB,QACE,MAAM,IAAI3sW,MAAJ,wDAC6C6K,KAczCsiW,CAAmBF,GAEjC,KAAmCt7J,GAAyB,CAC1Dt+L,cAAe05V,GAAqBvzL,KADtC,GAAU4zL,GAAV,WAIA,KAAsCz7J,GAAyB,CAC7Dt+L,cAAe25V,GAAiCxzL,KADlD,GAAW6zL,GAAX,WA8BA,OACE,iBAAKhxQ,UAAU,6CAAf,SA1BI+wQ,EAAsBviW,SAAW/B,GAAAA,YAAAA,SAEjC,kBAAKuzF,UAAU,oBAAf,WACE,UAAC,GAAD,CAASjsE,KAAMmyM,GAAYq5G,SAC3B,kBAAMv/O,UAAU,yBAAhB,4BAGKgxQ,EAAwBxiW,SAAW/B,GAAAA,YAAAA,SAE1C,kBAAKuzF,UAAU,oBAAf,WACE,UAAC,GAAD,CAASjsE,KAAMmyM,GAAYq5G,SAC3B,kBAAMv/O,UAAU,yBAAhB,uCAKF,iBAAKA,UAAU,mBAAf,UACE,UAACwwQ,GAAD,CAAM1mW,MAAOA,EAAb,UACE,mBAAMk2F,UAAU,oBAAhB,UAAqC4wQ,EAArC,cClCZ,GApB2B,SAAC,GAMI,IAL9BxuC,EAK6B,EAL7BA,WACAv2T,EAI6B,EAJ7BA,GACAolW,EAG6B,EAH7BA,cACA3uC,EAE6B,EAF7BA,YACA/2N,EAC6B,EAD7BA,SAEA,OACE,iCACE,WAAC,GAAD,CACE1/F,GAAIA,EACJm0F,UAAS,kHAA6GixQ,GACtHl6V,GAAIqrT,EAHN,UAKGE,GAAc,eAAGtiO,UAAWsiO,KAAoB,0BAChD/2N,QCFM,SAAS2lQ,GAAT,GAEe,IAD5Bp+J,EAC2B,EAD3BA,QAEMl+L,EAAWi0J,IACT+rL,EAAgBD,KAAhBC,YACFv0M,EAAayyD,EAAQR,oBAAsBsiJ,EACjD,MAA4CljN,EAAAA,EAAAA,WAAS,GAArD,GAAOw1F,EAAP,KAAuBC,EAAvB,KAEOgqI,EAAP,GAAgC77J,GAAyB,CACvDt+L,cAAe05V,GAAqB59J,EAAQ/7L,MAD9C,MAoBOq6V,EAAP,GAA0Ch8J,GAAmC,CAC3Ep+L,cAAe25V,GAAiC79J,EAAQ/7L,MAD1D,MAqCA,OACE,iBAAKipF,UAAU,2DAAf,UACE,WAAC,GAAD,CACEknI,eAAgBA,EAChBm7F,cAAc,gEACdkc,kBAAkB,oFAClBK,oBAAoB,4BACpBC,iBAAiB,+BACjBx+L,WAAYA,EACZ6vD,MACE7vD,EACI,8CACA,sDAENy+L,kBAAmB,kBAAM33G,GAAmBD,IAC5Cb,YAAa,kBAAMc,GAAkB,IAbvC,UAeGr0B,EAAQtkM,SAAW07V,GAAcoG,UAChC,UAAC,GAAD,CACEluC,WAAW,iBACXC,cAAc,oBACdC,YAAY,2HACZt3N,QAvDc,WACjBomQ,EAAgC,CACnC/2L,OAAQy4B,EAAQz4B,OAChBnqK,IAAK4iM,EAAQT,aAEZppL,SACAvjB,MAAK,WACJ,IAAM2rW,GAAuB,oBACxBv+J,GADwB,IAE3BtkM,OAAQ07V,GAAc2G,QAGnBM,EAAsBE,GACxBpoV,SACAvjB,MAAK,kBACJkP,EACE2xC,GAAU,CACR2pJ,MAAO,kBACPz6L,YAAY,gBAAD,OAAkBq9L,EAAQxrM,KAA1B,6CAKpB+X,OAAM,WACL,IAAMgyV,GAAuB,oBACxBv+J,GADwB,IAE3BtkM,OAAQ07V,GAAcpyK,UAGnBq5K,EAAsBE,OAsBzB,UAME,yCAGF,UAAC,GAAD,CACEjvC,WAAW,kBACXC,cAAc,oBACdC,YAAY,iMACZt3N,QApFe,WACvB,IAAMsmQ,GAAwB,oBACzBx+J,GADyB,IAE5BtkM,OAAQ07V,GAAcoG,WAGnBa,EAAsBG,GAAiB5rW,MAAK,kBAC/CkP,EACE2xC,GAAU,CACR2pJ,MAAO,mBACPz6L,YAAY,gBAAD,OAAkBq9L,EAAQxrM,KAA1B,4CAsEX,UAME,yCAGHstV,GACC,UAAC,GAAD,CACE/oV,GAAE,6BAAwBinM,EAAQ/7L,GAAhC,YACFqrT,WAAW,eACX6uC,cAAc,oBACd3uC,YAAY,8HAJd,UAME,+CAGF,uCAEF,UAAC,GAAD,CACEF,WAAW,iBACXC,cAAc,oBACdC,YAAY,uHACZt3N,QAAS,kBAAMp2F,EAASqqM,GAA4BnM,KAJtD,UAME,6CCxIV,IAAM20J,GAAerpC,KCHfmzC,GAAiB,SAACznW,GACtB,OAAQA,IACDo4U,GAAYe,QACR,iBAEA,gBAeAuuB,GAAc,SAAC,GASH,IARvBr6J,EAQsB,EARtBA,OACArtM,EAOsB,EAPtBA,MACAomM,EAMsB,EANtBA,MACAz6L,EAKsB,EALtBA,YACAg8V,EAIsB,EAJtBA,kBAIsB,IAHtBjpV,UAAAA,OAGsB,SAFtBkpV,EAEsB,EAFtBA,eACAC,EACsB,EADtBA,cAEA,OACE,iCACE,kBACE3xQ,UAAS,UAAKm3G,EAAS,GAAK,SAAnB,kBACT,kBAAgB,qBAChBowB,KAAK,SACL,aAAW,OAJb,WAME,iBAAKvnI,UAAU,4DAEf,iBAAKA,UAAU,qCAAf,UACE,iBAAKA,UAAU,kFAAf,UACE,kBAAKA,UAAU,gHAAf,WACE,iBAAKA,UAAU,yCAAf,UACE,kBAAKA,UAAU,yBAAf,WACE,iBACEA,UAAS,gHAA2GuxQ,GAClHznW,IAFJ,UAKE,iBACEk2F,UAAU,qBACV41P,MAAM,6BACNjiP,KAAK,OACLkiP,QAAQ,YACR9pO,YAAY,MACZ+4C,OAAO,eACP,cAAY,OAPd,UASE,kBACEgxL,cAAc,QACdC,eAAe,QACfhwU,EAAE,0LAKR,kBAAKi6E,UAAU,gDAAf,WACE,gBACEA,UAAU,8CACVjpF,GAAG,qBAFL,SAIGm5L,KAEH,iBAAKlwG,UAAU,OAAf,UACE,eAAGA,UAAU,wBAAb,SAAsCvqF,eAK9C,kBAAKuqF,UAAU,0CAAf,WACE,2BACE,UAAC,GAAD,CACEl2F,MAAOo4U,GAAYa,OACnB3gB,WAAW,sBACXp3N,QAAS2mQ,EAHX,UAKE,2CAGJ,iBAAK3xQ,UAAU,OAAf,UACE,UAAC,GAAD,CACEl2F,MAAOA,EACPs4T,WAAW,uBACXp3N,QAAS0mQ,EACTlpV,UAAWA,EAJb,UAME,2BAAOipV,wBCzEZ,SAASG,GAAT,GAA0D,IAAjCh/J,EAAgC,EAAhCA,SAChCh+L,EAAWi0J,IAEXq2C,EAAqB13C,EAAY23C,IAEvC,KAGI7J,KAHJ,GACEu8J,EADF,KAEEC,EAFF,KA4BM30C,EFpDmC,CACzCsqC,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIxlF,OAAM,CACvCyP,GAAI,OACJuxE,OAAQ,iBAAM,QACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAImwF,cAAa,CAC9ClmK,GAAI,cACJuxE,OAAQ,iBAAM,gBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIt+E,SAAQ,CACzCuI,GAAI,gBACJuxE,OAAQ,iBAAM,UACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,CACE4qW,cAAe5qW,EAAK8gH,WACpBq2D,UAAWn3K,EAAK8mF,IAAIs5E,SAASrvJ,QAInC0wV,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIulH,aAAY,CAC7Ct7L,GAAI,aACJuxE,OAAQ,iBAAM,OACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,iBAAKg6F,UAAU,mBAAmBkwG,MAAOlqM,EAAK8gH,WAA9C,SACG9gH,EAAK8gH,gBAIZ2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIr3E,cAAa,CAC9CsB,GAAI,cACJuxE,OAAQ,iBAAM,eACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,iBAAKg6F,UAAU,mBAAmBkwG,MAAOlqM,EAAK8gH,WAA9C,SACG9gH,EAAK8gH,gBAIZ2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIilR,kBAAiB,CAClDh7V,GAAI,kBACJuxE,OAAQ,iBAAM,qBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CACrCA,GAAI,UACJuxE,OAAQ,iBAAM,WACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,UAACkrW,GAAD,CAAsBp+J,QAAS9sM,EAAK8mF,IAAIs5E,YACxDtf,QAAS,GACT10I,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,aECN1hI,EAAgB0iH,GAAc,CAClCjvT,MAPsB0+H,EAAAA,EAAAA,UACtB,kBACEqhE,EAAS7xM,QAAO,SAAC+xM,GAAD,OAAaA,EAAQtkM,SAAW07V,GAAc8H,aAChE,CAACp/J,IAKDrqH,QAAS40O,EACThV,gBAAiBA,KACjB7C,kBAAmBA,KACnB+F,oBAAqBA,KACrBrK,sBAAsB,EACtBmQ,YAAY,EACZ5V,cAAc,EACdoY,cAAc,IAGhB,OACE,mCACE,UAAC69C,GAAD,CACEr6J,YAA+BpxM,IAAvBm5M,EACRp1M,MAAOo4U,GAAYgB,MACnBhzI,MAAM,iBACNz6L,YAAW,0DAA8CypM,QAA9C,IAA8CA,OAA9C,EAA8CA,EAAoB53M,KAAlE,KACXmqW,kBAAkB,iBAClBjpV,UACEspV,EAAqCtjW,SAAW/B,GAAAA,YAAAA,QAElDilW,eAAgB,kBAtDW,WAC/B,IAAMJ,GAAwB,oBACzBpyJ,GADyB,IAE5B1wM,OAAQ07V,GAAc8H,UAGnBH,EAAqCP,GACvCroV,SACAvjB,MAAK,WACJkP,EACE2xC,GAAU,CACR2pJ,MAAO,kBACPz6L,YAAY,gBAAD,OACTypM,EAAoB53M,KADX,uCAMfsN,EAASqqM,SAEV5/L,OAAM,kBAAMzK,EAASqqM,SAkCEgzJ,IACtBN,cAAe,kBAAM/8V,EAASqqM,UAGhC,UAAC+hI,GAAD,CAEE/yI,YAAa,iBACblL,MAAOqc,EACP+hI,YAAY,IAJd,qBCpFC,ICXK+wB,GDWCC,GAA2B,WACtC,IAAQ93L,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OAER,EACEsF,GAAoB,CAClBtF,OAAAA,IAFU+3L,EAAd,EAAQv/V,KAAiCw/V,EAAzC,EAA8B7pV,UAK9B,OACE,UAAC,GAAD,WACE,UAAC,GAAD,CAA2Bw3E,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,kBAAKA,UAAU,+EAAf,WACE,gBAAIA,UAAU,0BAAd,4BAEA,UAACqwQ,GAAD,CACEjuC,WAAW,iBACXt4T,MAAOo4U,GAAYW,QACnBh3U,GAAG,4BACH03U,eAAe,YAJjB,UAME,mDAIH8uB,GACC,iBAAKryQ,UAAU,sBAAf,UACE,UAAC,GAAD,OAGF,gCACGoyQ,GAAkBA,EAAex/J,SAAS/0M,OAAS,GAClD,UAAC+zW,GAAD,CAAeh/J,SAAUw/J,EAAex/J,YAExC,6BACE,eAAG5yG,UAAU,iFACb,gBAAIA,UAAU,sBAAd,0BACA,eAAGA,UAAU,2BAAb,qEEpCH,SAASsyQ,GAAT,GASG,IARhBlwC,EAQe,EARfA,WACAz3O,EAOe,EAPfA,OACA4nR,EAMe,EANfA,kBACAzzW,EAKe,EALfA,MACAg2G,EAIe,EAJfA,YACA09P,EAGe,EAHfA,oBACAC,EAEe,EAFfA,eACAj/P,EACe,EADfA,SAEMk/P,EACJ/nR,EAAO9sF,OAAS,EACZ,8CACA,8CAEA80W,EAAc,OAClBH,QADkB,IAClBA,EAAAA,EAAuB,gDAEnBI,EACJjoR,EAAO9sF,OAAS,EAAI,iBAAmB,mBAEzC,OACE,kBAAKmiG,UAAS,OAAEyyQ,QAAF,IAAEA,EAAAA,EAAkB,GAAlC,WACE,mBACEluW,KAAK,OACLwS,GAAIqrT,EACJ96T,KAAM86T,EACNpiO,UAAS,UAAK0yQ,EAAL,YAAqBC,EAArB,gCACT7zW,MAAOA,EACPg2G,YAAaA,EACbtB,SAAU,SAACz0G,GACTy0G,EAASz0G,EAAEoC,OAAOrC,WAGtB,kBAAKkhG,UAAU,iCAAf,WACE,iBAAKA,UAAU,6BAAf,SACGrV,EAAO/0E,KAAI,SAAChQ,EAAO4qC,GAAR,OACV,eAAewvD,UAAU,8BAAzB,SACGp6F,GADK4qC,SAKZ,iBAAKwvD,UAAU,4BAAf,SACGuyQ,GACC,kBACEvyQ,UAAS,UAAK4yQ,EAAL,4BADX,UAGG9zW,EAAMjB,OAHT,MAGoB00W,MAGpB,kCCrDG,SAASM,GAAT,GAOI,IANjBzwC,EAMgB,EANhBA,WACAz3O,EAKgB,EALhBA,OACA4nR,EAIgB,EAJhBA,kBACAzzW,EAGgB,EAHhBA,MACAg2G,EAEgB,EAFhBA,YACAtB,EACgB,EADhBA,SAEM9wD,EAAW6vT,GAAqBA,EAAoBzzW,EAAMjB,OAE1D60W,EAAehwT,EACjB,8CACA,qBAEEkwT,EAA0BlwT,EAC5B,iBACA,mBAEJ,OACE,kBAAKs9C,UAAU,gBAAf,WACE,sBACEjpF,GAAIqrT,EACJ96T,KAAM86T,EACNpiO,UAAS,UAAK0yQ,EAAL,6EACT5zW,MAAOA,EACPg2G,YAAaA,EACbtB,SAAU,SAACz0G,GACTy0G,EAASz0G,EAAEoC,OAAOrC,WAGtB,kBAAKkhG,UAAU,iCAAf,WACE,iBAAKA,UAAU,6BAAf,SACGrV,EAAO/0E,KAAI,SAAChQ,EAAO4qC,GAAR,OACV,eAAewvD,UAAU,yBAAzB,SACGp6F,GADK4qC,SAKZ,iBAAKwvD,UAAU,4BAAf,SACGuyQ,GACC,kBACEvyQ,UAAS,UAAK4yQ,EAAL,4BADX,UAGG9zW,EAAMjB,OAHT,MAGoB00W,MAGpB,mCFvDZ,SAAYL,GAAAA,EAAAA,eAAAA,gBAAAA,EAAAA,wBAAAA,wBAAAA,EAAAA,YAAAA,cAAAA,EAAAA,QAAAA,UAAZ,CAAYA,KAAAA,GAAAA,KAOL,IGLKY,GHKCC,GAA6B,SACxC91L,GAEA,OAAQA,GACN,KAAKi1L,GAAa1iB,eAChB,MAAO,QACT,KAAK0iB,GAAac,wBAChB,MAAO,QACT,QACE,OAAO/1L,KGdb,SAAY61L,GAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAZ,CAAYA,KAAAA,GAAAA,KAKZ,ICDYG,GDyDZ,GAlDK,SAAC,GAYC,IAXL/rP,EAWI,EAXJA,QACA5a,EAUI,EAVJA,MACA81N,EASI,EATJA,WACAruS,EAQI,EARJA,KACAy/E,EAOI,EAPJA,SAQI0/P,EAAoB,GACpBC,EAAoB,GACxB,OAAQp/U,GACN,KAAK++U,GAAWM,MACdF,EACE,iUACFC,EACE,kEACF,MACF,KAAKL,GAAWO,MACdH,EACE,gUACFC,EACE,mEAIN,OACE,iCACE,oBACE1e,QAASryB,EACTpiO,UAAU,mDAFZ,WAIE,mBACEz7F,KAAK,WACL2iH,QAASA,EACTnwG,GAAIqrT,EACJpiO,UAAU,eACVwT,SAAUA,KAEZ,iBAAKxT,UAAWkzQ,KAChB,kBAAMlzQ,UAAWmzQ,EAAjB,SAAqC7mQ,UEQhCgnQ,GAAiC,WAC5C,IAAM1+V,EAAWi0J,IACXoqD,EAAWH,KAETz4C,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACAu6K,EAAgBD,KAAhBC,YACFtzK,EAAkB9Z,GACtB,SAAChkK,GAAD,OAAsBA,EAAMk+K,UAAUJ,mBAGxC,MAA4C5vC,EAAAA,EAAAA,UAAS,IAArD,GAAOygE,EAAP,KAAoBohK,EAApB,KACA,MAAkD7hO,EAAAA,EAAAA,UAChD,IAAI1zI,OADN,GAAOw1W,EAAP,KAA0BC,EAA1B,KAIA,MAA0D/hO,EAAAA,EAAAA,UAAS,IAAnE,GAAO0gE,EAAP,KAA2BshK,EAA3B,KACA,MAAgEhiO,EAAAA,EAAAA,UAC9D,IAAI1zI,OADN,GAAO21W,EAAP,KAAiCC,EAAjC,KAIA,MAA4DliO,EAAAA,EAAAA,UAC1DwgO,GAAa1iB,gBADf,GAAOqkB,EAAP,KAA4BC,EAA5B,KAGMC,GAAkBxiO,EAAAA,EAAAA,UACtB,kBACE3xI,OAAOoF,OAAOktW,IAAct8V,KAAsB,SAACqnK,GACjD,MAAO,CACLt9K,IAAKs9K,EACL3wE,MAAOymQ,GAA2B91L,GAClC9Q,SAAU0nM,IAAwB52L,QAGxC,CAAC42L,IAGH,MAA0CniO,EAAAA,EAAAA,UAAS,IAAnD,GAAO2gE,EAAP,KAAmB2hK,EAAnB,KACA,MAAgDtiO,EAAAA,EAAAA,UAAS,IAAI1zI,OAA7D,GAAOi2W,EAAP,KAAyBC,EAAzB,KACA,MAA4DxiO,EAAAA,EAAAA,WAAS,GAArE,GAAOyiO,EAAP,KAA4BC,EAA5B,KACA,MAAwD1iO,EAAAA,EAAAA,WAAS,GAAjE,GAAO2iO,EAAP,KAA0BC,EAA1B,KACOriK,EAAP,GAAkCmD,KAAlC,MAgCA,MAAwD1jE,EAAAA,EAAAA,WAAS,GAAjE,GAAO4gE,EAAP,KAA0BiiK,EAA1B,KACA,MAA4D7iO,EAAAA,EAAAA,WAAS,GAArE,GAAO6gE,EAAP,KAA4BiiK,EAA5B,KACA,MACE9iO,EAAAA,EAAAA,UAA6B,IAAI1zI,OADnC,GAAOy2W,EAAP,KAAiCC,EAAjC,KAGMC,EACJnB,EAAkB31W,OAAS,GAC3Bo2W,EAAiBp2W,OAAS,GAC1Bw2W,EAEF,EAGIz0L,GAA6B,CAC/BvF,OAAAA,EACA4C,YAAa42L,IAJPe,EADR,EACE/hW,KACWgiW,EAFb,EAEErsV,UAMIssV,GAAoBvjO,EAAAA,EAAAA,UAAQ,WAChC,OAAKghE,GAIDqiK,IAA4BC,EACvBD,EAAwBE,kBAAkBl/V,KAC/C,SAAC2rH,GACC,OAAO,oBACFA,GADL,IAEE3wB,QAAS6jQ,EAAyB52V,MAChC,SAACk3V,GAAD,OACEA,EAAwBztW,OAASi6H,EAAGj6H,aAVvC,KAkBR,CACDstW,EACAC,EACAJ,EACAliK,IAGKL,EAAP,GAAwBmD,KAAxB,MACA,MAAsC3jE,EAAAA,EAAAA,WAAS,GAA/C,GAAOsjO,EAAP,KAAiBC,GAAjB,KA+CA,OACE,UAAC,GAAD,WACE,UAAC,GAAD,CAA2Bj1Q,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,+EAAd,0BAGA,eAAGA,UAAU,UAAb,gHAIA,kBAAKA,UAAU,gBAAf,WACE,mBAAOy0P,QAAQ,eAAez0P,UAAU,qBAAxC,2BAGA,UAACsyQ,GAAD,CACElwC,WAAW,eACXz3O,OAAQ6oR,EACRjB,kBAzNe,GA0NfzzW,MAAOqzM,EACP3+F,SAAU,SAAC10G,GACT,IAAM6rF,EA3NM,SAACwnH,GAC3B,OAAIA,EAAYt0M,OAHW,EAIlB,CAAC,iCAAD,OAJkB,EAIlB,eAGLs0M,EAAYt0M,OANW,GAOlB,CAAC,kCAAD,OAPkB,GAOlB,gBAKF,GAgNsBq3W,CAAoBp2W,GACnC20W,EAAqB9oR,GACrB4oR,EAAqBz0W,GAErBw1W,GAA2B,UAKjC,kBAAKt0Q,UAAU,gBAAf,WACE,mBAAOy0P,QAAQ,sBAAsBz0P,UAAU,qBAA/C,kCAGA,UAAC6yQ,GAAD,CACEzwC,WAAW,sBACXz3O,OAAQgpR,EACRpB,kBA7NsB,IA8NtBzzW,MAAOszM,EACP5+F,SAAU,SAAC10G,GACT,IAAM6rF,EA/Na,SAACynH,GAClC,OAAIA,EAAmBv0M,OAFW,IAGzB,CAAC,4CAAD,OAHyB,IAGzB,gBAKF,GAwNsBs3W,CAA2Br2W,GAC1C80W,EAA4BjpR,GAC5B+oR,EAA4B50W,UAKlC,kBAAKkhG,UAAU,gBAAf,WACE,mBAAOA,UAAU,qBAAjB,2BACA,UAAC,GAAD,CACE4mI,cAAemtI,EACf9sI,mBAAoB,SAAChqD,GACnB62L,EAA6B72L,GAC7By3L,EAAkC,KAEpC7tI,cAAe,OANjB,UAQE,UAAC,GAAD,CACEc,cAAeorI,GAA2Bc,GAC1CjsI,2BAA2B,yDAKhCtmD,GACC,kBAAKthF,UAAU,OAAf,WACE,mBAAOy0P,QAAQ,wBAAwBz0P,UAAU,gBAAjD,qCAGA,UAAC,GAAD,CACEoiO,WAAW,wBACX91N,MAAM,GACNv4E,KAAM++U,GAAWM,MACjBlsP,QAASqrF,EACT/+F,SAAU,kBACRghQ,GAA8BjiK,UAKpC,0BAGDjxB,GAAmBixB,GAClB,kBAAKvyG,UAAU,OAAf,WACE,eAAGA,UAAU,eAAb,iEADF,OAIG80Q,QAJH,IAIGA,OAJH,EAIGA,EAAmBl/V,KAAI,SAAC2rH,GAAD,OACtB,kBAA0BvhC,UAAU,yBAApC,WACE,UAAC,GAAD,CACEoiO,WAAU,qBAAgB7gM,EAAGt6H,aAC7BqlG,MAAM,GACNv4E,KAAM++U,GAAWM,MACjBlsP,QAASqa,EAAG3wB,QACZ4C,SAAU,WACR,IAAM4hQ,EAAuB7zO,EAAG3wB,QAC5B6jQ,EAAyB1zW,QACvB,SAACs0W,GAAD,OACEA,EAAWpuW,cAAgBs6H,EAAGt6H,eAHT,aAKrBwtW,GALqB,CAKKlzO,IAClCmzO,EAAkCU,OAGtC,mBACE3gB,QAAO,qBAAgBlzN,EAAGt6H,aAC1B+4F,UAAU,UAFZ,SAIGuhC,EAAGt6H,gBApBEs6H,EAAGt6H,oBA0BjB,2BAGF,kBAAK+4F,UAAU,gBAAf,WACE,mBAAOy0P,QAAQ,cAAcz0P,UAAU,qBAAvC,0BAGA,kBAAKA,UAAU,OAAf,WACE,iBAAKA,UAAU,OAAf,UACE,UAACsyQ,GAAD,CACElwC,WAAW,cACXz3O,OAAQspR,EACRn1W,MAAOuzM,EACP7+F,SAAU,SAAC10G,GACT,IAAM6rF,EA7SC,SAAC0nH,GAC1B,OAAIA,EAAWx0M,OAFW,EAGjB,CAAC,gCAAD,OAHiB,EAGjB,eAGF,GAwS0By3W,CAAmBx2W,GAClCo1W,EAAoBvpR,GACpBqpR,EAAoBl1W,SAK1B,iBAAKkhG,UAAU,SAAf,UACE,UAAC,GAAD,CACEujP,eAAe,WACfljM,WAAYgyD,EAAWx0M,OAAS,EAChC2qB,UAAW2rV,EACXrqW,MAAOo4U,GAAYY,UACnB93O,QAzQkB,WAChCopQ,GAA6B,GAExBniK,EAAwB,CAC3B53B,OAAAA,EACAnqK,IAAKmiM,IAEJppL,SACAvjB,MAAK,WACJ4uW,GAA2B,GAC3BF,GAA6B,GAC7BF,EAAoB,IAEpBt/V,EACE2xC,GAAU,CACR2pJ,MAAO,eACPz6L,YACE,sGAIP4J,OAAM,WACLi1V,GAA2B,GAC3BF,GAA6B,GAG7BF,EADe,CAAC,yBAiPN9xC,WAAW,eANb,UAQE,0DAMPwyB,GACC,kBAAK50P,UAAU,OAAf,WACE,mBAAOy0P,QAAQ,sBAAsBz0P,UAAU,gBAA/C,4CAGA,UAAC,GAAD,CACEoiO,WAAW,sBACX91N,MAAM,GACNv4E,KAAM++U,GAAWM,MACjBlsP,QAASorF,EACT9+F,SAAU,kBAAM+gQ,GAA4BjiK,UAIhD,2BAGF,kBAAKtyG,UAAU,yBAAf,WACE,UAAC,GAAD,CACEqgD,YAAas0N,EACb7qW,MAAOo4U,GAAYW,QACnB73O,QAzNY,WACtBiqQ,IAAkB,GAEb/iK,EAAc,CACjB73B,OAAAA,EACA83B,YAAAA,EACAC,mBAAAA,EACAn1B,YAAa42L,EACbxhK,WAAAA,EACAC,kBAAAA,EACAC,oBAAAA,EACAC,WAAYsiK,IAEX7rV,SACAvjB,MAAK,WACJuvW,IAAkB,GAElBrgW,EACE2xC,GAAU,CACR2pJ,MAAO,kBACPz6L,YACE,yFAGNw9M,EAAS,yBAEV5zM,OAAM,YAAkD,IAA/CxM,EAA8C,EAA9CA,KACRoiW,IAAkB,GAElB,IAAMjxP,EAAepkH,OAAOgB,KAAKiS,EAAK4oM,QAAQ,GACxC85J,EAAmB1iW,EAAK4oM,OAAOz3F,GAAc,GAEnD,OAAQA,GACN,IAAK,cACHyvP,EAAqB,CAAC8B,IACtB,MACF,IAAK,aACHrB,EAAoB,CAACqB,SAqLnB/sV,UAAWwsV,EACX5yC,WAAW,iBALb,UAOE,iDAGF,iBAAKpiO,UAAU,OAAf,UACE,UAACqwQ,GAAD,CACEvmW,MAAOo4U,GAAYa,OACnB3gB,WAAW,eACXv2T,GAAG,qBACH03U,eAAe,oBAJjB,UAME,qDC/ZHiyB,GAAwB,SACnCpiK,EACA/4B,GAFmC,0CAGH+4B,EAHG,YAGqB/4B,IAE7Cq2L,GAAuB,SAClCt9J,EACA/4B,GAFkC,oCAGR+4B,EAHQ,YAGgB/4B,ICsFpD,GAnD2C,SAAC,GAIJ,IAHtCu2L,EAGqC,EAHrCA,cACAx9J,EAEqC,EAFrCA,qBACAqiK,EACqC,EADrCA,kCAEQp7L,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACFvwK,EAhCmB,SAAC0E,GAC1B,OAAQA,GACN,KAAKg9L,GAAsBkqK,UACzB,OAAOzL,GAAUjnB,QACnB,KAAKx3I,GAAsB6H,WAC3B,KAAK7H,GAAsBmqK,cACzB,OAAO1L,GAAU52J,WACnB,KAAK7H,GAAsBoqK,OACzB,OAAO3L,GAAU/mB,MACnB,KAAK13I,GAAsB8kK,SACzB,OAAOrG,GAAUqG,SACnB,KAAK9kK,GAAsB+kK,UACzB,OAAOtG,GAAUsG,UACnB,QACE,MAAM,IAAI5sW,MAAJ,kEACuD6K,KAiBnDsiW,CAAmBF,GAEjC,KAAoCr7J,GAA0B,CAC5Dv+L,cAAew+V,GAAsBpiK,EAAsB/4B,KAD7D,GAAUw7L,GAAV,WAIA,KAA4CrgK,GAAiC,CAC3Ex+L,cAAe05V,GAAqBt9J,EAAsB/4B,KAD5D,GAAWy7L,GAAX,WAgCA,OACE,iBAAK91Q,UAAU,6CAAf,SA5BI61Q,EAAuBrnW,SAAW/B,GAAAA,YAAAA,SAElC,kBAAKuzF,UAAU,oBAAf,WACE,UAAC,GAAD,CAASjsE,KAAMmyM,GAAYq5G,SAC3B,kBAAMv/O,UAAU,yBAAhB,gCAGK81Q,EAA8BtnW,SAAW/B,GAAAA,YAAAA,SAEhD,kBAAKuzF,UAAU,oBAAf,WACE,UAAC,GAAD,CAASjsE,KAAMmyM,GAAYq5G,SAC3B,kBAAMv/O,UAAU,yBAAhB,kCAKF,iBAAKA,UAAU,mBAAf,UACE,UAACwwQ,GAAD,CACE1mW,MAAOA,EACP2mW,YAAW,uBAAWgF,QAAX,IAAWA,OAAX,EAAWA,EAAmCM,SAA9C,6BAAoEN,QAApE,IAAoEA,OAApE,EAAoEA,EAAmCO,eAFpH,UAIE,mBAAMh2Q,UAAU,oBAAhB,UAAqC4wQ,EAArC,cCsGZ,GAhKoC,SAAC,GAEI,IADvCp9J,EACsC,EADtCA,gBAEQn5B,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACFzlK,EAAWi0J,IACjB,MAA4Cn3B,EAAAA,EAAAA,WAAS,GAArD,GAAOw1F,EAAP,KAAuBC,EAAvB,KAEO8uI,EAAP,GAA6C1gK,GAA0B,CACrEv+L,cAAew+V,GACbhiK,EAAgBJ,qBAChB/4B,KAHJ,MAOM67L,EAA2B,WAC1BD,EAAmC,CACtC57L,OAAAA,EACA+4B,qBAAsBI,EAAgBJ,uBAErCnqL,SACAvjB,MAAK,kBACJkP,EACE2xC,GAAU,CACR2pJ,MAAO,8BACPz6L,YAAY,gBAAD,OAAkB+9L,EAAgBJ,qBAAlC,6CAKf+iK,EACJ3iK,EAAgBhlM,SAAWg9L,GAAsB6H,WAE5C+iK,EAAP,GAAwC5gK,GAAiC,CACvEx+L,cAAe05V,GACbl9J,EAAgBJ,qBAChB/4B,KAHJ,MAOMg8L,EAA2B,WAC/B,IAAMC,EAA0B,CAC9Bj8L,OAAAA,EACAm5B,iBAAgB,oBACXA,GADU,IAEbhlM,OAAQg9L,GAAsB8kK,YAI7B8F,EAA8BE,GAAyB5wW,MAAK,kBAC/DkP,EACE2xC,GAAU,CACR2pJ,MAAO,6BACPz6L,YAAY,0BAAD,OAA4B+9L,EAAgBJ,qBAA5C,4CAMbmjK,EAA0B,WAC9B,IAAMC,EAAyB,CAC7Bn8L,OAAAA,EACAm5B,iBAAgB,oBACXA,GADU,IAEbhlM,OAAQg9L,GAAsB+kK,aAI7B6F,EAA8BI,GAAwB9wW,MAAK,kBAC9DkP,EACE2xC,GAAU,CACR2pJ,MAAO,4BACPz6L,YAAY,0BAAD,OAA4B+9L,EAAgBJ,qBAA5C,2CAuEnB,OACE,iBAAKpzG,UAAU,2DAAf,UACE,UAAC,GAAD,CACEknI,eAAgBA,EAChBs3G,YAAY,GACZnc,cAAc,gEACdkc,kBAAkB,oFAClBK,oBAAoB,4BACpBC,iBAAiB,+BACjBC,kBAAmB,kBAAM33G,GAAmBD,IAC5Cb,YAAa,kBAAMc,GAAkB,IARvC,SATM3zB,EAAgBhlM,SACjBg9L,GAAsB8kK,SAClB,EAtCT,UAAC,GAAD,CACEluC,WAAW,yBACXC,cAAc,oBACdC,YAAY,2HACZt3N,QAASurQ,EAJX,UAME,iBAAKv2Q,UAAU,UAAf,UACE,2CAiCK,EA5DT,UAAC,GAAD,CACEoiO,WAAW,0BACXC,cAAa,UACX8zC,EAAe7yB,GAAwBpB,GAAYu0B,MAAQ,GADhD,sBAGbp2N,WAAY81N,EACZ7zC,YAAW,UACT6zC,EAAe,GAAK,+BADX,uHAGXnrQ,QAASkrQ,EATX,UAWE,iBAAKl2Q,UAAU,eAAf,UACE,4CAuBJ,UAAC,GAAD,CACEoiO,WAAW,0BACXC,cAAa,UACX8zC,EAAe7yB,GAAwBpB,GAAYu0B,MAAQ,GADhD,sBAGbp2N,WAAY81N,EACZ7zC,YAAW,UACT6zC,EACI,GACA,0DAHK,oJAKXnrQ,QAASqrQ,EAXX,UAaE,iBAAKr2Q,UAAU,UAAf,UACE,iDChJJynQ,GAAerpC,KCuCrB,GA9BqE,SAAC,GAE/D,IADLlrH,EACI,EADJA,iBAEMiqH,EDX2C,CACjDsqC,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIsmH,uBAAsB,CACvDr8L,GAAI,uBACJuxE,OAAQ,iBAAM,0BACd04E,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,oBAAhB,SAAqCh6F,EAAK8gH,gBAE5D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI4pR,oBAAmB,CACpD3/V,GAAI,oBACJuxE,OAAQ,iBAAM,mBACd04E,KAAM,SAACh7J,GACL,IACM2wW,EADoB3wW,EAAK8gH,WACS,MAAQ,KAChD,OAAO,kBAAM9mB,UAAU,UAAhB,SAA2B22Q,OAGtClP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIt+E,SAAQ,CACzCuI,GAAI,wBACJuxE,OAAQ,iBAAM,UACd04E,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,CACE4qW,cAAe5qW,EAAK8gH,WACpBssF,qBAAsBptM,EAAK8mF,IAAIs5E,SAASgtC,qBACxCqiK,kCACEzvW,EAAK8mF,IAAIs5E,SAASqvM,uCAK1BhO,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI8pR,WAAU,CAC3C7/V,GAAI,eACJuxE,OAAQ,iBAAM,iBACd04E,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,UAAhB,SAA2Bh6F,EAAK8gH,gBAElD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI+pR,gBAAe,CAChD9/V,GAAI,gBACJuxE,OAAQ,iBAAM,kBACd04E,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,UAAhB,SAA2Bh6F,EAAK8gH,gBAElD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIgqR,gBAAe,CAChD//V,GAAI,gBACJuxE,OAAQ,iBAAM,kBACd04E,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,UAAhB,SAA2Bh6F,EAAK8gH,gBAElD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIiqR,6BAA4B,CAC7DhgW,GAAI,6BACJuxE,OAAQ,iBAAM,gCACd04E,KAAM,SAACh7J,GACL,OAAIhI,MAAME,QAAQ8H,EAAK8gH,aAEnB,iBAAK9mB,UAAU,YAAf,SACGh6F,EAAK8gH,WAAWlxG,KAAI,SAACg3G,EAAOp8E,GAAR,OACnB,iBAAKwvD,UAAU,UAAf,UACE,UAACu5P,GAAD,CACEn3B,WAAYx1M,EAAMtlH,KAClBxI,MAAO8tH,EAAM9tH,SAHa0xC,QAW/B,QAGXi3T,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIsmH,uBAAsB,CACvDr8L,GAAI,UACJuxE,OAAQ,iBAAM,WACd04E,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,CAA6BwtM,gBAAiBxtM,EAAK8mF,IAAIs5E,YAEzDtf,QAAS,GACT10I,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,aC9DNk2B,EAAwBl1C,GAAc,CAC1CjvT,KAAMqgM,EACN3qH,QAAS40O,EACThV,gBAAiBA,KACjB7C,kBAAmBA,KACnB+F,oBAAqBA,KACrBkG,sBAAuBA,KACvBvQ,sBAAsB,EACtBmQ,YAAY,EACZ5V,cAAc,EACdoY,cAAc,IAGhB,OACE,iCACE,UAACqtB,GAAD,CAEE/yI,YAAa,yBACblL,MAAOi0K,EACP71B,YAAY,GACZC,cAAc,IALhB,6BC1BO61B,GAAmC,WAC9C,IAAQ58L,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OAER,GADiBxR,IAKbkX,GAA4B,CAC9B1F,OAAAA,KAJM68L,EADR,EACErkW,KACYskW,EAFd,EAEErnM,WACA5mJ,EAHF,EAGEA,QAIIgqL,GAAmB3hE,EAAAA,EAAAA,UAAQ,WAC/B,OAAK4lO,GAA8BD,EAC1BA,EAAqBhkK,iBAEvB,KACN,CAACgkK,EAAsBC,IAM1B,OACE,UAAC,GAAD,WACE,UAAC,GAAD,CAA2Bn3Q,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,iBAAKA,UAAU,+EAAf,UACE,mBAAMA,UAAU,oBAAhB,WACE,gBAAIA,UAAU,0BAAd,iCACA,oBAAQgL,QAXC,WACd9hF,KAUK,UACE,eAAG82E,UAAU,uJAKlBm3Q,GACC,iBAAKn3Q,UAAU,sBAAf,UACE,UAAC,GAAD,OAGF,gCACGkzG,EAAiBr1M,OAAS,GACzB,UAAC,GAAD,CAAuBq1M,iBAAkBA,KAEzC,6BACE,eAAGlzG,UAAU,iFACb,gBAAIA,UAAU,sBAAd,oCACA,eAAGA,UAAU,2BAAb,+EC3CZo3Q,GAAqBh5C,KAyI3B,GAvIgC,iBAAM,CACpCg5C,GAAmB/4C,UAAS,SAACvxO,GAAD,OAASA,EAAIyvQ,kBAAiB,CACxDxlV,GAAI,kBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjDswP,GAAmB/4C,UAAS,SAACvxO,GAAD,OAASA,EAAI0vQ,0BAAyB,CAChEzlV,GAAI,gBACJuxE,OAAQ,iBAAM,UACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJy2V,GAAe,CACbrC,UAAWp0V,EAAK8gH,WAChBuzO,WAAY,qBAGlB+c,GAAmB/4C,UACjB,SAACvxO,GACC,MAAO,CACLxE,OAAQwE,EAAIquQ,WAAWpW,gBACvB4U,UACqC,aAAnC7sQ,EAAIquQ,WAAWpW,gBACXj4P,EAAIquQ,WAAW6J,iBACfj/V,EACN6iT,oBAAoB,EACpBlgO,OAAQoE,EAAIuqR,wDAGhB,CACEtgW,GAAI,aACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,UAACyzV,GAAD,CACEG,uBAAwB,SAAClxQ,GAAD,OACtB4wQ,GAA6B5wQ,IAE/BgxQ,YAAa1zV,EAAK8gH,WAClBqpF,KAAK,MAGTp8K,KAAM,MAGVqjV,GAAmB/4C,UACjB,SAACvxO,GACC,MAAO,CACLxE,OAAQwE,EAAIyuQ,UAAUxW,gBACtB4U,UACoC,aAAlC7sQ,EAAIyuQ,UAAUxW,gBACVj4P,EAAIyuQ,UAAUyJ,iBACdj/V,EACN6iT,oBAAoB,EACpBlgO,OAAQoE,EAAIwqR,wDAGhB,CACEvgW,GAAI,YACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,UAACyzV,GAAD,CACEG,uBAAwB,SAAClxQ,GAAD,OACtB4wQ,GAA6B5wQ,IAE/BgxQ,YAAa1zV,EAAK8gH,WAClBqpF,KAAK,MAGTp8K,KAAM,MAGVqjV,GAAmB/4C,UAAS,SAACvxO,GAAD,OAASA,EAAI6vQ,mBAAkB,CACzD5lV,GAAI,mBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,YACrB/yF,KAAM,MAERqjV,GAAmB/4C,UAAS,SAACvxO,GAAD,OAASA,EAAI8vQ,WAAU,CACjD7lV,GAAI,WACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,YACrB/yF,KAAM,MAERqjV,GAAmB/4C,UACjB,SAACvxO,GAAD,OAASA,EAAI+vQ,wCACb,CACE9lV,GAAI,wCACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU8zV,GAAa9zV,EAAK8gH,aAClC/yF,KAAM,MAGVqjV,GAAmB/4C,UAAS,SAACvxO,GAAD,OAASA,EAAI8tF,YAAW,CAClD7jK,GAAI,UACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,OACE,UAAC,GAAD,CACEkqM,MAAM,OACNrkM,GAAE,oBAAe7F,EAAK8gH,YACtB9mB,UAAU,yPAHZ,mBASJ5tF,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,UAGVhgC,gBAAgB,EAChB/sR,KAAM,QCpIJ+nU,GACJ19B,KAuiBF,GAriB8B,SAC5BvrT,EACA0kW,GAEA,IAAMxb,EAA2B,CAC/BD,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkvQ,sBAAb,aAAS,EAAoBnlT,SAAQ,CACjE9/B,GAAI,wBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkvQ,sBAAb,aAAS,EAAoBz3V,OAAM,CAC/DwS,GAAI,sBACJuxE,OAAQ,kBAAM,qCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkvQ,sBAAb,aAAS,EAAoB36V,SAAQ,CACjE0V,GAAI,wBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkvQ,sBAAb,aAAS,EAAoB15T,SAAQ,CACjEvrB,GAAI,wBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,eAIrBj0G,EAAKgL,MAAK,SAACtP,GAAD,uBAAcA,EAASytV,sBAAvB,aAAc,EAAyBC,qBACnDF,EAAyBv7V,KAAzB,MAAAu7V,EAAwB,GACnBlpV,EAAK+E,QACN,SAACC,EAAKqkV,EAAc1rT,GAAW,IAAD,EACtByrT,EAAgB,UACpBC,EAAaF,sBADO,aACpB,EAA6BC,iBA6B/B,OA5BAr8V,OAAOoP,QAAP,OAAeitV,QAAf,IAAeA,EAAAA,EAAoB,IAAI36V,SAAQ,YAAgB,IACrD3B,EADoD,WACpDA,IAER,GAAIkY,EAAIgG,MAAK,SAACwiS,GAAD,uBAAeA,EAAUtpS,UAAzB,aAAe,EAAc8C,SAASla,MACjD,OAAOkY,EAGT,IAAMskV,EAAYL,GAAqBz9B,UACrC,SAACvxO,GAAS,IAAD,MACEsvQ,EAAT,aACEx8V,OAAOoP,QAAP,oBACE89E,EAAIkvQ,sBADN,aACE,EAAoBC,wBADtB,QAC0C,IACxC9uM,MAAK,SAACjrE,GAAD,OAAWA,EAAM,GAAGviF,MAAQA,YAHrC,QAG6C,GAH7C,MAIA,cAAOy8V,QAAP,IAAOA,OAAP,EAAOA,EAAUt9V,QAEnB,CACEiY,GAAIpX,EACJ2oF,OAAQ,kBAAM,2BAAO3oF,KACrBipT,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAKxCjvG,EAAIrX,KAAK27V,MAEJtkV,IAET,MAKN,IAAM2/V,EAAiB,CACrB1b,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyvQ,kBAAiB,CAC1DxlV,GAAI,kBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIg2B,UAAS,CAClD/rG,GAAI,UACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJA,EAAK8gH,WAAWlxG,KAAI,SAAC9W,EAAO0xC,GAAR,OAClB,kBAAiBwvD,UAAU,yBAA3B,WACE,UAAC,GAAD,CACE+kP,gBAAiBjmV,EACjBwjU,YAAY,oBACZ6iB,aAAa,kBAEf,2BAAOrmV,MANC0xC,SAUhBsrT,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI0vQ,0BAAyB,CAClEzlV,GAAI,gBACJuxE,OAAQ,iBAAM,UACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJy2V,GAAe,CACbrC,UAAWp0V,EAAK8gH,WAChBuzO,WAAY,qBAGlByB,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI6vQ,mBAAkB,CAC3D5lV,GAAI,mBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpB70R,KAAM,IACNgmS,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI8vQ,WAAU,CACnD7lV,GAAI,WACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UACnB,SAACvxO,GAAD,OAASA,EAAI+vQ,wCACb,CACE9lV,GAAI,wCACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpB70R,KAAM,IACNgmS,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU8zV,GAAa9zV,EAAK8gH,gBAiBxC,OAZIywP,GACFC,EAAet2T,QACb46S,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CAC7CA,GAAI,KACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpB70R,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,iBAKjD,CACLg1O,GAAqBx9B,MAAM,CACzBvnT,GAAI,aACJwxE,QAASivR,IAEX1b,GAAqBx9B,MAAM,CACzBh2O,OAAQ,cACRsgO,oBAAoB,EACpBrgO,QAAS,CACPuzQ,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAW95V,SAAQ,CAC5D0V,GAAI,oBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAW78B,QAAO,CAC3DvnT,GAAI,mBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU41V,GAAoB51V,EAAK8gH,eAE3Cg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAW2B,WAAU,CAC9D/lV,GAAI,sBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAW4B,cAAa,CACjEhmV,GAAI,yBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWC,eAAc,CAClErkV,GAAI,0BACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAW6B,eAAc,CAClEjmV,GAAI,0BACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWK,eAAc,CAClEzkV,GAAI,0BACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAEpDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAW8B,cAAa,CACjElmV,GAAI,yBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAW+B,aAAY,CAChEnmV,GAAI,wBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWgC,YAAW,CAC/DpmV,GAAI,uBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWiC,YAAW,CAC/DrmV,GAAI,uBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWkC,UAAS,CAC7DtmV,GAAI,qBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWmC,aAAY,CAChEvmV,GAAI,wBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWoC,SAAQ,CAC5DxmV,GAAI,oBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWqC,YAAW,CAC/DzmV,GAAI,uBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWsC,WAAU,CAC9D1mV,GAAI,sBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWuC,aAAY,CAChE3mV,GAAI,wBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWwC,YAAW,CAC/D5mV,GAAI,uBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIquQ,WAAWyC,QAAO,CAC3D7mV,GAAI,mBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,qBAM5Cg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,aACRsgO,oBAAoB,EACpBrgO,QAAS,CACPuzQ,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUl6V,SAAQ,CAC3D0V,GAAI,mBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUj9B,QAAO,CAC1DvnT,GAAI,kBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU41V,GAAoB51V,EAAK8gH,eAE3Cg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUuB,WAAU,CAC7D/lV,GAAI,qBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUwB,cAAa,CAChEhmV,GAAI,wBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUH,eAAc,CACjErkV,GAAI,yBACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUyB,eAAc,CACjEjmV,GAAI,yBACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUC,eAAc,CACjEzkV,GAAI,yBACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAEpDg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAU0B,cAAa,CAChElmV,GAAI,wBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAU2B,aAAY,CAC/DnmV,GAAI,uBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAU4B,YAAW,CAC9DpmV,GAAI,sBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAU6B,YAAW,CAC9DrmV,GAAI,sBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAU8B,UAAS,CAC5DtmV,GAAI,oBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAU+B,aAAY,CAC/DvmV,GAAI,uBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUgC,SAAQ,CAC3DxmV,GAAI,mBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUiC,YAAW,CAC9DzmV,GAAI,sBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUkC,WAAU,CAC7D1mV,GAAI,qBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUmC,aAAY,CAC/D3mV,GAAI,uBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUoC,YAAW,CAC9D5mV,GAAI,sBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/Bg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAIyuQ,UAAUqC,QAAO,CAC1D7mV,GAAI,kBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,qBAM5Cg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,sBACRsgO,oBAAoB,EACpBrgO,QAAS,CACPuzQ,GAAqBz9B,UACnB,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuBj2S,WAChC,CACE7wC,GAAI,6BACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAGzBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuBC,UAAS,CACrE/mV,GAAI,4BACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UACnB,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuBE,kBAChC,CACEhnV,GAAI,oCACJuxE,OAAQ,kBAAM,mCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAGzBg1O,GAAqBz9B,UACnB,SAACvxO,GAAD,uBAASA,EAAI+wQ,yBAAb,aAAS,EAAuB4Z,yBAChC,CACE1gW,GAAI,2CACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,iBAK7Bg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,WACRsgO,oBAAoB,EACpBrgO,QAAS,CACPuzQ,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkxQ,gBAAb,aAAS,EAAc1hO,QAAO,CAC1DvlH,GAAI,iBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvBg1O,GAAqBz9B,UAAS,SAACvxO,GAAD,uBAASA,EAAIkxQ,gBAAb,aAAS,EAAc12V,OAAM,CACzDyP,GAAI,gBACJuxE,OAAQ,kBAAM,qCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,iBAI3Bg1O,GAAqBx9B,MAAM,CACzBh2O,OAAQ,kBACRsgO,oBAAoB,EACpBrgO,QAASwzQ,IAEXD,GAAqBz9B,UAAS,SAACvxO,GAAD,OAASA,EAAI8tF,YAAW,CACpD7jK,GAAI,UACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,OACE,UAAC,GAAD,CACEkqM,MAAM,OACNrkM,GAAE,oBAAe7F,EAAK8gH,YACtB9mB,UAAU,yPAHZ,mBASJ5tF,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,UAGVhgC,gBAAgB,EAChB/sR,KAAM,QC1dZ,GArEK,SAAC,GAMC,IALLk6K,EAKI,EALJA,YACA+nJ,EAII,EAJJA,gBACA0hB,EAGI,EAHJA,YACAC,EAEI,EAFJA,iBACAC,EACI,EADJA,gBAEMhjW,EAAWi0J,IAETmkC,EAAuBxlC,GAAY,SAAChkK,GAAD,OACzCgqM,GAAmBhqM,EAAOyqM,MADpBjB,mBAIFmpJ,EAAiB,SAAC16K,GACtBk8L,EAAiBl8L,IAGnB,OACE,iCACE,kBAAKz7E,UAAU,0DAAf,WACE,UAAC,GAAD,CACEsiP,YAAat1I,EACbu1I,gBAAiB,SAAC5uK,GAChB/+J,EACE04L,GAA2B,CACzBv2L,GAAIk3L,EACJb,cAAez5B,MAIrB6uK,gBAAiB,WACf5tU,EACE24L,GAAY,CACVx2L,GAAIk3L,SAKZ,kBAAKjuG,UAAU,oBAAf,WACE,UAAC,GAAD,CACEy1P,SAAU,kBAAYiiB,EAAc,KAAOE,KAC3CpvV,UAAWkvV,KAEb,oBACE13Q,UAAS,8EACPg2P,IAAoBtkJ,GAAS8G,OACzB,qBACA,sBAHG,KAKTxtG,QAAS,kBAAMmrP,EAAezkJ,GAAS8G,SANzC,qBAUA,oBACEx4G,UAAS,8EACPg2P,IAAoBtkJ,GAAS+kJ,SACzB,qBACA,sBAHG,KAKTzrP,QAAS,kBAAMmrP,EAAezkJ,GAAS+kJ,WANzC,+BCsGV,GAjJ4B,WAAO,IAAD,MAC1B7hV,EAAWi0J,IAEE4S,EAAajU,GAAY,SAAChkK,GAAD,OAC1Co1M,GAAiCp1M,EAAO,sBADlC+0M,UAIFs/J,EAAqBrwM,GAAY,SAAChkK,GAAD,OACrC49M,GAAkB59M,EAAO67M,GAAWmB,wBAGhCs3J,GAAkBvmO,EAAAA,EAAAA,UAAQ,WAC9B,MAAM,mBAAN,cAA0BkqC,QAA1B,IAA0BA,EAAAA,EAAY,YACrC,CAACA,IAEE6iL,EAAe7rL,GAAY,2BACjC,EAII2kL,GACFh4K,GACAk/K,EACAwZ,EACA,CACEh9L,eAAgB,MAChBW,SAAAA,GAEF,CACEk8K,kBAAmB,kBACnBC,sBAAuB,QAbnBmgB,EADR,EACEllW,KACWmlW,EAFb,EAEExvV,UACYyvV,EAHd,EAGEnoM,WAeIqtJ,GAAa5rL,EAAAA,EAAAA,UAAQ,WAAO,IAAD,IAC/B,OACEymO,GACAC,GACA,OAACF,QAAD,IAACA,IAAAA,EAAoBllW,KAEd,GAIP4oK,IAAai2B,GAAS8G,OAClB0/J,KACAC,GAAqB,iBACnBJ,QADmB,IACnBA,OADmB,EACnBA,EAAoBllW,YADD,QACS,GADT,iBAEnBglW,QAFmB,IAEnBA,OAFmB,EAEnBA,EAAoBjnQ,eAFD,YAM1B,CACDqnQ,EACAD,EAFC,OAGDD,QAHC,IAGDA,OAHC,EAGDA,EAAoBllW,KACpBglW,EACAp8L,IAGI7vE,EAAc,SAAC6vE,GACnB7mK,EACE8jM,GAAgB,CACdx9F,aAAcugE,EACdwyB,YAAa,sBAKX5zB,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACR,EAA+B7S,EAAY6jC,IAAnC1mK,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,QAEbkpK,EAAoBvmC,GAAY,SAAChkK,GAAD,OACpC4rM,GAAwB5rM,EAAO62K,MAG3B+9L,EAA4C,CAChD/9L,OAAAA,EACAS,eAAgB,MAChBW,SAAAA,EACA92I,UAAAA,EACAE,QAAAA,EACA8uI,WAAU,iBAAEo6B,QAAF,IAAEA,OAAF,EAAEA,EAAmBp6B,kBAArB,QAAmC,IAG/C,KACEqL,KADF,GAAOq5L,EAAP,KAAmCX,EAAnC,KAAwBlvV,UAGlBovV,EAAkB,WACjBS,EAAcD,IAGrB,OACE,iCACE,UAAC,GAAD,UACgB,aAAb38L,GACC,WAAC,EAAA7iI,SAAD,YACE,UAAC,GAAD,CACEq1J,YAAa6pK,EACb9hB,gBAAiBv6K,EACjBi8L,YAAaA,EACbC,iBAAkB/rQ,EAClBgsQ,gBAAiBA,KAEnB,UAAC,GAAD,CAA2B53Q,UAAU,4GAArC,UACE,UAAC82P,GAAD,CACEvuQ,QAAS40O,EACTtqT,KAAI,iBAAEklW,QAAF,IAAEA,OAAF,EAAEA,EAAoBllW,YAAtB,QAA8B,GAClC2V,UAAWwvV,EACXloM,WAAYmoM,EACZhqK,YAAa6pK,EACbt7C,SAAU,SAAC1vO,GAAD,OAASA,EAAI/1E,IACvBigV,WAAY,kBAAM,YAhBV,6BAqBd,WAAC,EAAAp+S,SAAD,YACE,UAAC,GAAD,CACEq1J,YAAa6pK,EACb9hB,gBAAe,OAAEv6K,QAAF,IAAEA,EAAAA,EAAYi2B,GAAS8G,OACtCk/J,YAAaA,EACbC,iBAAkB/rQ,EAClBgsQ,gBAAiBA,KAEnB,UAAC,GAAD,CAA2B53Q,UAAU,4GAArC,UACE,UAAC82P,GAAD,CACEvuQ,QAAS40O,EACTtqT,KAAI,iBAAEklW,QAAF,IAAEA,OAAF,EAAEA,EAAoBllW,YAAtB,QAA8B,GAClC2V,UAAWwvV,EACXloM,WAAYmoM,EACZhqK,YAAa6pK,EACbt7C,SAAU,SAAC1vO,EAAK2xQ,EAAe1/S,GAC7B,OAAO+tC,EAAI/1E,IAEbigV,WAAY,kBAAM,YAlBV,gCX3IxB,SAAYic,GAAAA,EAAAA,UAAAA,aAAZ,CAAYA,KAAAA,GAAAA,KAIZ,IAAMqF,GAAe,SAACtrS,GACpB,IAAMiJ,EAAWD,GAAS6kH,WAAW,CAAE7tH,QAAAA,IAEvC,OAAuB,IAAnBiJ,EAASttC,MACJstC,EAASomH,SAAS,SAGpBpmH,EAASomH,SAAS,aA4F3B,GAjFsB,SAAC,GAMD,IALpB+lI,EAKmB,EALnBA,WACAm2C,EAImB,EAJnBA,YACAC,EAGmB,EAHnBA,gBACAC,EAEmB,EAFnBA,eACAC,EACmB,EADnBA,aAEMC,GAAWlnO,EAAAA,EAAAA,QAAgC,MAEjD,MAAkCC,EAAAA,EAAAA,WAAkB,GAApD,GAAOknO,EAAP,KAAkBC,EAAlB,KACA,MAAgCnnO,EAAAA,EAAAA,UAAiB,GAAjD,GAAOqvB,EAAP,KAAiB+3M,EAAjB,KACA,MAA0CpnO,EAAAA,EAAAA,UAAiB,GAA3D,GAAOqnO,EAAP,KAAsBC,EAAtB,KAoBMC,GAA6B1nO,EAAAA,EAAAA,UACjC,kBACoB,IAAlBwnO,GAAoC,IAAbh4M,EACnB,EACCA,EAAWg4M,EAAiB,MACnC,CAACA,EAAeh4M,IAGlB,OACE,mCACE,kBAAK/gE,UAAU,yEAAf,WACE,UAAC,GAAD,CACEgL,QApBO,WACRutQ,EAXiB,WACN,IAAD,EAGR,EAHHK,GACF,UAAAD,EAAStuW,eAAT,SAAkB4tB,QAClB4gV,GAAa,KAEb,UAAKF,EAAStuW,eAAd,OAAK,EAAkB6uW,OACvBL,GAAa,IAQbM,GAFAT,KAmBIt2C,WAAU,eAAUA,GACpBt4T,MAAOo4U,GAAYa,OACnBv6T,UAAWiwV,EACXl1B,eAAe,MALjB,UAOE,eACEvjP,UAAS,UACP44Q,EAAY,yBAA2B,wBADhC,cAKb,kBAAM54Q,UAAU,eAAhB,SAAgCs4Q,GAAav3M,MAC7C,iBAAK/gE,UAAU,8BAAf,UACE,UAAC,GAAD,CAAY6zD,WAAYolN,OAE1B,kBAAMj5Q,UAAU,eAAhB,SAAgCs4Q,GAAaS,QAE9CR,GACC,mBACEv4Q,UAAU,SACVo5Q,UAAQ,EACRC,UAAQ,EACR3tQ,IAAKitQ,EACLW,iBAAkB,SAACv6W,GAAD,OAAOi6W,EAAiBj6W,EAAEw2H,cAAct/C,WAC1DsjS,UAAW,kBAAMV,GAAa,IAC9BW,QAAS,kBAAMX,GAAa,IAC5BY,aAAc,SAAC16W,GAAD,OAAO+5W,EAAY/5W,EAAEw2H,cAAcmkP,cARnD,UAUE,oBAAQ1gO,IAAKu/N,EAAah0W,KAAMi0W,OAGlC,8BY/DR,GA5BsB,SAAC,GAA6C,IAA3C58L,EAA0C,EAA1CA,QACfvB,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OAER,MAA8D3oC,EAAAA,EAAAA,WAAS,GAAvE,GAAOioO,EAAP,KAAgCC,EAAhC,KAEA,EAA4Bp6L,GAC1B,CACEnF,OAAAA,EACAuB,QAAAA,GAEF,CAAEnL,MAAOkpM,IALH9mW,EAAR,EAAQA,KAAM2V,EAAd,EAAcA,UAQd,OACE,iCACE,2BACE,UAAC,GAAD,CACE45S,WAAYxmJ,EACZ28L,YAAW,OAAE1lW,QAAF,IAAEA,OAAF,EAAEA,EAAM3C,IACnBsoW,gBAAiBvF,GAAiB4G,UAClCpB,eAAgBjwV,EAChBkwV,aAAc,kBAAMkB,GAA2B,WClBzD,SAASE,GAAaC,GACpB,IAAMrxR,EAASqxR,EACZ/jN,SAAQ,SAACgkN,EAAIxpU,GAAL,MAAe,CAACA,EAAOwpU,MAC/Bj5W,QAAO,SAACi5W,GAAD,OAAQA,aAAcp6W,UAEhC,OAAO8oF,EAGT,IAAM++Q,GAAerpC,KAEf67C,GAAiB,SAAC1C,GACtB,IAAMhvR,EAAU,CACdk/Q,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIotR,gBAAe,CAChDnjW,GAAI,gBACJuxE,OAAQ,kBAAM,gDACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIqtR,eAAc,CAC/CpjW,GAAI,eACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,2BAAOA,EAAK8gH,kBAIlB2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,IAAK,CAClC/1E,GAAI,mBACJuxE,OAAQ,kBAAM,mDACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAU,IAAD,IACR88G,EAAU98G,EAAK8gH,WAAWhE,QAChC,GAAIA,EAAQjlH,OAAS,EACnB,MAAO,GAET,IAAMknV,EAAkBjiO,EAAQ,GAI1Bp6B,EAASoxR,GAHG,oBAChB9zW,EAAK8gH,WAAWq0O,kBADA,aAChB,EAA4Bif,iCADZ,QACyC,IAI3D,OACE,UAAC3gB,GAAD,CACEG,uBAAwB,SAAClxQ,GAAD,OACtB4wQ,GAA6B5wQ,IAE/BgxQ,YAAa,CACXpxQ,OAAQy8P,EACRr8P,OAAAA,EACAixQ,eAAW5zV,GAEboqM,KAAK,QAKbs3J,GAAappC,UAAS,SAACvxO,GAAD,OAASA,IAAK,CAClC/1E,GAAI,kBACJuxE,OAAQ,kBAAM,kDACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAU,IAAD,IACR88G,EAAU98G,EAAK8gH,WAAWhE,QAChC,GAAIA,EAAQjlH,OAAS,EACnB,OAAO,0BAGT,IAAMknV,EAAkBjiO,EAAQA,EAAQjlH,OAAS,GAK3C6qF,EAASoxR,GAHG,oBAChB9zW,EAAK8gH,WAAWy0O,iBADA,aAChB,EAA2B8e,gCADX,QACuC,IAIzD,OACE,UAAC5gB,GAAD,CACEG,uBAAwB,SAAClxQ,GAAD,OACtB4wQ,GAA6B5wQ,IAE/BgxQ,YAAa,CACXpxQ,OAAQy8P,EACRr8P,OAAAA,EACAixQ,eAAW5zV,GAEboqM,KAAK,QAKbs3J,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIwtR,aAAY,CAC7CvjW,GAAI,aACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIytR,eAAc,CAC/CxjW,GAAI,eACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI8tQ,YAAW,CAC5C7jV,GAAI,YACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI0tR,eAAc,CAC/CzjW,GAAI,eACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,2BAAOA,EAAK8gH,kBAIlB2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI2tR,cAAa,CAC9C1jW,GAAI,cACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,YAAhB,SACGk6P,GAAqCl0V,EAAK8gH,kBAM7CmhP,EAAW,CACfR,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CACrCA,GAAI,KACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,2BAAOA,EAAK8gH,iBAIhC,OAAOywP,EAAgB,UAAOtP,EAAa1/Q,GAAWA,GAGlDmyR,GAAgBjT,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI8tF,YAAW,CAClE7jK,GAAI,UACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GACL,OACE,UAACqqW,GAAD,CACEvmW,MAAOo4U,GAAYW,QACnBzgB,WAAU,uBAAkBp8T,EAAK8gH,YACjCj7G,GAAE,oBAAe7F,EAAK8gH,YACtBy8N,eAAe,kBAJjB,UAME,uCAINnxU,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,UAGVhgC,gBAAgB,EAChB/sR,KAAM,MAGF4mV,GAAsBlT,GAAappC,UACvC,SAACvxO,GAAD,OAASA,EAAI8tR,mBACb,CACE7jW,GAAI,gBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OACJA,EAAK8gH,YACH,UAAC,GAAD,CAAe80D,QAAS51K,EAAK8mF,IAAIs5E,SAASrvJ,MAE1C,2BAEJ+pS,gBAAgB,EAChB/sR,KAAM,MAuVV,GAnVmD,SACjD8jV,GAEA,IAAMgD,EAAcZ,GAAepC,GAInC,MAFmB,aAAOgD,GAAP,CAAoBF,GAAqBD,MCjE9D,GArH4B,WAAO,IAAD,IAC1B9lW,EAAWi0J,IAEXiyM,EAAqB,kBACRr/L,EAAajU,GAAY,SAAChkK,GAAD,OAC1Co1M,GAAiCp1M,EAAOs3W,MADlCviK,UAIFs/J,EAAqBrwM,GAAY,SAAChkK,GAAD,OACrC49M,GAAkB59M,EAAO67M,GAAWmB,wBAG9BnmC,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACR,EAA+B7S,EAAY6jC,IAAnC1mK,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,QACbkpK,EAAoBvmC,GAAY,SAAChkK,GAAD,OACpC4rM,GAAwB5rM,EAAO62K,MAG3B0gM,GAAkBxpO,EAAAA,EAAAA,UAAQ,WAC9B,MAAM,GAAN,OAAUupO,EAAV,mBAAgCr/L,QAAhC,IAAgCA,EAAAA,EAAYi2B,GAAS8G,UACpD,CAAC/8B,IAEE6iL,EAAe7rL,GAAY,sCACjC,EAII2kL,GACF73K,GACA++K,EACAyc,EACA,CACEjgM,eAAgB,SAElB,CACE68K,kBAAmB,gBACnBC,sBAAuB,QAZnBmgB,EADR,EACEllW,KACWmlW,EAFb,EAEExvV,UACYyvV,EAHd,EAGEnoM,WAcIqtJ,GAAa5rL,EAAAA,EAAAA,UAAQ,WACzB,IACGymO,IACAC,GADD,OAEAF,QAFA,IAEAA,GAAAA,EAAoBllW,KACpB,CAAC,IAAD,IACMsqT,EACJ1hJ,IAAai2B,GAAS8G,OAClBwiK,GAAmC,iBACjCnD,QADiC,IACjCA,OADiC,EACjCA,EAAoBjnQ,eADa,UD2IY,SACzDinQ,GAEA,IAAMgD,EAAcZ,GAAepC,GAEnC,MAAO,CACLpQ,GAAanpC,MAAM,CACjBvnT,GAAI,aACJwxE,QAASsyR,IAEXpT,GAAanpC,MAAM,CACjBh2O,OAAQ,MACRsgO,oBAAoB,EACpBrgO,QAAS,CACPk/Q,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIg2B,UAAS,CAC1C/rG,GAAI,UACJuxE,OAAQ,kBAAM,wCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJA,EAAK8gH,WAAWlxG,KAAI,SAAC9W,EAAe0xC,GAAhB,OAClB,kBAAiBwvD,UAAU,yBAA3B,WACE,UAAC,GAAD,CACE+kP,gBAAiBjmV,EACjBwjU,YAAY,oBACZ6iB,aAAa,kBAEf,2BAAOrmV,MANC0xC,YAYpBi3T,GAAanpC,MAAM,CACjBh2O,OAAQ,cACRsgO,oBAAoB,EACpBrgO,QAAS,CACPk/Q,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB95V,SAAQ,CACrD0V,GAAI,oBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB78B,QAAO,CACpDvnT,GAAI,mBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU41V,GAAoB51V,EAAK8gH,eAE3C2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB2B,WAAU,CACvD/lV,GAAI,sBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB4B,cAAa,CAC1DhmV,GAAI,yBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBC,eAAc,CAC3DrkV,GAAI,0BACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB6B,eAAc,CAC3DjmV,GAAI,0BACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBK,eAAc,CAC3DzkV,GAAI,0BACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAEpD2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB8B,cAAa,CAC1DlmV,GAAI,yBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgB+B,aAAY,CACzDnmV,GAAI,wBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBgC,YAAW,CACxDpmV,GAAI,uBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBiC,YAAW,CACxDrmV,GAAI,uBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBkC,UAAS,CACtDtmV,GAAI,qBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBmC,aAAY,CACzDvmV,GAAI,wBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,UAAC,GAAD,UAAOA,EAAK8gH,gBAE9B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBoC,SAAQ,CACrDxmV,GAAI,oBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBqC,YAAW,CACxDzmV,GAAI,uBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBsC,WAAU,CACvD1mV,GAAI,sBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBuC,aAAY,CACzD3mV,GAAI,wBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgBwC,YAAW,CACxD5mV,GAAI,uBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIquQ,kBAAb,aAAS,EAAgByC,QAAO,CACpD7mV,GAAI,mBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,qBAM5C2gP,GAAanpC,MAAM,CACjBh2O,OAAQ,aACRsgO,oBAAoB,EACpBrgO,QAAS,CACPk/Q,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAel6V,SAAQ,CACpD0V,GAAI,mBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAej9B,QAAO,CACnDvnT,GAAI,kBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU41V,GAAoB51V,EAAK8gH,eAE3C2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeuB,WAAU,CACtD/lV,GAAI,qBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAewB,cAAa,CACzDhmV,GAAI,wBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeH,eAAc,CAC1DrkV,GAAI,yBACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeyB,eAAc,CAC1DjmV,GAAI,yBACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeC,eAAc,CAC1DzkV,GAAI,yBACJuxE,OAAQ,kBAAM,8CACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OAAU,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,gBAEpD2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe0B,cAAa,CACzDlmV,GAAI,wBACJuxE,OAAQ,kBAAM,6CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe2B,aAAY,CACxDnmV,GAAI,uBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe4B,YAAW,CACvDpmV,GAAI,sBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe6B,YAAW,CACvDrmV,GAAI,sBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe8B,UAAS,CACrDtmV,GAAI,oBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAe+B,aAAY,CACxDvmV,GAAI,uBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAegC,SAAQ,CACpDxmV,GAAI,mBACJuxE,OAAQ,kBAAM,uCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeiC,YAAW,CACvDzmV,GAAI,sBACJuxE,OAAQ,kBAAM,0CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAekC,WAAU,CACtD1mV,GAAI,qBACJuxE,OAAQ,kBAAM,yCACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,cAEvB2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAemC,aAAY,CACxD3mV,GAAI,uBACJuxE,OAAQ,kBAAM,4CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeoC,YAAW,CACvD5mV,GAAI,sBACJuxE,OAAQ,kBAAM,2CACdsgO,oBAAoB,EACpBmR,eAAe,EACf/4J,KAAM,SAACh7J,GAAD,OAAU,WAAC,GAAD,eAAQA,EAAK8gH,iBAE/B2gP,GAAappC,UAAS,SAACvxO,GAAD,uBAASA,EAAIyuQ,iBAAb,aAAS,EAAeqC,QAAO,CACnD7mV,GAAI,kBACJuxE,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpBmR,eAAe,EACfhmS,KAAM,IACNitI,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,WACE,kBAAMg6F,UAAU,YAAhB,SAA6Bh6F,EAAK8gH,qBAM5C6zP,GACAD,IC7cQO,CAA2C,iBACzCpD,QADyC,IACzCA,OADyC,EACzCA,EAAoBjnQ,eADqB,UAIjD,OAAOusN,EAET,MAAO,KACN,CACD86C,EACAD,EAFC,OAGDD,QAHC,IAGDA,OAHC,EAGDA,EAAoBllW,KACpBglW,EACAp8L,IAYI28L,EAAoD,CACxD/9L,OAAAA,EACA11I,UAAAA,EACAE,QAAAA,EACA8uI,WAAU,iBAAEo6B,QAAF,IAAEA,OAAF,EAAEA,EAAmBp6B,kBAArB,QAAmC,IAG/C,KACEsL,KADF,GAAOo5L,EAAP,KAAmCX,EAAnC,KAAwBlvV,UAOxB,OACE,iCACE,UAAC,GAAD,WACE,WAAC,EAAAowB,SAAD,YACE,UAAC,GAAD,CACEo9S,gBAAiBv6K,EACjBwyB,YAAa8sK,EACbrD,YAAaA,EACbC,iBA/BU,SAACl8L,GACnB7mK,EACE8jM,GAAgB,CACdx9F,aAAcugE,EACdwyB,YAAa6sK,MA4BTlD,gBAbc,WACjBS,EAAcD,OAcb,UAAC,GAAD,CAA2Bp4Q,UAAU,4GAArC,UACE,UAAC82P,GAAD,CACEvuQ,QAAS40O,EACTtqT,KAAI,iBAAEklW,QAAF,IAAEA,OAAF,EAAEA,EAAoBllW,YAAtB,QAA8B,GAClC2V,UAAWwvV,EACXloM,WAAYmoM,EACZhqK,YAAa8sK,EACbv+C,SAAU,SAAC1vO,GAAD,OAASA,EAAI/1E,IACvBigV,WAAY,kBAAM,YAhBV,wBCvFtB,GAhC8C,SAAC,GAAc,IAAZx/T,EAAW,EAAXA,KAC/C,MAAgCk6G,EAAAA,EAAAA,WAAS,GAAzC,GAAOwpO,EAAP,KAAiBC,EAAjB,KAcA,OACE,iBAAKn7Q,UAAU,wBAAf,UACE,oBACEgL,QAfkB,WACtBvkF,UAAU20V,UACPC,UAAU7jV,GACV9xB,MAAK,WACJy1W,GAAY,GACZ5nW,YAAW,WACT4nW,GAAY,KACX,QAEJ97V,OAAM,SAACzZ,GAAD,OAAW8J,QAAQ9J,MAAM,8BAA+BA,OAO7Do6F,UAAU,oEACVkwG,MAAM,oBAHR,SAKGgrK,GACC,eAAGl7Q,UAAU,4DAEb,eAAGA,UAAU,0DCpBVs7Q,GAAgB,WACVzyM,IAAjB,IACMwR,EAAS7S,EAAYsZ,IAE3B,OACE,WAAC,GAAD,YACE,UAAC,GAAD,CAA2B9gF,UAAU,qGAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,mDAAd,uCAGA,iBAAKA,UAAU,yBAAf,UACE,gBAAIA,UAAU,+CAEhB,kBAAKA,UAAU,yBAAf,WACE,qMAKA,gBAAGA,UAAU,iBAAb,qFAEc,UAFd,YAIA,kBAAKA,UAAU,sDAAf,WACE,mBAAMA,UAAU,iBAAhB,UACG,oCACA,yCAFH,8BAG0Bq6E,EAH1B,QAIG,mCACA,qBACA,mDACA,qCAEC,wEAED,4DACA,0CACA,YACA,iBAEH,iBAAKr6E,UAAU,UAAf,UACE,UAAC,GAAD,CACExoE,KAAI,qGAAgG6iJ,EAAhG,oVAOhB,UAAC,GAAD,CAA2Br6E,UAAU,0FAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,mDAAd,4BAGA,iBAAKA,UAAU,yBAAf,UACE,gBAAIA,UAAU,+CAEhB,iBAAKA,UAAU,yBAAf,UACE,uEAEE,gBACEyL,KAAK,2DACLzL,UAAU,mBAFZ,UAIG,IAJH,kCC9DDu7Q,GAAgC,WAC1B1yM,IAEjB,OACE,WAAC,GAAD,YACE,UAAC,GAAD,CAA2B7oE,UAAU,qGAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,mDAAd,oCAGA,iBAAKA,UAAU,yBAAf,UACE,gBAAIA,UAAU,+CAEhB,kBAAKA,UAAU,yBAAf,WACE,sGAIA,gBAAGA,UAAU,OAAb,sFAEY,wBAAI,UAFhB,QAEgC,wBAAI,WAFpC,mCAKA,kBAAKA,UAAU,sDAAf,WACE,mBAAMA,UAAU,iBAAhB,UACG,iCACA,6DAEC,2HAED,WACA,gDACA,2BACA,+CACA,KACA,2DAEC,iEAED,KACA,YAEC,qFAED,aAEH,iBAAKA,UAAU,UAAf,UACE,UAAC,GAAD,CACExoE,KAAI,gyBAoBhB,UAAC,GAAD,CAA2BwoE,UAAU,0FAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,mDAAd,2DAGA,iBAAKA,UAAU,yBAAf,UACE,gBAAIA,UAAU,+CAEhB,kBAAKA,UAAU,yBAAf,WACE,yCACe,KACb,gBACEyL,KAAK,oCACLzL,UAAU,mBAFZ,uCAI6B,OAN/B,2DAUA,gBAAGA,UAAU,yBAAb,WACE,eAAGA,UAAU,mEADf,eAEe,KACb,eACEyL,KAAK,4DACLzL,UAAU,wBAFZ,+BAKK,IARP,iDCvFCw7Q,GAAe,WACT3yM,IAEjB,OACE,WAAC,GAAD,YACE,UAAC,GAAD,CAA2B7oE,UAAU,0FAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,mDAAd,4BAGA,iBAAKA,UAAU,yBAAf,UACE,gBAAIA,UAAU,+CAEhB,kBAAKA,UAAU,yBAAf,WACE,8GAIA,0BACG,KACD,gBACEyL,KAAK,6CACLtqG,OAAO,SACPm1N,IAAI,sBACJt2H,UAAU,mBAJZ,UAMG,IANH,4DAaR,UAAC,GAAD,CAA2BA,UAAU,0FAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,mDAAd,qBAGA,iBAAKA,UAAU,yBAAf,UACE,gBAAIA,UAAU,+CAEhB,kBAAKA,UAAU,yBAAf,WACE,sGAIA,0BACG,KACD,gBACEyL,KAAK,sCACLtqG,OAAO,SACPm1N,IAAI,sBACJt2H,UAAU,mBAJZ,UAMG,IANH,qDAaR,UAAC,GAAD,CAA2BA,UAAU,0FAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,mDAAd,sBAGA,iBAAKA,UAAU,yBAAf,UACE,gBAAIA,UAAU,+CAEhB,iBAAKA,UAAU,yBAAf,UACE,yDAEE,gBACEyL,KAAK,0CACLtqG,OAAO,SACPm1N,IAAI,sBACJt2H,UAAU,mBAJZ,UAMG,IANH,8BCjEC,SAASy7Q,GAAT,GAEiB,IAD9Bl+L,EAC6B,EAD7BA,UAEM3oK,EAAWi0J,IAEXxoB,GADkBs0M,KAAhBC,YAER,MAA4CljN,EAAAA,EAAAA,WAAS,GAArD,GAAOw1F,EAAP,KAAuBC,EAAvB,KAEA,OACE,iBAAKnnI,UAAU,2DAAf,UACE,UAAC,GAAD,CACEknI,eAAgBA,EAChBm7F,cAAc,gEACdkc,kBAAkB,oFAClBK,oBAAoB,4BACpBC,iBAAiB,+BACjBx+L,WAAYA,EACZ6vD,MACE7vD,EACI,gDACA,wDAENy+L,kBAAmB,kBAAM33G,GAAmBD,IAC5Cb,YAAa,kBAAMc,GAAkB,IAbvC,SAeG5pD,EAAUm2B,iBAAmBzgC,GAAeyoM,oBAC3C,UAAC,GAAD,CACEt5C,WAAW,mBACXC,cAAc,oBACdC,YAAY,uHACZt3N,QAAS,kBAAMp2F,EAASqrM,GAA8B1iC,KAJxD,UAME,yCAGF,8BC3CV,IAAMkqL,GAAerpC,KCuHrB,GA9F+B,SAAC,GAGH,IAF3Bu9C,EAE0B,EAF1BA,WACA/mB,EAC0B,EAD1BA,YAEMhgV,EAAWi0J,IACXq3C,EAAuB14C,EAAY24C,IAEzC,KACEzK,KADF,GAAOkmK,EAAP,KAAuCpzV,EAAvC,KAAuCA,UAyBjC20S,EDvD+B,SAACy3B,GACtC,IAAMz3B,EAAa,CACjBsqC,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI+mH,wBAAuB,CACxD98L,GAAI,wBACJuxE,OAAQ,iBAAM,0BACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,iBAAKg6F,UAAU,mBAAmBkwG,MAAOlqM,EAAK8gH,WAA9C,SACG9gH,EAAK8gH,cAGV/yF,KAAM,MAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI6mH,oBAAmB,CACpD58L,GAAI,WACJuxE,OAAQ,iBAAM,YACd04E,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,cACxD/yF,KAAM,KAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI0wF,gBAAe,CAChDzmK,GAAI,OACJuxE,OAAQ,iBAAM,QACd04E,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,cACxD/yF,KAAM,MAiBV,OAbI6gU,GACFz3B,EAAW38T,KACTinW,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI8mH,uBAAsB,CACvD78L,GAAI,cACJuxE,OAAQ,iBAAM,gBACd04E,KAAM,SAACh7J,GAAD,OACJ,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,cAE1C/yF,KAAM,MAKLopS,EAAW1vT,OAAO,CACvBg6V,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIgnH,gBAAe,CAChD/8L,GAAI,gBACJuxE,OAAQ,iBAAM,mBACd04E,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,cACxD/yF,KAAM,KAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIhuF,QAAO,CACxCiY,GAAI,QACJuxE,OAAQ,iBAAM,eACd04E,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,cACxD/yF,KAAM,KAGR0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI2nH,kBAAiB,CAClD19L,GAAI,eACJuxE,OAAQ,iBAAM,gBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,cACxD/yF,KAAM,KAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI4mH,iBAAgB,CACjD38L,GAAI,QACJuxE,OAAQ,iBAAM,SACd04E,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,cACxD/yF,KAAM,KAER0zU,GAAappC,UACX,SAACvxO,GAAD,gBACKA,EAAI4mH,eADT,YAC2B5mH,EAAI6mH,kBAD/B,YACoD7mH,EAAI0wF,cADxD,YACyE1wF,EAAI8mH,qBAD7E,YACqG9mH,EAAIgnH,cADzG,YAC0HhnH,EAAI+mH,sBAD9H,YACuJ/mH,EAAI2nH,gBAD3J,YAC8K3nH,EAAIhuF,SAClL,CACEiY,GAAI,UACJuxE,OAAQ,iBAAM,WACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,UAACy1W,GAAD,CAAwBl+L,UAAWv3K,EAAK8mF,IAAIs5E,YAE9CryI,KAAM,EACN3hB,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,cC1BG+6B,CAAwBjnB,GAG3C,MAA0CljN,EAAAA,EAAAA,UAA6B,IAAvE,GAAOi2K,EAAP,KAAsBmC,EAAtB,KAEM1pG,EAAkB0hH,GAAc,CACpCjvT,KAAM8oW,EACNpzR,QAAS40O,EACT3V,UAAW,CACTs0D,MAAO79B,IAETz6U,MAAO,CACLmkT,cAAAA,GAEFE,sBAAuBiC,EACvB3B,gBAAiBA,KACjB7C,kBAAmBA,KACnB+F,oBAAqBA,KACrBf,mBAAoBA,KACpBG,uBAAwBA,KACxBzJ,sBAAsB,EACtBmQ,YAAY,EACZ5V,cAAc,EACdoY,cAAc,IAGhB,OACE,mCACE,UAAC,GAAD,CACE4vB,eAAe,cACfz5U,MAAOo4U,GAAYY,UACnB1gB,WAAW,0BACXp3N,QAAS,WACP8+M,EAAiB,KALrB,UAQE,kBAAK9pN,UAAU,oCAAf,WACE,eAAGA,UAAU,+CACb,mDAGJ,UAACwxQ,GAAD,CACEr6J,YAAiCpxM,IAAzBm6M,EACRp2M,MAAOo4U,GAAYgB,MACnBhzI,MAAM,mBACN1nL,UAAWA,EACX/S,YAAW,4DAAgDyqM,QAAhD,IAAgDA,OAAhD,EAAgDA,EAAsBrM,sBAAtE,KACX49J,kBAAkB,mBAClBC,eAAgB,kBAtEa,WACjC,IAAMqK,GAA4B,WAC7B77J,GAGA07J,EAA6BG,GAC/B9yV,SACAvjB,MAAK,WACJkP,EACE2xC,GAAU,CACR2pJ,MAAO,oBACPz6L,YAAY,kBAAD,OACTyqM,EAAsBrM,sBADb,uCAMfj/L,EAASqrM,SAEV5gM,OAAM,kBAAMzK,EAASqrM,SAmDE+7J,IACtBrK,cAAe,kBAAM/8V,EAASqrM,UAGhC,UAAC+gI,GAAD,CAEE/yI,YAAa,mBACblL,MAAOqd,EACP+gI,YAAY,IAJd,wBChGO86B,GAA6B,WAAO,IAAD,EACtC5hM,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OAER,EACEyF,GAAsB,CACpBzF,OAAAA,IAFU6hM,EAAd,EAAQrpW,KAAmCspW,EAA3C,EAAgC3zV,UAK1BosU,EAAcptL,EAAYoQ,IAE1BwkM,EAAkB,WACtB7qO,EAAAA,EAAAA,UAAQ,WACN,OAAIqjN,EACKsnB,EAGT,OAAOA,QAAP,IAAOA,OAAP,EAAOA,EAAkBn7W,QACvB,SAACw8K,GAAD,OACEA,EAAUm2B,iBAAmBzgC,GAAeyoM,oBAC5Cn+L,EAAUo2B,oBAAsBzgC,GAAkBmpM,YAErD,CAACH,EAAkBtnB,WAXA,QAWiB,GAEzC,OACE,UAAC,GAAD,WACE,UAAC,GAAD,CAA2B50P,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,kBAAKA,UAAU,+EAAf,WACE,gBAAIA,UAAU,0BAAd,8BAEA,UAACqwQ,GAAD,CACEjuC,WAAW,mBACXt4T,MAAOo4U,GAAYW,QACnBh3U,GAAG,8BACH03U,eAAe,YAJjB,UAME,qDAIH44B,GACC,iBAAKn8Q,UAAU,sBAAf,UACE,UAAC,GAAD,OAGF,gCACGk8Q,GAAoBA,EAAiBr+W,OAAS,GAC7C,iCACE,UAAC,GAAD,CACE89W,WAAYS,EACZxnB,YAAaA,OAIjB,6BACE,eAAG50P,UAAU,iFACb,gBAAIA,UAAU,sBAAd,4BACA,eAAGA,UAAU,2BAAb,uEClDZs8Q,GAAsB,IActBC,GAAiC,IAmB1BC,GAAmC,WAC9C,IAAM5nW,EAAWi0J,IACXoqD,EAAWH,KAETz4C,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACR,MAA0C3oC,EAAAA,EAAAA,UAAS,IAAnD,GAAO+qO,EAAP,KAAmBC,EAAnB,KACA,MAAgDhrO,EAAAA,EAAAA,UAAS,IAAI1zI,OAA7D,GAAO2+W,EAAP,KAAyBC,EAAzB,KACA,MAAgElrO,EAAAA,EAAAA,UAAS,IAAzE,GAAOmiE,EAAP,KAA8BgpK,EAA9B,KACA,MACEnrO,EAAAA,EAAAA,UAAS,IAAI1zI,OADf,GAAO8+W,EAAP,KAAoCC,EAApC,KAEA,MACErrO,EAAAA,EAAAA,UAASwhC,GAAkB8pM,OAD7B,GAAOC,EAAP,KAAkCC,EAAlC,KAEMC,GAAyB5rO,EAAAA,EAAAA,UAC7B,kBACE3xI,OAAOoF,OAAOkuK,IAAmBt9J,KAC/B,SAAC+9L,GACC,MAAO,CACLh0M,IAAKg0M,EACLrnG,MAAOqnG,EACPxnC,SAAU8wM,IAA8BtpK,QAIhD,CAACspK,IAGH,MAAgEvrO,EAAAA,EAAAA,UAC9DyhC,GAAmBsB,WADrB,GAAO2oM,EAAP,KAA8BC,EAA9B,KAGMC,GAAoB/rO,EAAAA,EAAAA,UACxB,kBACE3xI,OAAOoF,OAAOmuK,IAAoBv9J,KAChC,SAAC4nK,GACC,MAAO,CACL79K,IAAK69K,EACLlxE,MAAOkxE,EACPrR,SAAUixM,IAA0B5/L,QAI5C,CAAC4/L,IAGH,MACE1rO,EAAAA,EAAAA,UAAS2hC,GAAqB6B,eADhC,GAAOqoM,EAAP,KAAqCC,EAArC,KAEMC,GAA2BlsO,EAAAA,EAAAA,UAC/B,kBACE3xI,OAAOoF,OAAOquK,IAAsBz9J,KAClC,SAACg+L,GACC,MAAO,CACLj0M,IAAKi0M,EACLtnG,MAAOsnG,EACPznC,SAAUoxM,IAAiC3pK,QAInD,CAAC2pK,IAGH,MAAgE7rO,EAAAA,EAAAA,UAC9D4hC,GAAcoqM,QADhB,GAAOC,EAAP,KAA8BC,EAA9B,KAGMC,GAAoBtsO,EAAAA,EAAAA,UACxB,kBACE3xI,OAAOoF,OAAOsuK,IAAe19J,KAAsB,SAACk+L,GAClD,MAAO,CACLn0M,IAAKm0M,EACLxnG,MAAOwnG,EACP3nC,SAAUwxM,IAA0B7pK,QAG1C,CAAC6pK,IAGH,KAAyCloK,KAAzC,GAAOhC,EAAP,KAA0BjrL,EAA1B,KAA0BA,UA6B1B,OACE,iCACE,UAAC,GAAD,WACE,UAAC,GAAD,CAA2Bw3E,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,gBAAIA,UAAU,+EAAd,4BAIA,kBAAKA,UAAU,gBAAf,WACE,kBAAKA,UAAU,gBAAf,WACE,mBAAOA,UAAU,qBAAjB,uBACA,UAAC,GAAD,CACE4mI,cAAeu2I,EACfl2I,mBAAoB,SAACtzB,GACnBupK,EACEvpK,IAGJkzB,cAAe,OAPjB,UASE,UAAC,GAAD,CACEc,cAAes1I,EACfr1I,2BAA2B,yDAKhCq1I,IAA8B/pM,GAAkBmpM,QAC/C,kBAAKr8Q,UAAU,gBAAf,WACE,mBAAOA,UAAU,qBAAjB,2BACA,UAAC,GAAD,CACE4mI,cAAe62I,EACfx2I,mBAAoB,SAACrzB,GACnB4pK,EACE5pK,IAGJizB,cAAe,OAPjB,UASE,UAAC,GAAD,CACEc,cAAe41I,EACf31I,2BAA2B,0DAKjC,2BAGF,kBAAK5nI,UAAU,gBAAf,WACE,mBAAOA,UAAU,qBAAjB,mBACA,UAAC,GAAD,CACE4mI,cAAe02I,EACfr2I,mBAAoB,SAACzpD,GACnB6/L,EACE7/L,IAGJqpD,cAAe,OAPjB,UASE,UAAC,GAAD,CACEc,cAAey1I,EACfx1I,2BAA2B,0DAKjC,kBAAK5nI,UAAU,gBAAf,WACE,mBAAOA,UAAU,qBAAjB,8BACA,UAAC,GAAD,CACE4mI,cAAei3I,EACf52I,mBAAoB,SAACnzB,GACnB8pK,EACE9pK,IAGJ+yB,cAAe,OAPjB,UASE,UAAC,GAAD,CACEc,cAAeg2I,EACf/1I,2BAA2B,0DAKjC,kBAAK5nI,UAAU,gBAAf,WACE,mBACEy0P,QAAQ,wBACRz0P,UAAU,qBAFZ,0BAMA,UAACsyQ,GAAD,CACElwC,WAAW,wBACXtjU,MAAO29W,EACPjpQ,SAAU,SAAC10G,GACT,IAAM6rF,EAxOC,SAAC8xR,GAC1B,OAAIA,EAAW5+W,OAHW,EAIjB,CAAC,gCAAD,OAJiB,EAIjB,eAGL4+W,EAAW5+W,OAASy+W,GACf,CAAC,iCAAD,OAAkCA,GAAlC,gBAGF,GA+N0BwB,CAAmBh/W,GAClC89W,EAAoBjyR,GACpB+xR,EAAoB59W,IAEtB6rF,OAAQgyR,EACRpK,kBAAmB+J,SAIvB,kBAAKt8Q,UAAU,gBAAf,WACE,mBACEy0P,QAAQ,mCACRz0P,UAAU,qBAFZ,qCAMA,UAACsyQ,GAAD,CACElwC,WAAW,mCACXtjU,MAAO+0M,EACPrgG,SAAU,SAAC10G,GACT,IAAM6rF,EA9OY,SACpCkpH,GAEA,OAAIA,EAAsBh2M,OALW,EAM5B,CAAC,2CAAD,OAN4B,EAM5B,eAKLg2M,EAAsBh2M,OAAS0+W,GAC1B,CAAC,4CAAD,OACuCA,GADvC,gBAKF,GA+N0BwB,CAA8Bj/W,GAC7Ci+W,EAA+BpyR,GAC/BkyR,EAA+B/9W,IAEjC6rF,OAAQmyR,EACRvK,kBAAmBgK,YAIzB,kBAAKv8Q,UAAU,yBAAf,WACE,UAAC,GAAD,CACEl2F,MAAOo4U,GAAYW,QACnBzgB,WAAW,mBACXp3N,QA7JY,WACnByoG,EAAgB,CACnBp5B,OAAAA,EACAq5B,eAAgBzgC,GAAeyoM,mBAC/B/nK,kBAAmBspK,EACnBz/L,cAAe4/L,EACfxpK,qBACEqpK,IAA8B/pM,GAAkB8pM,MAC5C/nM,GAAmBmoM,GACnBG,EACN1pK,sBAAAA,EACAC,cAAe6pK,EACf7+W,MAAO29W,IAENxzV,SACAvjB,MAAK,WACJkP,EACE2xC,GAAU,CACR2pJ,MAAO,oBACPz6L,YAAa,kDAGjBw9M,EAAS,2BAEV5zM,SAsISmJ,UAAWA,EAJb,UAME,mDAGF,iBAAKw3E,UAAU,OAAf,UACE,UAACqwQ,GAAD,CACEvmW,MAAOo4U,GAAYa,OACnB3gB,WAAW,0BACXv2T,GAAG,uBACH03U,eAAe,oBAJjB,UAME,uDC7SZkkB,GAAerpC,KCoCrB,GAzB4B,SAAC,GAA8C,IAGnE4/C,EAAsBl8C,GAAc,CACxCjvT,KAJsE,EAA3CorW,iBAK3B11R,QDd6C,CAC/Ck/Q,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIqwF,YAAW,CAC5CpmK,GAAI,YACJuxE,OAAQ,iBAAM,QACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAImwF,cAAa,CAC9ClmK,GAAI,cACJuxE,OAAQ,iBAAM,gBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,UAAf,SAA0Bh6F,EAAK8gH,gBAEjD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIoxR,yBAAwB,CACzDnnW,GAAI,yBACJuxE,OAAQ,iBAAM,wBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,UAAf,SAA0Bh6F,EAAK8gH,gBAEjD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIqxR,sBAAqB,CACtDpnW,GAAI,sBACJuxE,OAAQ,iBAAM,wBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,iBAAKkqM,MAAOlqM,EAAK8gH,WAAY9mB,UAAU,4BAAvC,SACGh6F,EAAK8gH,gBAIZ2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIsxR,2BAA0B,CAC3DrnW,GAAI,2BACJuxE,OAAQ,iBAAM,uBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIuxR,YAAW,CAC5CtnW,GAAI,YACJuxE,OAAQ,iBAAM,cACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,iBAAKg6F,UAAU,4BAAf,SAA4Ch6F,EAAK8gH,iBCzBnDqhM,gBAAiBA,KACjB7C,kBAAmBA,KACnB+F,oBAAqBA,KACrBrK,sBAAsB,EACtBmQ,YAAY,EACZ5V,cAAc,EACdoY,cAAc,IAGhB,OACE,UAACqtB,GAAD,CAEE/yI,YAAa,0BACblL,MAAOi7K,EACP78B,YAAY,IAJd,4BC4BJ,GAhDmC,WACjC,IAAQ9mK,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACA8C,EAAci2C,KAAdj2C,UAEFmhM,GAAmB/sO,EAAAA,EAAAA,UAAQ,yBAAM4rC,QAAN,IAAMA,EAAAA,EAAa,KAAI,CAACA,IAEzD,EACE0C,GAA4B,CAC1BxF,OAAAA,EACA8C,UAAWmhM,IAHDC,EAAd,EAAQ1rW,KAAuC2rW,EAA/C,EAAoCh2V,UAMpC,OACE,UAAC,GAAD,WACE,UAAC,GAAD,CAA2Bw3E,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,iBAAKA,UAAU,+EAAf,UACE,gBAAIA,UAAU,0BAAd,+BAGDw+Q,GACC,iBAAKx+Q,UAAU,sBAAf,UACE,UAAC,GAAD,OAGF,gCACGu+Q,GACDA,EAAqBN,iBAAiBpgX,OAAS,GAC7C,UAAC,GAAD,CACEogX,iBAAkBM,EAAqBN,oBAGzC,6BACE,eAAGj+Q,UAAU,iFACb,gBAAIA,UAAU,sBAAd,iCACA,eAAGA,UAAU,2BAAb,6DCjBLy+Q,GAAY,SAAC,GAAiC,IAA/B37P,EAA8B,EAA9BA,QACpBw8F,EAAa93C,EAAYs4C,IACzB4+J,EAfY,SAAC57P,GACnB,OAAOA,EAAQlrG,QAAO,SAACC,EAAiBxW,GACtC,IAAMs9W,EAAe9mW,EAAIs1I,MAAK,SAACyxN,GAAD,OAAUA,EAAKtyQ,QAAUjrG,KAOvD,OALIs9W,EACFA,EAAapxU,OAAS,EAEtB11B,EAAIrX,KAAK,CAAE8rG,MAAOjrG,EAAQksC,MAAO,IAE5B11B,IACN,IAKWgnW,CAAY/7P,GAE1B,OACE,iBAAK9iB,UAAU,oCAAf,SACG0+Q,EAAM9oW,KAAI,SAACgpW,EAAMpuU,GAAP,OACT,kBAAiBwvD,UAAU,mCAA3B,UACGxvD,EAAQ,GACP,iBAAKwvD,UAAU,yBAAf,UACE,gBAAGA,UAAU,mBAAb,WACE,eAAGA,UAAU,0EACb,eAAGA,UAAU,+EAIjB,2BAEF,WAACwwQ,GAAD,CAEE1mW,MACE80W,EAAKtyQ,MAAMzyF,SAAS,QAChBowV,GAAUsG,UACVqO,EAAKtyQ,MAAMzyF,SAAS,WACpBowV,GAAUjnB,QACVinB,GAAUqG,SAEhB/sB,eAAe,mCATjB,WAWE,UAAC,GAAD,CACEwB,gBAAiB65B,EAAKtyQ,MACtBg2N,YAAY,6DACZ6iB,aAAa,yCAEd7lI,GAAa,2BAAQ,iBAAKt/G,UAAU,OAAf,SAAuB4+Q,EAAKtyQ,QACjDsyQ,EAAKrxU,MAAQ,GACZ,mBAAMyyD,UAAU,OAAhB,eAA0B4+Q,EAAKrxU,UAE/B,4BAnBGiD,KAZCA,SCGLsuU,GAAW,SAAC,GAAkD,IAAhDC,EAA+C,EAA/CA,0BACnBx/J,EAA0B/3C,EAAYu4C,IAKtCi/J,EAlCsC,SAC5CC,GAEA,IAAMjyS,EAAUgJ,GAAS6kH,WAAW,CAAE7tH,QAASiyS,EAAgBngX,QACzDu3E,EAAOrJ,EAAQwW,GAAG,QAClB76C,EAAQqkC,EAAQwW,GAAG,SACnB15C,EAAUkjC,EAAQwW,GAAG,WAE3B,OAAInN,GAAQ,EACJ,GAAN,OAAUmxG,KAAKmD,aAAa,QAAS,CAAEq5C,sBAAuB,IAAKriM,OACjE00C,GADF,SAIE1tC,GAAS,EACL,GAAN,OAAU6+I,KAAKmD,aAAa,QAAS,CAAEq5C,sBAAuB,IAAKriM,OACjEgH,GADF,UAIEmB,GAAW,EACP,GAAN,OAAU09I,KAAKmD,aAAa,QAAS,CAAEq5C,sBAAuB,IAAKriM,OACjEmI,GADF,YAII,GAAN,OAAU09I,KAAKmD,aAAa,QAAS,CAAEq5C,sBAAuB,IAAKriM,OACjEqrC,EAAQA,SADV,YAWuBkyS,CAHCH,EAA0B5xN,MAChD,SAAC77B,GAAD,OAAQA,EAAG3xH,MAAQ4/M,MAGrB,OAAO,kCAAGy/J,EAAH,QCtCHvX,GAAerpC,KCqBR+gD,GAA4C,SAAC,GAEnD,IADLC,EACI,EADJA,gBAEMxqW,EAAWi0J,IACXmS,EAAexT,EAAYuyC,IACjC,MAA8BroE,EAAAA,EAAAA,UAAuB,IAArD,GAAOsmL,EAAP,KAAgBc,EAAhB,KACMqE,ED1B0B,SAACniJ,GAAD,MAA0B,CAC1DysL,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIuyR,uBAAsB,CACvDtoW,GAAI,uBACJuxE,OAAQ,iBAAM,QACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,UAAhB,UACE,UAACy+Q,GAAD,CAAW37P,QAAS98G,EAAK8gH,gBAG7B10G,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,SAGV/sT,KAAM,MAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIwyR,kBAAiB,CAClDvoW,GAAI,cACJuxE,OAAQ,iBAAM,eACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,eAGnB/yF,KAAM,MAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIyyR,aAAY,CAC7CxoW,GAAI,aACJuxE,OAAQ,iBAAM,SACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,eAGnB/yF,KAAM,MAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI62I,eAAc,CAC/C5sN,GAAI,eACJuxE,OAAQ,iBAAM,WACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,iBAIrB/yF,KAAM,MAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI0yR,iBAAgB,CACjDzoW,GAAI,gBACJuxE,OAAQ,iBAAM,eACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,UAAhB,UACE,UAACwiI,GAAD,CAAwBxnD,aAAcA,EAAtC,SACGwM,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,iBAIrB/yF,KAAM,MAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI2yR,kCAAiC,CAClE1oW,GAAI,0BACJuxE,OAAQ,iBAAM,sBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GACL,OACE,kBAAMg6F,UAAU,UAAhB,UACE,UAAC8+Q,GAAD,CAAUC,0BAA2B/4W,EAAK8gH,kBAKlD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI4yR,iCAAgC,CACjE3oW,GAAI,0BACJuxE,OAAQ,iBAAM,6BACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,kBAAMg6F,UAAU,UAAhB,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAO37B,EAAK8gH,eAGnB/yF,KAAM,OCvEW4rV,CAAmB3kM,GAEhC4kM,EAAkBp4M,EAAYo4C,IAE9BC,EAAaiiH,GAAc,CAC/BjvT,KAAMusW,EACN72R,QAAS40O,EACT35T,MAAO,CACLw0T,QAAAA,EACAvI,WAAY,CACVC,UAAWkwD,EAAgBjyK,YAAc,EACzCnnD,SAAUo5N,EAAgBphK,kBAG9B05G,gBAAiBY,EACjB3Q,gBAAiBA,KACjB7C,kBAAmBA,KACnB+F,oBAAqBA,KACrBkG,sBAAuBA,KACvBvQ,sBAAsB,EACtBmQ,YAAY,EACZ5V,cAAc,EACdoY,cAAc,IAEVy6B,EAAoBvuI,EAAWwrG,sBAAsBh4P,KAAKx1D,OAE1DwwV,GAAS98M,EAAAA,EAAAA,UAAQ,WAgBrB,MAfkC,CAChC+2M,UAAU,EACV36I,YAAaiyK,EAAgBjyK,YAC7B6Q,gBAAiBohK,EAAgBphK,gBACjCC,UAAWmhK,EAAgBnhK,UAAU7oM,KAAsB,SAAC4wI,GAC1D,IAAM8nM,EAAiB9nM,EAASh9I,WAChC,MAAO,CACL7J,IAAK2uV,EACLhiP,MAAOgiP,EACPniL,SAAU3lB,IAAao5N,EAAgBphK,oBAG3CnP,aAAc++I,KAIf,CAACwxB,EAAiBxxB,IACrB,OACE,mCACE,UAACpN,GAAD,CAEE/yI,YAAa,cACblL,MAAO8c,EACPuhI,cAAc,wBAHT,gBAKP,UAAC,GAAD,CACEzzI,YAAa0gJ,EAAO1gJ,YACpB6Q,gBAAiB6vI,EAAO7vI,gBACxB5P,WAAYiR,EAAWoxG,eACvB5hH,aAAcg/I,EAAOh/I,aACrBoP,UAAW4vI,EAAO5vI,UAClB6pI,SAAU+F,EAAO/F,SACjB3pI,eAAgB,kBAAM/pM,EAAS+pM,OAC/BC,WAAY,kBAAMhqM,EAASgqM,OAC3BC,kBAAmB,SAAC0vI,GAAD,OAAc35U,EAASiqM,GAAkB0vI,WCzEvDsxB,GAAY,WAAO,IAAD,EACvBjrW,EAAWi0J,IACTwR,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACFylM,EAA6Bt4M,EAAYu4C,IACzC/kC,EAAexT,EAAYuyC,IAC3B/0K,EAAQwiI,EAAY4jC,IACpBzmK,EAAYK,EAAML,UAAU+2C,cAC5B72C,EAAUG,EAAMH,QAAQ62C,cACxB4jI,EAAa93C,EAAYs4C,IAEzBigK,EAAyBv4M,GAAY,SAAChkK,GAAD,OACzC49M,GAAkB59M,EAAO67M,GAAWsB,iCAGhCq/J,EAAoB,iBAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAwBnvQ,eAA3B,SAE1B,EACEovE,GAA2B,CACzB3F,OAAAA,EACA11I,UAAAA,EACAE,QAAAA,EACAm2I,aAAAA,IALUilM,EAAd,EAAQptW,KAAuCqtW,EAA/C,EAAmCpwM,WAQ7BsvM,GAAkB7tO,EAAAA,EAAAA,UAAQ,WAC9B,OAAK2uO,GAA6BD,EACzBA,EAEF,KACN,CAACA,EAAqBC,IAEnBC,EAAuC,CAC3C,CACExgX,IAAK68M,GAAyBgD,KAC9BlzG,MAAOkwG,GAAyBgD,KAChCrzC,UAAU,GAEZ,CACExsK,IAAK68M,GAAyB4jK,OAC9B9zQ,MAAOkwG,GAAyB4jK,OAChCj0M,UAAU,GAEZ,CACExsK,IAAK68M,GAAyB6jK,KAC9B/zQ,MAAOkwG,GAAyB6jK,KAChCl0M,UAAU,IAId,OACE,mCACE,kBAAKnsE,UAAU,0CAAf,WACE,UAAC,GAAD,CACEoiO,WAAW,kBACX91N,MAAM,aACNv4E,KAAM++U,GAAWO,MACjB7/P,SAAU,kBAAM5+F,EAAS8qM,OACzBx4F,QAASo4F,KAGX,UAAC,GAAD,CACEsnB,cAAeu5I,EACfl5I,mBAAoB,SAACq5I,GACnB1rW,EACE+qM,GACE2gK,KAINz5I,cAAe,QATjB,UAYE,UAAC,GAAD,CACEc,cAAa,0CAAqCm4I,GAClDl4I,2BAA0B,UACxBo4I,EAAuB,GAAK,SADJ,4DAMhC,qBAAShgR,UAAU,GAAnB,SACGkgR,GACC,iBAAKlgR,UAAU,sBAAf,UACE,UAAC,GAAD,OAGF,gCACGo/Q,EAAgBvhX,OAAS,GACxB,iBAAKmiG,UAAU,GAAf,UACE,UAACm/Q,GAAD,CAAYC,gBAAiBA,OAG/B,6BACE,eAAGp/Q,UAAU,iFACb,gBAAIA,UAAU,sBAAd,uDAGA,gBAAGA,UAAU,2BAAb,gCAEE,gBACEyL,KAAK,2DACLzL,UAAU,mBAFZ,UAIG,IAJH,6CCrHX,SAASugR,KACd,IAAQj/L,EAAoB20H,IAC1B,SAACzyS,GAAD,OAAsBA,EAAMk+K,aADtBJ,gBAGFn5E,EAAW0qH,KAEjB,OAAOvxC,GACL,UAACoyC,GAAD,KAEA,UAACD,GAAD,CAAU5nN,GAAG,aAAarI,MAAO,CAAEtD,KAAMioG,KCJ9B,SAASq4Q,GAAT,GAEa,IAD1Bn/J,EACyB,EADzBA,YAEMzsM,EAAWi0J,IAEjB,OACE,iCACE,UAAC,GAAD,CACE3hD,QAASm6F,EAAYzwG,QACrBtE,MAAM,GACN81N,WAAY/gH,EAAY/5M,KACxBysB,KAAM++U,GAAWM,MACjB5/P,SAAU,kBAAM5+F,EAASmsM,GAAqBM,SCbtD,IAsBA,GAtBsB,WACpB,IAAQ//B,EAAoB20H,IAAiB,SAACzyS,GAAD,OAAWA,EAAMk+K,aAAtDJ,gBACAszK,EAAgBD,KAAhBC,YACFn/K,EAAgBjO,EAAYsQ,IAE5BljK,EAAWi0J,IAEjB,OACE,iCACI+rL,GAAen/K,KACf,UAAC,GAAD,CACEvuD,QAASo6D,EACTh1E,MAAM,GACNv4E,KAAM++U,GAAWM,MACjBhxC,WAAW,aACX5uN,SAAU,kBAAM5+F,EAAS4sK,YClB7BimL,GAAerpC,KCkDrB,GApCgC,SAAC,GAA6C,IAA3C99G,EAA0C,EAA1CA,aAC3B68G,EDZa,CACjBsqC,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIxlF,OAAM,CACvCyP,GAAI,OACJuxE,OAAQ,iBAAM,eACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,iBAAKg6F,UAAU,mBAAmBkwG,MAAOlqM,EAAK8gH,WAA9C,SACG9gH,EAAK8gH,cAGV/yF,KAAM,MAER0zU,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI8jB,UAAS,CAC1C75F,GAAI,UACJuxE,OAAQ,iBAAM,WACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GACL,OAAIA,EAAK8mF,IAAIs5E,SAAS7hK,OAAS86M,GAAWkB,WACjC,UAAC,GAAD,KAEA,UAACigK,GAAD,CAAmBn/J,YAAar7M,EAAK8mF,IAAIs5E,YAGpDryI,KAAM,MCTV,MAA0C29G,EAAAA,EAAAA,UAA6B,IAAvE,GAAOi2K,EAAP,KAAsBmC,EAAtB,KAEM22D,EAAgB3+C,GAAc,CAClCjvT,KAAMytM,EACN/3H,QAAS40O,EACT3V,UAAW,CACTs0D,MAAO79B,IAETz6U,MAAO,CACLmkT,cAAAA,GAEFE,sBAAuBiC,EACvB3B,gBAAiBA,KACjB7C,kBAAmBA,KACnB+F,oBAAqBA,KACrBf,mBAAoBA,KACpBG,uBAAwBA,KACxBzJ,sBAAsB,EACtBmQ,YAAY,EACZ5V,cAAc,EACdoY,cAAc,IAGhB,OACE,UAACqtB,GAAD,CAEE/yI,YAAa,iBACblL,MAAO09K,EACPt/B,YAAY,IAJd,mBCxCSu/B,GAAmB,WAC9B,IAAMpgK,EAAe94C,GAAY,SAAChkK,GAAD,OAC/Bw9M,GAAgBx9M,MAGlB,OACE,iCACE,UAAC,GAAD,CAAkB88M,aAAcA,OCIhCsgI,GAAsB,SAACxuU,GAC3B,IAAMyuU,EAAwC,OAAGzuU,QAAH,IAAGA,OAAH,EAAGA,EAAMyuU,cAEvD,OAAoB,OAAbA,QAAa,IAAbA,GAAAA,EAAeT,UAAf,iBAAqCS,EAAcC,KAAnD,YAAoE,IAGvE6/B,GAAgB,SAACC,EAAwB77R,EAAmB2mB,GAE9DA,EAAKrhG,QAAQqqG,MAAM9oG,UADjBg1W,GAAkB77R,EACpB,yBAAiD67R,EAAiB,EAAlE,UAE+B,wBAI5B,SAASC,GAAT,GAOwB,IAAD,IAN5B99K,EAM4B,EAN5BA,MACAkL,EAK4B,EAL5BA,YACAgzI,EAI4B,EAJ5BA,YACAE,EAG4B,EAH5BA,YACAyL,EAE4B,EAF5BA,SACAk0B,EAC4B,EAD5BA,eAEA,KAAyBz/B,KAAzB,GAAO31O,EAAP,KAAc5tE,EAAd,KAAcA,MACRwjT,GAAa7vM,EAAAA,EAAAA,SAAgB,GAE7B8vM,EAA0B,SAACj5P,GAI/B,OAHKg5P,EAAWj3U,UACdi3U,EAAWj3U,SAAU,GAEhBi+E,EAAO+4N,oBAGV0/D,GAAYtvO,EAAAA,EAAAA,QAAY,MACxBuvO,GAAWvvO,EAAAA,EAAAA,QAAY,MACvBwvO,GAAYxvO,EAAAA,EAAAA,QAAY,MAiB9B,OAhBAN,EAAAA,EAAAA,YAAU,WACR,IAAMl5B,EAAe,WACnB,IACM2oQ,GADUK,EAAU52W,QACM41H,UAGhC,GADA0gP,GAAcC,EADU,GACuBG,GAC3Cn0B,EAAU,CAEZ+zB,GAAcC,EADSM,GACuBF,KAKlD,OADAC,EAAU52W,QAAQgL,iBAAiB,SAAU4iG,GACtC,kBAAM/iG,OAAOI,oBAAoB,SAAU2iG,MACjD,CAAC20O,KAGF,iBAEElhP,IAAKA,EACL1L,UAAWihP,EAHb,UAKE,iBAAKv1O,IAAKu1Q,EAAWjhR,UAAS,0BAAqBihP,GAAnD,UACE,oBACEjhP,UAAU,cAER0U,MAAO,CACL52E,MACEilK,EAAMqgH,qBAAuBtlR,EACzBilK,EAAMqgH,qBACNtlR,GAPZ,WAWE,mBACEkiE,UAAS,wFACTjpF,GAAG,mBACH20F,IAAKq1Q,EAHP,SAKGh+K,EAAMy3G,kBAAkB5kS,KAAI,SAACskS,GAAD,OAC3B,yBACGA,EAAY9pS,QAAQwF,KAAI,SAAC0yE,GAAD,aACvB,gBAEE0X,UAAS,iEAA4D4gP,GACnEt4P,EAAOmJ,OAAO4uN,UAAUjuS,MADjB,oBAEH+uU,QAFG,IAEHA,EAAAA,EAAe,mBACrBnnC,QAAS1xN,EAAO0xN,QAChBtlM,MAAO,CACL52E,OACGwqD,EAAOmJ,OAAOovN,iBACbv4N,EAAOmJ,OAAOyvN,kBACbogC,EAAWj3U,SACZi+E,EAAOmJ,OAAO4uN,UAAUtsR,KACtBu0D,EAAOmJ,OAAO4uN,UAAUtsR,KACxBu0D,EAAO63N,WAbjB,SAgBG73N,EAAOuxN,cAAgB,MACtB,mCACE,kBACE75M,UAAS,oBACN1X,EAAOuxN,eAAiBvxN,EAAOmJ,OAAOqoO,aACnC,6BACA,GAHG,KAKT9uN,SACG1iB,EAAOuxN,eAAiBvxN,EAAOmJ,OAAOqoO,aACnCxxO,EAAOmJ,OAAO6oO,0BACd,aATR,UAYGoH,GACCp5O,EAAOmJ,OAAO4uN,UAAU/3N,OACxBA,EAAOq7J,eAET,iBAAK3jJ,UAAU,yEAAf,mBACG,CACC8hP,KAAK,UAAC5f,GAAD,IACL5mR,MAAM,UAAC6mR,GAAD,KACN75O,EAAOmJ,OAAOkoO,sBAJlB,QAI8C,UAG/CrxO,EAAOmJ,OAAOovN,iBACb,kBACE7kM,YAAaulO,EAAwBj5P,GACrCy5P,aAAcR,EAAwBj5P,GACtC0X,UAAU,mFAHZ,UAKE,iBACEA,UAAS,iIACP1X,EAAOmJ,OAAOyvN,gBACV,aACA,YAlDX54N,EAAOvxE,GAAK,eAHdmjS,EAAYnjS,GAAK,uBAiE9B,8BACG61U,EACCu0B,GACE,QACA,yBACAhgC,EACAyL,EACAo0B,IAGF,0BAVJ,UAYGj+K,EAAM6hH,qBAZT,iBAYG,EAAqBvxP,YAZxB,aAYG,EAA2Bz9C,KAAI,SAACk3E,EAAK8wO,GACpC,IAAMokB,EAAmBo/B,GAAaxjD,GAEtC,OACE,WAAC,EAAAhlR,SAAD,YACE,gBAAIonD,UAAWgiP,EAAf,SACGl1P,EAAIyuO,kBAAkB3lT,KAAI,SAACorJ,GAAD,OACzB,gBAEEhhE,UAAS,4DAAuDgiP,EAAvD,YAA2EpB,GAClF5/K,EAAKvvE,OAAO4uN,UAAUjuS,MADf,mBAEJ+uU,QAFI,IAEJA,EAAAA,EAAe,YACpBzsO,MAAO,CACL52E,MAAOkjI,EAAKvvE,OAAO0uN,WANvB,SASGuhB,GACC1gK,EAAKvvE,OAAO4uN,UAAUr/I,KACtBA,EAAK2iF,eAVF3iF,EAAKjqJ,GAAK,cAepBsqW,GACCv0R,EACAg0R,EACAljD,EACAujB,KAvBWr0P,EAAI/1E,GAAK,oBAvG7Bk3L,EAAc,oBA0IzB,IAAMozK,GAAyB,SAC7Bv0R,EACAw0R,EACA1jD,EACAujB,GAEA,IAAMogC,EAAqD,GAG3D,OAFAC,GAAeF,EAAmBx0R,EAAIs5E,SAASrvJ,GAAIwqW,GAE5CA,EAAiB3rW,KAAI,SAAC6rW,EAAiBC,GAC5C,IACMC,EAAYP,GADKxjD,EAAW8jD,EAAuB,GAGnDE,EACqB,IAAzBF,GACKD,EAAgBh4B,YACjB83B,EAAiBG,EAAuB,GAAGj4B,YAE3Co4B,EACJH,IAAyBH,EAAiB1jX,OAAS,GAC9C4jX,EAAgBh4B,YACjB83B,EAAiBG,EAAuB,GAAGj4B,YAE3Cq4B,GACHL,EAAgBh4B,aAAem4B,EAAhC,yCACsCF,GAClC,GACAK,GACHN,EAAgBh4B,aAAeo4B,EAAhC,yCACsCH,GAClC,GAEAM,EAAU,UAAML,EAAN,YAAmBG,EAAnB,YAAgCC,GAEhD,OAAOZ,GACLr0R,EAAI/1E,GACJirW,EACA7gC,EACAsgC,EACA,UAKN,SAASN,GACP9qK,EACA2rK,EACA7gC,EACAsgC,EACA/1Q,GAEA,OACE,gBAEE1L,UAAWgiR,EACXt2Q,IAAKA,EAHP,SAKG+1Q,EAAgBnmD,MAAM1lT,KAAI,SAACorJ,EAAMihN,GAAP,OACzB,gBAEEjiR,UAAS,6CACO,IAAdiiR,EAAkB,qBAAuB,GADlC,mBAEL9gC,QAFK,IAELA,EAAAA,EAAe,kBAFV,YAE+B6gC,GAJ1C,SAMGhhN,EAAKkhN,WACJ,UAAC,GAAD,WACE,iBAAKliR,UAAS,aAAQyhR,EAAgB3wN,OAAtC,SACGkQ,EAAKh9G,aAIV,iBAAKg8C,UAAS,aAAQyhR,EAAgB3wN,OAAtC,SAAgDkQ,EAAKh9G,WAbzD,UACUqyJ,EADV,yBACgCorK,EAAgBprK,MADhD,YACyDr1C,EAAKmhN,aAPlE,UACU9rK,EADV,yBACgCorK,EAAgBprK,QA0BpD,IAAMmrK,GAAiB,SAAjBA,EACJF,EACA93B,EACA+3B,GAEA,IADS,EACHh2Q,EAAW+1Q,EAAkBvgX,QAAO,SAAC2R,GAAD,OAAOA,EAAE82U,WAAaA,KADvD,KAGWj+O,GAHX,IAGT,2BAA8B,CAAC,IAApBhL,EAAmB,QAC5BghR,EAAiB/gX,KAAK+/F,GAEtBihR,EAAeF,EAAmB/gR,EAAM81G,MAAOkrK,IANxC,gCAUX,SAASH,GAAaxjD,GACpB,OAAOA,EAAW,IAAM,EAAI,iBAAmB,WCjSjD,IAqCA,GArC+B,SAAC,GAGI,IAFlCvnH,EAEiC,EAFjCA,MACA60I,EACiC,EADjCA,SAEMt2U,EAAWi0J,IACXsuC,EAAS3vC,GAAY,SAAChkK,GAAD,OACzBihN,GAAgBjhN,EAAO6yM,MAezB,OACE,iCACE,oBACErrG,QAfc,WACdkgP,GAQJt2U,EAAS0vM,GAJ0B,CACjCjO,MAAAA,MAUEr2G,UAAS,kBAAakrP,EAAW,2BAA6B,IAC9Dn0U,GAAE,UAAKs/L,EAAL,oBAHJ,UAKE,eACEr2G,UAAS,2DACPm3G,EAAS,WAAa,qBC1BlC,IAeMswJ,GAAerpC,KAERgkD,GAA0C,SACrDv1B,EACA92C,GAEA,MAAO,CACL0xD,GAAappC,SAAS,QAAS,CAC7BtnT,GAAI,QACJiqJ,KAAM,SAACh7J,GAAD,OACJq8W,GACEr8W,EAAK8gH,WACL9gH,EAAK8mF,IAAIs5E,SAASrvJ,GAClB/Q,EAAK8mF,IAAIs5E,SAASqjL,cAEtBnhQ,OAAQ,QACRsgO,oBAAoB,EACpBmR,eAAe,IAEjB0tC,GAAappC,SAAS,cAAe,CACnCtnT,GAAI,cACJiqJ,KAAM,SAACh7J,GAAD,OAAUA,EAAK8gH,WAAW+hO,cAChCjgC,oBAAoB,EACpBmR,eAAe,IAEjB0tC,GAAappC,SAAS,cAAe,CACnCtnT,GAAI,aACJiqJ,KAAM,SAACh7J,GAAD,OAnDZ,SAAsBlH,EAAe6mF,GACnC,IAAMkgQ,EAAmB/mV,EAAQ6mF,EAAS,IAE1C,OAAI3+E,MAAM6+U,GACD,GAEH,GAAN,OAAU1yU,KAAK8sB,MAAM4lT,GAArB,KA8CMD,EACG5/U,EAAK8gH,WAAW+hO,cA5CC,SAC1By5B,EACAC,GAEA,IAAI58R,EAAQ,EAQZ,OAPK48R,GAAiBD,IACpB38R,EAAQ28R,EACLvhX,QAAO,SAAC+rF,GAAD,MAAgC,KAAvBA,EAAI2sF,kBACpB7hK,QAAO,SAACm5L,EAAayxK,GACpB,OAAOzxK,EAAcyxK,EAAc3oM,cAClC,IAEAl0F,EAiCE88R,CAAoB51B,EAAS92C,KAElCztN,OAAQ,aACRsgO,oBAAoB,EACpBmR,eAAe,MAKRsoD,GAA0B,SACrCvjX,EACAu3M,EACAi1I,GAHqC,OAKrC,kBAAKtrP,UAAU,6BAAf,WACE,iBAAKA,UAAU,oBAAf,UACE,UAAC,GAAD,CAAwBq2G,MAAOA,EAAO60I,UAAWI,MAElDxsV,MCtDQ4jX,GAAuC,SAClD51R,EACAkuF,EACA42I,EACAizB,GAEA,IAAM89B,EAAe,CACnB,CACE5nE,SAAUowC,GACVg3B,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAeo0U,IACrBnnS,QAASqnS,GACPv+P,EAAI5K,MACJ4K,EAAI/1E,GACJ+1E,EAAI28P,YACJ38P,EAAI48P,iBAENw4B,UAAWp1R,EAAI48P,iBAEjB,CACE3uC,SAAUknC,GAAAA,YACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,aACrBj+R,QAASwnS,GACP1+P,EAAIm8P,YACJpE,GAEFq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,OACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,QACrBj+R,QAASynS,GACP3+P,EAAIo8P,OACJrE,GAEFq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,aACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,cACrBj+R,QAAS0nS,GAAe5+P,EAAIxtF,KAAMulV,GAClCq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,IACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,KACrBj+R,QAAS2nS,GAAc7+P,EAAIonN,IAAK2wC,GAChCq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,cACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,eACrBj+R,QAAS4nS,GACP9+P,EAAI8uH,YACJipI,GAEFq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,mBACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,oBACrBj+R,QAAS6nS,GACP/+P,EAAI68P,iBACJ3uK,EACA6pK,GAEFq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,SACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,UACrBj+R,QAAS8nS,GAAeh/P,EAAIunN,MAAOwwC,GACnCq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,eACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,gBACrBj+R,QAAS+nS,GACPj/P,EAAIglH,QACJ92B,EACA6pK,GAEFq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,KACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,MACrBj+R,QAASgoS,GACPl/P,EAAIsnN,KACJp5H,EACA6pK,GAEFq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,IACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,KACrBj+R,QAASioS,GACPn/P,EAAI88P,IACJ5uK,EACA6pK,GAEFq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,IACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,KACrBj+R,QAASkoS,GACPp/P,EAAI+8P,IACJ7uK,EACA6pK,GAEFq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,IACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,KACrBj+R,QAASmoS,GACPr/P,EAAIg9P,IACJ9uK,EACA6pK,GAEFq9B,WAAW,GAEb,CACEnnE,SAAUknC,GAAAA,KACVkgC,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAekrU,GAAAA,MACrBj+R,QAASooS,GAAet/P,EAAI+2I,KAAMghH,GAClCq9B,WAAW,IAEbnhX,QAAO,SAACigK,GAAD,OAAU4wJ,EAAU/3S,SAASmnJ,EAAK+5I,aAU3C,MARwD,CACtD1kG,MAAOvpH,EAAI/1E,GACXyyU,SAAU18P,EAAI08P,SACdC,YAAa38P,EAAI28P,YACjB34L,MAAOhkE,EAAIgkE,MACXwqK,MAAOqnD,ICvJX,SAASlpQ,GAAW57E,GAClB,OAAO+rJ,GAASghB,WAAW/sK,GAAMw+J,SAAS,cAG5C,SAASumL,GAAkBr1U,GACzB,OAAOi6I,KAAKmD,aAAa,QAAS,CAChCo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAO4L,GAGZ,SAASs1U,GAAuBzuE,EAAc75H,GAC5C,IAAMuoM,EAAgBt7L,KAAKmD,aAAa,QAAS,CAC/Co5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOyyQ,GAEV,MAAM,GAAN,OAAU75H,GAAV,OAAqBuoM,GAQvB,IA6HA,GA7HsC,SAAC,GAGK,IAF1C1K,EAEyC,EAFzCA,cACA/3N,EACyC,EADzCA,WAEA,MAA8B3O,EAAAA,EAAAA,UAAqB,IAAnD,GAAO7mC,EAAP,KAAgBk4Q,EAAhB,KAEMh/B,EAAoBtqO,GAAW2+P,EAAczzU,WAC7Cq/S,EAAkBvqO,GAAW2+P,EAAcvzU,SAE3C+lE,EAAQ,yBAAqBm5O,EAArB,YAA0CC,EAA1C,YAA6Do0B,EAAcl0B,iBAA3E,QAER7/G,EAAiB9B,GAAsB61I,EAAcp9L,cAuFrDgoM,GAAiBvxO,EAAAA,EAAAA,QAA0B,MAEjD,OACE,mCACE,UAAC,GAAD,CACE3nI,MAAOo4U,GAAYa,OACnB3gB,WAAW,SACXp3N,QA5FkB,WAAO,IAAD,EAoEtBi4Q,EAnEkB7K,EAAc/kT,KAAKz9C,KAEzC,SAACk3E,GAAD,MAAS,CACT,CACEntF,IAAK,QACLb,MAAOguF,EAAI/1E,IAEb,CACEpX,IAAKsiV,GAAAA,YACLnjV,MAAO8jX,GAAkB91R,EAAIm8P,YAAYJ,eAE3C,CACElpV,IAAKsiV,GAAAA,OACLnjV,MAAO8jX,GAAkB91R,EAAIo8P,OAAOL,eAEtC,CACElpV,IAAKsiV,GAAAA,aACLnjV,MAAO8jX,GAAkB91R,EAAIxtF,KAAKupV,eAEpC,CACElpV,IAAKsiV,GAAAA,IACLnjV,MAAO8jX,GAAkB91R,EAAIonN,IAAI20C,eAEnC,CACElpV,IAAKsiV,GAAAA,cACLnjV,MAAO8jX,GAAkB91R,EAAI8uH,YAAYitI,eAE3C,CACElpV,IAAKsiV,GAAAA,mBACLnjV,MAAO+jX,GACL/1R,EAAI68P,iBAAiBd,aACrBxkH,IAGJ,CACE1kO,IAAKsiV,GAAAA,SACLnjV,MAAO8jX,GAAkB91R,EAAIunN,MAAMw0C,eAErC,CACElpV,IAAKsiV,GAAAA,eACLnjV,MAAO+jX,GAAuB/1R,EAAIglH,QAAQ+2I,aAAcxkH,IAE1D,CACE1kO,IAAKsiV,GAAAA,KACLnjV,MAAO+jX,GAAuB/1R,EAAIsnN,KAAKy0C,aAAcxkH,IAEvD,CACE1kO,IAAKsiV,GAAAA,IACLnjV,MAAO+jX,GAAuB/1R,EAAI88P,IAAIf,aAAcxkH,IAEtD,CACE1kO,IAAKsiV,GAAAA,IACLnjV,MAAO+jX,GAAuB/1R,EAAI+8P,IAAIhB,aAAcxkH,IAEtD,CACE1kO,IAAKsiV,GAAAA,IACLnjV,MAAO+jX,GAAuB/1R,EAAIg9P,IAAIjB,aAAcxkH,IAEtD,CACE1kO,IAAKsiV,GAAAA,KACLnjV,MAAO0oL,KAAKmD,aAAa,QAAS,CAChCo5C,sBAAuB,EACvBC,sBAAuB,IACtBriM,OAAOmrD,EAAI+2I,KAAKglH,mBAIsBjzU,KAAI,SAACstW,GAAD,OAC/C9K,EAAc+K,iBAAiBvtW,KAC7B,SAACmlS,GAAD,OAAcmoE,EAAO/1N,MAAK,SAAC6T,GAAD,OAAUA,EAAKrhK,MAAQo7S,KAAWj8S,YAQ1DskX,EAAU,CAJehL,EAAc+K,iBAAiBvtW,KAC5D,SAAC0yE,GAAD,OAAYo6P,GAA0Bp6P,OAGxB,UAA+B26R,IAE/CF,EAAWK,GAEX,UAAAJ,EAAe34W,eAAf,SAAwBiqK,SAWpB9rJ,WAAW,EACX63H,WAAYA,EALd,UAOE,kBAAKrgD,UAAU,oCAAf,WACE,eAAGA,UAAU,gDADf,cAKD6K,EAAQhtG,OAAS,GAChB,UAAC,GAAA2sG,QAAD,CAAS33F,KAAMg4F,EAASD,SAAUA,EAAU5K,UAAU,SAAtD,UACE,oBAAQ0L,IAAKs3Q,OAGf,8BCzJKK,GAAwB,SACnCl0B,GADmC,gBAErBA,EAFqB,aCC9B,IAAMm0B,GAA8B,SACzCC,GADyC,OAGzCA,EAA0Bt6B,cAAgBx8U,GAAAA,YAAAA,SAC1C82W,EAA0Br6B,SAAWz8U,GAAAA,YAAAA,SACrC82W,EAA0Bp9B,QAAU15U,GAAAA,YAAAA,SACpC82W,EAA0Bp6B,OAAS18U,GAAAA,YAAAA,SACnC82W,EAA0Bn6B,OAAS38U,GAAAA,YAAAA,SACnC82W,EAA0Bl6B,YAAc58U,GAAAA,YAAAA,SACxC82W,EAA0BlvE,QAAU5nS,GAAAA,YAAAA,SACpC82W,EAA0BnoK,WAAa3uM,GAAAA,YAAAA,SACvC82W,EAA0Bj6B,QAAU78U,GAAAA,YAAAA,SCiPtC,GArN6B,SAACqkF,GAC5B,IAAQm9G,EAAgBn9G,EAAhBm9G,YACFjzB,EAAexT,EAAYuyC,IAC3BqK,EAAa58C,EAAY+8C,IACzBxC,EAAUv6C,GAAY,SAAChkK,GAAD,OAC1BkgN,GAAclgN,EAAOyqM,MAGvB,EAA+BzmC,EAAY4jC,IAAnCzmK,EAAR,EAAQA,UAAWE,EAAnB,EAAmBA,QAEXy8I,EAAoB9Z,GAC1B,SAAChkK,GAAD,OAAsBA,EAAMk+K,aADtBJ,gBAGF4iK,EAAmB18K,GAAY,SAAChkK,GAAD,OACnC6+K,GAA4B7+K,EAAO89K,MAG9By+H,EAAP,IAA2BruK,EAAAA,EAAAA,UAA2B,YAAtD,MACA,MAA8BA,EAAAA,EAAAA,UAAuB,IAArD,GAAOsmL,EAAP,KAAgBc,EAAhB,KAEM+rB,EAAwCr9K,GAC5C,SAAChkK,GAAD,OAAsBihL,GAAoCjhL,MAGtDggX,EAAgCh8M,GAAY,SAAChkK,GAAD,OAChDwgN,GAAwBxgN,EAAOyqM,MAGjC,ECvDK,SACL42I,GAEA,SACEphK,GAAiC,CAC/BzsK,cAAeo0U,GAA+BgE,cAFlD,GAAwBq0B,GAAxB,WAIA,KAA0CpgM,GAAmC,CAC3ErsK,cAAeo0U,GAA+B4E,SADhD,GAAmB0zB,GAAnB,WAGA,KAAuCpgM,GACrC,CACEtsK,cAAeo0U,GAA+BwE,yBAFlD,GAAkB+zB,GAAlB,WAKA,KAAqCrgM,GAAuC,CAC1EtsK,cAAeo0U,GAA+BoE,iBADhD,GAAiBo0B,GAAjB,WAGA,KAAqCrgM,GAAwC,CAC3EvsK,cAAeo0U,GAA+B4F,cADhD,GAAiB6yB,GAAjB,WAGA,KACEtgM,GAAwC,CACtCvsK,cAAeo0U,GAA+BgG,oBAFlD,GAAsB0yB,GAAtB,WAIA,KAAwCtgM,GAAoC,CAC1ExsK,cAAeo0U,GAA+BwF,QADhD,GAAkBmzB,GAAlB,WAGA,KACEvgM,GAAoC,CAClCxsK,cAAeo0U,GAA+BoF,UAFlD,GAAqBwzB,GAArB,WAIA,KAAyCvgM,GAAiC,CACxEzsK,cAAeo0U,GAA+BgF,UADhD,GAAoB6zB,GAApB,WAIA,KACExgM,GAAiC,CAC/BzsK,cAAeqsW,GACbj4B,GAA+BgE,eAHrC,GAA+B80B,GAA/B,WAMA,KACE7gM,GAAmC,CACjCrsK,cAAeqsW,GACbj4B,GAA+B4E,UAHrC,GAA0Bm0B,GAA1B,WAMA,KACE7gM,GAAuC,CACrCtsK,cAAeqsW,GACbj4B,GAA+BwE,0BAHrC,GAAyBw0B,GAAzB,WAMA,KACE9gM,GAAuC,CACrCtsK,cAAeqsW,GACbj4B,GAA+BoE,kBAHrC,GAAwB60B,GAAxB,WAMA,KACE9gM,GAAwC,CACtCvsK,cAAeqsW,GACbj4B,GAA+B4F,eAHrC,GAAwBszB,GAAxB,WAMA,KACE/gM,GAAwC,CACtCvsK,cAAeqsW,GACbj4B,GAA+BgG,qBAHrC,GAA6BmzB,GAA7B,WAMA,KACE/gM,GAAoC,CAClCxsK,cAAeqsW,GAAsBj4B,GAA+BwF,SAFxE,GAAyB4zB,GAAzB,WAIA,KACEhhM,GAAoC,CAClCxsK,cAAeqsW,GACbj4B,GAA+BoF,WAHrC,GAA4Bi0B,GAA5B,WAMA,KACEhhM,GAAiC,CAC/BzsK,cAAeqsW,GACbj4B,GAA+BgF,WAHrC,GAA2Bs0B,GAA3B,WAOA,OAAOnzO,EAAAA,EAAAA,UAAQ,WAAO,IAAD,kBA0EnB,MAAO,CACLm7M,kBA1EwD,CACxDzD,YAAW,UAAEw6B,EAAyB5wW,YAA3B,QAAmC,GAC9Cq2U,OAAM,UAAEw6B,EAAoB7wW,YAAtB,QAA8B,GACpCszU,MAAK,UAAEw9B,EAAkB9wW,YAApB,QAA4B,GACjCs2U,KAAI,UAAEy6B,EAAiB/wW,YAAnB,QAA2B,GAC/Bu2U,KAAI,UAAEy6B,EAAiBhxW,YAAnB,QAA2B,GAC/Bw2U,UAAS,UAAEy6B,EAAsBjxW,YAAxB,QAAgC,GACzCwhS,MAAK,UAAE0vE,EAAmBlxW,YAArB,QAA6B,GAClCuoM,SAAQ,UAAE4oK,EAAqBnxW,YAAvB,QAA+B,GACvCy2U,MAAK,UAAE26B,EAAkBpxW,YAApB,QAA4B,IAkEjC8xW,mBAhEoD,CACpD17B,YAAaw6B,EAAyBj1W,OACtC06U,OAAQw6B,EAAoBl1W,OAC5B23U,MAAOw9B,EAAkBn1W,OACzB26U,KAAMy6B,EAAiBp1W,OACvB46U,KAAMy6B,EAAiBr1W,OACvB66U,UAAWy6B,EAAsBt1W,OACjC6lS,MAAO0vE,EAAmBv1W,OAC1B4sM,SAAU4oK,EAAqBx1W,OAC/B86U,MAAO26B,EAAkBz1W,QAwDzBm+U,kBArDwD,CACxD1D,YACEi7B,EAAyBrxW,MAAQgyU,EAC7Bq/B,EAAyBrxW,KACzB,GACNq2U,OACEi7B,EAAoBtxW,MAAQgyU,EACxBs/B,EAAoBtxW,KACpB,GACNszU,MACEi+B,EAAkBvxW,MAAQgyU,EACtBu/B,EAAkBvxW,KAClB,GACNs2U,KACEk7B,EAAiBxxW,MAAQgyU,EACrBw/B,EAAiBxxW,KACjB,GACNu2U,KACEk7B,EAAiBzxW,MAAQgyU,EACrBy/B,EAAiBzxW,KACjB,GACNw2U,UACEk7B,EAAsB1xW,MAAQgyU,EAC1B0/B,EAAsB1xW,KACtB,GACNwhS,MACEmwE,EAAmB3xW,MAAQgyU,EACvB2/B,EAAmB3xW,KACnB,GACNuoM,SACEqpK,EAAqB5xW,MAAQgyU,EACzB4/B,EAAqB5xW,KACrB,GACNy2U,MACEo7B,EAAkB7xW,MAAQgyU,EACtB6/B,EAAkB7xW,KAClB,IAkBN+xW,mBAhBoD,CACpD37B,YAAai7B,EAAyB11W,OACtC06U,OAAQi7B,EAAoB31W,OAC5B23U,MAAOi+B,EAAkB51W,OACzB26U,KAAMk7B,EAAiB71W,OACvB46U,KAAMk7B,EAAiB91W,OACvB66U,UAAWk7B,EAAsB/1W,OACjC6lS,MAAOmwE,EAAmBh2W,OAC1B4sM,SAAUqpK,EAAqBj2W,OAC/B86U,MAAOo7B,EAAkBl2W,WAS1B,CACDi1W,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA7/B,IDhIEggC,CAA4BhgC,GAJ9B6H,EADF,EACEA,kBACAi4B,EAFF,EAEEA,mBACAh4B,EAHF,EAGEA,kBACAi4B,EAJF,EAIEA,mBAGIvrM,GAAa9nC,EAAAA,EAAAA,UAAQ,WACzB,IAAM8nC,EAAa0vK,GAAW2D,EAAmBC,GAOjD,OAJE30B,EAAQn6T,OAAS,EACbitV,GAASzxK,EAAY2+I,EAAQ,GAAGjhT,GAAIihT,EAAQ,GAAG18Q,MAC/CwvS,GAASzxK,EAAY8xK,IAAe,KAGzC,CAACuB,EAAmBC,EAAmB30B,IAEpCmF,ErJ5CmC,SACzCniJ,EACA2pM,EACAC,EACA//B,GAEA,IAAMigC,EACJH,EAAmB17B,cAAgBx8U,GAAAA,YAAAA,QAC/Bs4W,EACJJ,EAAmBz7B,SAAWz8U,GAAAA,YAAAA,QAC1Bu4W,EACJL,EAAmBx+B,QAAU15U,GAAAA,YAAAA,QACzBw4W,EAAuBN,EAAmBx7B,OAAS18U,GAAAA,YAAAA,QACnDy4W,EAAuBP,EAAmBv7B,OAAS38U,GAAAA,YAAAA,QACnD04W,EACJR,EAAmBt7B,YAAc58U,GAAAA,YAAAA,QAC7B24W,EACJT,EAAmBtwE,QAAU5nS,GAAAA,YAAAA,QACzB44W,EACJV,EAAmBvpK,WAAa3uM,GAAAA,YAAAA,QAC5B64W,EACJX,EAAmBr7B,QAAU78U,GAAAA,YAAAA,QAEzB84W,EACJX,EAAmB37B,cAAgBx8U,GAAAA,YAAAA,QAC/B+4W,EACJZ,EAAmB17B,SAAWz8U,GAAAA,YAAAA,QAC1Bg5W,EACJb,EAAmBz+B,QAAU15U,GAAAA,YAAAA,QACzBi5W,EAAuBd,EAAmBz7B,OAAS18U,GAAAA,YAAAA,QACnDk5W,EAAuBf,EAAmBx7B,OAAS38U,GAAAA,YAAAA,QACnDm5W,EACJhB,EAAmBv7B,YAAc58U,GAAAA,YAAAA,QAC7Bo5W,EACJjB,EAAmBvwE,QAAU5nS,GAAAA,YAAAA,QACzBq5W,EACJlB,EAAmBxpK,WAAa3uM,GAAAA,YAAAA,QAC5Bs5W,EACJnB,EAAmBt7B,QAAU78U,GAAAA,YAAAA,QAE/B,MAAO,CACLg5U,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI5K,QAAO,CAC9CnrE,GAAIo0U,GACJ7iQ,OAAQ,kBAAM,sCACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJqlV,GACErlV,EAAK8gH,WACL9gH,EAAK8mF,IAAIs5E,SAASrvJ,GAClB/Q,EAAK8mF,IAAIs5E,SAASqjL,YAClBzjV,EAAK8mF,IAAIs5E,SAASsjL,kBAEtBt3U,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,SAGV53B,oBAAoB,EACpB6Q,eAAe,EACfl2K,QAAS,MAEX4hM,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIm8P,cAAa,CACpDlyU,GAAIkrU,GAAAA,YACJ35P,OAAQ,kBACNsxN,GACE,cACAkrE,GAA+BS,IAEnC38D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJwlV,GACExlV,EAAK8gH,WACL+9N,IAEJ9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIo8P,SAAQ,CAC/CnyU,GAAIkrU,GAAAA,OACJ35P,OAAQ,kBACNsxN,GACE,SACAmrE,GAA0BS,IAE9B58D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJylV,GACEzlV,EAAK8gH,WACL+9N,IAEJ9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIxtF,OAAM,CAC7CyX,GAAIkrU,GAAAA,aACJ35P,OAAQ,kBACNsxN,GAAa,QAASorE,GAAyBS,IACjD78D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ0lV,GAAe1lV,EAAK8gH,WAAY+9N,IAClC9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIonN,MAAK,CAC5Cn9R,GAAIkrU,GAAAA,IACJ35P,OAAQ,kBACNsxN,GAAa,QAASqrE,GAAwBS,IAChD98D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ2lV,GAAc3lV,EAAK8gH,WAAY+9N,IACjC9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI8uH,cAAa,CACpD7kM,GAAIkrU,GAAAA,cACJ35P,OAAQ,kBACNsxN,GAAa,OAAQsrE,GAAwBS,IAC/C/8D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ4lV,GACE5lV,EAAK8gH,WACL+9N,IAEJ9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI68P,mBAAkB,CACzD5yU,GAAIkrU,GAAAA,mBACJ35P,OAAQ,kBACNsxN,GACE,aACAurE,GAA6BS,IAEjCh9D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ6lV,GACE7lV,EAAK8gH,WACLk0D,EACA6pK,IAEJ9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIunN,QAAO,CAC9Ct9R,GAAIkrU,GAAAA,SACJ35P,OAAQ,kBACNsxN,GAAa,QAASwrE,GAAyBS,IACjDj9D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ8lV,GAAe9lV,EAAK8gH,WAAY+9N,IAClC9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIglH,UAAS,CAChD/6L,GAAIkrU,GAAAA,eACJ35P,OAAQ,kBACNsxN,GACE,UACAyrE,GAA4BS,IAEhCl9D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ+lV,GACE/lV,EAAK8gH,WACLk0D,EACA6pK,IAEJ9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIsnN,OAAM,CAC7Cr9R,GAAIkrU,GAAAA,KACJ35P,OAAQ,kBACNsxN,GAAa,OAAQ0rE,GAAyBS,IAChDn9D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJgmV,GACEhmV,EAAK8gH,WACLk0D,EACA6pK,IAEJ9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI88P,MAAK,CAC5C7yU,GAAIkrU,GAAAA,IACJ35P,OAAQ,kBACNsxN,GACE,MACA0rE,GACEL,GACAD,GACAe,GACAL,GACAD,IAEN78D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJimV,GACEjmV,EAAK8gH,WACLk0D,EACA6pK,IAEJ9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI+8P,MAAK,CAC5C9yU,GAAIkrU,GAAAA,IACJ35P,OAAQ,kBACNsxN,GACE,MACA0rE,GACEF,GACAW,GACAF,IAENj9D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJkmV,GACElmV,EAAK8gH,WACLk0D,EACA6pK,IAEJ9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAIg9P,MAAK,CAC5C/yU,GAAIkrU,GAAAA,IACJ35P,OAAQ,kBACNsxN,GACE,MACA0rE,GACED,GACAU,GACAD,IAENl9D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJmmV,GACEnmV,EAAK8gH,WACLk0D,EACA6pK,IAEJ9wT,KAAM,MAER0xT,GAAmBpnB,UAAS,SAACvxO,GAAD,OAASA,EAAI+2I,OAAM,CAC7C9sN,GAAIkrU,GAAAA,KACJ35P,OAAQ,kBACNsxN,GACE,OACA0rE,GACED,GACAU,GACAD,IAENl9D,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJomV,GAAepmV,EAAK8gH,WAAY+9N,IAClC9wT,KAAM,OAERhzB,QAAO,SAAC0wF,GAAD,YAAuB1rF,IAAX0rF,KqJ9MFu0R,CACjBhrM,EACA2pM,EACAC,EACA//B,GAGIohC,GACH3C,GAA4BqB,KAC5BrB,GAA4BsB,GAEzBxM,GAAgB7mO,EAAAA,EAAAA,UAAQ,WAS5B,MAR2C,CACzC4xO,iBAAkBhmD,EAAWvnT,KAAI,SAAC67E,GAAD,OAAYA,EAAO16E,MACpDs8C,KAAMgmH,EACN10I,UAAAA,EACAE,QAAAA,EACAm2I,aAAAA,EACAkpK,iBAAAA,KAGD,CACD/mB,EACA9jJ,EACA10I,EACAE,EACAm2I,EACAkpK,IAGIgiC,GAAW30O,EAAAA,EAAAA,UACf,kBAAM8nC,EAAWt4K,QAAO,SAAC+rF,GAAD,MAA0B,KAAjBA,EAAI08P,cACrC,CAACnwK,IAGGkoM,GAAmBhwO,EAAAA,EAAAA,UAAQ,WAe/B,OAda8nC,EACVt4K,QAAO,SAAC+rF,GAAD,OAASs3H,EAAWvqM,SAASizE,EAAI08P,aACxCzoV,QACC,SAAC+rF,GAAD,QAAW02R,GAA+C,cAAd12R,EAAI5K,UAEjDtsE,KAAoC,SAACk3E,GAAD,OACnC41R,GACE51R,EACAkuF,EACAmiJ,EAAWvnT,KAAI,SAAC67E,GAAD,OAAYA,EAAO16E,MAClC8tU,QAKL,CACDxrK,EACA+qC,EACAo/J,EACAxoM,EACAmiJ,EACA0nB,IAGI+H,GAAWr7M,EAAAA,EAAAA,UAAQ,WACvB,IAAMq7M,EAAW7C,GAAem8B,GAChC,OAAOxD,GACL91B,EACA5xK,EACAmiJ,EAAWvnT,KAAI,SAAC67E,GAAD,OAAYA,EAAO16E,MAClC8tU,KAED,CACDqhC,EACAlrM,EACAmiJ,EACA0nB,IAGIrgI,EAAuBs9G,GAAc,CACzCjvT,KAAMqzW,EACN39R,QAAS40O,EACTvC,eAAe,EACfp3T,MAAO,CACLw0T,QAAAA,GAEFE,gBAAiBY,EACjB3Q,gBAAiBA,KACjBnH,sBAAsB,EACtBjB,iBAAAA,IAGIomE,EACJxB,EAAmB17B,cAAgBx8U,GAAAA,YAAAA,eACnCk4W,EAAmBz7B,SAAWz8U,GAAAA,YAAAA,eAC9Bk4W,EAAmBx+B,QAAU15U,GAAAA,YAAAA,eAC7Bk4W,EAAmBx7B,OAAS18U,GAAAA,YAAAA,eAC5Bk4W,EAAmBv7B,OAAS38U,GAAAA,YAAAA,eAC5Bk4W,EAAmBt7B,YAAc58U,GAAAA,YAAAA,eACjCk4W,EAAmBtwE,QAAU5nS,GAAAA,YAAAA,eAC7Bk4W,EAAmBvpK,WAAa3uM,GAAAA,YAAAA,eAChCk4W,EAAmBr7B,QAAU78U,GAAAA,YAAAA,cAE/B,OACE,2BACa,OAAV4sK,QAAU,IAAVA,OAAA,EAAAA,EAAYx7K,QAAS,GACpB,mCACE,iBAAKmiG,UAAU,wBAAf,UACE,UAAC,GAAD,CACEo4Q,cAAeA,EACf/3N,YAAa4lO,OAGjB,WAAC,GAAD,WACGlkK,GAAWokK,GACV,kBAAKnmR,UAAU,8EAAf,WACE,eAAGA,UAAU,8DACb,iBAAKA,UAAU,uBAAf,UACE,eAAGA,UAAU,UAAb,oHAOJ,2BAEF,iBAAKA,UAAS,UAAK+hH,GAAWokK,EAAc,aAAe,IAA3D,UACE,UAACtF,GAAD,CAEE5yK,YAAa,yBACbgzI,YAAY,mBACZl+I,MAAOyhB,EACPooI,SAAUA,EACVk0B,eAAgBS,GANlB,mCAYN,gCACGx/J,GAAWokK,GAAeF,GACzB,kBAAKjmR,UAAU,8EAAf,WACE,eAAGA,UAAU,8DACb,kBAAKA,UAAU,uBAAf,WACE,eAAGA,UAAU,UAAb,+EAIA,gBAAGA,UAAU,UAAb,4EAES,KACP,eACEA,UAAU,uDACVyL,KAAK,0CAFP,6BAKK,IARP,gCAcJ,+BE9NZ,GAhB4B,SAAC3a,GAC3B,IAAQ8f,EAAgC9f,EAAhC8f,QAASpoF,EAAuBsoE,EAAvBtoE,UAAWwiF,EAAYla,EAAZka,QAE5B,OACE,UAAC,GAAD,CACEo3N,WAAW,iBACXt4T,MAAOo4U,GAAYY,UACnBt6T,UAAWA,EACX63H,YAAazvC,EACb5F,QAASA,EALX,UAOE,wCC4BN,GAnC4B,SAACla,GAC3B,IAAQm9G,EAAgCn9G,EAAhCm9G,YAAayjK,EAAmB5gR,EAAnB4gR,eACrB,MAAsChgO,EAAAA,EAAAA,WAAS,GAA/C,GAAO00O,EAAP,KAAoBC,EAApB,KACMC,EAAiB9+M,GAAY,SAAChkK,GAAD,OACjC8/M,GAAwB9/M,EAAOyqM,MAQjC,OACE,mCACE,UAAC,GAAD,CACEnkM,MAAOo4U,GAAYa,OACnB3gB,WAAW,iBACX/hL,WAAYimO,EACZt7Q,QAAS,kBAAMq7Q,GAAe,IAJhC,UAME,wCAEF,UAAC7U,GAAD,CACEr6J,OAAQivK,EACRt8W,MAAOo4U,GAAYe,QACnB/yI,MAAM,iBACNz6L,YAAY,+CACZk8V,cAAe,kBAAM0U,GAAe,IACpC5U,kBAAkB,QAClBC,eAtByB,WAC7BA,IACA2U,GAAe,UClBnB,SAASE,GAAiBt4K,GACxB,MAAuB,wBAAhBA,EAGT,IAAMu4K,GAAoBxsM,GAAS/gK,gBAAgB,CACjDG,UAAW,SAAC4L,GAAD,MAAc,CACvByhW,2BAA4BzhW,EAAQpT,MAGlC,CACAA,MAAO,SAACI,GAAD,gBAAgBA,EAAQqoK,OAAxB,2BACP54J,kBAAmB,SAAClT,GAAD,OACjBA,EAASqH,KAAiB,SAAClD,GAAD,MAAQ,CAChCg0W,gBAAiBh0W,EAAEg0W,gBACnBC,uBAAwBj0W,EAAEi0W,uBAC1BC,cAAel0W,EAAEk0W,cACjBC,yBAA0Bn0W,EAAEm0W,yBAC5BrkM,UAAW9vK,EAAE8vK,iBAGnBskM,oBAAqB9hW,EAAQpT,MAG3B,CACAA,MAAO,SAACI,GACN,MAAO,CACL9B,IAAI,GAAD,OAAK8B,EAAQqoK,OAAb,sBACH7pK,OAAQ,CACNu2W,YAAa/0W,EAAQ+0W,eAI3BtlW,kBAAmB,SAAClT,GAAD,OACjBA,EAASqH,KAAiB,SAAClD,GAAD,MAAQ,CAChCg0W,gBAAiBh0W,EAAEg0W,gBACnBC,uBAAwBj0W,EAAEi0W,uBAC1BC,cAAel0W,EAAEk0W,cACjBC,yBAA0Bn0W,EAAEm0W,yBAC5BrkM,UAAW9vK,EAAE8vK,mBAIrBjpK,kBAAkB,IAGPytW,GAAuBhtM,GAAS/gK,gBAAgB,CAC3DG,UAAW,SAAC4L,GAAD,MAAc,CACvBiiW,YAAajiW,EAAQpT,MAMnB,CACAiQ,QAAQ,WAAD,oBAAE,WAAO7P,EAASpC,GAAhB,gFAEH22W,GAAiBv0W,EAAQi8L,aAFtB,gCAGcr+L,EAAIgF,SACrB4xW,GAAkBptW,UAAU0tW,oBAAoB5jW,SAAS,CACvDm3J,OAAQroK,EAAQqoK,OAChB4zB,YAAaj8L,EAAQi8L,YACrB84K,YAAa/0W,EAAQi8L,eAPpB,OAGLl7L,EAHK,uDAYgBnD,EAAIgF,SACrB4xW,GAAkBptW,UAAUqtW,2BAA2BvjW,SAAS,CAC9Dm3J,OAAQroK,EAAQqoK,OAChB4zB,YAAaj8L,EAAQi8L,eAftB,OAYHl7L,EAZG,yDAmBHrD,QAAQ9J,MAAR,MAnBG,iCAsBA,CAAEiN,KAAI,oBAAEE,SAAF,aAAE,EAAYF,YAAd,QAAsB,KAtB5B,0DAAF,qDAAC,OA0BZ0G,kBAAkB,IAGL2tW,GAAwBF,GAAxBE,oBCpEf,SAASC,GACPvqM,EACA9M,EACAs3M,GAEA,GAAIt3M,EACF,MAAO,mBAGT,IAAMxjE,EAAQswE,EAAQhD,gBAClBwtM,EAAYj6N,MAAK,SAACxuJ,GAAD,OAAOA,EAAEioX,gBAAkBhqM,EAAQhD,mBACjDitM,yBACH,mBAEJ,OAAOv6Q,EAGT,IA4HA,GA5HwB,SAAC,GAGkB,IAFzCswE,EAEwC,EAFxCA,QACAqxB,EACwC,EADxCA,YAEMr5L,EAAWi0J,IACXwR,EAAS7S,EAAYsZ,IACrBumM,EAAoB7/M,GAAY,SAAChkK,GAAD,OACpCsgN,GAAwBtgN,EAAOyqM,MAEzB3sB,EAAoB9Z,GAC1B,SAAChkK,GAAD,OAAsBA,EAAMk+K,aADtBJ,gBAGR,MAA4C5vC,EAAAA,EAAAA,WAAS,GAArD,GAAOw1F,EAAP,KAAuBC,EAAvB,KAEA,EAA8C+/I,GAAoB,CAChE7sM,OAAAA,EACA4zB,YAAAA,IAFYq5K,EAAd,EAAQz0W,KAAuBi9J,EAA/B,EAA+BA,WAKzBy3M,GAAkBh2O,EAAAA,EAAAA,UAAQ,WAC9B,OAAK+1O,EAIEhmM,EACHgmM,EACAA,EAAgBvmX,QAAO,SAAC67K,GAAD,OAAcA,EAAQ4F,aALxC,KAMR,CAAC8kM,EAAiBhmM,IAEfkmM,GAAej2O,EAAAA,EAAAA,UAAQ,WAC3B,IAIMk2O,EAJmCF,EAAgBxmX,QACvD,SAACglB,GAAD,OAAQshW,EAAkBxpW,MAAK,SAACsgK,GAAD,OAAcp4J,EAAE6gW,gBAAkBzoM,QAGVvmK,QAEvD,SAAC0oL,EAAQ1jB,GACT,IAAM8qM,EAAepnL,EAAOnzC,MAC1B,SAACmxK,GAAD,OAAWA,EAAM3+T,MAAQi9K,EAAQ+pM,0BAGnC,OAAIe,GACFA,EAAa1iX,OAAb,aAA0B0iX,EAAa1iX,QAAvC,CAA+C43K,IACxC0jB,GAED,GAAN,UACKA,GADL,CAEE,CACE3gM,IAAKi9K,EAAQ+pM,uBACb3hX,OAAQ,CAAC43K,QAId,IAEH,OAAO6qM,IACN,CAACF,EAAiBF,IAmBrB,OACE,UAAC,GAAD,CACEngJ,eAAgBA,EAChB23G,iBAAiB,oCACjBxc,cAAc,sJACdkc,kBAAkB,uDAClBC,YAAa2oC,GAAsBvqM,EAAS9M,EAAYy3M,GACxD9oC,mBAAmB,0BACnBG,oBAAoB,0BACpBp2T,UAAWsnJ,EACXgvK,kBAAmB,kBAAM33G,GAAmBD,IAC5Cb,YAAa,kBAAMc,GAAkB,IAVvC,SAYGqgJ,EAAa5xW,KAAI,SAAC0oT,EAAOqpD,GAAR,OAChB,6BACE,iBAAK3nR,UAAU,iEAAf,SACGs+N,EAAM3+T,MAER2+T,EAAMt5T,OAAO4Q,KAAI,SAACgyW,EAAYC,GAAb,OAChB,WAAC,GAAD,CAEEzlD,WAAW,iBACXC,cAAc,2BACdr3N,QAAS,YAxCkB,SACrC4xE,EACAkrM,GAEA,IAAMtxW,EAAiC,CACrCy3L,YAAAA,EACArxB,SAAQ,oBACHA,GADE,IAELhD,gBAAiBkuM,KAGrBlzW,EAAS8oM,GAAiBlnM,IA8BduxW,CACEnrM,EACAgrM,EAAWhB,eAEbz/I,GAAkB,IATtB,WAtBmBy/I,EAkCIgB,EAAWhB,cAjC/B,kBAAXvsM,GAAgD,eAAlBusM,GAkClB,iBACE5mR,UAAU,eACVg5C,IAAI,sCAGN,4BAEF,kBAAMh5C,UAAU,qBAAhB,SACG4nR,EAAWf,6BArBhB,gBACgBc,EADhB,4BAC8CE,IAvB5B,IAACjB,OAiBvB,gBAAmBe,UC/F3B,GAnBsB,SAAC,GAIF,IAHnBp8Q,EAGkB,EAHlBA,SACAs8H,EAEkB,EAFlBA,WACAmgJ,EACkB,EADlBA,gBAEA,OACE,2BACE,kBACEhoR,UAAS,iBACP6nI,QADO,IACPA,EAAAA,EAAc,GADP,YAELmgJ,EAFK,iIADX,WAKE,iBAAKhoR,UAAU,oJACf,iBAAKA,UAAU,WAAf,SAA2BuL,UC4FnC,GAhG0B,SAAC,GAGW,IAFpCxqG,EAEmC,EAFnCA,OACAktM,EACmC,EADnCA,YAEMr5L,EAAWi0J,IAmBXo/M,EAAiBlnX,EAAOiE,OAC3BjE,QACC,SAACA,GAAD,OACEA,EAAO0hN,gBAAkBf,GAAoCuE,YAEhErwM,KAAI,SAAC7U,GAAD,OAAYA,EAAOjC,SAEpBopX,EAAennX,EAAOiE,OACzBjE,QACC,SAACA,GAAD,OACEA,EAAO0hN,gBAAkBf,GAAoCc,UAEhE5sM,KAAI,SAAC7U,GAAD,OAAYA,EAAOjC,SAE1B,OACE,UAAC0xW,GAAD,CAAM1mW,MAAOmgW,GAAUsG,UAAvB,UACE,kBAAKvwQ,UAAU,wBAAf,UACGioR,EAAepqX,OAAS,IACvB,6BACE,2CACCoqX,EAAeryW,KAAI,SAAC9W,EAAO0xC,GAAR,OAClB,6BACG1xC,EACA0xC,EAAQy3U,EAAepqX,OAAS,IAC/B,kBAAMmiG,UAAU,gBAAhB,mBAHOxvD,OAOb,oCAGH03U,EAAarqX,OAAS,IACrB,4BACGoqX,EAAepqX,OAAS,IACvB,kBAAMmiG,UAAU,qBAAhB,iBAEF,yCACCkoR,EAAatyW,KAAI,SAAC9W,EAAO0xC,GAAR,OAChB,6BACG1xC,EACA0xC,EAAQ03U,EAAarqX,OAAS,IAC7B,kBAAMmiG,UAAU,gBAAhB,mBAHOxvD,OAOb,qCAGJ,qBACEz5B,GAAE,sBAAiBhW,EAAOgW,IAC1BipF,UAAU,wCACVgL,QApEa,WAKnBp2F,EAASmuM,GAJ+C,CACtD9U,YAAAA,EACA+U,cAAejiN,MA8Db,WAKE,UAAC,GAAD,CAAeinX,gBAAgB,qCAA/B,UACE,iBAAKhoR,UAAU,oBAAf,4BAEF,eAAGA,UAAU,2CAEf,qBACEjpF,GAAE,wBAAmBhW,EAAOgW,IAC5BipF,UAAU,mCACVgL,QAtEe,WACrB,IAAMx0F,EAAuC,CAC3CssM,gBAAiB/hN,EAAOgW,GACxBk3L,YAAAA,GAGFr5L,EAASiuM,GAAuBrsM,KA6D5B,WAKE,UAAC,GAAD,CAAewxW,gBAAgB,qCAA/B,UACE,iBAAKhoR,UAAU,oBAAf,8BAEF,eAAGA,UAAU,oDCxGvB,SAASmoR,GACP/lK,EACAN,GAMA,OAJ8BA,EAAe/gN,QAC3C,SAACA,GAAD,OAAYA,EAAOqhN,YAAcA,KAYrC,IA8BA,GA9BuB,SAAC,GAIW,IAHjCnU,EAGgC,EAHhCA,YACArxB,EAEgC,EAFhCA,QACAklC,EACgC,EADhCA,eAEA,OACE,iBAAK9hH,UAAU,8BAAf,SACGmoR,GAAoBvrM,EAAQ7lK,GAAI+qM,GAAgBlsM,KAC/C,SAAC7U,EAAQqnX,GAAT,OACE,kBAEEpoR,UAAU,YAFZ,UAImB,IAAhBooR,GACC,iBAAKpoR,UAAU,iCAAf,UACE,UAACwwQ,GAAD,CAAM1mW,MAAOmgW,GAAUqG,SAAvB,UACE,kBAAMtwQ,UAAU,gBAAhB,sBAIJ,2BAEF,UAAC,GAAD,CAAmBiuG,YAAaA,EAAaltM,OAAQA,MAbvD,yBACyB67K,EAAQ7lK,GADjC,YACuChW,EAAOgW,WCuExD,GAvFmC,SAAC,GAKG,IAJrCwvS,EAIoC,EAJpCA,YACA8hE,EAGoC,EAHpCA,mBACAC,EAEoC,EAFpCA,qBACAC,EACoC,EADpCA,oBAEMC,EAAiB5oX,OAAOoP,QAAQ0yM,IACtC,MAA4ChwE,EAAAA,EAAAA,WAAS,GAArD,GAAOw1F,EAAP,KAAuBC,EAAvB,KAwBA,OACE,kBAAKnnI,UAAU,qBAAf,WACE,UAAC,GAAD,CACEknI,eAAgBA,EAChB23G,iBAAiB,oCACjBxc,cAAc,gJACdkc,kBAAkB,uDAClBC,YAAaj4B,EAAY9jG,cACzBg8H,mBAAmB,0BACnBG,oBAAoB,0BACpBE,kBAAmB,kBAAM33G,GAAmBD,IAC5Cb,YAAa,kBAAMc,GAAkB,IATvC,SAWGqhJ,EAAe5yW,KAAI,WAAqB6yW,GAArB,cAAKhmK,GAAL,kBAClB,UAAC,GAAD,CAEE2/G,WAAU,iCAA4BqmD,GACtCpmD,cAAc,oBACdr3N,QAAS,YAxCO,SACxB09Q,GAEA,IAAMC,GAAkC,oBACnCpiE,GADmC,IAEtC9jG,cAAeimK,IAEjBJ,EAAqBK,GAkCXC,CAAkBnmK,GAClB0kB,GAAkB,IANtB,UASE,kBAAMnnI,UAAU,qBAAhB,SAAsCyiH,KATxC,iCACiCgmK,UAYrC,UAACnW,GAAD,CACElwC,WAAW,qBACXz3O,OAAQ,GACRmqB,YACEyxM,EAAY9jG,gBACZf,GAAoCuE,SAChC,oCACA,uCAENnnN,MAAOynT,EAAYznT,MACnB0zW,oBAAoB,wEACpBC,eAAe,YACfj/P,SAnDiB,SAACq1Q,GACtB,IAAMF,GAAkC,oBACnCpiE,GADmC,IAEtCznT,MAAO+pX,IAETP,EAAqBK,MAgDjBN,GASA,2BARA,UAAC,GAAD,CACEjmD,WAAU,wBAAmB7b,EAAYznT,OACzCgL,MAAOo4U,GAAYa,OACnB/3O,QAjDwB,WAC9Bu9Q,EAAoBhiE,IA6ChB,UAKE,eAAGvmN,UAAU,iDCuCvB,GAnH8B,SAAC,GAKW,IAJxCj/F,EAIuC,EAJvCA,OACA+nX,EAGuC,EAHvCA,cACAC,EAEuC,EAFvCA,2BACAC,EACuC,EADvCA,cA+CA,OACE,iBAAKhpR,UAAU,sBAAf,UACE,UAAC,GAAD,CACEknI,oBAA2BnhO,IAAXhF,EAChB89U,iBAAiB,qBACjBxc,cAAc,2IACdkc,kBAAkB,uCAClBC,YAAY,GACZC,mBAAmB,GACnBC,2BAA2B,EAC3BC,uBAAuB,uCACvBC,oBAAoB,oBACpBE,kBAzDoB,WACxBgqC,KAyDIziJ,YAtDkB,WAClBtlO,GACFgoX,OAA2BhjX,IAyC3B,SAaGhF,GACC,kBAAKi/F,UAAU,YAAf,WACE,0BAAMj/F,EAAOmvM,QACZnvM,EAAOiE,OAAO4Q,KAAI,SAAC9W,EAAO0xC,GAAR,OACjB,iBAAKwvD,UAAU,gBAAf,UACE,UAAC,GAAD,CACEumN,YAAaznT,EACbupX,mBAA8B,IAAV73U,EACpB83U,qBAAsB,SAACK,GAAD,OA1DT,SAC3BA,EACAM,GAEA,IAAMC,GAAgC,oBACjCnoX,GADiC,IAEpCiE,OAAQjE,EAAQiE,OAAO4Q,KAAI,SAAC9W,EAAOqqX,GAAR,OACzBA,IAAeF,EAAsBN,EAAiB7pX,OAG1DiqX,EAA2BG,GAiDXZ,CAAqBK,EAAgBn4U,IAEvC+3U,oBAAqB,kBArCX,SAACa,GACzB,IAAMC,EAAgBtoX,EAAQiE,OAAOjE,QACnC,SAACjC,GAAD,OAAWA,IAAUsqX,KAEjBF,GAAgC,oBACjCnoX,GADiC,IAEpCiE,OAAQqkX,IAEVN,EAA2BG,GA6BcI,CAAkBxqX,OAPb0xC,OAWtC,kBAAKwvD,UAAU,wBAAf,WACE,iBAAKA,UAAU,OAAf,UACE,UAAC,GAAD,CACEoiO,WAAU,qBAAgBrhU,EAAOgW,IACjCjN,MAAOo4U,GAAYa,OACnB1iM,aACsD,KAAlDt/I,EAAOiE,OAAOjE,EAAOiE,OAAOnH,OAAS,GAAGiB,OAE5CksG,QA5DW,WACzB,IAAMk+Q,GAAgC,oBACjCnoX,GADiC,IAEpCiE,OAAO,GAAD,UACDjE,EAAQiE,QADP,CAEJ,CAAElG,MAAO,GAAI2jN,cAAef,GAAoCc,YAGpEumK,EAA2BG,IA8Cf,UAQE,uCAGJ,UAAC,GAAD,CACEp/W,MAAOo4U,GAAYY,UACnB1gB,WAAW,cACX/hL,WAC2B,IAAzBt/I,EAAOiE,OAAOnH,QACoC,KAAlDkD,EAAOiE,OAAOjE,EAAOiE,OAAOnH,OAAS,GAAGiB,MAE1CksG,QAASg+Q,EAPX,UASE,6CAKN,+BCrEV,GA1CyB,SAACl4R,GACxB,IAAQm9G,EAAgBn9G,EAAhBm9G,YACFr5L,EAAWi0J,IACX0gN,EAA8B/hN,GAAY,SAAChkK,GAAD,OAC9CggN,GAA0BhgN,EAAOyqM,MAE7BmyI,EAAY54K,GAAY,SAAChkK,GAAD,OAC5BigN,GAAuBjgN,EAAOyqM,MAY1Bu7K,EAAeppC,EACjB,0CACA,mBAEJ,OACE,qBACEp1O,QAfiB,WACnB,IAAMx0F,EAAiC,CACrCy3L,YAAAA,EACArxB,QAAS0kC,GAAcioK,EAA8B,IAGvD30W,EAASstM,GAAe1rM,KAUtBg+F,UAAW4rO,EACXpgP,UAAS,UAAKwpR,EAAL,2EAHX,UAKIppC,GAOA,2BANA,UAAC,GAAD,CAAe4nC,gBAAgB,qCAA/B,UACE,iBAAKhoR,UAAU,4BAAf,wCAOJ,kBAAMA,UAAU,oBAAhB,6BC4DN,GArFuB,SAAC,GAYI,IAX1BiuG,EAWyB,EAXzBA,YACArxB,EAUyB,EAVzBA,QACA6sM,EASyB,EATzBA,eACAC,EAQyB,EARzBA,kBACAx6B,EAOyB,EAPzBA,QACAy6B,EAMyB,EANzBA,cACAC,EAKyB,EALzBA,WACAC,EAIyB,EAJzBA,gBACAf,EAGyB,EAHzBA,cACAC,EAEyB,EAFzBA,2BACAC,EACyB,EADzBA,cAEA,MAA8Ct3O,EAAAA,EAAAA,YAA9C,GAAOo4O,EAAP,KAAwBC,EAAxB,KAEMC,EAAqB,SAACptM,GAC1BmtM,EAAmBntM,IAQrB,OACE,kBAAK58E,UAAU,sBAAf,WACE,kBAAKA,UAAU,qBAAf,WACE,iBAAKA,UAAU,8BAAf,UACE,UAAC,GAAD,CACEiuG,YAAaA,EAEbrxB,QAASA,GAHX,2BAE2BA,EAAQ7lK,QAKrC,kBAAKipF,UAAS,eAAUypR,EAAiB,OAAS,gBAAlD,UACIA,GAUA,2BATA,UAAC,GAAD,CACErnD,WAAU,yBAAoBxlJ,EAAQ7lK,IACtCjN,MAAOo4U,GAAYa,OACnB1iM,WAAYopO,EACZz+Q,QAAS,kBAAMg/Q,EAAmBptM,IAJpC,UAME,eAAG58E,UAAU,8CAKjB,UAACwxQ,GAAD,CACEthK,MAAM,iBACNpmM,MAAOo4U,GAAYgB,MACnB/rI,YAA4BpxM,IAApB+jX,EACRnY,cAAe,kBAAMqY,KACrBtY,eAlCoB,WAC5BmY,EAAgBC,GAChBE,KAiCQvY,kBAAkB,iBAClBh8V,YAAW,kDAA6CmnK,EAAQhD,uBAGpE,iBAAK55E,UAAU,8CAAf,UACE,UAAC,GAAD,CACEiuG,YAAaA,EACbrxB,QAASA,EACTklC,eAAgBotI,OAGpB,iBAAKlvP,UAAU,OAAf,UACE,UAAC,GAAD,CACEj/F,OAAQ2oX,EACRZ,cAAe,kBAAMA,EAAclsM,IACnCmsM,2BAA4BA,EAC5BC,cAAeA,SAIpBW,IAAkBC,GACjB,iBAAK5pR,UAAU,2CAAf,UACE,UAAC,GAAD,CAAkBiuG,YAAaA,OAGjC,8BCtFR,SAASg8K,GACP7nK,EACAsnK,GAEA,IAAqB,OAAjBA,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBtnK,aAAcA,EACnC,OAAOsnK,EAWX,IAiFA,GAjFwB,SAAC54R,GACvB,IAAQm9G,EAAuBn9G,EAAvBm9G,YAAajpH,EAAU8L,EAAV9L,MACfpwE,EAAWi0J,IACXw1C,EAAW72C,GAAY,SAAChkK,GAAD,OAC3B+/M,GAAsB//M,EAAOyqM,MAEzB6T,EAAiBt6C,GAAY,SAAChkK,GAAD,OACjCugN,GAAqBvgN,EAAOyqM,MAExBy7K,EAAoBliN,GAAY,SAAChkK,GAAD,OACpCygN,GAAwBzgN,EAAOyqM,MAG3Bi8K,EAAwB,SAACttM,GAM7BhoK,EAASytM,GALoC,CAC3CpU,YAAAA,EACArxB,QAAAA,MAMEutM,EAA4C,SAChDnnK,GAOApuM,EAASmuM,GAL+C,CACtD9U,YAAAA,EACA+U,cAAAA,MAMEonK,EAA2B,SAACN,GAKhCl1W,EAASutM,GAJ8B,CACrClU,YAAAA,EACArxB,QAASktM,MAKPO,EAA8B,WAIlCz1W,EAAS+tM,GAHoC,CAC3C1U,YAAAA,MAKJ,OACE,0BACGoQ,EAASzoM,KAAI,SAACgnK,EAAS0tM,GAAV,OACZ,iBAEEtqR,UAAS,kBACPsqR,IAAiBjsK,EAASxgN,OAAS,OAAS,QAHhD,UAME,UAAC,GAAD,CACEowM,YAAaA,EACbrxB,QAASA,EACT6sM,eAAiC,IAAjBa,EAChBp7B,QAAO,OAAEptI,QAAF,IAAEA,EAAAA,EAAkB,GAC3B4nK,kBAAmBO,GACjBrtM,EAAQ7lK,GACR2yW,GAEFC,cAAeW,IAAiBjsK,EAASxgN,OAAS,EAClD+rX,WAAqB,MAAT5kS,GAAiBA,GAASq5H,EAASxgN,OAC/CgsX,gBAAiBO,EACjBtB,cAAeoB,EACfnB,2BACEoB,EAEFnB,cAAeqB,KAtBnB,kBACkBC,UCrD1B,ICpCYC,GD+WZ,GA3U4B,WAC1B,IAAMt8K,EAAsB,kBACtBu8K,EAAchjN,GAAY,SAAChkK,GAAD,OAC9BmgN,GAAkBngN,EAAOyqM,MAErBr5L,EAAWi0J,IACXwR,EAAS7S,EAAYsZ,IACnBQ,EAAoB9Z,GAC1B,SAAChkK,GAAD,OAAsBA,EAAMk+K,aADtBJ,gBAGFtG,EAAexT,EAAYuyC,IAC3BysI,EAA0Bh/K,GAAY,SAAChkK,GAAD,OAC1C6+K,GAA4B7+K,EAAO89K,MAG/BytK,EAAoBvnL,EAAYid,IAChCgiK,EAA0Bj/K,GAAY,SAAChkK,GAAD,OAC1CmhL,GAAyCnhL,EAAO89K,MAG5C+8B,EAAW72C,GAAY,SAAChkK,GAAD,OAC3BqgN,GAAoBrgN,EAAOyqM,MAEvB6T,EAAiBt6C,GAAY,SAAChkK,GAAD,OACjCugN,GAAqBvgN,EAAOyqM,MAExBjpK,EAAQwiI,EAAY4jC,IAEpBq/K,EAAgB,SACpBt7B,EACAjL,GAEA,OElDuC,SACzC7pK,EACA80K,EACAn0K,EACA0rK,EACAroI,EACAyD,EACA98K,GAEA,IAAMo0I,EAAkBilC,EAASzoM,KAAI,SAACgnK,GAAD,OAuCvC,SACEA,EACAklC,GAEA,IAAM4oK,EAAwB5oK,EAC3B/gN,QAAO,SAACA,GAAD,OAAYA,EAAOqhN,YAAcxlC,EAAQ7lK,MAChDnB,KAAyC,SAAC7U,GAAD,MAAa,CACrDiE,OAAQjE,EAAOiE,OAAO4Q,KACpB,SAAC2wS,GAAD,MAAkB,CAChBznT,MAAOynT,EAAYznT,MACnB2jN,cAAe8jG,EAAY9jG,sBAanC,MAR+C,CAC7CL,UAAWxlC,EAAQ7lK,GACnBo0G,MAAOyxD,EAAQzxD,MACfq2F,YAAa5kC,EAAQ4kC,YACrB5nC,gBAAiBgD,EAAQhD,gBACzBs1K,QAASw7B,GA1DTC,CAAmC/tM,EAASklC,MAa9C,MAV8C,CAC5CznC,OAAAA,EACA80K,cAAAA,EACAn0K,aAAAA,EACA0rK,qBAAAA,EACAttK,gBAAAA,EACAz0I,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,UF8BnB+lV,CACLvwM,EACA80K,EACAn0K,EACAkpK,EACA7lI,EALgC,OAMhCyD,QANgC,IAMhCA,EAAAA,EAAkB,GAClB98K,IAIJ,KAAkCq+I,GAAmC,CACnErsK,cAAeo0U,GAA+B4E,SADhD,GAAO66B,EAAP,KAAkBC,EAAlB,KAGA,KACExnM,GAAuC,CACrCtsK,cAAeo0U,GAA+BwE,yBAFlD,GAAOm7B,EAAP,KAAkCzQ,EAAlC,KAIA,KAAuCh3L,GACrC,CACEtsK,cAAeo0U,GAA+BoE,iBAFlD,GAAOw7B,EAAP,KAA0BC,EAA1B,KAKA,KAAsC1nM,GACpC,CACEvsK,cAAeo0U,GAA+B4F,cAFlD,GAAOk6B,EAAP,KAAyBC,EAAzB,KAKA,KACE5nM,GAAwC,CACtCvsK,cAAeo0U,GAA+BgG,oBAFlD,GAAOg6B,EAAP,KAA6BC,EAA7B,KAIA,KAAgC7nM,GAAoC,CAClExsK,cAAeo0U,GAA+BwF,QADhD,GAAO06B,EAAP,KAAiBC,EAAjB,KAGA,KAAqC/nM,GAAoC,CACvExsK,cAAeo0U,GAA+BoF,UADhD,GAAOg7B,EAAP,KAAoBC,EAApB,KAGA,KAA+BhoM,GAAiC,CAC9DzsK,cAAeo0U,GAA+BgF,UADhD,GAAOs7B,EAAP,KAAiBC,EAAjB,KAGA,KAA4CloM,GAAiC,CAC3EzsK,cAAeo0U,GAA+BgE,cADhD,GAAOw8B,EAAP,KAAuBC,EAAvB,KAGA,KACEpoM,GAAiC,CAC/BzsK,cAAeqsW,GACbj4B,GAA+BgE,eAHrC,GAAO08B,EAAP,KAA8B5H,EAA9B,KAOA,KACE7gM,GAAmC,CACjCrsK,cAAeqsW,GACbj4B,GAA+B4E,UAHrC,GAAO+7B,EAAP,KAAyB5H,EAAzB,KAMA,KACE7gM,GAAuC,CACrCtsK,cAAeqsW,GACbj4B,GAA+BwE,0BAHrC,GAAOo8B,EAAP,KAAwB5H,EAAxB,KAMA,KACE9gM,GAAuC,CACrCtsK,cAAeqsW,GACbj4B,GAA+BoE,kBAHrC,GAAOy8B,EAAP,KAAuB5H,EAAvB,KAMA,MACE9gM,GAAwC,CACtCvsK,cAAeqsW,GACbj4B,GAA+B4F,eAHrC,GAAOk7B,GAAP,MAAuB5H,GAAvB,MAMA,MACE/gM,GAAwC,CACtCvsK,cAAeqsW,GACbj4B,GAA+BgG,qBAHrC,GAAO+6B,GAAP,MAA2B5H,GAA3B,MAMA,MACE/gM,GAAoC,CAClCxsK,cAAeqsW,GAAsBj4B,GAA+BwF,SAFxE,GAAOw7B,GAAP,MAAwB5H,GAAxB,MAIA,MACEhhM,GAAoC,CAClCxsK,cAAeqsW,GACbj4B,GAA+BoF,WAHrC,GAAO67B,GAAP,MAA2B5H,GAA3B,MAMA,MAA6ChhM,GAC3C,CACEzsK,cAAeqsW,GACbj4B,GAA+BgF,WAHrC,GAAOk8B,GAAP,MAAwB5H,GAAxB,MAuIM6H,GACJzB,EAAat8W,SAAW/B,GAAY8P,SACpCsvW,EAAkBr9W,SAAW/B,GAAY8P,SACzC+9V,EAAW9rW,SAAW/B,GAAY8P,SAClC0uW,EAAUz8W,SAAW/B,GAAY8P,SACjC4uW,EAAU38W,SAAW/B,GAAY8P,SACjC8uW,EAAe78W,SAAW/B,GAAY8P,SACtCgvW,EAAY/8W,SAAW/B,GAAY8P,SACnCkvW,EAAcj9W,SAAW/B,GAAY8P,SACrCovW,EAAWn9W,SAAW/B,GAAY8P,SAClC4nW,EAAoB31W,SAAW/B,GAAY8P,SAC3C2nW,EAAyB11W,SAAW/B,GAAY8P,SAChD6nW,EAAkB51W,SAAW/B,GAAY8P,SACzC8nW,EAAiB71W,SAAW/B,GAAY8P,SACxC+nW,GAAiB91W,SAAW/B,GAAY8P,SACxCgoW,GAAsB/1W,SAAW/B,GAAY8P,SAC7CioW,GAAmBh2W,SAAW/B,GAAY8P,SAC1CkoW,GAAqBj2W,SAAW/B,GAAY8P,SAC5CmoW,GAAkBl2W,SAAW/B,GAAY8P,QAErCiwW,GACJhC,IACCqB,EAAkBrjW,YAClBsiW,EAAatiW,YACb8xV,EAAW9xV,YACXyiW,EAAUziW,YACV2iW,EAAU3iW,YACV6iW,EAAe7iW,YACf+iW,EAAY/iW,YACZijW,EAAcjjW,YACdmjW,EAAWnjW,YACX07V,EAAyB17V,YACzB27V,EAAoB37V,YACpB47V,EAAkB57V,YAClB67V,EAAiB77V,YACjB87V,GAAiB97V,YACjB+7V,GAAsB/7V,YACtBg8V,GAAmBh8V,YACnBi8V,GAAqBj8V,YACrBk8V,GAAkBl8V,UAErB,OACE,mCACE,WAAC,GAAD,CAAMw3E,UAAU,OAAhB,WACE,UAAC,GAAD,CAAiBiuG,YAAaA,KAC9B,iBAAKjuG,UAAU,iCAAf,UACE,kBAAKA,UAAU,oCAAf,WACE,UAAC,GAAD,CAAmB6mI,cAAc,QAAQ/oM,MAAM,UAC/C,UAAC,GAAD,UAGJ,kBAAKkiE,UAAU,yBAAf,WACE,UAAC,GAAD,CACE4Q,QAAS47Q,GACThkW,UAAW+jW,GACXvhR,QAhKuB,WAC/B,IAAMyhR,EAAqBhC,EACzBr/B,GAA+BgE,YAC/B5I,GAEIkmC,EAAgBjC,EACpBr/B,GAA+B4E,OAC/BxJ,GAEImmC,EAA+BlC,EACnCr/B,GAA+BwE,uBAC/BpJ,GAEIomC,EAAuBnC,EAC3Br/B,GAA+BoE,eAC/BhJ,GAEIqmC,EAAqBpC,EACzBr/B,GAA+B4F,YAC/BxK,GAEIsmC,EAA0BrC,EAC9Br/B,GAA+BgG,kBAC/B5K,GAEIumC,EAAetC,EACnBr/B,GAA+BwF,MAC/BpK,GAEIwmC,EAAiBvC,EACrBr/B,GAA+BoF,QAC/BhK,GAEIymC,EAAgBxC,EACpBr/B,GAA+BgF,QAC/B5J,GAEGolC,EAAea,GACf5B,EAAU6B,GACV3B,EAA0B4B,GAC1B3B,EAAkB4B,GAClB1B,EAAiB2B,GACjBzB,EAAqB0B,GACrBxB,EAASyB,GACTvB,EAAYwB,GACZtB,EAASuB,GAEVl+B,IACG+8B,EACHrB,EACEr/B,GAA+BgE,YAC/B3I,IAGCslC,EACHtB,EACEr/B,GAA+B4E,OAC/BvJ,IAGCulC,EACHvB,EACEr/B,GAA+BwE,uBAC/BnJ,IAGCwlC,EACHxB,EACEr/B,GAA+BoE,eAC/B/I,IAGCylC,GACHzB,EACEr/B,GAA+B4F,YAC/BvK,IAGC0lC,GACH1B,EACEr/B,GAA+BgG,kBAC/B3K,IAGC2lC,GACH3B,EACEr/B,GAA+BwF,MAC/BnK,IAGC4lC,GACH5B,EACEr/B,GAA+BoF,QAC/B/J,IAGC6lC,GACH7B,EACEr/B,GAA+BgF,QAC/B3J,SA+DA,iBAAKzmP,UAAU,OAAf,UACE,UAAC,GAAD,CACEiuG,YAAaA,EACbyjK,eA3LmB,WAC7BoZ,EAAajkX,QACbyzW,EAAWzzW,QACXokX,EAAUpkX,QACVskX,EAAUtkX,QACVwkX,EAAexkX,QACf0kX,EAAY1kX,QACZ4kX,EAAc5kX,QACd8kX,EAAW9kX,QACXglX,EAAkBhlX,QAClBq9W,EAAyBr9W,QACzBs9W,EAAoBt9W,QACpBu9W,EAAkBv9W,QAClBw9W,EAAiBx9W,QACjBy9W,GAAiBz9W,QACjB09W,GAAsB19W,QACtB29W,GAAmB39W,QACnB49W,GAAqB59W,QACrB69W,GAAkB79W,QAClB+N,EAASovK,kBA8KP,iBAAKhkF,UAAU,OAAf,UACE,UAAC,GAAD,CAAsBiuG,YAAaA,UGrT3C,GAzC4B,SAAC,GAAgD,IAA9C5zB,EAA6C,EAA7CA,OAAQuD,EAAqC,EAArCA,KACrC,MAA8DlsC,EAAAA,EAAAA,WAAS,GAAvE,GAAOioO,EAAP,KAAgCC,EAAhC,KAEA,EACEz5L,GACE,CACE9F,OAAAA,EACAuD,KAAAA,GAEF,CAAEnN,MAAOkpM,IANL9mW,EAAR,EAAQA,KAAM2V,EAAd,EAAcA,UAAWD,EAAzB,EAAyBA,gBASnB2kW,GAAsBr6W,IAAS0V,IAAoBC,EAEzD,OACE,iCACE,6BACE,mBACEisU,QAAS72K,EACT59E,UAAS,yCACPktR,EAAqB,iBAAmB,IAH5C,SAMGA,GACC,mGAEA,mFAGJ,UAAC,GAAD,CACE9qD,WAAYxkJ,EACZ26L,YAAW,OAAE1lW,QAAF,IAAEA,OAAF,EAAEA,EAAM3C,IACnBsoW,gBAAiBvF,GAAiB4G,UAClCpB,eAAgBjwV,EAChBkwV,aAAc,kBAAMkB,GAA2B,YCxC5CuT,GAAwB,WACnC,MAAyB/5J,KAAjB/4C,EAAR,EAAQA,OAAQuD,EAAhB,EAAgBA,KAGhB,YAF+B73K,IAAXs0K,QAAiCt0K,IAAT63K,GAG1C,iBAAK59E,UAAU,4CAAf,UACE,iBAAKA,UAAU,QAAf,UACE,UAAC,GAAD,CAAqBq6E,OAAQA,EAAQuD,KAAMA,SAI/C,UAAC,GAAD,KCHEs4H,GAAgB,kDAChBC,GACJ,oFA6IF,GA3IiC,SAAC,GAI3B,IAAD,EAHJ5lG,EAGI,EAHJA,SAIM37L,EAAWi0J,IAEX1gE,EAAW0qH,KACXxhB,EAAkBlpG,EAASqnH,SAAS7kL,UACxCw9D,EAASqnH,SAAS5tN,QAAQ,KAAO,GAG7B4tM,EAAgBhoC,EAAYqpC,IAE5BwlG,EAAgB7uI,GAAY,SAAChkK,GAAD,OAChC4tM,GAAoB5tM,EAAO6tM,EAAiBd,MAGxCgmG,EAAgB,SACpBllG,EACAilG,GAFoB,OAGRD,EAAgB,oBAAsB,IAE9CG,EAAkB,SACtBnlG,EACAilG,GAFsB,OAGVD,EAAgB,eAAiB,IAE/C,OACE,gCACG9lG,EAASH,aAAavyM,OAAS,GAC9B,UAAC,GAAD,CACEmtG,QAAS,kBAAMp2F,EAAS+7L,OACxBT,MAAOK,EAASL,MAChBrkM,GAAE,UAAE0kM,EAASzsL,YAAX,QAAmB,IACrBk8E,UAAU,4BAJZ,UAME,kBAEEA,UAAS,yBACPq2M,EAAgB,0BAA4B,GADrC,YAGP7mG,EAAgB0mG,GAAgBC,GAHzB,aAIJK,IAJI,0CAFX,WAWE,eACEx2M,UAAS,sEACPwvG,EAAgB,OAAS,GADlB,YAEL+mG,IAFK,YAEuChmG,EAASJ,SAE3D,kBACEnwG,UAAS,kBAAawvG,EAAgB,QAAU,aADlD,SAGGe,EAASL,UAnBd,yBACyBK,EAASL,WAuBpC,mCACE,kBACEA,MAAOK,EAASL,MAEhBlwG,UAAS,UACPwvG,EAAa,UACN0mG,GADM,oHADN,gCAKP3lG,EAASC,cAAgB,8BAAgC,GALlD,YAMLgmG,IANK,wDAUTxrM,QAAS,kBACPp2F,EAASg7L,GAAkB,CAAEa,WAAYF,EAASx5L,OAdtD,WAiBE,mBAAMipF,UAAU,oBAAhB,WACE,eACEA,UAAS,sEACPwvG,EAAgB,OAAS,GADlB,YAEL+mG,IAFK,YAEuChmG,EAASJ,SAE3D,kBAAMnwG,UAAU,UAAhB,SACGwvG,EAAgBe,EAASL,MAAQ,SAGtC,2BACGV,GACC,eACExvG,UAAS,mFACnBuwG,EAASC,cAAgB,aAAe,cAE9B,SAjCR,wBAEwBD,EAASL,SAkCjC,iBACElwG,UACE,4CACCuwG,EAASC,cAAgB,eAAiB,YAC1ChB,EAAgB,QAAU,IAJ/B,UAOE,iBAAKxvG,UAAU,mBAAf,SACGuwG,EAASH,aAAax6L,KACrB,SAACshS,EAA+BC,GAC9B,OACE,UAAC,EAAAv+P,SAAD,WACE,UAAC,GAAD,CACE/sC,GAAIqrS,EAAUpzR,KACdk8E,UAAS,UACPwvG,EAAgB0mG,GAAgBC,GADzB,+FAGPgB,IAAe5mG,EAASH,aAAavyM,OAAS,EAC1C,YACA,IAPR,UAUE,iBACEmiG,UAAU,UADZ,SAIGwvG,EAAgB0nG,EAAUhnG,MAAQ,IAJrC,+BAE+BgnG,EAAUngS,QAb7C,cAAsBmgS,EAAUngS,kBC/G9CuhS,GAA2B,IAsFjC,GApFgB,WACd,IAAM1jS,EAAWi0J,IACXwR,EAAS7S,EAAYsZ,IAErB0uB,EAAgBhoC,EAAYqpC,IAE5BvvB,EAAkB9Z,EAAYia,IAE9B2rM,EAAmB5lN,GAAY,SAAChkK,GAAD,OACnCstM,GAAuBttM,EAAO89K,EAAiBjH,MAGzCv8I,EAAUy6Q,KAAVz6Q,MAER,OACE,iCACE,kBAAKkiE,UAAU,iBAAf,WACE,oBACEgL,QAAS,kBAAMp2F,EAAS+6L,OACxB3vG,UAAS,8PACPwvG,EAAgB,oBAAsB,qBAH1C,UAME,eACExvG,UAAS,mEACPwvG,EAAgB,YAAc,mBAIpC,iBACExvG,UAAS,8FACPwvG,EAAgB,mBAAqB,WAFzC,SAKG1xK,EAAQw6Q,IACTx6Q,EAAQw6Q,IACN,iCACE,kBACEt4M,UAAS,+CACPwvG,EAAgB,GAAK,WAFzB,WAKE,kBACExvG,UAAS,mEACS,SAFpB,WAKE,iBAAKA,UAAU,WAAf,UACE,UAAC,GAAD,MAEDliE,EAAQw6Q,IACP,iBAAKt4M,UAAU,iDAAf,UACE,UAAC,GAAD,MAEA,SAEN,iBACEA,UAAS,+DACPwvG,EAAgB,QAAU,+BAF9B,UAKE,0BACG1xK,EAAQw6Q,IACTx6Q,EAAQw6Q,GACJ80E,EAAiBx3W,KAAI,SAAC29C,GACpB,OACE,UAAC,GAAD,CAEEg9I,SAAUh9I,GAFZ,4BAC4BA,EAAKx8C,QAKrC,cAKV,cL9Fd,SAAYwzW,GAAAA,EAAAA,qBAAAA,sBAAZ,CAAYA,KAAAA,GAAAA,KMOL,IA4BD7hC,GAAuB,SAC3BC,EACAnvK,GAMA,MAJgC,CAC9BqvK,aAAcJ,GAA0BE,EAAgBnvK,KAM5D,SAASivK,GACPxvK,EACAO,GAOA,OALsBP,EACnBl4K,QAAO,SAACm4K,GAAD,OAAYA,EAAOM,WAAaA,KACvC5jK,KAAI,SAACsjK,GAAD,OAAYA,EAAOW,eACvBjiK,QAAO,SAAC+tE,EAAOk0F,GAAR,OAAyBl0F,EAASk0F,IAAc,GCrB5D,IAgJA,GAhJuC,WACrC,IAAMo0B,EAAc,sBACdr5L,EAAWi0J,IACX7jI,EAAQwiI,EAAY4jC,IACpB/wB,EAAS7S,EAAYsZ,IAErB0pM,EAAchjN,GAAY,SAAChkK,GAAD,OAC9BmgN,GAAkBngN,EAAOyqM,MAErBmW,EAAa58C,EAAY+8C,IACzBxC,EAAUv6C,GAAY,SAAChkK,GAAD,OAC1BkgN,GAAclgN,EAAOyqM,MAGjBo/K,EAAiB7lN,GAAY,SAAChkK,GAAD,OACjC+/M,GAAsB//M,EAAOyqM,MAGzBq/K,EAAuB9lN,GAAY,SAAChkK,GAAD,OACvCugN,GAAqBvgN,EAAOyqM,MAGxBw8K,EAAgB,WACpB,ONXuC,SACzCpwM,EACA0sM,EACA1oK,EACAyD,EACA98K,GAEA,IAAMo0I,EAAkBilC,EAASzoM,KAAI,SAACgnK,GAAD,OAyCvC,SACEA,EACAklC,GAEA,IAAM4oK,EAAwB5oK,EAC3B/gN,QAAO,SAACA,GAAD,OAAYA,EAAOqhN,YAAcxlC,EAAQ7lK,MAChDnB,KAAkC,SAAC7U,GAAD,MAAa,CAC9CiE,OAAQjE,EAAOiE,OAAO4Q,KACpB,SAAC2wS,GAAD,MAAkB,CAChBznT,MAAOynT,EAAYznT,MACnB2jN,cAAe8jG,EAAY9jG,sBAanC,MARyC,CACvCL,UAAWxlC,EAAQ7lK,GACnBo0G,MAAOyxD,EAAQzxD,MACfq2F,YAAa5kC,EAAQ4kC,YACrB5nC,gBAAiBgD,EAAQhD,gBACzBs1K,QAASw7B,GA5DT6C,CAA4B3wM,EAASklC,MAWvC,MARuC,CACrCznC,OAAAA,EACA0sM,YAAAA,EACApiV,UAAWomK,GAAW/lK,EAAML,WAC5BE,QAASkmK,GAAW/lK,EAAMH,SAC1Bu0I,gBAAAA,GMLOo0M,CACLnzM,EACAkwM,GAAakD,qBACbJ,EAHgC,OAIhCC,QAJgC,IAIhCA,EAAAA,EAAwB,GACxBtoV,IAIJ,KACEo7I,KADF,GAAOstM,EAAP,KAA0CC,EAA1C,KAGMxwD,EAAailD,GACjBuL,EAAiC96W,KACjC86W,EAAiCnlW,WAO7BgkW,EACJhC,IAAgBmD,EAAiCnlW,UAE7C+jW,EACJoB,EAAiCn/W,SAAW/B,GAAY8P,QAEpD+lW,GAAsC/wO,EAAAA,EAAAA,UAAQ,WAAO,IAAD,EAKxD,MAJuC,CACrCq8O,SAAQ,UAAED,EAAiC96W,YAAnC,QAA2C,MAIpD,CAAC86W,IAEEt0M,GAAa9nC,EAAAA,EAAAA,UACjB,kBDpF6B,SAC/Bo3M,GAEA,IAAMK,EAAU,GAAOL,EAAeilC,UAEhCrkC,EAAqB,IAAInhU,IAAJ,GACtB4gU,EAAWpzU,KAAI,SAACsjK,GAAD,OAAYA,EAAOM,cAmBvC,OAhBsB,GAAO+vK,GACO3zU,KAAI,SAAC4jK,GACvC,IAAMN,EAAS8vK,EAAW77L,MAAK,SAACnzI,GAAD,OAAOA,EAAEw/J,WAAaA,KAWrD,MAT8B,CAC5BziK,GAAIyiK,EACJgwK,SAAUtwK,EAAOO,eACjBgwK,YAAaT,EAAWnrU,MAAK,SAAC7D,GAAD,OAAOA,EAAEy/J,iBAAmBD,KACzD1oB,MAAOooB,EAAOpoB,MACd5uE,MAAOg3F,EAAOI,eACdu0M,YAAanlC,GAAqBC,EAAeilC,SAAUp0M,OCkE3Ds0M,CAAkBxL,GAAW3qW,MAC3B,SAAC0O,EAAGuN,GAAJ,OAAUA,EAAEi6V,YAAYhlC,aAAexiU,EAAEwnW,YAAYhlC,kBAEzD,CAACy5B,IAGG4D,GAAW30O,EAAAA,EAAAA,UACf,kBAAM8nC,EAAWt4K,QAAO,SAAC+rF,GAAD,MAA0B,KAAjBA,EAAI08P,cACrC,CAACnwK,IAGGkoM,GAAmBhwO,EAAAA,EAAAA,UAAQ,WAS/B,OARa8nC,EACVt4K,QAAO,SAAC+rF,GAAD,OAASs3H,EAAWvqM,SAASizE,EAAI08P,aACxC5zU,KAAoC,SAACk3E,GAAD,O1B8DiB,SAC1DA,EACA8kO,GAEA,IDxFoC5wJ,ECwF9B2hN,EAAe,CACnB,CACE5nE,SAAUowC,GACVg3B,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,YAAeo0U,IACrBnnS,QAASq+T,GAAwBv1R,EAAI5K,MAAO4K,EAAI/1E,GAAI+1E,EAAI28P,aACxDy4B,WAAW,GAEb,CACEnnE,SAAU,cACVonE,OAAO,GAAD,OAAKr1R,EAAI/1E,GAAT,gBACNitC,SDlGgCg9G,ECkGDl0E,EAAI+gS,aDjGvC,2BACE,iBAAK7tR,UAAU,gCAAf,SACGwnF,KAAKmD,aAAa,QAAS,CAC1Bq5C,sBAAuB,IACtBriM,OAAOq/H,EAAK6nL,mBC8Ffq5B,WAAW,IAEbnhX,QAAO,SAACigK,GAAD,OAAU4wJ,EAAU/3S,SAASmnJ,EAAK+5I,aAU3C,MARwD,CACtD1kG,MAAOvpH,EAAI/1E,GACXyyU,SAAU18P,EAAI08P,SACdC,YAAa38P,EAAI28P,YACjB34L,MAAOhkE,EAAIgkE,MACXwqK,MAAOqnD,G0BrFHoL,CACEjhS,EACAqwO,EAAWvnT,KAAI,SAAC67E,GAAD,OAAYA,EAAO16E,YAIvC,CAACsiK,EAAY+qC,EAAY+4G,IAEtBp6H,EAAQ++H,GAAc,CAC1BjvT,KAAMqzW,EACN39R,QAAS40O,EACThV,gBAAiBA,OAQbg+D,EACJwH,EAAiCn/W,SAAW/B,GAAYc,cAE1D,OACE,mCACE,WAAC,GAAD,CAAMyyF,UAAU,YAAhB,WACE,UAAC,GAAD,CAAiBiuG,YAAaA,EAAajpH,MA/FtB,KAgGrB,kBAAKgb,UAAU,yBAAf,WACE,UAAC,GAAD,CACE4Q,QAAS47Q,EACThkW,UAAW+jW,EACXvhR,QAjEuC,WAC1C0iR,EAAkCjD,SAkEjC,iBAAKzqR,UAAU,OAAf,UACE,UAAC,GAAD,CACEiuG,YAAaA,EACbyjK,eArBmB,WAC7Bic,EAAiC9mX,QACjC+N,EAAS+sM,kBAyBP,WAAC,GAAD,WACGI,GAAWokK,GACV,kBAAKnmR,UAAU,8EAAf,WACE,eAAGA,UAAU,8DACb,iBAAKA,UAAU,uBAAf,UACE,eAAGA,UAAU,UAAb,oHAOJ,2BAEF,iBAAKA,UAAS,UAAK+hH,GAAWokK,EAAc,aAAe,IAA3D,UACE,UAACtF,GAAD,CAEE5yK,YAAa,6BACbgzI,YAAY,mBACZl+I,MAAOA,EACP+9K,eAAgBS,GALlB,uCCvJV,GATwB,WAGtB,OAFwB5sB,KAAhBC,aAGN,UAAClhI,GAAD,KAEA,UAACD,GAAD,CAAU5nN,GAAG,aAAarI,MAAO,CAAEtD,KAAMioG,aC6D7C,GA7DwC,SAAC,GAIpB,IAHnBoD,EAGkB,EAHlBA,SACAyiR,EAEkB,EAFlBA,eAEkB,IADlB/6R,SAAAA,OACkB,MADP,SACO,EAClB,MAA8Cy+C,EAAAA,EAAAA,UAGpC,MAHV,GAAOqhI,EAAP,KAAwBk7G,EAAxB,KAKMC,GAAmBj9O,EAAAA,EAAAA,cACvB,SAACxmC,GACC,IAAMw6I,EAAOx6I,EAAM8qB,cAAcq5H,wBACjCq/H,EAAmB,CACjBjuP,IACe,QAAb/sC,EACIgyJ,EAAKjlH,IAAM9qH,OAAOmqU,QAAU,EAC5Bp6F,EAAKx9F,OAASvyI,OAAOmqU,QAAU,EACrC1zU,KAAMs5O,EAAKt5O,KAAOuJ,OAAOoqU,YAG7B,CAACrsP,IAGGk7R,GAAmBl9O,EAAAA,EAAAA,cAAY,WACnCg9O,EAAmB,QAClB,IAEH,OACE,kBACE/xQ,aAAcgyQ,EACdx2Q,aAAcy2Q,EACdnuR,UAAU,wBAHZ,UAKGuL,EACAwnK,GACCysE,EAAAA,cACE,iBACEx/O,UAAU,2FACV0U,MAAO,CACLsrB,IAAI,GAAD,OAAK+yI,EAAgB/yI,IAArB,MACHr0H,KAAK,GAAD,OAAKonQ,EAAgBpnQ,KAArB,MACJsnF,SAAU,YALd,UAQE,kBAAK+M,UAAU,WAAf,UACGguR,GAED,iBACEhuR,UAAS,6CACM,QAAb/M,EAAqB,YAAc,SAD5B,6GAMf99E,SAAS7E,UCgDnB,GA5F2C,SAAC,GAEI,IAAD,EAD7Cs5M,EAC6C,EAD7CA,mBAEMh1M,EAAWi0J,IACXoqD,EAAWH,KACTz4C,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OAED+zM,EAAP,GACEz4K,KADF,MAGMiS,EAAuBpgD,EAAYqiD,IAEnCwkK,EAAqC,+BAAG,wGAEpCD,EAAoC,CACxC/zM,OAAAA,EACA4D,SAAU2rC,EAAmB7yM,GAC7Bm9L,oBAAqB,EACrB/1B,SAAUypC,IACT3+L,SAPuC,sDAS1CvZ,QAAQ9J,MAAM,wCAAd,MAT0C,wDAAH,qDA2CrC0oX,EAAS,UAAG9mN,EAAYqiD,WAAf,QAA8CrxC,GAAO4F,MAQpE,OACE,iCACE,kBAAKp+E,UAAU,kDAAf,WACE,UAAC,GAAD,CAASguR,gBAAgB,iBAAKhuR,UAAU,oBAAf,kBAAzB,UACE,eACEA,UAAU,6DACVgL,QAZS,WACjBp2F,EAAS80M,MACT90M,EAASkzM,GAAwBwmK,IACjCr7J,EAAS,sCAAD,OAAuCrJ,EAAmB7yM,WAmB9D,UAAC,GAAD,CACEi3W,gBAAgB,iBAAKhuR,UAAU,oBAAf,oBADlB,UAGE,eACEA,UAAS,4DACTgL,QA3DW,WACnBp2F,GACEklB,EAAAA,EAAAA,aAAY,CACV7M,cAAewqL,GACft+K,OAAO,WAAD,oBAAE,WAAOjjB,EAAQkjB,GAAf,yEACNA,EAAYc,wBADN,SAGAm0V,IAHA,OAKNj1V,EAAYxkB,SAAS8iM,MAErBt+K,EAAYjQ,cAPN,2CAAF,qDAAC,MAYXvU,EACEyiM,GAAU,CACRC,WAAY,CACVpH,MAAO,sDACPtmM,QAAS,gCACT+rV,WAAY,UAEdn+I,iBACEs9I,GAAkBy5B,4CACpBh3K,UAAW,oDC5DbkwJ,GAAerpC,KCoErB,GA1D+B,SAAC,GAIzB,IAHLowD,EAGI,EAHJA,kBAIMrxD,EDb4C,CAClDsqC,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAIxlF,OAAM,CACvCyP,GAAI,OACJuxE,OAAQ,iBAAM,QACdsgO,oBAAoB,EACpBlB,SAAU02B,GACVhsU,KAAM,CACJ+tU,oBAAqB,CACnBC,WAAW,IAGfp/K,KAAM,SAACh7J,GAAD,OACJ,iBAAKg6F,UAAU,6BAAf,SAA6Ch6F,EAAK8gH,gBAGtD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI8nH,cAAa,CAC9C79L,GAAI,UACJuxE,OAAQ,iBAAM,WACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI2hS,uBAAsB,CACvD13W,GAAI,cACJuxE,OAAQ,iBAAM,qBACdsgO,oBAAoB,EACpBlB,SAAU02B,GACVp9K,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI4hS,qBAAoB,CACrD33W,GAAI,aACJuxE,OAAQ,iBAAM,eACdsgO,oBAAoB,EACpBlB,SAAU02B,GACVp9K,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI6hS,aAAY,CAC7C53W,GAAI,eACJuxE,OAAQ,iBAAM,iBACdsgO,oBAAoB,EACpBlB,SAAU02B,GACVp9K,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI2nH,kBAAiB,CAClD19L,GAAI,cACJuxE,OAAQ,iBAAM,gBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,iBAAKg6F,UAAU,mBAAf,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI4nH,YAAW,CAC5C39L,GAAI,YACJuxE,OAAQ,iBAAM,cACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI8hS,cAAa,CAC9C73W,GAAI,cACJuxE,OAAQ,iBAAM,gBACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,iBAAKg6F,UAAU,mBAAf,SACGk6P,GAAqCl0V,EAAK8gH,iBAIjD2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAImoH,YAAW,CAC5Cl+L,GAAI,YACJuxE,OAAQ,iBAAM,cACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OAAU,iBAAKg6F,UAAU,mBAAf,SAAmCh6F,EAAK8gH,gBAE1D2gP,GAAappC,UAAS,SAACvxO,GAAD,OAASA,EAAI/1E,KAAI,CACrCA,GAAI,UACJuxE,OAAQ,iBAAM,WACdsgO,oBAAoB,EACpB5nJ,KAAM,SAACh7J,GAAD,OACJ,UAAC,GAAD,CACE4jN,mBAAoB5jN,EAAK8mF,IAAIs5E,YAGjCviB,QAAS,GACTiD,QAAS,GACT10I,KAAM,CACJyuU,cAAe,CACbT,WAAW,EACXU,KAAM,aCzEZ,MAA0CpvM,EAAAA,EAAAA,UAA6B,IAAvE,GAAOi2K,EAAP,KAAsBmC,EAAtB,KAEM+kE,EAA0B/sD,GAAc,CAC5CjvT,KAAM27W,EACNjmS,QAAS40O,EACT3V,UAAW,CACTs0D,MAAO79B,GACPG,kBAAAA,IAEF56U,MAAO,CACLmkT,cAAAA,GAEFE,sBAAuBiC,EACvB3B,gBAAiBA,KACjB7C,kBAAmBA,KACnB+F,oBAAqBA,KACrBf,mBAAoBA,KACpBG,uBAAwBA,KACxBzJ,sBAAsB,EACtBmQ,YAAY,EACZ5V,cAAc,EACdoY,cAAc,IAOhB,OACE,mCACE,UAAC,GAAD,CACE4vB,eAAe,cACfz5U,MAAOo4U,GAAYY,UACnB1gB,WAAW,0BACXp3N,QAVqB,WACzB8+M,EAAiB,KAKf,UAME,kBAAK9pN,UAAU,oCAAf,WACE,eAAGA,UAAU,+CACb,kDAEM,KACV,UAACghP,GAAD,CAEE/yI,YAAa,kCACblL,MAAO8rL,EACP1tC,YAAY,IAJd,uCCbN,GArC4B,SAAC,GAQtB,IAPL2tC,EAOI,EAPJA,KACAR,EAMI,EANJA,UACAS,EAKI,EALJA,YAKI,IAJJhqN,UAAAA,OAII,MAJQ,mBAIR,MAHJwzH,SAAAA,OAGI,MAHO,UAGP,MAFJx5C,iBAAAA,OAEI,MAFe,qBAEf,MADJiwI,SAAAA,OACI,MADO,GACP,EAKJ,OACE,iBAAKhvR,UAAU,gDAAf,SACG8uR,EAAKl5W,KAAI,SAACs7E,GAAD,OACR,qBAEE8O,UAAS,2DAAsDu4L,EAAtD,YACP+1F,IAAcp9R,EAAIvxF,IACd,6DADJ,UAEOolK,EAFP,2BAEmCg6E,IAErC/zI,QAAS,kBAdOrrG,EAccuxF,EAAIvxF,SAbpCovX,GAAaA,EAAYpvX,IADR,IAACA,GAOlB,WASE,eACEqgG,UAAS,UAAK9O,EAAIi/G,KAAT,YAAiB6+K,EAAjB,YACPV,IAAcp9R,EAAIvxF,IAAM,qBAAuBolK,MAGnD,kBAAM/kE,UAAU,sBAAhB,SAAuC9O,EAAIob,UAbtCpb,EAAIvxF,WCmFnB,GAhGuC,WAAO,IAAD,EACnC06K,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OAER,EACEgG,GAA0C,CAAEhG,OAAAA,IADhC40M,EAAd,EAAQp8W,KAAwCq8W,EAAhD,EAAqC1mW,UAErC,EACE+3J,GAAqC,CAAElG,OAAAA,IAD3B80M,EAAd,EAAQt8W,KAAmCu8W,EAA3C,EAAgC5mW,UAG1B5T,EAAWi0J,IACXoqD,EAAWH,KAEXu8J,EAAY,CAChB,CAAE1vX,IAAK64K,GAAO4F,MAAO9xE,MAAO,MAAO6jG,KAAM,4BACzC,CACExwM,IAAK64K,GAAOquC,KACZv6G,MAAO,cACP6jG,KAAM,8BAUJm+K,EAAS,UAAG9mN,EAAYqiD,WAAf,QAA8CrxC,GAAO4F,MAEpE,OACE,UAAC,GAAD,WACE,UAAC,GAAD,CAA2Bp+E,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,kBAAKA,UAAU,+EAAf,WACE,gBAAIA,UAAU,0BAAd,4BACA,UAAC,GAAD,CACEoiO,WAAW,2BACXt4T,MAAOo4U,GAAYW,QACnB73O,QAjBQ,WAClBp2F,EAAS80M,MACT90M,EAASkzM,GAAwBwmK,IACjCr7J,EAAS,yCAeCswH,eAAe,YAJjB,UAME,iDAIJ,UAAC,GAAD,CACEurC,KAAMO,EACNf,UAAWA,EACXS,YAAa,SAACpvX,GAAD,OACXiV,EAASkzM,GAAwBnoN,KAEnC44R,SAAS,UACTx5C,iBAAiB,qBACjBiwI,SAAS,YAGVV,IAAc91M,GAAO4F,QACnB8wM,GACC,iBAAKlvR,UAAU,sBAAf,UACE,UAAC,GAAD,MAEAivR,GAAyBA,EAAsBpxX,OAAS,GAC1D,UAAC,GAAD,CACE2wX,kBAAmBS,KAGrB,kBAAKjvR,UAAU,cAAf,WACE,eAAGA,UAAU,qEACb,gBAAIA,UAAU,UAAd,gCACA,eAAGA,UAAU,eAAb,4DAMLsuR,IAAc91M,GAAOquC,OACnBuoK,GACC,iBAAKpvR,UAAU,sBAAf,UACE,UAAC,GAAD,MAEAmvR,GAAoBA,EAAiBtxX,OAAS,GAChD,UAAC,GAAD,CAAwB2wX,kBAAmBW,KAE3C,kBAAKnvR,UAAU,cAAf,WACE,eAAGA,UAAU,qEACb,gBAAIA,UAAU,UAAd,gCACA,eAAGA,UAAU,eAAb,oECtFD,SAASsvR,GAAT,GAIwB,IAAD,UAcXrmK,EAjBzB9nN,EAGoC,EAHpCA,OACAouX,EAEoC,EAFpCA,wBACAC,EACoC,EADpCA,sBAEM56W,EAAWi0J,IACXwgD,EAAU7hD,GAAY,SAAChkK,GAAD,OAC1BgnN,GAA0BhnN,EAAOrC,EAAOomN,YAGpCkoK,EAAe,SAACxmK,EAAiBM,EAAmBz4H,GACxDl8E,EAAS40M,GAAiB,CAAEP,QAAAA,EAASM,UAAAA,EAAWz4H,MAAAA,MAW5C4+R,EAAuB,SAACvuX,GAC5B,OACEA,EAAOoD,OAASmhN,GAAWkB,uBAC3BzlN,EAAOoD,OACLmhN,GAAWiB,0DAIjB,OACE,iBAAK3mH,UAAU,sBAAf,UAEE,kBAAKA,UAAU,gFAAf,WAEE,iBAAKA,UAAU,gBAAf,UACE,UAAC,GAAD,CACE6mI,cAAe,OACfD,cAAe2oJ,EACftoJ,mBAAoB,SAACnoO,GACnB2wX,EAAatuX,EAAOomN,QAASpmN,EAAOqmN,UAAW,CAAEjjN,KAAMzF,KAJ3D,UAOE,UAAC,GAAD,CACE8oO,2BAA2B,6CAC3BC,WAAW,uBACXF,cAAa,oBACX4nJ,EAAwBpiO,MAAK,SAAC55F,GAAD,OAAUA,EAAK5zD,MAAQwB,EAAOoD,eADhD,aACX,EACI+nG,aAFO,QAEEijR,EAAwB,GAAGjjR,aAOhD,iBAAKtM,UAAU,gBAAf,UACE,UAAC,GAAD,CACE6mI,cAAe,OACfD,cAAe4oJ,EACfvoJ,mBAAoB,SAACnoO,GACnB2wX,EAAatuX,EAAOomN,QAASpmN,EAAOqmN,UAAW,CAC7CC,qBAAsB3oN,KAL5B,UASE,UAAC,GAAD,CACE8oO,2BAA2B,6CAC3BC,WAAW,uBACXF,cAAa,oBACX6nJ,EAAsBriO,MACpB,SAAC39H,GAAD,OAAcruB,EAAOsmN,uBAAyBj4L,EAAS7vB,cAF9C,aACX,EAEG2sG,aAHQ,QAGCkjR,EAAsB,GAAGljR,YAO5CojR,EAAqBvuX,KACpB,iBAAK6+F,UAAU,gBAAf,UACE,UAACsyQ,GAAD,CACEx9P,YAAY,aACZnqB,OAAQ,GACR7rF,MAAK,UAAEqC,EAAOxB,WAAT,QAAgB,GACrB6zG,SAAU,SAAC7zG,GAAD,OACR8vX,EAAatuX,EAAOomN,QAASpmN,EAAOqmN,UAAW,CAAE7nN,IAAAA,KAEnDyiU,WAAU,qCAAgCjhU,EAAOqmN,UAAvC,mBAA2DrmN,EAAOomN,cAMlF,iBACEvnH,UAAS,yBAAmB0vR,EAAqBvuX,GAAU,KAD7D,UAGE,UAACmxW,GAAD,CACElwC,WAAU,uCAAkCjhU,EAAOqmN,UAAzC,mBAA6DrmN,EAAOomN,SAC9EzyG,YAAY,eACZnqB,OAAQ,GACR7rF,MAAOqC,EAAOrC,MACd00G,SAAU,SAAC10G,GAAD,OACR2wX,EAAatuX,EAAOomN,QAASpmN,EAAOqmN,UAAW,CAAE1oN,MAAAA,UAKvD,iBAAKkhG,UAAU,+BAAf,UACE,UAAC,GAAD,CACEgL,QAAS,kBA/FGu+G,EA+FgBpoN,EAAOqmN,UA/FJyB,EA+Fe9nN,EAAOomN,aA9F7D3yM,EAAS00M,GAAgB,CAAEL,QAAAA,EAASM,UAAAA,KADjB,IAACA,EAAmBN,GAgG/B5oE,YA5Fe4oE,EA4Fc9nN,EAAOomN,UA3FrC8B,EAAQtoN,QAAO,SAACwyD,GAAD,OAAUA,EAAKg0J,UAAY0B,KAASprN,OAAS,IA4F3DiM,MAAOo4U,GAAYmB,QACnBjhB,WAAU,oCAA+BjhU,EAAOqmN,UAAtC,mBAA0DrmN,EAAOomN,SAC3Eg8H,eAAc,wBACO,IAAnBl6H,EAAQxrN,OAAe,GAAK,wBANhC,UASE,eAAGmiG,UAAU,oDCtHV,SAAS2vR,GAAT,GAIkB,IAH/B78R,EAG8B,EAH9BA,KACA08R,EAE8B,EAF9BA,sBACAD,EAC8B,EAD9BA,wBAEM36W,EAAWi0J,IAEXisC,EAAQttC,GAAY,SAAChkK,GAAD,OAAsBumN,GAAYvmN,MACtD6lN,EAAU7hD,GAAY,SAAChkK,GAAD,OAAsBwmN,GAAkBxmN,MAUpE,OACE,kBAAKw8F,UAAU,6FAAf,WACE,iBAAKA,UAAU,mBAAf,UACE,iBAAKA,UAAU,0BAAf,UACE,UAAC,GAAD,CACEgL,QAAS,kBAbCi+G,EAagBn2H,EAAK/7E,QAZvCnC,EAASo0M,GAAc,CAAEC,QAAAA,KADR,IAACA,GAcV5oE,WAA6B,IAAjBy0D,EAAMj3M,OAClBiM,MAAOo4U,GAAYmB,QACnBjhB,WAAY,GACZmhB,eAAc,8BACK,IAAjBzuI,EAAMj3M,OAAe,GAAK,wBAN9B,UASE,eAAGmiG,UAAU,gDAXoB,UAevC,6BACE,oBAAQgL,QAAS,kBAtBJi+G,EAsBoBn2H,EAAK/7E,QArB1CnC,EAASs0M,GAAc,CAAED,QAAAA,KADT,IAACA,GAsBb,UACE,kBAAMjpH,UAAU,oBAAhB,oCAEDqpH,EACEtoN,QAAO,SAACI,GAAD,OAAYA,EAAOomN,UAAYz0H,EAAK/7E,MAC3CnB,KAAI,SAACzU,GACJ,OACE,UAACmuX,GAAD,CAEEnuX,OAAQA,EACRouX,wBAAyBA,EACzBC,sBAAuBA,GAJzB,iBACiBruX,EAAOomN,QADxB,qBAC4CpmN,EAAOqmN,qBCnCjE,IA+KA,GA3ImC,SAAC,GAGI,IAFtCooK,EAEqC,EAFrCA,yBACAC,EACqC,EADrCA,4BAEMj7W,EAAWi0J,IAEXinN,EAAatoN,GAAY,SAAChkK,GAAD,OAAsBymN,GAAiBzmN,MAChEoxM,EAAcptC,GAAY,SAAChkK,GAAD,OAC9B0mN,GAAkB1mN,MAEdqxM,EAAertC,GAAY,SAAChkK,GAAD,OAC/B2mN,GAAmB3mN,MAEfusX,EAA2BvoN,GAAY,SAAChkK,GAAD,OAC3C4mN,GAAuB5mN,MAEnBwsX,EAAyBxoN,GAAY,SAAChkK,GAAD,OACzC6mN,GAAqB7mN,MAEjBysX,EAAmBzoN,GAAY,SAAChkK,GAAD,OACnC8mN,GAAuB9mN,MAEnBkkN,EAAoBlgD,GAAY,SAAChkK,GAAD,OACpC+mN,GAAwB/mN,MAiC1B,OACE,mCACE,kBAAKw8F,UAAU,YAAf,WACE,mBAAOy0P,QAAQ,cAAcz0P,UAAU,qBAAvC,0BAGA,UAACsyQ,GAAD,CACElwC,WAAW,cACXz3O,OAAQslS,EACR1d,kBApGkB,GAqGlBzzW,MAAOgxX,EACPt8Q,SAAU,SAAC10G,GACT,IAAM6rF,EAtGS,SAACmlS,GAC1B,OAAIA,EAAWjyX,OAHW,EAKjB,CADO,uCAJU,EAIV,eAIZiyX,EAAWjyX,OAPW,GAQjB,CAAC,iCAAD,OARiB,GAQjB,gBAGF,GA4FkBqyX,CAAmBpxX,GArB1C8V,EACE6zM,GAAsC,CAAEC,gCAqBd/9H,KA1C5B/1E,EAASmzM,GAAgC,CAAEC,0BA2CrBlpN,YAIpB,kBAAKkhG,UAAU,YAAf,WACE,mBAAOy0P,QAAQ,eAAez0P,UAAU,qBAAxC,2BAGA,UAACsyQ,GAAD,CACElwC,WAAW,eACXz3O,OAAQ+8H,EACR5oN,MAAO81M,EACP29J,kBAtGmB,GAuGnB/+P,SAAU,SAAC10G,GACT,IAAM6rF,EAvGU,SAACiqH,GAC3B,OAAIA,EAAY/2M,OAlBU,EAmBjB,CAAC,iCAAD,OAJkB,EAIlB,eAGL+2M,EAAY/2M,OArBU,GAsBjB,CAAC,kCAAD,OAPkB,GAOlB,gBAKF,GA4FkBsyX,CAAoBrxX,GA/B3C8V,EAAS+zM,GAA2B,CAAEC,qBAgCTj+H,KAtD7B/1E,EAASqzM,GAAqB,CAAEC,eAuDTppN,YAIrB,kBAAKkhG,UAAU,YAAf,WACE,mBAAOy0P,QAAQ,gBAAgBz0P,UAAU,qBAAzC,4BAGA,UAACsyQ,GAAD,CACElwC,WAAW,gBACXz3O,OAAQ,GACR7rF,MAAK,OAAE+1M,QAAF,IAAEA,EAAAA,EAAgB,GACvBrhG,SAAU,SAAC10G,GA/DjB8V,EAASuzM,GAAsB,CAAEC,gBAgETtpN,YAItB,kBAAKkhG,UAAU,gBAAf,WACE,mBAAOA,UAAU,qBAAjB,gCACA,UAAC,GAAD,CACE6mI,cAAe,OACfD,cAAegpJ,EACf3oJ,mBAAoB,SAACnoO,GACnB,IAAM61M,ErYvFiB,SAACA,GAClC,OAAQA,GACN,IAAK,UACH,OAAOgR,GAAiByqK,QAC1B,IAAK,SACH,OAAOzqK,GAAiByB,OAC1B,QACE,MAAMzjN,MAAM,mDAAD,OAC0CgxM,KqY+EtB07K,CAAoBvxX,GAtErD8V,EAASyzM,GAA0B,CAAEC,oBAuET3T,MALxB,UAQE,UAAC,GAAD,CACEizB,2BAA2B,kDAC3BD,cAAeooJ,UAIrB,kBAAK/vR,UAAU,gBAAf,WACE,mBAAOA,UAAU,qBAAjB,+BACA,UAAC,GAAD,CACE6mI,cAAe,OACfD,cAAeipJ,EACf5oJ,mBAAoB,SAACnoO,GACnB,IAAM01M,ErY1Fe,SAACA,GAChC,OAAQA,GACN,IAAK,SACH,OAAOoR,GAAe0qK,OACxB,IAAK,QACH,OAAO1qK,GAAeyB,MACxB,QACE,MAAM1jN,MAAM,kDAAD,OACyC6wM,KqYkFvB+7K,CAAkBzxX,GAlFjD8V,EAAS2zM,GAAwB,CAAEC,kBAmFThU,MALtB,UAQE,UAAC,GAAD,CACEozB,2BAA2B,kDAC3BD,cAAeqoJ,aC9HdQ,GAAuC,WAAO,IAAD,EAClD57W,EAAWi0J,IACXoqD,EAAWH,KAETz4C,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACFo2M,EAAcjpN,EAAYwQ,IAE1B83M,EAAatoN,GAAY,SAAChkK,GAAD,OAAsBymN,GAAiBzmN,MAChEoxM,EAAcptC,GAAY,SAAChkK,GAAD,OAC9B0mN,GAAkB1mN,MAEdqxM,EAAertC,GAAY,SAAChkK,GAAD,OAC/B2mN,GAAmB3mN,MAEfusX,EAA2BvoN,GAAY,SAAChkK,GAAD,OAC3C4mN,GAAuB5mN,MAEnBwsX,EAAyBxoN,GAAY,SAAChkK,GAAD,OACzC6mN,GAAqB7mN,MAEjBysX,EAAmBzoN,GAAY,SAAChkK,GAAD,OACnC8mN,GAAuB9mN,MAEnBkkN,EAAoBlgD,GAAY,SAAChkK,GAAD,OACpC+mN,GAAwB/mN,MAGpBmxW,EACJsb,EAAiBpyX,OAAS,GAAK6pN,EAAkB7pN,OAAS,EAEtD+xX,GAA2Br+O,EAAAA,EAAAA,UAC/B,kBACE3xI,OAAOoF,OAAO2gN,IAAkB/vM,KAC9B,SAAC++L,GACC,MAAO,CACLh1M,IAAKg1M,EACLroG,MAAOqoG,EACPxoC,SAAU4jN,IAA6Bp7K,QAI/C,CAACo7K,IAGGF,GAA8Bt+O,EAAAA,EAAAA,UAClC,kBACE3xI,OAAOoF,OAAO4gN,IAAgBhwM,KAAsB,SAAC4+L,GACnD,MAAO,CACL70M,IAAK60M,EACLloG,MAAOkoG,EACProC,SAAU6jN,IAA2Bx7K,QAG3C,CAACw7K,IAGGR,EAA4C,CAChD,CACErjN,UAAU,EACVxsK,IAAK8lN,GAAoBjD,OACzBl2G,MAAO,SACPmgE,SAAS,GAEX,CACEN,UAAU,EACVxsK,IAAK8lN,GAAoBU,wBACzB75G,MAAO,2BACPmgE,SAAS,GAEX,CACEN,UAAU,EACVxsK,IAAK8lN,GAAoBQ,SACzB35G,MAAO,WACPmgE,SAAS,GAEX,CACEN,UAAU,EACVxsK,IAAK8lN,GAAoBS,iBACzB55G,MAAO,mBACPmgE,SAAS,IAIPikN,EAAoBlpN,EAAYsiD,IAEhCylK,GAA8Ch+O,EAAAA,EAAAA,UAAQ,WAC1D,OAAOm/O,EAAkB96W,KAAI,SAACrR,GAAD,MAAW,CACtC5E,IAAK4E,EACL+nG,MAAO/nG,EACP4nK,UAAU,QAEX,CAACukN,IAEEC,GAAkD,eACrDn4M,GAAO4F,MAAQ,QADsC,SAErD5F,GAAOquC,KAAO,eAFuC,GAKlDe,EAAuBpgD,EAAYqiD,IAEnC+mK,EAA0BhpK,EAC5B+oK,EAA2B/oK,GAC3B,GAEEipK,EAAWrpN,GAAY,SAAChkK,GAAD,OAAsBumN,GAAYvmN,MACzDstX,EAAatpN,GAAY,SAAChkK,GAAD,OAC7BwmN,GAAkBxmN,MAOdutX,EAAc,WAClB,IAAkCpxX,EAc5Bm1M,EAA+B,GAE/Bk8K,GAhB4BrxX,EAgBS,UAAZmxX,EAfhBl5W,QAAO,SAACpS,EAAQ+tD,GAC3B,IAAM09T,EAAW19T,EAAK5zD,GAQtB,OANK6F,EAAOyrX,KACVzrX,EAAOyrX,GAAY,IAGrBzrX,EAAOyrX,GAAUzwX,KAAK+yD,GAEf/tD,IACN,KAqBL,OAdA5F,OAAOoF,OAAOgsX,GAAa1vX,SAAQ,SAACg9T,GAClCxpH,EAAMt0M,KAAK,CACTiyC,SAAUpC,SAASiuR,EAAM,GAAG/2G,SAC5B8B,QAASi1G,EAAM1oT,KAAI,SAAC29C,GAAsB,IAAD,EACvC,MAAO,CACL5zD,IAAG,UAAE4zD,EAAK5zD,WAAP,QAAc,KACjBb,MAAOy0D,EAAKz0D,MACZyF,KAAMgvD,EAAKhvD,KACX2sX,oBAAqB39T,EAAKk0J,8BAM3B3S,GAGFP,EAAP,GAAmCqB,KAAnC,MACA,MAAsClkE,EAAAA,EAAAA,WAAS,GAA/C,GAAOsjO,EAAP,KAAiBC,EAAjB,KAUMkc,EAA0B,+BAAG,8FAC3Br8K,EAAQi8K,IACd9b,GAAkB,GAFe,kBAKzB1gK,EAAyB,CAC7Bp2B,SAAUypC,EACVvtC,OAAAA,EACAm6B,eAAgBw7K,EAChB1oX,KAAMwoX,EACNr7K,iBAAiB,IAAIt3L,MAAOu+D,cAC5Bg5H,UAAW+7K,EAAYt4M,MACvBw8B,iBAAkBo7K,EAClBn7K,YAAAA,EACAC,aAAAA,EACAC,MAAAA,IACC7rL,SAhB4B,OAkB/BrU,EACE2xC,GAAU,CACR2pJ,MAAO,8BACPz6L,YAAa,4DAIjBw9M,EAAS,iCAzBsB,gDA2BzBm+J,EAAgB,KAAMv+W,KACzB+C,KAAI,SAAC29C,GAAD,OAAeA,EAAK89T,gBACxBj1V,KAAK,MAERxnB,EACEoiB,GAAQ,CACNk5K,MAAO,2CACPz6L,YAAa27W,KAlCc,yBAsC/Bnc,GAAkB,GAtCa,4EAAH,qDA6ChC,OA1OyB,SAAC6a,GACtBA,EAAWjyX,OAHW,EAIV,uCAJU,EAIV,cAIZiyX,EAAWjyX,OAPW,IAQhB,iCAAD,OARiB,GAQjB,eAgOTqyX,CAAmBJ,GAxNO,SAACl7K,GACvBA,EAAY/2M,OAlBU,EAmBhB,iCAAD,OAJkB,EAIlB,cAGL+2M,EAAY/2M,OArBU,IAsBhB,kCAAD,OAPkB,GAOlB,eAmNTsyX,CAAoBv7K,IAGlB,UAAC,GAAD,WACE,UAAC,GAAD,CAA2B50G,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,iBAAIA,UAAU,gFAAd,iBACO4wR,EADP,eAGA,kBAAK5wR,UAAU,yCAAf,WACE,iBAAKA,UAAU,qFAAf,UACE,UAAC,GAAD,CACE4vR,yBAA0BA,EAC1BC,4BAA6BA,OAGjC,kBAAK7vR,UAAU,uBAAf,WACE,mBAAOy0P,QAAQ,cAAcz0P,UAAU,qBAAvC,oBAGA,kBAAKA,UAAU,sBAAf,UACG6wR,EAASj7W,KAAI,SAACk9E,GACb,OACE,UAAC68R,GAAD,CAEE78R,KAAMA,EACN08R,sBAAuBA,EACvBD,wBAAyBA,GAHpBz8R,EAAK/7E,QAOhB,iBAAKipF,UAAU,gBAAf,UACE,UAAC,GAAD,CACEl2F,MAAOo4U,GAAYY,UACnB1gB,WAAW,eACX55S,WAAW,EACXwiF,QAlIF,WACdp2F,EAASi0M,OA6HK,UAME,2DAMV,kBAAK7oH,UAAU,kBAAf,WACE,UAAC,GAAD,CACEl2F,MAAOo4U,GAAYc,QACnB5gB,WAAW,6BACXp3N,QAASmmR,EACT3oW,UAAWwsV,EACX30N,YAAas0N,EALf,UAOE,yCAGF,UAACtE,GAAD,CACEvmW,MAAOo4U,GAAYa,OACnB3gB,WAAW,2BACXv2T,GAAG,gCACH03U,eAAe,oBAJjB,UAME,mDC5RD+tC,GAAqC,WAAO,IAAD,EAChD18W,EAAWi0J,IACXoqD,EAAWH,KACTy+J,EAAyBn+J,KAAzBm+J,qBAEAl3M,EAAW7S,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAnDxG,OACFo2M,EAAcjpN,EAAYwQ,IAE1B4vC,EAAuBpgD,EAAYqiD,IAEzC,EACEvpC,GAA8B,CAC5BjG,OAAAA,EACA4D,SAAQ,OAAEszM,QAAF,IAAEA,EAAAA,EAAwB,GAClCpzM,SAAUypC,IAJA4pK,EAAd,EAAQ3+W,KAAgC2V,EAAxC,EAAwCA,WAOxC2oH,EAAAA,EAAAA,YAAU,WACR,GAAIqgP,IAA6BhpW,EAAW,CAC1C,IAAMssL,EAAQlmM,KAAKC,MAAM2iX,EAAyB18K,OAElDlgM,EACEmzM,GAAgC,CAC9BC,0BAA2BwpK,EAAyBlqX,QAGxDsN,EACEqzM,GAAqB,CACnBC,eAAgBspK,EAAyB58K,eAG7ChgM,EACEuzM,GAAsB,CACpBC,gBAAiBopK,EAAyB38K,gBAG9CjgM,EACEyzM,GAA0B,CACxBC,oBAAqBkpK,EAAyB/C,wBAGlD75W,EACE2zM,GAAwB,CACtBC,kBAAmBgpK,EAAyB9C,sBAGhD95W,EACEm0M,GAAe,CACbjU,MAAOA,EAAMl/L,KAAI,SAAC4J,EAAQiyW,GACxB,MAAO,CAAE16W,GAAI06W,EAAY,SAI/B,IAAMnqK,EAAcxS,EAAM9+C,SAAQ,SAACljE,EAAW2+R,GAAZ,OAChC3+R,EAAK4+R,QAAQ97W,KAAI,SAACzU,EAAawwX,GAC7BjiX,QAAQuhH,IAAI9vH,GACZ,IAAIxB,EAAM,GACNb,EAAQ,GACN8yX,EvYKa,SAACA,GAC5B,OAAQA,GACN,IAAK,YACH,OAAOlsK,GAAW5sC,WACpB,IAAK,YACH,OAAO4sC,GAAWa,WACpB,IAAK,mBACH,OAAOb,GAAWc,mBACpB,IAAK,aACH,OAAOd,GAAWe,YACpB,IAAK,qBACH,OAAOf,GAAWgB,sBACpB,IAAK,cACH,OAAOhB,GAAW7sC,aACpB,IAAK,eACH,OAAO6sC,GAAWmsK,cACpB,IAAK,kDACH,OAAOnsK,GAAWiB,yDACpB,IAAK,qBACH,OAAOjB,GAAWkB,sBACpB,IAAK,2CACH,OAAOlB,GAAWosK,gDACpB,IAAK,6CACH,OAAOpsK,GAAWqsK,kDACpB,IAAK,aACH,OAAOrsK,GAAWoB,YACpB,IAAK,eACH,OAAOpB,GAAWqB,cACpB,IAAK,YACH,OAAOrB,GAAWsB,WACpB,IAAK,YACH,OAAOtB,GAAWuB,WACpB,IAAK,iCACH,OAAOvB,GAAWwB,kCACpB,QACE,MAAM,IAAIvjN,MAAJ,oDACyCiuX,KuYzCxBI,CAAc7wX,EAAO8wX,MASxC,OAPIvC,EAAqBkC,IACvBjyX,EAAMwB,EAAO+wX,IACbpzX,EAAQqC,EAAO+tW,OAEfpwW,EAAQqC,EAAO+tW,MAGV,CACL3nJ,QAASkqK,EAAY,EACrBjqK,UAAWmqK,EAAc,EACzBptX,KAAMqtX,EACNjyX,IAAAA,EACAb,MAAAA,EACA2oN,qBAAsBzB,GACpB7kN,EAAOskN,4BAKf7wM,EAAS60M,GAAqB,CAAEnC,YAAAA,QAEjC,CAACkqK,EAA0BhpW,EAAW5T,IAEzC,IAAMi8W,EAAWrpN,GAAY,SAAChkK,GAAD,OAAsBumN,GAAYvmN,MACzDstX,EAAatpN,GAAY,SAAChkK,GAAD,OAC7BwmN,GAAkBxmN,MAOdssX,EAAatoN,GAAY,SAAChkK,GAAD,OAAsBymN,GAAiBzmN,MAChEoxM,EAAcptC,GAAY,SAAChkK,GAAD,OAC9B0mN,GAAkB1mN,MAEdqxM,EAAertC,GAAY,SAAChkK,GAAD,OAC/B2mN,GAAmB3mN,MAEfusX,EAA2BvoN,GAAY,SAAChkK,GAAD,OAC3C4mN,GAAuB5mN,MAEnBwsX,EAAyBxoN,GAAY,SAAChkK,GAAD,OACzC6mN,GAAqB7mN,MAEjBysX,EAAmBzoN,GAAY,SAAChkK,GAAD,OACnC8mN,GAAuB9mN,MAEnBkkN,EAAoBlgD,GAAY,SAAChkK,GAAD,OACpC+mN,GAAwB/mN,MAGpBosX,GAA2Br+O,EAAAA,EAAAA,UAC/B,kBACE3xI,OAAOoF,OAAO2gN,IAAkB/vM,KAC9B,SAAC++L,GACC,MAAO,CACLh1M,IAAKg1M,EACLroG,MAAOqoG,EACPxoC,SAAU4jN,IAA6Bp7K,QAI/C,CAACo7K,IAGGF,GAA8Bt+O,EAAAA,EAAAA,UAClC,kBACE3xI,OAAOoF,OAAO4gN,IAAgBhwM,KAAsB,SAAC4+L,GACnD,MAAO,CACL70M,IAAK60M,EACLloG,MAAOkoG,EACProC,SAAU6jN,IAA2Bx7K,QAG3C,CAACw7K,IAGGR,EAA4C,CAChD,CACErjN,UAAU,EACVxsK,IAAK8lN,GAAoBjD,OACzBl2G,MAAO,SACPmgE,SAAS,GAEX,CACEN,UAAU,EACVxsK,IAAK8lN,GAAoBU,wBACzB75G,MAAO,2BACPmgE,SAAS,GAEX,CACEN,UAAU,EACVxsK,IAAK8lN,GAAoBQ,SACzB35G,MAAO,WACPmgE,SAAS,GAEX,CACEN,UAAU,EACVxsK,IAAK8lN,GAAoBS,iBACzB55G,MAAO,mBACPmgE,SAAS,IAIPikN,EAAoBlpN,EAAYsiD,IAEhCylK,GAA8Ch+O,EAAAA,EAAAA,UAAQ,WAC1D,OAAOm/O,EAAkB96W,KAAI,SAACrR,GAAD,MAAW,CACtC5E,IAAK4E,EACL+nG,MAAO/nG,EACP4nK,UAAU,QAEX,CAACukN,IAEE/b,EACJsb,EAAiBpyX,OAAS,GAAK6pN,EAAkB7pN,OAAS,EAEtD6xX,EAAuB,SAACkC,GAC5B,OACEA,IAAelsK,GAAWkB,uBAC1BgrK,IACElsK,GAAWiB,0DAIXoqK,EAAc,WAClB,IAAkCpxX,EAc5Bm1M,EAA+B,GAE/Bk8K,GAhB4BrxX,EAgBS,UAAZmxX,EAfhBl5W,QAAO,SAACpS,EAAQ+tD,GAC3B,IAAM09T,EAAW19T,EAAK5zD,GAQtB,OANK6F,EAAOyrX,KACVzrX,EAAOyrX,GAAY,IAGrBzrX,EAAOyrX,GAAUzwX,KAAK+yD,GAEf/tD,IACN,KAqBL,OAdA5F,OAAOoF,OAAOgsX,GAAa1vX,SAAQ,SAACg9T,GAClCxpH,EAAMt0M,KAAK,CACTiyC,SAAUpC,SAASiuR,EAAM,GAAG/2G,SAC5B8B,QAASi1G,EAAM1oT,KAAI,SAAC29C,GAAsB,IAAD,EACvC,MAAO,CACL5zD,IAAG,UAAE4zD,EAAK5zD,WAAP,QAAc,KACjBb,MAAOy0D,EAAKz0D,MACZyF,KAAMgvD,EAAKhvD,KACX2sX,oBAAqB39T,EAAKk0J,8BAM3B3S,GAGH67K,GAAkD,eACrDn4M,GAAO4F,MAAQ,QADsC,SAErD5F,GAAOquC,KAAO,eAFuC,GAKlD+pK,EAA0BhpK,EAC5B+oK,EAA2B/oK,GAC3B,GAEG7S,EAAP,GAAmCc,KAAnC,MACA,MAAsCnkE,EAAAA,EAAAA,WAAS,GAA/C,GAAOsjO,EAAP,KAAiBC,EAAjB,KAEMkd,EAA0B,+BAAG,0FAC3Br9K,EAAQi8K,IAETQ,EAH4B,wDAOjCtc,GAAkB,GAPe,kBAUzBlgK,EAAyB,CAC7B52B,SAAUypC,EACV7wM,GAAIw6W,EACJl3M,OAAAA,EACAm6B,eAAgBw7K,EAChB1oX,KAAMwoX,EACN96K,iBAAiB,IAAI73L,MAAOu+D,cAC5Bu5H,UAAWw7K,EAAYt4M,MACvBw8B,iBAAkBo7K,EAClBn7K,YAAAA,EACAC,aAAAA,EACAC,MAAAA,IACC7rL,SAtB4B,OAwB/BgsV,GAAkB,GAElBrgW,EACE2xC,GAAU,CACR2pJ,MAAO,8BACPz6L,YAAa,4DAIjBw9M,EAAS,iCAjCsB,kDAmC/BgiJ,GAAkB,GAEZmc,EAAgB,KAAMv+W,KACzB+C,KAAI,SAAC29C,GAAD,OAAeA,EAAK89T,gBACxBj1V,KAAK,MAERxnB,EACEoiB,GAAQ,CACNk5K,MAAO,2CACPz6L,YAAa27W,KA5Cc,0DAAH,qDAkDhC,OACE,UAAC,GAAD,WACE,UAAC,GAAD,CAA2BpxR,UAAU,oFAArC,UACE,sBAASA,UAAU,YAAnB,WACE,iBAAIA,UAAU,+EAAd,kBACQ4wR,EADR,cAICpoW,GACC,iBAAKw3E,UAAU,4BAAf,UACE,UAAC,GAAD,OAGF,mCACE,kBAAKA,UAAU,yCAAf,WACE,iBAAKA,UAAU,qFAAf,UACE,UAAC,GAAD,CACE4vR,yBAA0BA,EAC1BC,4BAA6BA,OAGjC,kBAAK7vR,UAAU,uBAAf,WACE,mBAAOy0P,QAAQ,cAAcz0P,UAAU,qBAAvC,oBAGA,kBAAKA,UAAU,sBAAf,UACG6wR,GAAYC,EACXD,EAASj7W,KAAI,SAACk9E,GAAD,OACX,UAAC68R,GAAD,CAEE78R,KAAMA,EACN08R,sBAAuBA,EACvBD,wBAAyBA,GAJ3B,iBACiBz8R,EAAK/7E,SAOxB,6CAEF,iBAAKipF,UAAU,gBAAf,UACE,UAAC,GAAD,CACEl2F,MAAOo4U,GAAYY,UACnB1gB,WAAW,eACX55S,WAAW,EACXwiF,QA/ON,WACdp2F,EAASi0M,OA0OS,UAME,2DAMV,kBAAK7oH,UAAU,kBAAf,WACE,UAAC,GAAD,CACEl2F,MAAOo4U,GAAYc,QACnB5gB,WAAW,6BACXp3N,QAASmnR,EACT3pW,UAAWwsV,EACX30N,YAAas0N,EALf,UAOE,yCAGF,iBAAK30Q,UAAU,OAAf,UACE,UAACqwQ,GAAD,CACEvmW,MAAOo4U,GAAYa,OACnB3gB,WAAW,2BACXv2T,GAAG,gCACH03U,eAAe,oBAJjB,UAME,wDCnOpB,GA/HsB,WACpB,IAAQ9iK,EAAcjZ,GAAY,SAAChkK,GAAD,OAAsBA,EAAMq9K,gBAAtDJ,UACF03H,EAAiC3wI,GAAY,SAAChkK,GAAD,OACjD49M,GAAkB59M,EAAO67M,GAAWwB,sBAGhCuxK,EAA8C,WAClD,OACE,kBAAKpyR,UAAU,wCAAf,UACiC,OAA9Bm4M,QAA8B,IAA9BA,GAAAA,EAAgCvnM,SAC/B,UAAC,GAAD,KAEA,UAAC,GAAD,KAEF,UAAC,GAAD,IAEe,KAAd6vE,GACC,mCACE,UAACi1K,GAAD,KACA,UAAC,GAAD,KACA,iBAAK11P,UAAU,mBAGjB,qBAEF,iBAAKA,UAAU,8BAAf,UACE,UAAC,GAAD,UAQR,OCjEA4rM,GAAAA,SACE/K,GACAiC,GACA7R,GACAjC,GACAW,GACA0iG,GACAh6F,GACAqE,GACAxH,GACAwO,GACAp5B,GACAlF,GACAunB,KDqDA,UAAC33D,GAAD,WACE,WAACT,GAAD,YACE,UAACX,GAAD,CAAO9vM,KAAK,SAASkgC,SAAS,UAAC,GAAD,OAC9B,UAAC4vK,GAAD,CACE9vM,KAAK,gCACLkgC,SAAS,UAACmpU,GAAD,OAEX,UAACv5J,GAAD,CAAO9vM,KAAK,IAAIkgC,SAAS,UAAC6wS,GAAD,IAAzB,UACE,WAACjhI,GAAD,CAAO9vM,KAAK,IAAIkgC,SAAS,UAACouU,EAAD,IAAzB,WACE,UAACx+J,GAAD,CAAOpjL,OAAK,EAACwT,SAAS,UAAC,GAAD,OACtB,UAAC4vK,GAAD,CAAO9vM,KAAK,YAAYkgC,SAAS,UAAC,GAAD,OACjC,UAAC4vK,GAAD,CAAO9vM,KAAK,mBAAmBkgC,SAAS,UAAC,GAAD,OACxC,UAAC4vK,GAAD,CAAO9vM,KAAK,sBAAsBkgC,SAAS,UAAC6qS,GAAD,OAE3C,WAACj7H,GAAD,CAAO9vM,KAAK,cAAZ,WACE,UAAC8vM,GAAD,CAAO9vM,KAAK,OAAOkgC,SAAS,UAAC,GAAD,OAC5B,UAAC4vK,GAAD,CAAO9vM,KAAK,QAAQkgC,SAAS,UAAC,GAAD,OAC7B,UAAC4vK,GAAD,CAAO9vM,KAAK,aAAakgC,SAAS,UAAC,GAAD,OAClC,UAAC4vK,GAAD,CAAO9vM,KAAK,cAAckgC,SAAS,UAAC,GAAD,UAGrC,UAAC4vK,GAAD,CAAO9vM,KAAK,sBAAsBkgC,SAAS,UAAC,GAAD,OAC3C,UAAC4vK,GAAD,CAAO9vM,KAAK,UAAUkgC,SAAS,UAAC,GAAD,OAC/B,UAAC4vK,GAAD,CAAO9vM,KAAK,gBAAgBkgC,SAAS,UAAC,GAAD,OACrC,UAAC4vK,GAAD,CAAO9vM,KAAK,QAAQkgC,SAAS,UAAC67T,GAAD,OAC7B,UAACjsJ,GAAD,CAAO9vM,KAAK,WAAZ,UACE,UAAC8vM,GAAD,CACE9vM,KAAK,uBACLkgC,SAAS,UAAC,GAAD,SAGb,UAAC4vK,GAAD,CAAO9vM,KAAK,aAAakgC,SAAS,UAACs3T,GAAD,OAClC,UAAC1nJ,GAAD,CACE9vM,KAAK,sBACLkgC,SAAS,UAACu3T,GAAD,OAEX,UAAC3nJ,GAAD,CAAO9vM,KAAK,OAAOkgC,SAAS,UAACw3T,GAAD,OAC5B,WAAC5nJ,GAAD,CAAO9vM,KAAK,WAAZ,WACE,UAAC8vM,GAAD,CAAO9vM,KAAK,UAAUkgC,SAAS,UAAC4oT,GAAD,OAC/B,UAACh5I,GAAD,CAAO9vM,KAAK,UAAUkgC,SAAS,UAACosT,GAAD,OAC/B,UAACx8I,GAAD,CAAO9vM,KAAK,WAAWkgC,SAAS,UAACmuT,GAAD,OAChC,UAACv+I,GAAD,CACE9vM,KAAK,kBACLkgC,SAAS,UAACsvT,GAAD,OAEX,UAAC1/I,GAAD,CACE9vM,KAAK,8BACLkgC,SAAS,UAAC,GAAD,OAEX,UAAC4vK,GAAD,CAAO9vM,KAAK,aAAakgC,SAAS,UAACi4T,GAAD,OAClC,UAACroJ,GAAD,CACE9vM,KAAK,oBACLkgC,SAAS,UAACw4T,GAAD,OAEX,UAAC5oJ,GAAD,CACE9vM,KAAK,qBACLkgC,SAAS,UAACizT,GAAD,OAEX,WAACrjJ,GAAD,CAAO5vK,SAAS,UAACu8T,GAAD,IAAhB,WACE,UAAC3sJ,GAAD,CACE9vM,KAAK,sBACLkgC,SAAS,UAAC,GAAD,OAEX,UAAC4vK,GAAD,CACE9vM,KAAK,6BACLkgC,SAAS,UAACwsU,GAAD,OAEX,UAAC58J,GAAD,CACE9vM,KAAK,iDACLkgC,SAAS,UAACstU,GAAD,UAGb,UAAC19J,GAAD,CAAO5vK,SAAS,UAAC,GAAD,IAAhB,UACE,UAAC4vK,GAAD,CAAO9vM,KAAK,WAAWkgC,SAAS,UAAC08T,GAAD,YAGpC,WAAC9sJ,GAAD,CAAO9vM,KAAK,0BAA0BkgC,SAAS,UAACu8T,GAAD,IAA/C,WACE,UAAC3sJ,GAAD,CAAO9vM,KAAK,eAAekgC,SAAS,UAAC,GAAD,OACpC,UAAC4vK,GAAD,CACE9vM,KAAK,mBACLkgC,SAAS,UAAC,GAAD,UAIb,UAAC4vK,GAAD,CAAO9vM,KAAK,IAAIkgC,SAAS,UAAC,GAAD,iBExKrC,SAAShiD,GAAQtC,GAAwT,OAAtOsC,GAArD,oBAAXxD,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBiB,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXlB,QAAyBkB,EAAI2H,cAAgB7I,QAAUkB,IAAQlB,OAAOqD,UAAY,gBAAkBnC,GAAiBsC,GAAQtC,GAExV,SAASonD,GAAgBx0B,EAAUy0B,GAAe,KAAMz0B,aAAoBy0B,GAAgB,MAAM,IAAI7nD,UAAU,qCAEhH,SAAS2xF,GAAkB1vF,EAAQ2vF,GAAS,IAAK,IAAIhzF,EAAI,EAAGA,EAAIgzF,EAAMjzF,OAAQC,IAAK,CAAE,IAAIo6C,EAAa44C,EAAMhzF,GAAIo6C,EAAWp4C,WAAao4C,EAAWp4C,aAAc,EAAOo4C,EAAWn4C,cAAe,EAAU,UAAWm4C,IAAYA,EAAWl4C,UAAW,GAAMJ,OAAOC,eAAesB,EAAQ+2C,EAAWv4C,IAAKu4C,IAI7S,SAAS4xD,GAA2B/mG,EAAMzD,GAAQ,OAAIA,GAA2B,WAAlB0C,GAAQ1C,IAAsC,oBAATA,EAA8CixG,GAAuBxtG,GAAtCzD,EAEnI,SAAS+wG,GAAgBhyG,GAAwJ,OAAnJgyG,GAAkBzwG,OAAO4H,eAAiB5H,OAAOkF,eAAiB,SAAyBzG,GAAK,OAAOA,EAAEoJ,WAAa7H,OAAOkF,eAAezG,IAAcgyG,GAAgBhyG,GAExM,SAASkyG,GAAuBxtG,GAAQ,QAAa,IAATA,EAAmB,MAAM,IAAI8mG,eAAe,6DAAgE,OAAO9mG,EAI/J,SAASs5F,GAAgBh+F,EAAG6/B,GAA+G,OAA1Gm+D,GAAkBz8F,OAAO4H,gBAAkB,SAAyBnJ,EAAG6/B,GAAsB,OAAjB7/B,EAAEoJ,UAAYy2B,EAAU7/B,GAAag+F,GAAgBh+F,EAAG6/B,GAErK,SAAS2xE,GAAgBnwG,EAAKC,EAAKb,GAAiK,OAApJa,KAAOD,EAAOE,OAAOC,eAAeH,EAAKC,EAAK,CAAEb,MAAOA,EAAOgB,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBN,EAAIC,GAAOb,EAAgBY,EAIpM,IAAI4yX,GAEX,SAAU7hR,GAGR,SAAS6hR,IACP,IAAIC,EAEA9nW,EAEJq8B,GAAgBliD,KAAM0tX,GAEtB,IAAK,IAAIn6T,EAAO/2D,UAAUvD,OAAQuQ,EAAO,IAAIpQ,MAAMm6D,GAAOlB,EAAO,EAAGA,EAAOkB,EAAMlB,IAC/E7oD,EAAK6oD,GAAQ71D,UAAU61D,GAkCzB,OA7BA44C,GAAgBU,GAFhB9lF,EAAQq/E,GAA2BllG,MAAO2tX,EAAmBliR,GAAgBiiR,IAAchzX,KAAK4B,MAAMqxX,EAAkB,CAAC3tX,MAAM6I,OAAOW,MAEvF,QAAS,CACtDu9J,cAAc,IAGhB97D,GAAgBU,GAAuB9lF,GAAQ,oBAAgB,GAE/DolF,GAAgBU,GAAuB9lF,GAAQ,wBAAwB,WACrDA,EAAMqmE,MAAMw9H,UAEQx+M,WACG67J,eAGjClhJ,EAAMqmE,MAAM0hS,aACd5qX,QAAQtC,QAAQmlB,EAAMqmE,MAAM0hS,gBAAgB/iB,SAAQ,WAClD,OAAOhlV,EAAM2mF,SAAS,CACpBu6D,cAAc,OAIlBlhJ,EAAM2mF,SAAS,CACbu6D,cAAc,IAIlBlhJ,EAAMgoW,cAAgBhoW,EAAMgoW,mBAIzBhoW,EA/DX,IAAsBs8B,EAAaysC,EAAYC,EA4F7C,OApFF,SAAmBoJ,EAAUC,GAAc,GAA0B,oBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAI59F,UAAU,sDAAyD29F,EAASh7F,UAAYjC,OAAOwD,OAAO05F,GAAcA,EAAWj7F,UAAW,CAAEwF,YAAa,CAAEvI,MAAO+9F,EAAU78F,UAAU,EAAMD,cAAc,KAAe+8F,GAAYT,GAAgBQ,EAAUC,GAWjXiN,CAAUuoR,EAAa7hR,GAnBH1pD,EAkEPurU,GAlEoB9+R,EAkEP,CAAC,CACzB7zF,IAAK,oBACLb,MAAO,WACL8F,KAAK6tX,aAAe7tX,KAAKksF,MAAMw9H,UAAUhsM,UAAU1d,KAAK8tX,sBACxD9tX,KAAK8tX,yBAEN,CACD/yX,IAAK,uBACLb,MAAO,WACL8F,KAAK6tX,cAAgB7tX,KAAK6tX,iBAE3B,CACD9yX,IAAK,SACLb,MAAO,WAKL,MAAmC,oBAAxB8F,KAAKksF,MAAMya,SACb3mG,KAAKksF,MAAMya,SAAS3mG,KAAKpB,MAAMmoK,cAGjC/mK,KAAKpB,MAAMmoK,aAAe/mK,KAAKksF,MAAMya,SAAW3mG,KAAKksF,MAAMplF,aAxFMmlF,GAAkB9pC,EAAYllD,UAAW2xF,GAAiBC,GAAa5C,GAAkB9pC,EAAa0sC,GA4F3K6+R,EA1ET,CA2EE15Q,EAAAA,eAEF/I,GAAgByiR,GAAa,eAAgB,CAC3C/mR,SAAU,KACV7/F,QAAS,OCjGXyJ,SAAS4tP,KACNn+M,YAAYzvC,SAASmvC,cAAc,SACnCogE,aAAa,OAAQ,KAEXiuQ,EAAAA,EACXx9W,SAAS6uQ,eAAe,SAGrBzsO,QACH,UAAC,EAAD,CAAUoX,MAAOA,GAAjB,UACE,UAAC2jU,GAAD,CAAa5mX,QAAS,KAAM4iN,UAAWA,GAAvC,UACE,UAAC,GAAD,SAKe,CAAC,aAAc,WACnBz0M,SAASqb,gBACxBxlB,QAAQuhH,IAAM,aACdvhH,QAAQ9J,MAAQ,aAChB8J,QAAQk6J,MAAQ","sources":["../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/@babel/runtime/helpers/iterableToArray.js","../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/nonIterableRest.js","../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/objectSpread2.js","../node_modules/@babel/runtime/helpers/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/regeneratorRuntime.js","../node_modules/@babel/runtime/helpers/slicedToArray.js","../node_modules/@babel/runtime/helpers/toArray.js","../node_modules/@babel/runtime/helpers/toConsumableArray.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","tailwind.config.js","../node_modules/@reduxjs/toolkit/src/query/core/apiState.ts","../node_modules/@reduxjs/toolkit/src/query/index.ts","../node_modules/@reduxjs/toolkit/src/query/utils/flatten.ts","../node_modules/@reduxjs/toolkit/src/query/utils/copyWithStructuralSharing.ts","../node_modules/@reduxjs/toolkit/src/query/fetchBaseQuery.ts","../node_modules/@reduxjs/toolkit/src/query/utils/joinUrls.ts","../node_modules/@reduxjs/toolkit/src/query/utils/isAbsoluteUrl.ts","../node_modules/@reduxjs/toolkit/src/query/HandledError.ts","../node_modules/@reduxjs/toolkit/src/query/retry.ts","../node_modules/@reduxjs/toolkit/src/query/core/setupListeners.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildSelectors.ts","../node_modules/@reduxjs/toolkit/src/query/endpointDefinitions.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildSlice.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildThunks.ts","../node_modules/@reduxjs/toolkit/src/query/defaultSerializeQueryArgs.ts","../node_modules/@reduxjs/toolkit/src/query/createApi.ts","../node_modules/@reduxjs/toolkit/src/query/fakeBaseQuery.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/index.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheCollection.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/polling.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/windowEventHandling.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/devMiddleware.ts","../node_modules/@reduxjs/toolkit/src/query/tsHelpers.ts","../node_modules/@reduxjs/toolkit/src/query/core/module.ts","../node_modules/@reduxjs/toolkit/src/query/utils/isOnline.ts","../node_modules/@reduxjs/toolkit/src/query/utils/isDocumentVisible.ts","../node_modules/@reduxjs/toolkit/src/query/core/buildInitiate.ts","../node_modules/@reduxjs/toolkit/src/query/core/index.ts","../node_modules/redux-thunk/es/index.js","../node_modules/@reduxjs/toolkit/src/createDraftSafeSelector.ts","../node_modules/@reduxjs/toolkit/src/devtoolsExtension.ts","../node_modules/@reduxjs/toolkit/src/isPlainObject.ts","../node_modules/@reduxjs/toolkit/src/utils.ts","../node_modules/@reduxjs/toolkit/src/immutableStateInvariantMiddleware.ts","../node_modules/@reduxjs/toolkit/src/serializableStateInvariantMiddleware.ts","../node_modules/@reduxjs/toolkit/src/getDefaultMiddleware.ts","../node_modules/@reduxjs/toolkit/src/configureStore.ts","../node_modules/@reduxjs/toolkit/src/createAction.ts","../node_modules/@reduxjs/toolkit/src/mapBuilders.ts","../node_modules/@reduxjs/toolkit/src/createReducer.ts","../node_modules/@reduxjs/toolkit/src/createSlice.ts","../node_modules/@reduxjs/toolkit/src/entities/state_adapter.ts","../node_modules/@reduxjs/toolkit/src/entities/utils.ts","../node_modules/@reduxjs/toolkit/src/entities/unsorted_state_adapter.ts","../node_modules/@reduxjs/toolkit/src/entities/create_adapter.ts","../node_modules/@reduxjs/toolkit/src/entities/entity_state.ts","../node_modules/@reduxjs/toolkit/src/entities/state_selectors.ts","../node_modules/@reduxjs/toolkit/src/entities/sorted_state_adapter.ts","../node_modules/@reduxjs/toolkit/src/nanoid.ts","../node_modules/@reduxjs/toolkit/src/createAsyncThunk.ts","../node_modules/@reduxjs/toolkit/src/tsHelpers.ts","../node_modules/@reduxjs/toolkit/src/matchers.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/utils.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/exceptions.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/task.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/index.ts","../node_modules/@reduxjs/toolkit/src/index.ts","../node_modules/classnames/index.js","../node_modules/color-name/index.js","../node_modules/cssesc/cssesc.js","../node_modules/date-fns/esm/_lib/format/longFormatters/index.js","../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","../node_modules/date-fns/esm/_lib/getUTCWeek/index.js","../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","../node_modules/date-fns/esm/_lib/protectedTokens/index.js","../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","../node_modules/date-fns/esm/_lib/toInteger/index.js","../node_modules/date-fns/esm/addDays/index.js","../node_modules/date-fns/esm/addMonths/index.js","../node_modules/date-fns/esm/addYears/index.js","../node_modules/date-fns/esm/differenceInCalendarDays/index.js","../node_modules/date-fns/esm/differenceInCalendarMonths/index.js","../node_modules/date-fns/esm/differenceInDays/index.js","../node_modules/date-fns/esm/eachDayOfInterval/index.js","../node_modules/date-fns/esm/endOfDay/index.js","../node_modules/date-fns/esm/endOfMonth/index.js","../node_modules/date-fns/esm/endOfWeek/index.js","../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","../node_modules/date-fns/esm/_lib/format/formatters/index.js","../node_modules/date-fns/esm/format/index.js","../node_modules/date-fns/esm/isAfter/index.js","../node_modules/date-fns/esm/isBefore/index.js","../node_modules/date-fns/esm/isEqual/index.js","../node_modules/date-fns/esm/isSameDay/index.js","../node_modules/date-fns/esm/isSameMonth/index.js","../node_modules/date-fns/esm/isDate/index.js","../node_modules/date-fns/esm/isValid/index.js","../node_modules/date-fns/esm/isWeekend/index.js","../node_modules/date-fns/esm/isWithinInterval/index.js","../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../node_modules/date-fns/esm/locale/en-US/index.js","../node_modules/date-fns/esm/max/index.js","../node_modules/date-fns/esm/min/index.js","../node_modules/date-fns/esm/_lib/assign/index.js","../node_modules/date-fns/esm/_lib/setUTCDay/index.js","../node_modules/date-fns/esm/parse/_lib/parsers/index.js","../node_modules/date-fns/esm/_lib/setUTCWeek/index.js","../node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","../node_modules/date-fns/esm/_lib/setUTCISODay/index.js","../node_modules/date-fns/esm/parse/index.js","../node_modules/date-fns/esm/getDaysInMonth/index.js","../node_modules/date-fns/esm/setMonth/index.js","../node_modules/date-fns/esm/setYear/index.js","../node_modules/date-fns/esm/startOfDay/index.js","../node_modules/date-fns/esm/startOfMonth/index.js","../node_modules/date-fns/esm/startOfWeek/index.js","../node_modules/date-fns/esm/addMilliseconds/index.js","../node_modules/date-fns/esm/subMilliseconds/index.js","../node_modules/date-fns/esm/subMonths/index.js","../node_modules/date-fns/esm/toDate/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../node_modules/immer/src/utils/errors.ts","../node_modules/immer/src/utils/common.ts","../node_modules/immer/src/utils/plugins.ts","../node_modules/immer/src/core/scope.ts","../node_modules/immer/src/core/finalize.ts","../node_modules/immer/src/core/proxy.ts","../node_modules/immer/src/core/immerClass.ts","../node_modules/immer/src/core/current.ts","../node_modules/immer/src/plugins/es5.ts","../node_modules/immer/src/plugins/patches.ts","../node_modules/immer/src/plugins/mapset.ts","../node_modules/immer/src/utils/env.ts","../node_modules/immer/src/immer.ts","../node_modules/immer/src/plugins/all.ts","../node_modules/immer/dist/index.js","../node_modules/localforage/dist/localforage.js","../node_modules/moment/moment.js","../node_modules/papaparse/papaparse.min.js","../node_modules/picocolors/picocolors.browser.js","../node_modules/postcss-selector-parser/dist/index.js","../node_modules/postcss-selector-parser/dist/parser.js","../node_modules/postcss-selector-parser/dist/processor.js","../node_modules/postcss-selector-parser/dist/selectors/attribute.js","../node_modules/postcss-selector-parser/dist/selectors/className.js","../node_modules/postcss-selector-parser/dist/selectors/combinator.js","../node_modules/postcss-selector-parser/dist/selectors/comment.js","../node_modules/postcss-selector-parser/dist/selectors/constructors.js","../node_modules/postcss-selector-parser/dist/selectors/container.js","../node_modules/postcss-selector-parser/dist/selectors/guards.js","../node_modules/postcss-selector-parser/dist/selectors/id.js","../node_modules/postcss-selector-parser/dist/selectors/index.js","../node_modules/postcss-selector-parser/dist/selectors/namespace.js","../node_modules/postcss-selector-parser/dist/selectors/nesting.js","../node_modules/postcss-selector-parser/dist/selectors/node.js","../node_modules/postcss-selector-parser/dist/selectors/pseudo.js","../node_modules/postcss-selector-parser/dist/selectors/root.js","../node_modules/postcss-selector-parser/dist/selectors/selector.js","../node_modules/postcss-selector-parser/dist/selectors/string.js","../node_modules/postcss-selector-parser/dist/selectors/tag.js","../node_modules/postcss-selector-parser/dist/selectors/types.js","../node_modules/postcss-selector-parser/dist/selectors/universal.js","../node_modules/postcss-selector-parser/dist/sortAscending.js","../node_modules/postcss-selector-parser/dist/tokenTypes.js","../node_modules/postcss-selector-parser/dist/tokenize.js","../node_modules/postcss-selector-parser/dist/util/ensureObject.js","../node_modules/postcss-selector-parser/dist/util/getProp.js","../node_modules/postcss-selector-parser/dist/util/index.js","../node_modules/postcss-selector-parser/dist/util/stripComments.js","../node_modules/postcss-selector-parser/dist/util/unesc.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-csv/index.js","../node_modules/react-csv/lib/components/Download.js","../node_modules/react-csv/lib/components/Link.js","../node_modules/react-csv/lib/core.js","../node_modules/react-csv/lib/index.js","../node_modules/react-csv/lib/metaProps.js","../node_modules/react-date-range/dist/accessibility/index.js","../node_modules/react-date-range/dist/components/Calendar/index.js","../node_modules/react-date-range/dist/components/DateInput/index.js","../node_modules/react-date-range/dist/components/DateRange/index.js","../node_modules/react-date-range/dist/components/DateRangePicker/index.js","../node_modules/react-date-range/dist/components/DayCell/index.js","../node_modules/react-date-range/dist/components/DefinedRange/index.js","../node_modules/react-date-range/dist/components/InputRangeField/index.js","../node_modules/react-date-range/dist/components/Month/index.js","../node_modules/react-date-range/dist/defaultRanges.js","../node_modules/react-date-range/dist/index.js","../node_modules/react-date-range/dist/styles.js","../node_modules/react-date-range/dist/utils.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-dom/node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/react-dom/node_modules/scheduler/index.js","../node_modules/react-list/react-list.js","../node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-redux/node_modules/react-is/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/redux-persist-indexeddb-storage/dist/index.js","../node_modules/redux/es/redux.js","../node_modules/reselect/es/defaultMemoize.js","../node_modules/reselect/es/index.js","../node_modules/shallow-equal/dist/index.esm.js","../node_modules/tailwindcss/colors.js","../node_modules/tailwindcss/lib/corePluginList.js","../node_modules/tailwindcss/lib/featureFlags.js","../node_modules/tailwindcss/lib/lib/regex.js","../node_modules/tailwindcss/lib/public/colors.js","../node_modules/tailwindcss/lib/public/resolve-config.js","../node_modules/tailwindcss/lib/util/cloneDeep.js","../node_modules/tailwindcss/lib/util/color.js","../node_modules/tailwindcss/lib/util/configurePlugins.js","../node_modules/tailwindcss/lib/util/dataTypes.js","../node_modules/tailwindcss/lib/util/defaults.js","../node_modules/tailwindcss/lib/util/escapeCommas.js","../node_modules/tailwindcss/lib/util/getAllConfigs.js","../node_modules/tailwindcss/lib/util/isPlainObject.js","../node_modules/tailwindcss/lib/util/log.js","../node_modules/tailwindcss/lib/util/negateValue.js","../node_modules/tailwindcss/lib/util/normalizeConfig.js","../node_modules/tailwindcss/lib/util/parseBoxShadowValue.js","../node_modules/tailwindcss/lib/util/pluginUtils.js","../node_modules/tailwindcss/lib/util/resolveConfig.js","../node_modules/tailwindcss/lib/util/splitAtTopLevelOnly.js","../node_modules/tailwindcss/lib/util/toColorValue.js","../node_modules/tailwindcss/lib/util/toPath.js","../node_modules/tailwindcss/lib/util/withAlphaVariable.js","../node_modules/tailwindcss/resolveConfig.js","../node_modules/tailwindcss/stubs/defaultConfig.stub.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/util-deprecate/browser.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/define property getters","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../node_modules/react-redux/es/utils/batch.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/hooks/useReduxContext.js","../node_modules/react-redux/es/utils/useSyncExternalStore.js","../node_modules/react-redux/es/hooks/useSelector.js","../node_modules/react-redux/es/utils/Subscription.js","../node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/react-redux/es/hooks/useStore.js","../node_modules/react-redux/es/hooks/useDispatch.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/react-redux/es/index.js","../node_modules/react-redux/es/components/connect.js","../node_modules/redux-persist/es/constants.js","../node_modules/redux-persist/es/stateReconciler/autoMergeLevel1.js","../node_modules/redux-persist/es/createPersistoid.js","../node_modules/redux-persist/es/getStoredState.js","../node_modules/redux-persist/es/purgeStoredState.js","../node_modules/redux-persist/es/persistReducer.js","../node_modules/redux-persist/es/persistStore.js","common/components/loading/isLoadingSlice.tsx","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","common/constants/attribution-model-types.ts","features/attribute-model/attributeModelRoutes.tsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/@reduxjs/toolkit/src/query/react/useSerializedStableValue.ts","../node_modules/@reduxjs/toolkit/src/query/react/constants.ts","../node_modules/@reduxjs/toolkit/src/query/react/useShallowStableValue.ts","../node_modules/@reduxjs/toolkit/src/query/react/buildHooks.ts","../node_modules/@reduxjs/toolkit/src/query/utils/capitalize.ts","../node_modules/@reduxjs/toolkit/src/query/react/module.ts","../node_modules/@reduxjs/toolkit/src/query/react/index.ts","app/cacheUtils/genericCacheUtils.ts","features/exclusions/exclusions.enums.ts","app/cacheUtils/cacheIndex.ts","app/cacheUtils/paginationCacheUtils.ts","common/helpers/headers-helper..ts","common/helpers/download-helper.ts","../node_modules/jwt-decode/lib/atob.js","../node_modules/jwt-decode/lib/base64_url_decode.js","../node_modules/jwt-decode/lib/index.js","common/constants/custom-data-keys.ts","common/utils/jwt-helpers.ts","app/apis/authApi.tsx","common/utils/sandbox-helpers.ts","features/auth/authenticationSlice.tsx","features/advanced-reports/constants/advanced-reports-metric-id-seperator.ts","app/apis/advanced-reports/factories/advanced-report-metric-row-factory.ts","features/segmentation-config/segmentation-config-tab-keys.ts","app/apis/queryApi.tsx","features/topbar/selectedSiteSlice.tsx","common/components/drop-downs/legacy/dropDownUtils.ts","features/poc/poc-toggle/pocToggleSlice.tsx","features/attribute-model/availableAttributionModelsSlice.tsx","features/attribute-compare-model/attribution-compare-models.ts","app/apis/advanced-reports/advanced-report-query-api.tsx","features/advanced-reports/advanced-reports.middleware.ts","features/attribute-compare-model/availableAttributionCompareModelsSlice.tsx","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/luxon/src/errors.js","../node_modules/luxon/src/impl/formats.js","../node_modules/luxon/src/zone.js","../node_modules/luxon/src/zones/systemZone.js","../node_modules/luxon/src/zones/IANAZone.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/luxon/src/impl/locale.js","../node_modules/luxon/src/impl/english.js","../node_modules/luxon/src/zones/fixedOffsetZone.js","../node_modules/luxon/src/zones/invalidZone.js","../node_modules/luxon/src/impl/zoneUtil.js","../node_modules/luxon/src/impl/util.js","../node_modules/luxon/src/settings.js","../node_modules/luxon/src/impl/formatter.js","../node_modules/luxon/src/impl/invalid.js","../node_modules/luxon/src/impl/regexParser.js","../node_modules/luxon/src/duration.js","../node_modules/luxon/src/interval.js","../node_modules/luxon/src/info.js","../node_modules/luxon/src/impl/diff.js","../node_modules/luxon/src/impl/digits.js","../node_modules/luxon/src/impl/tokenParser.js","../node_modules/luxon/src/impl/conversions.js","../node_modules/luxon/src/datetime.js","../node_modules/luxon/src/luxon.js","features/charts/chartButtons/constants/RangeRoutes.ts","common/utils/date-helpers.ts","features/date-range-selection/dateRangeSlice.tsx","features/charts/chartOptionsSlice.tsx","features/data-science/tasks-status.tsx","features/search-bar/searchBarSlice.tsx","features/pagination/paginationOptionsSlice.ts","features/sidebar/sidebarTogglingSlice.ts","features/sidebar/sidebarSlice.ts","features/dashboard/helpTileSlice.ts","features/data-view-selection/view-type.ts","app/apis/commandApi.tsx","features/row-selection/rowSelectionSlice.ts","features/modal/modalSlice.ts","common/components/accordion/accordionSlice.ts","features/data-view-selection/dataViewSelectionSlice.ts","../node_modules/uuid/dist/esm-browser/rng.js","features/maps/google-static-maps/googleStaticMapSlice.ts","features/settings/settingsSlice.ts","features/blur/blurToggleSlice.ts","features/upload/uploads.slice.ts","app/apis/publicCommandApi.tsx","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/validate.js","../node_modules/uuid/dist/esm-browser/v4.js","features/toast/toast.types.ts","features/toast/toast.slice.tsx","features/conversions/paths/paths.models.ts","features/marketing-mix-modelling/header-controls/header-controls.slice.ts","features/reports/reports-table.slice.ts","features/webhooks/webhooks-table/webhooks-table.slice.ts","features/conversions/paths/paths.slice.ts","features/internal/internal.models.ts","features/exclusions/exclusions-table/exclusions-table.slice.ts","features/internal/internal-settings.slice.ts","features/segment-controls/constants/segment-types.ts","features/segment-controls/factories/segment-factory.ts","features/segment-controls/factories/segment-filter-factory.ts","features/segment-controls/constants/segment-controls-filter-value-operators.ts","features/insights/insights.middleware.ts","features/segment-controls/segment-controls.slice.ts","features/advanced-reports/table/advanced-reports-table.slice.ts","features/row-deletion/rowPendingDeletionSlice.ts","features/insights/conversion-influence/conversion-influence-table.slice.ts","../node_modules/redux-persist/es/stateReconciler/autoMergeLevel2.js","features/toast/toast.listenermiddleware.ts","common/constants/timeout-values.ts","features/segmentation-config/segmentation-config.types.ts","features/row-deletion/rowPendingDeletion.listenermiddleware.ts","features/segmentation-config/segmentation-config.slice.ts","app/store.ts","../node_modules/@babel/runtime/helpers/esm/extends.js","common/prototypes/array.prototypes.ts","../node_modules/packages/react-router/lib/context.ts","../node_modules/packages/react-router/lib/router.ts","../node_modules/packages/react-router/lib/hooks.tsx","../node_modules/packages/react-router/lib/components.tsx","../../packages/react-router-dom/index.tsx","features/charts/chart.models.ts","common/components/anchors/custom-navlink.tsx","features/dashboard/helpTile.tsx","features/dashboard/helpTilesContainer.tsx","features/tiles/tileGridContainer.tsx","common/components/loading/loading.tsx","features/currency/currencySymbolMap.ts","features/currency/currencySymbolMapHelper.ts","features/currency/currencyDisplayWrapper.tsx","features/tiles/numberTile.tsx","features/tiles/tile.tsx","features/dashboard/roiMetricTile.tsx","features/dashboard/revenueMetricTile.tsx","features/dashboard/costMetricTile.tsx","features/dashboard/salesMetricTile.tsx","features/dashboard/formAndPhoneMetricTile.tsx","features/dashboard/phoneCallMetricTile.tsx","features/dashboard/formMetricTile.tsx","features/dashboard/visitorMetricTile.tsx","features/dashboard/dashboardSummaryChartDataFormatter.ts","../node_modules/react-use/esm/misc/util.js","common/components/loading/spinner.tsx","../node_modules/react-use/esm/useClickAway.js","common/components/drop-downs/legacy/dropDownButtonLegacy.tsx","features/charts/chartButtons/constants/chartRoutes.ts","common/components/drop-downs/legacy/simpleDropDownButtonContainerContent.tsx","features/charts/chartButtons/chartTypeButton.tsx","../node_modules/@babel/runtime/helpers/esm/superPropBase.js","../node_modules/@babel/runtime/helpers/esm/get.js","../node_modules/@kurkle/color/dist/color.esm.js","../node_modules/chart.js/src/helpers/helpers.core.ts","../node_modules/chart.js/src/helpers/helpers.math.ts","../node_modules/chart.js/src/helpers/helpers.collection.ts","../node_modules/chart.js/src/helpers/helpers.extras.ts","../node_modules/chart.js/src/helpers/helpers.easing.ts","../node_modules/chart.js/src/helpers/helpers.color.ts","../node_modules/chart.js/src/core/core.animations.defaults.js","../node_modules/chart.js/src/helpers/helpers.intl.ts","../node_modules/chart.js/src/core/core.ticks.js","../node_modules/chart.js/src/core/core.defaults.js","../node_modules/chart.js/src/core/core.layouts.defaults.js","../node_modules/chart.js/src/core/core.scale.defaults.js","../node_modules/chart.js/src/helpers/helpers.canvas.js","../node_modules/chart.js/src/helpers/helpers.options.ts","../node_modules/chart.js/src/helpers/helpers.config.js","../node_modules/chart.js/src/helpers/helpers.curve.ts","../node_modules/chart.js/src/helpers/helpers.dom.ts","../node_modules/chart.js/src/helpers/helpers.interpolation.ts","../node_modules/chart.js/src/helpers/helpers.rtl.ts","../node_modules/chart.js/src/helpers/helpers.segment.js","../node_modules/chart.js/src/core/core.animator.js","../node_modules/chart.js/src/core/core.animation.js","../node_modules/chart.js/src/core/core.animations.js","../node_modules/chart.js/src/core/core.datasetController.js","../node_modules/chart.js/src/controllers/controller.bar.js","../node_modules/chart.js/src/controllers/controller.bubble.js","../node_modules/chart.js/src/controllers/controller.doughnut.js","../node_modules/chart.js/src/controllers/controller.line.js","../node_modules/chart.js/src/controllers/controller.polarArea.js","../node_modules/chart.js/src/controllers/controller.pie.js","../node_modules/chart.js/src/controllers/controller.radar.js","../node_modules/chart.js/src/controllers/controller.scatter.js","../node_modules/chart.js/src/core/core.adapters.ts","../node_modules/chart.js/src/core/core.interaction.js","../node_modules/chart.js/src/core/core.layouts.js","../node_modules/chart.js/src/platform/platform.base.js","../node_modules/chart.js/src/platform/platform.basic.js","../node_modules/chart.js/src/platform/platform.dom.js","../node_modules/chart.js/src/core/core.element.ts","../node_modules/chart.js/src/core/core.scale.autoskip.js","../node_modules/chart.js/src/core/core.scale.js","../node_modules/chart.js/src/core/core.typedRegistry.js","../node_modules/chart.js/src/core/core.registry.js","../node_modules/chart.js/src/core/core.plugins.js","../node_modules/chart.js/src/core/core.config.js","../node_modules/chart.js/src/core/core.controller.js","../node_modules/chart.js/src/platform/index.js","../node_modules/chart.js/src/elements/element.arc.ts","../node_modules/chart.js/src/elements/element.line.js","../node_modules/chart.js/src/elements/element.point.ts","../node_modules/chart.js/src/elements/element.bar.js","../node_modules/chart.js/src/plugins/plugin.filler/filler.segment.js","../node_modules/chart.js/src/plugins/plugin.filler/filler.helper.js","../node_modules/chart.js/src/plugins/plugin.filler/filler.options.js","../node_modules/chart.js/src/plugins/plugin.filler/filler.target.stack.js","../node_modules/chart.js/src/plugins/plugin.filler/simpleArc.js","../node_modules/chart.js/src/plugins/plugin.filler/filler.target.js","../node_modules/chart.js/src/plugins/plugin.filler/filler.drawing.js","../node_modules/chart.js/src/plugins/plugin.filler/index.js","../node_modules/chart.js/src/plugins/plugin.legend.js","../node_modules/chart.js/src/plugins/plugin.title.js","../node_modules/chart.js/src/plugins/plugin.tooltip.js","../node_modules/chart.js/src/plugins/plugin.subtitle.js","../node_modules/chart.js/src/scales/scale.category.js","../node_modules/chart.js/src/scales/scale.linearbase.js","../node_modules/chart.js/src/scales/scale.linear.js","../node_modules/chart.js/src/scales/scale.logarithmic.js","../node_modules/chart.js/src/scales/scale.radialLinear.js","../node_modules/chart.js/src/scales/scale.time.js","../node_modules/chart.js/src/scales/scale.timeseries.js","../node_modules/react-chartjs-2/src/utils.ts","../node_modules/react-chartjs-2/src/chart.tsx","../node_modules/react-chartjs-2/src/typedCharts.tsx","common/helpers/chart-helpers.ts","common/components/charts/chart-bar.tsx","common/components/charts/chart-line.tsx","tailwind.theme.ts","common/components/charts/chart-colours.ts","features/charts/strategies/chart-strategy-date.tsx","common/components/charts/chart-doughnut.tsx","features/charts/strategies/chart-strategy-string.tsx","features/charts/chartButtons/chartDateRangeButton.tsx","features/charts/strategies/chart-strategy-number-prediction.tsx","common/components/charts/chart-bar-scatter.tsx","features/charts/strategies/chart-strategy-string-bar-scatter.tsx","features/charts/strategies/chart-bridge.tsx","features/dashboard/dashboardChart.tsx","features/dashboard/averageVisitorLifetimeValueTile.tsx","features/dashboard/fakeTile.tsx","pages/dashboard.tsx","common/hooks/store.ts","features/sidebar/sidebarMenuItemLegacy.tsx","features/sidebar/sidebarRoutes/sidebarRoutes.tsx","../node_modules/react-use/esm/useEffectOnce.js","../node_modules/react-use/esm/useUnmount.js","../node_modules/react-use/esm/useRafState.js","../node_modules/react-use/esm/useWindowSize.js","features/sidebar/responsive-burger-button/responsiveBurgerButton.tsx","features/sidebar/sidebarIcon.tsx","features/sidebar/sidebarlegacy.tsx","pages/notFound.tsx","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@tanstack/table-core/src/utils.ts","../node_modules/@tanstack/table-core/src/core/headers.ts","../node_modules/@tanstack/table-core/src/features/ColumnSizing.ts","../node_modules/@tanstack/table-core/src/features/Expanding.ts","../node_modules/@tanstack/table-core/src/filterFns.ts","../node_modules/@tanstack/table-core/src/features/Filters.ts","../node_modules/@tanstack/table-core/src/aggregationFns.ts","../node_modules/@tanstack/table-core/src/features/Grouping.ts","../node_modules/@tanstack/table-core/src/features/Ordering.ts","../node_modules/@tanstack/table-core/src/features/Pagination.ts","../node_modules/@tanstack/table-core/src/features/Pinning.ts","../node_modules/@tanstack/table-core/src/features/RowSelection.ts","../node_modules/@tanstack/table-core/src/sortingFns.ts","../node_modules/@tanstack/table-core/src/features/Sorting.ts","../node_modules/@tanstack/table-core/src/features/Visibility.ts","../node_modules/@tanstack/table-core/src/core/table.ts","../node_modules/@tanstack/table-core/src/core/column.ts","../node_modules/@tanstack/table-core/src/core/row.ts","../node_modules/@tanstack/table-core/src/core/cell.ts","../node_modules/@tanstack/table-core/src/columnHelper.ts","../node_modules/@tanstack/table-core/src/utils/getCoreRowModel.ts","../node_modules/@tanstack/table-core/src/utils/filterRowsUtils.ts","../node_modules/@tanstack/table-core/src/utils/getFilteredRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getFacetedRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getFacetedUniqueValues.ts","../node_modules/@tanstack/table-core/src/utils/getSortedRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getExpandedRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getPaginationRowModel.ts","../node_modules/@tanstack/react-table/src/index.tsx","../node_modules/react-use/esm/useIsomorphicLayoutEffect.js","../node_modules/react-use/esm/useMeasure.js","common/components/table/tableSortButtons.tsx","common/components/drop-downs/dropdown-menu-button.tsx","../node_modules/@tanstack/match-sorter-utils/src/remove-accents.ts","../node_modules/@tanstack/match-sorter-utils/src/index.ts","common/components/table/table-functions/filters.ts","common/hooks/filteredValues.tsx","common/components/drop-downs/drop-down-menu-react-portal.tsx","common/components/table/tableFilterToggle.tsx","common/components/table/customTable.tsx","features/tiles/tileWithoutDefaultStyling.tsx","common/constants/metric-types.ts","common/components/buttons/button-theme.ts","features/attribute-model/attributeButton.tsx","features/search-bar/searchBar.tsx","features/reports/functions/metric-type-functions.ts","common/components/buttons/button-functions.ts","common/components/buttons/button.tsx","features/csv-export/csv-export-button.tsx","features/reports/reports-csv-export-button.tsx","common/components/icons/marketingSourceLogo.tsx","common/components/drop-downs/drop-down-menu.tsx","features/attribute-compare-model/attributeCompareButton.tsx","features/reports/reportsInteractionBar.tsx","features/blur/blur.tsx","features/reports/reports-column-definitions.tsx","features/reports/functions/metric-calculation-functions.ts","features/reports/metric-attribution-mapper.ts","features/reports/functions/reports-functions.ts","common/components/drop-downs/legacy/selectedItemDropDownButtonContainerContent.tsx","common/components/pagination/pagination.tsx","features/advanced-reports/table/factories/advanced-report-table-row-factory.ts","features/advanced-reports/table/factories/advanced-report-table-helpers.ts","features/advanced-reports/table/advanced-reports-table-controls/advanced-reports-table-accordion.tsx","features/advanced-reports/table/advanced-reports-column-defs.tsx","features/advanced-reports/constants/advanced-reports-query-categories.ts","features/reports/reports-table.tsx","features/reports/helpers/report-type-helper.ts","pages/reports.tsx","features/reports/hooks/use-report-queries.ts","pages/login.tsx","features/auth/hooks/useAuth.ts","pages/privateOutlet.tsx","features/auth/logoutButton.tsx","features/modal/modal.tsx","features/blur/blurButton.tsx","features/topbar/sitePicker.tsx","features/topbar/topBar.tsx","common/components/buttons/actionsButton.tsx","common/components/buttons/exportButton.tsx","features/revenue/revenueSearchBar.tsx","features/pagination/paginationPageSizeDropDownSelections.ts","features/pagination/paginationBar.tsx","features/pagination/paginatedTable.tsx","features/pagination/hooks/usePaginatedQuery.ts","common/components/table/cell-formatters/fieldHelpers.ts","common/components/table/cell-formatters/fieldCell.tsx","common/components/table/cell-formatters/payloadFieldCellFormatter.tsx","common/utils/LEGACY_timeHelpers.ts","common/components/table/mapFieldRenderer.tsx","features/pagination/paginatedTableSelectAllRowsCheckbox.tsx","features/pagination/paginatedTableRowSelectionCheckbox.tsx","features/revenue/table/revenue-table-helpers.tsx","common/utils/array-helpers.ts","features/revenue/table/revenue-simple-column-defs.tsx","common/components/table/cell-formatters/filterNotApplicatable.ts","features/conversions/forms/views/shared/FieldsRenderer.tsx","common/helpers/conversion-type.helper.ts","features/revenue/table/revenue-detailed-column-defs.tsx","common/components/alerts/alert.tsx","pages/revenue.tsx","features/marketing-mix-modelling/header-controls/mmm-header-controls.tsx","features/marketing-mix-modelling/modelled-roi/modelled-roi-by-channel-chart.ts","features/marketing-mix-modelling/charts/mmm-chart-helpers.ts","features/marketing-mix-modelling/modelled-roi/modelled-roi-grouped-chart.ts","features/marketing-mix-modelling/modelled-roi/modelled-roi-charts.ts","common/components/accordion/accordion-theme.ts","features/marketing-mix-modelling/modelled-roi/mmm-modelled-roi-page.tsx","common/components/accordion/accordion-functions.ts","common/components/accordion/accordion.tsx","features/visitors/components/accordionHeaderComponents.tsx","features/visitors/components/visitorNumberTile.tsx","common/utils/closestMatchOnKeyFuzzySearchHelpers.ts","common/utils/fuzzySearchHelpers.ts","common/utils/fullNameClosestMatchOnKeyName.ts","common/utils/emailClosestMatchOnKeyName.ts","common/utils/getProfileImage.ts","common/utils/phoneClosestMatchOnKeyName.ts","common/utils/jobTitleClosestMatchOnKeyName.ts","features/visitors/components/accordionGroupComponent.tsx","../node_modules/react-use/esm/useDebounce.js","../node_modules/react-use/esm/useTimeoutFn.js","features/maps/google-static-maps/googleStaticMap.tsx","common/components/icons/icon-types.ts","common/components/icons/operatingSystemLogo.tsx","common/components/icons/browserLogo.tsx","pages/visitor.tsx","features/opportunities/table/opportunity-table-helpers.tsx","features/opportunities/table/opportunity-simple-column-defs.tsx","features/opportunities/opportunitiesSearchBar.tsx","features/opportunities/table/opportunity-detailed-column-defs.tsx","pages/opportunities.tsx","features/toast/toast.tsx","../node_modules/date-fns/esm/locale/en-GB/_lib/formatLong/index.js","../node_modules/date-fns/esm/locale/en-GB/index.js","features/date-range-selection/dateRangePicker.tsx","features/topbar/breadcrumb-bar/breadcrumbBar.tsx","app/page-content.tsx","common/components/inputs/slider.tsx","features/marketing-mix-modelling/budget-optimiser/diminishing-returns-chart.ts","features/marketing-mix-modelling/budget-optimiser/budget-optimiser-chart.ts","features/marketing-mix-modelling/budget-optimiser/budget-optimiser-charts.ts","common/components/pills/pill-theme.tsx","features/webhooks/webhook-status.ts","features/marketing-mix-modelling/budget-optimiser/budget-optimiser-table.tsx","features/marketing-mix-modelling/budget-optimiser/mmm-budget-optimiser-page.tsx","common/components/drop-downs/legacy/dropDownWithCurrentSelection.tsx","pages/settings-general.tsx","features/csv-reader/csv-reader.tsx","common/components/loading/loading-bar.tsx","common/utils/additional-data-properties-helpers.ts","features/upload/revenue/upload-revenues.tsx","features/upload/opportunity/upload-opportunities.tsx","pages/settings-upload.tsx","common/components/anchors/navlink-button.tsx","common/components/pills/pill.tsx","features/webhooks/webhook-cache-keys.ts","features/webhooks/webhooks-table/webhooks-table-status.tsx","common/components/drop-downs/dropdown-menu-anchor.tsx","features/webhooks/webhooks-table/webhooks-table-actions.tsx","features/webhooks/webhooks-table/webhooks-column-defs.tsx","features/modal/modal-simple.tsx","features/webhooks/webhooks-table/webhooks-table.tsx","pages/settings-webhooks.tsx","features/webhooks/webhook-types.ts","common/components/inputs/textbox.tsx","common/components/inputs/textarea.tsx","common/components/inputs/toggle.tsx","common/components/audio/audio-external.tsx","pages/settings-webhooks-create.tsx","features/data-science/task-cache-keys.tsx","features/data-science/tasks-table/tasks-table-status.tsx","features/data-science/tasks-table/tasks-table-actions.tsx","features/data-science/tasks-table/tasks-column-defs.tsx","features/data-science/tasks-table/tasks-table.tsx","pages/settings-data-science-tasks.tsx","features/conversions/forms/views/formsSimpleColumnDefs.tsx","features/conversions/forms/views/formsDetailColumnDefs.tsx","features/conversions/conversions-interaction-bar.tsx","pages/conversions-form.tsx","features/conversions/calls/call-recording/call-recording.tsx","features/conversions/calls/table/get-conversion-inboundcalls-column-defs.tsx","pages/conversions-call.tsx","common/components/copy-to-clipboard/copy-to-clipboard.tsx","pages/site-setup.tsx","pages/setup-call-tracking.tsx","pages/help.tsx","features/exclusions/exclusions-table/exclusions-table-actions.tsx","features/exclusions/exclusions-table/exclusions-column-def.tsx","features/exclusions/exclusions-table/exclusions-table.tsx","pages/settings-exclusions.tsx","pages/settings-exclusions-create.tsx","features/webhooks/webhook-history-table/webhook-history-column-defs.tsx","features/webhooks/webhook-history-table/webhook-history-table.tsx","pages/settings-webhooks-history.tsx","features/conversions/paths/paths-table/path-pills.tsx","features/conversions/paths/paths-table/path-time.tsx","features/conversions/paths/paths-table/paths-column-defs.tsx","features/conversions/paths/paths-table/paths-table.tsx","pages/paths.tsx","pages/poc-outlet.tsx","features/internal/debug-toggle/debug-toggle-action.tsx","features/poc/poc-toggle/pocToggle.tsx","features/internal/debug-toggle/debug-toggle-column-defs.tsx","features/internal/debug-toggle/debug-toggle-table.tsx","pages/internal.tsx","common/components/table/drillthrough-table/drillthrough-table.tsx","features/insights/insights-table-accordion.tsx","features/insights/conversion-influence/conversion-influence-column-defs.tsx","features/advanced-reports/table/factories/advanced-report-drillthrough-table-injectable-row-factory.ts","features/advanced-reports/table/export/advanced-report-csv-export-button.tsx","features/advanced-reports/helpers/cache-helpers.ts","features/advanced-reports/helpers/query-helpers.ts","features/advanced-reports/table/advanced-reports-table.tsx","features/advanced-reports/table/hooks/use-get-advanced-report-results.tsx","features/segment-controls/query-segments/query-segments-button.tsx","features/segment-controls/reset-segments/reset-segments-button.tsx","app/apis/segmentation/segmentation-api.ts","features/segment-controls/segment-controls/segments/segment-dropdown.tsx","common/components/tooltip/tooltip-legacy.tsx","features/segment-controls/segment-controls/filters/segment-filter-pill.tsx","features/segment-controls/segment-controls/filters/segment-filters.tsx","features/segment-controls/segment-controls/filters/segment-filter-value-dropdown.tsx","features/segment-controls/segment-controls/filters/segment-filter-dropdown.tsx","features/segment-controls/segment-controls/segments/add-segment-button.tsx","features/segment-controls/segment-controls/segment-control.tsx","features/segment-controls/segment-controls/segment-controls.tsx","pages/advanced-reports-page.tsx","features/insights/constants/insight-types.ts","features/segment-controls/factories/query-segments-request-factory.ts","features/public-call-recordings/public-call-recording.tsx","pages/call-recording.tsx","features/sidebar/sidebarMenuItem.tsx","features/sidebar/sidebar.tsx","features/insights/insights-table-row-factory.ts","pages/insights-conversion-influence.tsx","pages/super-user-outlet.tsx","common/components/tooltip/tooltip-v2.tsx","features/segmentation-config/segmentation-config-table/segmentation-config-table-actions.tsx","features/segmentation-config/segmentation-config-table/segmentation-config-column-defs.tsx","features/segmentation-config/segmentation-config-table/segmentationConfigTable.tsx","common/components/tabs/tabs.tsx","pages/settings-segmentation-config.tsx","features/segmentation-config/segmentation-config-rule/segmentation-config-rule-target.tsx","features/segmentation-config/segmentation-config-rule/segmentation-config-rule.tsx","features/segmentation-config/segmentation-config-form/segmentation-config-form.tsx","pages/settings-segmentation-config-create.tsx","pages/settings-segmentation-config-edit.tsx","app/app.tsx","features/charts/chartjs.ts","../node_modules/redux-persist/es/integration/react.js","index.tsx"],"sourcesContent":["function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nmodule.exports = _createForOfIteratorHelper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _defineProperty(obj, key, value) {\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\n return obj;\n}\n\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var defineProperty = require(\"./defineProperty.js\");\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _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\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\n\nfunction _regeneratorRuntime() {\n \"use strict\";\n /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return generator._invoke = function (innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }(innerFn, self, context), generator;\n }\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n exports.wrap = wrap;\n var ContinueSentinel = {};\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {}\n\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n\n reject(record.arg);\n }\n\n var previousPromise;\n\n this._invoke = function (method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n };\n }\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (undefined === method) {\n if (context.delegate = null, \"throw\" === context.method) {\n if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) {\n if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n }\n\n return next.value = undefined, next.done = !0, next;\n };\n\n return next.next = next;\n }\n }\n\n return {\n next: doneResult\n };\n }\n\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n }\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n }\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}\n\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableRest = require(\"./nonIterableRest.js\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableRest = require(\"./nonIterableRest.js\");\n\nfunction _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}\n\nmodule.exports = _toArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\n\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","const colors = require('tailwindcss/colors');\n\nmodule.exports = {\n content: ['./src/**/*.{tsx,jsx,ts,js,sass}', './public/index.html'],\n safelist: ['w-5', 'h-5', 'bg-primary-800'],\n theme: {\n // defaults taken from docs: https://tailwindcss.com/docs/responsive-design\n screens: {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n '3xl': '1850px'\n },\n colors: {\n transparent: 'transparent',\n current: 'currentColor',\n white: colors.white,\n black: colors.black,\n gray: '#98a2a8',\n 'off-gray': '#FDFDFD',\n 'navy-dark': '#031632',\n navy: '#092043',\n 'off-navy': '#CFD5D8',\n blue: '#4D9DE0',\n 'off-blue': '#DBEBF9',\n neutral: {\n 50: '#f8fbfc',\n 100: '#f5f9fb',\n 150: '#edf3f5',\n 200: '#e0e7eb',\n 400: '#a3a3a3',\n 500: '#7A86A1'\n },\n primary: {\n 40: '#E1F7FC',\n 45: '#D4E6FF',\n 50: '#5DDDFF',\n 100: '#01BAEC',\n 200: '#659aea',\n 300: '#544CEC',\n 400: '#1856b5',\n 500: '#164791',\n 600: '#0e3269',\n 700: '#092043',\n 800: '#071b38'\n },\n secondary: {\n 50: '#EDECFE',\n 100: '#9893f3',\n 200: '#8079FF',\n 300: '#766fef',\n 400: '#655ded',\n 600: '#2217e1',\n 700: '#1d14c5',\n 800: '#1911a9'\n },\n tertiary: {\n 100: '#E8FaF6',\n 200: '#CBF6ED',\n 400: '#8FDDC1',\n 600: '#5FCFA7'\n },\n success: {\n 50: '#C5FBEF',\n 100: '#8CF8E0',\n 200: '#1AF2C2',\n 400: '#04D2A4'\n },\n warning: {\n 100: '#FFF2D5',\n 200: '#FFEFCB',\n 600: '#F9AB00'\n },\n error: {\n 75: '#FEE9E9',\n 100: '#FEE2E2',\n 150: '#FCC5D1',\n 300: '#F2337D'\n }\n },\n fontFamily: {\n sans: ['Proxima Nova', 'sans-serif']\n },\n fontSize: {\n xxxs: '0.5rem',\n xxs: '0.65rem',\n xs: '0.75rem',\n sm: '0.875rem',\n base: '10px',\n md: '1rem',\n lg: '1.125rem',\n xl: '1.25rem',\n '2xl': '1.5rem',\n '3xl': '1.875rem',\n '4xl': '2.25rem',\n '5xl': '3rem',\n '6xl': '4rem',\n '7xl': '5rem',\n '8xl': '6rem'\n },\n extend: {\n keyframes: {\n loading: {\n '0%': { left: 0, transform: 'translateX(0)' },\n '100%': { left: '100%', transform: 'translateX(-100%)' }\n },\n 'in-from-right': {\n from: {\n transform: 'translateX(100%)'\n },\n to: {\n transform: 'translateX(0)'\n }\n }\n },\n animation: {\n loading: 'loading 1s ease-in-out infinite alternate',\n 'spin-600': 'spin .600s linear infinite',\n 'in-from-right': 'in-from-right 300ms ease-in-out'\n },\n spacing: {\n 7.5: '1.85rem',\n 13: '3.25rem',\n 14: '3.5rem',\n 15: '3.75rem',\n 18: '4.5rem',\n 19: '4.75rem',\n 21: '5.25rem',\n 22: '5.5rem',\n 25: '6.25rem',\n 30: '7.5rem',\n 40: '10rem',\n 44: '11rem',\n 60: '15rem',\n 69: '17.25rem',\n 72: '18rem',\n 80: '20rem',\n 85: '21.25rem',\n 86: '21.50rem',\n 87: '21.75rem',\n 88: '22rem',\n 92: '23rem',\n 108: '27rem',\n 128: '32rem',\n 144: '36rem'\n },\n height: {\n 128: '32rem',\n '2/3-screen': '66vh'\n },\n minHeight: {\n '1/2-screen': '50vh'\n },\n maxHeight: {\n 128: '32rem',\n '2/3-screen': '66vh'\n },\n maxWidth: {\n 60: '15rem',\n 108: '27rem'\n },\n borderRadius: {\n DEFAULT: '0.375rem',\n sm: '0.125rem',\n lg: '0.5rem',\n full: '9999px',\n '4xl': '2rem',\n '1/2': '50%'\n },\n zIndex: {\n 999: '999'\n },\n scale: {\n 30: '0.3'\n }\n }\n },\n extend: {\n fontSize: {\n xxs: '0.625rem'\n }\n }\n};\n","import type { SerializedError } from '@reduxjs/toolkit'\r\nimport type { BaseQueryError } from '../baseQueryTypes'\r\nimport type {\r\n QueryDefinition,\r\n MutationDefinition,\r\n EndpointDefinitions,\r\n BaseEndpointDefinition,\r\n ResultTypeFrom,\r\n QueryArgFrom,\r\n} from '../endpointDefinitions'\r\nimport type { Id, WithRequiredProp } from '../tsHelpers'\r\n\r\nexport type QueryCacheKey = string & { _type: 'queryCacheKey' }\r\nexport type QuerySubstateIdentifier = { queryCacheKey: QueryCacheKey }\r\nexport type MutationSubstateIdentifier =\r\n | {\r\n requestId: string\r\n fixedCacheKey?: string\r\n }\r\n | {\r\n requestId?: string\r\n fixedCacheKey: string\r\n }\r\n\r\nexport type RefetchConfigOptions = {\r\n refetchOnMountOrArgChange: boolean | number\r\n refetchOnReconnect: boolean\r\n refetchOnFocus: boolean\r\n}\r\n\r\n/**\r\n * Strings describing the query state at any given time.\r\n */\r\nexport enum QueryStatus {\r\n uninitialized = 'uninitialized',\r\n pending = 'pending',\r\n fulfilled = 'fulfilled',\r\n rejected = 'rejected',\r\n}\r\n\r\nexport type RequestStatusFlags =\r\n | {\r\n status: QueryStatus.uninitialized\r\n isUninitialized: true\r\n isLoading: false\r\n isSuccess: false\r\n isError: false\r\n }\r\n | {\r\n status: QueryStatus.pending\r\n isUninitialized: false\r\n isLoading: true\r\n isSuccess: false\r\n isError: false\r\n }\r\n | {\r\n status: QueryStatus.fulfilled\r\n isUninitialized: false\r\n isLoading: false\r\n isSuccess: true\r\n isError: false\r\n }\r\n | {\r\n status: QueryStatus.rejected\r\n isUninitialized: false\r\n isLoading: false\r\n isSuccess: false\r\n isError: true\r\n }\r\n\r\nexport function getRequestStatusFlags(status: QueryStatus): RequestStatusFlags {\r\n return {\r\n status,\r\n isUninitialized: status === QueryStatus.uninitialized,\r\n isLoading: status === QueryStatus.pending,\r\n isSuccess: status === QueryStatus.fulfilled,\r\n isError: status === QueryStatus.rejected,\r\n } as any\r\n}\r\n\r\nexport type SubscriptionOptions = {\r\n /**\r\n * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).\r\n */\r\n pollingInterval?: number\r\n /**\r\n * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\r\n *\r\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\r\n *\r\n * Note: requires [`setupListeners`](./setupListeners) to have been called.\r\n */\r\n refetchOnReconnect?: boolean\r\n /**\r\n * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\r\n *\r\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\r\n *\r\n * Note: requires [`setupListeners`](./setupListeners) to have been called.\r\n */\r\n refetchOnFocus?: boolean\r\n}\r\nexport type Subscribers = { [requestId: string]: SubscriptionOptions }\r\nexport type QueryKeys = {\r\n [K in keyof Definitions]: Definitions[K] extends QueryDefinition<\r\n any,\r\n any,\r\n any,\r\n any\r\n >\r\n ? K\r\n : never\r\n}[keyof Definitions]\r\nexport type MutationKeys = {\r\n [K in keyof Definitions]: Definitions[K] extends MutationDefinition<\r\n any,\r\n any,\r\n any,\r\n any\r\n >\r\n ? K\r\n : never\r\n}[keyof Definitions]\r\n\r\ntype BaseQuerySubState> = {\r\n /**\r\n * The argument originally passed into the hook or `initiate` action call\r\n */\r\n originalArgs: QueryArgFrom\r\n /**\r\n * A unique ID associated with the request\r\n */\r\n requestId: string\r\n /**\r\n * The received data from the query\r\n */\r\n data?: ResultTypeFrom\r\n /**\r\n * The received error if applicable\r\n */\r\n error?:\r\n | SerializedError\r\n | (D extends QueryDefinition\r\n ? BaseQueryError\r\n : never)\r\n /**\r\n * The name of the endpoint associated with the query\r\n */\r\n endpointName: string\r\n /**\r\n * Time that the latest query started\r\n */\r\n startedTimeStamp: number\r\n /**\r\n * Time that the latest query was fulfilled\r\n */\r\n fulfilledTimeStamp?: number\r\n}\r\n\r\nexport type QuerySubState> = Id<\r\n | ({\r\n status: QueryStatus.fulfilled\r\n } & WithRequiredProp<\r\n BaseQuerySubState,\r\n 'data' | 'fulfilledTimeStamp'\r\n > & { error: undefined })\r\n | ({\r\n status: QueryStatus.pending\r\n } & BaseQuerySubState)\r\n | ({\r\n status: QueryStatus.rejected\r\n } & WithRequiredProp, 'error'>)\r\n | {\r\n status: QueryStatus.uninitialized\r\n originalArgs?: undefined\r\n data?: undefined\r\n error?: undefined\r\n requestId?: undefined\r\n endpointName?: string\r\n startedTimeStamp?: undefined\r\n fulfilledTimeStamp?: undefined\r\n }\r\n>\r\n\r\ntype BaseMutationSubState> = {\r\n requestId: string\r\n data?: ResultTypeFrom\r\n error?:\r\n | SerializedError\r\n | (D extends MutationDefinition\r\n ? BaseQueryError\r\n : never)\r\n endpointName: string\r\n startedTimeStamp: number\r\n fulfilledTimeStamp?: number\r\n}\r\n\r\nexport type MutationSubState> =\r\n | (({\r\n status: QueryStatus.fulfilled\r\n } & WithRequiredProp<\r\n BaseMutationSubState,\r\n 'data' | 'fulfilledTimeStamp'\r\n >) & { error: undefined })\r\n | (({\r\n status: QueryStatus.pending\r\n } & BaseMutationSubState) & { data?: undefined })\r\n | ({\r\n status: QueryStatus.rejected\r\n } & WithRequiredProp, 'error'>)\r\n | {\r\n requestId?: undefined\r\n status: QueryStatus.uninitialized\r\n data?: undefined\r\n error?: undefined\r\n endpointName?: string\r\n startedTimeStamp?: undefined\r\n fulfilledTimeStamp?: undefined\r\n }\r\n\r\nexport type CombinedState<\r\n D extends EndpointDefinitions,\r\n E extends string,\r\n ReducerPath extends string\r\n> = {\r\n queries: QueryState\r\n mutations: MutationState\r\n provided: InvalidationState\r\n subscriptions: SubscriptionState\r\n config: ConfigState\r\n}\r\n\r\nexport type InvalidationState = {\r\n [_ in TagTypes]: {\r\n [id: string]: Array\r\n [id: number]: Array\r\n }\r\n}\r\n\r\nexport type QueryState = {\r\n [queryCacheKey: string]: QuerySubState | undefined\r\n}\r\n\r\nexport type SubscriptionState = {\r\n [queryCacheKey: string]: Subscribers | undefined\r\n}\r\n\r\nexport type ConfigState = RefetchConfigOptions & {\r\n reducerPath: ReducerPath\r\n online: boolean\r\n focused: boolean\r\n middlewareRegistered: boolean | 'conflict'\r\n} & ModifiableConfigState\r\n\r\nexport type ModifiableConfigState = {\r\n keepUnusedDataFor: number\r\n} & RefetchConfigOptions\r\n\r\nexport type MutationState = {\r\n [requestId: string]: MutationSubState | undefined\r\n}\r\n\r\nexport type RootState<\r\n Definitions extends EndpointDefinitions,\r\n TagTypes extends string,\r\n ReducerPath extends string\r\n> = {\r\n [P in ReducerPath]: CombinedState\r\n}\r\n","export { QueryStatus } from './core/apiState'\r\nexport type { Api, Module, ApiModules } from './apiTypes'\r\nexport type { BaseQueryEnhancer, BaseQueryFn } from './baseQueryTypes'\r\nexport type {\r\n EndpointDefinitions,\r\n EndpointDefinition,\r\n QueryDefinition,\r\n MutationDefinition,\r\n} from './endpointDefinitions'\r\nexport { fetchBaseQuery } from './fetchBaseQuery'\r\nexport type {\r\n FetchBaseQueryError,\r\n FetchBaseQueryMeta,\r\n FetchArgs,\r\n} from './fetchBaseQuery'\r\nexport { retry } from './retry'\r\nexport { setupListeners } from './core/setupListeners'\r\nexport { skipSelector, skipToken, SkipToken } from './core/buildSelectors'\r\nexport type { CreateApi, CreateApiOptions } from './createApi'\r\nexport { buildCreateApi } from './createApi'\r\nexport { fakeBaseQuery } from './fakeBaseQuery'\r\nexport { copyWithStructuralSharing } from './utils/copyWithStructuralSharing'\r\nexport { createApi, coreModule } from './core'\r\n","/**\r\n * Alternative to `Array.flat(1)`\r\n * @param arr An array like [1,2,3,[1,2]]\r\n * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\r\n */\r\nexport const flatten = (arr: readonly any[]) => [].concat(...arr)\r\n","import { isPlainObject as _iPO } from '@reduxjs/toolkit'\r\n\r\n// remove type guard\r\nconst isPlainObject: (_: any) => boolean = _iPO\r\n\r\nexport function copyWithStructuralSharing(oldObj: any, newObj: T): T\r\nexport function copyWithStructuralSharing(oldObj: any, newObj: any): any {\r\n if (\r\n oldObj === newObj ||\r\n !(\r\n (isPlainObject(oldObj) && isPlainObject(newObj)) ||\r\n (Array.isArray(oldObj) && Array.isArray(newObj))\r\n )\r\n ) {\r\n return newObj\r\n }\r\n const newKeys = Object.keys(newObj)\r\n const oldKeys = Object.keys(oldObj)\r\n\r\n let isSameObject = newKeys.length === oldKeys.length\r\n const mergeObj: any = Array.isArray(newObj) ? [] : {}\r\n for (const key of newKeys) {\r\n mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key])\r\n if (isSameObject) isSameObject = oldObj[key] === mergeObj[key]\r\n }\r\n return isSameObject ? oldObj : mergeObj\r\n}\r\n","import { joinUrls } from './utils'\r\nimport { isPlainObject } from '@reduxjs/toolkit'\r\nimport type { BaseQueryApi, BaseQueryFn } from './baseQueryTypes'\r\nimport type { MaybePromise, Override } from './tsHelpers'\r\n\r\nexport type ResponseHandler =\r\n | 'json'\r\n | 'text'\r\n | ((response: Response) => Promise)\r\n\r\ntype CustomRequestInit = Override<\r\n RequestInit,\r\n {\r\n headers?:\r\n | Headers\r\n | string[][]\r\n | Record\r\n | undefined\r\n }\r\n>\r\n\r\nexport interface FetchArgs extends CustomRequestInit {\r\n url: string\r\n params?: Record\r\n body?: any\r\n responseHandler?: ResponseHandler\r\n validateStatus?: (response: Response, body: any) => boolean\r\n}\r\n\r\n/**\r\n * A mini-wrapper that passes arguments straight through to\r\n * {@link [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)}.\r\n * Avoids storing `fetch` in a closure, in order to permit mocking/monkey-patching.\r\n */\r\nconst defaultFetchFn: typeof fetch = (...args) => fetch(...args)\r\n\r\nconst defaultValidateStatus = (response: Response) =>\r\n response.status >= 200 && response.status <= 299\r\n\r\nconst isJsonContentType = (headers: Headers) =>\r\n headers.get('content-type')?.trim()?.startsWith('application/json')\r\n\r\nconst handleResponse = async (\r\n response: Response,\r\n responseHandler: ResponseHandler\r\n) => {\r\n if (typeof responseHandler === 'function') {\r\n return responseHandler(response)\r\n }\r\n\r\n if (responseHandler === 'text') {\r\n return response.text()\r\n }\r\n\r\n if (responseHandler === 'json') {\r\n const text = await response.text()\r\n return text.length ? JSON.parse(text) : null\r\n }\r\n}\r\n\r\nexport type FetchBaseQueryError =\r\n | {\r\n /**\r\n * * `number`:\r\n * HTTP status code\r\n */\r\n status: number\r\n data: unknown\r\n }\r\n | {\r\n /**\r\n * * `\"FETCH_ERROR\"`:\r\n * An error that occurred during execution of `fetch` or the `fetchFn` callback option\r\n **/\r\n status: 'FETCH_ERROR'\r\n data?: undefined\r\n error: string\r\n }\r\n | {\r\n /**\r\n * * `\"PARSING_ERROR\"`:\r\n * An error happened during parsing.\r\n * Most likely a non-JSON-response was returned with the default `responseHandler` \"JSON\",\r\n * or an error occurred while executing a custom `responseHandler`.\r\n **/\r\n status: 'PARSING_ERROR'\r\n originalStatus: number\r\n data: string\r\n error: string\r\n }\r\n | {\r\n /**\r\n * * `\"CUSTOM_ERROR\"`:\r\n * A custom error type that you can return from your `queryFn` where another error might not make sense.\r\n **/\r\n status: 'CUSTOM_ERROR'\r\n data?: unknown\r\n error: string\r\n }\r\n\r\nfunction stripUndefined(obj: any) {\r\n if (!isPlainObject(obj)) {\r\n return obj\r\n }\r\n const copy: Record = { ...obj }\r\n for (const [k, v] of Object.entries(copy)) {\r\n if (typeof v === 'undefined') delete copy[k]\r\n }\r\n return copy\r\n}\r\n\r\nexport type FetchBaseQueryArgs = {\r\n baseUrl?: string\r\n prepareHeaders?: (\r\n headers: Headers,\r\n api: Pick<\r\n BaseQueryApi,\r\n 'getState' | 'extra' | 'endpoint' | 'type' | 'forced'\r\n >\r\n ) => MaybePromise\r\n fetchFn?: (\r\n input: RequestInfo,\r\n init?: RequestInit | undefined\r\n ) => Promise\r\n paramsSerializer?: (params: Record) => string\r\n} & RequestInit\r\n\r\nexport type FetchBaseQueryMeta = { request: Request; response?: Response }\r\n\r\n/**\r\n * This is a very small wrapper around fetch that aims to simplify requests.\r\n *\r\n * @example\r\n * ```ts\r\n * const baseQuery = fetchBaseQuery({\r\n * baseUrl: 'https://api.your-really-great-app.com/v1/',\r\n * prepareHeaders: (headers, { getState }) => {\r\n * const token = (getState() as RootState).auth.token;\r\n * // If we have a token set in state, let's assume that we should be passing it.\r\n * if (token) {\r\n * headers.set('authorization', `Bearer ${token}`);\r\n * }\r\n * return headers;\r\n * },\r\n * })\r\n * ```\r\n *\r\n * @param {string} baseUrl\r\n * The base URL for an API service.\r\n * Typically in the format of https://example.com/\r\n *\r\n * @param {(headers: Headers, api: { getState: () => unknown; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders\r\n * An optional function that can be used to inject headers on requests.\r\n * Provides a Headers object, as well as most of the `BaseQueryApi` (`dispatch` is not available).\r\n * Useful for setting authentication or headers that need to be set conditionally.\r\n *\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers\r\n *\r\n * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise} fetchFn\r\n * Accepts a custom `fetch` function if you do not want to use the default on the window.\r\n * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`\r\n *\r\n * @param {(params: Record) => string} paramsSerializer\r\n * An optional function that can be used to stringify querystring parameters.\r\n */\r\nexport function fetchBaseQuery({\r\n baseUrl,\r\n prepareHeaders = (x) => x,\r\n fetchFn = defaultFetchFn,\r\n paramsSerializer,\r\n ...baseFetchOptions\r\n}: FetchBaseQueryArgs = {}): BaseQueryFn<\r\n string | FetchArgs,\r\n unknown,\r\n FetchBaseQueryError,\r\n {},\r\n FetchBaseQueryMeta\r\n> {\r\n if (typeof fetch === 'undefined' && fetchFn === defaultFetchFn) {\r\n console.warn(\r\n 'Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.'\r\n )\r\n }\r\n return async (arg, api) => {\r\n const { signal, getState, extra, endpoint, forced, type } = api\r\n let meta: FetchBaseQueryMeta | undefined\r\n let {\r\n url,\r\n method = 'GET' as const,\r\n headers = new Headers({}),\r\n body = undefined,\r\n params = undefined,\r\n responseHandler = 'json' as const,\r\n validateStatus = defaultValidateStatus,\r\n ...rest\r\n } = typeof arg == 'string' ? { url: arg } : arg\r\n let config: RequestInit = {\r\n ...baseFetchOptions,\r\n method,\r\n signal,\r\n body,\r\n ...rest,\r\n }\r\n\r\n config.headers = await prepareHeaders(\r\n new Headers(stripUndefined(headers)),\r\n { getState, extra, endpoint, forced, type }\r\n )\r\n\r\n // Only set the content-type to json if appropriate. Will not be true for FormData, ArrayBuffer, Blob, etc.\r\n const isJsonifiable = (body: any) =>\r\n typeof body === 'object' &&\r\n (isPlainObject(body) ||\r\n Array.isArray(body) ||\r\n typeof body.toJSON === 'function')\r\n\r\n if (!config.headers.has('content-type') && isJsonifiable(body)) {\r\n config.headers.set('content-type', 'application/json')\r\n }\r\n\r\n if (isJsonifiable(body) && isJsonContentType(config.headers)) {\r\n config.body = JSON.stringify(body)\r\n }\r\n\r\n if (params) {\r\n const divider = ~url.indexOf('?') ? '&' : '?'\r\n const query = paramsSerializer\r\n ? paramsSerializer(params)\r\n : new URLSearchParams(stripUndefined(params))\r\n url += divider + query\r\n }\r\n\r\n url = joinUrls(baseUrl, url)\r\n\r\n const request = new Request(url, config)\r\n const requestClone = request.clone()\r\n meta = { request: requestClone }\r\n\r\n let response\r\n try {\r\n response = await fetchFn(request)\r\n } catch (e) {\r\n return { error: { status: 'FETCH_ERROR', error: String(e) }, meta }\r\n }\r\n const responseClone = response.clone()\r\n\r\n meta.response = responseClone\r\n\r\n let resultData: any\r\n let responseText: string = ''\r\n try {\r\n let handleResponseError\r\n await Promise.all([\r\n handleResponse(response, responseHandler).then(\r\n (r) => (resultData = r),\r\n (e) => (handleResponseError = e)\r\n ),\r\n // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182\r\n // we *have* to \"use up\" both streams at the same time or they will stop running in node-fetch scenarios\r\n responseClone.text().then(\r\n (r) => (responseText = r),\r\n () => {}\r\n ),\r\n ])\r\n if (handleResponseError) throw handleResponseError\r\n } catch (e) {\r\n return {\r\n error: {\r\n status: 'PARSING_ERROR',\r\n originalStatus: response.status,\r\n data: responseText,\r\n error: String(e),\r\n },\r\n meta,\r\n }\r\n }\r\n\r\n return validateStatus(response, resultData)\r\n ? {\r\n data: resultData,\r\n meta,\r\n }\r\n : {\r\n error: {\r\n status: response.status,\r\n data: resultData,\r\n },\r\n meta,\r\n }\r\n }\r\n}\r\n","import { isAbsoluteUrl } from './isAbsoluteUrl'\r\n\r\nconst withoutTrailingSlash = (url: string) => url.replace(/\\/$/, '')\r\nconst withoutLeadingSlash = (url: string) => url.replace(/^\\//, '')\r\n\r\nexport function joinUrls(\r\n base: string | undefined,\r\n url: string | undefined\r\n): string {\r\n if (!base) {\r\n return url!\r\n }\r\n if (!url) {\r\n return base\r\n }\r\n\r\n if (isAbsoluteUrl(url)) {\r\n return url\r\n }\r\n\r\n base = withoutTrailingSlash(base)\r\n url = withoutLeadingSlash(url)\r\n\r\n return `${base}/${url}`\r\n}\r\n","/**\r\n * If either :// or // is present consider it to be an absolute url\r\n *\r\n * @param url string\r\n */\r\n\r\nexport function isAbsoluteUrl(url: string) {\r\n return new RegExp(`(^|:)//`).test(url)\r\n}\r\n","export class HandledError {\r\n constructor(\r\n public readonly value: any,\r\n public readonly meta: any = undefined\r\n ) {}\r\n}\r\n","import type { BaseQueryEnhancer } from './baseQueryTypes'\r\nimport { HandledError } from './HandledError'\r\n\r\n/**\r\n * Exponential backoff based on the attempt number.\r\n *\r\n * @remarks\r\n * 1. 600ms * random(0.4, 1.4)\r\n * 2. 1200ms * random(0.4, 1.4)\r\n * 3. 2400ms * random(0.4, 1.4)\r\n * 4. 4800ms * random(0.4, 1.4)\r\n * 5. 9600ms * random(0.4, 1.4)\r\n *\r\n * @param attempt - Current attempt\r\n * @param maxRetries - Maximum number of retries\r\n */\r\nasync function defaultBackoff(attempt: number = 0, maxRetries: number = 5) {\r\n const attempts = Math.min(attempt, maxRetries)\r\n\r\n const timeout = ~~((Math.random() + 0.4) * (300 << attempts)) // Force a positive int in the case we make this an option\r\n await new Promise((resolve) =>\r\n setTimeout((res: any) => resolve(res), timeout)\r\n )\r\n}\r\n\r\nexport interface RetryOptions {\r\n /**\r\n * How many times the query will be retried (default: 5)\r\n */\r\n maxRetries?: number\r\n /**\r\n * Function used to determine delay between retries\r\n */\r\n backoff?: (attempt: number, maxRetries: number) => Promise\r\n}\r\n\r\nfunction fail(e: any): never {\r\n throw Object.assign(new HandledError({ error: e }), {\r\n throwImmediately: true,\r\n })\r\n}\r\n\r\nconst retryWithBackoff: BaseQueryEnhancer<\r\n unknown,\r\n RetryOptions,\r\n RetryOptions | void\r\n> = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {\r\n const options = {\r\n maxRetries: 5,\r\n backoff: defaultBackoff,\r\n ...defaultOptions,\r\n ...extraOptions,\r\n }\r\n let retry = 0\r\n\r\n while (true) {\r\n try {\r\n const result = await baseQuery(args, api, extraOptions)\r\n // baseQueries _should_ return an error property, so we should check for that and throw it to continue retrying\r\n if (result.error) {\r\n throw new HandledError(result)\r\n }\r\n return result\r\n } catch (e: any) {\r\n retry++\r\n if (e.throwImmediately || retry > options.maxRetries) {\r\n if (e instanceof HandledError) {\r\n return e.value\r\n }\r\n\r\n // We don't know what this is, so we have to rethrow it\r\n throw e\r\n }\r\n await options.backoff(retry, options.maxRetries)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * // codeblock-meta title=\"Retry every request 5 times by default\"\r\n * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'\r\n * interface Post {\r\n * id: number\r\n * name: string\r\n * }\r\n * type PostsResponse = Post[]\r\n *\r\n * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.\r\n * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });\r\n * export const api = createApi({\r\n * baseQuery: staggeredBaseQuery,\r\n * endpoints: (build) => ({\r\n * getPosts: build.query({\r\n * query: () => ({ url: 'posts' }),\r\n * }),\r\n * getPost: build.query({\r\n * query: (id) => ({ url: `post/${id}` }),\r\n * extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint\r\n * }),\r\n * }),\r\n * });\r\n *\r\n * export const { useGetPostsQuery, useGetPostQuery } = api;\r\n * ```\r\n */\r\nexport const retry = /* @__PURE__ */ Object.assign(retryWithBackoff, { fail })\r\n","import type {\r\n ThunkDispatch,\r\n ActionCreatorWithoutPayload, // Workaround for API-Extractor\r\n} from '@reduxjs/toolkit'\r\nimport { createAction } from '@reduxjs/toolkit'\r\n\r\nexport const onFocus = /* @__PURE__ */ createAction('__rtkq/focused')\r\nexport const onFocusLost = /* @__PURE__ */ createAction('__rtkq/unfocused')\r\nexport const onOnline = /* @__PURE__ */ createAction('__rtkq/online')\r\nexport const onOffline = /* @__PURE__ */ createAction('__rtkq/offline')\r\n\r\nlet initialized = false\r\n\r\n/**\r\n * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.\r\n * It requires the dispatch method from your store.\r\n * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,\r\n * but you have the option of providing a callback for more granular control.\r\n *\r\n * @example\r\n * ```ts\r\n * setupListeners(store.dispatch)\r\n * ```\r\n *\r\n * @param dispatch - The dispatch method from your store\r\n * @param customHandler - An optional callback for more granular control over listener behavior\r\n * @returns Return value of the handler.\r\n * The default handler returns an `unsubscribe` method that can be called to remove the listeners.\r\n */\r\nexport function setupListeners(\r\n dispatch: ThunkDispatch,\r\n customHandler?: (\r\n dispatch: ThunkDispatch,\r\n actions: {\r\n onFocus: typeof onFocus\r\n onFocusLost: typeof onFocusLost\r\n onOnline: typeof onOnline\r\n onOffline: typeof onOffline\r\n }\r\n ) => () => void\r\n) {\r\n function defaultHandler() {\r\n const handleFocus = () => dispatch(onFocus())\r\n const handleFocusLost = () => dispatch(onFocusLost())\r\n const handleOnline = () => dispatch(onOnline())\r\n const handleOffline = () => dispatch(onOffline())\r\n const handleVisibilityChange = () => {\r\n if (window.document.visibilityState === 'visible') {\r\n handleFocus()\r\n } else {\r\n handleFocusLost()\r\n }\r\n }\r\n\r\n if (!initialized) {\r\n if (typeof window !== 'undefined' && window.addEventListener) {\r\n // Handle focus events\r\n window.addEventListener(\r\n 'visibilitychange',\r\n handleVisibilityChange,\r\n false\r\n )\r\n window.addEventListener('focus', handleFocus, false)\r\n\r\n // Handle connection events\r\n window.addEventListener('online', handleOnline, false)\r\n window.addEventListener('offline', handleOffline, false)\r\n initialized = true\r\n }\r\n }\r\n const unsubscribe = () => {\r\n window.removeEventListener('focus', handleFocus)\r\n window.removeEventListener('visibilitychange', handleVisibilityChange)\r\n window.removeEventListener('online', handleOnline)\r\n window.removeEventListener('offline', handleOffline)\r\n initialized = false\r\n }\r\n return unsubscribe\r\n }\r\n\r\n return customHandler\r\n ? customHandler(dispatch, { onFocus, onFocusLost, onOffline, onOnline })\r\n : defaultHandler()\r\n}\r\n","import { createNextState, createSelector } from '@reduxjs/toolkit'\r\nimport type {\r\n MutationSubState,\r\n QuerySubState,\r\n RootState as _RootState,\r\n RequestStatusFlags,\r\n QueryCacheKey,\r\n} from './apiState'\r\nimport { QueryStatus, getRequestStatusFlags } from './apiState'\r\nimport type {\r\n EndpointDefinitions,\r\n QueryDefinition,\r\n MutationDefinition,\r\n QueryArgFrom,\r\n TagTypesFrom,\r\n ReducerPathFrom,\r\n TagDescription,\r\n} from '../endpointDefinitions'\r\nimport { expandTagDescription } from '../endpointDefinitions'\r\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'\r\nimport { getMutationCacheKey } from './buildSlice'\r\nimport { flatten } from '../utils'\r\n\r\nexport type SkipToken = typeof skipToken\r\n/**\r\n * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`\r\n * instead of the query argument to get the same effect as if setting\r\n * `skip: true` in the query options.\r\n *\r\n * Useful for scenarios where a query should be skipped when `arg` is `undefined`\r\n * and TypeScript complains about it because `arg` is not allowed to be passed\r\n * in as `undefined`, such as\r\n *\r\n * ```ts\r\n * // codeblock-meta title=\"will error if the query argument is not allowed to be undefined\" no-transpile\r\n * useSomeQuery(arg, { skip: !!arg })\r\n * ```\r\n *\r\n * ```ts\r\n * // codeblock-meta title=\"using skipToken instead\" no-transpile\r\n * useSomeQuery(arg ?? skipToken)\r\n * ```\r\n *\r\n * If passed directly into a query or mutation selector, that selector will always\r\n * return an uninitialized state.\r\n */\r\nexport const skipToken = /* @__PURE__ */ Symbol.for('RTKQ/skipToken')\r\n/** @deprecated renamed to `skipToken` */\r\nexport const skipSelector = skipToken\r\n\r\ndeclare module './module' {\r\n export interface ApiEndpointQuery<\r\n Definition extends QueryDefinition,\r\n Definitions extends EndpointDefinitions\r\n > {\r\n select: QueryResultSelectorFactory<\r\n Definition,\r\n _RootState<\r\n Definitions,\r\n TagTypesFrom,\r\n ReducerPathFrom\r\n >\r\n >\r\n }\r\n\r\n export interface ApiEndpointMutation<\r\n Definition extends MutationDefinition,\r\n Definitions extends EndpointDefinitions\r\n > {\r\n select: MutationResultSelectorFactory<\r\n Definition,\r\n _RootState<\r\n Definitions,\r\n TagTypesFrom,\r\n ReducerPathFrom\r\n >\r\n >\r\n }\r\n}\r\n\r\ntype QueryResultSelectorFactory<\r\n Definition extends QueryDefinition,\r\n RootState\r\n> = (\r\n queryArg: QueryArgFrom | SkipToken\r\n) => (state: RootState) => QueryResultSelectorResult\r\n\r\nexport type QueryResultSelectorResult<\r\n Definition extends QueryDefinition\r\n> = QuerySubState & RequestStatusFlags\r\n\r\ntype MutationResultSelectorFactory<\r\n Definition extends MutationDefinition,\r\n RootState\r\n> = (\r\n requestId:\r\n | string\r\n | { requestId: string | undefined; fixedCacheKey: string | undefined }\r\n | SkipToken\r\n) => (state: RootState) => MutationResultSelectorResult\r\n\r\nexport type MutationResultSelectorResult<\r\n Definition extends MutationDefinition\r\n> = MutationSubState & RequestStatusFlags\r\n\r\nconst initialSubState: QuerySubState = {\r\n status: QueryStatus.uninitialized as const,\r\n}\r\n\r\n// abuse immer to freeze default states\r\nconst defaultQuerySubState = /* @__PURE__ */ createNextState(\r\n initialSubState,\r\n () => {}\r\n)\r\nconst defaultMutationSubState = /* @__PURE__ */ createNextState(\r\n initialSubState as MutationSubState,\r\n () => {}\r\n)\r\n\r\nexport function buildSelectors<\r\n Definitions extends EndpointDefinitions,\r\n ReducerPath extends string\r\n>({\r\n serializeQueryArgs,\r\n reducerPath,\r\n}: {\r\n serializeQueryArgs: InternalSerializeQueryArgs\r\n reducerPath: ReducerPath\r\n}) {\r\n type RootState = _RootState\r\n\r\n return { buildQuerySelector, buildMutationSelector, selectInvalidatedBy }\r\n\r\n function withRequestFlags(\r\n substate: T\r\n ): T & RequestStatusFlags {\r\n return {\r\n ...substate,\r\n ...getRequestStatusFlags(substate.status),\r\n }\r\n }\r\n\r\n function selectInternalState(rootState: RootState) {\r\n const state = rootState[reducerPath]\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!state) {\r\n if ((selectInternalState as any).triggered) return state\r\n ;(selectInternalState as any).triggered = true\r\n console.error(\r\n `Error: No data found at \\`state.${reducerPath}\\`. Did you forget to add the reducer to the store?`\r\n )\r\n }\r\n }\r\n return state\r\n }\r\n\r\n function buildQuerySelector(\r\n endpointName: string,\r\n endpointDefinition: QueryDefinition\r\n ) {\r\n return ((queryArgs: any) => {\r\n const selectQuerySubState = createSelector(\r\n selectInternalState,\r\n (internalState) =>\r\n (queryArgs === skipToken\r\n ? undefined\r\n : internalState?.queries?.[\r\n serializeQueryArgs({\r\n queryArgs,\r\n endpointDefinition,\r\n endpointName,\r\n })\r\n ]) ?? defaultQuerySubState\r\n )\r\n return createSelector(selectQuerySubState, withRequestFlags)\r\n }) as QueryResultSelectorFactory\r\n }\r\n\r\n function buildMutationSelector() {\r\n return ((id) => {\r\n let mutationId: string | typeof skipToken\r\n if (typeof id === 'object') {\r\n mutationId = getMutationCacheKey(id) ?? skipToken\r\n } else {\r\n mutationId = id\r\n }\r\n const selectMutationSubstate = createSelector(\r\n selectInternalState,\r\n (internalState) =>\r\n (mutationId === skipToken\r\n ? undefined\r\n : internalState?.mutations?.[mutationId]) ?? defaultMutationSubState\r\n )\r\n return createSelector(selectMutationSubstate, withRequestFlags)\r\n }) as MutationResultSelectorFactory\r\n }\r\n\r\n function selectInvalidatedBy(\r\n state: RootState,\r\n tags: ReadonlyArray>\r\n ): Array<{\r\n endpointName: string\r\n originalArgs: any\r\n queryCacheKey: QueryCacheKey\r\n }> {\r\n const apiState = state[reducerPath]\r\n const toInvalidate = new Set()\r\n for (const tag of tags.map(expandTagDescription)) {\r\n const provided = apiState.provided[tag.type]\r\n if (!provided) {\r\n continue\r\n }\r\n\r\n let invalidateSubscriptions =\r\n (tag.id !== undefined\r\n ? // id given: invalidate all queries that provide this type & id\r\n provided[tag.id]\r\n : // no id: invalidate all queries that provide this type\r\n flatten(Object.values(provided))) ?? []\r\n\r\n for (const invalidate of invalidateSubscriptions) {\r\n toInvalidate.add(invalidate)\r\n }\r\n }\r\n\r\n return flatten(\r\n Array.from(toInvalidate.values()).map((queryCacheKey) => {\r\n const querySubState = apiState.queries[queryCacheKey]\r\n return querySubState\r\n ? [\r\n {\r\n queryCacheKey,\r\n endpointName: querySubState.endpointName!,\r\n originalArgs: querySubState.originalArgs,\r\n },\r\n ]\r\n : []\r\n })\r\n )\r\n }\r\n}\r\n","import type { AnyAction, ThunkDispatch } from '@reduxjs/toolkit'\r\nimport type { RootState } from './core/apiState'\r\nimport type {\r\n BaseQueryExtraOptions,\r\n BaseQueryFn,\r\n BaseQueryResult,\r\n BaseQueryArg,\r\n BaseQueryApi,\r\n QueryReturnValue,\r\n BaseQueryError,\r\n BaseQueryMeta,\r\n} from './baseQueryTypes'\r\nimport type {\r\n HasRequiredProps,\r\n MaybePromise,\r\n OmitFromUnion,\r\n CastAny,\r\n} from './tsHelpers'\r\nimport type { NEVER } from './fakeBaseQuery'\r\n\r\nconst resultType = /* @__PURE__ */ Symbol()\r\nconst baseQuery = /* @__PURE__ */ Symbol()\r\n\r\ninterface EndpointDefinitionWithQuery<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ResultType\r\n> {\r\n /**\r\n * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * // codeblock-meta title=\"query example\"\r\n *\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\r\n * interface Post {\r\n * id: number\r\n * name: string\r\n * }\r\n * type PostsResponse = Post[]\r\n *\r\n * const api = createApi({\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * endpoints: (build) => ({\r\n * getPosts: build.query({\r\n * // highlight-start\r\n * query: () => 'posts',\r\n * // highlight-end\r\n * })\r\n * })\r\n * })\r\n * ```\r\n */\r\n query(arg: QueryArg): BaseQueryArg\r\n queryFn?: never\r\n /**\r\n * A function to manipulate the data returned by a query or mutation.\r\n */\r\n transformResponse?(\r\n baseQueryReturnValue: BaseQueryResult,\r\n meta: BaseQueryMeta,\r\n arg: QueryArg\r\n ): ResultType | Promise\r\n /**\r\n * Defaults to `true`.\r\n *\r\n * Most apps should leave this setting on. The only time it can be a performance issue\r\n * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\r\n * you're unable to paginate it.\r\n *\r\n * For details of how this works, please see the below. When it is set to `false`,\r\n * every request will cause subscribed components to rerender, even when the data has not changed.\r\n *\r\n * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\r\n */\r\n structuralSharing?: boolean\r\n}\r\n\r\ninterface EndpointDefinitionWithQueryFn<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ResultType\r\n> {\r\n /**\r\n * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\r\n *\r\n * @example\r\n * ```ts\r\n * // codeblock-meta title=\"Basic queryFn example\"\r\n *\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\r\n * interface Post {\r\n * id: number\r\n * name: string\r\n * }\r\n * type PostsResponse = Post[]\r\n *\r\n * const api = createApi({\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * endpoints: (build) => ({\r\n * getPosts: build.query({\r\n * query: () => 'posts',\r\n * }),\r\n * flipCoin: build.query<'heads' | 'tails', void>({\r\n * // highlight-start\r\n * queryFn(arg, queryApi, extraOptions, baseQuery) {\r\n * const randomVal = Math.random()\r\n * if (randomVal < 0.45) {\r\n * return { data: 'heads' }\r\n * }\r\n * if (randomVal < 0.9) {\r\n * return { data: 'tails' }\r\n * }\r\n * return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on it's edge!\" } }\r\n * }\r\n * // highlight-end\r\n * })\r\n * })\r\n * })\r\n * ```\r\n */\r\n queryFn(\r\n arg: QueryArg,\r\n api: BaseQueryApi,\r\n extraOptions: BaseQueryExtraOptions,\r\n baseQuery: (arg: Parameters[0]) => ReturnType\r\n ): MaybePromise>>\r\n query?: never\r\n transformResponse?: never\r\n /**\r\n * Defaults to `true`.\r\n *\r\n * Most apps should leave this setting on. The only time it can be a performance issue\r\n * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\r\n * you're unable to paginate it.\r\n *\r\n * For details of how this works, please see the below. When it is set to `false`,\r\n * every request will cause subscribed components to rerender, even when the data has not changed.\r\n *\r\n * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\r\n */\r\n structuralSharing?: boolean\r\n}\r\n\r\nexport type BaseEndpointDefinition<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ResultType\r\n> = (\r\n | ([CastAny, {}>] extends [NEVER]\r\n ? never\r\n : EndpointDefinitionWithQuery)\r\n | EndpointDefinitionWithQueryFn\r\n) & {\r\n /* phantom type */\r\n [resultType]?: ResultType\r\n /* phantom type */\r\n [baseQuery]?: BaseQuery\r\n} & HasRequiredProps<\r\n BaseQueryExtraOptions,\r\n { extraOptions: BaseQueryExtraOptions },\r\n { extraOptions?: BaseQueryExtraOptions }\r\n >\r\n\r\nexport enum DefinitionType {\r\n query = 'query',\r\n mutation = 'mutation',\r\n}\r\n\r\nexport type GetResultDescriptionFn<\r\n TagTypes extends string,\r\n ResultType,\r\n QueryArg,\r\n ErrorType,\r\n MetaType\r\n> = (\r\n result: ResultType | undefined,\r\n error: ErrorType | undefined,\r\n arg: QueryArg,\r\n meta: MetaType\r\n) => ReadonlyArray>\r\n\r\nexport type FullTagDescription = {\r\n type: TagType\r\n id?: number | string\r\n}\r\nexport type TagDescription = TagType | FullTagDescription\r\nexport type ResultDescription<\r\n TagTypes extends string,\r\n ResultType,\r\n QueryArg,\r\n ErrorType,\r\n MetaType\r\n> =\r\n | ReadonlyArray>\r\n | GetResultDescriptionFn\r\n\r\n/** @deprecated please use `onQueryStarted` instead */\r\nexport interface QueryApi {\r\n /** @deprecated please use `onQueryStarted` instead */\r\n dispatch: ThunkDispatch\r\n /** @deprecated please use `onQueryStarted` instead */\r\n getState(): RootState\r\n /** @deprecated please use `onQueryStarted` instead */\r\n extra: unknown\r\n /** @deprecated please use `onQueryStarted` instead */\r\n requestId: string\r\n /** @deprecated please use `onQueryStarted` instead */\r\n context: Context\r\n}\r\n\r\nexport interface QueryExtraOptions<\r\n TagTypes extends string,\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ReducerPath extends string = string\r\n> {\r\n type: DefinitionType.query\r\n /**\r\n * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\r\n * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\r\n * 1. `['Post']` - equivalent to `2`\r\n * 2. `[{ type: 'Post' }]` - equivalent to `1`\r\n * 3. `[{ type: 'Post', id: 1 }]`\r\n * 4. `(result, error, arg) => ['Post']` - equivalent to `5`\r\n * 5. `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\r\n * 6. `(result, error, arg) => [{ type: 'Post', id: 1 }]`\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * // codeblock-meta title=\"providesTags example\"\r\n *\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\r\n * interface Post {\r\n * id: number\r\n * name: string\r\n * }\r\n * type PostsResponse = Post[]\r\n *\r\n * const api = createApi({\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * tagTypes: ['Posts'],\r\n * endpoints: (build) => ({\r\n * getPosts: build.query({\r\n * query: () => 'posts',\r\n * // highlight-start\r\n * providesTags: (result) =>\r\n * result\r\n * ? [\r\n * ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\r\n * { type: 'Posts', id: 'LIST' },\r\n * ]\r\n * : [{ type: 'Posts', id: 'LIST' }],\r\n * // highlight-end\r\n * })\r\n * })\r\n * })\r\n * ```\r\n */\r\n providesTags?: ResultDescription<\r\n TagTypes,\r\n ResultType,\r\n QueryArg,\r\n BaseQueryError,\r\n BaseQueryMeta\r\n >\r\n /**\r\n * Not to be used. A query should not invalidate tags in the cache.\r\n */\r\n invalidatesTags?: never\r\n}\r\n\r\nexport type QueryDefinition<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n TagTypes extends string,\r\n ResultType,\r\n ReducerPath extends string = string\r\n> = BaseEndpointDefinition &\r\n QueryExtraOptions\r\n\r\nexport interface MutationExtraOptions<\r\n TagTypes extends string,\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ReducerPath extends string = string\r\n> {\r\n type: DefinitionType.mutation\r\n /**\r\n * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\r\n * Expects the same shapes as `providesTags`.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * // codeblock-meta title=\"invalidatesTags example\"\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\r\n * interface Post {\r\n * id: number\r\n * name: string\r\n * }\r\n * type PostsResponse = Post[]\r\n *\r\n * const api = createApi({\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * tagTypes: ['Posts'],\r\n * endpoints: (build) => ({\r\n * getPosts: build.query({\r\n * query: () => 'posts',\r\n * providesTags: (result) =>\r\n * result\r\n * ? [\r\n * ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\r\n * { type: 'Posts', id: 'LIST' },\r\n * ]\r\n * : [{ type: 'Posts', id: 'LIST' }],\r\n * }),\r\n * addPost: build.mutation>({\r\n * query(body) {\r\n * return {\r\n * url: `posts`,\r\n * method: 'POST',\r\n * body,\r\n * }\r\n * },\r\n * // highlight-start\r\n * invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\r\n * // highlight-end\r\n * }),\r\n * })\r\n * })\r\n * ```\r\n */\r\n invalidatesTags?: ResultDescription<\r\n TagTypes,\r\n ResultType,\r\n QueryArg,\r\n BaseQueryError,\r\n BaseQueryMeta\r\n >\r\n /**\r\n * Not to be used. A mutation should not provide tags to the cache.\r\n */\r\n providesTags?: never\r\n}\r\n\r\nexport type MutationDefinition<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n TagTypes extends string,\r\n ResultType,\r\n ReducerPath extends string = string\r\n> = BaseEndpointDefinition &\r\n MutationExtraOptions\r\n\r\nexport type EndpointDefinition<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n TagTypes extends string,\r\n ResultType,\r\n ReducerPath extends string = string\r\n> =\r\n | QueryDefinition\r\n | MutationDefinition\r\n\r\nexport type EndpointDefinitions = Record<\r\n string,\r\n EndpointDefinition\r\n>\r\n\r\nexport function isQueryDefinition(\r\n e: EndpointDefinition\r\n): e is QueryDefinition {\r\n return e.type === DefinitionType.query\r\n}\r\n\r\nexport function isMutationDefinition(\r\n e: EndpointDefinition\r\n): e is MutationDefinition {\r\n return e.type === DefinitionType.mutation\r\n}\r\n\r\nexport type EndpointBuilder<\r\n BaseQuery extends BaseQueryFn,\r\n TagTypes extends string,\r\n ReducerPath extends string\r\n> = {\r\n /**\r\n * An endpoint definition that retrieves data, and may provide tags to the cache.\r\n *\r\n * @example\r\n * ```js\r\n * // codeblock-meta title=\"Example of all query endpoint options\"\r\n * const api = createApi({\r\n * baseQuery,\r\n * endpoints: (build) => ({\r\n * getPost: build.query({\r\n * query: (id) => ({ url: `post/${id}` }),\r\n * // Pick out data and prevent nested properties in a hook or selector\r\n * transformResponse: (response) => response.data,\r\n * // `result` is the server response\r\n * providesTags: (result, error, id) => [{ type: 'Post', id }],\r\n * // trigger side effects or optimistic updates\r\n * onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\r\n * // handle subscriptions etc\r\n * onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\r\n * }),\r\n * }),\r\n *});\r\n *```\r\n */\r\n query(\r\n definition: OmitFromUnion<\r\n QueryDefinition,\r\n 'type'\r\n >\r\n ): QueryDefinition\r\n /**\r\n * An endpoint definition that alters data on the server or will possibly invalidate the cache.\r\n *\r\n * @example\r\n * ```js\r\n * // codeblock-meta title=\"Example of all mutation endpoint options\"\r\n * const api = createApi({\r\n * baseQuery,\r\n * endpoints: (build) => ({\r\n * updatePost: build.mutation({\r\n * query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\r\n * // Pick out data and prevent nested properties in a hook or selector\r\n * transformResponse: (response) => response.data,\r\n * // `result` is the server response\r\n * invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\r\n * // trigger side effects or optimistic updates\r\n * onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\r\n * // handle subscriptions etc\r\n * onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\r\n * }),\r\n * }),\r\n * });\r\n * ```\r\n */\r\n mutation(\r\n definition: OmitFromUnion<\r\n MutationDefinition<\r\n QueryArg,\r\n BaseQuery,\r\n TagTypes,\r\n ResultType,\r\n ReducerPath\r\n >,\r\n 'type'\r\n >\r\n ): MutationDefinition\r\n}\r\n\r\nexport type AssertTagTypes = >(t: T) => T\r\n\r\nexport function calculateProvidedBy(\r\n description:\r\n | ResultDescription\r\n | undefined,\r\n result: ResultType | undefined,\r\n error: ErrorType | undefined,\r\n queryArg: QueryArg,\r\n meta: MetaType | undefined,\r\n assertTagTypes: AssertTagTypes\r\n): readonly FullTagDescription[] {\r\n if (isFunction(description)) {\r\n return description(\r\n result as ResultType,\r\n error as undefined,\r\n queryArg,\r\n meta as MetaType\r\n )\r\n .map(expandTagDescription)\r\n .map(assertTagTypes)\r\n }\r\n if (Array.isArray(description)) {\r\n return description.map(expandTagDescription).map(assertTagTypes)\r\n }\r\n return []\r\n}\r\n\r\nfunction isFunction(t: T): t is Extract {\r\n return typeof t === 'function'\r\n}\r\n\r\nexport function expandTagDescription(\r\n description: TagDescription\r\n): FullTagDescription {\r\n return typeof description === 'string' ? { type: description } : description\r\n}\r\n\r\nexport type QueryArgFrom> =\r\n D extends BaseEndpointDefinition ? QA : unknown\r\nexport type ResultTypeFrom> =\r\n D extends BaseEndpointDefinition ? RT : unknown\r\n\r\nexport type ReducerPathFrom<\r\n D extends EndpointDefinition\r\n> = D extends EndpointDefinition ? RP : unknown\r\n\r\nexport type TagTypesFrom> =\r\n D extends EndpointDefinition ? RP : unknown\r\n\r\nexport type ReplaceTagTypes<\r\n Definitions extends EndpointDefinitions,\r\n NewTagTypes extends string\r\n> = {\r\n [K in keyof Definitions]: Definitions[K] extends QueryDefinition<\r\n infer QueryArg,\r\n infer BaseQuery,\r\n any,\r\n infer ResultType,\r\n infer ReducerPath\r\n >\r\n ? QueryDefinition\r\n : Definitions[K] extends MutationDefinition<\r\n infer QueryArg,\r\n infer BaseQuery,\r\n any,\r\n infer ResultType,\r\n infer ReducerPath\r\n >\r\n ? MutationDefinition<\r\n QueryArg,\r\n BaseQuery,\r\n NewTagTypes,\r\n ResultType,\r\n ReducerPath\r\n >\r\n : never\r\n}\r\n","import type { AnyAction, PayloadAction } from '@reduxjs/toolkit'\r\nimport {\r\n combineReducers,\r\n createAction,\r\n createSlice,\r\n isAnyOf,\r\n isFulfilled,\r\n isRejectedWithValue,\r\n} from '@reduxjs/toolkit'\r\nimport type {\r\n CombinedState as CombinedQueryState,\r\n QuerySubstateIdentifier,\r\n QuerySubState,\r\n MutationSubstateIdentifier,\r\n MutationSubState,\r\n MutationState,\r\n QueryState,\r\n InvalidationState,\r\n Subscribers,\r\n QueryCacheKey,\r\n SubscriptionState,\r\n ConfigState,\r\n} from './apiState'\r\nimport { QueryStatus } from './apiState'\r\nimport type { MutationThunk, QueryThunk } from './buildThunks'\r\nimport { calculateProvidedByThunk } from './buildThunks'\r\nimport type {\r\n AssertTagTypes,\r\n EndpointDefinitions,\r\n} from '../endpointDefinitions'\r\nimport type { Patch } from 'immer'\r\nimport { applyPatches } from 'immer'\r\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners'\r\nimport {\r\n isDocumentVisible,\r\n isOnline,\r\n copyWithStructuralSharing,\r\n} from '../utils'\r\nimport type { ApiContext } from '../apiTypes'\r\n\r\nfunction updateQuerySubstateIfExists(\r\n state: QueryState,\r\n queryCacheKey: QueryCacheKey,\r\n update: (substate: QuerySubState) => void\r\n) {\r\n const substate = state[queryCacheKey]\r\n if (substate) {\r\n update(substate)\r\n }\r\n}\r\n\r\nexport function getMutationCacheKey(\r\n id:\r\n | MutationSubstateIdentifier\r\n | { requestId: string; arg: { fixedCacheKey?: string | undefined } }\r\n): string\r\nexport function getMutationCacheKey(id: {\r\n fixedCacheKey?: string\r\n requestId?: string\r\n}): string | undefined\r\n\r\nexport function getMutationCacheKey(\r\n id:\r\n | { fixedCacheKey?: string; requestId?: string }\r\n | MutationSubstateIdentifier\r\n | { requestId: string; arg: { fixedCacheKey?: string | undefined } }\r\n): string | undefined {\r\n return ('arg' in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId\r\n}\r\n\r\nfunction updateMutationSubstateIfExists(\r\n state: MutationState,\r\n id:\r\n | MutationSubstateIdentifier\r\n | { requestId: string; arg: { fixedCacheKey?: string | undefined } },\r\n update: (substate: MutationSubState) => void\r\n) {\r\n const substate = state[getMutationCacheKey(id)]\r\n if (substate) {\r\n update(substate)\r\n }\r\n}\r\n\r\nconst initialState = {} as any\r\n\r\nexport function buildSlice({\r\n reducerPath,\r\n queryThunk,\r\n mutationThunk,\r\n context: {\r\n endpointDefinitions: definitions,\r\n apiUid,\r\n extractRehydrationInfo,\r\n hasRehydrationInfo,\r\n },\r\n assertTagType,\r\n config,\r\n}: {\r\n reducerPath: string\r\n queryThunk: QueryThunk\r\n mutationThunk: MutationThunk\r\n context: ApiContext\r\n assertTagType: AssertTagTypes\r\n config: Omit<\r\n ConfigState,\r\n 'online' | 'focused' | 'middlewareRegistered'\r\n >\r\n}) {\r\n const resetApiState = createAction(`${reducerPath}/resetApiState`)\r\n const querySlice = createSlice({\r\n name: `${reducerPath}/queries`,\r\n initialState: initialState as QueryState,\r\n reducers: {\r\n removeQueryResult(\r\n draft,\r\n { payload: { queryCacheKey } }: PayloadAction\r\n ) {\r\n delete draft[queryCacheKey]\r\n },\r\n queryResultPatched(\r\n draft,\r\n {\r\n payload: { queryCacheKey, patches },\r\n }: PayloadAction<\r\n QuerySubstateIdentifier & { patches: readonly Patch[] }\r\n >\r\n ) {\r\n updateQuerySubstateIfExists(draft, queryCacheKey, (substate) => {\r\n substate.data = applyPatches(substate.data as any, patches.concat())\r\n })\r\n },\r\n },\r\n extraReducers(builder) {\r\n builder\r\n .addCase(queryThunk.pending, (draft, { meta, meta: { arg } }) => {\r\n if (arg.subscribe) {\r\n // only initialize substate if we want to subscribe to it\r\n draft[arg.queryCacheKey] ??= {\r\n status: QueryStatus.uninitialized,\r\n endpointName: arg.endpointName,\r\n }\r\n }\r\n\r\n updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {\r\n substate.status = QueryStatus.pending\r\n substate.requestId = meta.requestId\r\n if (arg.originalArgs !== undefined) {\r\n substate.originalArgs = arg.originalArgs\r\n }\r\n substate.startedTimeStamp = meta.startedTimeStamp\r\n })\r\n })\r\n .addCase(queryThunk.fulfilled, (draft, { meta, payload }) => {\r\n updateQuerySubstateIfExists(\r\n draft,\r\n meta.arg.queryCacheKey,\r\n (substate) => {\r\n if (substate.requestId !== meta.requestId) return\r\n substate.status = QueryStatus.fulfilled\r\n substate.data =\r\n definitions[meta.arg.endpointName].structuralSharing ?? true\r\n ? copyWithStructuralSharing(substate.data, payload)\r\n : payload\r\n delete substate.error\r\n substate.fulfilledTimeStamp = meta.fulfilledTimeStamp\r\n }\r\n )\r\n })\r\n .addCase(\r\n queryThunk.rejected,\r\n (draft, { meta: { condition, arg, requestId }, error, payload }) => {\r\n updateQuerySubstateIfExists(\r\n draft,\r\n arg.queryCacheKey,\r\n (substate) => {\r\n if (condition) {\r\n // request was aborted due to condition (another query already running)\r\n } else {\r\n // request failed\r\n if (substate.requestId !== requestId) return\r\n substate.status = QueryStatus.rejected\r\n substate.error = (payload ?? error) as any\r\n }\r\n }\r\n )\r\n }\r\n )\r\n .addMatcher(hasRehydrationInfo, (draft, action) => {\r\n const { queries } = extractRehydrationInfo(action)!\r\n for (const [key, entry] of Object.entries(queries)) {\r\n if (\r\n // do not rehydrate entries that were currently in flight.\r\n entry?.status === QueryStatus.fulfilled ||\r\n entry?.status === QueryStatus.rejected\r\n ) {\r\n draft[key] = entry\r\n }\r\n }\r\n })\r\n },\r\n })\r\n const mutationSlice = createSlice({\r\n name: `${reducerPath}/mutations`,\r\n initialState: initialState as MutationState,\r\n reducers: {\r\n removeMutationResult(\r\n draft,\r\n { payload }: PayloadAction\r\n ) {\r\n const cacheKey = getMutationCacheKey(payload)\r\n if (cacheKey in draft) {\r\n delete draft[cacheKey]\r\n }\r\n },\r\n },\r\n extraReducers(builder) {\r\n builder\r\n .addCase(\r\n mutationThunk.pending,\r\n (draft, { meta, meta: { requestId, arg, startedTimeStamp } }) => {\r\n if (!arg.track) return\r\n\r\n draft[getMutationCacheKey(meta)] = {\r\n requestId,\r\n status: QueryStatus.pending,\r\n endpointName: arg.endpointName,\r\n startedTimeStamp,\r\n }\r\n }\r\n )\r\n .addCase(mutationThunk.fulfilled, (draft, { payload, meta }) => {\r\n if (!meta.arg.track) return\r\n\r\n updateMutationSubstateIfExists(draft, meta, (substate) => {\r\n if (substate.requestId !== meta.requestId) return\r\n substate.status = QueryStatus.fulfilled\r\n substate.data = payload\r\n substate.fulfilledTimeStamp = meta.fulfilledTimeStamp\r\n })\r\n })\r\n .addCase(mutationThunk.rejected, (draft, { payload, error, meta }) => {\r\n if (!meta.arg.track) return\r\n\r\n updateMutationSubstateIfExists(draft, meta, (substate) => {\r\n if (substate.requestId !== meta.requestId) return\r\n\r\n substate.status = QueryStatus.rejected\r\n substate.error = (payload ?? error) as any\r\n })\r\n })\r\n .addMatcher(hasRehydrationInfo, (draft, action) => {\r\n const { mutations } = extractRehydrationInfo(action)!\r\n for (const [key, entry] of Object.entries(mutations)) {\r\n if (\r\n // do not rehydrate entries that were currently in flight.\r\n (entry?.status === QueryStatus.fulfilled ||\r\n entry?.status === QueryStatus.rejected) &&\r\n // only rehydrate endpoints that were persisted using a `fixedCacheKey`\r\n key !== entry?.requestId\r\n ) {\r\n draft[key] = entry\r\n }\r\n }\r\n })\r\n },\r\n })\r\n\r\n const invalidationSlice = createSlice({\r\n name: `${reducerPath}/invalidation`,\r\n initialState: initialState as InvalidationState,\r\n reducers: {},\r\n extraReducers(builder) {\r\n builder\r\n .addCase(\r\n querySlice.actions.removeQueryResult,\r\n (draft, { payload: { queryCacheKey } }) => {\r\n for (const tagTypeSubscriptions of Object.values(draft)) {\r\n for (const idSubscriptions of Object.values(\r\n tagTypeSubscriptions\r\n )) {\r\n const foundAt = idSubscriptions.indexOf(queryCacheKey)\r\n if (foundAt !== -1) {\r\n idSubscriptions.splice(foundAt, 1)\r\n }\r\n }\r\n }\r\n }\r\n )\r\n .addMatcher(hasRehydrationInfo, (draft, action) => {\r\n const { provided } = extractRehydrationInfo(action)!\r\n for (const [type, incomingTags] of Object.entries(provided)) {\r\n for (const [id, cacheKeys] of Object.entries(incomingTags)) {\r\n const subscribedQueries = ((draft[type] ??= {})[\r\n id || '__internal_without_id'\r\n ] ??= [])\r\n for (const queryCacheKey of cacheKeys) {\r\n const alreadySubscribed =\r\n subscribedQueries.includes(queryCacheKey)\r\n if (!alreadySubscribed) {\r\n subscribedQueries.push(queryCacheKey)\r\n }\r\n }\r\n }\r\n }\r\n })\r\n .addMatcher(\r\n isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)),\r\n (draft, action) => {\r\n const providedTags = calculateProvidedByThunk(\r\n action,\r\n 'providesTags',\r\n definitions,\r\n assertTagType\r\n )\r\n const { queryCacheKey } = action.meta.arg\r\n\r\n for (const { type, id } of providedTags) {\r\n const subscribedQueries = ((draft[type] ??= {})[\r\n id || '__internal_without_id'\r\n ] ??= [])\r\n const alreadySubscribed =\r\n subscribedQueries.includes(queryCacheKey)\r\n if (!alreadySubscribed) {\r\n subscribedQueries.push(queryCacheKey)\r\n }\r\n }\r\n }\r\n )\r\n },\r\n })\r\n\r\n const subscriptionSlice = createSlice({\r\n name: `${reducerPath}/subscriptions`,\r\n initialState: initialState as SubscriptionState,\r\n reducers: {\r\n updateSubscriptionOptions(\r\n draft,\r\n {\r\n payload: { queryCacheKey, requestId, options },\r\n }: PayloadAction<\r\n {\r\n endpointName: string\r\n requestId: string\r\n options: Subscribers[number]\r\n } & QuerySubstateIdentifier\r\n >\r\n ) {\r\n if (draft?.[queryCacheKey]?.[requestId]) {\r\n draft[queryCacheKey]![requestId] = options\r\n }\r\n },\r\n unsubscribeQueryResult(\r\n draft,\r\n {\r\n payload: { queryCacheKey, requestId },\r\n }: PayloadAction<{ requestId: string } & QuerySubstateIdentifier>\r\n ) {\r\n if (draft[queryCacheKey]) {\r\n delete draft[queryCacheKey]![requestId]\r\n }\r\n },\r\n },\r\n extraReducers: (builder) => {\r\n builder\r\n .addCase(\r\n querySlice.actions.removeQueryResult,\r\n (draft, { payload: { queryCacheKey } }) => {\r\n delete draft[queryCacheKey]\r\n }\r\n )\r\n .addCase(queryThunk.pending, (draft, { meta: { arg, requestId } }) => {\r\n if (arg.subscribe) {\r\n const substate = (draft[arg.queryCacheKey] ??= {})\r\n substate[requestId] =\r\n arg.subscriptionOptions ?? substate[requestId] ?? {}\r\n }\r\n })\r\n .addCase(\r\n queryThunk.rejected,\r\n (draft, { meta: { condition, arg, requestId }, error, payload }) => {\r\n // request was aborted due to condition (another query already running)\r\n if (condition && arg.subscribe) {\r\n const substate = (draft[arg.queryCacheKey] ??= {})\r\n substate[requestId] =\r\n arg.subscriptionOptions ?? substate[requestId] ?? {}\r\n }\r\n }\r\n )\r\n // update the state to be a new object to be picked up as a \"state change\"\r\n // by redux-persist's `autoMergeLevel2`\r\n .addMatcher(hasRehydrationInfo, (draft) => ({ ...draft }))\r\n },\r\n })\r\n\r\n const configSlice = createSlice({\r\n name: `${reducerPath}/config`,\r\n initialState: {\r\n online: isOnline(),\r\n focused: isDocumentVisible(),\r\n middlewareRegistered: false,\r\n ...config,\r\n } as ConfigState,\r\n reducers: {\r\n middlewareRegistered(state, { payload }: PayloadAction) {\r\n state.middlewareRegistered =\r\n state.middlewareRegistered === 'conflict' || apiUid !== payload\r\n ? 'conflict'\r\n : true\r\n },\r\n },\r\n extraReducers: (builder) => {\r\n builder\r\n .addCase(onOnline, (state) => {\r\n state.online = true\r\n })\r\n .addCase(onOffline, (state) => {\r\n state.online = false\r\n })\r\n .addCase(onFocus, (state) => {\r\n state.focused = true\r\n })\r\n .addCase(onFocusLost, (state) => {\r\n state.focused = false\r\n })\r\n // update the state to be a new object to be picked up as a \"state change\"\r\n // by redux-persist's `autoMergeLevel2`\r\n .addMatcher(hasRehydrationInfo, (draft) => ({ ...draft }))\r\n },\r\n })\r\n\r\n const combinedReducer = combineReducers<\r\n CombinedQueryState\r\n >({\r\n queries: querySlice.reducer,\r\n mutations: mutationSlice.reducer,\r\n provided: invalidationSlice.reducer,\r\n subscriptions: subscriptionSlice.reducer,\r\n config: configSlice.reducer,\r\n })\r\n\r\n const reducer: typeof combinedReducer = (state, action) =>\r\n combinedReducer(resetApiState.match(action) ? undefined : state, action)\r\n\r\n const actions = {\r\n ...configSlice.actions,\r\n ...querySlice.actions,\r\n ...subscriptionSlice.actions,\r\n ...mutationSlice.actions,\r\n /** @deprecated has been renamed to `removeMutationResult` */\r\n unsubscribeMutationResult: mutationSlice.actions.removeMutationResult,\r\n resetApiState,\r\n }\r\n\r\n return { reducer, actions }\r\n}\r\nexport type SliceActions = ReturnType['actions']\r\n","import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'\r\nimport type { Api, ApiContext } from '../apiTypes'\r\nimport type {\r\n BaseQueryFn,\r\n BaseQueryError,\r\n QueryReturnValue,\r\n} from '../baseQueryTypes'\r\nimport type { RootState, QueryKeys, QuerySubstateIdentifier } from './apiState'\r\nimport { QueryStatus } from './apiState'\r\nimport type { StartQueryActionCreatorOptions } from './buildInitiate'\r\nimport type {\r\n AssertTagTypes,\r\n EndpointDefinition,\r\n EndpointDefinitions,\r\n MutationDefinition,\r\n QueryArgFrom,\r\n QueryDefinition,\r\n ResultTypeFrom,\r\n} from '../endpointDefinitions'\r\nimport { calculateProvidedBy } from '../endpointDefinitions'\r\nimport type { AsyncThunkPayloadCreator, Draft } from '@reduxjs/toolkit'\r\nimport {\r\n isAllOf,\r\n isFulfilled,\r\n isPending,\r\n isRejected,\r\n isRejectedWithValue,\r\n} from '@reduxjs/toolkit'\r\nimport type { Patch } from 'immer'\r\nimport { isDraftable, produceWithPatches } from 'immer'\r\nimport type {\r\n AnyAction,\r\n ThunkAction,\r\n ThunkDispatch,\r\n AsyncThunk,\r\n} from '@reduxjs/toolkit'\r\nimport { createAsyncThunk } from '@reduxjs/toolkit'\r\n\r\nimport { HandledError } from '../HandledError'\r\n\r\nimport type { ApiEndpointQuery, PrefetchOptions } from './module'\r\nimport type { UnwrapPromise } from '../tsHelpers'\r\n\r\ndeclare module './module' {\r\n export interface ApiEndpointQuery<\r\n Definition extends QueryDefinition,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n Definitions extends EndpointDefinitions\r\n > extends Matchers {}\r\n\r\n export interface ApiEndpointMutation<\r\n Definition extends MutationDefinition,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n Definitions extends EndpointDefinitions\r\n > extends Matchers {}\r\n}\r\n\r\ntype EndpointThunk<\r\n Thunk extends QueryThunk | MutationThunk,\r\n Definition extends EndpointDefinition\r\n> = Definition extends EndpointDefinition<\r\n infer QueryArg,\r\n infer BaseQueryFn,\r\n any,\r\n infer ResultType\r\n>\r\n ? Thunk extends AsyncThunk\r\n ? AsyncThunk<\r\n ResultType,\r\n ATArg & { originalArgs: QueryArg },\r\n ATConfig & { rejectValue: BaseQueryError }\r\n >\r\n : never\r\n : never\r\n\r\nexport type PendingAction<\r\n Thunk extends QueryThunk | MutationThunk,\r\n Definition extends EndpointDefinition\r\n> = ReturnType['pending']>\r\n\r\nexport type FulfilledAction<\r\n Thunk extends QueryThunk | MutationThunk,\r\n Definition extends EndpointDefinition\r\n> = ReturnType['fulfilled']>\r\n\r\nexport type RejectedAction<\r\n Thunk extends QueryThunk | MutationThunk,\r\n Definition extends EndpointDefinition\r\n> = ReturnType['rejected']>\r\n\r\nexport type Matcher = (value: any) => value is M\r\n\r\nexport interface Matchers<\r\n Thunk extends QueryThunk | MutationThunk,\r\n Definition extends EndpointDefinition\r\n> {\r\n matchPending: Matcher>\r\n matchFulfilled: Matcher>\r\n matchRejected: Matcher>\r\n}\r\n\r\nexport interface QueryThunkArg\r\n extends QuerySubstateIdentifier,\r\n StartQueryActionCreatorOptions {\r\n type: 'query'\r\n originalArgs: unknown\r\n endpointName: string\r\n}\r\n\r\nexport interface MutationThunkArg {\r\n type: 'mutation'\r\n originalArgs: unknown\r\n endpointName: string\r\n track?: boolean\r\n fixedCacheKey?: string\r\n}\r\n\r\nexport type ThunkResult = unknown\r\n\r\nexport type ThunkApiMetaConfig = {\r\n pendingMeta: { startedTimeStamp: number }\r\n fulfilledMeta: {\r\n fulfilledTimeStamp: number\r\n baseQueryMeta: unknown\r\n }\r\n rejectedMeta: {\r\n baseQueryMeta: unknown\r\n }\r\n}\r\nexport type QueryThunk = AsyncThunk<\r\n ThunkResult,\r\n QueryThunkArg,\r\n ThunkApiMetaConfig\r\n>\r\nexport type MutationThunk = AsyncThunk<\r\n ThunkResult,\r\n MutationThunkArg,\r\n ThunkApiMetaConfig\r\n>\r\n\r\nfunction defaultTransformResponse(baseQueryReturnValue: unknown) {\r\n return baseQueryReturnValue\r\n}\r\n\r\nexport type MaybeDrafted = T | Draft\r\nexport type Recipe = (data: MaybeDrafted) => void | MaybeDrafted\r\n\r\nexport type PatchQueryDataThunk<\r\n Definitions extends EndpointDefinitions,\r\n PartialState\r\n> = >(\r\n endpointName: EndpointName,\r\n args: QueryArgFrom,\r\n patches: readonly Patch[]\r\n) => ThunkAction\r\n\r\nexport type UpdateQueryDataThunk<\r\n Definitions extends EndpointDefinitions,\r\n PartialState\r\n> = >(\r\n endpointName: EndpointName,\r\n args: QueryArgFrom,\r\n updateRecipe: Recipe>\r\n) => ThunkAction\r\n\r\n/**\r\n * An object returned from dispatching a `api.util.updateQueryData` call.\r\n */\r\nexport type PatchCollection = {\r\n /**\r\n * An `immer` Patch describing the cache update.\r\n */\r\n patches: Patch[]\r\n /**\r\n * An `immer` Patch to revert the cache update.\r\n */\r\n inversePatches: Patch[]\r\n /**\r\n * A function that will undo the cache update.\r\n */\r\n undo: () => void\r\n}\r\n\r\nexport function buildThunks<\r\n BaseQuery extends BaseQueryFn,\r\n ReducerPath extends string,\r\n Definitions extends EndpointDefinitions\r\n>({\r\n reducerPath,\r\n baseQuery,\r\n context: { endpointDefinitions },\r\n serializeQueryArgs,\r\n api,\r\n}: {\r\n baseQuery: BaseQuery\r\n reducerPath: ReducerPath\r\n context: ApiContext\r\n serializeQueryArgs: InternalSerializeQueryArgs\r\n api: Api\r\n}) {\r\n type State = RootState\r\n\r\n const patchQueryData: PatchQueryDataThunk =\r\n (endpointName, args, patches) => (dispatch) => {\r\n const endpointDefinition = endpointDefinitions[endpointName]\r\n dispatch(\r\n api.internalActions.queryResultPatched({\r\n queryCacheKey: serializeQueryArgs({\r\n queryArgs: args,\r\n endpointDefinition,\r\n endpointName,\r\n }),\r\n patches,\r\n })\r\n )\r\n }\r\n\r\n const updateQueryData: UpdateQueryDataThunk =\r\n (endpointName, args, updateRecipe) => (dispatch, getState) => {\r\n const currentState = (\r\n api.endpoints[endpointName] as ApiEndpointQuery\r\n ).select(args)(getState())\r\n let ret: PatchCollection = {\r\n patches: [],\r\n inversePatches: [],\r\n undo: () =>\r\n dispatch(\r\n api.util.patchQueryData(endpointName, args, ret.inversePatches)\r\n ),\r\n }\r\n if (currentState.status === QueryStatus.uninitialized) {\r\n return ret\r\n }\r\n if ('data' in currentState) {\r\n if (isDraftable(currentState.data)) {\r\n const [, patches, inversePatches] = produceWithPatches(\r\n currentState.data,\r\n updateRecipe\r\n )\r\n ret.patches.push(...patches)\r\n ret.inversePatches.push(...inversePatches)\r\n } else {\r\n const value = updateRecipe(currentState.data)\r\n ret.patches.push({ op: 'replace', path: [], value })\r\n ret.inversePatches.push({\r\n op: 'replace',\r\n path: [],\r\n value: currentState.data,\r\n })\r\n }\r\n }\r\n\r\n dispatch(api.util.patchQueryData(endpointName, args, ret.patches))\r\n\r\n return ret\r\n }\r\n\r\n const executeEndpoint: AsyncThunkPayloadCreator<\r\n ThunkResult,\r\n QueryThunkArg | MutationThunkArg,\r\n ThunkApiMetaConfig & { state: RootState }\r\n > = async (\r\n arg,\r\n { signal, rejectWithValue, fulfillWithValue, dispatch, getState, extra }\r\n ) => {\r\n const endpointDefinition = endpointDefinitions[arg.endpointName]\r\n\r\n try {\r\n let transformResponse: (\r\n baseQueryReturnValue: any,\r\n meta: any,\r\n arg: any\r\n ) => any = defaultTransformResponse\r\n let result: QueryReturnValue\r\n const baseQueryApi = {\r\n signal,\r\n dispatch,\r\n getState,\r\n extra,\r\n endpoint: arg.endpointName,\r\n type: arg.type,\r\n forced:\r\n arg.type === 'query' ? isForcedQuery(arg, getState()) : undefined,\r\n }\r\n if (endpointDefinition.query) {\r\n result = await baseQuery(\r\n endpointDefinition.query(arg.originalArgs),\r\n baseQueryApi,\r\n endpointDefinition.extraOptions as any\r\n )\r\n\r\n if (endpointDefinition.transformResponse) {\r\n transformResponse = endpointDefinition.transformResponse\r\n }\r\n } else {\r\n result = await endpointDefinition.queryFn(\r\n arg.originalArgs,\r\n baseQueryApi,\r\n endpointDefinition.extraOptions as any,\r\n (arg) =>\r\n baseQuery(arg, baseQueryApi, endpointDefinition.extraOptions as any)\r\n )\r\n }\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development'\r\n ) {\r\n const what = endpointDefinition.query ? '`baseQuery`' : '`queryFn`'\r\n let err: undefined | string\r\n if (!result) {\r\n err = `${what} did not return anything.`\r\n } else if (typeof result !== 'object') {\r\n err = `${what} did not return an object.`\r\n } else if (result.error && result.data) {\r\n err = `${what} returned an object containing both \\`error\\` and \\`result\\`.`\r\n } else if (result.error === undefined && result.data === undefined) {\r\n err = `${what} returned an object containing neither a valid \\`error\\` and \\`result\\`. At least one of them should not be \\`undefined\\``\r\n } else {\r\n for (const key of Object.keys(result)) {\r\n if (key !== 'error' && key !== 'data' && key !== 'meta') {\r\n err = `The object returned by ${what} has the unknown property ${key}.`\r\n break\r\n }\r\n }\r\n }\r\n if (err) {\r\n console.error(\r\n `Error encountered handling the endpoint ${arg.endpointName}.\r\n ${err}\r\n It needs to return an object with either the shape \\`{ data: }\\` or \\`{ error: }\\` that may contain an optional \\`meta\\` property.\r\n Object returned was:`,\r\n result\r\n )\r\n }\r\n }\r\n\r\n if (result.error) throw new HandledError(result.error, result.meta)\r\n\r\n return fulfillWithValue(\r\n await transformResponse(result.data, result.meta, arg.originalArgs),\r\n {\r\n fulfilledTimeStamp: Date.now(),\r\n baseQueryMeta: result.meta,\r\n }\r\n )\r\n } catch (error) {\r\n if (error instanceof HandledError) {\r\n return rejectWithValue(error.value, { baseQueryMeta: error.meta })\r\n }\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development'\r\n ) {\r\n console.error(\r\n `An unhandled error occurred processing a request for the endpoint \"${arg.endpointName}\".\r\nIn the case of an unhandled error, no tags will be \"provided\" or \"invalidated\".`,\r\n error\r\n )\r\n } else {\r\n console.error(error)\r\n }\r\n throw error\r\n }\r\n }\r\n\r\n function isForcedQuery(\r\n arg: QueryThunkArg,\r\n state: RootState\r\n ) {\r\n const requestState = state[reducerPath]?.queries?.[arg.queryCacheKey]\r\n const baseFetchOnMountOrArgChange =\r\n state[reducerPath]?.config.refetchOnMountOrArgChange\r\n\r\n const fulfilledVal = requestState?.fulfilledTimeStamp\r\n const refetchVal =\r\n arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange)\r\n\r\n if (refetchVal) {\r\n // Return if its true or compare the dates because it must be a number\r\n return (\r\n refetchVal === true ||\r\n (Number(new Date()) - Number(fulfilledVal)) / 1000 >= refetchVal\r\n )\r\n }\r\n return false\r\n }\r\n\r\n const queryThunk = createAsyncThunk<\r\n ThunkResult,\r\n QueryThunkArg,\r\n ThunkApiMetaConfig & { state: RootState }\r\n >(`${reducerPath}/executeQuery`, executeEndpoint, {\r\n getPendingMeta() {\r\n return { startedTimeStamp: Date.now() }\r\n },\r\n condition(arg, { getState }) {\r\n const state = getState()\r\n const requestState = state[reducerPath]?.queries?.[arg.queryCacheKey]\r\n const fulfilledVal = requestState?.fulfilledTimeStamp\r\n\r\n // Don't retry a request that's currently in-flight\r\n if (requestState?.status === 'pending') return false\r\n\r\n // if this is forced, continue\r\n if (isForcedQuery(arg, state)) return true\r\n\r\n // Pull from the cache unless we explicitly force refetch or qualify based on time\r\n if (fulfilledVal)\r\n // Value is cached and we didn't specify to refresh, skip it.\r\n return false\r\n\r\n return true\r\n },\r\n dispatchConditionRejection: true,\r\n })\r\n\r\n const mutationThunk = createAsyncThunk<\r\n ThunkResult,\r\n MutationThunkArg,\r\n ThunkApiMetaConfig & { state: RootState }\r\n >(`${reducerPath}/executeMutation`, executeEndpoint, {\r\n getPendingMeta() {\r\n return { startedTimeStamp: Date.now() }\r\n },\r\n })\r\n\r\n const hasTheForce = (options: any): options is { force: boolean } =>\r\n 'force' in options\r\n const hasMaxAge = (\r\n options: any\r\n ): options is { ifOlderThan: false | number } => 'ifOlderThan' in options\r\n\r\n const prefetch =\r\n >(\r\n endpointName: EndpointName,\r\n arg: any,\r\n options: PrefetchOptions\r\n ): ThunkAction =>\r\n (dispatch: ThunkDispatch, getState: () => any) => {\r\n const force = hasTheForce(options) && options.force\r\n const maxAge = hasMaxAge(options) && options.ifOlderThan\r\n\r\n const queryAction = (force: boolean = true) =>\r\n (api.endpoints[endpointName] as ApiEndpointQuery).initiate(\r\n arg,\r\n { forceRefetch: force }\r\n )\r\n const latestStateValue = (\r\n api.endpoints[endpointName] as ApiEndpointQuery\r\n ).select(arg)(getState())\r\n\r\n if (force) {\r\n dispatch(queryAction())\r\n } else if (maxAge) {\r\n const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp\r\n if (!lastFulfilledTs) {\r\n dispatch(queryAction())\r\n return\r\n }\r\n const shouldRetrigger =\r\n (Number(new Date()) - Number(new Date(lastFulfilledTs))) / 1000 >=\r\n maxAge\r\n if (shouldRetrigger) {\r\n dispatch(queryAction())\r\n }\r\n } else {\r\n // If prefetching with no options, just let it try\r\n dispatch(queryAction(false))\r\n }\r\n }\r\n\r\n function matchesEndpoint(endpointName: string) {\r\n return (action: any): action is AnyAction =>\r\n action?.meta?.arg?.endpointName === endpointName\r\n }\r\n\r\n function buildMatchThunkActions<\r\n Thunk extends\r\n | AsyncThunk\r\n | AsyncThunk\r\n >(thunk: Thunk, endpointName: string) {\r\n return {\r\n matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),\r\n matchFulfilled: isAllOf(\r\n isFulfilled(thunk),\r\n matchesEndpoint(endpointName)\r\n ),\r\n matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName)),\r\n } as Matchers\r\n }\r\n\r\n return {\r\n queryThunk,\r\n mutationThunk,\r\n prefetch,\r\n updateQueryData,\r\n patchQueryData,\r\n buildMatchThunkActions,\r\n }\r\n}\r\n\r\nexport function calculateProvidedByThunk(\r\n action: UnwrapPromise<\r\n ReturnType> | ReturnType>\r\n >,\r\n type: 'providesTags' | 'invalidatesTags',\r\n endpointDefinitions: EndpointDefinitions,\r\n assertTagType: AssertTagTypes\r\n) {\r\n return calculateProvidedBy(\r\n endpointDefinitions[action.meta.arg.endpointName][type],\r\n isFulfilled(action) ? action.payload : undefined,\r\n isRejectedWithValue(action) ? action.payload : undefined,\r\n action.meta.arg.originalArgs,\r\n 'baseQueryMeta' in action.meta ? action.meta.baseQueryMeta : undefined,\r\n assertTagType\r\n )\r\n}\r\n","import type { QueryCacheKey } from './core/apiState'\r\nimport type { EndpointDefinition } from './endpointDefinitions'\r\nimport { isPlainObject } from '@reduxjs/toolkit'\r\n\r\nexport const defaultSerializeQueryArgs: SerializeQueryArgs = ({\r\n endpointName,\r\n queryArgs,\r\n}) => {\r\n // Sort the object keys before stringifying, to prevent useQuery({ a: 1, b: 2 }) having a different cache key than useQuery({ b: 2, a: 1 })\r\n return `${endpointName}(${JSON.stringify(queryArgs, (key, value) =>\r\n isPlainObject(value)\r\n ? Object.keys(value)\r\n .sort()\r\n .reduce((acc, key) => {\r\n acc[key] = (value as any)[key]\r\n return acc\r\n }, {})\r\n : value\r\n )})`\r\n}\r\n\r\nexport type SerializeQueryArgs = (_: {\r\n queryArgs: QueryArgs\r\n endpointDefinition: EndpointDefinition\r\n endpointName: string\r\n}) => string\r\n\r\nexport type InternalSerializeQueryArgs = (_: {\r\n queryArgs: any\r\n endpointDefinition: EndpointDefinition\r\n endpointName: string\r\n}) => QueryCacheKey\r\n","import type { Api, ApiContext, Module, ModuleName } from './apiTypes'\r\nimport type { CombinedState } from './core/apiState'\r\nimport type { BaseQueryArg, BaseQueryFn } from './baseQueryTypes'\r\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs'\r\nimport { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs'\r\nimport type {\r\n EndpointBuilder,\r\n EndpointDefinitions,\r\n} from './endpointDefinitions'\r\nimport { DefinitionType } from './endpointDefinitions'\r\nimport { nanoid } from '@reduxjs/toolkit'\r\nimport type { AnyAction } from '@reduxjs/toolkit'\r\nimport type { NoInfer } from './tsHelpers'\r\nimport { defaultMemoize } from 'reselect'\r\n\r\nexport interface CreateApiOptions<\r\n BaseQuery extends BaseQueryFn,\r\n Definitions extends EndpointDefinitions,\r\n ReducerPath extends string = 'api',\r\n TagTypes extends string = never\r\n> {\r\n /**\r\n * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\r\n *\r\n * const api = createApi({\r\n * // highlight-start\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * // highlight-end\r\n * endpoints: (build) => ({\r\n * // ...endpoints\r\n * }),\r\n * })\r\n * ```\r\n */\r\n baseQuery: BaseQuery\r\n /**\r\n * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\r\n *\r\n * const api = createApi({\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * // highlight-start\r\n * tagTypes: ['Post', 'User'],\r\n * // highlight-end\r\n * endpoints: (build) => ({\r\n * // ...endpoints\r\n * }),\r\n * })\r\n * ```\r\n */\r\n tagTypes?: readonly TagTypes[]\r\n /**\r\n * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * // codeblock-meta title=\"apis.js\"\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';\r\n *\r\n * const apiOne = createApi({\r\n * // highlight-start\r\n * reducerPath: 'apiOne',\r\n * // highlight-end\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * endpoints: (builder) => ({\r\n * // ...endpoints\r\n * }),\r\n * });\r\n *\r\n * const apiTwo = createApi({\r\n * // highlight-start\r\n * reducerPath: 'apiTwo',\r\n * // highlight-end\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * endpoints: (builder) => ({\r\n * // ...endpoints\r\n * }),\r\n * });\r\n * ```\r\n */\r\n reducerPath?: ReducerPath\r\n /**\r\n * Accepts a custom function if you have a need to change the creation of cache keys for any reason.\r\n */\r\n serializeQueryArgs?: SerializeQueryArgs>\r\n /**\r\n * Endpoints are just a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are two basic endpoint types: [`query`](../../rtk-query/usage/queries) and [`mutation`](../../rtk-query/usage/mutations).\r\n */\r\n endpoints(\r\n build: EndpointBuilder\r\n ): Definitions\r\n /**\r\n * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\r\n *\r\n * ```ts\r\n * // codeblock-meta title=\"keepUnusedDataFor example\"\r\n *\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\r\n * interface Post {\r\n * id: number\r\n * name: string\r\n * }\r\n * type PostsResponse = Post[]\r\n *\r\n * const api = createApi({\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * endpoints: (build) => ({\r\n * getPosts: build.query({\r\n * query: () => 'posts',\r\n * // highlight-start\r\n * keepUnusedDataFor: 5\r\n * // highlight-end\r\n * })\r\n * })\r\n * })\r\n * ```\r\n */\r\n keepUnusedDataFor?: number\r\n /**\r\n * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\r\n * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\r\n * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\r\n * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\r\n *\r\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\r\n */\r\n refetchOnMountOrArgChange?: boolean | number\r\n /**\r\n * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\r\n *\r\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\r\n *\r\n * Note: requires [`setupListeners`](./setupListeners) to have been called.\r\n */\r\n refetchOnFocus?: boolean\r\n /**\r\n * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\r\n *\r\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\r\n *\r\n * Note: requires [`setupListeners`](./setupListeners) to have been called.\r\n */\r\n refetchOnReconnect?: boolean\r\n /**\r\n * A function that is passed every dispatched action. If this returns something other than `undefined`,\r\n * that return value will be used to rehydrate fulfilled & errored queries.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * // codeblock-meta title=\"next-redux-wrapper rehydration example\"\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\r\n * import { HYDRATE } from 'next-redux-wrapper'\r\n *\r\n * export const api = createApi({\r\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\r\n * // highlight-start\r\n * extractRehydrationInfo(action, { reducerPath }) {\r\n * if (action.type === HYDRATE) {\r\n * return action.payload[reducerPath]\r\n * }\r\n * },\r\n * // highlight-end\r\n * endpoints: (build) => ({\r\n * // omitted\r\n * }),\r\n * })\r\n * ```\r\n */\r\n extractRehydrationInfo?: (\r\n action: AnyAction,\r\n {\r\n reducerPath,\r\n }: {\r\n reducerPath: ReducerPath\r\n }\r\n ) =>\r\n | undefined\r\n | CombinedState<\r\n NoInfer,\r\n NoInfer,\r\n NoInfer\r\n >\r\n}\r\n\r\nexport type CreateApi = {\r\n /**\r\n * Creates a service to use in your application. Contains only the basic redux logic (the core module).\r\n *\r\n * @link https://rtk-query-docs.netlify.app/api/createApi\r\n */\r\n <\r\n BaseQuery extends BaseQueryFn,\r\n Definitions extends EndpointDefinitions,\r\n ReducerPath extends string = 'api',\r\n TagTypes extends string = never\r\n >(\r\n options: CreateApiOptions\r\n ): Api\r\n}\r\n\r\n/**\r\n * Builds a `createApi` method based on the provided `modules`.\r\n *\r\n * @link https://rtk-query-docs.netlify.app/concepts/customizing-create-api\r\n *\r\n * @example\r\n * ```ts\r\n * const MyContext = React.createContext(null as any);\r\n * const customCreateApi = buildCreateApi(\r\n * coreModule(),\r\n * reactHooksModule({ useDispatch: createDispatchHook(MyContext) })\r\n * );\r\n * ```\r\n *\r\n * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints\r\n * @returns A `createApi` method using the provided `modules`.\r\n */\r\nexport function buildCreateApi, ...Module[]]>(\r\n ...modules: Modules\r\n): CreateApi {\r\n return function baseCreateApi(options) {\r\n const extractRehydrationInfo = defaultMemoize((action: AnyAction) =>\r\n options.extractRehydrationInfo?.(action, {\r\n reducerPath: (options.reducerPath ?? 'api') as any,\r\n })\r\n )\r\n\r\n const optionsWithDefaults = {\r\n reducerPath: 'api',\r\n serializeQueryArgs: defaultSerializeQueryArgs,\r\n keepUnusedDataFor: 60,\r\n refetchOnMountOrArgChange: false,\r\n refetchOnFocus: false,\r\n refetchOnReconnect: false,\r\n ...options,\r\n extractRehydrationInfo,\r\n tagTypes: [...(options.tagTypes || [])],\r\n }\r\n\r\n const context: ApiContext = {\r\n endpointDefinitions: {},\r\n batch(fn) {\r\n // placeholder \"batch\" method to be overridden by plugins, for example with React.unstable_batchedUpdate\r\n fn()\r\n },\r\n apiUid: nanoid(),\r\n extractRehydrationInfo,\r\n hasRehydrationInfo: defaultMemoize(\r\n (action) => extractRehydrationInfo(action) != null\r\n ),\r\n }\r\n\r\n const api = {\r\n injectEndpoints,\r\n enhanceEndpoints({ addTagTypes, endpoints }) {\r\n if (addTagTypes) {\r\n for (const eT of addTagTypes) {\r\n if (!optionsWithDefaults.tagTypes.includes(eT as any)) {\r\n optionsWithDefaults.tagTypes.push(eT as any)\r\n }\r\n }\r\n }\r\n if (endpoints) {\r\n for (const [endpointName, partialDefinition] of Object.entries(\r\n endpoints\r\n )) {\r\n if (typeof partialDefinition === 'function') {\r\n partialDefinition(context.endpointDefinitions[endpointName])\r\n } else {\r\n Object.assign(\r\n context.endpointDefinitions[endpointName] || {},\r\n partialDefinition\r\n )\r\n }\r\n }\r\n }\r\n return api\r\n },\r\n } as Api\r\n\r\n const initializedModules = modules.map((m) =>\r\n m.init(api as any, optionsWithDefaults, context)\r\n )\r\n\r\n function injectEndpoints(\r\n inject: Parameters[0]\r\n ) {\r\n const evaluatedEndpoints = inject.endpoints({\r\n query: (x) => ({ ...x, type: DefinitionType.query } as any),\r\n mutation: (x) => ({ ...x, type: DefinitionType.mutation } as any),\r\n })\r\n\r\n for (const [endpointName, definition] of Object.entries(\r\n evaluatedEndpoints\r\n )) {\r\n if (\r\n !inject.overrideExisting &&\r\n endpointName in context.endpointDefinitions\r\n ) {\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development'\r\n ) {\r\n console.error(\r\n `called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``\r\n )\r\n }\r\n\r\n continue\r\n }\r\n context.endpointDefinitions[endpointName] = definition\r\n for (const m of initializedModules) {\r\n m.injectEndpoint(endpointName, definition)\r\n }\r\n }\r\n\r\n return api as any\r\n }\r\n\r\n return api.injectEndpoints({ endpoints: options.endpoints as any })\r\n }\r\n}\r\n","import type { BaseQueryFn } from './baseQueryTypes'\r\n\r\nconst _NEVER = /* @__PURE__ */ Symbol()\r\nexport type NEVER = typeof _NEVER\r\n\r\n/**\r\n * Creates a \"fake\" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.\r\n * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.\r\n */\r\nexport function fakeBaseQuery(): BaseQueryFn<\r\n void,\r\n NEVER,\r\n ErrorType,\r\n {}\r\n> {\r\n return function () {\r\n throw new Error(\r\n 'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.'\r\n )\r\n }\r\n}\r\n","import { compose } from 'redux'\r\n\r\nimport type { AnyAction, Middleware, ThunkDispatch } from '@reduxjs/toolkit'\r\nimport { createAction } from '@reduxjs/toolkit'\r\n\r\nimport type {\r\n EndpointDefinitions,\r\n FullTagDescription,\r\n} from '../../endpointDefinitions'\r\nimport type { QueryStatus, QuerySubState, RootState } from '../apiState'\r\nimport type { QueryThunkArg } from '../buildThunks'\r\nimport { build as buildCacheCollection } from './cacheCollection'\r\nimport { build as buildInvalidationByTags } from './invalidationByTags'\r\nimport { build as buildPolling } from './polling'\r\nimport type { BuildMiddlewareInput } from './types'\r\nimport { build as buildWindowEventHandling } from './windowEventHandling'\r\nimport { build as buildCacheLifecycle } from './cacheLifecycle'\r\nimport { build as buildQueryLifecycle } from './queryLifecycle'\r\nimport { build as buildDevMiddleware } from './devMiddleware'\r\n\r\nexport function buildMiddleware<\r\n Definitions extends EndpointDefinitions,\r\n ReducerPath extends string,\r\n TagTypes extends string\r\n>(input: BuildMiddlewareInput) {\r\n const { reducerPath, queryThunk } = input\r\n const actions = {\r\n invalidateTags: createAction<\r\n Array>\r\n >(`${reducerPath}/invalidateTags`),\r\n }\r\n\r\n const middlewares = [\r\n buildDevMiddleware,\r\n buildCacheCollection,\r\n buildInvalidationByTags,\r\n buildPolling,\r\n buildWindowEventHandling,\r\n buildCacheLifecycle,\r\n buildQueryLifecycle,\r\n ].map((build) =>\r\n build({\r\n ...(input as any as BuildMiddlewareInput<\r\n EndpointDefinitions,\r\n string,\r\n string\r\n >),\r\n refetchQuery,\r\n })\r\n )\r\n const middleware: Middleware<\r\n {},\r\n RootState,\r\n ThunkDispatch\r\n > = (mwApi) => (next) => {\r\n const applied = compose(\r\n ...middlewares.map((middleware) => middleware(mwApi))\r\n )(next)\r\n return (action) => {\r\n if (mwApi.getState()[reducerPath]) {\r\n return applied(action)\r\n }\r\n return next(action)\r\n }\r\n }\r\n\r\n return { middleware, actions }\r\n\r\n function refetchQuery(\r\n querySubState: Exclude<\r\n QuerySubState,\r\n { status: QueryStatus.uninitialized }\r\n >,\r\n queryCacheKey: string,\r\n override: Partial = {}\r\n ) {\r\n return queryThunk({\r\n type: 'query',\r\n endpointName: querySubState.endpointName,\r\n originalArgs: querySubState.originalArgs,\r\n subscribe: false,\r\n forceRefetch: true,\r\n queryCacheKey: queryCacheKey as any,\r\n ...override,\r\n })\r\n }\r\n}\r\n","import type { BaseQueryFn } from '../../baseQueryTypes'\r\nimport type { QueryDefinition } from '../../endpointDefinitions'\r\nimport type { ConfigState, QueryCacheKey } from '../apiState'\r\nimport { QuerySubstateIdentifier } from '../apiState'\r\nimport type {\r\n QueryStateMeta,\r\n SubMiddlewareApi,\r\n SubMiddlewareBuilder,\r\n TimeoutId,\r\n} from './types'\r\n\r\nexport type ReferenceCacheCollection = never\r\n\r\ndeclare module '../../endpointDefinitions' {\r\n interface QueryExtraOptions<\r\n TagTypes extends string,\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ReducerPath extends string = string\r\n > {\r\n /**\r\n * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_\r\n *\r\n * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\r\n */\r\n keepUnusedDataFor?: number\r\n }\r\n}\r\n\r\nexport const build: SubMiddlewareBuilder = ({ reducerPath, api, context }) => {\r\n const { removeQueryResult, unsubscribeQueryResult } = api.internalActions\r\n\r\n return (mwApi) => {\r\n const currentRemovalTimeouts: QueryStateMeta = {}\r\n\r\n return (next) =>\r\n (action): any => {\r\n const result = next(action)\r\n\r\n if (unsubscribeQueryResult.match(action)) {\r\n const state = mwApi.getState()[reducerPath]\r\n const { queryCacheKey } = action.payload\r\n\r\n handleUnsubscribe(\r\n queryCacheKey,\r\n state.queries[queryCacheKey]?.endpointName,\r\n mwApi,\r\n state.config\r\n )\r\n }\r\n\r\n if (api.util.resetApiState.match(action)) {\r\n for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {\r\n if (timeout) clearTimeout(timeout)\r\n delete currentRemovalTimeouts[key]\r\n }\r\n }\r\n\r\n if (context.hasRehydrationInfo(action)) {\r\n const state = mwApi.getState()[reducerPath]\r\n const { queries } = context.extractRehydrationInfo(action)!\r\n for (const [queryCacheKey, queryState] of Object.entries(queries)) {\r\n // Gotcha:\r\n // If rehydrating before the endpoint has been injected,the global `keepUnusedDataFor`\r\n // will be used instead of the endpoint-specific one.\r\n handleUnsubscribe(\r\n queryCacheKey as QueryCacheKey,\r\n queryState?.endpointName,\r\n mwApi,\r\n state.config\r\n )\r\n }\r\n }\r\n\r\n return result\r\n }\r\n\r\n function handleUnsubscribe(\r\n queryCacheKey: QueryCacheKey,\r\n endpointName: string | undefined,\r\n api: SubMiddlewareApi,\r\n config: ConfigState\r\n ) {\r\n const endpointDefinition = context.endpointDefinitions[\r\n endpointName!\r\n ] as QueryDefinition\r\n const keepUnusedDataFor =\r\n endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor\r\n\r\n const currentTimeout = currentRemovalTimeouts[queryCacheKey]\r\n if (currentTimeout) {\r\n clearTimeout(currentTimeout)\r\n }\r\n currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {\r\n const subscriptions =\r\n api.getState()[reducerPath].subscriptions[queryCacheKey]\r\n if (!subscriptions || Object.keys(subscriptions).length === 0) {\r\n api.dispatch(removeQueryResult({ queryCacheKey }))\r\n }\r\n delete currentRemovalTimeouts![queryCacheKey]\r\n }, keepUnusedDataFor * 1000)\r\n }\r\n }\r\n}\r\n","import { isAnyOf, isFulfilled, isRejectedWithValue } from '@reduxjs/toolkit'\r\n\r\nimport type { FullTagDescription } from '../../endpointDefinitions'\r\nimport { calculateProvidedBy } from '../../endpointDefinitions'\r\nimport type { QueryCacheKey } from '../apiState'\r\nimport { QueryStatus } from '../apiState'\r\nimport { calculateProvidedByThunk } from '../buildThunks'\r\nimport type { SubMiddlewareApi, SubMiddlewareBuilder } from './types'\r\n\r\nexport const build: SubMiddlewareBuilder = ({\r\n reducerPath,\r\n context,\r\n context: { endpointDefinitions },\r\n mutationThunk,\r\n api,\r\n assertTagType,\r\n refetchQuery,\r\n}) => {\r\n const { removeQueryResult } = api.internalActions\r\n\r\n return (mwApi) =>\r\n (next) =>\r\n (action): any => {\r\n const result = next(action)\r\n\r\n if (\r\n isAnyOf(\r\n isFulfilled(mutationThunk),\r\n isRejectedWithValue(mutationThunk)\r\n )(action)\r\n ) {\r\n invalidateTags(\r\n calculateProvidedByThunk(\r\n action,\r\n 'invalidatesTags',\r\n endpointDefinitions,\r\n assertTagType\r\n ),\r\n mwApi\r\n )\r\n }\r\n\r\n if (api.util.invalidateTags.match(action)) {\r\n invalidateTags(\r\n calculateProvidedBy(\r\n action.payload,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n assertTagType\r\n ),\r\n mwApi\r\n )\r\n }\r\n\r\n return result\r\n }\r\n\r\n function invalidateTags(\r\n tags: readonly FullTagDescription[],\r\n mwApi: SubMiddlewareApi\r\n ) {\r\n const rootState = mwApi.getState()\r\n const state = rootState[reducerPath]\r\n\r\n const toInvalidate = api.util.selectInvalidatedBy(rootState, tags)\r\n\r\n context.batch(() => {\r\n const valuesArray = Array.from(toInvalidate.values())\r\n for (const { queryCacheKey } of valuesArray) {\r\n const querySubState = state.queries[queryCacheKey]\r\n const subscriptionSubState = state.subscriptions[queryCacheKey]\r\n if (querySubState && subscriptionSubState) {\r\n if (Object.keys(subscriptionSubState).length === 0) {\r\n mwApi.dispatch(\r\n removeQueryResult({\r\n queryCacheKey: queryCacheKey as QueryCacheKey,\r\n })\r\n )\r\n } else if (querySubState.status !== QueryStatus.uninitialized) {\r\n mwApi.dispatch(refetchQuery(querySubState, queryCacheKey))\r\n } else {\r\n }\r\n }\r\n }\r\n })\r\n }\r\n}\r\n","import type { QuerySubstateIdentifier, Subscribers } from '../apiState'\r\nimport { QueryStatus } from '../apiState'\r\nimport type {\r\n QueryStateMeta,\r\n SubMiddlewareApi,\r\n SubMiddlewareBuilder,\r\n TimeoutId,\r\n} from './types'\r\n\r\nexport const build: SubMiddlewareBuilder = ({\r\n reducerPath,\r\n queryThunk,\r\n api,\r\n refetchQuery,\r\n}) => {\r\n return (mwApi) => {\r\n const currentPolls: QueryStateMeta<{\r\n nextPollTimestamp: number\r\n timeout?: TimeoutId\r\n pollingInterval: number\r\n }> = {}\r\n\r\n return (next) =>\r\n (action): any => {\r\n const result = next(action)\r\n\r\n if (\r\n api.internalActions.updateSubscriptionOptions.match(action) ||\r\n api.internalActions.unsubscribeQueryResult.match(action)\r\n ) {\r\n updatePollingInterval(action.payload, mwApi)\r\n }\r\n\r\n if (\r\n queryThunk.pending.match(action) ||\r\n (queryThunk.rejected.match(action) && action.meta.condition)\r\n ) {\r\n updatePollingInterval(action.meta.arg, mwApi)\r\n }\r\n\r\n if (\r\n queryThunk.fulfilled.match(action) ||\r\n (queryThunk.rejected.match(action) && !action.meta.condition)\r\n ) {\r\n startNextPoll(action.meta.arg, mwApi)\r\n }\r\n\r\n if (api.util.resetApiState.match(action)) {\r\n clearPolls()\r\n }\r\n\r\n return result\r\n }\r\n\r\n function startNextPoll(\r\n { queryCacheKey }: QuerySubstateIdentifier,\r\n api: SubMiddlewareApi\r\n ) {\r\n const state = api.getState()[reducerPath]\r\n const querySubState = state.queries[queryCacheKey]\r\n const subscriptions = state.subscriptions[queryCacheKey]\r\n\r\n if (!querySubState || querySubState.status === QueryStatus.uninitialized)\r\n return\r\n\r\n const lowestPollingInterval = findLowestPollingInterval(subscriptions)\r\n if (!Number.isFinite(lowestPollingInterval)) return\r\n\r\n const currentPoll = currentPolls[queryCacheKey]\r\n\r\n if (currentPoll?.timeout) {\r\n clearTimeout(currentPoll.timeout)\r\n currentPoll.timeout = undefined\r\n }\r\n\r\n const nextPollTimestamp = Date.now() + lowestPollingInterval\r\n\r\n const currentInterval: typeof currentPolls[number] = (currentPolls[\r\n queryCacheKey\r\n ] = {\r\n nextPollTimestamp,\r\n pollingInterval: lowestPollingInterval,\r\n timeout: setTimeout(() => {\r\n currentInterval!.timeout = undefined\r\n api.dispatch(refetchQuery(querySubState, queryCacheKey))\r\n }, lowestPollingInterval),\r\n })\r\n }\r\n\r\n function updatePollingInterval(\r\n { queryCacheKey }: QuerySubstateIdentifier,\r\n api: SubMiddlewareApi\r\n ) {\r\n const state = api.getState()[reducerPath]\r\n const querySubState = state.queries[queryCacheKey]\r\n const subscriptions = state.subscriptions[queryCacheKey]\r\n\r\n if (\r\n !querySubState ||\r\n querySubState.status === QueryStatus.uninitialized\r\n ) {\r\n return\r\n }\r\n\r\n const lowestPollingInterval = findLowestPollingInterval(subscriptions)\r\n\r\n if (!Number.isFinite(lowestPollingInterval)) {\r\n cleanupPollForKey(queryCacheKey)\r\n return\r\n }\r\n\r\n const currentPoll = currentPolls[queryCacheKey]\r\n const nextPollTimestamp = Date.now() + lowestPollingInterval\r\n\r\n if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {\r\n startNextPoll({ queryCacheKey }, api)\r\n }\r\n }\r\n\r\n function cleanupPollForKey(key: string) {\r\n const existingPoll = currentPolls[key]\r\n if (existingPoll?.timeout) {\r\n clearTimeout(existingPoll.timeout)\r\n }\r\n delete currentPolls[key]\r\n }\r\n\r\n function clearPolls() {\r\n for (const key of Object.keys(currentPolls)) {\r\n cleanupPollForKey(key)\r\n }\r\n }\r\n }\r\n\r\n function findLowestPollingInterval(subscribers: Subscribers = {}) {\r\n let lowestPollingInterval = Number.POSITIVE_INFINITY\r\n for (const subscription of Object.values(subscribers)) {\r\n if (!!subscription.pollingInterval)\r\n lowestPollingInterval = Math.min(\r\n subscription.pollingInterval,\r\n lowestPollingInterval\r\n )\r\n }\r\n return lowestPollingInterval\r\n }\r\n}\r\n","import { QueryStatus } from '../apiState'\r\nimport type { QueryCacheKey } from '../apiState'\r\nimport { onFocus, onOnline } from '../setupListeners'\r\nimport type { SubMiddlewareApi, SubMiddlewareBuilder } from './types'\r\n\r\nexport const build: SubMiddlewareBuilder = ({\r\n reducerPath,\r\n context,\r\n api,\r\n refetchQuery,\r\n}) => {\r\n const { removeQueryResult } = api.internalActions\r\n\r\n return (mwApi) =>\r\n (next) =>\r\n (action): any => {\r\n const result = next(action)\r\n\r\n if (onFocus.match(action)) {\r\n refetchValidQueries(mwApi, 'refetchOnFocus')\r\n }\r\n if (onOnline.match(action)) {\r\n refetchValidQueries(mwApi, 'refetchOnReconnect')\r\n }\r\n\r\n return result\r\n }\r\n\r\n function refetchValidQueries(\r\n api: SubMiddlewareApi,\r\n type: 'refetchOnFocus' | 'refetchOnReconnect'\r\n ) {\r\n const state = api.getState()[reducerPath]\r\n const queries = state.queries\r\n const subscriptions = state.subscriptions\r\n\r\n context.batch(() => {\r\n for (const queryCacheKey of Object.keys(subscriptions)) {\r\n const querySubState = queries[queryCacheKey]\r\n const subscriptionSubState = subscriptions[queryCacheKey]\r\n\r\n if (!subscriptionSubState || !querySubState) continue\r\n\r\n const shouldRefetch =\r\n Object.values(subscriptionSubState).some(\r\n (sub) => sub[type] === true\r\n ) ||\r\n (Object.values(subscriptionSubState).every(\r\n (sub) => sub[type] === undefined\r\n ) &&\r\n state.config[type])\r\n\r\n if (shouldRefetch) {\r\n if (Object.keys(subscriptionSubState).length === 0) {\r\n api.dispatch(\r\n removeQueryResult({\r\n queryCacheKey: queryCacheKey as QueryCacheKey,\r\n })\r\n )\r\n } else if (querySubState.status !== QueryStatus.uninitialized) {\r\n api.dispatch(refetchQuery(querySubState, queryCacheKey))\r\n }\r\n }\r\n }\r\n })\r\n }\r\n}\r\n","import { isAsyncThunkAction, isFulfilled } from '@reduxjs/toolkit'\r\nimport type { AnyAction } from 'redux'\r\nimport type { ThunkDispatch } from 'redux-thunk'\r\nimport type { BaseQueryFn, BaseQueryMeta } from '../../baseQueryTypes'\r\nimport { DefinitionType } from '../../endpointDefinitions'\r\nimport type { RootState } from '../apiState'\r\nimport type {\r\n MutationResultSelectorResult,\r\n QueryResultSelectorResult,\r\n} from '../buildSelectors'\r\nimport { getMutationCacheKey } from '../buildSlice'\r\nimport type { PatchCollection, Recipe } from '../buildThunks'\r\nimport type {\r\n PromiseWithKnownReason,\r\n SubMiddlewareApi,\r\n SubMiddlewareBuilder,\r\n} from './types'\r\n\r\nexport type ReferenceCacheLifecycle = never\r\n\r\ndeclare module '../../endpointDefinitions' {\r\n export interface QueryBaseLifecycleApi<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ResultType,\r\n ReducerPath extends string = string\r\n > extends LifecycleApi {\r\n /**\r\n * Gets the current value of this cache entry.\r\n */\r\n getCacheEntry(): QueryResultSelectorResult<\r\n { type: DefinitionType.query } & BaseEndpointDefinition<\r\n QueryArg,\r\n BaseQuery,\r\n ResultType\r\n >\r\n >\r\n /**\r\n * Updates the current cache entry value.\r\n * For documentation see `api.util.updateQueryData`.\r\n */\r\n updateCachedData(updateRecipe: Recipe): PatchCollection\r\n }\r\n\r\n export interface MutationBaseLifecycleApi<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ResultType,\r\n ReducerPath extends string = string\r\n > extends LifecycleApi {\r\n /**\r\n * Gets the current value of this cache entry.\r\n */\r\n getCacheEntry(): MutationResultSelectorResult<\r\n { type: DefinitionType.mutation } & BaseEndpointDefinition<\r\n QueryArg,\r\n BaseQuery,\r\n ResultType\r\n >\r\n >\r\n }\r\n\r\n export interface LifecycleApi {\r\n /**\r\n * The dispatch method for the store\r\n */\r\n dispatch: ThunkDispatch\r\n /**\r\n * A method to get the current state\r\n */\r\n getState(): RootState\r\n /**\r\n * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.\r\n */\r\n extra: unknown\r\n /**\r\n * A unique ID generated for the mutation\r\n */\r\n requestId: string\r\n }\r\n\r\n export interface CacheLifecyclePromises<\r\n ResultType = unknown,\r\n MetaType = unknown\r\n > {\r\n /**\r\n * Promise that will resolve with the first value for this cache key.\r\n * This allows you to `await` until an actual value is in cache.\r\n *\r\n * If the cache entry is removed from the cache before any value has ever\r\n * been resolved, this Promise will reject with\r\n * `new Error('Promise never resolved before cacheEntryRemoved.')`\r\n * to prevent memory leaks.\r\n * You can just re-throw that error (or not handle it at all) -\r\n * it will be caught outside of `cacheEntryAdded`.\r\n *\r\n * If you don't interact with this promise, it will not throw.\r\n */\r\n cacheDataLoaded: PromiseWithKnownReason<\r\n {\r\n /**\r\n * The (transformed) query result.\r\n */\r\n data: ResultType\r\n /**\r\n * The `meta` returned by the `baseQuery`\r\n */\r\n meta: MetaType\r\n },\r\n typeof neverResolvedError\r\n >\r\n /**\r\n * Promise that allows you to wait for the point in time when the cache entry\r\n * has been removed from the cache, by not being used/subscribed to any more\r\n * in the application for too long or by dispatching `api.util.resetApiState`.\r\n */\r\n cacheEntryRemoved: Promise\r\n }\r\n\r\n export interface QueryCacheLifecycleApi<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ResultType,\r\n ReducerPath extends string = string\r\n > extends QueryBaseLifecycleApi,\r\n CacheLifecyclePromises> {}\r\n\r\n export interface MutationCacheLifecycleApi<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ResultType,\r\n ReducerPath extends string = string\r\n > extends MutationBaseLifecycleApi<\r\n QueryArg,\r\n BaseQuery,\r\n ResultType,\r\n ReducerPath\r\n >,\r\n CacheLifecyclePromises> {}\r\n\r\n interface QueryExtraOptions<\r\n TagTypes extends string,\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ReducerPath extends string = string\r\n > {\r\n onCacheEntryAdded?(\r\n arg: QueryArg,\r\n api: QueryCacheLifecycleApi\r\n ): Promise | void\r\n }\r\n\r\n interface MutationExtraOptions<\r\n TagTypes extends string,\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ReducerPath extends string = string\r\n > {\r\n onCacheEntryAdded?(\r\n arg: QueryArg,\r\n api: MutationCacheLifecycleApi<\r\n QueryArg,\r\n BaseQuery,\r\n ResultType,\r\n ReducerPath\r\n >\r\n ): Promise | void\r\n }\r\n}\r\n\r\nconst neverResolvedError = new Error(\r\n 'Promise never resolved before cacheEntryRemoved.'\r\n) as Error & {\r\n message: 'Promise never resolved before cacheEntryRemoved.'\r\n}\r\n\r\nexport const build: SubMiddlewareBuilder = ({\r\n api,\r\n reducerPath,\r\n context,\r\n queryThunk,\r\n mutationThunk,\r\n}) => {\r\n const isQueryThunk = isAsyncThunkAction(queryThunk)\r\n const isMutationThunk = isAsyncThunkAction(mutationThunk)\r\n const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk)\r\n\r\n return (mwApi) => {\r\n type CacheLifecycle = {\r\n valueResolved?(value: { data: unknown; meta: unknown }): unknown\r\n cacheEntryRemoved(): void\r\n }\r\n const lifecycleMap: Record = {}\r\n\r\n return (next) =>\r\n (action): any => {\r\n const stateBefore = mwApi.getState()\r\n\r\n const result = next(action)\r\n\r\n const cacheKey = getCacheKey(action)\r\n\r\n if (queryThunk.pending.match(action)) {\r\n const oldState = stateBefore[reducerPath].queries[cacheKey]\r\n const state = mwApi.getState()[reducerPath].queries[cacheKey]\r\n if (!oldState && state) {\r\n handleNewKey(\r\n action.meta.arg.endpointName,\r\n action.meta.arg.originalArgs,\r\n cacheKey,\r\n mwApi,\r\n action.meta.requestId\r\n )\r\n }\r\n } else if (mutationThunk.pending.match(action)) {\r\n const state = mwApi.getState()[reducerPath].mutations[cacheKey]\r\n if (state) {\r\n handleNewKey(\r\n action.meta.arg.endpointName,\r\n action.meta.arg.originalArgs,\r\n cacheKey,\r\n mwApi,\r\n action.meta.requestId\r\n )\r\n }\r\n } else if (isFullfilledThunk(action)) {\r\n const lifecycle = lifecycleMap[cacheKey]\r\n if (lifecycle?.valueResolved) {\r\n lifecycle.valueResolved({\r\n data: action.payload,\r\n meta: action.meta.baseQueryMeta,\r\n })\r\n delete lifecycle.valueResolved\r\n }\r\n } else if (\r\n api.internalActions.removeQueryResult.match(action) ||\r\n api.internalActions.removeMutationResult.match(action)\r\n ) {\r\n const lifecycle = lifecycleMap[cacheKey]\r\n if (lifecycle) {\r\n delete lifecycleMap[cacheKey]\r\n lifecycle.cacheEntryRemoved()\r\n }\r\n } else if (api.util.resetApiState.match(action)) {\r\n for (const [cacheKey, lifecycle] of Object.entries(lifecycleMap)) {\r\n delete lifecycleMap[cacheKey]\r\n lifecycle.cacheEntryRemoved()\r\n }\r\n }\r\n\r\n return result\r\n }\r\n\r\n function getCacheKey(action: any) {\r\n if (isQueryThunk(action)) return action.meta.arg.queryCacheKey\r\n if (isMutationThunk(action)) return action.meta.requestId\r\n if (api.internalActions.removeQueryResult.match(action))\r\n return action.payload.queryCacheKey\r\n if (api.internalActions.removeMutationResult.match(action))\r\n return getMutationCacheKey(action.payload)\r\n return ''\r\n }\r\n\r\n function handleNewKey(\r\n endpointName: string,\r\n originalArgs: any,\r\n queryCacheKey: string,\r\n mwApi: SubMiddlewareApi,\r\n requestId: string\r\n ) {\r\n const endpointDefinition = context.endpointDefinitions[endpointName]\r\n const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded\r\n if (!onCacheEntryAdded) return\r\n\r\n let lifecycle = {} as CacheLifecycle\r\n\r\n const cacheEntryRemoved = new Promise((resolve) => {\r\n lifecycle.cacheEntryRemoved = resolve\r\n })\r\n const cacheDataLoaded: PromiseWithKnownReason<\r\n { data: unknown; meta: unknown },\r\n typeof neverResolvedError\r\n > = Promise.race([\r\n new Promise<{ data: unknown; meta: unknown }>((resolve) => {\r\n lifecycle.valueResolved = resolve\r\n }),\r\n cacheEntryRemoved.then(() => {\r\n throw neverResolvedError\r\n }),\r\n ])\r\n // prevent uncaught promise rejections from happening.\r\n // if the original promise is used in any way, that will create a new promise that will throw again\r\n cacheDataLoaded.catch(() => {})\r\n lifecycleMap[queryCacheKey] = lifecycle\r\n const selector = (api.endpoints[endpointName] as any).select(\r\n endpointDefinition.type === DefinitionType.query\r\n ? originalArgs\r\n : queryCacheKey\r\n )\r\n\r\n const extra = mwApi.dispatch((_, __, extra) => extra)\r\n const lifecycleApi = {\r\n ...mwApi,\r\n getCacheEntry: () => selector(mwApi.getState()),\r\n requestId,\r\n extra,\r\n updateCachedData: (endpointDefinition.type === DefinitionType.query\r\n ? (updateRecipe: Recipe) =>\r\n mwApi.dispatch(\r\n api.util.updateQueryData(\r\n endpointName as never,\r\n originalArgs,\r\n updateRecipe\r\n )\r\n )\r\n : undefined) as any,\r\n\r\n cacheDataLoaded,\r\n cacheEntryRemoved,\r\n }\r\n\r\n const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi)\r\n // if a `neverResolvedError` was thrown, but not handled in the running handler, do not let it leak out further\r\n Promise.resolve(runningHandler).catch((e) => {\r\n if (e === neverResolvedError) return\r\n throw e\r\n })\r\n }\r\n }\r\n}\r\n","import { isPending, isRejected, isFulfilled } from '@reduxjs/toolkit'\r\nimport type {\r\n BaseQueryError,\r\n BaseQueryFn,\r\n BaseQueryMeta,\r\n} from '../../baseQueryTypes'\r\nimport { DefinitionType } from '../../endpointDefinitions'\r\nimport type { QueryFulfilledRejectionReason } from '../../endpointDefinitions'\r\nimport type { Recipe } from '../buildThunks'\r\nimport type {\r\n SubMiddlewareBuilder,\r\n PromiseWithKnownReason,\r\n PromiseConstructorWithKnownReason,\r\n} from './types'\r\n\r\nexport type ReferenceQueryLifecycle = never\r\n\r\ndeclare module '../../endpointDefinitions' {\r\n export interface QueryLifecyclePromises<\r\n ResultType,\r\n BaseQuery extends BaseQueryFn\r\n > {\r\n /**\r\n * Promise that will resolve with the (transformed) query result.\r\n *\r\n * If the query fails, this promise will reject with the error.\r\n *\r\n * This allows you to `await` for the query to finish.\r\n *\r\n * If you don't interact with this promise, it will not throw.\r\n */\r\n queryFulfilled: PromiseWithKnownReason<\r\n {\r\n /**\r\n * The (transformed) query result.\r\n */\r\n data: ResultType\r\n /**\r\n * The `meta` returned by the `baseQuery`\r\n */\r\n meta: BaseQueryMeta\r\n },\r\n QueryFulfilledRejectionReason\r\n >\r\n }\r\n\r\n type QueryFulfilledRejectionReason =\r\n | {\r\n error: BaseQueryError\r\n /**\r\n * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.\r\n */\r\n isUnhandledError: false\r\n /**\r\n * The `meta` returned by the `baseQuery`\r\n */\r\n meta: BaseQueryMeta\r\n }\r\n | {\r\n error: unknown\r\n meta?: undefined\r\n /**\r\n * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn` or `transformResponse` throwing an error instead of handling it properly.\r\n * There can not be made any assumption about the shape of `error`.\r\n */\r\n isUnhandledError: true\r\n }\r\n\r\n interface QueryExtraOptions<\r\n TagTypes extends string,\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ReducerPath extends string = string\r\n > {\r\n /**\r\n * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\r\n *\r\n * Can be used to perform side-effects throughout the lifecycle of the query.\r\n *\r\n * @example\r\n * ```ts\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\r\n * import { messageCreated } from './notificationsSlice\r\n * export interface Post {\r\n * id: number\r\n * name: string\r\n * }\r\n *\r\n * const api = createApi({\r\n * baseQuery: fetchBaseQuery({\r\n * baseUrl: '/',\r\n * }),\r\n * endpoints: (build) => ({\r\n * getPost: build.query({\r\n * query: (id) => `post/${id}`,\r\n * async onQueryStarted(id, { dispatch, queryFulfilled }) {\r\n * // `onStart` side-effect\r\n * dispatch(messageCreated('Fetching posts...'))\r\n * try {\r\n * const { data } = await queryFulfilled\r\n * // `onSuccess` side-effect\r\n * dispatch(messageCreated('Posts received!'))\r\n * } catch (err) {\r\n * // `onError` side-effect\r\n * dispatch(messageCreated('Error fetching posts!'))\r\n * }\r\n * }\r\n * }),\r\n * }),\r\n * })\r\n * ```\r\n */\r\n onQueryStarted?(\r\n arg: QueryArg,\r\n api: QueryLifecycleApi\r\n ): Promise | void\r\n }\r\n\r\n interface MutationExtraOptions<\r\n TagTypes extends string,\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ReducerPath extends string = string\r\n > {\r\n /**\r\n * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\r\n *\r\n * Can be used for `optimistic updates`.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\r\n * export interface Post {\r\n * id: number\r\n * name: string\r\n * }\r\n *\r\n * const api = createApi({\r\n * baseQuery: fetchBaseQuery({\r\n * baseUrl: '/',\r\n * }),\r\n * tagTypes: ['Post'],\r\n * endpoints: (build) => ({\r\n * getPost: build.query({\r\n * query: (id) => `post/${id}`,\r\n * providesTags: ['Post'],\r\n * }),\r\n * updatePost: build.mutation & Partial>({\r\n * query: ({ id, ...patch }) => ({\r\n * url: `post/${id}`,\r\n * method: 'PATCH',\r\n * body: patch,\r\n * }),\r\n * invalidatesTags: ['Post'],\r\n * async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {\r\n * const patchResult = dispatch(\r\n * api.util.updateQueryData('getPost', id, (draft) => {\r\n * Object.assign(draft, patch)\r\n * })\r\n * )\r\n * try {\r\n * await queryFulfilled\r\n * } catch {\r\n * patchResult.undo()\r\n * }\r\n * },\r\n * }),\r\n * }),\r\n * })\r\n * ```\r\n */\r\n onQueryStarted?(\r\n arg: QueryArg,\r\n api: MutationLifecycleApi\r\n ): Promise | void\r\n }\r\n\r\n export interface QueryLifecycleApi<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ResultType,\r\n ReducerPath extends string = string\r\n > extends QueryBaseLifecycleApi,\r\n QueryLifecyclePromises {}\r\n\r\n export interface MutationLifecycleApi<\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n ResultType,\r\n ReducerPath extends string = string\r\n > extends MutationBaseLifecycleApi<\r\n QueryArg,\r\n BaseQuery,\r\n ResultType,\r\n ReducerPath\r\n >,\r\n QueryLifecyclePromises {}\r\n}\r\n\r\nexport const build: SubMiddlewareBuilder = ({\r\n api,\r\n context,\r\n queryThunk,\r\n mutationThunk,\r\n}) => {\r\n const isPendingThunk = isPending(queryThunk, mutationThunk)\r\n const isRejectedThunk = isRejected(queryThunk, mutationThunk)\r\n const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk)\r\n\r\n return (mwApi) => {\r\n type CacheLifecycle = {\r\n resolve(value: { data: unknown; meta: unknown }): unknown\r\n reject(value: QueryFulfilledRejectionReason): unknown\r\n }\r\n const lifecycleMap: Record = {}\r\n\r\n return (next) =>\r\n (action): any => {\r\n const result = next(action)\r\n\r\n if (isPendingThunk(action)) {\r\n const {\r\n requestId,\r\n arg: { endpointName, originalArgs },\r\n } = action.meta\r\n const endpointDefinition = context.endpointDefinitions[endpointName]\r\n const onQueryStarted = endpointDefinition?.onQueryStarted\r\n if (onQueryStarted) {\r\n const lifecycle = {} as CacheLifecycle\r\n const queryFulfilled =\r\n new (Promise as PromiseConstructorWithKnownReason)<\r\n { data: unknown; meta: unknown },\r\n QueryFulfilledRejectionReason\r\n >((resolve, reject) => {\r\n lifecycle.resolve = resolve\r\n lifecycle.reject = reject\r\n })\r\n // prevent uncaught promise rejections from happening.\r\n // if the original promise is used in any way, that will create a new promise that will throw again\r\n queryFulfilled.catch(() => {})\r\n lifecycleMap[requestId] = lifecycle\r\n const selector = (api.endpoints[endpointName] as any).select(\r\n endpointDefinition.type === DefinitionType.query\r\n ? originalArgs\r\n : requestId\r\n )\r\n\r\n const extra = mwApi.dispatch((_, __, extra) => extra)\r\n const lifecycleApi = {\r\n ...mwApi,\r\n getCacheEntry: () => selector(mwApi.getState()),\r\n requestId,\r\n extra,\r\n updateCachedData: (endpointDefinition.type ===\r\n DefinitionType.query\r\n ? (updateRecipe: Recipe) =>\r\n mwApi.dispatch(\r\n api.util.updateQueryData(\r\n endpointName as never,\r\n originalArgs,\r\n updateRecipe\r\n )\r\n )\r\n : undefined) as any,\r\n queryFulfilled,\r\n }\r\n onQueryStarted(originalArgs, lifecycleApi)\r\n }\r\n } else if (isFullfilledThunk(action)) {\r\n const { requestId, baseQueryMeta } = action.meta\r\n lifecycleMap[requestId]?.resolve({\r\n data: action.payload,\r\n meta: baseQueryMeta,\r\n })\r\n delete lifecycleMap[requestId]\r\n } else if (isRejectedThunk(action)) {\r\n const { requestId, rejectedWithValue, baseQueryMeta } = action.meta\r\n lifecycleMap[requestId]?.reject({\r\n error: action.payload ?? action.error,\r\n isUnhandledError: !rejectedWithValue,\r\n meta: baseQueryMeta as any,\r\n })\r\n delete lifecycleMap[requestId]\r\n }\r\n\r\n return result\r\n }\r\n }\r\n}\r\n","import type { SubMiddlewareBuilder } from './types'\r\n\r\nexport const build: SubMiddlewareBuilder = ({\r\n api,\r\n context: { apiUid },\r\n reducerPath,\r\n}) => {\r\n return (mwApi) => {\r\n let initialized = false\r\n return (next) => (action) => {\r\n if (!initialized) {\r\n initialized = true\r\n // dispatch before any other action\r\n mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid))\r\n }\r\n\r\n const result = next(action)\r\n\r\n if (api.util.resetApiState.match(action)) {\r\n // dispatch after api reset\r\n mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid))\r\n }\r\n\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development'\r\n ) {\r\n if (\r\n api.internalActions.middlewareRegistered.match(action) &&\r\n action.payload === apiUid &&\r\n mwApi.getState()[reducerPath]?.config?.middlewareRegistered ===\r\n 'conflict'\r\n ) {\r\n console.warn(`There is a mismatch between slice and middleware for the reducerPath \"${reducerPath}\".\r\nYou can only have one api per reducer path, this will lead to crashes in various situations!${\r\n reducerPath === 'api'\r\n ? `\r\nIf you have multiple apis, you *have* to specify the reducerPath option when using createApi!`\r\n : ''\r\n }`)\r\n }\r\n }\r\n\r\n return result\r\n }\r\n }\r\n}\r\n","export type Id = { [K in keyof T]: T[K] } & {}\r\nexport type WithRequiredProp = Omit &\r\n Required>\r\nexport type Override = T2 extends any ? Omit & T2 : never\r\nexport function assertCast(v: any): asserts v is T {}\r\n\r\nexport function safeAssign(\r\n target: T,\r\n ...args: Array>>\r\n) {\r\n Object.assign(target, ...args)\r\n}\r\n\r\n/**\r\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\r\n */\r\nexport type UnionToIntersection = (\r\n U extends any ? (k: U) => void : never\r\n) extends (k: infer I) => void\r\n ? I\r\n : never\r\n\r\nexport type NonOptionalKeys = {\r\n [K in keyof T]-?: undefined extends T[K] ? never : K\r\n}[keyof T]\r\n\r\nexport type HasRequiredProps = NonOptionalKeys extends never\r\n ? False\r\n : True\r\n\r\nexport type OptionalIfAllPropsOptional = HasRequiredProps\r\n\r\nexport type NoInfer = [T][T extends any ? 0 : never]\r\n\r\nexport type UnwrapPromise = T extends PromiseLike ? V : T\r\n\r\nexport type MaybePromise = T | PromiseLike\r\n\r\nexport type OmitFromUnion = T extends any\r\n ? Omit\r\n : never\r\n\r\nexport type IsAny = true | false extends (\r\n T extends never ? true : false\r\n)\r\n ? True\r\n : False\r\n\r\nexport type CastAny = IsAny\r\n","/**\r\n * Note: this file should import all other files for type discovery and declaration merging\r\n */\r\nimport type { PatchQueryDataThunk, UpdateQueryDataThunk } from './buildThunks'\r\nimport { buildThunks } from './buildThunks'\r\nimport type {\r\n ActionCreatorWithPayload,\r\n AnyAction,\r\n Middleware,\r\n Reducer,\r\n ThunkAction,\r\n ThunkDispatch,\r\n} from '@reduxjs/toolkit'\r\nimport type {\r\n EndpointDefinitions,\r\n QueryArgFrom,\r\n QueryDefinition,\r\n MutationDefinition,\r\n AssertTagTypes,\r\n TagDescription,\r\n} from '../endpointDefinitions'\r\nimport { isQueryDefinition, isMutationDefinition } from '../endpointDefinitions'\r\nimport type {\r\n CombinedState,\r\n QueryKeys,\r\n MutationKeys,\r\n RootState,\r\n} from './apiState'\r\nimport type { Api, Module } from '../apiTypes'\r\nimport { onFocus, onFocusLost, onOnline, onOffline } from './setupListeners'\r\nimport { buildSlice } from './buildSlice'\r\nimport { buildMiddleware } from './buildMiddleware'\r\nimport { buildSelectors } from './buildSelectors'\r\nimport type {\r\n MutationActionCreatorResult,\r\n QueryActionCreatorResult,\r\n} from './buildInitiate'\r\nimport { buildInitiate } from './buildInitiate'\r\nimport { assertCast, safeAssign } from '../tsHelpers'\r\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'\r\nimport type { SliceActions } from './buildSlice'\r\nimport type { BaseQueryFn } from '../baseQueryTypes'\r\n\r\nimport type { ReferenceCacheLifecycle } from './buildMiddleware/cacheLifecycle'\r\nimport type { ReferenceQueryLifecycle } from './buildMiddleware/queryLifecycle'\r\nimport type { ReferenceCacheCollection } from './buildMiddleware/cacheCollection'\r\nimport { enablePatches } from 'immer'\r\n\r\n/**\r\n * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_\r\n * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value\r\n *\r\n * @overloadSummary\r\n * `force`\r\n * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.\r\n */\r\nexport type PrefetchOptions =\r\n | {\r\n ifOlderThan?: false | number\r\n }\r\n | { force?: boolean }\r\n\r\nexport const coreModuleName = /* @__PURE__ */ Symbol()\r\nexport type CoreModule =\r\n | typeof coreModuleName\r\n | ReferenceCacheLifecycle\r\n | ReferenceQueryLifecycle\r\n | ReferenceCacheCollection\r\n\r\ndeclare module '../apiTypes' {\r\n export interface ApiModules<\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n BaseQuery extends BaseQueryFn,\r\n Definitions extends EndpointDefinitions,\r\n ReducerPath extends string,\r\n TagTypes extends string\r\n > {\r\n [coreModuleName]: {\r\n /**\r\n * This api's reducer should be mounted at `store[api.reducerPath]`.\r\n *\r\n * @example\r\n * ```ts\r\n * configureStore({\r\n * reducer: {\r\n * [api.reducerPath]: api.reducer,\r\n * },\r\n * middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\r\n * })\r\n * ```\r\n */\r\n reducerPath: ReducerPath\r\n /**\r\n * Internal actions not part of the public API. Note: These are subject to change at any given time.\r\n */\r\n internalActions: InternalActions\r\n /**\r\n * A standard redux reducer that enables core functionality. Make sure it's included in your store.\r\n *\r\n * @example\r\n * ```ts\r\n * configureStore({\r\n * reducer: {\r\n * [api.reducerPath]: api.reducer,\r\n * },\r\n * middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\r\n * })\r\n * ```\r\n */\r\n reducer: Reducer<\r\n CombinedState,\r\n AnyAction\r\n >\r\n /**\r\n * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.\r\n *\r\n * @example\r\n * ```ts\r\n * configureStore({\r\n * reducer: {\r\n * [api.reducerPath]: api.reducer,\r\n * },\r\n * middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\r\n * })\r\n * ```\r\n */\r\n middleware: Middleware<\r\n {},\r\n RootState,\r\n ThunkDispatch\r\n >\r\n /**\r\n * A collection of utility thunks for various situations.\r\n */\r\n util: {\r\n /**\r\n * Returns all promises for running queries and mutations.\r\n * Useful for SSR scenarios to await everything triggered in any way,\r\n * including via hook calls, or manually dispatching `initiate` actions.\r\n */\r\n getRunningOperationPromises: () => Array>\r\n /**\r\n * If a promise is running for a given endpoint name + argument combination,\r\n * returns that promise. Otherwise, returns `undefined`.\r\n * Can be used to await a specific query/mutation triggered in any way,\r\n * including via hook calls, or manually dispatching `initiate` actions.\r\n */\r\n getRunningOperationPromise>(\r\n endpointName: EndpointName,\r\n args: QueryArgFrom\r\n ):\r\n | QueryActionCreatorResult<\r\n Definitions[EndpointName] & { type: 'query' }\r\n >\r\n | undefined\r\n getRunningOperationPromise<\r\n EndpointName extends MutationKeys\r\n >(\r\n endpointName: EndpointName,\r\n fixedCacheKeyOrRequestId: string\r\n ):\r\n | MutationActionCreatorResult<\r\n Definitions[EndpointName] & { type: 'mutation' }\r\n >\r\n | undefined\r\n\r\n /**\r\n * A Redux thunk that can be used to manually trigger pre-fetching of data.\r\n *\r\n * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), any relevant query arguments, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.\r\n *\r\n * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.\r\n *\r\n * @example\r\n *\r\n * ```ts no-transpile\r\n * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))\r\n * ```\r\n */\r\n prefetch>(\r\n endpointName: EndpointName,\r\n arg: QueryArgFrom,\r\n options: PrefetchOptions\r\n ): ThunkAction\r\n /**\r\n * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.\r\n *\r\n * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), any relevant query arguments, and a callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.\r\n *\r\n * The thunk returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).\r\n *\r\n * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, args, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * const patchCollection = dispatch(\r\n * api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\r\n * draftPosts.push({ id: 1, name: 'Teddy' })\r\n * })\r\n * )\r\n * ```\r\n */\r\n updateQueryData: UpdateQueryDataThunk<\r\n Definitions,\r\n RootState\r\n >\r\n /** @deprecated renamed to `updateQueryData` */\r\n updateQueryResult: UpdateQueryDataThunk<\r\n Definitions,\r\n RootState\r\n >\r\n /**\r\n * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.\r\n *\r\n * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), any relevant query arguments, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.\r\n *\r\n * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.\r\n *\r\n * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.\r\n *\r\n * @example\r\n * ```ts\r\n * const patchCollection = dispatch(\r\n * api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\r\n * draftPosts.push({ id: 1, name: 'Teddy' })\r\n * })\r\n * )\r\n *\r\n * // later\r\n * dispatch(\r\n * api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)\r\n * )\r\n *\r\n * // or\r\n * patchCollection.undo()\r\n * ```\r\n */\r\n patchQueryData: PatchQueryDataThunk<\r\n Definitions,\r\n RootState\r\n >\r\n /** @deprecated renamed to `patchQueryData` */\r\n patchQueryResult: PatchQueryDataThunk<\r\n Definitions,\r\n RootState\r\n >\r\n /**\r\n * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * dispatch(api.util.resetApiState())\r\n * ```\r\n */\r\n resetApiState: SliceActions['resetApiState']\r\n /**\r\n * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).\r\n *\r\n * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.\r\n *\r\n * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.\r\n *\r\n * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:\r\n *\r\n * - `[TagType]`\r\n * - `[{ type: TagType }]`\r\n * - `[{ type: TagType, id: number | string }]`\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * dispatch(api.util.invalidateTags(['Post']))\r\n * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))\r\n * dispatch(\r\n * api.util.invalidateTags([\r\n * { type: 'Post', id: 1 },\r\n * { type: 'Post', id: 'LIST' },\r\n * ])\r\n * )\r\n * ```\r\n */\r\n invalidateTags: ActionCreatorWithPayload<\r\n Array>,\r\n string\r\n >\r\n\r\n selectInvalidatedBy: (\r\n state: RootState,\r\n tags: ReadonlyArray>\r\n ) => Array<{\r\n endpointName: string\r\n originalArgs: any\r\n queryCacheKey: string\r\n }>\r\n }\r\n /**\r\n * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.\r\n */\r\n endpoints: {\r\n [K in keyof Definitions]: Definitions[K] extends QueryDefinition<\r\n any,\r\n any,\r\n any,\r\n any,\r\n any\r\n >\r\n ? ApiEndpointQuery\r\n : Definitions[K] extends MutationDefinition\r\n ? ApiEndpointMutation\r\n : never\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport interface ApiEndpointQuery<\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n Definition extends QueryDefinition,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n Definitions extends EndpointDefinitions\r\n> {}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport interface ApiEndpointMutation<\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n Definition extends MutationDefinition,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n Definitions extends EndpointDefinitions\r\n> {}\r\n\r\nexport type ListenerActions = {\r\n /**\r\n * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior\r\n * @link https://rtk-query-docs.netlify.app/api/setupListeners\r\n */\r\n onOnline: typeof onOnline\r\n onOffline: typeof onOffline\r\n /**\r\n * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior\r\n * @link https://rtk-query-docs.netlify.app/api/setupListeners\r\n */\r\n onFocus: typeof onFocus\r\n onFocusLost: typeof onFocusLost\r\n}\r\n\r\nexport type InternalActions = SliceActions & ListenerActions\r\n\r\n/**\r\n * Creates a module containing the basic redux logic for use with `buildCreateApi`.\r\n *\r\n * @example\r\n * ```ts\r\n * const createBaseApi = buildCreateApi(coreModule());\r\n * ```\r\n */\r\nexport const coreModule = (): Module => ({\r\n name: coreModuleName,\r\n init(\r\n api,\r\n {\r\n baseQuery,\r\n tagTypes,\r\n reducerPath,\r\n serializeQueryArgs,\r\n keepUnusedDataFor,\r\n refetchOnMountOrArgChange,\r\n refetchOnFocus,\r\n refetchOnReconnect,\r\n },\r\n context\r\n ) {\r\n enablePatches()\r\n\r\n assertCast(serializeQueryArgs)\r\n\r\n const assertTagType: AssertTagTypes = (tag) => {\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development'\r\n ) {\r\n if (!tagTypes.includes(tag.type as any)) {\r\n console.error(\r\n `Tag type '${tag.type}' was used, but not specified in \\`tagTypes\\`!`\r\n )\r\n }\r\n }\r\n return tag\r\n }\r\n\r\n Object.assign(api, {\r\n reducerPath,\r\n endpoints: {},\r\n internalActions: {\r\n onOnline,\r\n onOffline,\r\n onFocus,\r\n onFocusLost,\r\n },\r\n util: {},\r\n })\r\n\r\n const {\r\n queryThunk,\r\n mutationThunk,\r\n patchQueryData,\r\n updateQueryData,\r\n prefetch,\r\n buildMatchThunkActions,\r\n } = buildThunks({\r\n baseQuery,\r\n reducerPath,\r\n context,\r\n api,\r\n serializeQueryArgs,\r\n })\r\n\r\n const { reducer, actions: sliceActions } = buildSlice({\r\n context,\r\n queryThunk,\r\n mutationThunk,\r\n reducerPath,\r\n assertTagType,\r\n config: {\r\n refetchOnFocus,\r\n refetchOnReconnect,\r\n refetchOnMountOrArgChange,\r\n keepUnusedDataFor,\r\n reducerPath,\r\n },\r\n })\r\n\r\n safeAssign(api.util, {\r\n patchQueryData,\r\n updateQueryData,\r\n prefetch,\r\n resetApiState: sliceActions.resetApiState,\r\n })\r\n safeAssign(api.internalActions, sliceActions)\r\n\r\n // remove in final release\r\n Object.defineProperty(api.util, 'updateQueryResult', {\r\n get() {\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development'\r\n ) {\r\n console.warn(\r\n '`api.util.updateQueryResult` has been renamed to `api.util.updateQueryData`, please change your code accordingly'\r\n )\r\n }\r\n return api.util.updateQueryData\r\n },\r\n })\r\n // remove in final release\r\n Object.defineProperty(api.util, 'patchQueryResult', {\r\n get() {\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development'\r\n ) {\r\n console.warn(\r\n '`api.util.patchQueryResult` has been renamed to `api.util.patchQueryData`, please change your code accordingly'\r\n )\r\n }\r\n return api.util.patchQueryData\r\n },\r\n })\r\n\r\n const { middleware, actions: middlewareActions } = buildMiddleware({\r\n reducerPath,\r\n context,\r\n queryThunk,\r\n mutationThunk,\r\n api,\r\n assertTagType,\r\n })\r\n safeAssign(api.util, middlewareActions)\r\n\r\n safeAssign(api, { reducer: reducer as any, middleware })\r\n\r\n const { buildQuerySelector, buildMutationSelector, selectInvalidatedBy } =\r\n buildSelectors({\r\n serializeQueryArgs: serializeQueryArgs as any,\r\n reducerPath,\r\n })\r\n\r\n safeAssign(api.util, { selectInvalidatedBy })\r\n\r\n const {\r\n buildInitiateQuery,\r\n buildInitiateMutation,\r\n getRunningOperationPromises,\r\n getRunningOperationPromise,\r\n } = buildInitiate({\r\n queryThunk,\r\n mutationThunk,\r\n api,\r\n serializeQueryArgs: serializeQueryArgs as any,\r\n context,\r\n })\r\n\r\n safeAssign(api.util, {\r\n getRunningOperationPromises,\r\n getRunningOperationPromise,\r\n })\r\n\r\n return {\r\n name: coreModuleName,\r\n injectEndpoint(endpointName, definition) {\r\n const anyApi = api as any as Api<\r\n any,\r\n Record,\r\n string,\r\n string,\r\n CoreModule\r\n >\r\n anyApi.endpoints[endpointName] ??= {} as any\r\n if (isQueryDefinition(definition)) {\r\n safeAssign(\r\n anyApi.endpoints[endpointName],\r\n {\r\n select: buildQuerySelector(endpointName, definition),\r\n initiate: buildInitiateQuery(endpointName, definition),\r\n },\r\n buildMatchThunkActions(queryThunk, endpointName)\r\n )\r\n } else if (isMutationDefinition(definition)) {\r\n safeAssign(\r\n anyApi.endpoints[endpointName],\r\n {\r\n select: buildMutationSelector(),\r\n initiate: buildInitiateMutation(endpointName),\r\n },\r\n buildMatchThunkActions(mutationThunk, endpointName)\r\n )\r\n }\r\n },\r\n }\r\n },\r\n})\r\n","/**\r\n * Assumes a browser is online if `undefined`, otherwise makes a best effort\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine\r\n */\r\nexport function isOnline() {\r\n // We set the default config value in the store, so we'd need to check for this in a SSR env\r\n return typeof navigator === 'undefined'\r\n ? true\r\n : navigator.onLine === undefined\r\n ? true\r\n : navigator.onLine\r\n}\r\n","/**\r\n * Assumes true for a non-browser env, otherwise makes a best effort\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState\r\n */\r\nexport function isDocumentVisible(): boolean {\r\n // `document` may not exist in non-browser envs (like RN)\r\n if (typeof document === 'undefined') {\r\n return true\r\n }\r\n // Match true for visible, prerender, undefined\r\n return document.visibilityState !== 'hidden'\r\n}\r\n","import type {\r\n EndpointDefinitions,\r\n QueryDefinition,\r\n MutationDefinition,\r\n QueryArgFrom,\r\n ResultTypeFrom,\r\n} from '../endpointDefinitions'\r\nimport { DefinitionType } from '../endpointDefinitions'\r\nimport type { QueryThunk, MutationThunk } from './buildThunks'\r\nimport type { AnyAction, ThunkAction, SerializedError } from '@reduxjs/toolkit'\r\nimport type { SubscriptionOptions, RootState } from './apiState'\r\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'\r\nimport type { Api, ApiContext } from '../apiTypes'\r\nimport type { ApiEndpointQuery } from './module'\r\nimport type { BaseQueryError } from '../baseQueryTypes'\r\nimport type { QueryResultSelectorResult } from './buildSelectors'\r\n\r\ndeclare module './module' {\r\n export interface ApiEndpointQuery<\r\n Definition extends QueryDefinition,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n Definitions extends EndpointDefinitions\r\n > {\r\n initiate: StartQueryActionCreator\r\n }\r\n\r\n export interface ApiEndpointMutation<\r\n Definition extends MutationDefinition,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n Definitions extends EndpointDefinitions\r\n > {\r\n initiate: StartMutationActionCreator\r\n }\r\n}\r\n\r\nexport interface StartQueryActionCreatorOptions {\r\n subscribe?: boolean\r\n forceRefetch?: boolean | number\r\n subscriptionOptions?: SubscriptionOptions\r\n}\r\n\r\ntype StartQueryActionCreator<\r\n D extends QueryDefinition\r\n> = (\r\n arg: QueryArgFrom,\r\n options?: StartQueryActionCreatorOptions\r\n) => ThunkAction, any, any, AnyAction>\r\n\r\nexport type QueryActionCreatorResult<\r\n D extends QueryDefinition\r\n> = Promise> & {\r\n arg: QueryArgFrom\r\n requestId: string\r\n subscriptionOptions: SubscriptionOptions | undefined\r\n abort(): void\r\n unwrap(): Promise>\r\n unsubscribe(): void\r\n refetch(): void\r\n updateSubscriptionOptions(options: SubscriptionOptions): void\r\n queryCacheKey: string\r\n}\r\n\r\ntype StartMutationActionCreator<\r\n D extends MutationDefinition\r\n> = (\r\n arg: QueryArgFrom,\r\n options?: {\r\n /**\r\n * If this mutation should be tracked in the store.\r\n * If you just want to manually trigger this mutation using `dispatch` and don't care about the\r\n * result, state & potential errors being held in store, you can set this to false.\r\n * (defaults to `true`)\r\n */\r\n track?: boolean\r\n fixedCacheKey?: string\r\n }\r\n) => ThunkAction, any, any, AnyAction>\r\n\r\nexport type MutationActionCreatorResult<\r\n D extends MutationDefinition\r\n> = Promise<\r\n | { data: ResultTypeFrom }\r\n | {\r\n error:\r\n | Exclude<\r\n BaseQueryError<\r\n D extends MutationDefinition\r\n ? BaseQuery\r\n : never\r\n >,\r\n undefined\r\n >\r\n | SerializedError\r\n }\r\n> & {\r\n /** @internal */\r\n arg: {\r\n /**\r\n * The name of the given endpoint for the mutation\r\n */\r\n endpointName: string\r\n /**\r\n * The original arguments supplied to the mutation call\r\n */\r\n originalArgs: QueryArgFrom\r\n /**\r\n * Whether the mutation is being tracked in the store.\r\n */\r\n track?: boolean\r\n fixedCacheKey?: string\r\n }\r\n /**\r\n * A unique string generated for the request sequence\r\n */\r\n requestId: string\r\n\r\n /**\r\n * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation\r\n * that was fired off from reaching the server, but only to assist in handling the response.\r\n *\r\n * Calling `abort()` prior to the promise resolving will force it to reach the error state with\r\n * the serialized error:\r\n * `{ name: 'AbortError', message: 'Aborted' }`\r\n *\r\n * @example\r\n * ```ts\r\n * const [updateUser] = useUpdateUserMutation();\r\n *\r\n * useEffect(() => {\r\n * const promise = updateUser(id);\r\n * promise\r\n * .unwrap()\r\n * .catch((err) => {\r\n * if (err.name === 'AbortError') return;\r\n * // else handle the unexpected error\r\n * })\r\n *\r\n * return () => {\r\n * promise.abort();\r\n * }\r\n * }, [id, updateUser])\r\n * ```\r\n */\r\n abort(): void\r\n /**\r\n * Unwraps a mutation call to provide the raw response/error.\r\n *\r\n * @remarks\r\n * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\r\n *\r\n * @example\r\n * ```ts\r\n * // codeblock-meta title=\"Using .unwrap\"\r\n * addPost({ id: 1, name: 'Example' })\r\n * .unwrap()\r\n * .then((payload) => console.log('fulfilled', payload))\r\n * .catch((error) => console.error('rejected', error));\r\n * ```\r\n *\r\n * @example\r\n * ```ts\r\n * // codeblock-meta title=\"Using .unwrap with async await\"\r\n * try {\r\n * const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\r\n * console.log('fulfilled', payload)\r\n * } catch (error) {\r\n * console.error('rejected', error);\r\n * }\r\n * ```\r\n */\r\n unwrap(): Promise>\r\n /**\r\n * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.\r\n The value returned by the hook will reset to `isUninitialized` afterwards.\r\n */\r\n reset(): void\r\n /** @deprecated has been renamed to `reset` */\r\n unsubscribe(): void\r\n}\r\n\r\nexport function buildInitiate({\r\n serializeQueryArgs,\r\n queryThunk,\r\n mutationThunk,\r\n api,\r\n context,\r\n}: {\r\n serializeQueryArgs: InternalSerializeQueryArgs\r\n queryThunk: QueryThunk\r\n mutationThunk: MutationThunk\r\n api: Api\r\n context: ApiContext\r\n}) {\r\n const runningQueries: Record<\r\n string,\r\n QueryActionCreatorResult | undefined\r\n > = {}\r\n const runningMutations: Record<\r\n string,\r\n MutationActionCreatorResult | undefined\r\n > = {}\r\n\r\n const {\r\n unsubscribeQueryResult,\r\n removeMutationResult,\r\n updateSubscriptionOptions,\r\n } = api.internalActions\r\n return {\r\n buildInitiateQuery,\r\n buildInitiateMutation,\r\n getRunningOperationPromises,\r\n getRunningOperationPromise,\r\n }\r\n\r\n function getRunningOperationPromise(\r\n endpointName: string,\r\n argOrRequestId: any\r\n ): any {\r\n const endpointDefinition = context.endpointDefinitions[endpointName]\r\n if (endpointDefinition.type === DefinitionType.query) {\r\n const queryCacheKey = serializeQueryArgs({\r\n queryArgs: argOrRequestId,\r\n endpointDefinition,\r\n endpointName,\r\n })\r\n return runningQueries[queryCacheKey]\r\n } else {\r\n return runningMutations[argOrRequestId]\r\n }\r\n }\r\n\r\n function getRunningOperationPromises() {\r\n return [\r\n ...Object.values(runningQueries),\r\n ...Object.values(runningMutations),\r\n ].filter((t: T | undefined): t is T => !!t)\r\n }\r\n\r\n function middlewareWarning(getState: () => RootState<{}, string, string>) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if ((middlewareWarning as any).triggered) return\r\n const registered =\r\n getState()[api.reducerPath]?.config?.middlewareRegistered\r\n if (registered !== undefined) {\r\n ;(middlewareWarning as any).triggered = true\r\n }\r\n if (registered === false) {\r\n console.warn(\r\n `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\r\nFeatures like automatic cache collection, automatic refetching etc. will not be available.`\r\n )\r\n }\r\n }\r\n }\r\n\r\n function buildInitiateQuery(\r\n endpointName: string,\r\n endpointDefinition: QueryDefinition\r\n ) {\r\n const queryAction: StartQueryActionCreator =\r\n (arg, { subscribe = true, forceRefetch, subscriptionOptions } = {}) =>\r\n (dispatch, getState) => {\r\n const queryCacheKey = serializeQueryArgs({\r\n queryArgs: arg,\r\n endpointDefinition,\r\n endpointName,\r\n })\r\n const thunk = queryThunk({\r\n type: 'query',\r\n subscribe,\r\n forceRefetch,\r\n subscriptionOptions,\r\n endpointName,\r\n originalArgs: arg,\r\n queryCacheKey,\r\n })\r\n const thunkResult = dispatch(thunk)\r\n middlewareWarning(getState)\r\n\r\n const { requestId, abort } = thunkResult\r\n\r\n const statePromise: QueryActionCreatorResult = Object.assign(\r\n Promise.all([runningQueries[queryCacheKey], thunkResult]).then(() =>\r\n (api.endpoints[endpointName] as ApiEndpointQuery).select(\r\n arg\r\n )(getState())\r\n ),\r\n {\r\n arg,\r\n requestId,\r\n subscriptionOptions,\r\n queryCacheKey,\r\n abort,\r\n async unwrap() {\r\n const result = await statePromise\r\n\r\n if (result.isError) {\r\n throw result.error\r\n }\r\n\r\n return result.data\r\n },\r\n refetch() {\r\n dispatch(\r\n queryAction(arg, { subscribe: false, forceRefetch: true })\r\n )\r\n },\r\n unsubscribe() {\r\n if (subscribe)\r\n dispatch(\r\n unsubscribeQueryResult({\r\n queryCacheKey,\r\n requestId,\r\n })\r\n )\r\n },\r\n updateSubscriptionOptions(options: SubscriptionOptions) {\r\n statePromise.subscriptionOptions = options\r\n dispatch(\r\n updateSubscriptionOptions({\r\n endpointName,\r\n requestId,\r\n queryCacheKey,\r\n options,\r\n })\r\n )\r\n },\r\n }\r\n )\r\n\r\n if (!runningQueries[queryCacheKey]) {\r\n runningQueries[queryCacheKey] = statePromise\r\n statePromise.then(() => {\r\n delete runningQueries[queryCacheKey]\r\n })\r\n }\r\n\r\n return statePromise\r\n }\r\n return queryAction\r\n }\r\n\r\n function buildInitiateMutation(\r\n endpointName: string\r\n ): StartMutationActionCreator {\r\n return (arg, { track = true, fixedCacheKey } = {}) =>\r\n (dispatch, getState) => {\r\n const thunk = mutationThunk({\r\n type: 'mutation',\r\n endpointName,\r\n originalArgs: arg,\r\n track,\r\n fixedCacheKey,\r\n })\r\n const thunkResult = dispatch(thunk)\r\n middlewareWarning(getState)\r\n const { requestId, abort, unwrap } = thunkResult\r\n const returnValuePromise = thunkResult\r\n .unwrap()\r\n .then((data) => ({ data }))\r\n .catch((error) => ({ error }))\r\n\r\n const reset = () => {\r\n dispatch(removeMutationResult({ requestId, fixedCacheKey }))\r\n }\r\n\r\n const ret = Object.assign(returnValuePromise, {\r\n arg: thunkResult.arg,\r\n requestId,\r\n abort,\r\n unwrap,\r\n unsubscribe: reset,\r\n reset,\r\n })\r\n\r\n runningMutations[requestId] = ret\r\n ret.then(() => {\r\n delete runningMutations[requestId]\r\n })\r\n if (fixedCacheKey) {\r\n runningMutations[fixedCacheKey] = ret\r\n ret.then(() => {\r\n if (runningMutations[fixedCacheKey] === ret)\r\n delete runningMutations[fixedCacheKey]\r\n })\r\n }\r\n\r\n return ret\r\n }\r\n }\r\n}\r\n","import { buildCreateApi, CreateApi } from '../createApi'\r\nimport { coreModule, coreModuleName } from './module'\r\n\r\nconst createApi = /* @__PURE__ */ buildCreateApi(coreModule())\r\n\r\nexport { createApi, coreModule }\r\n","/** 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;","import { current, isDraft } from 'immer'\r\nimport { createSelector } from 'reselect'\r\n\r\n/**\r\n * \"Draft-Safe\" version of `reselect`'s `createSelector`:\r\n * If an `immer`-drafted object is passed into the resulting selector's first argument,\r\n * the selector will act on the current draft value, instead of returning a cached value\r\n * that might be possibly outdated if the draft has been modified since.\r\n * @public\r\n */\r\nexport const createDraftSafeSelector: typeof createSelector = (\r\n ...args: unknown[]\r\n) => {\r\n const selector = (createSelector as any)(...args)\r\n const wrappedSelector = (value: unknown, ...rest: unknown[]) =>\r\n selector(isDraft(value) ? current(value) : value, ...rest)\r\n return wrappedSelector as any\r\n}\r\n","import type { Action, ActionCreator, StoreEnhancer } from 'redux'\r\nimport { compose } from 'redux'\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface EnhancerOptions {\r\n /**\r\n * the instance name to be showed on the monitor page. Default value is `document.title`.\r\n * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.\r\n */\r\n name?: string\r\n /**\r\n * action creators functions to be available in the Dispatcher.\r\n */\r\n actionCreators?: ActionCreator[] | { [key: string]: ActionCreator }\r\n /**\r\n * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.\r\n * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.\r\n * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).\r\n *\r\n * @default 500 ms.\r\n */\r\n latency?: number\r\n /**\r\n * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.\r\n *\r\n * @default 50\r\n */\r\n maxAge?: number\r\n /**\r\n * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).\r\n * - `false` - will handle also circular references.\r\n * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.\r\n * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.\r\n * For each of them you can indicate if to include (by setting as `true`).\r\n * For `function` key you can also specify a custom function which handles serialization.\r\n * See [`jsan`](https://github.com/kolodny/jsan) for more details.\r\n */\r\n serialize?:\r\n | boolean\r\n | {\r\n date?: boolean\r\n regex?: boolean\r\n undefined?: boolean\r\n error?: boolean\r\n symbol?: boolean\r\n map?: boolean\r\n set?: boolean\r\n // eslint-disable-next-line @typescript-eslint/ban-types\r\n function?: boolean | Function\r\n }\r\n /**\r\n * function which takes `action` object and id number as arguments, and should return `action` object back.\r\n */\r\n actionSanitizer?: (action: A, id: number) => A\r\n /**\r\n * function which takes `state` object and index as arguments, and should return `state` object back.\r\n */\r\n stateSanitizer?: (state: S, index: number) => S\r\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsWhitelist` specified, `actionsBlacklist` is ignored.\r\n * @deprecated Use actionsDenylist instead.\r\n */\r\n actionsBlacklist?: string | string[]\r\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsWhitelist` specified, `actionsBlacklist` is ignored.\r\n * @deprecated Use actionsAllowlist instead.\r\n */\r\n actionsWhitelist?: string | string[]\r\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n */\r\n actionsDenylist?: string | string[]\r\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n */\r\n actionsAllowlist?: string | string[]\r\n /**\r\n * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.\r\n * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.\r\n */\r\n predicate?: (state: S, action: A) => boolean\r\n /**\r\n * if specified as `false`, it will not record the changes till clicking on `Start recording` button.\r\n * Available only for Redux enhancer, for others use `autoPause`.\r\n *\r\n * @default true\r\n */\r\n shouldRecordChanges?: boolean\r\n /**\r\n * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.\r\n * If not specified, will commit when paused. Available only for Redux enhancer.\r\n *\r\n * @default \"@@PAUSED\"\"\r\n */\r\n pauseActionType?: string\r\n /**\r\n * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\r\n * Not available for Redux enhancer (as it already does it but storing the data to be sent).\r\n *\r\n * @default false\r\n */\r\n autoPause?: boolean\r\n /**\r\n * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.\r\n * Available only for Redux enhancer.\r\n *\r\n * @default false\r\n */\r\n shouldStartLocked?: boolean\r\n /**\r\n * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.\r\n *\r\n * @default true\r\n */\r\n shouldHotReload?: boolean\r\n /**\r\n * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.\r\n *\r\n * @default false\r\n */\r\n shouldCatchErrors?: boolean\r\n /**\r\n * If you want to restrict the extension, specify the features you allow.\r\n * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.\r\n * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.\r\n * Otherwise, you'll get/set the data right from the monitor part.\r\n */\r\n features?: {\r\n /**\r\n * start/pause recording of dispatched actions\r\n */\r\n pause?: boolean\r\n /**\r\n * lock/unlock dispatching actions and side effects\r\n */\r\n lock?: boolean\r\n /**\r\n * persist states on page reloading\r\n */\r\n persist?: boolean\r\n /**\r\n * export history of actions in a file\r\n */\r\n export?: boolean | 'custom'\r\n /**\r\n * import history of actions from a file\r\n */\r\n import?: boolean | 'custom'\r\n /**\r\n * jump back and forth (time travelling)\r\n */\r\n jump?: boolean\r\n /**\r\n * skip (cancel) actions\r\n */\r\n skip?: boolean\r\n /**\r\n * drag and drop actions in the history list\r\n */\r\n reorder?: boolean\r\n /**\r\n * dispatch custom actions or action creators\r\n */\r\n dispatch?: boolean\r\n /**\r\n * generate tests for the selected actions\r\n */\r\n test?: boolean\r\n }\r\n /**\r\n * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.\r\n * Defaults to false.\r\n */\r\n trace?: boolean | ((action: A) => string)\r\n /**\r\n * The maximum number of stack trace entries to record per action. Defaults to 10.\r\n */\r\n traceLimit?: number\r\n}\r\n\r\ntype Compose = typeof compose\r\n\r\ninterface ComposeWithDevTools {\r\n (options: EnhancerOptions): Compose\r\n (...funcs: StoreEnhancer[]): StoreEnhancer\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport const composeWithDevTools: ComposeWithDevTools =\r\n typeof window !== 'undefined' &&\r\n (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\r\n ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\r\n : function () {\r\n if (arguments.length === 0) return undefined\r\n if (typeof arguments[0] === 'object') return compose\r\n return compose.apply(null, arguments as any as Function[])\r\n }\r\n\r\n/**\r\n * @public\r\n */\r\nexport const devToolsEnhancer: {\r\n (options: EnhancerOptions): StoreEnhancer\r\n} =\r\n typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__\r\n ? (window as any).__REDUX_DEVTOOLS_EXTENSION__\r\n : function () {\r\n return function (noop) {\r\n return noop\r\n }\r\n }\r\n","/**\r\n * Returns true if the passed value is \"plain\" object, i.e. an object whose\r\n * prototype is the root `Object.prototype`. This includes objects created\r\n * using object literals, but not for instance for class instances.\r\n *\r\n * @param {any} value The value to inspect.\r\n * @returns {boolean} True if the argument appears to be a plain object.\r\n *\r\n * @public\r\n */\r\nexport default function isPlainObject(value: unknown): value is object {\r\n if (typeof value !== 'object' || value === null) return false\r\n\r\n let proto = Object.getPrototypeOf(value)\r\n if (proto === null) return true\r\n\r\n let baseProto = proto\r\n while (Object.getPrototypeOf(baseProto) !== null) {\r\n baseProto = Object.getPrototypeOf(baseProto)\r\n }\r\n\r\n return proto === baseProto\r\n}\r\n","import createNextState, { isDraftable } from 'immer'\r\nimport type { Middleware } from 'redux'\r\n\r\nexport function getTimeMeasureUtils(maxDelay: number, fnName: string) {\r\n let elapsed = 0\r\n return {\r\n measureTime(fn: () => T): T {\r\n const started = Date.now()\r\n try {\r\n return fn()\r\n } finally {\r\n const finished = Date.now()\r\n elapsed += finished - started\r\n }\r\n },\r\n warnIfExceeded() {\r\n if (elapsed > maxDelay) {\r\n console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \r\nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\r\nIt is disabled in production builds, so you don't need to worry about that.`)\r\n }\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport class MiddlewareArray<\r\n Middlewares extends Middleware[]\r\n> extends Array {\r\n constructor(...items: Middlewares)\r\n constructor(...args: any[]) {\r\n super(...args)\r\n Object.setPrototypeOf(this, MiddlewareArray.prototype)\r\n }\r\n\r\n static get [Symbol.species]() {\r\n return MiddlewareArray as any\r\n }\r\n\r\n concat>>(\r\n items: AdditionalMiddlewares\r\n ): MiddlewareArray<[...Middlewares, ...AdditionalMiddlewares]>\r\n\r\n concat>>(\r\n ...items: AdditionalMiddlewares\r\n ): MiddlewareArray<[...Middlewares, ...AdditionalMiddlewares]>\r\n concat(...arr: any[]) {\r\n return super.concat.apply(this, arr)\r\n }\r\n\r\n prepend>>(\r\n items: AdditionalMiddlewares\r\n ): MiddlewareArray<[...AdditionalMiddlewares, ...Middlewares]>\r\n\r\n prepend>>(\r\n ...items: AdditionalMiddlewares\r\n ): MiddlewareArray<[...AdditionalMiddlewares, ...Middlewares]>\r\n\r\n prepend(...arr: any[]) {\r\n if (arr.length === 1 && Array.isArray(arr[0])) {\r\n return new MiddlewareArray(...arr[0].concat(this))\r\n }\r\n return new MiddlewareArray(...arr.concat(this))\r\n }\r\n}\r\n\r\nexport function freezeDraftable(val: T) {\r\n return isDraftable(val) ? createNextState(val, () => {}) : val\r\n}\r\n","import type { Middleware } from 'redux'\r\nimport { getTimeMeasureUtils } from './utils'\r\n\r\ntype EntryProcessor = (key: string, value: any) => any\r\n\r\nconst isProduction: boolean = process.env.NODE_ENV === 'production'\r\nconst prefix: string = 'Invariant failed'\r\n\r\n// Throw an error if the condition fails\r\n// Strip out error messages for production\r\n// > Not providing an inline default argument for message as the result is smaller\r\nfunction invariant(condition: any, message?: string) {\r\n if (condition) {\r\n return\r\n }\r\n // Condition not passed\r\n\r\n // In production we strip the message but still throw\r\n if (isProduction) {\r\n throw new Error(prefix)\r\n }\r\n\r\n // When not in production we allow the message to pass through\r\n // *This block will be removed in production builds*\r\n throw new Error(`${prefix}: ${message || ''}`)\r\n}\r\n\r\nfunction stringify(\r\n obj: any,\r\n serializer?: EntryProcessor,\r\n indent?: string | number,\r\n decycler?: EntryProcessor\r\n): string {\r\n return JSON.stringify(obj, getSerialize(serializer, decycler), indent)\r\n}\r\n\r\nfunction getSerialize(\r\n serializer?: EntryProcessor,\r\n decycler?: EntryProcessor\r\n): EntryProcessor {\r\n let stack: any[] = [],\r\n keys: any[] = []\r\n\r\n if (!decycler)\r\n decycler = function (_: string, value: any) {\r\n if (stack[0] === value) return '[Circular ~]'\r\n return (\r\n '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']'\r\n )\r\n }\r\n\r\n return function (this: any, key: string, value: any) {\r\n if (stack.length > 0) {\r\n var thisPos = stack.indexOf(this)\r\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\r\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)\r\n if (~stack.indexOf(value)) value = decycler!.call(this, key, value)\r\n } else stack.push(value)\r\n\r\n return serializer == null ? value : serializer.call(this, key, value)\r\n }\r\n}\r\n\r\n/**\r\n * The default `isImmutable` function.\r\n *\r\n * @public\r\n */\r\nexport function isImmutableDefault(value: unknown): boolean {\r\n return (\r\n typeof value !== 'object' ||\r\n value === null ||\r\n typeof value === 'undefined' ||\r\n Object.isFrozen(value)\r\n )\r\n}\r\n\r\nexport function trackForMutations(\r\n isImmutable: IsImmutableFunc,\r\n ignorePaths: string[] | undefined,\r\n obj: any\r\n) {\r\n const trackedProperties = trackProperties(isImmutable, ignorePaths, obj)\r\n return {\r\n detectMutations() {\r\n return detectMutations(isImmutable, ignorePaths, trackedProperties, obj)\r\n },\r\n }\r\n}\r\n\r\ninterface TrackedProperty {\r\n value: any\r\n children: Record\r\n}\r\n\r\nfunction trackProperties(\r\n isImmutable: IsImmutableFunc,\r\n ignorePaths: IgnorePaths = [],\r\n obj: Record,\r\n path: string = ''\r\n) {\r\n const tracked: Partial = { value: obj }\r\n\r\n if (!isImmutable(obj)) {\r\n tracked.children = {}\r\n\r\n for (const key in obj) {\r\n const childPath = path ? path + '.' + key : key\r\n if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\r\n continue\r\n }\r\n\r\n tracked.children[key] = trackProperties(\r\n isImmutable,\r\n ignorePaths,\r\n obj[key],\r\n childPath\r\n )\r\n }\r\n }\r\n return tracked as TrackedProperty\r\n}\r\n\r\ntype IgnorePaths = readonly string[]\r\n\r\nfunction detectMutations(\r\n isImmutable: IsImmutableFunc,\r\n ignorePaths: IgnorePaths = [],\r\n trackedProperty: TrackedProperty,\r\n obj: any,\r\n sameParentRef: boolean = false,\r\n path: string = ''\r\n): { wasMutated: boolean; path?: string } {\r\n const prevObj = trackedProperty ? trackedProperty.value : undefined\r\n\r\n const sameRef = prevObj === obj\r\n\r\n if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\r\n return { wasMutated: true, path }\r\n }\r\n\r\n if (isImmutable(prevObj) || isImmutable(obj)) {\r\n return { wasMutated: false }\r\n }\r\n\r\n // Gather all keys from prev (tracked) and after objs\r\n const keysToDetect: Record = {}\r\n for (let key in trackedProperty.children) {\r\n keysToDetect[key] = true\r\n }\r\n for (let key in obj) {\r\n keysToDetect[key] = true\r\n }\r\n\r\n for (let key in keysToDetect) {\r\n const childPath = path ? path + '.' + key : key\r\n if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\r\n continue\r\n }\r\n\r\n const result = detectMutations(\r\n isImmutable,\r\n ignorePaths,\r\n trackedProperty.children[key],\r\n obj[key],\r\n sameRef,\r\n childPath\r\n )\r\n\r\n if (result.wasMutated) {\r\n return result\r\n }\r\n }\r\n return { wasMutated: false }\r\n}\r\n\r\ntype IsImmutableFunc = (value: any) => boolean\r\n\r\n/**\r\n * Options for `createImmutableStateInvariantMiddleware()`.\r\n *\r\n * @public\r\n */\r\nexport interface ImmutableStateInvariantMiddlewareOptions {\r\n /**\r\n Callback function to check if a value is considered to be immutable.\r\n This function is applied recursively to every value contained in the state.\r\n The default implementation will return true for primitive types \r\n (like numbers, strings, booleans, null and undefined).\r\n */\r\n isImmutable?: IsImmutableFunc\r\n /** \r\n An array of dot-separated path strings that match named nodes from \r\n the root state to ignore when checking for immutability.\r\n Defaults to undefined\r\n */\r\n ignoredPaths?: string[]\r\n /** Print a warning if checks take longer than N ms. Default: 32ms */\r\n warnAfter?: number\r\n // @deprecated. Use ignoredPaths\r\n ignore?: string[]\r\n}\r\n\r\n/**\r\n * Creates a middleware that checks whether any state was mutated in between\r\n * dispatches or during a dispatch. If any mutations are detected, an error is\r\n * thrown.\r\n *\r\n * @param options Middleware options.\r\n *\r\n * @public\r\n */\r\nexport function createImmutableStateInvariantMiddleware(\r\n options: ImmutableStateInvariantMiddlewareOptions = {}\r\n): Middleware {\r\n if (process.env.NODE_ENV === 'production') {\r\n return () => (next) => (action) => next(action)\r\n }\r\n\r\n let {\r\n isImmutable = isImmutableDefault,\r\n ignoredPaths,\r\n warnAfter = 32,\r\n ignore,\r\n } = options\r\n\r\n // Alias ignore->ignoredPaths, but prefer ignoredPaths if present\r\n ignoredPaths = ignoredPaths || ignore\r\n\r\n const track = trackForMutations.bind(null, isImmutable, ignoredPaths)\r\n\r\n return ({ getState }) => {\r\n let state = getState()\r\n let tracker = track(state)\r\n\r\n let result\r\n return (next) => (action) => {\r\n const measureUtils = getTimeMeasureUtils(\r\n warnAfter,\r\n 'ImmutableStateInvariantMiddleware'\r\n )\r\n\r\n measureUtils.measureTime(() => {\r\n state = getState()\r\n\r\n result = tracker.detectMutations()\r\n // Track before potentially not meeting the invariant\r\n tracker = track(state)\r\n\r\n invariant(\r\n !result.wasMutated,\r\n `A state mutation was detected between dispatches, in the path '${\r\n result.path || ''\r\n }'. This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`\r\n )\r\n })\r\n\r\n const dispatchedAction = next(action)\r\n\r\n measureUtils.measureTime(() => {\r\n state = getState()\r\n\r\n result = tracker.detectMutations()\r\n // Track before potentially not meeting the invariant\r\n tracker = track(state)\r\n\r\n result.wasMutated &&\r\n invariant(\r\n !result.wasMutated,\r\n `A state mutation was detected inside a dispatch, in the path: ${\r\n result.path || ''\r\n }. Take a look at the reducer(s) handling the action ${stringify(\r\n action\r\n )}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`\r\n )\r\n })\r\n\r\n measureUtils.warnIfExceeded()\r\n\r\n return dispatchedAction\r\n }\r\n }\r\n}\r\n","import isPlainObject from './isPlainObject'\r\nimport type { Middleware } from 'redux'\r\nimport { getTimeMeasureUtils } from './utils'\r\n\r\n/**\r\n * Returns true if the passed value is \"plain\", i.e. a value that is either\r\n * directly JSON-serializable (boolean, number, string, array, plain object)\r\n * or `undefined`.\r\n *\r\n * @param val The value to check.\r\n *\r\n * @public\r\n */\r\nexport function isPlain(val: any) {\r\n const type = typeof val\r\n return (\r\n type === 'undefined' ||\r\n val === null ||\r\n type === 'string' ||\r\n type === 'boolean' ||\r\n type === 'number' ||\r\n Array.isArray(val) ||\r\n isPlainObject(val)\r\n )\r\n}\r\n\r\ninterface NonSerializableValue {\r\n keyPath: string\r\n value: unknown\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function findNonSerializableValue(\r\n value: unknown,\r\n path: string = '',\r\n isSerializable: (value: unknown) => boolean = isPlain,\r\n getEntries?: (value: unknown) => [string, any][],\r\n ignoredPaths: readonly string[] = []\r\n): NonSerializableValue | false {\r\n let foundNestedSerializable: NonSerializableValue | false\r\n\r\n if (!isSerializable(value)) {\r\n return {\r\n keyPath: path || '',\r\n value: value,\r\n }\r\n }\r\n\r\n if (typeof value !== 'object' || value === null) {\r\n return false\r\n }\r\n\r\n const entries = getEntries != null ? getEntries(value) : Object.entries(value)\r\n\r\n const hasIgnoredPaths = ignoredPaths.length > 0\r\n\r\n for (const [key, nestedValue] of entries) {\r\n const nestedPath = path ? path + '.' + key : key\r\n\r\n if (hasIgnoredPaths && ignoredPaths.indexOf(nestedPath) >= 0) {\r\n continue\r\n }\r\n\r\n if (!isSerializable(nestedValue)) {\r\n return {\r\n keyPath: nestedPath,\r\n value: nestedValue,\r\n }\r\n }\r\n\r\n if (typeof nestedValue === 'object') {\r\n foundNestedSerializable = findNonSerializableValue(\r\n nestedValue,\r\n nestedPath,\r\n isSerializable,\r\n getEntries,\r\n ignoredPaths\r\n )\r\n\r\n if (foundNestedSerializable) {\r\n return foundNestedSerializable\r\n }\r\n }\r\n }\r\n\r\n return false\r\n}\r\n\r\n/**\r\n * Options for `createSerializableStateInvariantMiddleware()`.\r\n *\r\n * @public\r\n */\r\nexport interface SerializableStateInvariantMiddlewareOptions {\r\n /**\r\n * The function to check if a value is considered serializable. This\r\n * function is applied recursively to every value contained in the\r\n * state. Defaults to `isPlain()`.\r\n */\r\n isSerializable?: (value: any) => boolean\r\n /**\r\n * The function that will be used to retrieve entries from each\r\n * value. If unspecified, `Object.entries` will be used. Defaults\r\n * to `undefined`.\r\n */\r\n getEntries?: (value: any) => [string, any][]\r\n\r\n /**\r\n * An array of action types to ignore when checking for serializability.\r\n * Defaults to []\r\n */\r\n ignoredActions?: string[]\r\n\r\n /**\r\n * An array of dot-separated path strings to ignore when checking\r\n * for serializability, Defaults to ['meta.arg', 'meta.baseQueryMeta']\r\n */\r\n ignoredActionPaths?: string[]\r\n\r\n /**\r\n * An array of dot-separated path strings to ignore when checking\r\n * for serializability, Defaults to []\r\n */\r\n ignoredPaths?: string[]\r\n /**\r\n * Execution time warning threshold. If the middleware takes longer\r\n * than `warnAfter` ms, a warning will be displayed in the console.\r\n * Defaults to 32ms.\r\n */\r\n warnAfter?: number\r\n\r\n /**\r\n * Opt out of checking state. When set to `true`, other state-related params will be ignored.\r\n */\r\n ignoreState?: boolean\r\n\r\n /**\r\n * Opt out of checking actions. When set to `true`, other action-related params will be ignored.\r\n */\r\n ignoreActions?: boolean\r\n}\r\n\r\n/**\r\n * Creates a middleware that, after every state change, checks if the new\r\n * state is serializable. If a non-serializable value is found within the\r\n * state, an error is printed to the console.\r\n *\r\n * @param options Middleware options.\r\n *\r\n * @public\r\n */\r\nexport function createSerializableStateInvariantMiddleware(\r\n options: SerializableStateInvariantMiddlewareOptions = {}\r\n): Middleware {\r\n if (process.env.NODE_ENV === 'production') {\r\n return () => (next) => (action) => next(action)\r\n }\r\n const {\r\n isSerializable = isPlain,\r\n getEntries,\r\n ignoredActions = [],\r\n ignoredActionPaths = ['meta.arg', 'meta.baseQueryMeta'],\r\n ignoredPaths = [],\r\n warnAfter = 32,\r\n ignoreState = false,\r\n ignoreActions = false,\r\n } = options\r\n\r\n return (storeAPI) => (next) => (action) => {\r\n const result = next(action)\r\n\r\n const measureUtils = getTimeMeasureUtils(\r\n warnAfter,\r\n 'SerializableStateInvariantMiddleware'\r\n )\r\n\r\n if (\r\n !ignoreActions &&\r\n !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)\r\n ) {\r\n measureUtils.measureTime(() => {\r\n const foundActionNonSerializableValue = findNonSerializableValue(\r\n action,\r\n '',\r\n isSerializable,\r\n getEntries,\r\n ignoredActionPaths\r\n )\r\n\r\n if (foundActionNonSerializableValue) {\r\n const { keyPath, value } = foundActionNonSerializableValue\r\n\r\n console.error(\r\n `A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`,\r\n value,\r\n '\\nTake a look at the logic that dispatched this action: ',\r\n action,\r\n '\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)',\r\n '\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)'\r\n )\r\n }\r\n })\r\n }\r\n\r\n if (!ignoreState) {\r\n measureUtils.measureTime(() => {\r\n const state = storeAPI.getState()\r\n\r\n const foundStateNonSerializableValue = findNonSerializableValue(\r\n state,\r\n '',\r\n isSerializable,\r\n getEntries,\r\n ignoredPaths\r\n )\r\n\r\n if (foundStateNonSerializableValue) {\r\n const { keyPath, value } = foundStateNonSerializableValue\r\n\r\n console.error(\r\n `A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`,\r\n value,\r\n `\r\nTake a look at the reducer(s) handling this action type: ${action.type}.\r\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`\r\n )\r\n }\r\n })\r\n\r\n measureUtils.warnIfExceeded()\r\n }\r\n\r\n return result\r\n }\r\n}\r\n","import type { Middleware, AnyAction } from 'redux'\r\nimport type { ThunkMiddleware } from 'redux-thunk'\r\nimport thunkMiddleware from 'redux-thunk'\r\nimport type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware'\r\n/* PROD_START_REMOVE_UMD */\r\nimport { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware'\r\n/* PROD_STOP_REMOVE_UMD */\r\n\r\nimport type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware'\r\nimport { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware'\r\nimport type { ExcludeFromTuple } from './tsHelpers'\r\nimport { MiddlewareArray } from './utils'\r\n\r\nfunction isBoolean(x: any): x is boolean {\r\n return typeof x === 'boolean'\r\n}\r\n\r\ninterface ThunkOptions {\r\n extraArgument: E\r\n}\r\n\r\ninterface GetDefaultMiddlewareOptions {\r\n thunk?: boolean | ThunkOptions\r\n immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions\r\n serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions\r\n}\r\n\r\nexport type ThunkMiddlewareFor<\r\n S,\r\n O extends GetDefaultMiddlewareOptions = {}\r\n> = O extends {\r\n thunk: false\r\n}\r\n ? never\r\n : O extends { thunk: { extraArgument: infer E } }\r\n ? ThunkMiddleware\r\n : ThunkMiddleware\r\n\r\nexport type CurriedGetDefaultMiddleware = <\r\n O extends Partial = {\r\n thunk: true\r\n immutableCheck: true\r\n serializableCheck: true\r\n }\r\n>(\r\n options?: O\r\n) => MiddlewareArray], never>>\r\n\r\nexport function curryGetDefaultMiddleware<\r\n S = any\r\n>(): CurriedGetDefaultMiddleware {\r\n return function curriedGetDefaultMiddleware(options) {\r\n return getDefaultMiddleware(options)\r\n }\r\n}\r\n\r\n/**\r\n * Returns any array containing the default middleware installed by\r\n * `configureStore()`. Useful if you want to configure your store with a custom\r\n * `middleware` array but still keep the default set.\r\n *\r\n * @return The default middleware used by `configureStore()`.\r\n *\r\n * @public\r\n *\r\n * @deprecated Prefer to use the callback notation for the `middleware` option in `configureStore`\r\n * to access a pre-typed `getDefaultMiddleware` instead.\r\n */\r\nexport function getDefaultMiddleware<\r\n S = any,\r\n O extends Partial = {\r\n thunk: true\r\n immutableCheck: true\r\n serializableCheck: true\r\n }\r\n>(\r\n options: O = {} as O\r\n): MiddlewareArray], never>> {\r\n const {\r\n thunk = true,\r\n immutableCheck = true,\r\n serializableCheck = true,\r\n } = options\r\n\r\n let middlewareArray = new MiddlewareArray()\r\n\r\n if (thunk) {\r\n if (isBoolean(thunk)) {\r\n middlewareArray.push(thunkMiddleware)\r\n } else {\r\n middlewareArray.push(\r\n thunkMiddleware.withExtraArgument(thunk.extraArgument)\r\n )\r\n }\r\n }\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (immutableCheck) {\r\n /* PROD_START_REMOVE_UMD */\r\n let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {}\r\n\r\n if (!isBoolean(immutableCheck)) {\r\n immutableOptions = immutableCheck\r\n }\r\n\r\n middlewareArray.unshift(\r\n createImmutableStateInvariantMiddleware(immutableOptions)\r\n )\r\n /* PROD_STOP_REMOVE_UMD */\r\n }\r\n\r\n if (serializableCheck) {\r\n let serializableOptions: SerializableStateInvariantMiddlewareOptions = {}\r\n\r\n if (!isBoolean(serializableCheck)) {\r\n serializableOptions = serializableCheck\r\n }\r\n\r\n middlewareArray.push(\r\n createSerializableStateInvariantMiddleware(serializableOptions)\r\n )\r\n }\r\n }\r\n\r\n return middlewareArray as any\r\n}\r\n","import type {\r\n Reducer,\r\n ReducersMapObject,\r\n Middleware,\r\n Action,\r\n AnyAction,\r\n StoreEnhancer,\r\n Store,\r\n Dispatch,\r\n PreloadedState,\r\n CombinedState,\r\n} from 'redux'\r\nimport { createStore, compose, applyMiddleware, combineReducers } from 'redux'\r\nimport type { EnhancerOptions as DevToolsOptions } from './devtoolsExtension'\r\nimport { composeWithDevTools } from './devtoolsExtension'\r\n\r\nimport isPlainObject from './isPlainObject'\r\nimport type {\r\n ThunkMiddlewareFor,\r\n CurriedGetDefaultMiddleware,\r\n} from './getDefaultMiddleware'\r\nimport { curryGetDefaultMiddleware } from './getDefaultMiddleware'\r\nimport type { NoInfer, ExtractDispatchExtensions } from './tsHelpers'\r\n\r\nconst IS_PRODUCTION = process.env.NODE_ENV === 'production'\r\n\r\n/**\r\n * Callback function type, to be used in `ConfigureStoreOptions.enhancers`\r\n *\r\n * @public\r\n */\r\nexport type ConfigureEnhancersCallback = (\r\n defaultEnhancers: readonly StoreEnhancer[]\r\n) => StoreEnhancer[]\r\n\r\n/**\r\n * Options for `configureStore()`.\r\n *\r\n * @public\r\n */\r\nexport interface ConfigureStoreOptions<\r\n S = any,\r\n A extends Action = AnyAction,\r\n M extends Middlewares = Middlewares\r\n> {\r\n /**\r\n * A single reducer function that will be used as the root reducer, or an\r\n * object of slice reducers that will be passed to `combineReducers()`.\r\n */\r\n reducer: Reducer | ReducersMapObject\r\n\r\n /**\r\n * An array of Redux middleware to install. If not supplied, defaults to\r\n * the set of middleware returned by `getDefaultMiddleware()`.\r\n * \r\n * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`\r\n * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage\r\n */\r\n middleware?: ((getDefaultMiddleware: CurriedGetDefaultMiddleware) => M) | M\r\n\r\n /**\r\n * Whether to enable Redux DevTools integration. Defaults to `true`.\r\n *\r\n * Additional configuration can be done by passing Redux DevTools options\r\n */\r\n devTools?: boolean | DevToolsOptions\r\n\r\n /**\r\n * The initial state, same as Redux's createStore.\r\n * You may optionally specify it to hydrate the state\r\n * from the server in universal apps, or to restore a previously serialized\r\n * user session. If you use `combineReducers()` to produce the root reducer\r\n * function (either directly or indirectly by passing an object as `reducer`),\r\n * this must be an object with the same shape as the reducer map keys.\r\n */\r\n /* \r\n Not 100% correct but the best approximation we can get:\r\n - if S is a `CombinedState` applying a second `CombinedState` on it does not change anything.\r\n - if it is not, there could be two cases:\r\n - `ReducersMapObject` is being passed in. In this case, we will call `combineReducers` on it and `CombinedState` is correct\r\n - `Reducer` is being passed in. In this case, actually `CombinedState` is wrong and `S` would be correct.\r\n As we cannot distinguish between those two cases without adding another generic paramter, \r\n we just make the pragmatic assumption that the latter almost never happens.\r\n */\r\n preloadedState?: PreloadedState>>\r\n\r\n /**\r\n * The store enhancers to apply. See Redux's `createStore()`.\r\n * All enhancers will be included before the DevTools Extension enhancer.\r\n * If you need to customize the order of enhancers, supply a callback\r\n * function that will receive the original array (ie, `[applyMiddleware]`),\r\n * and should return a new array (such as `[applyMiddleware, offline]`).\r\n * If you only need to add middleware, you can use the `middleware` parameter instead.\r\n */\r\n enhancers?: StoreEnhancer[] | ConfigureEnhancersCallback\r\n}\r\n\r\ntype Middlewares = ReadonlyArray>\r\n\r\n/**\r\n * A Redux store returned by `configureStore()`. Supports dispatching\r\n * side-effectful _thunks_ in addition to plain actions.\r\n *\r\n * @public\r\n */\r\nexport interface EnhancedStore<\r\n S = any,\r\n A extends Action = AnyAction,\r\n M extends Middlewares = Middlewares\r\n> extends Store {\r\n /**\r\n * The `dispatch` method of your store, enhanced by all its middlewares.\r\n *\r\n * @inheritdoc\r\n */\r\n dispatch: ExtractDispatchExtensions & Dispatch\r\n}\r\n\r\n/**\r\n * A friendly abstraction over the standard Redux `createStore()` function.\r\n *\r\n * @param config The store configuration.\r\n * @returns A configured Redux store.\r\n *\r\n * @public\r\n */\r\nexport function configureStore<\r\n S = any,\r\n A extends Action = AnyAction,\r\n M extends Middlewares = [ThunkMiddlewareFor]\r\n>(options: ConfigureStoreOptions): EnhancedStore {\r\n const curriedGetDefaultMiddleware = curryGetDefaultMiddleware()\r\n\r\n const {\r\n reducer = undefined,\r\n middleware = curriedGetDefaultMiddleware(),\r\n devTools = true,\r\n preloadedState = undefined,\r\n enhancers = undefined,\r\n } = options || {}\r\n\r\n let rootReducer: Reducer\r\n\r\n if (typeof reducer === 'function') {\r\n rootReducer = reducer\r\n } else if (isPlainObject(reducer)) {\r\n rootReducer = combineReducers(reducer) as unknown as Reducer\r\n } else {\r\n throw new Error(\r\n '\"reducer\" is a required argument, and must be a function or an object of functions that can be passed to combineReducers'\r\n )\r\n }\r\n\r\n let finalMiddleware = middleware\r\n if (typeof finalMiddleware === 'function') {\r\n finalMiddleware = finalMiddleware(curriedGetDefaultMiddleware)\r\n\r\n if (!IS_PRODUCTION && !Array.isArray(finalMiddleware)) {\r\n throw new Error(\r\n 'when using a middleware builder function, an array of middleware must be returned'\r\n )\r\n }\r\n }\r\n if (\r\n !IS_PRODUCTION &&\r\n finalMiddleware.some((item: any) => typeof item !== 'function')\r\n ) {\r\n throw new Error(\r\n 'each middleware provided to configureStore must be a function'\r\n )\r\n }\r\n\r\n const middlewareEnhancer = applyMiddleware(...finalMiddleware)\r\n\r\n let finalCompose = compose\r\n\r\n if (devTools) {\r\n finalCompose = composeWithDevTools({\r\n // Enable capture of stack traces for dispatched Redux actions\r\n trace: !IS_PRODUCTION,\r\n ...(typeof devTools === 'object' && devTools),\r\n })\r\n }\r\n\r\n let storeEnhancers: StoreEnhancer[] = [middlewareEnhancer]\r\n\r\n if (Array.isArray(enhancers)) {\r\n storeEnhancers = [middlewareEnhancer, ...enhancers]\r\n } else if (typeof enhancers === 'function') {\r\n storeEnhancers = enhancers(storeEnhancers)\r\n }\r\n\r\n const composedEnhancer = finalCompose(...storeEnhancers) as any\r\n\r\n return createStore(rootReducer, preloadedState, composedEnhancer)\r\n}\r\n","import type { Action } from 'redux'\r\nimport type {\r\n IsUnknownOrNonInferrable,\r\n IfMaybeUndefined,\r\n IfVoid,\r\n IsAny,\r\n} from './tsHelpers'\r\nimport isPlainObject from './isPlainObject'\r\n\r\n/**\r\n * An action with a string type and an associated payload. This is the\r\n * type of action returned by `createAction()` action creators.\r\n *\r\n * @template P The type of the action's payload.\r\n * @template T the type used for the action type.\r\n * @template M The type of the action's meta (optional)\r\n * @template E The type of the action's error (optional)\r\n *\r\n * @public\r\n */\r\nexport type PayloadAction<\r\n P = void,\r\n T extends string = string,\r\n M = never,\r\n E = never\r\n> = {\r\n payload: P\r\n type: T\r\n} & ([M] extends [never]\r\n ? {}\r\n : {\r\n meta: M\r\n }) &\r\n ([E] extends [never]\r\n ? {}\r\n : {\r\n error: E\r\n })\r\n\r\n/**\r\n * A \"prepare\" method to be used as the second parameter of `createAction`.\r\n * Takes any number of arguments and returns a Flux Standard Action without\r\n * type (will be added later) that *must* contain a payload (might be undefined).\r\n *\r\n * @public\r\n */\r\nexport type PrepareAction

=\r\n | ((...args: any[]) => { payload: P })\r\n | ((...args: any[]) => { payload: P; meta: any })\r\n | ((...args: any[]) => { payload: P; error: any })\r\n | ((...args: any[]) => { payload: P; meta: any; error: any })\r\n\r\n/**\r\n * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.\r\n *\r\n * @internal\r\n */\r\nexport type _ActionCreatorWithPreparedPayload<\r\n PA extends PrepareAction | void,\r\n T extends string = string\r\n> = PA extends PrepareAction\r\n ? ActionCreatorWithPreparedPayload<\r\n Parameters,\r\n P,\r\n T,\r\n ReturnType extends {\r\n error: infer E\r\n }\r\n ? E\r\n : never,\r\n ReturnType extends {\r\n meta: infer M\r\n }\r\n ? M\r\n : never\r\n >\r\n : void\r\n\r\n/**\r\n * Basic type for all action creators.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n */\r\nexport interface BaseActionCreator {\r\n type: T\r\n match: (action: Action) => action is PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator that takes multiple arguments that are passed\r\n * to a `PrepareAction` method to create the final Action.\r\n * @typeParam Args arguments for the action creator function\r\n * @typeParam P `payload` type\r\n * @typeParam T `type` name\r\n * @typeParam E optional `error` type\r\n * @typeParam M optional `meta` type\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithPreparedPayload<\r\n Args extends unknown[],\r\n P,\r\n T extends string = string,\r\n E = never,\r\n M = never\r\n> extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} with `Args` will return\r\n * an Action with a payload of type `P` and (depending on the `PrepareAction`\r\n * method used) a `meta`- and `error` property of types `M` and `E` respectively.\r\n */\r\n (...args: Args): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator of type `T` that takes an optional payload of type `P`.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithOptionalPayload\r\n extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} with an argument will\r\n * return a {@link PayloadAction} of type `T` with a payload of `P`.\r\n * Calling it without an argument will return a PayloadAction with a payload of `undefined`.\r\n */\r\n (payload?: P): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator of type `T` that takes no payload.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithoutPayload\r\n extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} will\r\n * return a {@link PayloadAction} of type `T` with a payload of `undefined`\r\n */\r\n (): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator of type `T` that requires a payload of type P.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithPayload\r\n extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} with an argument will\r\n * return a {@link PayloadAction} of type `T` with a payload of `P`\r\n */\r\n (payload: P): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\r\nexport interface ActionCreatorWithNonInferrablePayload<\r\n T extends string = string\r\n> extends BaseActionCreator {\r\n /**\r\n * Calling this {@link redux#ActionCreator} with an argument will\r\n * return a {@link PayloadAction} of type `T` with a payload\r\n * of exactly the type of the argument.\r\n */\r\n (payload: PT): PayloadAction\r\n}\r\n\r\n/**\r\n * An action creator that produces actions with a `payload` attribute.\r\n *\r\n * @typeParam P the `payload` type\r\n * @typeParam T the `type` of the resulting action\r\n * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.\r\n *\r\n * @public\r\n */\r\nexport type PayloadActionCreator<\r\n P = void,\r\n T extends string = string,\r\n PA extends PrepareAction

| void = void\r\n> = IfPrepareActionMethodProvided<\r\n PA,\r\n _ActionCreatorWithPreparedPayload,\r\n // else\r\n IsAny<\r\n P,\r\n ActionCreatorWithPayload,\r\n IsUnknownOrNonInferrable<\r\n P,\r\n ActionCreatorWithNonInferrablePayload,\r\n // else\r\n IfVoid<\r\n P,\r\n ActionCreatorWithoutPayload,\r\n // else\r\n IfMaybeUndefined<\r\n P,\r\n ActionCreatorWithOptionalPayload,\r\n // else\r\n ActionCreatorWithPayload\r\n >\r\n >\r\n >\r\n >\r\n>\r\n\r\n/**\r\n * A utility function to create an action creator for the given action type\r\n * string. The action creator accepts a single argument, which will be included\r\n * in the action object as a field called payload. The action creator function\r\n * will also have its toString() overriden so that it returns the action type,\r\n * allowing it to be used in reducer logic that is looking for that action type.\r\n *\r\n * @param type The action type to use for created actions.\r\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\r\n * If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\r\n *\r\n * @public\r\n */\r\nexport function createAction

(\r\n type: T\r\n): PayloadActionCreator\r\n\r\n/**\r\n * A utility function to create an action creator for the given action type\r\n * string. The action creator accepts a single argument, which will be included\r\n * in the action object as a field called payload. The action creator function\r\n * will also have its toString() overriden so that it returns the action type,\r\n * allowing it to be used in reducer logic that is looking for that action type.\r\n *\r\n * @param type The action type to use for created actions.\r\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\r\n * If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\r\n *\r\n * @public\r\n */\r\nexport function createAction<\r\n PA extends PrepareAction,\r\n T extends string = string\r\n>(\r\n type: T,\r\n prepareAction: PA\r\n): PayloadActionCreator['payload'], T, PA>\r\n\r\nexport function createAction(type: string, prepareAction?: Function): any {\r\n function actionCreator(...args: any[]) {\r\n if (prepareAction) {\r\n let prepared = prepareAction(...args)\r\n if (!prepared) {\r\n throw new Error('prepareAction did not return an object')\r\n }\r\n\r\n return {\r\n type,\r\n payload: prepared.payload,\r\n ...('meta' in prepared && { meta: prepared.meta }),\r\n ...('error' in prepared && { error: prepared.error }),\r\n }\r\n }\r\n return { type, payload: args[0] }\r\n }\r\n\r\n actionCreator.toString = () => `${type}`\r\n\r\n actionCreator.type = type\r\n\r\n actionCreator.match = (action: Action): action is PayloadAction =>\r\n action.type === type\r\n\r\n return actionCreator\r\n}\r\n\r\nexport function isFSA(action: unknown): action is {\r\n type: string\r\n payload?: unknown\r\n error?: unknown\r\n meta?: unknown\r\n} {\r\n return (\r\n isPlainObject(action) &&\r\n typeof (action as any).type === 'string' &&\r\n Object.keys(action).every(isValidKey)\r\n )\r\n}\r\n\r\nfunction isValidKey(key: string) {\r\n return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1\r\n}\r\n\r\n/**\r\n * Returns the action type of the actions created by the passed\r\n * `createAction()`-generated action creator (arbitrary action creators\r\n * are not supported).\r\n *\r\n * @param action The action creator whose action type to get.\r\n * @returns The action type used by the action creator.\r\n *\r\n * @public\r\n */\r\nexport function getType(\r\n actionCreator: PayloadActionCreator\r\n): T {\r\n return `${actionCreator}` as T\r\n}\r\n\r\n// helper types for more readable typings\r\n\r\ntype IfPrepareActionMethodProvided<\r\n PA extends PrepareAction | void,\r\n True,\r\n False\r\n> = PA extends (...args: any[]) => any ? True : False\r\n","import type { Action, AnyAction } from 'redux'\r\nimport type {\r\n CaseReducer,\r\n CaseReducers,\r\n ActionMatcherDescriptionCollection,\r\n} from './createReducer'\r\nimport type { TypeGuard } from './tsHelpers'\r\n\r\nexport interface TypedActionCreator {\r\n (...args: any[]): Action\r\n type: Type\r\n}\r\n\r\n/**\r\n * A builder for an action <-> reducer map.\r\n *\r\n * @public\r\n */\r\nexport interface ActionReducerMapBuilder {\r\n /**\r\n * Adds a case reducer to handle a single exact action type.\r\n * @remarks\r\n * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\r\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\r\n * @param reducer - The actual case reducer function.\r\n */\r\n addCase>(\r\n actionCreator: ActionCreator,\r\n reducer: CaseReducer>\r\n ): ActionReducerMapBuilder\r\n /**\r\n * Adds a case reducer to handle a single exact action type.\r\n * @remarks\r\n * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\r\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\r\n * @param reducer - The actual case reducer function.\r\n */\r\n addCase>(\r\n type: Type,\r\n reducer: CaseReducer\r\n ): ActionReducerMapBuilder\r\n\r\n /**\r\n * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.\r\n * @remarks\r\n * If multiple matcher reducers match, all of them will be executed in the order\r\n * they were defined in - even if a case reducer already matched.\r\n * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\r\n * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/advanced-types.html#using-type-predicates)\r\n * function\r\n * @param reducer - The actual case reducer function.\r\n *\r\n * @example\r\n```ts\r\nimport {\r\n createAction,\r\n createReducer,\r\n AsyncThunk,\r\n AnyAction,\r\n} from \"@reduxjs/toolkit\";\r\n\r\ntype GenericAsyncThunk = AsyncThunk;\r\n\r\ntype PendingAction = ReturnType;\r\ntype RejectedAction = ReturnType;\r\ntype FulfilledAction = ReturnType;\r\n\r\nconst initialState: Record = {};\r\nconst resetAction = createAction(\"reset-tracked-loading-state\");\r\n\r\nfunction isPendingAction(action: AnyAction): action is PendingAction {\r\n return action.type.endsWith(\"/pending\");\r\n}\r\n\r\nconst reducer = createReducer(initialState, (builder) => {\r\n builder\r\n .addCase(resetAction, () => initialState)\r\n // matcher can be defined outside as a type predicate function\r\n .addMatcher(isPendingAction, (state, action) => {\r\n state[action.meta.requestId] = \"pending\";\r\n })\r\n .addMatcher(\r\n // matcher can be defined inline as a type predicate function\r\n (action): action is RejectedAction => action.type.endsWith(\"/rejected\"),\r\n (state, action) => {\r\n state[action.meta.requestId] = \"rejected\";\r\n }\r\n )\r\n // matcher can just return boolean and the matcher can receive a generic argument\r\n .addMatcher(\r\n (action) => action.type.endsWith(\"/fulfilled\"),\r\n (state, action) => {\r\n state[action.meta.requestId] = \"fulfilled\";\r\n }\r\n );\r\n});\r\n```\r\n */\r\n addMatcher(\r\n matcher: TypeGuard | ((action: any) => boolean),\r\n reducer: CaseReducer\r\n ): Omit, 'addCase'>\r\n\r\n /**\r\n * Adds a \"default case\" reducer that is executed if no case reducer and no matcher\r\n * reducer was executed for this action.\r\n * @param reducer - The fallback \"default case\" reducer function.\r\n *\r\n * @example\r\n```ts\r\nimport { createReducer } from '@reduxjs/toolkit'\r\nconst initialState = { otherActions: 0 }\r\nconst reducer = createReducer(initialState, builder => {\r\n builder\r\n // .addCase(...)\r\n // .addMatcher(...)\r\n .addDefaultCase((state, action) => {\r\n state.otherActions++\r\n })\r\n})\r\n```\r\n */\r\n addDefaultCase(reducer: CaseReducer): {}\r\n}\r\n\r\nexport function executeReducerBuilderCallback(\r\n builderCallback: (builder: ActionReducerMapBuilder) => void\r\n): [\r\n CaseReducers,\r\n ActionMatcherDescriptionCollection,\r\n CaseReducer | undefined\r\n] {\r\n const actionsMap: CaseReducers = {}\r\n const actionMatchers: ActionMatcherDescriptionCollection = []\r\n let defaultCaseReducer: CaseReducer | undefined\r\n const builder = {\r\n addCase(\r\n typeOrActionCreator: string | TypedActionCreator,\r\n reducer: CaseReducer\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n /*\r\n to keep the definition by the user in line with actual behavior, \r\n we enforce `addCase` to always be called before calling `addMatcher`\r\n as matching cases take precedence over matchers\r\n */\r\n if (actionMatchers.length > 0) {\r\n throw new Error(\r\n '`builder.addCase` should only be called before calling `builder.addMatcher`'\r\n )\r\n }\r\n if (defaultCaseReducer) {\r\n throw new Error(\r\n '`builder.addCase` should only be called before calling `builder.addDefaultCase`'\r\n )\r\n }\r\n }\r\n const type =\r\n typeof typeOrActionCreator === 'string'\r\n ? typeOrActionCreator\r\n : typeOrActionCreator.type\r\n if (type in actionsMap) {\r\n throw new Error(\r\n 'addCase cannot be called with two reducers for the same action type'\r\n )\r\n }\r\n actionsMap[type] = reducer\r\n return builder\r\n },\r\n addMatcher(\r\n matcher: TypeGuard,\r\n reducer: CaseReducer\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (defaultCaseReducer) {\r\n throw new Error(\r\n '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`'\r\n )\r\n }\r\n }\r\n actionMatchers.push({ matcher, reducer })\r\n return builder\r\n },\r\n addDefaultCase(reducer: CaseReducer) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (defaultCaseReducer) {\r\n throw new Error('`builder.addDefaultCase` can only be called once')\r\n }\r\n }\r\n defaultCaseReducer = reducer\r\n return builder\r\n },\r\n }\r\n builderCallback(builder)\r\n return [actionsMap, actionMatchers, defaultCaseReducer]\r\n}\r\n","import type { Draft } from 'immer'\r\nimport createNextState, { isDraft, isDraftable } from 'immer'\r\nimport type { AnyAction, Action, Reducer } from 'redux'\r\nimport type { ActionReducerMapBuilder } from './mapBuilders'\r\nimport { executeReducerBuilderCallback } from './mapBuilders'\r\nimport type { NoInfer } from './tsHelpers'\r\nimport { freezeDraftable } from './utils'\r\n\r\n/**\r\n * Defines a mapping from action types to corresponding action object shapes.\r\n *\r\n * @deprecated This should not be used manually - it is only used for internal\r\n * inference purposes and should not have any further value.\r\n * It might be removed in the future.\r\n * @public\r\n */\r\nexport type Actions = Record\r\n\r\n/**\r\n * @deprecated use `TypeGuard` instead\r\n */\r\nexport interface ActionMatcher {\r\n (action: AnyAction): action is A\r\n}\r\n\r\nexport type ActionMatcherDescription = {\r\n matcher: ActionMatcher\r\n reducer: CaseReducer>\r\n}\r\n\r\nexport type ReadonlyActionMatcherDescriptionCollection = ReadonlyArray<\r\n ActionMatcherDescription\r\n>\r\n\r\nexport type ActionMatcherDescriptionCollection = Array<\r\n ActionMatcherDescription\r\n>\r\n\r\n/**\r\n * A *case reducer* is a reducer function for a specific action type. Case\r\n * reducers can be composed to full reducers using `createReducer()`.\r\n *\r\n * Unlike a normal Redux reducer, a case reducer is never called with an\r\n * `undefined` state to determine the initial state. Instead, the initial\r\n * state is explicitly specified as an argument to `createReducer()`.\r\n *\r\n * In addition, a case reducer can choose to mutate the passed-in `state`\r\n * value directly instead of returning a new state. This does not actually\r\n * cause the store state to be mutated directly; instead, thanks to\r\n * [immer](https://github.com/mweststrate/immer), the mutations are\r\n * translated to copy operations that result in a new state.\r\n *\r\n * @public\r\n */\r\nexport type CaseReducer = (\r\n state: Draft,\r\n action: A\r\n) => S | void | Draft\r\n\r\n/**\r\n * A mapping from action types to case reducers for `createReducer()`.\r\n *\r\n * @deprecated This should not be used manually - it is only used\r\n * for internal inference purposes and using it manually\r\n * would lead to type erasure.\r\n * It might be removed in the future.\r\n * @public\r\n */\r\nexport type CaseReducers = {\r\n [T in keyof AS]: AS[T] extends Action ? CaseReducer : void\r\n}\r\n\r\nexport type NotFunction = T extends Function ? never : T\r\n\r\nfunction isStateFunction(x: unknown): x is () => S {\r\n return typeof x === 'function'\r\n}\r\n\r\nexport type ReducerWithInitialState> = Reducer & {\r\n getInitialState: () => S\r\n}\r\n\r\n/**\r\n * A utility function that allows defining a reducer as a mapping from action\r\n * type to *case reducer* functions that handle these action types. The\r\n * reducer's initial state is passed as the first argument.\r\n *\r\n * @remarks\r\n * The body of every case reducer is implicitly wrapped with a call to\r\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\r\n * This means that rather than returning a new state object, you can also\r\n * mutate the passed-in state object directly; these mutations will then be\r\n * automatically and efficiently translated into copies, giving you both\r\n * convenience and immutability.\r\n *\r\n * @overloadSummary\r\n * This overload accepts a callback function that receives a `builder` object as its argument.\r\n * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be\r\n * called to define what actions this reducer will handle.\r\n *\r\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\r\n * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define\r\n * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\r\n * @example\r\n```ts\r\nimport {\r\n createAction,\r\n createReducer,\r\n AnyAction,\r\n PayloadAction,\r\n} from \"@reduxjs/toolkit\";\r\n\r\nconst increment = createAction(\"increment\");\r\nconst decrement = createAction(\"decrement\");\r\n\r\nfunction isActionWithNumberPayload(\r\n action: AnyAction\r\n): action is PayloadAction {\r\n return typeof action.payload === \"number\";\r\n}\r\n\r\nconst reducer = createReducer(\r\n {\r\n counter: 0,\r\n sumOfNumberPayloads: 0,\r\n unhandledActions: 0,\r\n },\r\n (builder) => {\r\n builder\r\n .addCase(increment, (state, action) => {\r\n // action is inferred correctly here\r\n state.counter += action.payload;\r\n })\r\n // You can chain calls, or have separate `builder.addCase()` lines each time\r\n .addCase(decrement, (state, action) => {\r\n state.counter -= action.payload;\r\n })\r\n // You can apply a \"matcher function\" to incoming actions\r\n .addMatcher(isActionWithNumberPayload, (state, action) => {})\r\n // and provide a default case if no other handlers matched\r\n .addDefaultCase((state, action) => {});\r\n }\r\n);\r\n```\r\n * @public\r\n */\r\nexport function createReducer>(\r\n initialState: S | (() => S),\r\n builderCallback: (builder: ActionReducerMapBuilder) => void\r\n): ReducerWithInitialState\r\n\r\n/**\r\n * A utility function that allows defining a reducer as a mapping from action\r\n * type to *case reducer* functions that handle these action types. The\r\n * reducer's initial state is passed as the first argument.\r\n *\r\n * The body of every case reducer is implicitly wrapped with a call to\r\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\r\n * This means that rather than returning a new state object, you can also\r\n * mutate the passed-in state object directly; these mutations will then be\r\n * automatically and efficiently translated into copies, giving you both\r\n * convenience and immutability.\r\n * \r\n * @overloadSummary\r\n * This overload accepts an object where the keys are string action types, and the values\r\n * are case reducer functions to handle those action types.\r\n *\r\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\r\n * @param actionsMap - An object mapping from action types to _case reducers_, each of which handles one specific action type.\r\n * @param actionMatchers - An array of matcher definitions in the form `{matcher, reducer}`.\r\n * All matching reducers will be executed in order, independently if a case reducer matched or not.\r\n * @param defaultCaseReducer - A \"default case\" reducer that is executed if no case reducer and no matcher\r\n * reducer was executed for this action.\r\n *\r\n * @example\r\n```js\r\nconst counterReducer = createReducer(0, {\r\n increment: (state, action) => state + action.payload,\r\n decrement: (state, action) => state - action.payload\r\n})\r\n\r\n// Alternately, use a \"lazy initializer\" to provide the initial state\r\n// (works with either form of createReducer)\r\nconst initialState = () => 0\r\nconst counterReducer = createReducer(initialState, {\r\n increment: (state, action) => state + action.payload,\r\n decrement: (state, action) => state - action.payload\r\n})\r\n```\r\n \r\n * Action creators that were generated using [`createAction`](./createAction) may be used directly as the keys here, using computed property syntax:\r\n\r\n```js\r\nconst increment = createAction('increment')\r\nconst decrement = createAction('decrement')\r\n\r\nconst counterReducer = createReducer(0, {\r\n [increment]: (state, action) => state + action.payload,\r\n [decrement.type]: (state, action) => state - action.payload\r\n})\r\n```\r\n * @public\r\n */\r\nexport function createReducer<\r\n S extends NotFunction,\r\n CR extends CaseReducers = CaseReducers\r\n>(\r\n initialState: S | (() => S),\r\n actionsMap: CR,\r\n actionMatchers?: ActionMatcherDescriptionCollection,\r\n defaultCaseReducer?: CaseReducer\r\n): ReducerWithInitialState\r\n\r\nexport function createReducer>(\r\n initialState: S | (() => S),\r\n mapOrBuilderCallback:\r\n | CaseReducers\r\n | ((builder: ActionReducerMapBuilder) => void),\r\n actionMatchers: ReadonlyActionMatcherDescriptionCollection = [],\r\n defaultCaseReducer?: CaseReducer\r\n): ReducerWithInitialState {\r\n let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] =\r\n typeof mapOrBuilderCallback === 'function'\r\n ? executeReducerBuilderCallback(mapOrBuilderCallback)\r\n : [mapOrBuilderCallback, actionMatchers, defaultCaseReducer]\r\n\r\n // Ensure the initial state gets frozen either way (if draftable)\r\n let getInitialState: () => S\r\n if (isStateFunction(initialState)) {\r\n getInitialState = () => freezeDraftable(initialState())\r\n } else {\r\n const frozenInitialState = freezeDraftable(initialState)\r\n getInitialState = () => frozenInitialState\r\n }\r\n\r\n function reducer(state = getInitialState(), action: any): S {\r\n let caseReducers = [\r\n actionsMap[action.type],\r\n ...finalActionMatchers\r\n .filter(({ matcher }) => matcher(action))\r\n .map(({ reducer }) => reducer),\r\n ]\r\n if (caseReducers.filter((cr) => !!cr).length === 0) {\r\n caseReducers = [finalDefaultCaseReducer]\r\n }\r\n\r\n return caseReducers.reduce((previousState, caseReducer): S => {\r\n if (caseReducer) {\r\n if (isDraft(previousState)) {\r\n // If it's already a draft, we must already be inside a `createNextState` call,\r\n // likely because this is being wrapped in `createReducer`, `createSlice`, or nested\r\n // inside an existing draft. It's safe to just pass the draft to the mutator.\r\n const draft = previousState as Draft // We can assume this is already a draft\r\n const result = caseReducer(draft, action)\r\n\r\n if (typeof result === 'undefined') {\r\n return previousState\r\n }\r\n\r\n return result as S\r\n } else if (!isDraftable(previousState)) {\r\n // If state is not draftable (ex: a primitive, such as 0), we want to directly\r\n // return the caseReducer func and not wrap it with produce.\r\n const result = caseReducer(previousState as any, action)\r\n\r\n if (typeof result === 'undefined') {\r\n if (previousState === null) {\r\n return previousState\r\n }\r\n throw Error(\r\n 'A case reducer on a non-draftable value must not return undefined'\r\n )\r\n }\r\n\r\n return result as S\r\n } else {\r\n // @ts-ignore createNextState() produces an Immutable> rather\r\n // than an Immutable, and TypeScript cannot find out how to reconcile\r\n // these two types.\r\n return createNextState(previousState, (draft: Draft) => {\r\n return caseReducer(draft, action)\r\n })\r\n }\r\n }\r\n\r\n return previousState\r\n }, state)\r\n }\r\n\r\n reducer.getInitialState = getInitialState\r\n\r\n return reducer as ReducerWithInitialState\r\n}\r\n","import type { AnyAction, Reducer } from 'redux'\r\nimport { createNextState } from '.'\r\nimport type {\r\n ActionCreatorWithoutPayload,\r\n PayloadAction,\r\n PayloadActionCreator,\r\n PrepareAction,\r\n _ActionCreatorWithPreparedPayload,\r\n} from './createAction'\r\nimport { createAction } from './createAction'\r\nimport type {\r\n CaseReducer,\r\n CaseReducers,\r\n ReducerWithInitialState,\r\n} from './createReducer'\r\nimport { createReducer, NotFunction } from './createReducer'\r\nimport type { ActionReducerMapBuilder } from './mapBuilders'\r\nimport { executeReducerBuilderCallback } from './mapBuilders'\r\nimport type { NoInfer } from './tsHelpers'\r\nimport { freezeDraftable } from './utils'\r\n\r\n/**\r\n * An action creator attached to a slice.\r\n *\r\n * @deprecated please use PayloadActionCreator directly\r\n *\r\n * @public\r\n */\r\nexport type SliceActionCreator

= PayloadActionCreator

\r\n\r\n/**\r\n * The return value of `createSlice`\r\n *\r\n * @public\r\n */\r\nexport interface Slice<\r\n State = any,\r\n CaseReducers extends SliceCaseReducers = SliceCaseReducers,\r\n Name extends string = string\r\n> {\r\n /**\r\n * The slice name.\r\n */\r\n name: Name\r\n\r\n /**\r\n * The slice's reducer.\r\n */\r\n reducer: Reducer\r\n\r\n /**\r\n * Action creators for the types of actions that are handled by the slice\r\n * reducer.\r\n */\r\n actions: CaseReducerActions\r\n\r\n /**\r\n * The individual case reducer functions that were passed in the `reducers` parameter.\r\n * This enables reuse and testing if they were defined inline when calling `createSlice`.\r\n */\r\n caseReducers: SliceDefinedCaseReducers\r\n\r\n /**\r\n * Provides access to the initial state value given to the slice.\r\n * If a lazy state initializer was provided, it will be called and a fresh value returned.\r\n */\r\n getInitialState: () => State\r\n}\r\n\r\n/**\r\n * Options for `createSlice()`.\r\n *\r\n * @public\r\n */\r\nexport interface CreateSliceOptions<\r\n State = any,\r\n CR extends SliceCaseReducers = SliceCaseReducers,\r\n Name extends string = string\r\n> {\r\n /**\r\n * The slice's name. Used to namespace the generated action types.\r\n */\r\n name: Name\r\n\r\n /**\r\n * The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\r\n */\r\n initialState: State | (() => State)\r\n\r\n /**\r\n * A mapping from action types to action-type-specific *case reducer*\r\n * functions. For every action type, a matching action creator will be\r\n * generated using `createAction()`.\r\n */\r\n reducers: ValidateSliceCaseReducers\r\n\r\n /**\r\n * A callback that receives a *builder* object to define\r\n * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\r\n * \r\n * Alternatively, a mapping from action types to action-type-specific *case reducer*\r\n * functions. These reducers should have existing action types used\r\n * as the keys, and action creators will _not_ be generated.\r\n * \r\n * @example\r\n```ts\r\nimport { createAction, createSlice, Action, AnyAction } from '@reduxjs/toolkit'\r\nconst incrementBy = createAction('incrementBy')\r\nconst decrement = createAction('decrement')\r\n\r\ninterface RejectedAction extends Action {\r\n error: Error\r\n}\r\n\r\nfunction isRejectedAction(action: AnyAction): action is RejectedAction {\r\n return action.type.endsWith('rejected')\r\n}\r\n\r\ncreateSlice({\r\n name: 'counter',\r\n initialState: 0,\r\n reducers: {},\r\n extraReducers: builder => {\r\n builder\r\n .addCase(incrementBy, (state, action) => {\r\n // action is inferred correctly here if using TS\r\n })\r\n // You can chain calls, or have separate `builder.addCase()` lines each time\r\n .addCase(decrement, (state, action) => {})\r\n // You can match a range of action types\r\n .addMatcher(\r\n isRejectedAction,\r\n // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard\r\n (state, action) => {}\r\n )\r\n // and provide a default case if no other handlers matched\r\n .addDefaultCase((state, action) => {})\r\n }\r\n})\r\n```\r\n */\r\n extraReducers?:\r\n | CaseReducers, any>\r\n | ((builder: ActionReducerMapBuilder>) => void)\r\n}\r\n\r\n/**\r\n * A CaseReducer with a `prepare` method.\r\n *\r\n * @public\r\n */\r\nexport type CaseReducerWithPrepare = {\r\n reducer: CaseReducer\r\n prepare: PrepareAction\r\n}\r\n\r\n/**\r\n * The type describing a slice's `reducers` option.\r\n *\r\n * @public\r\n */\r\nexport type SliceCaseReducers = {\r\n [K: string]:\r\n | CaseReducer>\r\n | CaseReducerWithPrepare>\r\n}\r\n\r\n/**\r\n * Derives the slice's `actions` property from the `reducers` options\r\n *\r\n * @public\r\n */\r\nexport type CaseReducerActions> = {\r\n [Type in keyof CaseReducers]: CaseReducers[Type] extends { prepare: any }\r\n ? ActionCreatorForCaseReducerWithPrepare\r\n : ActionCreatorForCaseReducer\r\n}\r\n\r\n/**\r\n * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`\r\n *\r\n * @internal\r\n */\r\ntype ActionCreatorForCaseReducerWithPrepare =\r\n _ActionCreatorWithPreparedPayload\r\n\r\n/**\r\n * Get a `PayloadActionCreator` type for a passed `CaseReducer`\r\n *\r\n * @internal\r\n */\r\ntype ActionCreatorForCaseReducer = CR extends (\r\n state: any,\r\n action: infer Action\r\n) => any\r\n ? Action extends { payload: infer P }\r\n ? PayloadActionCreator

\r\n : ActionCreatorWithoutPayload\r\n : ActionCreatorWithoutPayload\r\n\r\n/**\r\n * Extracts the CaseReducers out of a `reducers` object, even if they are\r\n * tested into a `CaseReducerWithPrepare`.\r\n *\r\n * @internal\r\n */\r\ntype SliceDefinedCaseReducers> = {\r\n [Type in keyof CaseReducers]: CaseReducers[Type] extends {\r\n reducer: infer Reducer\r\n }\r\n ? Reducer\r\n : CaseReducers[Type]\r\n}\r\n\r\n/**\r\n * Used on a SliceCaseReducers object.\r\n * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that\r\n * the `reducer` and the `prepare` function use the same type of `payload`.\r\n *\r\n * Might do additional such checks in the future.\r\n *\r\n * This type is only ever useful if you want to write your own wrapper around\r\n * `createSlice`. Please don't use it otherwise!\r\n *\r\n * @public\r\n */\r\nexport type ValidateSliceCaseReducers<\r\n S,\r\n ACR extends SliceCaseReducers\r\n> = ACR & {\r\n [T in keyof ACR]: ACR[T] extends {\r\n reducer(s: S, action?: infer A): any\r\n }\r\n ? {\r\n prepare(...a: never[]): Omit\r\n }\r\n : {}\r\n}\r\n\r\nfunction getType(slice: string, actionKey: string): string {\r\n return `${slice}/${actionKey}`\r\n}\r\n\r\n/**\r\n * A function that accepts an initial state, an object full of reducer\r\n * functions, and a \"slice name\", and automatically generates\r\n * action creators and action types that correspond to the\r\n * reducers and state.\r\n *\r\n * The `reducer` argument is passed to `createReducer()`.\r\n *\r\n * @public\r\n */\r\nexport function createSlice<\r\n State,\r\n CaseReducers extends SliceCaseReducers,\r\n Name extends string = string\r\n>(\r\n options: CreateSliceOptions\r\n): Slice {\r\n const { name } = options\r\n if (!name) {\r\n throw new Error('`name` is a required option for createSlice')\r\n }\r\n\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'development'\r\n ) {\r\n if(options.initialState === undefined) {\r\n console.error('You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`')\r\n }\r\n }\r\n\r\n const initialState =\r\n typeof options.initialState == 'function'\r\n ? options.initialState\r\n : freezeDraftable(options.initialState)\r\n\r\n const reducers = options.reducers || {}\r\n\r\n const reducerNames = Object.keys(reducers)\r\n\r\n const sliceCaseReducersByName: Record = {}\r\n const sliceCaseReducersByType: Record = {}\r\n const actionCreators: Record = {}\r\n\r\n reducerNames.forEach((reducerName) => {\r\n const maybeReducerWithPrepare = reducers[reducerName]\r\n const type = getType(name, reducerName)\r\n\r\n let caseReducer: CaseReducer\r\n let prepareCallback: PrepareAction | undefined\r\n\r\n if ('reducer' in maybeReducerWithPrepare) {\r\n caseReducer = maybeReducerWithPrepare.reducer\r\n prepareCallback = maybeReducerWithPrepare.prepare\r\n } else {\r\n caseReducer = maybeReducerWithPrepare\r\n }\r\n\r\n sliceCaseReducersByName[reducerName] = caseReducer\r\n sliceCaseReducersByType[type] = caseReducer\r\n actionCreators[reducerName] = prepareCallback\r\n ? createAction(type, prepareCallback)\r\n : createAction(type)\r\n })\r\n\r\n function buildReducer() {\r\n const [\r\n extraReducers = {},\r\n actionMatchers = [],\r\n defaultCaseReducer = undefined,\r\n ] =\r\n typeof options.extraReducers === 'function'\r\n ? executeReducerBuilderCallback(options.extraReducers)\r\n : [options.extraReducers]\r\n\r\n const finalCaseReducers = { ...extraReducers, ...sliceCaseReducersByType }\r\n return createReducer(\r\n initialState,\r\n finalCaseReducers as any,\r\n actionMatchers,\r\n defaultCaseReducer\r\n )\r\n }\r\n\r\n let _reducer: ReducerWithInitialState\r\n\r\n return {\r\n name,\r\n reducer(state, action) {\r\n if (!_reducer) _reducer = buildReducer()\r\n\r\n return _reducer(state, action)\r\n },\r\n actions: actionCreators as any,\r\n caseReducers: sliceCaseReducersByName as any,\r\n getInitialState() {\r\n if (!_reducer) _reducer = buildReducer()\r\n\r\n return _reducer.getInitialState()\r\n },\r\n }\r\n}\r\n","import createNextState, { isDraft } from 'immer'\r\nimport type { EntityState, PreventAny } from './models'\r\nimport type { PayloadAction } from '../createAction'\r\nimport { isFSA } from '../createAction'\r\nimport { IsAny } from '../tsHelpers'\r\n\r\nexport function createSingleArgumentStateOperator(\r\n mutator: (state: EntityState) => void\r\n) {\r\n const operator = createStateOperator((_: undefined, state: EntityState) =>\r\n mutator(state)\r\n )\r\n\r\n return function operation>(\r\n state: PreventAny\r\n ): S {\r\n return operator(state as S, undefined)\r\n }\r\n}\r\n\r\nexport function createStateOperator(\r\n mutator: (arg: R, state: EntityState) => void\r\n) {\r\n return function operation>(\r\n state: S,\r\n arg: R | PayloadAction\r\n ): S {\r\n function isPayloadActionArgument(\r\n arg: R | PayloadAction\r\n ): arg is PayloadAction {\r\n return isFSA(arg)\r\n }\r\n\r\n const runMutator = (draft: EntityState) => {\r\n if (isPayloadActionArgument(arg)) {\r\n mutator(arg.payload, draft)\r\n } else {\r\n mutator(arg, draft)\r\n }\r\n }\r\n\r\n if (isDraft(state)) {\r\n // we must already be inside a `createNextState` call, likely because\r\n // this is being wrapped in `createReducer` or `createSlice`.\r\n // It's safe to just pass the draft to the mutator.\r\n runMutator(state)\r\n\r\n // since it's a draft, we'll just return it\r\n return state\r\n } else {\r\n // @ts-ignore createNextState() produces an Immutable> rather\r\n // than an Immutable, and TypeScript cannot find out how to reconcile\r\n // these two types.\r\n return createNextState(state, runMutator)\r\n }\r\n }\r\n}\r\n","import type { EntityState, IdSelector, Update, EntityId } from './models'\r\n\r\nexport function selectIdValue(entity: T, selectId: IdSelector) {\r\n const key = selectId(entity)\r\n\r\n if (process.env.NODE_ENV !== 'production' && key === undefined) {\r\n console.warn(\r\n 'The entity passed to the `selectId` implementation returned undefined.',\r\n 'You should probably provide your own `selectId` implementation.',\r\n 'The entity that was passed:',\r\n entity,\r\n 'The `selectId` implementation:',\r\n selectId.toString()\r\n )\r\n }\r\n\r\n return key\r\n}\r\n\r\nexport function ensureEntitiesArray(\r\n entities: readonly T[] | Record\r\n): readonly T[] {\r\n if (!Array.isArray(entities)) {\r\n entities = Object.values(entities)\r\n }\r\n\r\n return entities\r\n}\r\n\r\nexport function splitAddedUpdatedEntities(\r\n newEntities: readonly T[] | Record,\r\n selectId: IdSelector,\r\n state: EntityState\r\n): [T[], Update[]] {\r\n newEntities = ensureEntitiesArray(newEntities)\r\n\r\n const added: T[] = []\r\n const updated: Update[] = []\r\n\r\n for (const entity of newEntities) {\r\n const id = selectIdValue(entity, selectId)\r\n if (id in state.entities) {\r\n updated.push({ id, changes: entity })\r\n } else {\r\n added.push(entity)\r\n }\r\n }\r\n return [added, updated]\r\n}\r\n","import type {\r\n EntityState,\r\n EntityStateAdapter,\r\n IdSelector,\r\n Update,\r\n EntityId,\r\n} from './models'\r\nimport {\r\n createStateOperator,\r\n createSingleArgumentStateOperator,\r\n} from './state_adapter'\r\nimport {\r\n selectIdValue,\r\n ensureEntitiesArray,\r\n splitAddedUpdatedEntities,\r\n} from './utils'\r\n\r\nexport function createUnsortedStateAdapter(\r\n selectId: IdSelector\r\n): EntityStateAdapter {\r\n type R = EntityState\r\n\r\n function addOneMutably(entity: T, state: R): void {\r\n const key = selectIdValue(entity, selectId)\r\n\r\n if (key in state.entities) {\r\n return\r\n }\r\n\r\n state.ids.push(key)\r\n state.entities[key] = entity\r\n }\r\n\r\n function addManyMutably(\r\n newEntities: readonly T[] | Record,\r\n state: R\r\n ): void {\r\n newEntities = ensureEntitiesArray(newEntities)\r\n\r\n for (const entity of newEntities) {\r\n addOneMutably(entity, state)\r\n }\r\n }\r\n\r\n function setOneMutably(entity: T, state: R): void {\r\n const key = selectIdValue(entity, selectId)\r\n if (!(key in state.entities)) {\r\n state.ids.push(key)\r\n }\r\n state.entities[key] = entity\r\n }\r\n\r\n function setManyMutably(\r\n newEntities: readonly T[] | Record,\r\n state: R\r\n ): void {\r\n newEntities = ensureEntitiesArray(newEntities)\r\n for (const entity of newEntities) {\r\n setOneMutably(entity, state)\r\n }\r\n }\r\n\r\n function setAllMutably(\r\n newEntities: readonly T[] | Record,\r\n state: R\r\n ): void {\r\n newEntities = ensureEntitiesArray(newEntities)\r\n\r\n state.ids = []\r\n state.entities = {}\r\n\r\n addManyMutably(newEntities, state)\r\n }\r\n\r\n function removeOneMutably(key: EntityId, state: R): void {\r\n return removeManyMutably([key], state)\r\n }\r\n\r\n function removeManyMutably(keys: readonly EntityId[], state: R): void {\r\n let didMutate = false\r\n\r\n keys.forEach((key) => {\r\n if (key in state.entities) {\r\n delete state.entities[key]\r\n didMutate = true\r\n }\r\n })\r\n\r\n if (didMutate) {\r\n state.ids = state.ids.filter((id) => id in state.entities)\r\n }\r\n }\r\n\r\n function removeAllMutably(state: R): void {\r\n Object.assign(state, {\r\n ids: [],\r\n entities: {},\r\n })\r\n }\r\n\r\n function takeNewKey(\r\n keys: { [id: string]: EntityId },\r\n update: Update,\r\n state: R\r\n ): boolean {\r\n const original = state.entities[update.id]\r\n const updated: T = Object.assign({}, original, update.changes)\r\n const newKey = selectIdValue(updated, selectId)\r\n const hasNewKey = newKey !== update.id\r\n\r\n if (hasNewKey) {\r\n keys[update.id] = newKey\r\n delete state.entities[update.id]\r\n }\r\n\r\n state.entities[newKey] = updated\r\n\r\n return hasNewKey\r\n }\r\n\r\n function updateOneMutably(update: Update, state: R): void {\r\n return updateManyMutably([update], state)\r\n }\r\n\r\n function updateManyMutably(\r\n updates: ReadonlyArray>,\r\n state: R\r\n ): void {\r\n const newKeys: { [id: string]: EntityId } = {}\r\n\r\n const updatesPerEntity: { [id: string]: Update } = {}\r\n\r\n updates.forEach((update) => {\r\n // Only apply updates to entities that currently exist\r\n if (update.id in state.entities) {\r\n // If there are multiple updates to one entity, merge them together\r\n updatesPerEntity[update.id] = {\r\n id: update.id,\r\n // Spreads ignore falsy values, so this works even if there isn't\r\n // an existing update already at this key\r\n changes: {\r\n ...(updatesPerEntity[update.id]\r\n ? updatesPerEntity[update.id].changes\r\n : null),\r\n ...update.changes,\r\n },\r\n }\r\n }\r\n })\r\n\r\n updates = Object.values(updatesPerEntity)\r\n\r\n const didMutateEntities = updates.length > 0\r\n\r\n if (didMutateEntities) {\r\n const didMutateIds =\r\n updates.filter((update) => takeNewKey(newKeys, update, state)).length >\r\n 0\r\n\r\n if (didMutateIds) {\r\n state.ids = Object.keys(state.entities)\r\n }\r\n }\r\n }\r\n\r\n function upsertOneMutably(entity: T, state: R): void {\r\n return upsertManyMutably([entity], state)\r\n }\r\n\r\n function upsertManyMutably(\r\n newEntities: readonly T[] | Record,\r\n state: R\r\n ): void {\r\n const [added, updated] = splitAddedUpdatedEntities(\r\n newEntities,\r\n selectId,\r\n state\r\n )\r\n\r\n updateManyMutably(updated, state)\r\n addManyMutably(added, state)\r\n }\r\n\r\n return {\r\n removeAll: createSingleArgumentStateOperator(removeAllMutably),\r\n addOne: createStateOperator(addOneMutably),\r\n addMany: createStateOperator(addManyMutably),\r\n setOne: createStateOperator(setOneMutably),\r\n setMany: createStateOperator(setManyMutably),\r\n setAll: createStateOperator(setAllMutably),\r\n updateOne: createStateOperator(updateOneMutably),\r\n updateMany: createStateOperator(updateManyMutably),\r\n upsertOne: createStateOperator(upsertOneMutably),\r\n upsertMany: createStateOperator(upsertManyMutably),\r\n removeOne: createStateOperator(removeOneMutably),\r\n removeMany: createStateOperator(removeManyMutably),\r\n }\r\n}\r\n","import type {\r\n EntityDefinition,\r\n Comparer,\r\n IdSelector,\r\n EntityAdapter,\r\n} from './models'\r\nimport { createInitialStateFactory } from './entity_state'\r\nimport { createSelectorsFactory } from './state_selectors'\r\nimport { createSortedStateAdapter } from './sorted_state_adapter'\r\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter'\r\n\r\n/**\r\n *\r\n * @param options\r\n *\r\n * @public\r\n */\r\nexport function createEntityAdapter(\r\n options: {\r\n selectId?: IdSelector\r\n sortComparer?: false | Comparer\r\n } = {}\r\n): EntityAdapter {\r\n const { selectId, sortComparer }: EntityDefinition = {\r\n sortComparer: false,\r\n selectId: (instance: any) => instance.id,\r\n ...options,\r\n }\r\n\r\n const stateFactory = createInitialStateFactory()\r\n const selectorsFactory = createSelectorsFactory()\r\n const stateAdapter = sortComparer\r\n ? createSortedStateAdapter(selectId, sortComparer)\r\n : createUnsortedStateAdapter(selectId)\r\n\r\n return {\r\n selectId,\r\n sortComparer,\r\n ...stateFactory,\r\n ...selectorsFactory,\r\n ...stateAdapter,\r\n }\r\n}\r\n","import type { EntityState } from './models'\r\n\r\nexport function getInitialEntityState(): EntityState {\r\n return {\r\n ids: [],\r\n entities: {},\r\n }\r\n}\r\n\r\nexport function createInitialStateFactory() {\r\n function getInitialState(): EntityState\r\n function getInitialState(\r\n additionalState: S\r\n ): EntityState & S\r\n function getInitialState(additionalState: any = {}): any {\r\n return Object.assign(getInitialEntityState(), additionalState)\r\n }\r\n\r\n return { getInitialState }\r\n}\r\n","import type { Selector } from 'reselect'\r\nimport { createDraftSafeSelector } from '../createDraftSafeSelector'\r\nimport type {\r\n EntityState,\r\n EntitySelectors,\r\n Dictionary,\r\n EntityId,\r\n} from './models'\r\n\r\nexport function createSelectorsFactory() {\r\n function getSelectors(): EntitySelectors>\r\n function getSelectors(\r\n selectState: (state: V) => EntityState\r\n ): EntitySelectors\r\n function getSelectors(\r\n selectState?: (state: V) => EntityState\r\n ): EntitySelectors {\r\n const selectIds = (state: EntityState) => state.ids\r\n\r\n const selectEntities = (state: EntityState) => state.entities\r\n\r\n const selectAll = createDraftSafeSelector(\r\n selectIds,\r\n selectEntities,\r\n (ids, entities): T[] => ids.map((id) => entities[id]!)\r\n )\r\n\r\n const selectId = (_: unknown, id: EntityId) => id\r\n\r\n const selectById = (entities: Dictionary, id: EntityId) => entities[id]\r\n\r\n const selectTotal = createDraftSafeSelector(selectIds, (ids) => ids.length)\r\n\r\n if (!selectState) {\r\n return {\r\n selectIds,\r\n selectEntities,\r\n selectAll,\r\n selectTotal,\r\n selectById: createDraftSafeSelector(\r\n selectEntities,\r\n selectId,\r\n selectById\r\n ),\r\n }\r\n }\r\n\r\n const selectGlobalizedEntities = createDraftSafeSelector(\r\n selectState as Selector>,\r\n selectEntities\r\n )\r\n\r\n return {\r\n selectIds: createDraftSafeSelector(selectState, selectIds),\r\n selectEntities: selectGlobalizedEntities,\r\n selectAll: createDraftSafeSelector(selectState, selectAll),\r\n selectTotal: createDraftSafeSelector(selectState, selectTotal),\r\n selectById: createDraftSafeSelector(\r\n selectGlobalizedEntities,\r\n selectId,\r\n selectById\r\n ),\r\n }\r\n }\r\n\r\n return { getSelectors }\r\n}\r\n","import type {\r\n EntityState,\r\n IdSelector,\r\n Comparer,\r\n EntityStateAdapter,\r\n Update,\r\n EntityId,\r\n} from './models'\r\nimport { createStateOperator } from './state_adapter'\r\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter'\r\nimport {\r\n selectIdValue,\r\n ensureEntitiesArray,\r\n splitAddedUpdatedEntities,\r\n} from './utils'\r\n\r\nexport function createSortedStateAdapter(\r\n selectId: IdSelector,\r\n sort: Comparer\r\n): EntityStateAdapter {\r\n type R = EntityState\r\n\r\n const { removeOne, removeMany, removeAll } =\r\n createUnsortedStateAdapter(selectId)\r\n\r\n function addOneMutably(entity: T, state: R): void {\r\n return addManyMutably([entity], state)\r\n }\r\n\r\n function addManyMutably(\r\n newEntities: readonly T[] | Record,\r\n state: R\r\n ): void {\r\n newEntities = ensureEntitiesArray(newEntities)\r\n\r\n const models = newEntities.filter(\r\n (model) => !(selectIdValue(model, selectId) in state.entities)\r\n )\r\n\r\n if (models.length !== 0) {\r\n merge(models, state)\r\n }\r\n }\r\n\r\n function setOneMutably(entity: T, state: R): void {\r\n return setManyMutably([entity], state)\r\n }\r\n\r\n function setManyMutably(\r\n newEntities: readonly T[] | Record,\r\n state: R\r\n ): void {\r\n newEntities = ensureEntitiesArray(newEntities)\r\n if (newEntities.length !== 0) {\r\n merge(newEntities, state)\r\n }\r\n }\r\n\r\n function setAllMutably(\r\n newEntities: readonly T[] | Record,\r\n state: R\r\n ): void {\r\n newEntities = ensureEntitiesArray(newEntities)\r\n state.entities = {}\r\n state.ids = []\r\n\r\n addManyMutably(newEntities, state)\r\n }\r\n\r\n function updateOneMutably(update: Update, state: R): void {\r\n return updateManyMutably([update], state)\r\n }\r\n\r\n function updateManyMutably(\r\n updates: ReadonlyArray>,\r\n state: R\r\n ): void {\r\n let appliedUpdates = false\r\n\r\n for (let update of updates) {\r\n const entity = state.entities[update.id]\r\n if (!entity) {\r\n continue\r\n }\r\n\r\n appliedUpdates = true\r\n\r\n Object.assign(entity, update.changes)\r\n const newId = selectId(entity)\r\n if (update.id !== newId) {\r\n delete state.entities[update.id]\r\n state.entities[newId] = entity\r\n }\r\n }\r\n\r\n if (appliedUpdates) {\r\n resortEntities(state)\r\n }\r\n }\r\n\r\n function upsertOneMutably(entity: T, state: R): void {\r\n return upsertManyMutably([entity], state)\r\n }\r\n\r\n function upsertManyMutably(\r\n newEntities: readonly T[] | Record,\r\n state: R\r\n ): void {\r\n const [added, updated] = splitAddedUpdatedEntities(\r\n newEntities,\r\n selectId,\r\n state\r\n )\r\n\r\n updateManyMutably(updated, state)\r\n addManyMutably(added, state)\r\n }\r\n\r\n function areArraysEqual(a: readonly unknown[], b: readonly unknown[]) {\r\n if (a.length !== b.length) {\r\n return false\r\n }\r\n\r\n for (let i = 0; i < a.length && i < b.length; i++) {\r\n if (a[i] === b[i]) {\r\n continue\r\n }\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n function merge(models: readonly T[], state: R): void {\r\n // Insert/overwrite all new/updated\r\n models.forEach((model) => {\r\n state.entities[selectId(model)] = model\r\n })\r\n\r\n resortEntities(state)\r\n }\r\n\r\n function resortEntities(state: R) {\r\n const allEntities = Object.values(state.entities) as T[]\r\n allEntities.sort(sort)\r\n\r\n const newSortedIds = allEntities.map(selectId)\r\n const { ids } = state\r\n\r\n if (!areArraysEqual(ids, newSortedIds)) {\r\n state.ids = newSortedIds\r\n }\r\n }\r\n\r\n return {\r\n removeOne,\r\n removeMany,\r\n removeAll,\r\n addOne: createStateOperator(addOneMutably),\r\n updateOne: createStateOperator(updateOneMutably),\r\n upsertOne: createStateOperator(upsertOneMutably),\r\n setOne: createStateOperator(setOneMutably),\r\n setMany: createStateOperator(setManyMutably),\r\n setAll: createStateOperator(setAllMutably),\r\n addMany: createStateOperator(addManyMutably),\r\n updateMany: createStateOperator(updateManyMutably),\r\n upsertMany: createStateOperator(upsertManyMutably),\r\n }\r\n}\r\n","// Borrowed from https://github.com/ai/nanoid/blob/3.0.2/non-secure/index.js\r\n// This alphabet uses `A-Za-z0-9_-` symbols. A genetic algorithm helped\r\n// optimize the gzip compression for this alphabet.\r\nlet urlAlphabet =\r\n 'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW'\r\n\r\n/**\r\n *\r\n * @public\r\n */\r\nexport let nanoid = (size = 21) => {\r\n let id = ''\r\n // A compact alternative for `for (var i = 0; i < step; i++)`.\r\n let i = size\r\n while (i--) {\r\n // `| 0` is more compact and faster than `Math.floor()`.\r\n id += urlAlphabet[(Math.random() * 64) | 0]\r\n }\r\n return id\r\n}\r\n","import type { Dispatch, AnyAction } from 'redux'\r\nimport type {\r\n PayloadAction,\r\n ActionCreatorWithPreparedPayload,\r\n} from './createAction'\r\nimport { createAction } from './createAction'\r\nimport type { ThunkDispatch } from 'redux-thunk'\r\nimport type { FallbackIfUnknown, IsAny, IsUnknown } from './tsHelpers'\r\nimport { nanoid } from './nanoid'\r\n\r\n// @ts-ignore we need the import of these types due to a bundling issue.\r\ntype _Keep = PayloadAction | ActionCreatorWithPreparedPayload\r\n\r\nexport type BaseThunkAPI<\r\n S,\r\n E,\r\n D extends Dispatch = Dispatch,\r\n RejectedValue = undefined,\r\n RejectedMeta = unknown,\r\n FulfilledMeta = unknown\r\n> = {\r\n dispatch: D\r\n getState: () => S\r\n extra: E\r\n requestId: string\r\n signal: AbortSignal\r\n rejectWithValue: IsUnknown<\r\n RejectedMeta,\r\n (value: RejectedValue) => RejectWithValue,\r\n (\r\n value: RejectedValue,\r\n meta: RejectedMeta\r\n ) => RejectWithValue\r\n >\r\n fulfillWithValue: IsUnknown<\r\n FulfilledMeta,\r\n (\r\n value: FulfilledValue\r\n ) => FulfillWithMeta,\r\n (\r\n value: FulfilledValue,\r\n meta: FulfilledMeta\r\n ) => FulfillWithMeta\r\n >\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport interface SerializedError {\r\n name?: string\r\n message?: string\r\n stack?: string\r\n code?: string\r\n}\r\n\r\nconst commonProperties: Array = [\r\n 'name',\r\n 'message',\r\n 'stack',\r\n 'code',\r\n]\r\n\r\nclass RejectWithValue {\r\n /*\r\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\r\n does not exist at runtime\r\n */\r\n private readonly _type!: 'RejectWithValue'\r\n constructor(\r\n public readonly payload: Payload,\r\n public readonly meta: RejectedMeta\r\n ) {}\r\n}\r\n\r\nclass FulfillWithMeta {\r\n /*\r\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\r\n does not exist at runtime\r\n */\r\n private readonly _type!: 'FulfillWithMeta'\r\n constructor(\r\n public readonly payload: Payload,\r\n public readonly meta: FulfilledMeta\r\n ) {}\r\n}\r\n\r\n/**\r\n * Serializes an error into a plain object.\r\n * Reworked from https://github.com/sindresorhus/serialize-error\r\n *\r\n * @public\r\n */\r\nexport const miniSerializeError = (value: any): SerializedError => {\r\n if (typeof value === 'object' && value !== null) {\r\n const simpleError: SerializedError = {}\r\n for (const property of commonProperties) {\r\n if (typeof value[property] === 'string') {\r\n simpleError[property] = value[property]\r\n }\r\n }\r\n\r\n return simpleError\r\n }\r\n\r\n return { message: String(value) }\r\n}\r\n\r\ntype AsyncThunkConfig = {\r\n state?: unknown\r\n dispatch?: Dispatch\r\n extra?: unknown\r\n rejectValue?: unknown\r\n serializedErrorType?: unknown\r\n pendingMeta?: unknown\r\n fulfilledMeta?: unknown\r\n rejectedMeta?: unknown\r\n}\r\n\r\ntype GetState = ThunkApiConfig extends {\r\n state: infer State\r\n}\r\n ? State\r\n : unknown\r\ntype GetExtra = ThunkApiConfig extends { extra: infer Extra }\r\n ? Extra\r\n : unknown\r\ntype GetDispatch = ThunkApiConfig extends {\r\n dispatch: infer Dispatch\r\n}\r\n ? FallbackIfUnknown<\r\n Dispatch,\r\n ThunkDispatch<\r\n GetState,\r\n GetExtra,\r\n AnyAction\r\n >\r\n >\r\n : ThunkDispatch, GetExtra, AnyAction>\r\n\r\ntype GetThunkAPI = BaseThunkAPI<\r\n GetState,\r\n GetExtra,\r\n GetDispatch,\r\n GetRejectValue,\r\n GetRejectedMeta,\r\n GetFulfilledMeta\r\n>\r\n\r\ntype GetRejectValue = ThunkApiConfig extends {\r\n rejectValue: infer RejectValue\r\n}\r\n ? RejectValue\r\n : unknown\r\n\r\ntype GetPendingMeta = ThunkApiConfig extends {\r\n pendingMeta: infer PendingMeta\r\n}\r\n ? PendingMeta\r\n : unknown\r\n\r\ntype GetFulfilledMeta = ThunkApiConfig extends {\r\n fulfilledMeta: infer FulfilledMeta\r\n}\r\n ? FulfilledMeta\r\n : unknown\r\n\r\ntype GetRejectedMeta = ThunkApiConfig extends {\r\n rejectedMeta: infer RejectedMeta\r\n}\r\n ? RejectedMeta\r\n : unknown\r\n\r\ntype GetSerializedErrorType = ThunkApiConfig extends {\r\n serializedErrorType: infer GetSerializedErrorType\r\n}\r\n ? GetSerializedErrorType\r\n : SerializedError\r\n\r\ntype MaybePromise = T | Promise | (T extends any ? Promise : never)\r\n\r\n/**\r\n * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.\r\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\r\n *\r\n * @public\r\n */\r\nexport type AsyncThunkPayloadCreatorReturnValue<\r\n Returned,\r\n ThunkApiConfig extends AsyncThunkConfig\r\n> = MaybePromise<\r\n | IsUnknown<\r\n GetFulfilledMeta,\r\n Returned,\r\n FulfillWithMeta>\r\n >\r\n | RejectWithValue<\r\n GetRejectValue,\r\n GetRejectedMeta\r\n >\r\n>\r\n/**\r\n * A type describing the `payloadCreator` argument to `createAsyncThunk`.\r\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\r\n *\r\n * @public\r\n */\r\nexport type AsyncThunkPayloadCreator<\r\n Returned,\r\n ThunkArg = void,\r\n ThunkApiConfig extends AsyncThunkConfig = {}\r\n> = (\r\n arg: ThunkArg,\r\n thunkAPI: GetThunkAPI\r\n) => AsyncThunkPayloadCreatorReturnValue\r\n\r\n/**\r\n * A ThunkAction created by `createAsyncThunk`.\r\n * Dispatching it returns a Promise for either a\r\n * fulfilled or rejected action.\r\n * Also, the returned value contains an `abort()` method\r\n * that allows the asyncAction to be cancelled from the outside.\r\n *\r\n * @public\r\n */\r\nexport type AsyncThunkAction<\r\n Returned,\r\n ThunkArg,\r\n ThunkApiConfig extends AsyncThunkConfig\r\n> = (\r\n dispatch: GetDispatch,\r\n getState: () => GetState,\r\n extra: GetExtra\r\n) => Promise<\r\n | ReturnType>\r\n | ReturnType>\r\n> & {\r\n abort: (reason?: string) => void\r\n requestId: string\r\n arg: ThunkArg\r\n unwrap: () => Promise\r\n}\r\n\r\ntype AsyncThunkActionCreator<\r\n Returned,\r\n ThunkArg,\r\n ThunkApiConfig extends AsyncThunkConfig\r\n> = IsAny<\r\n ThunkArg,\r\n // any handling\r\n (arg: ThunkArg) => AsyncThunkAction,\r\n // unknown handling\r\n unknown extends ThunkArg\r\n ? (arg: ThunkArg) => AsyncThunkAction // argument not specified or specified as void or undefined\r\n : [ThunkArg] extends [void] | [undefined]\r\n ? () => AsyncThunkAction // argument contains void\r\n : [void] extends [ThunkArg] // make optional\r\n ? (arg?: ThunkArg) => AsyncThunkAction // argument contains undefined\r\n : [undefined] extends [ThunkArg]\r\n ? WithStrictNullChecks<\r\n // with strict nullChecks: make optional\r\n (\r\n arg?: ThunkArg\r\n ) => AsyncThunkAction,\r\n // without strict null checks this will match everything, so don't make it optional\r\n (arg: ThunkArg) => AsyncThunkAction\r\n > // default case: normal argument\r\n : (arg: ThunkArg) => AsyncThunkAction\r\n>\r\n\r\n/**\r\n * Options object for `createAsyncThunk`.\r\n *\r\n * @public\r\n */\r\nexport type AsyncThunkOptions<\r\n ThunkArg = void,\r\n ThunkApiConfig extends AsyncThunkConfig = {}\r\n> = {\r\n /**\r\n * A method to control whether the asyncThunk should be executed. Has access to the\r\n * `arg`, `api.getState()` and `api.extra` arguments.\r\n *\r\n * @returns `false` if it should be skipped\r\n */\r\n condition?(\r\n arg: ThunkArg,\r\n api: Pick, 'getState' | 'extra'>\r\n ): MaybePromise\r\n /**\r\n * If `condition` returns `false`, the asyncThunk will be skipped.\r\n * This option allows you to control whether a `rejected` action with `meta.condition == false`\r\n * will be dispatched or not.\r\n *\r\n * @default `false`\r\n */\r\n dispatchConditionRejection?: boolean\r\n\r\n serializeError?: (x: unknown) => GetSerializedErrorType\r\n\r\n /**\r\n * A function to use when generating the `requestId` for the request sequence.\r\n *\r\n * @default `nanoid`\r\n */\r\n idGenerator?: (arg: ThunkArg) => string\r\n} & IsUnknown<\r\n GetPendingMeta,\r\n {\r\n /**\r\n * A method to generate additional properties to be added to `meta` of the pending action.\r\n *\r\n * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.\r\n * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload\r\n */\r\n getPendingMeta?(\r\n base: {\r\n arg: ThunkArg\r\n requestId: string\r\n },\r\n api: Pick, 'getState' | 'extra'>\r\n ): GetPendingMeta\r\n },\r\n {\r\n /**\r\n * A method to generate additional properties to be added to `meta` of the pending action.\r\n */\r\n getPendingMeta(\r\n base: {\r\n arg: ThunkArg\r\n requestId: string\r\n },\r\n api: Pick, 'getState' | 'extra'>\r\n ): GetPendingMeta\r\n }\r\n>\r\n\r\nexport type AsyncThunkPendingActionCreator<\r\n ThunkArg,\r\n ThunkApiConfig = {}\r\n> = ActionCreatorWithPreparedPayload<\r\n [string, ThunkArg, GetPendingMeta?],\r\n undefined,\r\n string,\r\n never,\r\n {\r\n arg: ThunkArg\r\n requestId: string\r\n requestStatus: 'pending'\r\n } & GetPendingMeta\r\n>\r\n\r\nexport type AsyncThunkRejectedActionCreator<\r\n ThunkArg,\r\n ThunkApiConfig = {}\r\n> = ActionCreatorWithPreparedPayload<\r\n [\r\n Error | null,\r\n string,\r\n ThunkArg,\r\n GetRejectValue?,\r\n GetRejectedMeta?\r\n ],\r\n GetRejectValue | undefined,\r\n string,\r\n GetSerializedErrorType,\r\n {\r\n arg: ThunkArg\r\n requestId: string\r\n requestStatus: 'rejected'\r\n aborted: boolean\r\n condition: boolean\r\n } & (\r\n | ({ rejectedWithValue: false } & {\r\n [K in keyof GetRejectedMeta]?: undefined\r\n })\r\n | ({ rejectedWithValue: true } & GetRejectedMeta)\r\n )\r\n>\r\n\r\nexport type AsyncThunkFulfilledActionCreator<\r\n Returned,\r\n ThunkArg,\r\n ThunkApiConfig = {}\r\n> = ActionCreatorWithPreparedPayload<\r\n [Returned, string, ThunkArg, GetFulfilledMeta?],\r\n Returned,\r\n string,\r\n never,\r\n {\r\n arg: ThunkArg\r\n requestId: string\r\n requestStatus: 'fulfilled'\r\n } & GetFulfilledMeta\r\n>\r\n\r\n/**\r\n * A type describing the return value of `createAsyncThunk`.\r\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\r\n *\r\n * @public\r\n */\r\nexport type AsyncThunk<\r\n Returned,\r\n ThunkArg,\r\n ThunkApiConfig extends AsyncThunkConfig\r\n> = AsyncThunkActionCreator & {\r\n pending: AsyncThunkPendingActionCreator\r\n rejected: AsyncThunkRejectedActionCreator\r\n fulfilled: AsyncThunkFulfilledActionCreator<\r\n Returned,\r\n ThunkArg,\r\n ThunkApiConfig\r\n >\r\n typePrefix: string\r\n}\r\n\r\n/**\r\n *\r\n * @param typePrefix\r\n * @param payloadCreator\r\n * @param options\r\n *\r\n * @public\r\n */\r\n// separate signature without `AsyncThunkConfig` for better inference\r\nexport function createAsyncThunk(\r\n typePrefix: string,\r\n payloadCreator: AsyncThunkPayloadCreator,\r\n options?: AsyncThunkOptions\r\n): AsyncThunk\r\n\r\n/**\r\n *\r\n * @param typePrefix\r\n * @param payloadCreator\r\n * @param options\r\n *\r\n * @public\r\n */\r\nexport function createAsyncThunk<\r\n Returned,\r\n ThunkArg,\r\n ThunkApiConfig extends AsyncThunkConfig\r\n>(\r\n typePrefix: string,\r\n payloadCreator: AsyncThunkPayloadCreator,\r\n options?: AsyncThunkOptions\r\n): AsyncThunk\r\n\r\nexport function createAsyncThunk<\r\n Returned,\r\n ThunkArg,\r\n ThunkApiConfig extends AsyncThunkConfig\r\n>(\r\n typePrefix: string,\r\n payloadCreator: AsyncThunkPayloadCreator,\r\n options?: AsyncThunkOptions\r\n): AsyncThunk {\r\n type RejectedValue = GetRejectValue\r\n type PendingMeta = GetPendingMeta\r\n type FulfilledMeta = GetFulfilledMeta\r\n type RejectedMeta = GetRejectedMeta\r\n\r\n const fulfilled: AsyncThunkFulfilledActionCreator<\r\n Returned,\r\n ThunkArg,\r\n ThunkApiConfig\r\n > = createAction(\r\n typePrefix + '/fulfilled',\r\n (\r\n payload: Returned,\r\n requestId: string,\r\n arg: ThunkArg,\r\n meta?: FulfilledMeta\r\n ) => ({\r\n payload,\r\n meta: {\r\n ...((meta as any) || {}),\r\n arg,\r\n requestId,\r\n requestStatus: 'fulfilled' as const,\r\n },\r\n })\r\n )\r\n\r\n const pending: AsyncThunkPendingActionCreator =\r\n createAction(\r\n typePrefix + '/pending',\r\n (requestId: string, arg: ThunkArg, meta?: PendingMeta) => ({\r\n payload: undefined,\r\n meta: {\r\n ...((meta as any) || {}),\r\n arg,\r\n requestId,\r\n requestStatus: 'pending' as const,\r\n },\r\n })\r\n )\r\n\r\n const rejected: AsyncThunkRejectedActionCreator =\r\n createAction(\r\n typePrefix + '/rejected',\r\n (\r\n error: Error | null,\r\n requestId: string,\r\n arg: ThunkArg,\r\n payload?: RejectedValue,\r\n meta?: RejectedMeta\r\n ) => ({\r\n payload,\r\n error: ((options && options.serializeError) || miniSerializeError)(\r\n error || 'Rejected'\r\n ) as GetSerializedErrorType,\r\n meta: {\r\n ...((meta as any) || {}),\r\n arg,\r\n requestId,\r\n rejectedWithValue: !!payload,\r\n requestStatus: 'rejected' as const,\r\n aborted: error?.name === 'AbortError',\r\n condition: error?.name === 'ConditionError',\r\n },\r\n })\r\n )\r\n\r\n let displayedWarning = false\r\n\r\n const AC =\r\n typeof AbortController !== 'undefined'\r\n ? AbortController\r\n : class implements AbortController {\r\n signal = {\r\n aborted: false,\r\n addEventListener() {},\r\n dispatchEvent() {\r\n return false\r\n },\r\n onabort() {},\r\n removeEventListener() {},\r\n reason: undefined,\r\n throwIfAborted() {},\r\n }\r\n abort() {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!displayedWarning) {\r\n displayedWarning = true\r\n console.info(\r\n `This platform does not implement AbortController. \r\nIf you want to use the AbortController to react to \\`abort\\` events, please consider importing a polyfill like 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'.`\r\n )\r\n }\r\n }\r\n }\r\n }\r\n\r\n function actionCreator(\r\n arg: ThunkArg\r\n ): AsyncThunkAction {\r\n return (dispatch, getState, extra) => {\r\n const requestId = options?.idGenerator\r\n ? options.idGenerator(arg)\r\n : nanoid()\r\n\r\n const abortController = new AC()\r\n let abortReason: string | undefined\r\n\r\n const abortedPromise = new Promise((_, reject) =>\r\n abortController.signal.addEventListener('abort', () =>\r\n reject({ name: 'AbortError', message: abortReason || 'Aborted' })\r\n )\r\n )\r\n\r\n let started = false\r\n function abort(reason?: string) {\r\n if (started) {\r\n abortReason = reason\r\n abortController.abort()\r\n }\r\n }\r\n\r\n const promise = (async function () {\r\n let finalAction: ReturnType\r\n try {\r\n let conditionResult = options?.condition?.(arg, { getState, extra })\r\n if (isThenable(conditionResult)) {\r\n conditionResult = await conditionResult\r\n }\r\n if (conditionResult === false) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw {\r\n name: 'ConditionError',\r\n message: 'Aborted due to condition callback returning false.',\r\n }\r\n }\r\n started = true\r\n dispatch(\r\n pending(\r\n requestId,\r\n arg,\r\n options?.getPendingMeta?.({ requestId, arg }, { getState, extra })\r\n )\r\n )\r\n finalAction = await Promise.race([\r\n abortedPromise,\r\n Promise.resolve(\r\n payloadCreator(arg, {\r\n dispatch,\r\n getState,\r\n extra,\r\n requestId,\r\n signal: abortController.signal,\r\n rejectWithValue: ((\r\n value: RejectedValue,\r\n meta?: RejectedMeta\r\n ) => {\r\n return new RejectWithValue(value, meta)\r\n }) as any,\r\n fulfillWithValue: ((value: unknown, meta?: FulfilledMeta) => {\r\n return new FulfillWithMeta(value, meta)\r\n }) as any,\r\n })\r\n ).then((result) => {\r\n if (result instanceof RejectWithValue) {\r\n throw result\r\n }\r\n if (result instanceof FulfillWithMeta) {\r\n return fulfilled(result.payload, requestId, arg, result.meta)\r\n }\r\n return fulfilled(result as any, requestId, arg)\r\n }),\r\n ])\r\n } catch (err) {\r\n finalAction =\r\n err instanceof RejectWithValue\r\n ? rejected(null, requestId, arg, err.payload, err.meta)\r\n : rejected(err as any, requestId, arg)\r\n }\r\n // We dispatch the result action _after_ the catch, to avoid having any errors\r\n // here get swallowed by the try/catch block,\r\n // per https://twitter.com/dan_abramov/status/770914221638942720\r\n // and https://github.com/reduxjs/redux-toolkit/blob/e85eb17b39a2118d859f7b7746e0f3fee523e089/docs/tutorials/advanced-tutorial.md#async-error-handling-logic-in-thunks\r\n\r\n const skipDispatch =\r\n options &&\r\n !options.dispatchConditionRejection &&\r\n rejected.match(finalAction) &&\r\n (finalAction as any).meta.condition\r\n\r\n if (!skipDispatch) {\r\n dispatch(finalAction)\r\n }\r\n return finalAction\r\n })()\r\n return Object.assign(promise as Promise, {\r\n abort,\r\n requestId,\r\n arg,\r\n unwrap() {\r\n return promise.then(unwrapResult)\r\n },\r\n })\r\n }\r\n }\r\n\r\n return Object.assign(\r\n actionCreator as AsyncThunkActionCreator<\r\n Returned,\r\n ThunkArg,\r\n ThunkApiConfig\r\n >,\r\n {\r\n pending,\r\n rejected,\r\n fulfilled,\r\n typePrefix,\r\n }\r\n )\r\n}\r\n\r\ninterface UnwrappableAction {\r\n payload: any\r\n meta?: any\r\n error?: any\r\n}\r\n\r\ntype UnwrappedActionPayload = Exclude<\r\n T,\r\n { error: any }\r\n>['payload']\r\n\r\n/**\r\n * @public\r\n */\r\nexport function unwrapResult(\r\n action: R\r\n): UnwrappedActionPayload {\r\n if (action.meta && action.meta.rejectedWithValue) {\r\n throw action.payload\r\n }\r\n if (action.error) {\r\n throw action.error\r\n }\r\n return action.payload\r\n}\r\n\r\ntype WithStrictNullChecks = undefined extends boolean\r\n ? False\r\n : True\r\n\r\nfunction isThenable(value: any): value is PromiseLike {\r\n return (\r\n value !== null &&\r\n typeof value === 'object' &&\r\n typeof value.then === 'function'\r\n )\r\n}\r\n","import type { Middleware } from 'redux'\r\nimport type { MiddlewareArray } from './utils'\r\n\r\n/**\r\n * return True if T is `any`, otherwise return False\r\n * taken from https://github.com/joonhocho/tsdef\r\n *\r\n * @internal\r\n */\r\nexport type IsAny =\r\n // test if we are going the left AND right path in the condition\r\n true | false extends (T extends never ? true : false) ? True : False\r\n\r\n/**\r\n * return True if T is `unknown`, otherwise return False\r\n * taken from https://github.com/joonhocho/tsdef\r\n *\r\n * @internal\r\n */\r\nexport type IsUnknown = unknown extends T\r\n ? IsAny\r\n : False\r\n\r\nexport type FallbackIfUnknown = IsUnknown\r\n\r\n/**\r\n * @internal\r\n */\r\nexport type IfMaybeUndefined = [undefined] extends [P]\r\n ? True\r\n : False\r\n\r\n/**\r\n * @internal\r\n */\r\nexport type IfVoid = [void] extends [P] ? True : False\r\n\r\n/**\r\n * @internal\r\n */\r\nexport type IsEmptyObj = T extends any\r\n ? keyof T extends never\r\n ? IsUnknown>>\r\n : False\r\n : never\r\n\r\n/**\r\n * returns True if TS version is above 3.5, False if below.\r\n * uses feature detection to detect TS version >= 3.5\r\n * * versions below 3.5 will return `{}` for unresolvable interference\r\n * * versions above will return `unknown`\r\n *\r\n * @internal\r\n */\r\nexport type AtLeastTS35 = [True, False][IsUnknown<\r\n ReturnType<() => T>,\r\n 0,\r\n 1\r\n>]\r\n\r\n/**\r\n * @internal\r\n */\r\nexport type IsUnknownOrNonInferrable = AtLeastTS35<\r\n IsUnknown,\r\n IsEmptyObj>\r\n>\r\n\r\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\r\nexport type ExcludeFromTuple = T extends [\r\n infer Head,\r\n ...infer Tail\r\n]\r\n ? ExcludeFromTuple\r\n : Acc\r\n\r\ntype ExtractDispatchFromMiddlewareTuple<\r\n MiddlewareTuple extends any[],\r\n Acc extends {}\r\n> = MiddlewareTuple extends [infer Head, ...infer Tail]\r\n ? ExtractDispatchFromMiddlewareTuple<\r\n Tail,\r\n Acc & (Head extends Middleware ? IsAny : {})\r\n >\r\n : Acc\r\n\r\nexport type ExtractDispatchExtensions = M extends MiddlewareArray<\r\n infer MiddlewareTuple\r\n>\r\n ? ExtractDispatchFromMiddlewareTuple\r\n : M extends Middleware[]\r\n ? ExtractDispatchFromMiddlewareTuple<[...M], {}>\r\n : never\r\n\r\n/**\r\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\r\n */\r\nexport type UnionToIntersection = (\r\n U extends any ? (k: U) => void : never\r\n) extends (k: infer I) => void\r\n ? I\r\n : never\r\n\r\n/**\r\n * Helper type. Passes T out again, but boxes it in a way that it cannot\r\n * \"widen\" the type by accident if it is a generic that should be inferred\r\n * from elsewhere.\r\n *\r\n * @internal\r\n */\r\nexport type NoInfer = [T][T extends any ? 0 : never]\r\n\r\nexport type Omit = Pick>\r\n\r\nexport interface TypeGuard {\r\n (value: any): value is T\r\n}\r\n\r\nexport interface HasMatchFunction {\r\n match: TypeGuard\r\n}\r\n\r\nexport const hasMatchFunction = (\r\n v: Matcher\r\n): v is HasMatchFunction => {\r\n return v && typeof (v as HasMatchFunction).match === 'function'\r\n}\r\n\r\n/** @public */\r\nexport type Matcher = HasMatchFunction | TypeGuard\r\n\r\n/** @public */\r\nexport type ActionFromMatcher> = M extends Matcher<\r\n infer T\r\n>\r\n ? T\r\n : never\r\n","import type {\r\n ActionFromMatcher,\r\n Matcher,\r\n UnionToIntersection,\r\n} from './tsHelpers'\r\nimport { hasMatchFunction } from './tsHelpers'\r\nimport type {\r\n AsyncThunk,\r\n AsyncThunkFulfilledActionCreator,\r\n AsyncThunkPendingActionCreator,\r\n AsyncThunkRejectedActionCreator,\r\n} from './createAsyncThunk'\r\n\r\n/** @public */\r\nexport type ActionMatchingAnyOf<\r\n Matchers extends [Matcher, ...Matcher[]]\r\n> = ActionFromMatcher\r\n\r\n/** @public */\r\nexport type ActionMatchingAllOf<\r\n Matchers extends [Matcher, ...Matcher[]]\r\n> = UnionToIntersection>\r\n\r\nconst matches = (matcher: Matcher, action: any) => {\r\n if (hasMatchFunction(matcher)) {\r\n return matcher.match(action)\r\n } else {\r\n return matcher(action)\r\n }\r\n}\r\n\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action matches any one of the supplied type guards or action\r\n * creators.\r\n *\r\n * @param matchers The type guards or action creators to match against.\r\n *\r\n * @public\r\n */\r\nexport function isAnyOf, ...Matcher[]]>(\r\n ...matchers: Matchers\r\n) {\r\n return (action: any): action is ActionMatchingAnyOf => {\r\n return matchers.some((matcher) => matches(matcher, action))\r\n }\r\n}\r\n\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action matches all of the supplied type guards or action\r\n * creators.\r\n *\r\n * @param matchers The type guards or action creators to match against.\r\n *\r\n * @public\r\n */\r\nexport function isAllOf, ...Matcher[]]>(\r\n ...matchers: Matchers\r\n) {\r\n return (action: any): action is ActionMatchingAllOf => {\r\n return matchers.every((matcher) => matches(matcher, action))\r\n }\r\n}\r\n\r\n/**\r\n * @param action A redux action\r\n * @param validStatus An array of valid meta.requestStatus values\r\n *\r\n * @internal\r\n */\r\nexport function hasExpectedRequestMetadata(\r\n action: any,\r\n validStatus: readonly string[]\r\n) {\r\n if (!action || !action.meta) return false\r\n\r\n const hasValidRequestId = typeof action.meta.requestId === 'string'\r\n const hasValidRequestStatus =\r\n validStatus.indexOf(action.meta.requestStatus) > -1\r\n\r\n return hasValidRequestId && hasValidRequestStatus\r\n}\r\n\r\nfunction isAsyncThunkArray(a: [any] | AnyAsyncThunk[]): a is AnyAsyncThunk[] {\r\n return (\r\n typeof a[0] === 'function' &&\r\n 'pending' in a[0] &&\r\n 'fulfilled' in a[0] &&\r\n 'rejected' in a[0]\r\n )\r\n}\r\n\r\nexport type UnknownAsyncThunkPendingAction = ReturnType<\r\n AsyncThunkPendingActionCreator\r\n>\r\n\r\nexport type PendingActionFromAsyncThunk =\r\n ActionFromMatcher\r\n\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action was created by an async thunk action creator, and that\r\n * the action is pending.\r\n *\r\n * @public\r\n */\r\nexport function isPending(): (\r\n action: any\r\n) => action is UnknownAsyncThunkPendingAction\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action belongs to one of the provided async thunk action creators,\r\n * and that the action is pending.\r\n *\r\n * @param asyncThunks (optional) The async thunk action creators to match against.\r\n *\r\n * @public\r\n */\r\nexport function isPending<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(\r\n ...asyncThunks: AsyncThunks\r\n): (action: any) => action is PendingActionFromAsyncThunk\r\n/**\r\n * Tests if `action` is a pending thunk action\r\n * @public\r\n */\r\nexport function isPending(action: any): action is UnknownAsyncThunkPendingAction\r\nexport function isPending<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(...asyncThunks: AsyncThunks | [any]) {\r\n if (asyncThunks.length === 0) {\r\n return (action: any) => hasExpectedRequestMetadata(action, ['pending'])\r\n }\r\n\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isPending()(asyncThunks[0])\r\n }\r\n\r\n return (\r\n action: any\r\n ): action is PendingActionFromAsyncThunk => {\r\n // note: this type will be correct because we have at least 1 asyncThunk\r\n const matchers: [Matcher, ...Matcher[]] = asyncThunks.map(\r\n (asyncThunk) => asyncThunk.pending\r\n ) as any\r\n\r\n const combinedMatcher = isAnyOf(...matchers)\r\n\r\n return combinedMatcher(action)\r\n }\r\n}\r\n\r\nexport type UnknownAsyncThunkRejectedAction = ReturnType<\r\n AsyncThunkRejectedActionCreator\r\n>\r\n\r\nexport type RejectedActionFromAsyncThunk =\r\n ActionFromMatcher\r\n\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action was created by an async thunk action creator, and that\r\n * the action is rejected.\r\n *\r\n * @public\r\n */\r\nexport function isRejected(): (\r\n action: any\r\n) => action is UnknownAsyncThunkRejectedAction\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action belongs to one of the provided async thunk action creators,\r\n * and that the action is rejected.\r\n *\r\n * @param asyncThunks (optional) The async thunk action creators to match against.\r\n *\r\n * @public\r\n */\r\nexport function isRejected<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(\r\n ...asyncThunks: AsyncThunks\r\n): (action: any) => action is RejectedActionFromAsyncThunk\r\n/**\r\n * Tests if `action` is a rejected thunk action\r\n * @public\r\n */\r\nexport function isRejected(\r\n action: any\r\n): action is UnknownAsyncThunkRejectedAction\r\nexport function isRejected<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(...asyncThunks: AsyncThunks | [any]) {\r\n if (asyncThunks.length === 0) {\r\n return (action: any) => hasExpectedRequestMetadata(action, ['rejected'])\r\n }\r\n\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isRejected()(asyncThunks[0])\r\n }\r\n\r\n return (\r\n action: any\r\n ): action is RejectedActionFromAsyncThunk => {\r\n // note: this type will be correct because we have at least 1 asyncThunk\r\n const matchers: [Matcher, ...Matcher[]] = asyncThunks.map(\r\n (asyncThunk) => asyncThunk.rejected\r\n ) as any\r\n\r\n const combinedMatcher = isAnyOf(...matchers)\r\n\r\n return combinedMatcher(action)\r\n }\r\n}\r\n\r\nexport type UnknownAsyncThunkRejectedWithValueAction = ReturnType<\r\n AsyncThunkRejectedActionCreator\r\n>\r\n\r\nexport type RejectedWithValueActionFromAsyncThunk =\r\n ActionFromMatcher &\r\n (T extends AsyncThunk\r\n ? { payload: RejectedValue }\r\n : unknown)\r\n\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action was created by an async thunk action creator, and that\r\n * the action is rejected with value.\r\n *\r\n * @public\r\n */\r\nexport function isRejectedWithValue(): (\r\n action: any\r\n) => action is UnknownAsyncThunkRejectedAction\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action belongs to one of the provided async thunk action creators,\r\n * and that the action is rejected with value.\r\n *\r\n * @param asyncThunks (optional) The async thunk action creators to match against.\r\n *\r\n * @public\r\n */\r\nexport function isRejectedWithValue<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(\r\n ...asyncThunks: AsyncThunks\r\n): (\r\n action: any\r\n) => action is RejectedWithValueActionFromAsyncThunk\r\n/**\r\n * Tests if `action` is a rejected thunk action with value\r\n * @public\r\n */\r\nexport function isRejectedWithValue(\r\n action: any\r\n): action is UnknownAsyncThunkRejectedAction\r\nexport function isRejectedWithValue<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(...asyncThunks: AsyncThunks | [any]) {\r\n const hasFlag = (action: any): action is any => {\r\n return action && action.meta && action.meta.rejectedWithValue\r\n }\r\n\r\n if (asyncThunks.length === 0) {\r\n return (action: any) => {\r\n const combinedMatcher = isAllOf(isRejected(...asyncThunks), hasFlag)\r\n\r\n return combinedMatcher(action)\r\n }\r\n }\r\n\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isRejectedWithValue()(asyncThunks[0])\r\n }\r\n\r\n return (\r\n action: any\r\n ): action is RejectedActionFromAsyncThunk => {\r\n const combinedMatcher = isAllOf(isRejected(...asyncThunks), hasFlag)\r\n\r\n return combinedMatcher(action)\r\n }\r\n}\r\n\r\nexport type UnknownAsyncThunkFulfilledAction = ReturnType<\r\n AsyncThunkFulfilledActionCreator\r\n>\r\n\r\nexport type FulfilledActionFromAsyncThunk =\r\n ActionFromMatcher\r\n\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action was created by an async thunk action creator, and that\r\n * the action is fulfilled.\r\n *\r\n * @public\r\n */\r\nexport function isFulfilled(): (\r\n action: any\r\n) => action is UnknownAsyncThunkFulfilledAction\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action belongs to one of the provided async thunk action creators,\r\n * and that the action is fulfilled.\r\n *\r\n * @param asyncThunks (optional) The async thunk action creators to match against.\r\n *\r\n * @public\r\n */\r\nexport function isFulfilled<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(\r\n ...asyncThunks: AsyncThunks\r\n): (action: any) => action is FulfilledActionFromAsyncThunk\r\n/**\r\n * Tests if `action` is a fulfilled thunk action\r\n * @public\r\n */\r\nexport function isFulfilled(\r\n action: any\r\n): action is UnknownAsyncThunkFulfilledAction\r\nexport function isFulfilled<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(...asyncThunks: AsyncThunks | [any]) {\r\n if (asyncThunks.length === 0) {\r\n return (action: any) => hasExpectedRequestMetadata(action, ['fulfilled'])\r\n }\r\n\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isFulfilled()(asyncThunks[0])\r\n }\r\n\r\n return (\r\n action: any\r\n ): action is FulfilledActionFromAsyncThunk => {\r\n // note: this type will be correct because we have at least 1 asyncThunk\r\n const matchers: [Matcher, ...Matcher[]] = asyncThunks.map(\r\n (asyncThunk) => asyncThunk.fulfilled\r\n ) as any\r\n\r\n const combinedMatcher = isAnyOf(...matchers)\r\n\r\n return combinedMatcher(action)\r\n }\r\n}\r\n\r\nexport type UnknownAsyncThunkAction =\r\n | UnknownAsyncThunkPendingAction\r\n | UnknownAsyncThunkRejectedAction\r\n | UnknownAsyncThunkFulfilledAction\r\n\r\nexport type AnyAsyncThunk = {\r\n pending: { match: (action: any) => action is any }\r\n fulfilled: { match: (action: any) => action is any }\r\n rejected: { match: (action: any) => action is any }\r\n}\r\n\r\nexport type ActionsFromAsyncThunk =\r\n | ActionFromMatcher\r\n | ActionFromMatcher\r\n | ActionFromMatcher\r\n\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action was created by an async thunk action creator.\r\n *\r\n * @public\r\n */\r\nexport function isAsyncThunkAction(): (\r\n action: any\r\n) => action is UnknownAsyncThunkAction\r\n/**\r\n * A higher-order function that returns a function that may be used to check\r\n * whether an action belongs to one of the provided async thunk action creators.\r\n *\r\n * @param asyncThunks (optional) The async thunk action creators to match against.\r\n *\r\n * @public\r\n */\r\nexport function isAsyncThunkAction<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(\r\n ...asyncThunks: AsyncThunks\r\n): (action: any) => action is ActionsFromAsyncThunk\r\n/**\r\n * Tests if `action` is a thunk action\r\n * @public\r\n */\r\nexport function isAsyncThunkAction(\r\n action: any\r\n): action is UnknownAsyncThunkAction\r\nexport function isAsyncThunkAction<\r\n AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]\r\n>(...asyncThunks: AsyncThunks | [any]) {\r\n if (asyncThunks.length === 0) {\r\n return (action: any) =>\r\n hasExpectedRequestMetadata(action, ['pending', 'fulfilled', 'rejected'])\r\n }\r\n\r\n if (!isAsyncThunkArray(asyncThunks)) {\r\n return isAsyncThunkAction()(asyncThunks[0])\r\n }\r\n\r\n return (\r\n action: any\r\n ): action is ActionsFromAsyncThunk => {\r\n // note: this type will be correct because we have at least 1 asyncThunk\r\n const matchers: [Matcher, ...Matcher[]] = [] as any\r\n\r\n for (const asyncThunk of asyncThunks) {\r\n matchers.push(\r\n asyncThunk.pending,\r\n asyncThunk.rejected,\r\n asyncThunk.fulfilled\r\n )\r\n }\r\n\r\n const combinedMatcher = isAnyOf(...matchers)\r\n\r\n return combinedMatcher(action)\r\n }\r\n}\r\n","import type { AbortSignalWithReason } from './types'\r\n\r\nexport const assertFunction: (\r\n func: unknown,\r\n expected: string\r\n) => asserts func is (...args: unknown[]) => unknown = (\r\n func: unknown,\r\n expected: string\r\n) => {\r\n if (typeof func !== 'function') {\r\n throw new TypeError(`${expected} is not a function`)\r\n }\r\n}\r\n\r\nexport const noop = () => {}\r\n\r\nexport const catchRejection = (\r\n promise: Promise,\r\n onError = noop\r\n): Promise => {\r\n promise.catch(onError)\r\n\r\n return promise\r\n}\r\n\r\nexport const addAbortSignalListener = (\r\n abortSignal: AbortSignal,\r\n callback: (evt: Event) => void\r\n) => {\r\n abortSignal.addEventListener('abort', callback, { once: true })\r\n}\r\n\r\n/**\r\n * Calls `abortController.abort(reason)` and patches `signal.reason`.\r\n * if it is not supported.\r\n *\r\n * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.\r\n * @param abortController\r\n * @param reason\r\n * @returns\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\r\n */\r\nexport const abortControllerWithReason = (\r\n abortController: AbortController,\r\n reason: T\r\n): void => {\r\n type Consumer = (val: T) => void\r\n\r\n const signal = abortController.signal as AbortSignalWithReason\r\n\r\n if (signal.aborted) {\r\n return\r\n }\r\n\r\n // Patch `reason` if necessary.\r\n // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.\r\n // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'\r\n // event are are notified immediately.\r\n if (!('reason' in signal)) {\r\n Object.defineProperty(signal, 'reason', {\r\n enumerable: true,\r\n value: reason,\r\n configurable: true,\r\n writable: true,\r\n })\r\n }\r\n\r\n ;(abortController.abort as Consumer)(reason)\r\n}\r\n","import type { SerializedError } from '@reduxjs/toolkit'\r\n\r\nconst task = 'task'\r\nconst listener = 'listener'\r\nconst completed = 'completed'\r\nconst cancelled = 'cancelled'\r\n\r\n/* TaskAbortError error codes */\r\nexport const taskCancelled = `task-${cancelled}` as const\r\nexport const taskCompleted = `task-${completed}` as const\r\nexport const listenerCancelled = `${listener}-${cancelled}` as const\r\nexport const listenerCompleted = `${listener}-${completed}` as const\r\n\r\nexport class TaskAbortError implements SerializedError {\r\n name = 'TaskAbortError'\r\n message: string\r\n constructor(public code: string | undefined) {\r\n this.message = `${task} ${cancelled} (reason: ${code})`\r\n }\r\n}\r\n","import { TaskAbortError } from './exceptions'\r\nimport type { AbortSignalWithReason, TaskResult } from './types'\r\nimport { addAbortSignalListener, catchRejection } from './utils'\r\n\r\n/**\r\n * Synchronously raises {@link TaskAbortError} if the task tied to the input `signal` has been cancelled.\r\n * @param signal\r\n * @param reason\r\n * @see {TaskAbortError}\r\n */\r\nexport const validateActive = (signal: AbortSignal): void => {\r\n if (signal.aborted) {\r\n throw new TaskAbortError((signal as AbortSignalWithReason).reason)\r\n }\r\n}\r\n\r\n/**\r\n * Returns a promise that will reject {@link TaskAbortError} if the task is cancelled.\r\n * @param signal\r\n * @returns\r\n */\r\nexport const promisifyAbortSignal = (\r\n signal: AbortSignalWithReason\r\n): Promise => {\r\n return catchRejection(\r\n new Promise((_, reject) => {\r\n const notifyRejection = () => reject(new TaskAbortError(signal.reason))\r\n\r\n if (signal.aborted) {\r\n notifyRejection()\r\n } else {\r\n addAbortSignalListener(signal, notifyRejection)\r\n }\r\n })\r\n )\r\n}\r\n\r\n/**\r\n * Runs a task and returns promise that resolves to {@link TaskResult}.\r\n * Second argument is an optional `cleanUp` function that always runs after task.\r\n *\r\n * **Note:** `runTask` runs the executor in the next microtask.\r\n * @returns\r\n */\r\nexport const runTask = async (\r\n task: () => Promise,\r\n cleanUp?: () => void\r\n): Promise> => {\r\n try {\r\n await Promise.resolve()\r\n const value = await task()\r\n return {\r\n status: 'ok',\r\n value,\r\n }\r\n } catch (error: any) {\r\n return {\r\n status: error instanceof TaskAbortError ? 'cancelled' : 'rejected',\r\n error,\r\n }\r\n } finally {\r\n cleanUp?.()\r\n }\r\n}\r\n\r\n/**\r\n * Given an input `AbortSignal` and a promise returns another promise that resolves\r\n * as soon the input promise is provided or rejects as soon as\r\n * `AbortSignal.abort` is `true`.\r\n * @param signal\r\n * @returns\r\n */\r\nexport const createPause = (signal: AbortSignal) => {\r\n return (promise: Promise): Promise => {\r\n return catchRejection(\r\n Promise.race([promisifyAbortSignal(signal), promise]).then((output) => {\r\n validateActive(signal)\r\n return output\r\n })\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * Given an input `AbortSignal` and `timeoutMs` returns a promise that resolves\r\n * after `timeoutMs` or rejects as soon as `AbortSignal.abort` is `true`.\r\n * @param signal\r\n * @returns\r\n */\r\nexport const createDelay = (signal: AbortSignal) => {\r\n const pause = createPause(signal)\r\n return (timeoutMs: number): Promise => {\r\n return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)))\r\n }\r\n}\r\n","import type { Dispatch, AnyAction, MiddlewareAPI } from 'redux'\r\nimport type { ThunkDispatch } from 'redux-thunk'\r\nimport { createAction } from '../createAction'\r\nimport { nanoid } from '../nanoid'\r\n\r\nimport type {\r\n ListenerMiddleware,\r\n ListenerMiddlewareInstance,\r\n AddListenerOverloads,\r\n AnyListenerPredicate,\r\n CreateListenerMiddlewareOptions,\r\n TypedAddListener,\r\n TypedCreateListenerEntry,\r\n FallbackAddListenerOptions,\r\n ListenerEntry,\r\n ListenerErrorHandler,\r\n UnsubscribeListener,\r\n TakePattern,\r\n ListenerErrorInfo,\r\n ForkedTaskExecutor,\r\n ForkedTask,\r\n TypedRemoveListener,\r\n TaskResult,\r\n AbortSignalWithReason,\r\n UnsubscribeListenerOptions,\r\n} from './types'\r\nimport {\r\n abortControllerWithReason,\r\n addAbortSignalListener,\r\n assertFunction,\r\n catchRejection,\r\n} from './utils'\r\nimport {\r\n listenerCancelled,\r\n listenerCompleted,\r\n TaskAbortError,\r\n taskCancelled,\r\n taskCompleted,\r\n} from './exceptions'\r\nimport {\r\n runTask,\r\n promisifyAbortSignal,\r\n validateActive,\r\n createPause,\r\n createDelay,\r\n} from './task'\r\nexport { TaskAbortError } from './exceptions'\r\nexport type {\r\n ListenerEffect,\r\n ListenerMiddleware,\r\n ListenerEffectAPI,\r\n ListenerMiddlewareInstance,\r\n CreateListenerMiddlewareOptions,\r\n ListenerErrorHandler,\r\n TypedStartListening,\r\n TypedAddListener,\r\n TypedStopListening,\r\n TypedRemoveListener,\r\n UnsubscribeListener,\r\n UnsubscribeListenerOptions,\r\n ForkedTaskExecutor,\r\n ForkedTask,\r\n ForkedTaskAPI,\r\n AsyncTaskExecutor,\r\n SyncTaskExecutor,\r\n TaskCancelled,\r\n TaskRejected,\r\n TaskResolved,\r\n TaskResult,\r\n} from './types'\r\n\r\n//Overly-aggressive byte-shaving\r\nconst { assign } = Object\r\n/**\r\n * @internal\r\n */\r\nconst INTERNAL_NIL_TOKEN = {} as const\r\n\r\nconst alm = 'listenerMiddleware' as const\r\n\r\nconst createFork = (parentAbortSignal: AbortSignalWithReason) => {\r\n const linkControllers = (controller: AbortController) =>\r\n addAbortSignalListener(parentAbortSignal, () =>\r\n abortControllerWithReason(controller, parentAbortSignal.reason)\r\n )\r\n\r\n return (taskExecutor: ForkedTaskExecutor): ForkedTask => {\r\n assertFunction(taskExecutor, 'taskExecutor')\r\n const childAbortController = new AbortController()\r\n\r\n linkControllers(childAbortController)\r\n\r\n const result = runTask(\r\n async (): Promise => {\r\n validateActive(parentAbortSignal)\r\n validateActive(childAbortController.signal)\r\n const result = (await taskExecutor({\r\n pause: createPause(childAbortController.signal),\r\n delay: createDelay(childAbortController.signal),\r\n signal: childAbortController.signal,\r\n })) as T\r\n validateActive(childAbortController.signal)\r\n return result\r\n },\r\n () => abortControllerWithReason(childAbortController, taskCompleted)\r\n )\r\n\r\n return {\r\n result: createPause>(parentAbortSignal)(result),\r\n cancel() {\r\n abortControllerWithReason(childAbortController, taskCancelled)\r\n },\r\n }\r\n }\r\n}\r\n\r\nconst createTakePattern = (\r\n startListening: AddListenerOverloads<\r\n UnsubscribeListener,\r\n S,\r\n Dispatch\r\n >,\r\n signal: AbortSignal\r\n): TakePattern => {\r\n /**\r\n * A function that takes a ListenerPredicate and an optional timeout,\r\n * and resolves when either the predicate returns `true` based on an action\r\n * state combination or when the timeout expires.\r\n * If the parent listener is canceled while waiting, this will throw a\r\n * TaskAbortError.\r\n */\r\n const take = async

>(\r\n predicate: P,\r\n timeout: number | undefined\r\n ) => {\r\n validateActive(signal)\r\n\r\n // Placeholder unsubscribe function until the listener is added\r\n let unsubscribe: UnsubscribeListener = () => {}\r\n\r\n const tuplePromise = new Promise<[AnyAction, S, S]>((resolve) => {\r\n // Inside the Promise, we synchronously add the listener.\r\n unsubscribe = startListening({\r\n predicate: predicate as any,\r\n effect: (action, listenerApi): void => {\r\n // One-shot listener that cleans up as soon as the predicate passes\r\n listenerApi.unsubscribe()\r\n // Resolve the promise with the same arguments the predicate saw\r\n resolve([\r\n action,\r\n listenerApi.getState(),\r\n listenerApi.getOriginalState(),\r\n ])\r\n },\r\n })\r\n })\r\n\r\n const promises: (Promise | Promise<[AnyAction, S, S]>)[] = [\r\n promisifyAbortSignal(signal),\r\n tuplePromise,\r\n ]\r\n\r\n if (timeout != null) {\r\n promises.push(\r\n new Promise((resolve) => setTimeout(resolve, timeout, null))\r\n )\r\n }\r\n\r\n try {\r\n const output = await Promise.race(promises)\r\n\r\n validateActive(signal)\r\n return output\r\n } finally {\r\n // Always clean up the listener\r\n unsubscribe()\r\n }\r\n }\r\n\r\n return ((predicate: AnyListenerPredicate, timeout: number | undefined) =>\r\n catchRejection(take(predicate, timeout))) as TakePattern\r\n}\r\n\r\nconst getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {\r\n let { type, actionCreator, matcher, predicate, effect } = options\r\n\r\n if (type) {\r\n predicate = createAction(type).match\r\n } else if (actionCreator) {\r\n type = actionCreator!.type\r\n predicate = actionCreator.match\r\n } else if (matcher) {\r\n predicate = matcher\r\n } else if (predicate) {\r\n // pass\r\n } else {\r\n throw new Error(\r\n 'Creating or removing a listener requires one of the known fields for matching an action'\r\n )\r\n }\r\n\r\n assertFunction(effect, 'options.listener')\r\n\r\n return { predicate, type, effect }\r\n}\r\n\r\n/** Accepts the possible options for creating a listener, and returns a formatted listener entry */\r\nexport const createListenerEntry: TypedCreateListenerEntry = (\r\n options: FallbackAddListenerOptions\r\n) => {\r\n const { type, predicate, effect } = getListenerEntryPropsFrom(options)\r\n\r\n const id = nanoid()\r\n const entry: ListenerEntry = {\r\n id,\r\n effect,\r\n type,\r\n predicate,\r\n pending: new Set(),\r\n unsubscribe: () => {\r\n throw new Error('Unsubscribe not initialized')\r\n },\r\n }\r\n\r\n return entry\r\n}\r\n\r\nconst createClearListenerMiddleware = (\r\n listenerMap: Map\r\n) => {\r\n return () => {\r\n listenerMap.forEach(cancelActiveListeners)\r\n\r\n listenerMap.clear()\r\n }\r\n}\r\n\r\n/**\r\n * Safely reports errors to the `errorHandler` provided.\r\n * Errors that occur inside `errorHandler` are notified in a new task.\r\n * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)\r\n * @param errorHandler\r\n * @param errorToNotify\r\n */\r\nconst safelyNotifyError = (\r\n errorHandler: ListenerErrorHandler,\r\n errorToNotify: unknown,\r\n errorInfo: ListenerErrorInfo\r\n): void => {\r\n try {\r\n errorHandler(errorToNotify, errorInfo)\r\n } catch (errorHandlerError) {\r\n // We cannot let an error raised here block the listener queue.\r\n // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...\r\n setTimeout(() => {\r\n throw errorHandlerError\r\n }, 0)\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport const addListener = createAction(\r\n `${alm}/add`\r\n) as TypedAddListener\r\n\r\n/**\r\n * @public\r\n */\r\nexport const clearAllListeners = createAction(`${alm}/removeAll`)\r\n\r\n/**\r\n * @public\r\n */\r\nexport const removeListener = createAction(\r\n `${alm}/remove`\r\n) as TypedRemoveListener\r\n\r\nconst defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {\r\n console.error(`${alm}/error`, ...args)\r\n}\r\n\r\nconst cancelActiveListeners = (\r\n entry: ListenerEntry>\r\n) => {\r\n entry.pending.forEach((controller) => {\r\n abortControllerWithReason(controller, listenerCancelled)\r\n })\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function createListenerMiddleware<\r\n S = unknown,\r\n D extends Dispatch = ThunkDispatch,\r\n ExtraArgument = unknown\r\n>(middlewareOptions: CreateListenerMiddlewareOptions = {}) {\r\n const listenerMap = new Map()\r\n const { extra, onError = defaultErrorHandler } = middlewareOptions\r\n\r\n assertFunction(onError, 'onError')\r\n\r\n const insertEntry = (entry: ListenerEntry) => {\r\n entry.unsubscribe = () => listenerMap.delete(entry!.id)\r\n\r\n listenerMap.set(entry.id, entry)\r\n return (cancelOptions?: UnsubscribeListenerOptions) => {\r\n entry.unsubscribe()\r\n if (cancelOptions?.cancelActive) {\r\n cancelActiveListeners(entry)\r\n }\r\n }\r\n }\r\n\r\n const findListenerEntry = (\r\n comparator: (entry: ListenerEntry) => boolean\r\n ): ListenerEntry | undefined => {\r\n for (const entry of Array.from(listenerMap.values())) {\r\n if (comparator(entry)) {\r\n return entry\r\n }\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n const startListening = (options: FallbackAddListenerOptions) => {\r\n let entry = findListenerEntry(\r\n (existingEntry) => existingEntry.effect === options.effect\r\n )\r\n\r\n if (!entry) {\r\n entry = createListenerEntry(options as any)\r\n }\r\n\r\n return insertEntry(entry)\r\n }\r\n\r\n const stopListening = (\r\n options: FallbackAddListenerOptions & UnsubscribeListenerOptions\r\n ): boolean => {\r\n const { type, effect, predicate } = getListenerEntryPropsFrom(options)\r\n\r\n const entry = findListenerEntry((entry) => {\r\n const matchPredicateOrType =\r\n typeof type === 'string'\r\n ? entry.type === type\r\n : entry.predicate === predicate\r\n\r\n return matchPredicateOrType && entry.effect === effect\r\n })\r\n\r\n if (entry) {\r\n entry.unsubscribe()\r\n if (options.cancelActive) {\r\n cancelActiveListeners(entry)\r\n }\r\n }\r\n\r\n return !!entry\r\n }\r\n\r\n const notifyListener = async (\r\n entry: ListenerEntry>,\r\n action: AnyAction,\r\n api: MiddlewareAPI,\r\n getOriginalState: () => S\r\n ) => {\r\n const internalTaskController = new AbortController()\r\n const take = createTakePattern(\r\n startListening,\r\n internalTaskController.signal\r\n )\r\n\r\n try {\r\n entry.pending.add(internalTaskController)\r\n await Promise.resolve(\r\n entry.effect(\r\n action,\r\n // Use assign() rather than ... to avoid extra helper functions added to bundle\r\n assign({}, api, {\r\n getOriginalState,\r\n condition: (\r\n predicate: AnyListenerPredicate,\r\n timeout?: number\r\n ) => take(predicate, timeout).then(Boolean),\r\n take,\r\n delay: createDelay(internalTaskController.signal),\r\n pause: createPause(internalTaskController.signal),\r\n extra,\r\n signal: internalTaskController.signal,\r\n fork: createFork(internalTaskController.signal),\r\n unsubscribe: entry.unsubscribe,\r\n subscribe: () => {\r\n listenerMap.set(entry.id, entry)\r\n },\r\n cancelActiveListeners: () => {\r\n entry.pending.forEach((controller, _, set) => {\r\n if (controller !== internalTaskController) {\r\n abortControllerWithReason(controller, listenerCancelled)\r\n set.delete(controller)\r\n }\r\n })\r\n },\r\n })\r\n )\r\n )\r\n } catch (listenerError) {\r\n if (!(listenerError instanceof TaskAbortError)) {\r\n safelyNotifyError(onError, listenerError, {\r\n raisedBy: 'effect',\r\n })\r\n }\r\n } finally {\r\n abortControllerWithReason(internalTaskController, listenerCompleted) // Notify that the task has completed\r\n entry.pending.delete(internalTaskController)\r\n }\r\n }\r\n\r\n const clearListenerMiddleware = createClearListenerMiddleware(listenerMap)\r\n\r\n const middleware: ListenerMiddleware =\r\n (api) => (next) => (action) => {\r\n if (addListener.match(action)) {\r\n return startListening(action.payload)\r\n }\r\n\r\n if (clearAllListeners.match(action)) {\r\n clearListenerMiddleware()\r\n return\r\n }\r\n\r\n if (removeListener.match(action)) {\r\n return stopListening(action.payload)\r\n }\r\n\r\n // Need to get this state _before_ the reducer processes the action\r\n let originalState: S | typeof INTERNAL_NIL_TOKEN = api.getState()\r\n\r\n // `getOriginalState` can only be called synchronously.\r\n // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820\r\n const getOriginalState = (): S => {\r\n if (originalState === INTERNAL_NIL_TOKEN) {\r\n throw new Error(\r\n `${alm}: getOriginalState can only be called synchronously`\r\n )\r\n }\r\n\r\n return originalState as S\r\n }\r\n\r\n let result: unknown\r\n\r\n try {\r\n // Actually forward the action to the reducer before we handle listeners\r\n result = next(action)\r\n\r\n if (listenerMap.size > 0) {\r\n let currentState = api.getState()\r\n // Work around ESBuild+TS transpilation issue\r\n const listenerEntries = Array.from(listenerMap.values())\r\n for (let entry of listenerEntries) {\r\n let runListener = false\r\n\r\n try {\r\n runListener = entry.predicate(action, currentState, originalState)\r\n } catch (predicateError) {\r\n runListener = false\r\n\r\n safelyNotifyError(onError, predicateError, {\r\n raisedBy: 'predicate',\r\n })\r\n }\r\n\r\n if (!runListener) {\r\n continue\r\n }\r\n\r\n notifyListener(entry, action, api, getOriginalState)\r\n }\r\n }\r\n } finally {\r\n // Remove `originalState` store from this scope.\r\n originalState = INTERNAL_NIL_TOKEN\r\n }\r\n\r\n return result\r\n }\r\n\r\n return {\r\n middleware,\r\n startListening,\r\n stopListening,\r\n clearListeners: clearListenerMiddleware,\r\n } as ListenerMiddlewareInstance\r\n}\r\n","import { enableES5 } from 'immer'\r\nexport * from 'redux'\r\nexport {\r\n default as createNextState,\r\n current,\r\n freeze,\r\n original,\r\n isDraft,\r\n} from 'immer'\r\nexport type { Draft } from 'immer'\r\nexport { createSelector } from 'reselect'\r\nexport type {\r\n Selector,\r\n OutputParametricSelector,\r\n OutputSelector,\r\n ParametricSelector,\r\n} from 'reselect'\r\nexport { createDraftSafeSelector } from './createDraftSafeSelector'\r\nexport type { ThunkAction, ThunkDispatch } from 'redux-thunk'\r\n\r\n// We deliberately enable Immer's ES5 support, on the grounds that\r\n// we assume RTK will be used with React Native and other Proxy-less\r\n// environments. In addition, that's how Immer 4 behaved, and since\r\n// we want to ship this in an RTK minor, we should keep the same behavior.\r\nenableES5()\r\n\r\nexport {\r\n // js\r\n configureStore,\r\n} from './configureStore'\r\nexport type {\r\n // types\r\n ConfigureEnhancersCallback,\r\n ConfigureStoreOptions,\r\n EnhancedStore,\r\n} from './configureStore'\r\nexport {\r\n // js\r\n createAction,\r\n getType,\r\n} from './createAction'\r\nexport type {\r\n // types\r\n PayloadAction,\r\n PayloadActionCreator,\r\n ActionCreatorWithNonInferrablePayload,\r\n ActionCreatorWithOptionalPayload,\r\n ActionCreatorWithPayload,\r\n ActionCreatorWithoutPayload,\r\n ActionCreatorWithPreparedPayload,\r\n PrepareAction,\r\n} from './createAction'\r\nexport {\r\n // js\r\n createReducer,\r\n} from './createReducer'\r\nexport type {\r\n // types\r\n Actions,\r\n CaseReducer,\r\n CaseReducers,\r\n} from './createReducer'\r\nexport {\r\n // js\r\n createSlice,\r\n} from './createSlice'\r\n\r\nexport type {\r\n // types\r\n CreateSliceOptions,\r\n Slice,\r\n CaseReducerActions,\r\n SliceCaseReducers,\r\n ValidateSliceCaseReducers,\r\n CaseReducerWithPrepare,\r\n SliceActionCreator,\r\n} from './createSlice'\r\nexport {\r\n // js\r\n createImmutableStateInvariantMiddleware,\r\n isImmutableDefault,\r\n} from './immutableStateInvariantMiddleware'\r\nexport type {\r\n // types\r\n ImmutableStateInvariantMiddlewareOptions,\r\n} from './immutableStateInvariantMiddleware'\r\nexport {\r\n // js\r\n createSerializableStateInvariantMiddleware,\r\n findNonSerializableValue,\r\n isPlain,\r\n} from './serializableStateInvariantMiddleware'\r\nexport type {\r\n // types\r\n SerializableStateInvariantMiddlewareOptions,\r\n} from './serializableStateInvariantMiddleware'\r\nexport {\r\n // js\r\n getDefaultMiddleware,\r\n} from './getDefaultMiddleware'\r\nexport type {\r\n // types\r\n ActionReducerMapBuilder,\r\n} from './mapBuilders'\r\nexport { MiddlewareArray } from './utils'\r\n\r\nexport { createEntityAdapter } from './entities/create_adapter'\r\nexport type {\r\n Dictionary,\r\n EntityState,\r\n EntityAdapter,\r\n EntitySelectors,\r\n EntityStateAdapter,\r\n EntityId,\r\n Update,\r\n IdSelector,\r\n Comparer,\r\n} from './entities/models'\r\n\r\nexport {\r\n createAsyncThunk,\r\n unwrapResult,\r\n miniSerializeError,\r\n} from './createAsyncThunk'\r\nexport type {\r\n AsyncThunk,\r\n AsyncThunkOptions,\r\n AsyncThunkAction,\r\n AsyncThunkPayloadCreatorReturnValue,\r\n AsyncThunkPayloadCreator,\r\n SerializedError,\r\n} from './createAsyncThunk'\r\n\r\nexport {\r\n // js\r\n isAllOf,\r\n isAnyOf,\r\n isPending,\r\n isRejected,\r\n isFulfilled,\r\n isAsyncThunkAction,\r\n isRejectedWithValue,\r\n} from './matchers'\r\nexport type {\r\n // types\r\n ActionMatchingAllOf,\r\n ActionMatchingAnyOf,\r\n} from './matchers'\r\n\r\nexport { nanoid } from './nanoid'\r\n\r\nexport { default as isPlainObject } from './isPlainObject'\r\n\r\nexport type {\r\n ListenerEffect,\r\n ListenerMiddleware,\r\n ListenerEffectAPI,\r\n ListenerMiddlewareInstance,\r\n CreateListenerMiddlewareOptions,\r\n ListenerErrorHandler,\r\n TypedStartListening,\r\n TypedAddListener,\r\n TypedStopListening,\r\n TypedRemoveListener,\r\n UnsubscribeListener,\r\n UnsubscribeListenerOptions,\r\n ForkedTaskExecutor,\r\n ForkedTask,\r\n ForkedTaskAPI,\r\n AsyncTaskExecutor,\r\n SyncTaskExecutor,\r\n TaskCancelled,\r\n TaskRejected,\r\n TaskResolved,\r\n TaskResult,\r\n} from './listenerMiddleware/index'\r\n\r\nexport {\r\n createListenerMiddleware,\r\n addListener,\r\n removeListener,\r\n clearAllListeners,\r\n TaskAbortError,\r\n} from './listenerMiddleware/index'\r\n","/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\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) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\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","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/*! https://mths.be/cssesc v3.0.0 by @mathias */\n'use strict';\n\nvar object = {};\nvar hasOwnProperty = object.hasOwnProperty;\nvar merge = function merge(options, defaults) {\n\tif (!options) {\n\t\treturn defaults;\n\t}\n\tvar result = {};\n\tfor (var key in defaults) {\n\t\t// `if (defaults.hasOwnProperty(key) { … }` is not needed here, since\n\t\t// only recognized option names are used.\n\t\tresult[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];\n\t}\n\treturn result;\n};\n\nvar regexAnySingleEscape = /[ -,\\.\\/:-@\\[-\\^`\\{-~]/;\nvar regexSingleEscape = /[ -,\\.\\/:-@\\[\\]\\^`\\{-~]/;\nvar regexAlwaysEscape = /['\"\\\\]/;\nvar regexExcessiveSpaces = /(^|\\\\+)?(\\\\[A-F0-9]{1,6})\\x20(?![a-fA-F0-9\\x20])/g;\n\n// https://mathiasbynens.be/notes/css-escapes#css\nvar cssesc = function cssesc(string, options) {\n\toptions = merge(options, cssesc.options);\n\tif (options.quotes != 'single' && options.quotes != 'double') {\n\t\toptions.quotes = 'single';\n\t}\n\tvar quote = options.quotes == 'double' ? '\"' : '\\'';\n\tvar isIdentifier = options.isIdentifier;\n\n\tvar firstChar = string.charAt(0);\n\tvar output = '';\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar character = string.charAt(counter++);\n\t\tvar codePoint = character.charCodeAt();\n\t\tvar value = void 0;\n\t\t// If it’s not a printable ASCII character…\n\t\tif (codePoint < 0x20 || codePoint > 0x7E) {\n\t\t\tif (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {\n\t\t\t\t// It’s a high surrogate, and there is a next character.\n\t\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t// next character is low surrogate\n\t\t\t\t\tcodePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;\n\t\t\t\t} else {\n\t\t\t\t\t// It’s an unmatched surrogate; only append this code unit, in case\n\t\t\t\t\t// the next code unit is the high surrogate of a surrogate pair.\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t} else {\n\t\t\tif (options.escapeEverything) {\n\t\t\t\tif (regexAnySingleEscape.test(character)) {\n\t\t\t\t\tvalue = '\\\\' + character;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t\t}\n\t\t\t} else if (/[\\t\\n\\f\\r\\x0B]/.test(character)) {\n\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t} else if (character == '\\\\' || !isIdentifier && (character == '\"' && quote == character || character == '\\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {\n\t\t\t\tvalue = '\\\\' + character;\n\t\t\t} else {\n\t\t\t\tvalue = character;\n\t\t\t}\n\t\t}\n\t\toutput += value;\n\t}\n\n\tif (isIdentifier) {\n\t\tif (/^-[-\\d]/.test(output)) {\n\t\t\toutput = '\\\\-' + output.slice(1);\n\t\t} else if (/\\d/.test(firstChar)) {\n\t\t\toutput = '\\\\3' + firstChar + ' ' + output.slice(1);\n\t\t}\n\t}\n\n\t// Remove spaces after `\\HEX` escapes that are not followed by a hex digit,\n\t// since they’re redundant. Note that this is only possible if the escape\n\t// sequence isn’t preceded by an odd number of backslashes.\n\toutput = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {\n\t\tif ($1 && $1.length % 2) {\n\t\t\t// It’s not safe to remove the space, so don’t.\n\t\t\treturn $0;\n\t\t}\n\t\t// Strip the space.\n\t\treturn ($1 || '') + $2;\n\t});\n\n\tif (!isIdentifier && options.wrap) {\n\t\treturn quote + output + quote;\n\t}\n\treturn output;\n};\n\n// Expose default options (so they can be overridden globally).\ncssesc.options = {\n\t'escapeEverything': false,\n\t'isIdentifier': false,\n\t'quotes': 'single',\n\t'wrap': false\n};\n\ncssesc.version = '3.0.0';\n\nmodule.exports = cssesc;\n","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, dirtyOptions);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n }\n}","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\n\nexport default function addDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n date.setDate(date.getDate() + amount);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\n\nexport default function addMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n\n var endOfDesiredMonth = new Date(date.getTime());\n endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n var daysInMonth = endOfDesiredMonth.getDate();\n\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return date;\n }\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\n\nexport default function addYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, amount * 12);\n}","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\n\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var startOfDayLeft = startOfDay(dirtyDateLeft);\n var startOfDayRight = startOfDay(dirtyDateRight);\n var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); // Round the number of days to the nearest integer\n // because the number of milliseconds in a day is not constant\n // (e.g. it's different in the day of the daylight saving time clock shift)\n\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\n\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n return yearDiff * 12 + monthDiff;\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\n\nfunction compareLocalAsc(dateLeft, dateRight) {\n var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 1)\n * )\n//=> 92\n */\n\n\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareLocalAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n dateLeft.setDate(dateLeft.getDate() - sign * difference); // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n var result = sign * (difference - isLastDayNotFull); // Prevent negative zero\n\n return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `eachDay` to `eachDayOfInterval`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))\n *\n * // v2.0.0 onward\n *\n * eachDayOfInterval(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }\n * )\n * ```\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\n\nexport default function eachDayOfInterval(dirtyInterval, options) {\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = options && 'step' in options ? Number(options.step) : 1;\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n\n return dates;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\n\nexport default function endOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport default function endOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear(), month + 1, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setDate(date.getDate() + diff);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function (date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function (date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function (date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function (date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function (date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function (date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function (date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function (date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function (date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;","import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function (date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function (date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function (date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function (date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function (date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function (date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function (date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function (date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function (date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function (date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;","import isValid from \"../isValid/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, formatterOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * var result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\n\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() > dateToCompare.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\n\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * var result = isEqual(\n * new Date(2014, 6, 2, 6, 30, 45, 0),\n * new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\n\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyLeftDate);\n var dateRight = toDate(dirtyRightDate);\n return dateLeft.getTime() === dateRight.getTime();\n}","import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * var result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n * \n * @example\n * // Are 4 September and 4 October in the same day?\n * var result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n * \n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * var result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\n\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * var result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * var result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\n\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\n\nexport default function isDate(value) {\n requiredArgs(1, arguments);\n return value instanceof Date || typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `false` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n\n if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n\n var date = toDate(dirtyDate);\n return !isNaN(Number(date));\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWeekend\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date falls on a weekend\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * const result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\n\nexport default function isWeekend(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var day = date.getDay();\n return day === 0 || day === 6;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval? (Including start and end.)\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isWithinRange` to `isWithinInterval`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * isWithinRange(\n * new Date(2014, 0, 3),\n * new Date(2014, 0, 1), new Date(2014, 0, 7)\n * )\n *\n * // v2.0.0 onward\n *\n * isWithinInterval(\n * new Date(2014, 0, 3),\n * { start: new Date(2014, 0, 1), end: new Date(2014, 0, 7) }\n * )\n * ```\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> false\n *\n * @example\n * // For date equal to interval start:\n * isWithinInterval(date, { start, end: date }) // => true\n *\n * @example\n * // For date equal to interval end:\n * isWithinInterval(date, { start: date, end }) // => true\n */\nexport default function isWithinInterval(dirtyDate, interval) {\n requiredArgs(2, arguments);\n var time = toDate(dirtyDate).getTime();\n var startTime = toDate(interval.start).getTime();\n var endTime = toDate(interval.end).getTime(); // Throw an exception if start date is after end date or if any date is `Invalid Date`\n\n if (!(startTime <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n\n return time >= startTime && time <= endTime;\n}","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\n\nvar formatDistance = function (token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n};\n\nexport default formatDistance;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\n\nvar formatRelative = function (token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, dirtyOptions) {\n var options = dirtyOptions || {};\n var context = options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n\n return valuesArray[index];\n };\n}","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nvar ordinalNumber = function (dirtyNumber, _options) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function (quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function (index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `max` function now accepts an array of dates rather than spread arguments.\n *\n * ```javascript\n * // Before v2.0.0\n * var date1 = new Date(1989, 6, 10)\n * var date2 = new Date(1987, 1, 11)\n * var maxDate = max(date1, date2)\n *\n * // v2.0.0 onward:\n * var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n * var maxDate = max(dates)\n * ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * var result = max([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\n\nexport default function max(dirtyDatesArray) {\n requiredArgs(1, arguments);\n var datesArray; // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n\n if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray; // If `dirtyDatesArray` is Array-like Object, convert to Array.\n } else if (typeof dirtyDatesArray === 'object' && dirtyDatesArray !== null) {\n datesArray = Array.prototype.slice.call(dirtyDatesArray);\n } else {\n // `dirtyDatesArray` is non-iterable, return Invalid Date\n return new Date(NaN);\n }\n\n var result;\n datesArray.forEach(function (dirtyDate) {\n var currentDate = toDate(dirtyDate);\n\n if (result === undefined || result < currentDate || isNaN(Number(currentDate))) {\n result = currentDate;\n }\n });\n return result || new Date(NaN);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name min\n * @category Common Helpers\n * @summary Returns the earliest of the given dates.\n *\n * @description\n * Returns the earliest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `min` function now accepts an array of dates rather than spread arguments.\n *\n * ```javascript\n * // Before v2.0.0\n * const date1 = new Date(1989, 6, 10)\n * const date2 = new Date(1987, 1, 11)\n * const minDate = min(date1, date2)\n *\n * // v2.0.0 onward:\n * const dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n * const minDate = min(dates)\n * ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} - the earliest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the earliest?\n * const result = min([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\n\nexport default function min(dirtyDatesArray) {\n requiredArgs(1, arguments);\n var datesArray; // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n\n if (dirtyDatesArray && typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray; // If `dirtyDatesArray` is Array-like Object, convert to Array.\n } else if (typeof dirtyDatesArray === 'object' && dirtyDatesArray !== null) {\n datesArray = Array.prototype.slice.call(dirtyDatesArray);\n } else {\n // `dirtyDatesArray` is non-iterable, return Invalid Date\n return new Date(NaN);\n }\n\n var result;\n datesArray.forEach(function (dirtyDate) {\n var currentDate = toDate(dirtyDate);\n\n if (result === undefined || result > currentDate || isNaN(currentDate.getDate())) {\n result = currentDate;\n }\n });\n return result || new Date(NaN);\n}","export default function assign(target, dirtyObject) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n dirtyObject = dirtyObject || {};\n\n for (var property in dirtyObject) {\n if (Object.prototype.hasOwnProperty.call(dirtyObject, property)) {\n target[property] = dirtyObject[property];\n }\n }\n\n return target;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {\n requiredArgs(2, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar MILLISECONDS_IN_SECOND = 1000;\nvar numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nvar timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};\n\nfunction parseNumericPattern(pattern, string, valueCallback) {\n var matchResult = string.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n var value = parseInt(matchResult[0], 10);\n return {\n value: valueCallback ? valueCallback(value) : value,\n rest: string.slice(matchResult[0].length)\n };\n}\n\nfunction parseTimezonePattern(pattern, string) {\n var matchResult = string.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: string.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * MILLISECONDS_IN_SECOND),\n rest: string.slice(matchResult[0].length)\n };\n}\n\nfunction parseAnyDigitsSigned(string, valueCallback) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, string, valueCallback);\n}\n\nfunction parseNDigits(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, string, valueCallback);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, string, valueCallback);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, string, valueCallback);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, string, valueCallback);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), string, valueCallback);\n }\n}\n\nfunction parseNDigitsSigned(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, string, valueCallback);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, string, valueCallback);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, string, valueCallback);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, string, valueCallback);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), string, valueCallback);\n }\n}\n\nfunction dayPeriodEnumToHours(enumValue) {\n switch (enumValue) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\n\nfunction normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // User for validation\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\n\n\nvar parsers = {\n // Era\n G: {\n priority: 140,\n parse: function (string, token, match, _options) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(string, {\n width: 'abbreviated'\n }) || match.era(string, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(string, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(string, {\n width: 'wide'\n }) || match.era(string, {\n width: 'abbreviated'\n }) || match.era(string, {\n width: 'narrow'\n });\n }\n },\n set: function (date, flags, value, _options) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['R', 'u', 't', 'T']\n },\n // Year\n y: {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n priority: 130,\n parse: function (string, token, match, _options) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return parseNDigits(4, string, valueCallback);\n\n case 'yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n });\n\n default:\n return parseNDigits(token.length, string, valueCallback);\n }\n },\n validate: function (_date, value, _options) {\n return value.isTwoDigitYear || value.year > 0;\n },\n set: function (date, flags, value, _options) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n },\n // Local week-numbering year\n Y: {\n priority: 130,\n parse: function (string, token, match, _options) {\n var valueCallback = function (year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return parseNDigits(4, string, valueCallback);\n\n case 'Yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n });\n\n default:\n return parseNDigits(token.length, string, valueCallback);\n }\n },\n validate: function (_date, value, _options) {\n return value.isTwoDigitYear || value.year > 0;\n },\n set: function (date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n },\n incompatibleTokens: ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n },\n // ISO week-numbering year\n R: {\n priority: 130,\n parse: function (string, token, _match, _options) {\n if (token === 'R') {\n return parseNDigitsSigned(4, string);\n }\n\n return parseNDigitsSigned(token.length, string);\n },\n set: function (_date, _flags, value, _options) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n },\n incompatibleTokens: ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n },\n // Extended year\n u: {\n priority: 130,\n parse: function (string, token, _match, _options) {\n if (token === 'u') {\n return parseNDigitsSigned(4, string);\n }\n\n return parseNDigitsSigned(token.length, string);\n },\n set: function (date, _flags, value, _options) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n },\n // Quarter\n Q: {\n priority: 120,\n parse: function (string, token, match, _options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, string);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(string, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 4;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Stand-alone quarter\n q: {\n priority: 120,\n parse: function (string, token, match, _options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, string);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(string, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 4;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Month\n M: {\n priority: 110,\n parse: function (string, token, match, _options) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return parseNumericPattern(numericPatterns.month, string, valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return parseNDigits(2, string, valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Stand-alone month\n L: {\n priority: 110,\n parse: function (string, token, match, _options) {\n var valueCallback = function (value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return parseNumericPattern(numericPatterns.month, string, valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return parseNDigits(2, string, valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Local week of year\n w: {\n priority: 100,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, string);\n\n case 'wo':\n return match.ordinalNumber(string, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 53;\n },\n set: function (date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n },\n // ISO week of year\n I: {\n priority: 100,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, string);\n\n case 'Io':\n return match.ordinalNumber(string, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 53;\n },\n set: function (date, _flags, value, options) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options);\n },\n incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n },\n // Day of the month\n d: {\n priority: 90,\n subPriority: 1,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, string);\n\n case 'do':\n return match.ordinalNumber(string, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (date, value, _options) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Day of year\n D: {\n priority: 90,\n subPriority: 1,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, string);\n\n case 'Do':\n return match.ordinalNumber(string, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (date, value, _options) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']\n },\n // Day of week\n E: {\n priority: 90,\n parse: function (string, token, match, _options) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function (date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['D', 'i', 'e', 'c', 't', 'T']\n },\n // Local day of week\n e: {\n priority: 90,\n parse: function (string, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return parseNDigits(token.length, string, valueCallback);\n // 3rd\n\n case 'eo':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n });\n // Tue\n\n case 'eee':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function (date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']\n },\n // Stand-alone local day of week\n c: {\n priority: 90,\n parse: function (string, token, match, options) {\n var valueCallback = function (value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return parseNDigits(token.length, string, valueCallback);\n // 3rd\n\n case 'co':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n });\n // Tue\n\n case 'ccc':\n return match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function (date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']\n },\n // ISO day of week\n i: {\n priority: 90,\n parse: function (string, token, match, _options) {\n var valueCallback = function (value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, string);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(string, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // T\n\n case 'iiiii':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // Tu\n\n case 'iiiiii':\n return match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // Tuesday\n\n case 'iiii':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 7;\n },\n set: function (date, _flags, value, options) {\n date = setUTCISODay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']\n },\n // AM or PM\n a: {\n priority: 80,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['b', 'B', 'H', 'k', 't', 'T']\n },\n // AM, PM, midnight\n b: {\n priority: 80,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'B', 'H', 'k', 't', 'T']\n },\n // in the morning, in the afternoon, in the evening, at night\n B: {\n priority: 80,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 't', 'T']\n },\n // Hour [1-12]\n h: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, string);\n\n case 'ho':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 12;\n },\n set: function (date, _flags, value, _options) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n },\n incompatibleTokens: ['H', 'K', 'k', 't', 'T']\n },\n // Hour [0-23]\n H: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, string);\n\n case 'Ho':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 23;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'K', 'k', 't', 'T']\n },\n // Hour [0-11]\n K: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, string);\n\n case 'Ko':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function (date, _flags, value, _options) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n },\n incompatibleTokens: ['h', 'H', 'k', 't', 'T']\n },\n // Hour [1-24]\n k: {\n priority: 70,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, string);\n\n case 'ko':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 1 && value <= 24;\n },\n set: function (date, _flags, value, _options) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'H', 'K', 't', 'T']\n },\n // Minute\n m: {\n priority: 60,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, string);\n\n case 'mo':\n return match.ordinalNumber(string, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 59;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Second\n s: {\n priority: 50,\n parse: function (string, token, match, _options) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, string);\n\n case 'so':\n return match.ordinalNumber(string, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function (_date, value, _options) {\n return value >= 0 && value <= 59;\n },\n set: function (date, _flags, value, _options) {\n date.setUTCSeconds(value, 0);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Fraction of second\n S: {\n priority: 30,\n parse: function (string, token, _match, _options) {\n var valueCallback = function (value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return parseNDigits(token.length, string, valueCallback);\n },\n set: function (date, _flags, value, _options) {\n date.setUTCMilliseconds(value);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Timezone (ISO-8601. +00:00 is `'Z'`)\n X: {\n priority: 10,\n parse: function (string, token, _match, _options) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, string);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string);\n }\n },\n set: function (date, flags, value, _options) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n },\n incompatibleTokens: ['t', 'T', 'x']\n },\n // Timezone (ISO-8601)\n x: {\n priority: 10,\n parse: function (string, token, _match, _options) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, string);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string);\n }\n },\n set: function (date, flags, value, _options) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n },\n incompatibleTokens: ['t', 'T', 'X']\n },\n // Seconds timestamp\n t: {\n priority: 40,\n parse: function (string, _token, _match, _options) {\n return parseAnyDigitsSigned(string);\n },\n set: function (_date, _flags, value, _options) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n },\n incompatibleTokens: '*'\n },\n // Milliseconds timestamp\n T: {\n priority: 20,\n parse: function (string, _token, _match, _options) {\n return parseAnyDigitsSigned(string);\n },\n set: function (_date, _flags, value, _options) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n },\n incompatibleTokens: '*'\n }\n};\nexport default parsers;","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport parsers from \"./_lib/parsers/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar TIMEZONE_UNIT_PRIORITY = 10; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n * Now `parse` is a new function which parses a string using a provided format.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward (toDate no longer accepts a string)\n * toDate(1392098430000) // Unix to timestamp\n * toDate(new Date(2014, 1, 11, 11, 30, 30)) // Cloning the date\n * parse('2016-01-01', 'yyyy-MM-dd', new Date())\n * ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, dirtyOptions) {\n requiredArgs(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [{\n priority: TIMEZONE_UNIT_PRIORITY,\n subPriority: -1,\n set: dateToSystemTimezone,\n index: 0\n }];\n var i;\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, subFnOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n for (i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = void 0;\n\n for (var _i = 0; _i < usedTokens.length; _i++) {\n var usedToken = usedTokens[_i].token;\n\n if (incompatibleTokens.indexOf(usedToken) !== -1 || usedToken === firstCharacter) {\n incompatibleToken = usedTokens[_i];\n break;\n }\n }\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.parse(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return new Date(NaN);\n }\n\n setters.push({\n priority: parser.priority,\n subPriority: parser.subPriority || 0,\n set: parser.set,\n validate: parser.validate,\n value: parseResult.value,\n index: setters.length\n });\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return new Date(NaN);\n }\n }\n } // Check if the remaining input contains something other than whitespace\n\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date)) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n for (i = 0; i < uniquePrioritySetters.length; i++) {\n var setter = uniquePrioritySetters[i];\n\n if (setter.validate && !setter.validate(utcDate, setter.value, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, setter.value, subFnOptions); // Result is tuple (date, flags)\n\n if (result[0]) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n\n return utcDate;\n}\n\nfunction dateToSystemTimezone(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\n\nexport default function getDaysInMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n var monthIndex = date.getMonth();\n var lastDayOfMonth = new Date(0);\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getDaysInMonth from \"../getDaysInMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\n\nexport default function setMonth(dirtyDate, dirtyMonth) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var month = toInteger(dirtyMonth);\n var year = date.getFullYear();\n var day = date.getDate();\n var dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setFullYear(year, month, 15);\n dateWithDesiredMonth.setHours(0, 0, 0, 0);\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth); // Set the last day of the new month\n // if the original date was the last day of the longer month\n\n date.setMonth(month, Math.min(day, daysInMonth));\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\n\nexport default function setYear(dirtyDate, dirtyYear) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var year = toInteger(dirtyYear); // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n }\n\n date.setFullYear(year);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\n\nexport default function startOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function subMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, -amount);\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v16.13.1\n * react-is.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\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","const errors = {\n\t0: \"Illegal state\",\n\t1: \"Immer drafts cannot have computed properties\",\n\t2: \"This object has been frozen and should not be mutated\",\n\t3(data: any) {\n\t\treturn (\n\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\tdata\n\t\t)\n\t},\n\t4: \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t5: \"Immer forbids circular references\",\n\t6: \"The first or second argument to `produce` must be a function\",\n\t7: \"The third argument to `produce` must be a function or undefined\",\n\t8: \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t9: \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t10: \"The given draft is already finalized\",\n\t11: \"Object.defineProperty() cannot be used on an Immer draft\",\n\t12: \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t13: \"Immer only supports deleting array indices\",\n\t14: \"Immer only supports setting array indices and the 'length' property\",\n\t15(path: string) {\n\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t},\n\t16: 'Sets cannot have \"replace\" patches.',\n\t17(op: string) {\n\t\treturn \"Unsupported patch operation: \" + op\n\t},\n\t18(plugin: string) {\n\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t},\n\t20: \"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",\n\t21(thing: string) {\n\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t},\n\t22(thing: string) {\n\t\treturn `'current' expects a draft, got: ${thing}`\n\t},\n\t23(thing: string) {\n\t\treturn `'original' expects a draft, got: ${thing}`\n\t},\n\t24: \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n} as const\n\nexport function die(error: keyof typeof errors, ...args: any[]): never {\n\tif (__DEV__) {\n\t\tconst e = errors[error]\n\t\tconst msg = !e\n\t\t\t? \"unknown error nr: \" + error\n\t\t\t: typeof e === \"function\"\n\t\t\t? e.apply(null, args as any)\n\t\t\t: e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}${\n\t\t\targs.length ? \" \" + args.map(s => `'${s}'`).join(\",\") : \"\"\n\t\t}. Find the full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\thasSet,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\thasMap,\n\tArchtype,\n\tdie\n} from \"../internal\"\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = Object.getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original(value: T): T | undefined\nexport function original(value: Drafted): any {\n\tif (!isDraft(value)) die(23, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/*#__PURE__*/\nexport const ownKeys: (target: AnyObject) => PropertyKey[] =\n\ttypeof Reflect !== \"undefined\" && Reflect.ownKeys\n\t\t? Reflect.ownKeys\n\t\t: typeof Object.getOwnPropertySymbols !== \"undefined\"\n\t\t? obj =>\n\t\t\t\tObject.getOwnPropertyNames(obj).concat(\n\t\t\t\t\tObject.getOwnPropertySymbols(obj) as any\n\t\t\t\t)\n\t\t: /* istanbul ignore next */ Object.getOwnPropertyNames\n\nexport const getOwnPropertyDescriptors =\n\tObject.getOwnPropertyDescriptors ||\n\tfunction getOwnPropertyDescriptors(target: any) {\n\t\t// Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274\n\t\tconst res: any = {}\n\t\townKeys(target).forEach(key => {\n\t\t\tres[key] = Object.getOwnPropertyDescriptor(target, key)\n\t\t})\n\t\treturn res\n\t}\n\nexport function each(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void,\n\tenumerableOnly?: boolean\n): void\nexport function each(obj: any, iter: any, enumerableOnly = false) {\n\tif (getArchtype(obj) === Archtype.Object) {\n\t\t;(enumerableOnly ? Object.keys : ownKeys)(obj).forEach(key => {\n\t\t\tif (!enumerableOnly || typeof key !== \"symbol\") iter(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): Archtype {\n\t/* istanbul ignore next */\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_ > 3\n\t\t\t? state.type_ - 4 // cause Object and Array map back from 4 and 5\n\t\t\t: (state.type_ as any) // others are the same\n\t\t: Array.isArray(thing)\n\t\t? Archtype.Array\n\t\t: isMap(thing)\n\t\t? Archtype.Map\n\t\t: isSet(thing)\n\t\t? Archtype.Set\n\t\t: Archtype.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === Archtype.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === Archtype.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === Archtype.Map) thing.set(propOrOldValue, value)\n\telse if (t === Archtype.Set) {\n\t\tthing.delete(propOrOldValue)\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn hasMap && target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn hasSet && target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any) {\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\tconst descriptors = getOwnPropertyDescriptors(base)\n\tdelete descriptors[DRAFT_STATE as any]\n\tlet keys = ownKeys(descriptors)\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key: any = keys[i]\n\t\tconst desc = descriptors[key]\n\t\tif (desc.writable === false) {\n\t\t\tdesc.writable = true\n\t\t\tdesc.configurable = true\n\t\t}\n\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t// with libraries that trap values, like mobx or vue\n\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\tif (desc.get || desc.set)\n\t\t\tdescriptors[key] = {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\tvalue: base[key]\n\t\t\t}\n\t}\n\treturn Object.create(Object.getPrototypeOf(base), descriptors)\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze(obj: T, deep?: boolean): T\nexport function freeze(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep) each(obj, (key, value) => freeze(value, true), true)\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\tif (obj == null || typeof obj !== \"object\") return true\n\t// See #600, IE dies on non-objects in Object.isFrozen\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tImmerScope,\n\tDrafted,\n\tAnyObject,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tProxyType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_(draft: T, patches: Patch[]): T\n\t}\n\tES5?: {\n\t\twillFinalizeES5_(scope: ImmerScope, result: any, isReplaced: boolean): void\n\t\tcreateES5Proxy_(\n\t\t\tbase: T,\n\t\t\tparent?: ImmerState\n\t\t): Drafted\n\t\thasChanges_(state: ES5ArrayState | ES5ObjectState): boolean\n\t}\n\tMapSet?: {\n\t\tproxyMap_(target: T, parent?: ImmerState): T\n\t\tproxySet_(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin(\n\tpluginKey: K\n): Exclude {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(18, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n\n/** ES5 Plugin */\n\ninterface ES5BaseState extends ImmerBaseState {\n\tassigned_: {[key: string]: any}\n\tparent_?: ImmerState\n\trevoked_: boolean\n}\n\nexport interface ES5ObjectState extends ES5BaseState {\n\ttype_: ProxyType.ES5Object\n\tdraft_: Drafted\n\tbase_: AnyObject\n\tcopy_: AnyObject | null\n}\n\nexport interface ES5ArrayState extends ES5BaseState {\n\ttype_: ProxyType.ES5Array\n\tdraft_: Drafted\n\tbase_: any\n\tcopy_: any\n}\n\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ProxyType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ProxyType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tProxyType,\n\tgetPlugin\n} from \"../internal\"\nimport {die} from \"../utils/errors\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\tif (__DEV__ && !currentScope) die(0)\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (\n\t\tstate.type_ === ProxyType.ProxyObject ||\n\t\tstate.type_ === ProxyType.ProxyArray\n\t)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tProxyType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen,\n\tshallowCopy\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (!scope.immer_.useProxies_)\n\t\tgetPlugin(\"ES5\").willFinalizeES5_(scope, result, isReplaced)\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(\n\t\t\tvalue,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path),\n\t\t\ttrue // See #590, don't recurse into non-enumerable of non drafted objects\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result =\n\t\t\t// For ES5, create a good copy from the draft first, with added keys and without deleted keys.\n\t\t\tstate.type_ === ProxyType.ES5Object || state.type_ === ProxyType.ES5Array\n\t\t\t\t? (state.copy_ = shallowCopy(state.draft_))\n\t\t\t\t: state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// Although the original test case doesn't seem valid anyway, so if this in the way we can turn the next line\n\t\t// back to each(result, ....)\n\t\teach(\n\t\t\tstate.type_ === ProxyType.Set ? new Set(result) : result,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath\n) {\n\tif (__DEV__ && childValue === targetObject) die(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ProxyType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\tif (!parentState || !parentState.scope_.parent_)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\tif (scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tProxyType\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ProxyType.ProxyObject\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ProxyType.ProxyArray\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ProxyType.ProxyArray : (ProxyType.ProxyObject as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(\n\t\t\t\tstate.scope_.immer_,\n\t\t\t\tvalue,\n\t\t\t\tstate\n\t\t\t))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\tstate.copy_![prop] === value &&\n\t\t\t// special case: NaN\n\t\t\ttypeof value !== \"number\" &&\n\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t(value !== undefined || prop in state.copy_)\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\t// @ts-ignore\n\t\tif (state.copy_) delete state.copy_[prop]\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ProxyType.ProxyArray || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn Object.getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (__DEV__ && isNaN(parseInt(prop as any))) die(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (__DEV__ && prop !== \"length\" && isNaN(parseInt(prop as any))) die(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t // prototype, we should invoke it with the draft as context!\n\t\t\t desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = Object.getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = Object.getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {base_: any; copy_: any}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(state.base_)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\thasProxies,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport class Immer implements ProducersFns {\n\tuseProxies_: boolean = hasProxies\n\n\tautoFreeze_: boolean = true\n\n\tconstructor(config?: {useProxies?: boolean; autoFreeze?: boolean}) {\n\t\tif (typeof config?.useProxies === \"boolean\")\n\t\t\tthis.setUseProxies(config!.useProxies)\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(this, base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tif (typeof Promise !== \"undefined\" && result instanceof Promise) {\n\t\t\t\treturn result.then(\n\t\t\t\t\tresult => {\n\t\t\t\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\t\t\t\treturn processResult(result, scope)\n\t\t\t\t\t},\n\t\t\t\t\terror => {\n\t\t\t\t\t\trevokeScope(scope)\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(21, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (\n\t\targ1: any,\n\t\targ2?: any,\n\t\targ3?: any\n\t): any => {\n\t\tif (typeof arg1 === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => arg1(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(arg1, arg2, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\n\t\tif (typeof Promise !== \"undefined\" && result instanceof Promise) {\n\t\t\treturn result.then(nextState => [nextState, patches!, inversePatches!])\n\t\t}\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft(base: T): Draft {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(this, base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (__DEV__) {\n\t\t\tif (!state || !state.isManual_) die(9)\n\t\t\tif (state.finalized_) die(10)\n\t\t}\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to use the ES2015 `Proxy` class when creating drafts, which is\n\t * always faster than using ES5 proxies.\n\t *\n\t * By default, feature detection is used, so calling this is rarely necessary.\n\t */\n\tsetUseProxies(value: boolean) {\n\t\tif (value && !hasProxies) {\n\t\t\tdie(20)\n\t\t}\n\t\tthis.useProxies_ = value\n\t}\n\n\tapplyPatches(base: T, patches: Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy(\n\timmer: Immer,\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: immer.useProxies_\n\t\t? createProxyProxy(value, parent)\n\t\t: getPlugin(\"ES5\").createES5Proxy_(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tget,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tArchtype,\n\tgetArchtype,\n\tgetPlugin\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(22, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tconst archType = getArchtype(value)\n\tif (state) {\n\t\tif (\n\t\t\t!state.modified_ &&\n\t\t\t(state.type_ < 4 || !getPlugin(\"ES5\").hasChanges_(state as any))\n\t\t)\n\t\t\treturn state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = copyHelper(value, archType)\n\t\tstate.finalized_ = false\n\t} else {\n\t\tcopy = copyHelper(value, archType)\n\t}\n\n\teach(copy, (key, childValue) => {\n\t\tif (state && get(state.base_, key) === childValue) return // no need to copy or search in something that didn't change\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\t// In the future, we might consider freezing here, based on the current settings\n\treturn archType === Archtype.Set ? new Set(copy) : copy\n}\n\nfunction copyHelper(value: any, archType: number): any {\n\t// creates a shallow copy, even if it is a map or set\n\tswitch (archType) {\n\t\tcase Archtype.Map:\n\t\t\treturn new Map(value)\n\t\tcase Archtype.Set:\n\t\t\t// Set will be cloned as array temporarily, so that we can replace individual items\n\t\t\treturn Array.from(value)\n\t}\n\treturn shallowCopy(value)\n}\n","import {\n\tImmerState,\n\tDrafted,\n\tES5ArrayState,\n\tES5ObjectState,\n\teach,\n\thas,\n\tisDraft,\n\tlatest,\n\tDRAFT_STATE,\n\tis,\n\tloadPlugin,\n\tImmerScope,\n\tProxyType,\n\tgetCurrentScope,\n\tdie,\n\tmarkChanged,\n\tobjectTraps,\n\townKeys,\n\tgetOwnPropertyDescriptors\n} from \"../internal\"\n\ntype ES5State = ES5ArrayState | ES5ObjectState\n\nexport function enableES5() {\n\tfunction willFinalizeES5_(\n\t\tscope: ImmerScope,\n\t\tresult: any,\n\t\tisReplaced: boolean\n\t) {\n\t\tif (!isReplaced) {\n\t\t\tif (scope.patches_) {\n\t\t\t\tmarkChangesRecursively(scope.drafts_![0])\n\t\t\t}\n\t\t\t// This is faster when we don't care about which attributes changed.\n\t\t\tmarkChangesSweep(scope.drafts_)\n\t\t}\n\t\t// When a child draft is returned, look for changes.\n\t\telse if (\n\t\t\tisDraft(result) &&\n\t\t\t(result[DRAFT_STATE] as ES5State).scope_ === scope\n\t\t) {\n\t\t\tmarkChangesSweep(scope.drafts_)\n\t\t}\n\t}\n\n\tfunction createES5Draft(isArray: boolean, base: any) {\n\t\tif (isArray) {\n\t\t\tconst draft = new Array(base.length)\n\t\t\tfor (let i = 0; i < base.length; i++)\n\t\t\t\tObject.defineProperty(draft, \"\" + i, proxyProperty(i, true))\n\t\t\treturn draft\n\t\t} else {\n\t\t\tconst descriptors = getOwnPropertyDescriptors(base)\n\t\t\tdelete descriptors[DRAFT_STATE as any]\n\t\t\tconst keys = ownKeys(descriptors)\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst key: any = keys[i]\n\t\t\t\tdescriptors[key] = proxyProperty(\n\t\t\t\t\tkey,\n\t\t\t\t\tisArray || !!descriptors[key].enumerable\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn Object.create(Object.getPrototypeOf(base), descriptors)\n\t\t}\n\t}\n\n\tfunction createES5Proxy_(\n\t\tbase: T,\n\t\tparent?: ImmerState\n\t): Drafted {\n\t\tconst isArray = Array.isArray(base)\n\t\tconst draft = createES5Draft(isArray, base)\n\n\t\tconst state: ES5ObjectState | ES5ArrayState = {\n\t\t\ttype_: isArray ? ProxyType.ES5Array : (ProxyType.ES5Object as any),\n\t\t\tscope_: parent ? parent.scope_ : getCurrentScope(),\n\t\t\tmodified_: false,\n\t\t\tfinalized_: false,\n\t\t\tassigned_: {},\n\t\t\tparent_: parent,\n\t\t\t// base is the object we are drafting\n\t\t\tbase_: base,\n\t\t\t// draft is the draft object itself, that traps all reads and reads from either the base (if unmodified) or copy (if modified)\n\t\t\tdraft_: draft,\n\t\t\tcopy_: null,\n\t\t\trevoked_: false,\n\t\t\tisManual_: false\n\t\t}\n\n\t\tObject.defineProperty(draft, DRAFT_STATE, {\n\t\t\tvalue: state,\n\t\t\t// enumerable: false <- the default\n\t\t\twritable: true\n\t\t})\n\t\treturn draft\n\t}\n\n\t// property descriptors are recycled to make sure we don't create a get and set closure per property,\n\t// but share them all instead\n\tconst descriptors: {[prop: string]: PropertyDescriptor} = {}\n\n\tfunction proxyProperty(\n\t\tprop: string | number,\n\t\tenumerable: boolean\n\t): PropertyDescriptor {\n\t\tlet desc = descriptors[prop]\n\t\tif (desc) {\n\t\t\tdesc.enumerable = enumerable\n\t\t} else {\n\t\t\tdescriptors[prop] = desc = {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable,\n\t\t\t\tget(this: any) {\n\t\t\t\t\tconst state = this[DRAFT_STATE]\n\t\t\t\t\tif (__DEV__) assertUnrevoked(state)\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\treturn objectTraps.get(state, prop)\n\t\t\t\t},\n\t\t\t\tset(this: any, value) {\n\t\t\t\t\tconst state = this[DRAFT_STATE]\n\t\t\t\t\tif (__DEV__) assertUnrevoked(state)\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tobjectTraps.set(state, prop, value)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn desc\n\t}\n\n\t// This looks expensive, but only proxies are visited, and only objects without known changes are scanned.\n\tfunction markChangesSweep(drafts: Drafted[]) {\n\t\t// The natural order of drafts in the `scope` array is based on when they\n\t\t// were accessed. By processing drafts in reverse natural order, we have a\n\t\t// better chance of processing leaf nodes first. When a leaf node is known to\n\t\t// have changed, we can avoid any traversal of its ancestor nodes.\n\t\tfor (let i = drafts.length - 1; i >= 0; i--) {\n\t\t\tconst state: ES5State = drafts[i][DRAFT_STATE]\n\t\t\tif (!state.modified_) {\n\t\t\t\tswitch (state.type_) {\n\t\t\t\t\tcase ProxyType.ES5Array:\n\t\t\t\t\t\tif (hasArrayChanges(state)) markChanged(state)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase ProxyType.ES5Object:\n\t\t\t\t\t\tif (hasObjectChanges(state)) markChanged(state)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction markChangesRecursively(object: any) {\n\t\tif (!object || typeof object !== \"object\") return\n\t\tconst state: ES5State | undefined = object[DRAFT_STATE]\n\t\tif (!state) return\n\t\tconst {base_, draft_, assigned_, type_} = state\n\t\tif (type_ === ProxyType.ES5Object) {\n\t\t\t// Look for added keys.\n\t\t\t// probably there is a faster way to detect changes, as sweep + recurse seems to do some\n\t\t\t// unnecessary work.\n\t\t\t// also: probably we can store the information we detect here, to speed up tree finalization!\n\t\t\teach(draft_, key => {\n\t\t\t\tif ((key as any) === DRAFT_STATE) return\n\t\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\t\tif ((base_ as any)[key] === undefined && !has(base_, key)) {\n\t\t\t\t\tassigned_[key] = true\n\t\t\t\t\tmarkChanged(state)\n\t\t\t\t} else if (!assigned_[key]) {\n\t\t\t\t\t// Only untouched properties trigger recursion.\n\t\t\t\t\tmarkChangesRecursively(draft_[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\t// Look for removed keys.\n\t\t\teach(base_, key => {\n\t\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\t\tif (draft_[key] === undefined && !has(draft_, key)) {\n\t\t\t\t\tassigned_[key] = false\n\t\t\t\t\tmarkChanged(state)\n\t\t\t\t}\n\t\t\t})\n\t\t} else if (type_ === ProxyType.ES5Array) {\n\t\t\tif (hasArrayChanges(state as ES5ArrayState)) {\n\t\t\t\tmarkChanged(state)\n\t\t\t\tassigned_.length = true\n\t\t\t}\n\n\t\t\tif (draft_.length < base_.length) {\n\t\t\t\tfor (let i = draft_.length; i < base_.length; i++) assigned_[i] = false\n\t\t\t} else {\n\t\t\t\tfor (let i = base_.length; i < draft_.length; i++) assigned_[i] = true\n\t\t\t}\n\n\t\t\t// Minimum count is enough, the other parts has been processed.\n\t\t\tconst min = Math.min(draft_.length, base_.length)\n\n\t\t\tfor (let i = 0; i < min; i++) {\n\t\t\t\t// Only untouched indices trigger recursion.\n\t\t\t\tif (!draft_.hasOwnProperty(i)) {\n\t\t\t\t\tassigned_[i] = true\n\t\t\t\t}\n\t\t\t\tif (assigned_[i] === undefined) markChangesRecursively(draft_[i])\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasObjectChanges(state: ES5ObjectState) {\n\t\tconst {base_, draft_} = state\n\n\t\t// Search for added keys and changed keys. Start at the back, because\n\t\t// non-numeric keys are ordered by time of definition on the object.\n\t\tconst keys = ownKeys(draft_)\n\t\tfor (let i = keys.length - 1; i >= 0; i--) {\n\t\t\tconst key: any = keys[i]\n\t\t\tif (key === DRAFT_STATE) continue\n\t\t\tconst baseValue = base_[key]\n\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\tif (baseValue === undefined && !has(base_, key)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// Once a base key is deleted, future changes go undetected, because its\n\t\t\t// descriptor is erased. This branch detects any missed changes.\n\t\t\telse {\n\t\t\t\tconst value = draft_[key]\n\t\t\t\tconst state: ImmerState = value && value[DRAFT_STATE]\n\t\t\t\tif (state ? state.base_ !== baseValue : !is(value, baseValue)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// At this point, no keys were added or changed.\n\t\t// Compare key count to determine if keys were deleted.\n\t\tconst baseIsDraft = !!base_[DRAFT_STATE as any]\n\t\treturn keys.length !== ownKeys(base_).length + (baseIsDraft ? 0 : 1) // + 1 to correct for DRAFT_STATE\n\t}\n\n\tfunction hasArrayChanges(state: ES5ArrayState) {\n\t\tconst {draft_} = state\n\t\tif (draft_.length !== state.base_.length) return true\n\t\t// See #116\n\t\t// If we first shorten the length, our array interceptors will be removed.\n\t\t// If after that new items are added, result in the same original length,\n\t\t// those last items will have no intercepting property.\n\t\t// So if there is no own descriptor on the last position, we know that items were removed and added\n\t\t// N.B.: splice, unshift, etc only shift values around, but not prop descriptors, so we only have to check\n\t\t// the last one\n\t\t// last descriptor can be not a trap, if the array was extended\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(\n\t\t\tdraft_,\n\t\t\tdraft_.length - 1\n\t\t)\n\t\t// descriptor can be null, but only for newly created sparse arrays, eg. new Array(10)\n\t\tif (descriptor && !descriptor.get) return true\n\t\t// if we miss a property, it has been deleted, so array probobaly changed\n\t\tfor (let i = 0; i < draft_.length; i++) {\n\t\t\tif (!draft_.hasOwnProperty(i)) return true\n\t\t}\n\t\t// For all other cases, we don't have to compare, as they would have been picked up by the index setters\n\t\treturn false\n\t}\n\n\tfunction hasChanges_(state: ES5State) {\n\t\treturn state.type_ === ProxyType.ES5Object\n\t\t\t? hasObjectChanges(state)\n\t\t\t: hasArrayChanges(state)\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"ES5\", {\n\t\tcreateES5Proxy_,\n\t\twillFinalizeES5_,\n\t\thasChanges_\n\t})\n}\n","import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tES5ArrayState,\n\tProxyArrayState,\n\tMapState,\n\tES5ObjectState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tProxyType,\n\tArchtype,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ProxyType.ProxyObject:\n\t\t\tcase ProxyType.ES5Object:\n\t\t\tcase ProxyType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ProxyType.ES5Array:\n\t\t\tcase ProxyType.ProxyArray:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ProxyType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ES5ArrayState | ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tif (base_.length < copy_.length) {\n\t\t\tinversePatches.push({\n\t\t\t\top: REPLACE,\n\t\t\t\tpath: basePath.concat([\"length\"]),\n\t\t\t\tvalue: base_.length\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ES5ObjectState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\tbaseValue: any,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: baseValue\n\t\t})\n\t}\n\n\tfunction applyPatches_(draft: T, patches: Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tconst p = \"\" + path[i]\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === Archtype.Object || parentType === Archtype.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(24)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\") die(24)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(15, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase Archtype.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase Archtype.Set:\n\t\t\t\t\t\t\tdie(16)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase Archtype.Array:\n\t\t\t\t\t\t\treturn key === \"-\"\n\t\t\t\t\t\t\t\t? base.push(value)\n\t\t\t\t\t\t\t\t: base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase Archtype.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase Archtype.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase Archtype.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase Archtype.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase Archtype.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(17, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(Object.getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n","// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\titeratorSymbol,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tProxyType,\n\tdie,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\t/* istanbul ignore next */\n\tvar extendStatics = function(d: any, b: any): any {\n\t\textendStatics =\n\t\t\tObject.setPrototypeOf ||\n\t\t\t({__proto__: []} instanceof Array &&\n\t\t\t\tfunction(d, b) {\n\t\t\t\t\td.__proto__ = b\n\t\t\t\t}) ||\n\t\t\tfunction(d, b) {\n\t\t\t\tfor (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]\n\t\t\t}\n\t\treturn extendStatics(d, b)\n\t}\n\n\t// Ugly hack to resolve #502 and inherit built in Map / Set\n\tfunction __extends(d: any, b: any): any {\n\t\textendStatics(d, b)\n\t\tfunction __(this: any): any {\n\t\t\tthis.constructor = d\n\t\t}\n\t\td.prototype =\n\t\t\t// @ts-ignore\n\t\t\t((__.prototype = b.prototype), new __())\n\t}\n\n\tconst DraftMap = (function(_super) {\n\t\t__extends(DraftMap, _super)\n\t\t// Create class manually, cause #502\n\t\tfunction DraftMap(this: any, target: AnyMap, parent?: ImmerState): any {\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ProxyType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t} as MapState\n\t\t\treturn this\n\t\t}\n\t\tconst p = DraftMap.prototype\n\n\t\tObject.defineProperty(p, \"size\", {\n\t\t\tget: function() {\n\t\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t\t}\n\t\t\t// enumerable: false,\n\t\t\t// configurable: true\n\t\t})\n\n\t\tp.has = function(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tp.set = function(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tp.delete = function(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tif (state.base_.has(key)) {\n\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t} else {\n\t\t\t\tstate.assigned_!.delete(key)\n\t\t\t}\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tp.clear = function() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tp.forEach = function(\n\t\t\tcb: (value: any, key: any, self: any) => void,\n\t\t\tthisArg?: any\n\t\t) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tp.get = function(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(state.scope_.immer_, value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tp.keys = function(): IterableIterator {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tp.values = function(): IterableIterator {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[iteratorSymbol]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tp.entries = function(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[iteratorSymbol]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tp[iteratorSymbol] = function() {\n\t\t\treturn this.entries()\n\t\t}\n\n\t\treturn DraftMap\n\t})(Map)\n\n\tfunction proxyMap_(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tconst DraftSet = (function(_super) {\n\t\t__extends(DraftSet, _super)\n\t\t// Create class manually, cause #502\n\t\tfunction DraftSet(this: any, target: AnySet, parent?: ImmerState) {\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ProxyType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t} as SetState\n\t\t\treturn this\n\t\t}\n\t\tconst p = DraftSet.prototype\n\n\t\tObject.defineProperty(p, \"size\", {\n\t\t\tget: function() {\n\t\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t\t}\n\t\t\t// enumerable: true,\n\t\t})\n\n\t\tp.has = function(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tp.add = function(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tp.delete = function(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tp.clear = function() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tp.values = function(): IterableIterator {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tp.entries = function entries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tp.keys = function(): IterableIterator {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tp[iteratorSymbol] = function() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tp.forEach = function forEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\n\t\treturn DraftSet\n\t})(Set)\n\n\tfunction proxySet_(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(state.scope_.immer_, value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n","// Should be no imports here!\n\n// Some things that should be evaluated before all else...\n\n// We only want to know if non-polyfilled symbols are available\nconst hasSymbol =\n\ttypeof Symbol !== \"undefined\" && typeof Symbol(\"x\") === \"symbol\"\nexport const hasMap = typeof Map !== \"undefined\"\nexport const hasSet = typeof Set !== \"undefined\"\nexport const hasProxies =\n\ttypeof Proxy !== \"undefined\" &&\n\ttypeof Proxy.revocable !== \"undefined\" &&\n\ttypeof Reflect !== \"undefined\"\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: Nothing = hasSymbol\n\t? Symbol.for(\"immer-nothing\")\n\t: ({[\"immer-nothing\"]: true} as any)\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = hasSymbol\n\t? Symbol.for(\"immer-draftable\")\n\t: (\"__$immer_draftable\" as any)\n\nexport const DRAFT_STATE: unique symbol = hasSymbol\n\t? Symbol.for(\"immer-state\")\n\t: (\"__$immer_state\" as any)\n\n// Even a polyfilled Symbol might provide Symbol.iterator\nexport const iteratorSymbol: typeof Symbol.iterator =\n\t(typeof Symbol != \"undefined\" && Symbol.iterator) || (\"@@iterator\" as any)\n\n/** Use a class type for `nothing` so its type is unique */\nexport class Nothing {\n\t// This lets us do `Exclude`\n\t// @ts-ignore\n\tprivate _!: unique symbol\n}\n","import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\nexport default produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to use the ES2015 `Proxy` class when creating drafts, which is\n * always faster than using ES5 proxies.\n *\n * By default, feature detection is used, so calling this is rarely necessary.\n */\nexport const setUseProxies = immer.setUseProxies.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft(value: T): Draft {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable(value: T): Immutable {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enableES5} from \"./plugins/es5\"\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\nexport {enableAllPlugins} from \"./plugins/all\"\n","import {enableES5} from \"./es5\"\nimport {enableMapSet} from \"./mapset\"\nimport {enablePatches} from \"./patches\"\n\nexport function enableAllPlugins() {\n\tenableES5()\n\tenableMapSet()\n\tenablePatches()\n}\n","\n'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./immer.cjs.production.min.js')\n} else {\n module.exports = require('./immer.cjs.development.js')\n}\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","//! moment.js\n//! version : 2.29.3\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.3';\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', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","/* @license\nPapa Parse\nv5.4.1\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n!function(e,t){\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()}(this,function s(){\"use strict\";var f=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=f.IS_PAPA_WORKER||!1,a={},u=0,b={parse:function(e,t){var r=(t=t||{}).dynamicTyping||!1;J(r)&&(t.dynamicTypingFunction=r,r={});if(t.dynamicTyping=r,t.transform=!!J(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var i=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(r=f.URL||f.webkitURL||null,i=s.toString(),b.BLOB_URL||(b.BLOB_URL=r.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",i,\")();\"],{type:\"text/javascript\"})))),t=new f.Worker(e);var r,i;return t.onmessage=_,t.id=u++,a[t.id]=t}();return i.userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=J(t.step),t.chunk=J(t.chunk),t.complete=J(t.complete),t.error=J(t.error),delete t.worker,void i.postMessage({input:e,config:t,workerId:i.id})}var n=null;b.NODE_STREAM_INPUT,\"string\"==typeof e?(e=function(e){if(65279===e.charCodeAt(0))return e.slice(1);return e}(e),n=t.download?new l(t):new p(t)):!0===e.readable&&J(e.read)&&J(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=\",\",y=\"\\r\\n\",s='\"',a=s+s,r=!1,i=null,o=!1;!function(){if(\"object\"!=typeof t)return;\"string\"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);(\"boolean\"==typeof t.quotes||\"function\"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(r=t.skipEmptyLines);\"string\"==typeof t.newline&&(y=t.newline);\"string\"==typeof t.quoteChar&&(s=t.quoteChar);\"boolean\"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");i=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s);(\"boolean\"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(o=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\\-@\\t\\r].*$/)}();var u=new RegExp(Q(s),\"g\");\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return h(null,e,r);if(\"object\"==typeof e[0])return h(i||Object.keys(e[0]),e,r)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||i),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),h(e.fields||[],e.data||[],r);throw new Error(\"Unable to serialize unrecognized input\");function h(e,t,r){var i=\"\";\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(J(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!J(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(e){J(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1})}}function l(e){var i;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),h.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(i=new XMLHttpRequest,this._config.withCredentials&&(i.withCredentials=this._config.withCredentials),n||(i.onload=v(this._chunkLoaded,this),i.onerror=v(this._chunkError,this)),i.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)i.setRequestHeader(t,e[t])}if(this._config.chunkSize){var r=this._start+this._config.chunkSize-1;i.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+r)}try{i.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===i.status&&this._chunkError()}},this._chunkLoaded=function(){4===i.readyState&&(i.status<200||400<=i.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:i.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader(\"Content-Range\");if(null===t)return-1;return parseInt(t.substring(t.lastIndexOf(\"/\")+1))}(i),this.parseChunk(i.responseText)))},this._chunkError=function(e){var t=i.statusText||e;this._sendError(new Error(t))}}function c(e){var i,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),h.call(this,e);var s=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((i=new FileReader).onload=v(this._chunkLoaded,this),i.onerror=v(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function p(e){var r;h.call(this,e=e||{}),this.stream=function(e){return r=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=r.substring(0,t),r=r.substring(t)):(e=r,r=\"\"),this._finished=!r,this.parseChunk(e)}}}function g(e){h.call(this,e=e||{});var t=[],r=!0,i=!1;this.pause=function(){h.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){h.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){i&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):r=!0},this._streamData=v(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),r&&(r=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=v(function(){this._streamCleanUp(),i=!0,this._streamData(\"\")},this),this._streamCleanUp=v(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function r(m){var a,o,u,i=Math.pow(2,53),n=-i,s=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,h=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,t=this,r=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(J(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else{if(g(),0===c.data.length)return;r+=e.data.length,m.preview&&r>m.preview?o.abort():(c.data=c.data[0],p(c,t))}}}function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){return c&&u&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+b.DefaultDelimiter+\"'\"),u=!1),m.skipEmptyLines&&(c.data=c.data.filter(function(e){return!y(e)})),_()&&function(){if(!c)return;function e(e,t){J(m.transformHeader)&&(e=m.transformHeader(e,t)),l.push(e)}if(Array.isArray(c.data[0])){for(var t=0;_()&&t=l.length?\"__parsed_extra\":l[r]),m.transform&&(s=m.transform(s,n)),s=v(n,s),\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>l.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+l.length+\" fields but parsed \"+r,f+t):r=i.length/2?\"\\r\\n\":\"\\r\"}(e,i)),u=!1,m.delimiter)J(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else{var n=function(e,t,r,i,n){var s,a,o,u;n=n||[\",\",\"\\t\",\"|\",\";\",b.RECORD_SEP,b.UNIT_SEP];for(var h=0;h=N)return L(!0)}else for(S=W,W++;;){if(-1===(S=i.indexOf(z,S+1)))return r||h.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:u.length,index:W}),T();if(S===n-1)return T(i.substring(W,S).replace(C,z));if(z!==K||i[S+1]!==K){if(z===K||0===S||i[S-1]!==K){-1!==w&&w=N)return L(!0);break}h.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:u.length,index:W}),S++}}else S++}return T();function I(e){u.push(e),d=W}function A(e){var t=0;if(-1!==e){var r=i.substring(S+1,e);r&&\"\"===r.trim()&&(t=r.length)}return t}function T(e){return r||(void 0===e&&(e=i.substring(W)),f.push(e),W=n,I(f),o&&F()),L()}function D(e){W=e,I(f),f=[],R=i.indexOf(P,W)}function L(e){return{data:u,errors:h,meta:{delimiter:M,linebreak:P,aborted:H,truncated:!!e,cursor:d+(t||0)}}}function F(){q(L()),u=[],h=[]}},this.abort=function(){H=!0},this.getCharIndex=function(){return W}}function _(e){var t=e.data,r=a[t.workerId],i=!1;if(t.error)r.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){i=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:y,resume:y};if(J(r.userStep)){for(var s=0;s 0) {\n var last = this.current.last;\n\n if (last) {\n var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),\n space = _this$convertWhitespa.space,\n rawSpace = _this$convertWhitespa.rawSpace;\n\n if (rawSpace !== undefined) {\n last.rawSpaceAfter += rawSpace;\n }\n\n last.spaces.after += space;\n } else {\n nodes.forEach(function (n) {\n return _this3.newNode(n);\n });\n }\n }\n\n return;\n }\n\n var firstToken = this.currToken;\n var spaceOrDescendantSelectorNodes = undefined;\n\n if (nextSigTokenPos > this.position) {\n spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n }\n\n var node;\n\n if (this.isNamedCombinator()) {\n node = this.namedCombinator();\n } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {\n node = new _combinator[\"default\"]({\n value: this.content(),\n source: getTokenSource(this.currToken),\n sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]\n });\n this.position++;\n } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {// pass\n } else if (!spaceOrDescendantSelectorNodes) {\n this.unexpected();\n }\n\n if (node) {\n if (spaceOrDescendantSelectorNodes) {\n var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),\n _space = _this$convertWhitespa2.space,\n _rawSpace = _this$convertWhitespa2.rawSpace;\n\n node.spaces.before = _space;\n node.rawSpaceBefore = _rawSpace;\n }\n } else {\n // descendant combinator\n var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),\n _space2 = _this$convertWhitespa3.space,\n _rawSpace2 = _this$convertWhitespa3.rawSpace;\n\n if (!_rawSpace2) {\n _rawSpace2 = _space2;\n }\n\n var spaces = {};\n var raws = {\n spaces: {}\n };\n\n if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {\n spaces.before = _space2.slice(0, _space2.length - 1);\n raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);\n } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) {\n spaces.after = _space2.slice(1);\n raws.spaces.after = _rawSpace2.slice(1);\n } else {\n raws.value = _rawSpace2;\n }\n\n node = new _combinator[\"default\"]({\n value: ' ',\n source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),\n sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n spaces: spaces,\n raws: raws\n });\n }\n\n if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {\n node.spaces.after = this.optionalSpace(this.content());\n this.position++;\n }\n\n return this.newNode(node);\n };\n\n _proto.comma = function comma() {\n if (this.position === this.tokens.length - 1) {\n this.root.trailingComma = true;\n this.position++;\n return;\n }\n\n this.current._inferEndPosition();\n\n var selector = new _selector[\"default\"]({\n source: {\n start: tokenStart(this.tokens[this.position + 1])\n }\n });\n this.current.parent.append(selector);\n this.current = selector;\n this.position++;\n };\n\n _proto.comment = function comment() {\n var current = this.currToken;\n this.newNode(new _comment[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }));\n this.position++;\n };\n\n _proto.error = function error(message, opts) {\n throw this.root.error(message, opts);\n };\n\n _proto.missingBackslash = function missingBackslash() {\n return this.error('Expected a backslash preceding the semicolon.', {\n index: this.currToken[_tokenize.FIELDS.START_POS]\n });\n };\n\n _proto.missingParenthesis = function missingParenthesis() {\n return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n };\n\n _proto.missingSquareBracket = function missingSquareBracket() {\n return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n };\n\n _proto.unexpected = function unexpected() {\n return this.error(\"Unexpected '\" + this.content() + \"'. Escaping special characters with \\\\ may help.\", this.currToken[_tokenize.FIELDS.START_POS]);\n };\n\n _proto.namespace = function namespace() {\n var before = this.prevToken && this.content(this.prevToken) || true;\n\n if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n this.position++;\n return this.word(before);\n } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {\n this.position++;\n return this.universal(before);\n }\n };\n\n _proto.nesting = function nesting() {\n if (this.nextToken) {\n var nextContent = this.content(this.nextToken);\n\n if (nextContent === \"|\") {\n this.position++;\n return;\n }\n }\n\n var current = this.currToken;\n this.newNode(new _nesting[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }));\n this.position++;\n };\n\n _proto.parentheses = function parentheses() {\n var last = this.current.last;\n var unbalanced = 1;\n this.position++;\n\n if (last && last.type === types.PSEUDO) {\n var selector = new _selector[\"default\"]({\n source: {\n start: tokenStart(this.tokens[this.position - 1])\n }\n });\n var cache = this.current;\n last.append(selector);\n this.current = selector;\n\n while (this.position < this.tokens.length && unbalanced) {\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n unbalanced++;\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n unbalanced--;\n }\n\n if (unbalanced) {\n this.parse();\n } else {\n this.current.source.end = tokenEnd(this.currToken);\n this.current.parent.source.end = tokenEnd(this.currToken);\n this.position++;\n }\n }\n\n this.current = cache;\n } else {\n // I think this case should be an error. It's used to implement a basic parse of media queries\n // but I don't think it's a good idea.\n var parenStart = this.currToken;\n var parenValue = \"(\";\n var parenEnd;\n\n while (this.position < this.tokens.length && unbalanced) {\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n unbalanced++;\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n unbalanced--;\n }\n\n parenEnd = this.currToken;\n parenValue += this.parseParenthesisToken(this.currToken);\n this.position++;\n }\n\n if (last) {\n last.appendToPropertyAndEscape(\"value\", parenValue, parenValue);\n } else {\n this.newNode(new _string[\"default\"]({\n value: parenValue,\n source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),\n sourceIndex: parenStart[_tokenize.FIELDS.START_POS]\n }));\n }\n }\n\n if (unbalanced) {\n return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n }\n };\n\n _proto.pseudo = function pseudo() {\n var _this4 = this;\n\n var pseudoStr = '';\n var startingToken = this.currToken;\n\n while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {\n pseudoStr += this.content();\n this.position++;\n }\n\n if (!this.currToken) {\n return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n this.splitWord(false, function (first, length) {\n pseudoStr += first;\n\n _this4.newNode(new _pseudo[\"default\"]({\n value: pseudoStr,\n source: getTokenSourceSpan(startingToken, _this4.currToken),\n sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n }));\n\n if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n _this4.error('Misplaced parenthesis.', {\n index: _this4.nextToken[_tokenize.FIELDS.START_POS]\n });\n }\n });\n } else {\n return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);\n }\n };\n\n _proto.space = function space() {\n var content = this.content(); // Handle space before and after the selector\n\n if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {\n return node.type === 'comment';\n })) {\n this.spaces = this.optionalSpace(content);\n this.position++;\n } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n this.current.last.spaces.after = this.optionalSpace(content);\n this.position++;\n } else {\n this.combinator();\n }\n };\n\n _proto.string = function string() {\n var current = this.currToken;\n this.newNode(new _string[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }));\n this.position++;\n };\n\n _proto.universal = function universal(namespace) {\n var nextToken = this.nextToken;\n\n if (nextToken && this.content(nextToken) === '|') {\n this.position++;\n return this.namespace();\n }\n\n var current = this.currToken;\n this.newNode(new _universal[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }), namespace);\n this.position++;\n };\n\n _proto.splitWord = function splitWord(namespace, firstCallback) {\n var _this5 = this;\n\n var nextToken = this.nextToken;\n var word = this.content();\n\n while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {\n this.position++;\n var current = this.content();\n word += current;\n\n if (current.lastIndexOf('\\\\') === current.length - 1) {\n var next = this.nextToken;\n\n if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {\n word += this.requiredSpace(this.content(next));\n this.position++;\n }\n }\n\n nextToken = this.nextToken;\n }\n\n var hasClass = indexesOf(word, '.').filter(function (i) {\n // Allow escaped dot within class name\n var escapedDot = word[i - 1] === '\\\\'; // Allow decimal numbers percent in @keyframes\n\n var isKeyframesPercent = /^\\d+\\.\\d+%$/.test(word);\n return !escapedDot && !isKeyframesPercent;\n });\n var hasId = indexesOf(word, '#').filter(function (i) {\n return word[i - 1] !== '\\\\';\n }); // Eliminate Sass interpolations from the list of id indexes\n\n var interpolations = indexesOf(word, '#{');\n\n if (interpolations.length) {\n hasId = hasId.filter(function (hashIndex) {\n return !~interpolations.indexOf(hashIndex);\n });\n }\n\n var indices = (0, _sortAscending[\"default\"])(uniqs([0].concat(hasClass, hasId)));\n indices.forEach(function (ind, i) {\n var index = indices[i + 1] || word.length;\n var value = word.slice(ind, index);\n\n if (i === 0 && firstCallback) {\n return firstCallback.call(_this5, value, indices.length);\n }\n\n var node;\n var current = _this5.currToken;\n var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];\n var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));\n\n if (~hasClass.indexOf(ind)) {\n var classNameOpts = {\n value: value.slice(1),\n source: source,\n sourceIndex: sourceIndex\n };\n node = new _className[\"default\"](unescapeProp(classNameOpts, \"value\"));\n } else if (~hasId.indexOf(ind)) {\n var idOpts = {\n value: value.slice(1),\n source: source,\n sourceIndex: sourceIndex\n };\n node = new _id[\"default\"](unescapeProp(idOpts, \"value\"));\n } else {\n var tagOpts = {\n value: value,\n source: source,\n sourceIndex: sourceIndex\n };\n unescapeProp(tagOpts, \"value\");\n node = new _tag[\"default\"](tagOpts);\n }\n\n _this5.newNode(node, namespace); // Ensure that the namespace is used only once\n\n\n namespace = null;\n });\n this.position++;\n };\n\n _proto.word = function word(namespace) {\n var nextToken = this.nextToken;\n\n if (nextToken && this.content(nextToken) === '|') {\n this.position++;\n return this.namespace();\n }\n\n return this.splitWord(namespace);\n };\n\n _proto.loop = function loop() {\n while (this.position < this.tokens.length) {\n this.parse(true);\n }\n\n this.current._inferEndPosition();\n\n return this.root;\n };\n\n _proto.parse = function parse(throwOnParenthesis) {\n switch (this.currToken[_tokenize.FIELDS.TYPE]) {\n case tokens.space:\n this.space();\n break;\n\n case tokens.comment:\n this.comment();\n break;\n\n case tokens.openParenthesis:\n this.parentheses();\n break;\n\n case tokens.closeParenthesis:\n if (throwOnParenthesis) {\n this.missingParenthesis();\n }\n\n break;\n\n case tokens.openSquare:\n this.attribute();\n break;\n\n case tokens.dollar:\n case tokens.caret:\n case tokens.equals:\n case tokens.word:\n this.word();\n break;\n\n case tokens.colon:\n this.pseudo();\n break;\n\n case tokens.comma:\n this.comma();\n break;\n\n case tokens.asterisk:\n this.universal();\n break;\n\n case tokens.ampersand:\n this.nesting();\n break;\n\n case tokens.slash:\n case tokens.combinator:\n this.combinator();\n break;\n\n case tokens.str:\n this.string();\n break;\n // These cases throw; no break needed.\n\n case tokens.closeSquare:\n this.missingSquareBracket();\n\n case tokens.semicolon:\n this.missingBackslash();\n\n default:\n this.unexpected();\n }\n }\n /**\n * Helpers\n */\n ;\n\n _proto.expected = function expected(description, index, found) {\n if (Array.isArray(description)) {\n var last = description.pop();\n description = description.join(', ') + \" or \" + last;\n }\n\n var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';\n\n if (!found) {\n return this.error(\"Expected \" + an + \" \" + description + \".\", {\n index: index\n });\n }\n\n return this.error(\"Expected \" + an + \" \" + description + \", found \\\"\" + found + \"\\\" instead.\", {\n index: index\n });\n };\n\n _proto.requiredSpace = function requiredSpace(space) {\n return this.options.lossy ? ' ' : space;\n };\n\n _proto.optionalSpace = function optionalSpace(space) {\n return this.options.lossy ? '' : space;\n };\n\n _proto.lossySpace = function lossySpace(space, required) {\n if (this.options.lossy) {\n return required ? ' ' : '';\n } else {\n return space;\n }\n };\n\n _proto.parseParenthesisToken = function parseParenthesisToken(token) {\n var content = this.content(token);\n\n if (token[_tokenize.FIELDS.TYPE] === tokens.space) {\n return this.requiredSpace(content);\n } else {\n return content;\n }\n };\n\n _proto.newNode = function newNode(node, namespace) {\n if (namespace) {\n if (/^ +$/.test(namespace)) {\n if (!this.options.lossy) {\n this.spaces = (this.spaces || '') + namespace;\n }\n\n namespace = true;\n }\n\n node.namespace = namespace;\n unescapeProp(node, \"namespace\");\n }\n\n if (this.spaces) {\n node.spaces.before = this.spaces;\n this.spaces = '';\n }\n\n return this.current.append(node);\n };\n\n _proto.content = function content(token) {\n if (token === void 0) {\n token = this.currToken;\n }\n\n return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);\n };\n\n /**\n * returns the index of the next non-whitespace, non-comment token.\n * returns -1 if no meaningful token is found.\n */\n _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) {\n if (startPosition === void 0) {\n startPosition = this.position + 1;\n }\n\n var searchPosition = startPosition;\n\n while (searchPosition < this.tokens.length) {\n if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {\n searchPosition++;\n continue;\n } else {\n return searchPosition;\n }\n }\n\n return -1;\n };\n\n _createClass(Parser, [{\n key: \"currToken\",\n get: function get() {\n return this.tokens[this.position];\n }\n }, {\n key: \"nextToken\",\n get: function get() {\n return this.tokens[this.position + 1];\n }\n }, {\n key: \"prevToken\",\n get: function get() {\n return this.tokens[this.position - 1];\n }\n }]);\n\n return Parser;\n}();\n\nexports[\"default\"] = Parser;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _parser = _interopRequireDefault(require(\"./parser\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Processor = /*#__PURE__*/function () {\n function Processor(func, options) {\n this.func = func || function noop() {};\n\n this.funcRes = null;\n this.options = options;\n }\n\n var _proto = Processor.prototype;\n\n _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n var merged = Object.assign({}, this.options, options);\n\n if (merged.updateSelector === false) {\n return false;\n } else {\n return typeof rule !== \"string\";\n }\n };\n\n _proto._isLossy = function _isLossy(options) {\n if (options === void 0) {\n options = {};\n }\n\n var merged = Object.assign({}, this.options, options);\n\n if (merged.lossless === false) {\n return true;\n } else {\n return false;\n }\n };\n\n _proto._root = function _root(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n var parser = new _parser[\"default\"](rule, this._parseOptions(options));\n return parser.root;\n };\n\n _proto._parseOptions = function _parseOptions(options) {\n return {\n lossy: this._isLossy(options)\n };\n };\n\n _proto._run = function _run(rule, options) {\n var _this = this;\n\n if (options === void 0) {\n options = {};\n }\n\n return new Promise(function (resolve, reject) {\n try {\n var root = _this._root(rule, options);\n\n Promise.resolve(_this.func(root)).then(function (transform) {\n var string = undefined;\n\n if (_this._shouldUpdateSelector(rule, options)) {\n string = root.toString();\n rule.selector = string;\n }\n\n return {\n transform: transform,\n root: root,\n string: string\n };\n }).then(resolve, reject);\n } catch (e) {\n reject(e);\n return;\n }\n });\n };\n\n _proto._runSync = function _runSync(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n var root = this._root(rule, options);\n\n var transform = this.func(root);\n\n if (transform && typeof transform.then === \"function\") {\n throw new Error(\"Selector processor returned a promise to a synchronous call.\");\n }\n\n var string = undefined;\n\n if (options.updateSelector && typeof rule !== \"string\") {\n string = root.toString();\n rule.selector = string;\n }\n\n return {\n transform: transform,\n root: root,\n string: string\n };\n }\n /**\n * Process rule into a selector AST.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {Promise} The AST of the selector after processing it.\n */\n ;\n\n _proto.ast = function ast(rule, options) {\n return this._run(rule, options).then(function (result) {\n return result.root;\n });\n }\n /**\n * Process rule into a selector AST synchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {parser.Root} The AST of the selector after processing it.\n */\n ;\n\n _proto.astSync = function astSync(rule, options) {\n return this._runSync(rule, options).root;\n }\n /**\n * Process a selector into a transformed value asynchronously\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {Promise} The value returned by the processor.\n */\n ;\n\n _proto.transform = function transform(rule, options) {\n return this._run(rule, options).then(function (result) {\n return result.transform;\n });\n }\n /**\n * Process a selector into a transformed value synchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {any} The value returned by the processor.\n */\n ;\n\n _proto.transformSync = function transformSync(rule, options) {\n return this._runSync(rule, options).transform;\n }\n /**\n * Process a selector into a new selector string asynchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {string} the selector after processing.\n */\n ;\n\n _proto.process = function process(rule, options) {\n return this._run(rule, options).then(function (result) {\n return result.string || result.root.toString();\n });\n }\n /**\n * Process a selector into a new selector string synchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {string} the selector after processing.\n */\n ;\n\n _proto.processSync = function processSync(rule, options) {\n var result = this._runSync(rule, options);\n\n return result.string || result.root.toString();\n };\n\n return Processor;\n}();\n\nexports[\"default\"] = Processor;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.unescapeValue = unescapeValue;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _unesc = _interopRequireDefault(require(\"../util/unesc\"));\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nvar _CSSESC_QUOTE_OPTIONS;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar deprecate = require(\"util-deprecate\");\n\nvar WRAPPED_IN_QUOTES = /^('|\")([^]*)\\1$/;\nvar warnOfDeprecatedValueAssignment = deprecate(function () {}, \"Assigning an attribute a value containing characters that might need to be escaped is deprecated. \" + \"Call attribute.setValue() instead.\");\nvar warnOfDeprecatedQuotedAssignment = deprecate(function () {}, \"Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.\");\nvar warnOfDeprecatedConstructor = deprecate(function () {}, \"Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.\");\n\nfunction unescapeValue(value) {\n var deprecatedUsage = false;\n var quoteMark = null;\n var unescaped = value;\n var m = unescaped.match(WRAPPED_IN_QUOTES);\n\n if (m) {\n quoteMark = m[1];\n unescaped = m[2];\n }\n\n unescaped = (0, _unesc[\"default\"])(unescaped);\n\n if (unescaped !== value) {\n deprecatedUsage = true;\n }\n\n return {\n deprecatedUsage: deprecatedUsage,\n unescaped: unescaped,\n quoteMark: quoteMark\n };\n}\n\nfunction handleDeprecatedContructorOpts(opts) {\n if (opts.quoteMark !== undefined) {\n return opts;\n }\n\n if (opts.value === undefined) {\n return opts;\n }\n\n warnOfDeprecatedConstructor();\n\n var _unescapeValue = unescapeValue(opts.value),\n quoteMark = _unescapeValue.quoteMark,\n unescaped = _unescapeValue.unescaped;\n\n if (!opts.raws) {\n opts.raws = {};\n }\n\n if (opts.raws.value === undefined) {\n opts.raws.value = opts.value;\n }\n\n opts.value = unescaped;\n opts.quoteMark = quoteMark;\n return opts;\n}\n\nvar Attribute = /*#__PURE__*/function (_Namespace) {\n _inheritsLoose(Attribute, _Namespace);\n\n function Attribute(opts) {\n var _this;\n\n if (opts === void 0) {\n opts = {};\n }\n\n _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;\n _this.type = _types.ATTRIBUTE;\n _this.raws = _this.raws || {};\n Object.defineProperty(_this.raws, 'unquoted', {\n get: deprecate(function () {\n return _this.value;\n }, \"attr.raws.unquoted is deprecated. Call attr.value instead.\"),\n set: deprecate(function () {\n return _this.value;\n }, \"Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.\")\n });\n _this._constructed = true;\n return _this;\n }\n /**\n * Returns the Attribute's value quoted such that it would be legal to use\n * in the value of a css file. The original value's quotation setting\n * used for stringification is left unchanged. See `setValue(value, options)`\n * if you want to control the quote settings of a new value for the attribute.\n *\n * You can also change the quotation used for the current value by setting quoteMark.\n *\n * Options:\n * * quoteMark {'\"' | \"'\" | null} - Use this value to quote the value. If this\n * option is not set, the original value for quoteMark will be used. If\n * indeterminate, a double quote is used. The legal values are:\n * * `null` - the value will be unquoted and characters will be escaped as necessary.\n * * `'` - the value will be quoted with a single quote and single quotes are escaped.\n * * `\"` - the value will be quoted with a double quote and double quotes are escaped.\n * * preferCurrentQuoteMark {boolean} - if true, prefer the source quote mark\n * over the quoteMark option value.\n * * smart {boolean} - if true, will select a quote mark based on the value\n * and the other options specified here. See the `smartQuoteMark()`\n * method.\n **/\n\n\n var _proto = Attribute.prototype;\n\n _proto.getQuotedValue = function getQuotedValue(options) {\n if (options === void 0) {\n options = {};\n }\n\n var quoteMark = this._determineQuoteMark(options);\n\n var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];\n var escaped = (0, _cssesc[\"default\"])(this._value, cssescopts);\n return escaped;\n };\n\n _proto._determineQuoteMark = function _determineQuoteMark(options) {\n return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);\n }\n /**\n * Set the unescaped value with the specified quotation options. The value\n * provided must not include any wrapping quote marks -- those quotes will\n * be interpreted as part of the value and escaped accordingly.\n */\n ;\n\n _proto.setValue = function setValue(value, options) {\n if (options === void 0) {\n options = {};\n }\n\n this._value = value;\n this._quoteMark = this._determineQuoteMark(options);\n\n this._syncRawValue();\n }\n /**\n * Intelligently select a quoteMark value based on the value's contents. If\n * the value is a legal CSS ident, it will not be quoted. Otherwise a quote\n * mark will be picked that minimizes the number of escapes.\n *\n * If there's no clear winner, the quote mark from these options is used,\n * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is\n * true). If the quoteMark is unspecified, a double quote is used.\n *\n * @param options This takes the quoteMark and preferCurrentQuoteMark options\n * from the quoteValue method.\n */\n ;\n\n _proto.smartQuoteMark = function smartQuoteMark(options) {\n var v = this.value;\n var numSingleQuotes = v.replace(/[^']/g, '').length;\n var numDoubleQuotes = v.replace(/[^\"]/g, '').length;\n\n if (numSingleQuotes + numDoubleQuotes === 0) {\n var escaped = (0, _cssesc[\"default\"])(v, {\n isIdentifier: true\n });\n\n if (escaped === v) {\n return Attribute.NO_QUOTE;\n } else {\n var pref = this.preferredQuoteMark(options);\n\n if (pref === Attribute.NO_QUOTE) {\n // pick a quote mark that isn't none and see if it's smaller\n var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE;\n var opts = CSSESC_QUOTE_OPTIONS[quote];\n var quoteValue = (0, _cssesc[\"default\"])(v, opts);\n\n if (quoteValue.length < escaped.length) {\n return quote;\n }\n }\n\n return pref;\n }\n } else if (numDoubleQuotes === numSingleQuotes) {\n return this.preferredQuoteMark(options);\n } else if (numDoubleQuotes < numSingleQuotes) {\n return Attribute.DOUBLE_QUOTE;\n } else {\n return Attribute.SINGLE_QUOTE;\n }\n }\n /**\n * Selects the preferred quote mark based on the options and the current quote mark value.\n * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)`\n * instead.\n */\n ;\n\n _proto.preferredQuoteMark = function preferredQuoteMark(options) {\n var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;\n\n if (quoteMark === undefined) {\n quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;\n }\n\n if (quoteMark === undefined) {\n quoteMark = Attribute.DOUBLE_QUOTE;\n }\n\n return quoteMark;\n };\n\n _proto._syncRawValue = function _syncRawValue() {\n var rawValue = (0, _cssesc[\"default\"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);\n\n if (rawValue === this._value) {\n if (this.raws) {\n delete this.raws.value;\n }\n } else {\n this.raws.value = rawValue;\n }\n };\n\n _proto._handleEscapes = function _handleEscapes(prop, value) {\n if (this._constructed) {\n var escaped = (0, _cssesc[\"default\"])(value, {\n isIdentifier: true\n });\n\n if (escaped !== value) {\n this.raws[prop] = escaped;\n } else {\n delete this.raws[prop];\n }\n }\n };\n\n _proto._spacesFor = function _spacesFor(name) {\n var attrSpaces = {\n before: '',\n after: ''\n };\n var spaces = this.spaces[name] || {};\n var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};\n return Object.assign(attrSpaces, spaces, rawSpaces);\n };\n\n _proto._stringFor = function _stringFor(name, spaceName, concat) {\n if (spaceName === void 0) {\n spaceName = name;\n }\n\n if (concat === void 0) {\n concat = defaultAttrConcat;\n }\n\n var attrSpaces = this._spacesFor(spaceName);\n\n return concat(this.stringifyProperty(name), attrSpaces);\n }\n /**\n * returns the offset of the attribute part specified relative to the\n * start of the node of the output string.\n *\n * * \"ns\" - alias for \"namespace\"\n * * \"namespace\" - the namespace if it exists.\n * * \"attribute\" - the attribute name\n * * \"attributeNS\" - the start of the attribute or its namespace\n * * \"operator\" - the match operator of the attribute\n * * \"value\" - The value (string or identifier)\n * * \"insensitive\" - the case insensitivity flag;\n * @param part One of the possible values inside an attribute.\n * @returns -1 if the name is invalid or the value doesn't exist in this attribute.\n */\n ;\n\n _proto.offsetOf = function offsetOf(name) {\n var count = 1;\n\n var attributeSpaces = this._spacesFor(\"attribute\");\n\n count += attributeSpaces.before.length;\n\n if (name === \"namespace\" || name === \"ns\") {\n return this.namespace ? count : -1;\n }\n\n if (name === \"attributeNS\") {\n return count;\n }\n\n count += this.namespaceString.length;\n\n if (this.namespace) {\n count += 1;\n }\n\n if (name === \"attribute\") {\n return count;\n }\n\n count += this.stringifyProperty(\"attribute\").length;\n count += attributeSpaces.after.length;\n\n var operatorSpaces = this._spacesFor(\"operator\");\n\n count += operatorSpaces.before.length;\n var operator = this.stringifyProperty(\"operator\");\n\n if (name === \"operator\") {\n return operator ? count : -1;\n }\n\n count += operator.length;\n count += operatorSpaces.after.length;\n\n var valueSpaces = this._spacesFor(\"value\");\n\n count += valueSpaces.before.length;\n var value = this.stringifyProperty(\"value\");\n\n if (name === \"value\") {\n return value ? count : -1;\n }\n\n count += value.length;\n count += valueSpaces.after.length;\n\n var insensitiveSpaces = this._spacesFor(\"insensitive\");\n\n count += insensitiveSpaces.before.length;\n\n if (name === \"insensitive\") {\n return this.insensitive ? count : -1;\n }\n\n return -1;\n };\n\n _proto.toString = function toString() {\n var _this2 = this;\n\n var selector = [this.rawSpaceBefore, '['];\n selector.push(this._stringFor('qualifiedAttribute', 'attribute'));\n\n if (this.operator && (this.value || this.value === '')) {\n selector.push(this._stringFor('operator'));\n selector.push(this._stringFor('value'));\n selector.push(this._stringFor('insensitiveFlag', 'insensitive', function (attrValue, attrSpaces) {\n if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {\n attrSpaces.before = \" \";\n }\n\n return defaultAttrConcat(attrValue, attrSpaces);\n }));\n }\n\n selector.push(']');\n selector.push(this.rawSpaceAfter);\n return selector.join('');\n };\n\n _createClass(Attribute, [{\n key: \"quoted\",\n get: function get() {\n var qm = this.quoteMark;\n return qm === \"'\" || qm === '\"';\n },\n set: function set(value) {\n warnOfDeprecatedQuotedAssignment();\n }\n /**\n * returns a single (`'`) or double (`\"`) quote character if the value is quoted.\n * returns `null` if the value is not quoted.\n * returns `undefined` if the quotation state is unknown (this can happen when\n * the attribute is constructed without specifying a quote mark.)\n */\n\n }, {\n key: \"quoteMark\",\n get: function get() {\n return this._quoteMark;\n }\n /**\n * Set the quote mark to be used by this attribute's value.\n * If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute\n * value is updated accordingly.\n *\n * @param {\"'\" | '\"' | null} quoteMark The quote mark or `null` if the value should be unquoted.\n */\n ,\n set: function set(quoteMark) {\n if (!this._constructed) {\n this._quoteMark = quoteMark;\n return;\n }\n\n if (this._quoteMark !== quoteMark) {\n this._quoteMark = quoteMark;\n\n this._syncRawValue();\n }\n }\n }, {\n key: \"qualifiedAttribute\",\n get: function get() {\n return this.qualifiedName(this.raws.attribute || this.attribute);\n }\n }, {\n key: \"insensitiveFlag\",\n get: function get() {\n return this.insensitive ? 'i' : '';\n }\n }, {\n key: \"value\",\n get: function get() {\n return this._value;\n }\n /**\n * Before 3.0, the value had to be set to an escaped value including any wrapped\n * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value\n * is unescaped during parsing and any quote marks are removed.\n *\n * Because the ambiguity of this semantic change, if you set `attr.value = newValue`,\n * a deprecation warning is raised when the new value contains any characters that would\n * require escaping (including if it contains wrapped quotes).\n *\n * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe\n * how the new value is quoted.\n */\n ,\n set: function set(v) {\n if (this._constructed) {\n var _unescapeValue2 = unescapeValue(v),\n deprecatedUsage = _unescapeValue2.deprecatedUsage,\n unescaped = _unescapeValue2.unescaped,\n quoteMark = _unescapeValue2.quoteMark;\n\n if (deprecatedUsage) {\n warnOfDeprecatedValueAssignment();\n }\n\n if (unescaped === this._value && quoteMark === this._quoteMark) {\n return;\n }\n\n this._value = unescaped;\n this._quoteMark = quoteMark;\n\n this._syncRawValue();\n } else {\n this._value = v;\n }\n }\n }, {\n key: \"attribute\",\n get: function get() {\n return this._attribute;\n },\n set: function set(name) {\n this._handleEscapes(\"attribute\", name);\n\n this._attribute = name;\n }\n }]);\n\n return Attribute;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Attribute;\nAttribute.NO_QUOTE = null;\nAttribute.SINGLE_QUOTE = \"'\";\nAttribute.DOUBLE_QUOTE = '\"';\nvar CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {\n \"'\": {\n quotes: 'single',\n wrap: true\n },\n '\"': {\n quotes: 'double',\n wrap: true\n }\n}, _CSSESC_QUOTE_OPTIONS[null] = {\n isIdentifier: true\n}, _CSSESC_QUOTE_OPTIONS);\n\nfunction defaultAttrConcat(attrValue, attrSpaces) {\n return \"\" + attrSpaces.before + attrValue + attrSpaces.after;\n}","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _util = require(\"../util\");\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ClassName = /*#__PURE__*/function (_Node) {\n _inheritsLoose(ClassName, _Node);\n\n function ClassName(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.CLASS;\n _this._constructed = true;\n return _this;\n }\n\n var _proto = ClassName.prototype;\n\n _proto.valueToString = function valueToString() {\n return '.' + _Node.prototype.valueToString.call(this);\n };\n\n _createClass(ClassName, [{\n key: \"value\",\n get: function get() {\n return this._value;\n },\n set: function set(v) {\n if (this._constructed) {\n var escaped = (0, _cssesc[\"default\"])(v, {\n isIdentifier: true\n });\n\n if (escaped !== v) {\n (0, _util.ensureObject)(this, \"raws\");\n this.raws.value = escaped;\n } else if (this.raws) {\n delete this.raws.value;\n }\n }\n\n this._value = v;\n }\n }]);\n\n return ClassName;\n}(_node[\"default\"]);\n\nexports[\"default\"] = ClassName;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Combinator = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Combinator, _Node);\n\n function Combinator(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.COMBINATOR;\n return _this;\n }\n\n return Combinator;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Combinator;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Comment = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Comment, _Node);\n\n function Comment(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.COMMENT;\n return _this;\n }\n\n return Comment;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Comment;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.universal = exports.tag = exports.string = exports.selector = exports.root = exports.pseudo = exports.nesting = exports.id = exports.comment = exports.combinator = exports.className = exports.attribute = void 0;\n\nvar _attribute = _interopRequireDefault(require(\"./attribute\"));\n\nvar _className = _interopRequireDefault(require(\"./className\"));\n\nvar _combinator = _interopRequireDefault(require(\"./combinator\"));\n\nvar _comment = _interopRequireDefault(require(\"./comment\"));\n\nvar _id = _interopRequireDefault(require(\"./id\"));\n\nvar _nesting = _interopRequireDefault(require(\"./nesting\"));\n\nvar _pseudo = _interopRequireDefault(require(\"./pseudo\"));\n\nvar _root = _interopRequireDefault(require(\"./root\"));\n\nvar _selector = _interopRequireDefault(require(\"./selector\"));\n\nvar _string = _interopRequireDefault(require(\"./string\"));\n\nvar _tag = _interopRequireDefault(require(\"./tag\"));\n\nvar _universal = _interopRequireDefault(require(\"./universal\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar attribute = function attribute(opts) {\n return new _attribute[\"default\"](opts);\n};\n\nexports.attribute = attribute;\n\nvar className = function className(opts) {\n return new _className[\"default\"](opts);\n};\n\nexports.className = className;\n\nvar combinator = function combinator(opts) {\n return new _combinator[\"default\"](opts);\n};\n\nexports.combinator = combinator;\n\nvar comment = function comment(opts) {\n return new _comment[\"default\"](opts);\n};\n\nexports.comment = comment;\n\nvar id = function id(opts) {\n return new _id[\"default\"](opts);\n};\n\nexports.id = id;\n\nvar nesting = function nesting(opts) {\n return new _nesting[\"default\"](opts);\n};\n\nexports.nesting = nesting;\n\nvar pseudo = function pseudo(opts) {\n return new _pseudo[\"default\"](opts);\n};\n\nexports.pseudo = pseudo;\n\nvar root = function root(opts) {\n return new _root[\"default\"](opts);\n};\n\nexports.root = root;\n\nvar selector = function selector(opts) {\n return new _selector[\"default\"](opts);\n};\n\nexports.selector = selector;\n\nvar string = function string(opts) {\n return new _string[\"default\"](opts);\n};\n\nexports.string = string;\n\nvar tag = function tag(opts) {\n return new _tag[\"default\"](opts);\n};\n\nexports.tag = tag;\n\nvar universal = function universal(opts) {\n return new _universal[\"default\"](opts);\n};\n\nexports.universal = universal;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar types = _interopRequireWildcard(require(\"./types\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } it = o[Symbol.iterator](); return it.next.bind(it); }\n\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); }\n\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; }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Container = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Container, _Node);\n\n function Container(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n\n if (!_this.nodes) {\n _this.nodes = [];\n }\n\n return _this;\n }\n\n var _proto = Container.prototype;\n\n _proto.append = function append(selector) {\n selector.parent = this;\n this.nodes.push(selector);\n return this;\n };\n\n _proto.prepend = function prepend(selector) {\n selector.parent = this;\n this.nodes.unshift(selector);\n return this;\n };\n\n _proto.at = function at(index) {\n return this.nodes[index];\n };\n\n _proto.index = function index(child) {\n if (typeof child === 'number') {\n return child;\n }\n\n return this.nodes.indexOf(child);\n };\n\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.at(child).parent = undefined;\n this.nodes.splice(child, 1);\n var index;\n\n for (var id in this.indexes) {\n index = this.indexes[id];\n\n if (index >= child) {\n this.indexes[id] = index - 1;\n }\n }\n\n return this;\n };\n\n _proto.removeAll = function removeAll() {\n for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {\n var node = _step.value;\n node.parent = undefined;\n }\n\n this.nodes = [];\n return this;\n };\n\n _proto.empty = function empty() {\n return this.removeAll();\n };\n\n _proto.insertAfter = function insertAfter(oldNode, newNode) {\n newNode.parent = this;\n var oldIndex = this.index(oldNode);\n this.nodes.splice(oldIndex + 1, 0, newNode);\n newNode.parent = this;\n var index;\n\n for (var id in this.indexes) {\n index = this.indexes[id];\n\n if (oldIndex <= index) {\n this.indexes[id] = index + 1;\n }\n }\n\n return this;\n };\n\n _proto.insertBefore = function insertBefore(oldNode, newNode) {\n newNode.parent = this;\n var oldIndex = this.index(oldNode);\n this.nodes.splice(oldIndex, 0, newNode);\n newNode.parent = this;\n var index;\n\n for (var id in this.indexes) {\n index = this.indexes[id];\n\n if (index <= oldIndex) {\n this.indexes[id] = index + 1;\n }\n }\n\n return this;\n };\n\n _proto._findChildAtPosition = function _findChildAtPosition(line, col) {\n var found = undefined;\n this.each(function (node) {\n if (node.atPosition) {\n var foundChild = node.atPosition(line, col);\n\n if (foundChild) {\n found = foundChild;\n return false;\n }\n } else if (node.isAtPosition(line, col)) {\n found = node;\n return false;\n }\n });\n return found;\n }\n /**\n * Return the most specific node at the line and column number given.\n * The source location is based on the original parsed location, locations aren't\n * updated as selector nodes are mutated.\n * \n * Note that this location is relative to the location of the first character\n * of the selector, and not the location of the selector in the overall document\n * when used in conjunction with postcss.\n *\n * If not found, returns undefined.\n * @param {number} line The line number of the node to find. (1-based index)\n * @param {number} col The column number of the node to find. (1-based index)\n */\n ;\n\n _proto.atPosition = function atPosition(line, col) {\n if (this.isAtPosition(line, col)) {\n return this._findChildAtPosition(line, col) || this;\n } else {\n return undefined;\n }\n };\n\n _proto._inferEndPosition = function _inferEndPosition() {\n if (this.last && this.last.source && this.last.source.end) {\n this.source = this.source || {};\n this.source.end = this.source.end || {};\n Object.assign(this.source.end, this.last.source.end);\n }\n };\n\n _proto.each = function each(callback) {\n if (!this.lastEach) {\n this.lastEach = 0;\n }\n\n if (!this.indexes) {\n this.indexes = {};\n }\n\n this.lastEach++;\n var id = this.lastEach;\n this.indexes[id] = 0;\n\n if (!this.length) {\n return undefined;\n }\n\n var index, result;\n\n while (this.indexes[id] < this.length) {\n index = this.indexes[id];\n result = callback(this.at(index), index);\n\n if (result === false) {\n break;\n }\n\n this.indexes[id] += 1;\n }\n\n delete this.indexes[id];\n\n if (result === false) {\n return false;\n }\n };\n\n _proto.walk = function walk(callback) {\n return this.each(function (node, i) {\n var result = callback(node, i);\n\n if (result !== false && node.length) {\n result = node.walk(callback);\n }\n\n if (result === false) {\n return false;\n }\n });\n };\n\n _proto.walkAttributes = function walkAttributes(callback) {\n var _this2 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.ATTRIBUTE) {\n return callback.call(_this2, selector);\n }\n });\n };\n\n _proto.walkClasses = function walkClasses(callback) {\n var _this3 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.CLASS) {\n return callback.call(_this3, selector);\n }\n });\n };\n\n _proto.walkCombinators = function walkCombinators(callback) {\n var _this4 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.COMBINATOR) {\n return callback.call(_this4, selector);\n }\n });\n };\n\n _proto.walkComments = function walkComments(callback) {\n var _this5 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.COMMENT) {\n return callback.call(_this5, selector);\n }\n });\n };\n\n _proto.walkIds = function walkIds(callback) {\n var _this6 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.ID) {\n return callback.call(_this6, selector);\n }\n });\n };\n\n _proto.walkNesting = function walkNesting(callback) {\n var _this7 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.NESTING) {\n return callback.call(_this7, selector);\n }\n });\n };\n\n _proto.walkPseudos = function walkPseudos(callback) {\n var _this8 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.PSEUDO) {\n return callback.call(_this8, selector);\n }\n });\n };\n\n _proto.walkTags = function walkTags(callback) {\n var _this9 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.TAG) {\n return callback.call(_this9, selector);\n }\n });\n };\n\n _proto.walkUniversals = function walkUniversals(callback) {\n var _this10 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.UNIVERSAL) {\n return callback.call(_this10, selector);\n }\n });\n };\n\n _proto.split = function split(callback) {\n var _this11 = this;\n\n var current = [];\n return this.reduce(function (memo, node, index) {\n var split = callback.call(_this11, node);\n current.push(node);\n\n if (split) {\n memo.push(current);\n current = [];\n } else if (index === _this11.length - 1) {\n memo.push(current);\n }\n\n return memo;\n }, []);\n };\n\n _proto.map = function map(callback) {\n return this.nodes.map(callback);\n };\n\n _proto.reduce = function reduce(callback, memo) {\n return this.nodes.reduce(callback, memo);\n };\n\n _proto.every = function every(callback) {\n return this.nodes.every(callback);\n };\n\n _proto.some = function some(callback) {\n return this.nodes.some(callback);\n };\n\n _proto.filter = function filter(callback) {\n return this.nodes.filter(callback);\n };\n\n _proto.sort = function sort(callback) {\n return this.nodes.sort(callback);\n };\n\n _proto.toString = function toString() {\n return this.map(String).join('');\n };\n\n _createClass(Container, [{\n key: \"first\",\n get: function get() {\n return this.at(0);\n }\n }, {\n key: \"last\",\n get: function get() {\n return this.at(this.length - 1);\n }\n }, {\n key: \"length\",\n get: function get() {\n return this.nodes.length;\n }\n }]);\n\n return Container;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Container;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.isNode = isNode;\nexports.isPseudoElement = isPseudoElement;\nexports.isPseudoClass = isPseudoClass;\nexports.isContainer = isContainer;\nexports.isNamespace = isNamespace;\nexports.isUniversal = exports.isTag = exports.isString = exports.isSelector = exports.isRoot = exports.isPseudo = exports.isNesting = exports.isIdentifier = exports.isComment = exports.isCombinator = exports.isClassName = exports.isAttribute = void 0;\n\nvar _types = require(\"./types\");\n\nvar _IS_TYPE;\n\nvar IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);\n\nfunction isNode(node) {\n return typeof node === \"object\" && IS_TYPE[node.type];\n}\n\nfunction isNodeType(type, node) {\n return isNode(node) && node.type === type;\n}\n\nvar isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);\nexports.isAttribute = isAttribute;\nvar isClassName = isNodeType.bind(null, _types.CLASS);\nexports.isClassName = isClassName;\nvar isCombinator = isNodeType.bind(null, _types.COMBINATOR);\nexports.isCombinator = isCombinator;\nvar isComment = isNodeType.bind(null, _types.COMMENT);\nexports.isComment = isComment;\nvar isIdentifier = isNodeType.bind(null, _types.ID);\nexports.isIdentifier = isIdentifier;\nvar isNesting = isNodeType.bind(null, _types.NESTING);\nexports.isNesting = isNesting;\nvar isPseudo = isNodeType.bind(null, _types.PSEUDO);\nexports.isPseudo = isPseudo;\nvar isRoot = isNodeType.bind(null, _types.ROOT);\nexports.isRoot = isRoot;\nvar isSelector = isNodeType.bind(null, _types.SELECTOR);\nexports.isSelector = isSelector;\nvar isString = isNodeType.bind(null, _types.STRING);\nexports.isString = isString;\nvar isTag = isNodeType.bind(null, _types.TAG);\nexports.isTag = isTag;\nvar isUniversal = isNodeType.bind(null, _types.UNIVERSAL);\nexports.isUniversal = isUniversal;\n\nfunction isPseudoElement(node) {\n return isPseudo(node) && node.value && (node.value.startsWith(\"::\") || node.value.toLowerCase() === \":before\" || node.value.toLowerCase() === \":after\" || node.value.toLowerCase() === \":first-letter\" || node.value.toLowerCase() === \":first-line\");\n}\n\nfunction isPseudoClass(node) {\n return isPseudo(node) && !isPseudoElement(node);\n}\n\nfunction isContainer(node) {\n return !!(isNode(node) && node.walk);\n}\n\nfunction isNamespace(node) {\n return isAttribute(node) || isTag(node);\n}","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ID = /*#__PURE__*/function (_Node) {\n _inheritsLoose(ID, _Node);\n\n function ID(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.ID;\n return _this;\n }\n\n var _proto = ID.prototype;\n\n _proto.valueToString = function valueToString() {\n return '#' + _Node.prototype.valueToString.call(this);\n };\n\n return ID;\n}(_node[\"default\"]);\n\nexports[\"default\"] = ID;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\n\nvar _types = require(\"./types\");\n\nObject.keys(_types).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _types[key]) return;\n exports[key] = _types[key];\n});\n\nvar _constructors = require(\"./constructors\");\n\nObject.keys(_constructors).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _constructors[key]) return;\n exports[key] = _constructors[key];\n});\n\nvar _guards = require(\"./guards\");\n\nObject.keys(_guards).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _guards[key]) return;\n exports[key] = _guards[key];\n});","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _util = require(\"../util\");\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Namespace = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Namespace, _Node);\n\n function Namespace() {\n return _Node.apply(this, arguments) || this;\n }\n\n var _proto = Namespace.prototype;\n\n _proto.qualifiedName = function qualifiedName(value) {\n if (this.namespace) {\n return this.namespaceString + \"|\" + value;\n } else {\n return value;\n }\n };\n\n _proto.valueToString = function valueToString() {\n return this.qualifiedName(_Node.prototype.valueToString.call(this));\n };\n\n _createClass(Namespace, [{\n key: \"namespace\",\n get: function get() {\n return this._namespace;\n },\n set: function set(namespace) {\n if (namespace === true || namespace === \"*\" || namespace === \"&\") {\n this._namespace = namespace;\n\n if (this.raws) {\n delete this.raws.namespace;\n }\n\n return;\n }\n\n var escaped = (0, _cssesc[\"default\"])(namespace, {\n isIdentifier: true\n });\n this._namespace = namespace;\n\n if (escaped !== namespace) {\n (0, _util.ensureObject)(this, \"raws\");\n this.raws.namespace = escaped;\n } else if (this.raws) {\n delete this.raws.namespace;\n }\n }\n }, {\n key: \"ns\",\n get: function get() {\n return this._namespace;\n },\n set: function set(namespace) {\n this.namespace = namespace;\n }\n }, {\n key: \"namespaceString\",\n get: function get() {\n if (this.namespace) {\n var ns = this.stringifyProperty(\"namespace\");\n\n if (ns === true) {\n return '';\n } else {\n return ns;\n }\n } else {\n return '';\n }\n }\n }]);\n\n return Namespace;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Namespace;\n;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Nesting = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Nesting, _Node);\n\n function Nesting(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.NESTING;\n _this.value = '&';\n return _this;\n }\n\n return Nesting;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Nesting;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _util = require(\"../util\");\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar cloneNode = function cloneNode(obj, parent) {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n\n var cloned = new obj.constructor();\n\n for (var i in obj) {\n if (!obj.hasOwnProperty(i)) {\n continue;\n }\n\n var value = obj[i];\n var type = typeof value;\n\n if (i === 'parent' && type === 'object') {\n if (parent) {\n cloned[i] = parent;\n }\n } else if (value instanceof Array) {\n cloned[i] = value.map(function (j) {\n return cloneNode(j, cloned);\n });\n } else {\n cloned[i] = cloneNode(value, cloned);\n }\n }\n\n return cloned;\n};\n\nvar Node = /*#__PURE__*/function () {\n function Node(opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n Object.assign(this, opts);\n this.spaces = this.spaces || {};\n this.spaces.before = this.spaces.before || '';\n this.spaces.after = this.spaces.after || '';\n }\n\n var _proto = Node.prototype;\n\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n\n this.parent = undefined;\n return this;\n };\n\n _proto.replaceWith = function replaceWith() {\n if (this.parent) {\n for (var index in arguments) {\n this.parent.insertBefore(this, arguments[index]);\n }\n\n this.remove();\n }\n\n return this;\n };\n\n _proto.next = function next() {\n return this.parent.at(this.parent.index(this) + 1);\n };\n\n _proto.prev = function prev() {\n return this.parent.at(this.parent.index(this) - 1);\n };\n\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n var cloned = cloneNode(this);\n\n for (var name in overrides) {\n cloned[name] = overrides[name];\n }\n\n return cloned;\n }\n /**\n * Some non-standard syntax doesn't follow normal escaping rules for css.\n * This allows non standard syntax to be appended to an existing property\n * by specifying the escaped value. By specifying the escaped value,\n * illegal characters are allowed to be directly inserted into css output.\n * @param {string} name the property to set\n * @param {any} value the unescaped value of the property\n * @param {string} valueEscaped optional. the escaped value of the property.\n */\n ;\n\n _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {\n if (!this.raws) {\n this.raws = {};\n }\n\n var originalValue = this[name];\n var originalEscaped = this.raws[name];\n this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.\n\n if (originalEscaped || valueEscaped !== value) {\n this.raws[name] = (originalEscaped || originalValue) + valueEscaped;\n } else {\n delete this.raws[name]; // delete any escaped value that was created by the setter.\n }\n }\n /**\n * Some non-standard syntax doesn't follow normal escaping rules for css.\n * This allows the escaped value to be specified directly, allowing illegal\n * characters to be directly inserted into css output.\n * @param {string} name the property to set\n * @param {any} value the unescaped value of the property\n * @param {string} valueEscaped the escaped value of the property.\n */\n ;\n\n _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {\n if (!this.raws) {\n this.raws = {};\n }\n\n this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n this.raws[name] = valueEscaped;\n }\n /**\n * When you want a value to passed through to CSS directly. This method\n * deletes the corresponding raw value causing the stringifier to fallback\n * to the unescaped value.\n * @param {string} name the property to set.\n * @param {any} value The value that is both escaped and unescaped.\n */\n ;\n\n _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {\n this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n if (this.raws) {\n delete this.raws[name];\n }\n }\n /**\n *\n * @param {number} line The number (starting with 1)\n * @param {number} column The column number (starting with 1)\n */\n ;\n\n _proto.isAtPosition = function isAtPosition(line, column) {\n if (this.source && this.source.start && this.source.end) {\n if (this.source.start.line > line) {\n return false;\n }\n\n if (this.source.end.line < line) {\n return false;\n }\n\n if (this.source.start.line === line && this.source.start.column > column) {\n return false;\n }\n\n if (this.source.end.line === line && this.source.end.column < column) {\n return false;\n }\n\n return true;\n }\n\n return undefined;\n };\n\n _proto.stringifyProperty = function stringifyProperty(name) {\n return this.raws && this.raws[name] || this[name];\n };\n\n _proto.valueToString = function valueToString() {\n return String(this.stringifyProperty(\"value\"));\n };\n\n _proto.toString = function toString() {\n return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');\n };\n\n _createClass(Node, [{\n key: \"rawSpaceBefore\",\n get: function get() {\n var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;\n\n if (rawSpace === undefined) {\n rawSpace = this.spaces && this.spaces.before;\n }\n\n return rawSpace || \"\";\n },\n set: function set(raw) {\n (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n this.raws.spaces.before = raw;\n }\n }, {\n key: \"rawSpaceAfter\",\n get: function get() {\n var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;\n\n if (rawSpace === undefined) {\n rawSpace = this.spaces.after;\n }\n\n return rawSpace || \"\";\n },\n set: function set(raw) {\n (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n this.raws.spaces.after = raw;\n }\n }]);\n\n return Node;\n}();\n\nexports[\"default\"] = Node;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Pseudo = /*#__PURE__*/function (_Container) {\n _inheritsLoose(Pseudo, _Container);\n\n function Pseudo(opts) {\n var _this;\n\n _this = _Container.call(this, opts) || this;\n _this.type = _types.PSEUDO;\n return _this;\n }\n\n var _proto = Pseudo.prototype;\n\n _proto.toString = function toString() {\n var params = this.length ? '(' + this.map(String).join(',') + ')' : '';\n return [this.rawSpaceBefore, this.stringifyProperty(\"value\"), params, this.rawSpaceAfter].join('');\n };\n\n return Pseudo;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Pseudo;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Root = /*#__PURE__*/function (_Container) {\n _inheritsLoose(Root, _Container);\n\n function Root(opts) {\n var _this;\n\n _this = _Container.call(this, opts) || this;\n _this.type = _types.ROOT;\n return _this;\n }\n\n var _proto = Root.prototype;\n\n _proto.toString = function toString() {\n var str = this.reduce(function (memo, selector) {\n memo.push(String(selector));\n return memo;\n }, []).join(',');\n return this.trailingComma ? str + ',' : str;\n };\n\n _proto.error = function error(message, options) {\n if (this._error) {\n return this._error(message, options);\n } else {\n return new Error(message);\n }\n };\n\n _createClass(Root, [{\n key: \"errorGenerator\",\n set: function set(handler) {\n this._error = handler;\n }\n }]);\n\n return Root;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Root;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Selector = /*#__PURE__*/function (_Container) {\n _inheritsLoose(Selector, _Container);\n\n function Selector(opts) {\n var _this;\n\n _this = _Container.call(this, opts) || this;\n _this.type = _types.SELECTOR;\n return _this;\n }\n\n return Selector;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Selector;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar String = /*#__PURE__*/function (_Node) {\n _inheritsLoose(String, _Node);\n\n function String(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.STRING;\n return _this;\n }\n\n return String;\n}(_node[\"default\"]);\n\nexports[\"default\"] = String;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Tag = /*#__PURE__*/function (_Namespace) {\n _inheritsLoose(Tag, _Namespace);\n\n function Tag(opts) {\n var _this;\n\n _this = _Namespace.call(this, opts) || this;\n _this.type = _types.TAG;\n return _this;\n }\n\n return Tag;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Tag;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.UNIVERSAL = exports.ATTRIBUTE = exports.CLASS = exports.COMBINATOR = exports.COMMENT = exports.ID = exports.NESTING = exports.PSEUDO = exports.ROOT = exports.SELECTOR = exports.STRING = exports.TAG = void 0;\nvar TAG = 'tag';\nexports.TAG = TAG;\nvar STRING = 'string';\nexports.STRING = STRING;\nvar SELECTOR = 'selector';\nexports.SELECTOR = SELECTOR;\nvar ROOT = 'root';\nexports.ROOT = ROOT;\nvar PSEUDO = 'pseudo';\nexports.PSEUDO = PSEUDO;\nvar NESTING = 'nesting';\nexports.NESTING = NESTING;\nvar ID = 'id';\nexports.ID = ID;\nvar COMMENT = 'comment';\nexports.COMMENT = COMMENT;\nvar COMBINATOR = 'combinator';\nexports.COMBINATOR = COMBINATOR;\nvar CLASS = 'class';\nexports.CLASS = CLASS;\nvar ATTRIBUTE = 'attribute';\nexports.ATTRIBUTE = ATTRIBUTE;\nvar UNIVERSAL = 'universal';\nexports.UNIVERSAL = UNIVERSAL;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Universal = /*#__PURE__*/function (_Namespace) {\n _inheritsLoose(Universal, _Namespace);\n\n function Universal(opts) {\n var _this;\n\n _this = _Namespace.call(this, opts) || this;\n _this.type = _types.UNIVERSAL;\n _this.value = '*';\n return _this;\n }\n\n return Universal;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Universal;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = sortAscending;\n\nfunction sortAscending(list) {\n return list.sort(function (a, b) {\n return a - b;\n });\n}\n\n;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.combinator = exports.word = exports.comment = exports.str = exports.tab = exports.newline = exports.feed = exports.cr = exports.backslash = exports.bang = exports.slash = exports.doubleQuote = exports.singleQuote = exports.space = exports.greaterThan = exports.pipe = exports.equals = exports.plus = exports.caret = exports.tilde = exports.dollar = exports.closeSquare = exports.openSquare = exports.closeParenthesis = exports.openParenthesis = exports.semicolon = exports.colon = exports.comma = exports.at = exports.asterisk = exports.ampersand = void 0;\nvar ampersand = 38; // `&`.charCodeAt(0);\n\nexports.ampersand = ampersand;\nvar asterisk = 42; // `*`.charCodeAt(0);\n\nexports.asterisk = asterisk;\nvar at = 64; // `@`.charCodeAt(0);\n\nexports.at = at;\nvar comma = 44; // `,`.charCodeAt(0);\n\nexports.comma = comma;\nvar colon = 58; // `:`.charCodeAt(0);\n\nexports.colon = colon;\nvar semicolon = 59; // `;`.charCodeAt(0);\n\nexports.semicolon = semicolon;\nvar openParenthesis = 40; // `(`.charCodeAt(0);\n\nexports.openParenthesis = openParenthesis;\nvar closeParenthesis = 41; // `)`.charCodeAt(0);\n\nexports.closeParenthesis = closeParenthesis;\nvar openSquare = 91; // `[`.charCodeAt(0);\n\nexports.openSquare = openSquare;\nvar closeSquare = 93; // `]`.charCodeAt(0);\n\nexports.closeSquare = closeSquare;\nvar dollar = 36; // `$`.charCodeAt(0);\n\nexports.dollar = dollar;\nvar tilde = 126; // `~`.charCodeAt(0);\n\nexports.tilde = tilde;\nvar caret = 94; // `^`.charCodeAt(0);\n\nexports.caret = caret;\nvar plus = 43; // `+`.charCodeAt(0);\n\nexports.plus = plus;\nvar equals = 61; // `=`.charCodeAt(0);\n\nexports.equals = equals;\nvar pipe = 124; // `|`.charCodeAt(0);\n\nexports.pipe = pipe;\nvar greaterThan = 62; // `>`.charCodeAt(0);\n\nexports.greaterThan = greaterThan;\nvar space = 32; // ` `.charCodeAt(0);\n\nexports.space = space;\nvar singleQuote = 39; // `'`.charCodeAt(0);\n\nexports.singleQuote = singleQuote;\nvar doubleQuote = 34; // `\"`.charCodeAt(0);\n\nexports.doubleQuote = doubleQuote;\nvar slash = 47; // `/`.charCodeAt(0);\n\nexports.slash = slash;\nvar bang = 33; // `!`.charCodeAt(0);\n\nexports.bang = bang;\nvar backslash = 92; // '\\\\'.charCodeAt(0);\n\nexports.backslash = backslash;\nvar cr = 13; // '\\r'.charCodeAt(0);\n\nexports.cr = cr;\nvar feed = 12; // '\\f'.charCodeAt(0);\n\nexports.feed = feed;\nvar newline = 10; // '\\n'.charCodeAt(0);\n\nexports.newline = newline;\nvar tab = 9; // '\\t'.charCodeAt(0);\n// Expose aliases primarily for readability.\n\nexports.tab = tab;\nvar str = singleQuote; // No good single character representation!\n\nexports.str = str;\nvar comment = -1;\nexports.comment = comment;\nvar word = -2;\nexports.word = word;\nvar combinator = -3;\nexports.combinator = combinator;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = tokenize;\nexports.FIELDS = void 0;\n\nvar t = _interopRequireWildcard(require(\"./tokenTypes\"));\n\nvar _unescapable, _wordDelimiters;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);\nvar wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);\nvar hex = {};\nvar hexChars = \"0123456789abcdefABCDEF\";\n\nfor (var i = 0; i < hexChars.length; i++) {\n hex[hexChars.charCodeAt(i)] = true;\n}\n/**\n * Returns the last index of the bar css word\n * @param {string} css The string in which the word begins\n * @param {number} start The index into the string where word's first letter occurs\n */\n\n\nfunction consumeWord(css, start) {\n var next = start;\n var code;\n\n do {\n code = css.charCodeAt(next);\n\n if (wordDelimiters[code]) {\n return next - 1;\n } else if (code === t.backslash) {\n next = consumeEscape(css, next) + 1;\n } else {\n // All other characters are part of the word\n next++;\n }\n } while (next < css.length);\n\n return next - 1;\n}\n/**\n * Returns the last index of the escape sequence\n * @param {string} css The string in which the sequence begins\n * @param {number} start The index into the string where escape character (`\\`) occurs.\n */\n\n\nfunction consumeEscape(css, start) {\n var next = start;\n var code = css.charCodeAt(next + 1);\n\n if (unescapable[code]) {// just consume the escape char\n } else if (hex[code]) {\n var hexDigits = 0; // consume up to 6 hex chars\n\n do {\n next++;\n hexDigits++;\n code = css.charCodeAt(next + 1);\n } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape\n\n\n if (hexDigits < 6 && code === t.space) {\n next++;\n }\n } else {\n // the next char is part of the current word\n next++;\n }\n\n return next;\n}\n\nvar FIELDS = {\n TYPE: 0,\n START_LINE: 1,\n START_COL: 2,\n END_LINE: 3,\n END_COL: 4,\n START_POS: 5,\n END_POS: 6\n};\nexports.FIELDS = FIELDS;\n\nfunction tokenize(input) {\n var tokens = [];\n var css = input.css.valueOf();\n var _css = css,\n length = _css.length;\n var offset = -1;\n var line = 1;\n var start = 0;\n var end = 0;\n var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;\n\n function unclosed(what, fix) {\n if (input.safe) {\n // fyi: this is never set to true.\n css += fix;\n next = css.length - 1;\n } else {\n throw input.error('Unclosed ' + what, line, start - offset, start);\n }\n }\n\n while (start < length) {\n code = css.charCodeAt(start);\n\n if (code === t.newline) {\n offset = start;\n line += 1;\n }\n\n switch (code) {\n case t.space:\n case t.tab:\n case t.newline:\n case t.cr:\n case t.feed:\n next = start;\n\n do {\n next += 1;\n code = css.charCodeAt(next);\n\n if (code === t.newline) {\n offset = next;\n line += 1;\n }\n } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);\n\n tokenType = t.space;\n endLine = line;\n endColumn = next - offset - 1;\n end = next;\n break;\n\n case t.plus:\n case t.greaterThan:\n case t.tilde:\n case t.pipe:\n next = start;\n\n do {\n next += 1;\n code = css.charCodeAt(next);\n } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);\n\n tokenType = t.combinator;\n endLine = line;\n endColumn = start - offset;\n end = next;\n break;\n // Consume these characters as single tokens.\n\n case t.asterisk:\n case t.ampersand:\n case t.bang:\n case t.comma:\n case t.equals:\n case t.dollar:\n case t.caret:\n case t.openSquare:\n case t.closeSquare:\n case t.colon:\n case t.semicolon:\n case t.openParenthesis:\n case t.closeParenthesis:\n next = start;\n tokenType = code;\n endLine = line;\n endColumn = start - offset;\n end = next + 1;\n break;\n\n case t.singleQuote:\n case t.doubleQuote:\n quote = code === t.singleQuote ? \"'\" : '\"';\n next = start;\n\n do {\n escaped = false;\n next = css.indexOf(quote, next + 1);\n\n if (next === -1) {\n unclosed('quote', quote);\n }\n\n escapePos = next;\n\n while (css.charCodeAt(escapePos - 1) === t.backslash) {\n escapePos -= 1;\n escaped = !escaped;\n }\n } while (escaped);\n\n tokenType = t.str;\n endLine = line;\n endColumn = start - offset;\n end = next + 1;\n break;\n\n default:\n if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {\n next = css.indexOf('*/', start + 2) + 1;\n\n if (next === 0) {\n unclosed('comment', '*/');\n }\n\n content = css.slice(start, next + 1);\n lines = content.split('\\n');\n last = lines.length - 1;\n\n if (last > 0) {\n nextLine = line + last;\n nextOffset = next - lines[last].length;\n } else {\n nextLine = line;\n nextOffset = offset;\n }\n\n tokenType = t.comment;\n line = nextLine;\n endLine = nextLine;\n endColumn = next - nextOffset;\n } else if (code === t.slash) {\n next = start;\n tokenType = code;\n endLine = line;\n endColumn = start - offset;\n end = next + 1;\n } else {\n next = consumeWord(css, start);\n tokenType = t.word;\n endLine = line;\n endColumn = next - offset;\n }\n\n end = next + 1;\n break;\n } // Ensure that the token structure remains consistent\n\n\n tokens.push([tokenType, // [0] Token type\n line, // [1] Starting line\n start - offset, // [2] Starting column\n endLine, // [3] Ending line\n endColumn, // [4] Ending column\n start, // [5] Start position / Source index\n end // [6] End position\n ]); // Reset offset for the next token\n\n if (nextOffset) {\n offset = nextOffset;\n nextOffset = null;\n }\n\n start = end;\n }\n\n return tokens;\n}","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = ensureObject;\n\nfunction ensureObject(obj) {\n for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n props[_key - 1] = arguments[_key];\n }\n\n while (props.length > 0) {\n var prop = props.shift();\n\n if (!obj[prop]) {\n obj[prop] = {};\n }\n\n obj = obj[prop];\n }\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = getProp;\n\nfunction getProp(obj) {\n for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n props[_key - 1] = arguments[_key];\n }\n\n while (props.length > 0) {\n var prop = props.shift();\n\n if (!obj[prop]) {\n return undefined;\n }\n\n obj = obj[prop];\n }\n\n return obj;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.stripComments = exports.ensureObject = exports.getProp = exports.unesc = void 0;\n\nvar _unesc = _interopRequireDefault(require(\"./unesc\"));\n\nexports.unesc = _unesc[\"default\"];\n\nvar _getProp = _interopRequireDefault(require(\"./getProp\"));\n\nexports.getProp = _getProp[\"default\"];\n\nvar _ensureObject = _interopRequireDefault(require(\"./ensureObject\"));\n\nexports.ensureObject = _ensureObject[\"default\"];\n\nvar _stripComments = _interopRequireDefault(require(\"./stripComments\"));\n\nexports.stripComments = _stripComments[\"default\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = stripComments;\n\nfunction stripComments(str) {\n var s = \"\";\n var commentStart = str.indexOf(\"/*\");\n var lastEnd = 0;\n\n while (commentStart >= 0) {\n s = s + str.slice(lastEnd, commentStart);\n var commentEnd = str.indexOf(\"*/\", commentStart + 2);\n\n if (commentEnd < 0) {\n return s;\n }\n\n lastEnd = commentEnd + 2;\n commentStart = str.indexOf(\"/*\", lastEnd);\n }\n\n s = s + str.slice(lastEnd);\n return s;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = unesc;\n\n// Many thanks for this post which made this migration much easier.\n// https://mathiasbynens.be/notes/css-escapes\n\n/**\n * \n * @param {string} str \n * @returns {[string, number]|undefined}\n */\nfunction gobbleHex(str) {\n var lower = str.toLowerCase();\n var hex = '';\n var spaceTerminated = false;\n\n for (var i = 0; i < 6 && lower[i] !== undefined; i++) {\n var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]\n\n var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point\n\n spaceTerminated = code === 32;\n\n if (!valid) {\n break;\n }\n\n hex += lower[i];\n }\n\n if (hex.length === 0) {\n return undefined;\n }\n\n var codePoint = parseInt(hex, 16);\n var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for\n // \"If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point\"\n // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point\n\n if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {\n return [\"\\uFFFD\", hex.length + (spaceTerminated ? 1 : 0)];\n }\n\n return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];\n}\n\nvar CONTAINS_ESCAPE = /\\\\/;\n\nfunction unesc(str) {\n var needToProcess = CONTAINS_ESCAPE.test(str);\n\n if (!needToProcess) {\n return str;\n }\n\n var ret = \"\";\n\n for (var i = 0; i < str.length; i++) {\n if (str[i] === \"\\\\\") {\n var gobbled = gobbleHex(str.slice(i + 1, i + 7));\n\n if (gobbled !== undefined) {\n ret += gobbled[0];\n i += gobbled[1];\n continue;\n } // Retain a pair of \\\\ if double escaped `\\\\\\\\`\n // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e\n\n\n if (str[i + 1] === \"\\\\\") {\n ret += \"\\\\\";\n i++;\n continue;\n } // if \\\\ is at the end of the string retain it\n // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb\n\n\n if (str.length === i + 1) {\n ret += str[i];\n }\n\n continue;\n }\n\n ret += str[i];\n }\n\n return ret;\n}\n\nmodule.exports = exports.default;","/**\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","module.exports = require('./lib/index.js');\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 _core = require('../core');\n\nvar _metaProps = require('../metaProps');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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 defaultProps = {\n target: '_blank'\n};\n\nvar CSVDownload = function (_React$Component) {\n _inherits(CSVDownload, _React$Component);\n\n function CSVDownload(props) {\n _classCallCheck(this, CSVDownload);\n\n var _this = _possibleConstructorReturn(this, (CSVDownload.__proto__ || Object.getPrototypeOf(CSVDownload)).call(this, props));\n\n _this.state = {};\n return _this;\n }\n\n _createClass(CSVDownload, [{\n key: 'buildURI',\n value: function buildURI() {\n return _core.buildURI.apply(undefined, arguments);\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n data = _props.data,\n headers = _props.headers,\n separator = _props.separator,\n enclosingCharacter = _props.enclosingCharacter,\n uFEFF = _props.uFEFF,\n target = _props.target,\n specs = _props.specs,\n replace = _props.replace;\n\n this.state.page = window.open(this.buildURI(data, uFEFF, headers, separator, enclosingCharacter), target, specs, replace);\n }\n }, {\n key: 'getWindow',\n value: function getWindow() {\n return this.state.page;\n }\n }, {\n key: 'render',\n value: function render() {\n return null;\n }\n }]);\n\n return CSVDownload;\n}(_react2.default.Component);\n\nCSVDownload.defaultProps = Object.assign(_metaProps.defaultProps, defaultProps);\nCSVDownload.propTypes = _metaProps.propTypes;\nexports.default = CSVDownload;","'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 _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _core = require('../core');\n\nvar _metaProps = require('../metaProps');\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 CSVLink = function (_React$Component) {\n _inherits(CSVLink, _React$Component);\n\n function CSVLink(props) {\n _classCallCheck(this, CSVLink);\n\n var _this = _possibleConstructorReturn(this, (CSVLink.__proto__ || Object.getPrototypeOf(CSVLink)).call(this, props));\n\n _this.buildURI = _this.buildURI.bind(_this);\n return _this;\n }\n\n _createClass(CSVLink, [{\n key: 'buildURI',\n value: function buildURI() {\n return _core.buildURI.apply(undefined, arguments);\n }\n }, {\n key: 'handleLegacy',\n value: function handleLegacy(event) {\n var isAsync = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (window.navigator.msSaveOrOpenBlob) {\n event.preventDefault();\n\n var _props = this.props,\n data = _props.data,\n headers = _props.headers,\n separator = _props.separator,\n filename = _props.filename,\n enclosingCharacter = _props.enclosingCharacter,\n uFEFF = _props.uFEFF;\n\n\n var csvData = isAsync && typeof data === 'function' ? data() : data;\n\n var blob = new Blob([uFEFF ? '\\uFEFF' : '', (0, _core.toCSV)(csvData, headers, separator, enclosingCharacter)]);\n window.navigator.msSaveBlob(blob, filename);\n\n return false;\n }\n }\n }, {\n key: 'handleAsyncClick',\n value: function handleAsyncClick(event) {\n var _this2 = this;\n\n var done = function done(proceed) {\n if (proceed === false) {\n event.preventDefault();\n return;\n }\n _this2.handleLegacy(event, true);\n };\n\n this.props.onClick(event, done);\n }\n }, {\n key: 'handleSyncClick',\n value: function handleSyncClick(event) {\n var stopEvent = this.props.onClick(event) === false;\n if (stopEvent) {\n event.preventDefault();\n return;\n }\n this.handleLegacy(event);\n }\n }, {\n key: 'handleClick',\n value: function handleClick() {\n var _this3 = this;\n\n return function (event) {\n if (typeof _this3.props.onClick === 'function') {\n return _this3.props.asyncOnClick ? _this3.handleAsyncClick(event) : _this3.handleSyncClick(event);\n }\n _this3.handleLegacy(event);\n };\n }\n }, {\n key: 'render',\n value: function render() {\n var _this4 = this;\n\n var _props2 = this.props,\n data = _props2.data,\n headers = _props2.headers,\n separator = _props2.separator,\n filename = _props2.filename,\n uFEFF = _props2.uFEFF,\n children = _props2.children,\n onClick = _props2.onClick,\n asyncOnClick = _props2.asyncOnClick,\n enclosingCharacter = _props2.enclosingCharacter,\n rest = _objectWithoutProperties(_props2, ['data', 'headers', 'separator', 'filename', 'uFEFF', 'children', 'onClick', 'asyncOnClick', 'enclosingCharacter']);\n\n var isNodeEnvironment = typeof window === 'undefined';\n var href = isNodeEnvironment ? '' : this.buildURI(data, uFEFF, headers, separator, enclosingCharacter);\n\n return _react2.default.createElement(\n 'a',\n _extends({\n download: filename\n }, rest, {\n ref: function ref(link) {\n return _this4.link = link;\n },\n target: '_self',\n href: href,\n onClick: this.handleClick()\n }),\n children\n );\n }\n }]);\n\n return CSVLink;\n}(_react2.default.Component);\n\nCSVLink.defaultProps = _metaProps.defaultProps;\nCSVLink.propTypes = _metaProps.propTypes;\nexports.default = CSVLink;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar isSafari = exports.isSafari = function isSafari() {\n return (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)\n );\n};\n\nvar isJsons = exports.isJsons = function isJsons(array) {\n return Array.isArray(array) && array.every(function (row) {\n return (typeof row === \"undefined\" ? \"undefined\" : _typeof(row)) === 'object' && !(row instanceof Array);\n });\n};\n\nvar isArrays = exports.isArrays = function isArrays(array) {\n return Array.isArray(array) && array.every(function (row) {\n return Array.isArray(row);\n });\n};\n\nvar jsonsHeaders = exports.jsonsHeaders = function jsonsHeaders(array) {\n return Array.from(array.map(function (json) {\n return Object.keys(json);\n }).reduce(function (a, b) {\n return new Set([].concat(_toConsumableArray(a), _toConsumableArray(b)));\n }, []));\n};\n\nvar jsons2arrays = exports.jsons2arrays = function jsons2arrays(jsons, headers) {\n headers = headers || jsonsHeaders(jsons);\n\n var headerLabels = headers;\n var headerKeys = headers;\n if (isJsons(headers)) {\n headerLabels = headers.map(function (header) {\n return header.label;\n });\n headerKeys = headers.map(function (header) {\n return header.key;\n });\n }\n\n var data = jsons.map(function (object) {\n return headerKeys.map(function (header) {\n return getHeaderValue(header, object);\n });\n });\n return [headerLabels].concat(_toConsumableArray(data));\n};\n\nvar getHeaderValue = exports.getHeaderValue = function getHeaderValue(property, obj) {\n var foundValue = property.replace(/\\[([^\\]]+)]/g, \".$1\").split(\".\").reduce(function (o, p, i, arr) {\n var value = o[p];\n if (value === undefined || value === null) {\n arr.splice(1);\n } else {\n return value;\n }\n }, obj);\n\n return foundValue === undefined ? property in obj ? obj[property] : '' : foundValue;\n};\n\nvar elementOrEmpty = exports.elementOrEmpty = function elementOrEmpty(element) {\n return typeof element === 'undefined' || element === null ? '' : element;\n};\n\nvar joiner = exports.joiner = function joiner(data) {\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n var enclosingCharacter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '\"';\n\n return data.filter(function (e) {\n return e;\n }).map(function (row) {\n return row.map(function (element) {\n return elementOrEmpty(element);\n }).map(function (column) {\n return \"\" + enclosingCharacter + column + enclosingCharacter;\n }).join(separator);\n }).join(\"\\n\");\n};\n\nvar arrays2csv = exports.arrays2csv = function arrays2csv(data, headers, separator, enclosingCharacter) {\n return joiner(headers ? [headers].concat(_toConsumableArray(data)) : data, separator, enclosingCharacter);\n};\n\nvar jsons2csv = exports.jsons2csv = function jsons2csv(data, headers, separator, enclosingCharacter) {\n return joiner(jsons2arrays(data, headers), separator, enclosingCharacter);\n};\n\nvar string2csv = exports.string2csv = function string2csv(data, headers, separator, enclosingCharacter) {\n return headers ? headers.join(separator) + \"\\n\" + data : data.replace(/\"/g, '\"\"');\n};\n\nvar toCSV = exports.toCSV = function toCSV(data, headers, separator, enclosingCharacter) {\n if (isJsons(data)) return jsons2csv(data, headers, separator, enclosingCharacter);\n if (isArrays(data)) return arrays2csv(data, headers, separator, enclosingCharacter);\n if (typeof data === 'string') return string2csv(data, headers, separator);\n throw new TypeError(\"Data should be a \\\"String\\\", \\\"Array of arrays\\\" OR \\\"Array of objects\\\" \");\n};\n\nvar buildURI = exports.buildURI = function buildURI(data, uFEFF, headers, separator, enclosingCharacter) {\n var csv = toCSV(data, headers, separator, enclosingCharacter);\n var type = isSafari() ? 'application/csv' : 'text/csv';\n var blob = new Blob([uFEFF ? \"\\uFEFF\" : '', csv], { type: type });\n var dataURI = \"data:\" + type + \";charset=utf-8,\" + (uFEFF ? \"\\uFEFF\" : '') + csv;\n\n var URL = window.URL || window.webkitURL;\n\n return typeof URL.createObjectURL === 'undefined' ? dataURI : URL.createObjectURL(blob);\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CSVLink = exports.CSVDownload = undefined;\n\nvar _Download = require('./components/Download');\n\nvar _Download2 = _interopRequireDefault(_Download);\n\nvar _Link = require('./components/Link');\n\nvar _Link2 = _interopRequireDefault(_Link);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar CSVDownload = exports.CSVDownload = _Download2.default;\nvar CSVLink = exports.CSVLink = _Link2.default;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PropsNotForwarded = exports.defaultProps = exports.propTypes = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar propTypes = exports.propTypes = {\n data: (0, _propTypes.oneOfType)([_propTypes.string, _propTypes.array, _propTypes.func]).isRequired,\n headers: _propTypes.array,\n target: _propTypes.string,\n separator: _propTypes.string,\n filename: _propTypes.string,\n uFEFF: _propTypes.bool,\n onClick: _propTypes.func,\n asyncOnClick: _propTypes.bool,\n enclosingCharacter: _propTypes.string\n};\n\nvar defaultProps = exports.defaultProps = {\n separator: ',',\n filename: 'generatedBy_react-csv.csv',\n uFEFF: true,\n asyncOnClick: false,\n enclosingCharacter: '\"'\n};\n\nvar PropsNotForwarded = exports.PropsNotForwarded = ['data', 'headers'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ariaLabelsShape = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ariaLabelsShape = _propTypes.default.shape({\n dateInput: _propTypes.default.objectOf(_propTypes.default.shape({\n startDate: _propTypes.default.string,\n endDate: _propTypes.default.string\n })),\n monthPicker: _propTypes.default.string,\n yearPicker: _propTypes.default.string,\n prevButton: _propTypes.default.string,\n nextButton: _propTypes.default.string\n});\n\nexports.ariaLabelsShape = ariaLabelsShape;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _DayCell = require(\"../DayCell\");\n\nvar _Month = _interopRequireDefault(require(\"../Month\"));\n\nvar _DateInput = _interopRequireDefault(require(\"../DateInput\"));\n\nvar _utils = require(\"../../utils\");\n\nvar _classnames3 = _interopRequireDefault(require(\"classnames\"));\n\nvar _reactList = _interopRequireDefault(require(\"react-list\"));\n\nvar _shallowEqual = require(\"shallow-equal\");\n\nvar _max = _interopRequireDefault(require(\"date-fns/max\"));\n\nvar _min = _interopRequireDefault(require(\"date-fns/min\"));\n\nvar _differenceInDays = _interopRequireDefault(require(\"date-fns/differenceInDays\"));\n\nvar _isSameMonth = _interopRequireDefault(require(\"date-fns/isSameMonth\"));\n\nvar _addDays = _interopRequireDefault(require(\"date-fns/addDays\"));\n\nvar _endOfMonth = _interopRequireDefault(require(\"date-fns/endOfMonth\"));\n\nvar _startOfMonth = _interopRequireDefault(require(\"date-fns/startOfMonth\"));\n\nvar _differenceInCalendarMonths = _interopRequireDefault(require(\"date-fns/differenceInCalendarMonths\"));\n\nvar _setMonth2 = _interopRequireDefault(require(\"date-fns/setMonth\"));\n\nvar _setYear2 = _interopRequireDefault(require(\"date-fns/setYear\"));\n\nvar _addYears = _interopRequireDefault(require(\"date-fns/addYears\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"date-fns/isSameDay\"));\n\nvar _endOfWeek = _interopRequireDefault(require(\"date-fns/endOfWeek\"));\n\nvar _startOfWeek = _interopRequireDefault(require(\"date-fns/startOfWeek\"));\n\nvar _eachDayOfInterval = _interopRequireDefault(require(\"date-fns/eachDayOfInterval\"));\n\nvar _format = _interopRequireDefault(require(\"date-fns/format\"));\n\nvar _subMonths = _interopRequireDefault(require(\"date-fns/subMonths\"));\n\nvar _addMonths = _interopRequireDefault(require(\"date-fns/addMonths\"));\n\nvar _enUS = _interopRequireDefault(require(\"date-fns/locale/en-US\"));\n\nvar _styles = _interopRequireDefault(require(\"../../styles\"));\n\nvar _accessibility = require(\"../../accessibility\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _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; }; return _extends.apply(this, arguments); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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.\"); }\n\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); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\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; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nvar Calendar = /*#__PURE__*/function (_PureComponent) {\n _inherits(Calendar, _PureComponent);\n\n var _super = _createSuper(Calendar);\n\n function Calendar(_props, context) {\n var _this;\n\n _classCallCheck(this, Calendar);\n\n _this = _super.call(this, _props, context);\n\n _defineProperty(_assertThisInitialized(_this), \"focusToDate\", function (date) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _this.props;\n var preventUnnecessary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!props.scroll.enabled) {\n if (preventUnnecessary && props.preventSnapRefocus) {\n var focusedDateDiff = (0, _differenceInCalendarMonths.default)(date, _this.state.focusedDate);\n var isAllowedForward = props.calendarFocus === 'forwards' && focusedDateDiff >= 0;\n var isAllowedBackward = props.calendarFocus === 'backwards' && focusedDateDiff <= 0;\n\n if ((isAllowedForward || isAllowedBackward) && Math.abs(focusedDateDiff) < props.months) {\n return;\n }\n }\n\n _this.setState({\n focusedDate: date\n });\n\n return;\n }\n\n var targetMonthIndex = (0, _differenceInCalendarMonths.default)(date, props.minDate, _this.dateOptions);\n\n var visibleMonths = _this.list.getVisibleRange();\n\n if (preventUnnecessary && visibleMonths.includes(targetMonthIndex)) return;\n _this.isFirstRender = true;\n\n _this.list.scrollTo(targetMonthIndex);\n\n _this.setState({\n focusedDate: date\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateShownDate\", function () {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.props;\n var newProps = props.scroll.enabled ? _objectSpread(_objectSpread({}, props), {}, {\n months: _this.list.getVisibleRange().length\n }) : props;\n var newFocus = (0, _utils.calcFocusDate)(_this.state.focusedDate, newProps);\n\n _this.focusToDate(newFocus, newProps);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updatePreview\", function (val) {\n if (!val) {\n _this.setState({\n preview: null\n });\n\n return;\n }\n\n var preview = {\n startDate: val,\n endDate: val,\n color: _this.props.color\n };\n\n _this.setState({\n preview: preview\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"changeShownDate\", function (value) {\n var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'set';\n var focusedDate = _this.state.focusedDate;\n var _this$props = _this.props,\n onShownDateChange = _this$props.onShownDateChange,\n minDate = _this$props.minDate,\n maxDate = _this$props.maxDate;\n var modeMapper = {\n monthOffset: function monthOffset() {\n return (0, _addMonths.default)(focusedDate, value);\n },\n setMonth: function (_setMonth) {\n function setMonth() {\n return _setMonth.apply(this, arguments);\n }\n\n setMonth.toString = function () {\n return _setMonth.toString();\n };\n\n return setMonth;\n }(function () {\n return (0, _setMonth2.default)(focusedDate, value);\n }),\n setYear: function (_setYear) {\n function setYear() {\n return _setYear.apply(this, arguments);\n }\n\n setYear.toString = function () {\n return _setYear.toString();\n };\n\n return setYear;\n }(function () {\n return (0, _setYear2.default)(focusedDate, value);\n }),\n set: function set() {\n return value;\n }\n };\n var newDate = (0, _min.default)([(0, _max.default)([modeMapper[mode](), minDate]), maxDate]);\n\n _this.focusToDate(newDate, _this.props, false);\n\n onShownDateChange && onShownDateChange(newDate);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleRangeFocusChange\", function (rangesIndex, rangeItemIndex) {\n _this.props.onRangeFocusChange && _this.props.onRangeFocusChange([rangesIndex, rangeItemIndex]);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleScroll\", function () {\n var _this$props2 = _this.props,\n onShownDateChange = _this$props2.onShownDateChange,\n minDate = _this$props2.minDate;\n var focusedDate = _this.state.focusedDate;\n\n var _assertThisInitialize = _assertThisInitialized(_this),\n isFirstRender = _assertThisInitialize.isFirstRender;\n\n var visibleMonths = _this.list.getVisibleRange(); // prevent scroll jump with wrong visible value\n\n\n if (visibleMonths[0] === undefined) return;\n var visibleMonth = (0, _addMonths.default)(minDate, visibleMonths[0] || 0);\n var isFocusedToDifferent = !(0, _isSameMonth.default)(visibleMonth, focusedDate);\n\n if (isFocusedToDifferent && !isFirstRender) {\n _this.setState({\n focusedDate: visibleMonth\n });\n\n onShownDateChange && onShownDateChange(visibleMonth);\n }\n\n _this.isFirstRender = false;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderMonthAndYear\", function (focusedDate, changeShownDate, props) {\n var showMonthArrow = props.showMonthArrow,\n minDate = props.minDate,\n maxDate = props.maxDate,\n showMonthAndYearPickers = props.showMonthAndYearPickers,\n ariaLabels = props.ariaLabels;\n var upperYearLimit = (maxDate || Calendar.defaultProps.maxDate).getFullYear();\n var lowerYearLimit = (minDate || Calendar.defaultProps.minDate).getFullYear();\n var styles = _this.styles;\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n onMouseUp: function onMouseUp(e) {\n return e.stopPropagation();\n },\n className: styles.monthAndYearWrapper\n }, showMonthArrow ? /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n className: (0, _classnames3.default)(styles.nextPrevButton, styles.prevButton),\n onClick: function onClick() {\n return changeShownDate(-1, 'monthOffset');\n },\n \"aria-label\": ariaLabels.prevButton\n }, /*#__PURE__*/_react.default.createElement(\"i\", null)) : null, showMonthAndYearPickers ? /*#__PURE__*/_react.default.createElement(\"span\", {\n className: styles.monthAndYearPickers\n }, /*#__PURE__*/_react.default.createElement(\"span\", {\n className: styles.monthPicker\n }, /*#__PURE__*/_react.default.createElement(\"select\", {\n value: focusedDate.getMonth(),\n onChange: function onChange(e) {\n return changeShownDate(e.target.value, 'setMonth');\n },\n \"aria-label\": ariaLabels.monthPicker\n }, _this.state.monthNames.map(function (monthName, i) {\n return /*#__PURE__*/_react.default.createElement(\"option\", {\n key: i,\n value: i\n }, monthName);\n }))), /*#__PURE__*/_react.default.createElement(\"span\", {\n className: styles.monthAndYearDivider\n }), /*#__PURE__*/_react.default.createElement(\"span\", {\n className: styles.yearPicker\n }, /*#__PURE__*/_react.default.createElement(\"select\", {\n value: focusedDate.getFullYear(),\n onChange: function onChange(e) {\n return changeShownDate(e.target.value, 'setYear');\n },\n \"aria-label\": ariaLabels.yearPicker\n }, new Array(upperYearLimit - lowerYearLimit + 1).fill(upperYearLimit).map(function (val, i) {\n var year = val - i;\n return /*#__PURE__*/_react.default.createElement(\"option\", {\n key: year,\n value: year\n }, year);\n })))) : /*#__PURE__*/_react.default.createElement(\"span\", {\n className: styles.monthAndYearPickers\n }, _this.state.monthNames[focusedDate.getMonth()], \" \", focusedDate.getFullYear()), showMonthArrow ? /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n className: (0, _classnames3.default)(styles.nextPrevButton, styles.nextButton),\n onClick: function onClick() {\n return changeShownDate(+1, 'monthOffset');\n },\n \"aria-label\": ariaLabels.nextButton\n }, /*#__PURE__*/_react.default.createElement(\"i\", null)) : null);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderDateDisplay\", function () {\n var _this$props3 = _this.props,\n focusedRange = _this$props3.focusedRange,\n color = _this$props3.color,\n ranges = _this$props3.ranges,\n rangeColors = _this$props3.rangeColors,\n dateDisplayFormat = _this$props3.dateDisplayFormat,\n editableDateInputs = _this$props3.editableDateInputs,\n startDatePlaceholder = _this$props3.startDatePlaceholder,\n endDatePlaceholder = _this$props3.endDatePlaceholder,\n ariaLabels = _this$props3.ariaLabels;\n var defaultColor = rangeColors[focusedRange[0]] || color;\n var styles = _this.styles;\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: styles.dateDisplayWrapper\n }, ranges.map(function (range, i) {\n if (range.showDateDisplay === false || range.disabled && !range.showDateDisplay) return null;\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: styles.dateDisplay,\n key: i,\n style: {\n color: range.color || defaultColor\n }\n }, /*#__PURE__*/_react.default.createElement(_DateInput.default, {\n className: (0, _classnames3.default)(styles.dateDisplayItem, _defineProperty({}, styles.dateDisplayItemActive, focusedRange[0] === i && focusedRange[1] === 0)),\n readOnly: !editableDateInputs,\n disabled: range.disabled,\n value: range.startDate,\n placeholder: startDatePlaceholder,\n dateOptions: _this.dateOptions,\n dateDisplayFormat: dateDisplayFormat,\n ariaLabel: ariaLabels.dateInput && ariaLabels.dateInput[range.key] && ariaLabels.dateInput[range.key].startDate,\n onChange: _this.onDragSelectionEnd,\n onFocus: function onFocus() {\n return _this.handleRangeFocusChange(i, 0);\n }\n }), /*#__PURE__*/_react.default.createElement(_DateInput.default, {\n className: (0, _classnames3.default)(styles.dateDisplayItem, _defineProperty({}, styles.dateDisplayItemActive, focusedRange[0] === i && focusedRange[1] === 1)),\n readOnly: !editableDateInputs,\n disabled: range.disabled,\n value: range.endDate,\n placeholder: endDatePlaceholder,\n dateOptions: _this.dateOptions,\n dateDisplayFormat: dateDisplayFormat,\n ariaLabel: ariaLabels.dateInput && ariaLabels.dateInput[range.key] && ariaLabels.dateInput[range.key].endDate,\n onChange: _this.onDragSelectionEnd,\n onFocus: function onFocus() {\n return _this.handleRangeFocusChange(i, 1);\n }\n }));\n }));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onDragSelectionStart\", function (date) {\n var _this$props4 = _this.props,\n onChange = _this$props4.onChange,\n dragSelectionEnabled = _this$props4.dragSelectionEnabled;\n\n if (dragSelectionEnabled) {\n _this.setState({\n drag: {\n status: true,\n range: {\n startDate: date,\n endDate: date\n },\n disablePreview: true\n }\n });\n } else {\n onChange && onChange(date);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onDragSelectionEnd\", function (date) {\n var _this$props5 = _this.props,\n updateRange = _this$props5.updateRange,\n displayMode = _this$props5.displayMode,\n onChange = _this$props5.onChange,\n dragSelectionEnabled = _this$props5.dragSelectionEnabled;\n if (!dragSelectionEnabled) return;\n\n if (displayMode === 'date' || !_this.state.drag.status) {\n onChange && onChange(date);\n return;\n }\n\n var newRange = {\n startDate: _this.state.drag.range.startDate,\n endDate: date\n };\n\n if (displayMode !== 'dateRange' || (0, _isSameDay.default)(newRange.startDate, date)) {\n _this.setState({\n drag: {\n status: false,\n range: {}\n }\n }, function () {\n return onChange && onChange(date);\n });\n } else {\n _this.setState({\n drag: {\n status: false,\n range: {}\n }\n }, function () {\n updateRange && updateRange(newRange);\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onDragSelectionMove\", function (date) {\n var drag = _this.state.drag;\n if (!drag.status || !_this.props.dragSelectionEnabled) return;\n\n _this.setState({\n drag: {\n status: drag.status,\n range: {\n startDate: drag.range.startDate,\n endDate: date\n },\n disablePreview: true\n }\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"estimateMonthSize\", function (index, cache) {\n var _this$props6 = _this.props,\n direction = _this$props6.direction,\n minDate = _this$props6.minDate;\n var scrollArea = _this.state.scrollArea;\n\n if (cache) {\n _this.listSizeCache = cache;\n if (cache[index]) return cache[index];\n }\n\n if (direction === 'horizontal') return scrollArea.monthWidth;\n var monthStep = (0, _addMonths.default)(minDate, index);\n\n var _getMonthDisplayRange = (0, _utils.getMonthDisplayRange)(monthStep, _this.dateOptions),\n start = _getMonthDisplayRange.start,\n end = _getMonthDisplayRange.end;\n\n var isLongMonth = (0, _differenceInDays.default)(end, start, _this.dateOptions) + 1 > 7 * 5;\n return isLongMonth ? scrollArea.longMonthHeight : scrollArea.monthHeight;\n });\n\n _this.dateOptions = {\n locale: _props.locale\n };\n if (_props.weekStartsOn !== undefined) _this.dateOptions.weekStartsOn = _props.weekStartsOn;\n _this.styles = (0, _utils.generateStyles)([_styles.default, _props.classNames]);\n _this.listSizeCache = {};\n _this.isFirstRender = true;\n _this.state = {\n monthNames: _this.getMonthNames(),\n focusedDate: (0, _utils.calcFocusDate)(null, _props),\n drag: {\n status: false,\n range: {\n startDate: null,\n endDate: null\n },\n disablePreview: false\n },\n scrollArea: _this.calcScrollArea(_props)\n };\n return _this;\n }\n\n _createClass(Calendar, [{\n key: \"getMonthNames\",\n value: function getMonthNames() {\n var _this2 = this;\n\n return _toConsumableArray(Array(12).keys()).map(function (i) {\n return _this2.props.locale.localize.month(i);\n });\n }\n }, {\n key: \"calcScrollArea\",\n value: function calcScrollArea(props) {\n var direction = props.direction,\n months = props.months,\n scroll = props.scroll;\n if (!scroll.enabled) return {\n enabled: false\n };\n var longMonthHeight = scroll.longMonthHeight || scroll.monthHeight;\n\n if (direction === 'vertical') {\n return {\n enabled: true,\n monthHeight: scroll.monthHeight || 220,\n longMonthHeight: longMonthHeight || 260,\n calendarWidth: 'auto',\n calendarHeight: (scroll.calendarHeight || longMonthHeight || 240) * months\n };\n }\n\n return {\n enabled: true,\n monthWidth: scroll.monthWidth || 332,\n calendarWidth: (scroll.calendarWidth || scroll.monthWidth || 332) * months,\n monthHeight: longMonthHeight || 300,\n calendarHeight: longMonthHeight || 300\n };\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this3 = this;\n\n if (this.props.scroll.enabled) {\n // prevent react-list's initial render focus problem\n setTimeout(function () {\n return _this3.focusToDate(_this3.state.focusedDate);\n });\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var propMapper = {\n dateRange: 'ranges',\n date: 'date'\n };\n var targetProp = propMapper[this.props.displayMode];\n\n if (this.props[targetProp] !== prevProps[targetProp]) {\n this.updateShownDate(this.props);\n }\n\n if (prevProps.locale !== this.props.locale || prevProps.weekStartsOn !== this.props.weekStartsOn) {\n this.dateOptions = {\n locale: this.props.locale\n };\n if (this.props.weekStartsOn !== undefined) this.dateOptions.weekStartsOn = this.props.weekStartsOn;\n this.setState({\n monthNames: this.getMonthNames()\n });\n }\n\n if (!(0, _shallowEqual.shallowEqualObjects)(prevProps.scroll, this.props.scroll)) {\n this.setState({\n scrollArea: this.calcScrollArea(this.props)\n });\n }\n }\n }, {\n key: \"renderWeekdays\",\n value: function renderWeekdays() {\n var _this4 = this;\n\n var now = new Date();\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: this.styles.weekDays\n }, (0, _eachDayOfInterval.default)({\n start: (0, _startOfWeek.default)(now, this.dateOptions),\n end: (0, _endOfWeek.default)(now, this.dateOptions)\n }).map(function (day, i) {\n return /*#__PURE__*/_react.default.createElement(\"span\", {\n className: _this4.styles.weekDay,\n key: i\n }, (0, _format.default)(day, _this4.props.weekdayDisplayFormat, _this4.dateOptions));\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this5 = this;\n\n var _this$props7 = this.props,\n showDateDisplay = _this$props7.showDateDisplay,\n onPreviewChange = _this$props7.onPreviewChange,\n scroll = _this$props7.scroll,\n direction = _this$props7.direction,\n disabledDates = _this$props7.disabledDates,\n disabledDay = _this$props7.disabledDay,\n maxDate = _this$props7.maxDate,\n minDate = _this$props7.minDate,\n rangeColors = _this$props7.rangeColors,\n color = _this$props7.color,\n navigatorRenderer = _this$props7.navigatorRenderer,\n className = _this$props7.className,\n preview = _this$props7.preview;\n var _this$state = this.state,\n scrollArea = _this$state.scrollArea,\n focusedDate = _this$state.focusedDate;\n var isVertical = direction === 'vertical';\n var monthAndYearRenderer = navigatorRenderer || this.renderMonthAndYear;\n var ranges = this.props.ranges.map(function (range, i) {\n return _objectSpread(_objectSpread({}, range), {}, {\n color: range.color || rangeColors[i] || color\n });\n });\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: (0, _classnames3.default)(this.styles.calendarWrapper, className),\n onMouseUp: function onMouseUp() {\n return _this5.setState({\n drag: {\n status: false,\n range: {}\n }\n });\n },\n onMouseLeave: function onMouseLeave() {\n _this5.setState({\n drag: {\n status: false,\n range: {}\n }\n });\n }\n }, showDateDisplay && this.renderDateDisplay(), monthAndYearRenderer(focusedDate, this.changeShownDate, this.props), scroll.enabled ? /*#__PURE__*/_react.default.createElement(\"div\", null, isVertical && this.renderWeekdays(this.dateOptions), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: (0, _classnames3.default)(this.styles.infiniteMonths, isVertical ? this.styles.monthsVertical : this.styles.monthsHorizontal),\n onMouseLeave: function onMouseLeave() {\n return onPreviewChange && onPreviewChange();\n },\n style: {\n width: scrollArea.calendarWidth + 11,\n height: scrollArea.calendarHeight + 11\n },\n onScroll: this.handleScroll\n }, /*#__PURE__*/_react.default.createElement(_reactList.default, {\n length: (0, _differenceInCalendarMonths.default)((0, _endOfMonth.default)(maxDate), (0, _addDays.default)((0, _startOfMonth.default)(minDate), -1), this.dateOptions),\n treshold: 500,\n type: \"variable\",\n ref: function ref(target) {\n return _this5.list = target;\n },\n itemSizeEstimator: this.estimateMonthSize,\n axis: isVertical ? 'y' : 'x',\n itemRenderer: function itemRenderer(index, key) {\n var monthStep = (0, _addMonths.default)(minDate, index);\n return /*#__PURE__*/_react.default.createElement(_Month.default, _extends({}, _this5.props, {\n onPreviewChange: onPreviewChange || _this5.updatePreview,\n preview: preview || _this5.state.preview,\n ranges: ranges,\n key: key,\n drag: _this5.state.drag,\n dateOptions: _this5.dateOptions,\n disabledDates: disabledDates,\n disabledDay: disabledDay,\n month: monthStep,\n onDragSelectionStart: _this5.onDragSelectionStart,\n onDragSelectionEnd: _this5.onDragSelectionEnd,\n onDragSelectionMove: _this5.onDragSelectionMove,\n onMouseLeave: function onMouseLeave() {\n return onPreviewChange && onPreviewChange();\n },\n styles: _this5.styles,\n style: isVertical ? {\n height: _this5.estimateMonthSize(index)\n } : {\n height: scrollArea.monthHeight,\n width: _this5.estimateMonthSize(index)\n },\n showMonthName: true,\n showWeekDays: !isVertical\n }));\n }\n }))) : /*#__PURE__*/_react.default.createElement(\"div\", {\n className: (0, _classnames3.default)(this.styles.months, isVertical ? this.styles.monthsVertical : this.styles.monthsHorizontal)\n }, new Array(this.props.months).fill(null).map(function (_, i) {\n var monthStep = (0, _addMonths.default)(_this5.state.focusedDate, i);\n ;\n\n if (_this5.props.calendarFocus === 'backwards') {\n monthStep = (0, _subMonths.default)(_this5.state.focusedDate, _this5.props.months - 1 - i);\n }\n\n return /*#__PURE__*/_react.default.createElement(_Month.default, _extends({}, _this5.props, {\n onPreviewChange: onPreviewChange || _this5.updatePreview,\n preview: preview || _this5.state.preview,\n ranges: ranges,\n key: i,\n drag: _this5.state.drag,\n dateOptions: _this5.dateOptions,\n disabledDates: disabledDates,\n disabledDay: disabledDay,\n month: monthStep,\n onDragSelectionStart: _this5.onDragSelectionStart,\n onDragSelectionEnd: _this5.onDragSelectionEnd,\n onDragSelectionMove: _this5.onDragSelectionMove,\n onMouseLeave: function onMouseLeave() {\n return onPreviewChange && onPreviewChange();\n },\n styles: _this5.styles,\n showWeekDays: !isVertical || i === 0,\n showMonthName: !isVertical || i > 0\n }));\n })));\n }\n }]);\n\n return Calendar;\n}(_react.PureComponent);\n\nCalendar.defaultProps = {\n showMonthArrow: true,\n showMonthAndYearPickers: true,\n disabledDates: [],\n disabledDay: function disabledDay() {},\n classNames: {},\n locale: _enUS.default,\n ranges: [],\n focusedRange: [0, 0],\n dateDisplayFormat: 'MMM d, yyyy',\n monthDisplayFormat: 'MMM yyyy',\n weekdayDisplayFormat: 'E',\n dayDisplayFormat: 'd',\n showDateDisplay: true,\n showPreview: true,\n displayMode: 'date',\n months: 1,\n color: '#3d91ff',\n scroll: {\n enabled: false\n },\n direction: 'vertical',\n maxDate: (0, _addYears.default)(new Date(), 20),\n minDate: (0, _addYears.default)(new Date(), -100),\n rangeColors: ['#3d91ff', '#3ecf8e', '#fed14c'],\n startDatePlaceholder: 'Early',\n endDatePlaceholder: 'Continuous',\n editableDateInputs: false,\n dragSelectionEnabled: true,\n fixedHeight: false,\n calendarFocus: 'forwards',\n preventSnapRefocus: false,\n ariaLabels: {}\n};\nCalendar.propTypes = {\n showMonthArrow: _propTypes.default.bool,\n showMonthAndYearPickers: _propTypes.default.bool,\n disabledDates: _propTypes.default.array,\n disabledDay: _propTypes.default.func,\n minDate: _propTypes.default.object,\n maxDate: _propTypes.default.object,\n date: _propTypes.default.object,\n onChange: _propTypes.default.func,\n onPreviewChange: _propTypes.default.func,\n onRangeFocusChange: _propTypes.default.func,\n classNames: _propTypes.default.object,\n locale: _propTypes.default.object,\n shownDate: _propTypes.default.object,\n onShownDateChange: _propTypes.default.func,\n ranges: _propTypes.default.arrayOf(_DayCell.rangeShape),\n preview: _propTypes.default.shape({\n startDate: _propTypes.default.object,\n endDate: _propTypes.default.object,\n color: _propTypes.default.string\n }),\n dateDisplayFormat: _propTypes.default.string,\n monthDisplayFormat: _propTypes.default.string,\n weekdayDisplayFormat: _propTypes.default.string,\n weekStartsOn: _propTypes.default.number,\n dayDisplayFormat: _propTypes.default.string,\n focusedRange: _propTypes.default.arrayOf(_propTypes.default.number),\n initialFocusedRange: _propTypes.default.arrayOf(_propTypes.default.number),\n months: _propTypes.default.number,\n className: _propTypes.default.string,\n showDateDisplay: _propTypes.default.bool,\n showPreview: _propTypes.default.bool,\n displayMode: _propTypes.default.oneOf(['dateRange', 'date']),\n color: _propTypes.default.string,\n updateRange: _propTypes.default.func,\n scroll: _propTypes.default.shape({\n enabled: _propTypes.default.bool,\n monthHeight: _propTypes.default.number,\n longMonthHeight: _propTypes.default.number,\n monthWidth: _propTypes.default.number,\n calendarWidth: _propTypes.default.number,\n calendarHeight: _propTypes.default.number\n }),\n direction: _propTypes.default.oneOf(['vertical', 'horizontal']),\n startDatePlaceholder: _propTypes.default.string,\n endDatePlaceholder: _propTypes.default.string,\n navigatorRenderer: _propTypes.default.func,\n rangeColors: _propTypes.default.arrayOf(_propTypes.default.string),\n editableDateInputs: _propTypes.default.bool,\n dragSelectionEnabled: _propTypes.default.bool,\n fixedHeight: _propTypes.default.bool,\n calendarFocus: _propTypes.default.string,\n preventSnapRefocus: _propTypes.default.bool,\n ariaLabels: _accessibility.ariaLabelsShape\n};\nvar _default = Calendar;\nexports.default = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _isEqual = _interopRequireDefault(require(\"date-fns/isEqual\"));\n\nvar _isValid = _interopRequireDefault(require(\"date-fns/isValid\"));\n\nvar _parse = _interopRequireDefault(require(\"date-fns/parse\"));\n\nvar _format = _interopRequireDefault(require(\"date-fns/format\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nvar DateInput = /*#__PURE__*/function (_PureComponent) {\n _inherits(DateInput, _PureComponent);\n\n var _super = _createSuper(DateInput);\n\n function DateInput(props, context) {\n var _this;\n\n _classCallCheck(this, DateInput);\n\n _this = _super.call(this, props, context);\n\n _defineProperty(_assertThisInitialized(_this), \"onKeyDown\", function (e) {\n var value = _this.state.value;\n\n if (e.key === 'Enter') {\n _this.update(value);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onChange\", function (e) {\n _this.setState({\n value: e.target.value,\n changed: true,\n invalid: false\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onBlur\", function () {\n var value = _this.state.value;\n\n _this.update(value);\n });\n\n _this.state = {\n invalid: false,\n changed: false,\n value: _this.formatDate(props)\n };\n return _this;\n }\n\n _createClass(DateInput, [{\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var value = prevProps.value;\n\n if (!(0, _isEqual.default)(value, this.props.value)) {\n this.setState({\n value: this.formatDate(this.props)\n });\n }\n }\n }, {\n key: \"formatDate\",\n value: function formatDate(_ref) {\n var value = _ref.value,\n dateDisplayFormat = _ref.dateDisplayFormat,\n dateOptions = _ref.dateOptions;\n\n if (value && (0, _isValid.default)(value)) {\n return (0, _format.default)(value, dateDisplayFormat, dateOptions);\n }\n\n return '';\n }\n }, {\n key: \"update\",\n value: function update(value) {\n var _this$state = this.state,\n invalid = _this$state.invalid,\n changed = _this$state.changed;\n\n if (invalid || !changed || !value) {\n return;\n }\n\n var _this$props = this.props,\n onChange = _this$props.onChange,\n dateDisplayFormat = _this$props.dateDisplayFormat,\n dateOptions = _this$props.dateOptions;\n var parsed = (0, _parse.default)(value, dateDisplayFormat, new Date(), dateOptions);\n\n if ((0, _isValid.default)(parsed)) {\n this.setState({\n changed: false\n }, function () {\n return onChange(parsed);\n });\n } else {\n this.setState({\n invalid: true\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n className = _this$props2.className,\n readOnly = _this$props2.readOnly,\n placeholder = _this$props2.placeholder,\n ariaLabel = _this$props2.ariaLabel,\n disabled = _this$props2.disabled,\n onFocus = _this$props2.onFocus;\n var _this$state2 = this.state,\n value = _this$state2.value,\n invalid = _this$state2.invalid;\n return /*#__PURE__*/_react.default.createElement(\"span\", {\n className: (0, _classnames.default)('rdrDateInput', className)\n }, /*#__PURE__*/_react.default.createElement(\"input\", {\n readOnly: readOnly,\n disabled: disabled,\n value: value,\n placeholder: placeholder,\n \"aria-label\": ariaLabel,\n onKeyDown: this.onKeyDown,\n onChange: this.onChange,\n onBlur: this.onBlur,\n onFocus: onFocus\n }), invalid && /*#__PURE__*/_react.default.createElement(\"span\", {\n className: \"rdrWarning\"\n }, \"\\u26A0\"));\n }\n }]);\n\n return DateInput;\n}(_react.PureComponent);\n\nDateInput.propTypes = {\n value: _propTypes.default.object,\n placeholder: _propTypes.default.string,\n disabled: _propTypes.default.bool,\n readOnly: _propTypes.default.bool,\n dateOptions: _propTypes.default.object,\n dateDisplayFormat: _propTypes.default.string,\n ariaLabel: _propTypes.default.string,\n className: _propTypes.default.string,\n onFocus: _propTypes.default.func.isRequired,\n onChange: _propTypes.default.func.isRequired\n};\nDateInput.defaultProps = {\n readOnly: true,\n disabled: false,\n dateDisplayFormat: 'MMM D, YYYY'\n};\nvar _default = DateInput;\nexports.default = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _Calendar = _interopRequireDefault(require(\"../Calendar\"));\n\nvar _DayCell = require(\"../DayCell\");\n\nvar _utils = require(\"../../utils\");\n\nvar _max = _interopRequireDefault(require(\"date-fns/max\"));\n\nvar _isWithinInterval = _interopRequireDefault(require(\"date-fns/isWithinInterval\"));\n\nvar _min = _interopRequireDefault(require(\"date-fns/min\"));\n\nvar _addDays = _interopRequireDefault(require(\"date-fns/addDays\"));\n\nvar _differenceInCalendarDays = _interopRequireDefault(require(\"date-fns/differenceInCalendarDays\"));\n\nvar _isBefore = _interopRequireDefault(require(\"date-fns/isBefore\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _styles = _interopRequireDefault(require(\"../../styles\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _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; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nvar DateRange = /*#__PURE__*/function (_Component) {\n _inherits(DateRange, _Component);\n\n var _super = _createSuper(DateRange);\n\n function DateRange(props, context) {\n var _this;\n\n _classCallCheck(this, DateRange);\n\n _this = _super.call(this, props, context);\n\n _defineProperty(_assertThisInitialized(_this), \"calcNewSelection\", function (value) {\n var isSingleValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var focusedRange = _this.props.focusedRange || _this.state.focusedRange;\n var _this$props = _this.props,\n ranges = _this$props.ranges,\n onChange = _this$props.onChange,\n maxDate = _this$props.maxDate,\n moveRangeOnFirstSelection = _this$props.moveRangeOnFirstSelection,\n retainEndDateOnFirstSelection = _this$props.retainEndDateOnFirstSelection,\n disabledDates = _this$props.disabledDates;\n var focusedRangeIndex = focusedRange[0];\n var selectedRange = ranges[focusedRangeIndex];\n if (!selectedRange || !onChange) return {};\n var startDate = selectedRange.startDate,\n endDate = selectedRange.endDate;\n var now = new Date();\n var nextFocusRange;\n\n if (!isSingleValue) {\n startDate = value.startDate;\n endDate = value.endDate;\n } else if (focusedRange[1] === 0) {\n // startDate selection\n var dayOffset = (0, _differenceInCalendarDays.default)(endDate || now, startDate);\n\n var calculateEndDate = function calculateEndDate() {\n if (moveRangeOnFirstSelection) {\n return (0, _addDays.default)(value, dayOffset);\n }\n\n if (retainEndDateOnFirstSelection) {\n if (!endDate || (0, _isBefore.default)(value, endDate)) {\n return endDate;\n }\n\n return value;\n }\n\n return value || now;\n };\n\n startDate = value;\n endDate = calculateEndDate();\n if (maxDate) endDate = (0, _min.default)([endDate, maxDate]);\n nextFocusRange = [focusedRange[0], 1];\n } else {\n endDate = value;\n } // reverse dates if startDate before endDate\n\n\n var isStartDateSelected = focusedRange[1] === 0;\n\n if ((0, _isBefore.default)(endDate, startDate)) {\n isStartDateSelected = !isStartDateSelected;\n var _ref = [endDate, startDate];\n startDate = _ref[0];\n endDate = _ref[1];\n }\n\n var inValidDatesWithinRange = disabledDates.filter(function (disabledDate) {\n return (0, _isWithinInterval.default)(disabledDate, {\n start: startDate,\n end: endDate\n });\n });\n\n if (inValidDatesWithinRange.length > 0) {\n if (isStartDateSelected) {\n startDate = (0, _addDays.default)((0, _max.default)(inValidDatesWithinRange), 1);\n } else {\n endDate = (0, _addDays.default)((0, _min.default)(inValidDatesWithinRange), -1);\n }\n }\n\n if (!nextFocusRange) {\n var nextFocusRangeIndex = (0, _utils.findNextRangeIndex)(_this.props.ranges, focusedRange[0]);\n nextFocusRange = [nextFocusRangeIndex, 0];\n }\n\n return {\n wasValid: !(inValidDatesWithinRange.length > 0),\n range: {\n startDate: startDate,\n endDate: endDate\n },\n nextFocusRange: nextFocusRange\n };\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setSelection\", function (value, isSingleValue) {\n var _this$props2 = _this.props,\n onChange = _this$props2.onChange,\n ranges = _this$props2.ranges,\n onRangeFocusChange = _this$props2.onRangeFocusChange;\n var focusedRange = _this.props.focusedRange || _this.state.focusedRange;\n var focusedRangeIndex = focusedRange[0];\n var selectedRange = ranges[focusedRangeIndex];\n if (!selectedRange) return;\n\n var newSelection = _this.calcNewSelection(value, isSingleValue);\n\n onChange(_defineProperty({}, selectedRange.key || \"range\".concat(focusedRangeIndex + 1), _objectSpread(_objectSpread({}, selectedRange), newSelection.range)));\n\n _this.setState({\n focusedRange: newSelection.nextFocusRange,\n preview: null\n });\n\n onRangeFocusChange && onRangeFocusChange(newSelection.nextFocusRange);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleRangeFocusChange\", function (focusedRange) {\n _this.setState({\n focusedRange: focusedRange\n });\n\n _this.props.onRangeFocusChange && _this.props.onRangeFocusChange(focusedRange);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updatePreview\", function (val) {\n var _ranges$focusedRange$;\n\n if (!val) {\n _this.setState({\n preview: null\n });\n\n return;\n }\n\n var _this$props3 = _this.props,\n rangeColors = _this$props3.rangeColors,\n ranges = _this$props3.ranges;\n var focusedRange = _this.props.focusedRange || _this.state.focusedRange;\n var color = ((_ranges$focusedRange$ = ranges[focusedRange[0]]) === null || _ranges$focusedRange$ === void 0 ? void 0 : _ranges$focusedRange$.color) || rangeColors[focusedRange[0]] || color;\n\n _this.setState({\n preview: _objectSpread(_objectSpread({}, val.range), {}, {\n color: color\n })\n });\n });\n\n _this.state = {\n focusedRange: props.initialFocusedRange || [(0, _utils.findNextRangeIndex)(props.ranges), 0],\n preview: null\n };\n _this.styles = (0, _utils.generateStyles)([_styles.default, props.classNames]);\n return _this;\n }\n\n _createClass(DateRange, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n return /*#__PURE__*/_react.default.createElement(_Calendar.default, _extends({\n focusedRange: this.state.focusedRange,\n onRangeFocusChange: this.handleRangeFocusChange,\n preview: this.state.preview,\n onPreviewChange: function onPreviewChange(value) {\n _this2.updatePreview(value ? _this2.calcNewSelection(value) : null);\n }\n }, this.props, {\n displayMode: \"dateRange\",\n className: (0, _classnames.default)(this.styles.dateRangeWrapper, this.props.className),\n onChange: this.setSelection,\n updateRange: function updateRange(val) {\n return _this2.setSelection(val, false);\n },\n ref: function ref(target) {\n _this2.calendar = target;\n }\n }));\n }\n }]);\n\n return DateRange;\n}(_react.Component);\n\nDateRange.defaultProps = {\n classNames: {},\n ranges: [],\n moveRangeOnFirstSelection: false,\n retainEndDateOnFirstSelection: false,\n rangeColors: ['#3d91ff', '#3ecf8e', '#fed14c'],\n disabledDates: []\n};\nDateRange.propTypes = _objectSpread(_objectSpread({}, _Calendar.default.propTypes), {}, {\n onChange: _propTypes.default.func,\n onRangeFocusChange: _propTypes.default.func,\n className: _propTypes.default.string,\n ranges: _propTypes.default.arrayOf(_DayCell.rangeShape),\n moveRangeOnFirstSelection: _propTypes.default.bool,\n retainEndDateOnFirstSelection: _propTypes.default.bool\n});\nvar _default = DateRange;\nexports.default = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _DateRange = _interopRequireDefault(require(\"../DateRange\"));\n\nvar _DefinedRange = _interopRequireDefault(require(\"../DefinedRange\"));\n\nvar _utils = require(\"../../utils\");\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _styles = _interopRequireDefault(require(\"../../styles\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\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; }\n\nfunction _extends() { _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; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar DateRangePicker = /*#__PURE__*/function (_Component) {\n _inherits(DateRangePicker, _Component);\n\n var _super = _createSuper(DateRangePicker);\n\n function DateRangePicker(props) {\n var _this;\n\n _classCallCheck(this, DateRangePicker);\n\n _this = _super.call(this, props);\n _this.state = {\n focusedRange: [(0, _utils.findNextRangeIndex)(props.ranges), 0]\n };\n _this.styles = (0, _utils.generateStyles)([_styles.default, props.classNames]);\n return _this;\n }\n\n _createClass(DateRangePicker, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var focusedRange = this.state.focusedRange;\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: (0, _classnames.default)(this.styles.dateRangePickerWrapper, this.props.className)\n }, /*#__PURE__*/_react.default.createElement(_DefinedRange.default, _extends({\n focusedRange: focusedRange,\n onPreviewChange: function onPreviewChange(value) {\n return _this2.dateRange.updatePreview(value ? _this2.dateRange.calcNewSelection(value, typeof value === 'string') : null);\n }\n }, this.props, {\n range: this.props.ranges[focusedRange[0]],\n className: undefined\n })), /*#__PURE__*/_react.default.createElement(_DateRange.default, _extends({\n onRangeFocusChange: function onRangeFocusChange(focusedRange) {\n return _this2.setState({\n focusedRange: focusedRange\n });\n },\n focusedRange: focusedRange\n }, this.props, {\n ref: function ref(t) {\n return _this2.dateRange = t;\n },\n className: undefined\n })));\n }\n }]);\n\n return DateRangePicker;\n}(_react.Component);\n\nDateRangePicker.defaultProps = {};\nDateRangePicker.propTypes = _objectSpread(_objectSpread(_objectSpread({}, _DateRange.default.propTypes), _DefinedRange.default.propTypes), {}, {\n className: _propTypes.default.string\n});\nvar _default = DateRangePicker;\nexports.default = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.rangeShape = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames4 = _interopRequireDefault(require(\"classnames\"));\n\nvar _endOfDay = _interopRequireDefault(require(\"date-fns/endOfDay\"));\n\nvar _isBefore = _interopRequireDefault(require(\"date-fns/isBefore\"));\n\nvar _isAfter = _interopRequireDefault(require(\"date-fns/isAfter\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"date-fns/isSameDay\"));\n\nvar _format = _interopRequireDefault(require(\"date-fns/format\"));\n\nvar _startOfDay = _interopRequireDefault(require(\"date-fns/startOfDay\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _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; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\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.\"); }\n\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); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\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; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nvar DayCell = /*#__PURE__*/function (_Component) {\n _inherits(DayCell, _Component);\n\n var _super = _createSuper(DayCell);\n\n function DayCell(props, context) {\n var _this;\n\n _classCallCheck(this, DayCell);\n\n _this = _super.call(this, props, context);\n\n _defineProperty(_assertThisInitialized(_this), \"handleKeyEvent\", function (event) {\n var _this$props = _this.props,\n day = _this$props.day,\n onMouseDown = _this$props.onMouseDown,\n onMouseUp = _this$props.onMouseUp;\n\n if ([13\n /* space */\n , 32\n /* enter */\n ].includes(event.keyCode)) {\n if (event.type === 'keydown') onMouseDown(day);else onMouseUp(day);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleMouseEvent\", function (event) {\n var _this$props2 = _this.props,\n day = _this$props2.day,\n disabled = _this$props2.disabled,\n onPreviewChange = _this$props2.onPreviewChange,\n onMouseEnter = _this$props2.onMouseEnter,\n onMouseDown = _this$props2.onMouseDown,\n onMouseUp = _this$props2.onMouseUp;\n var stateChanges = {};\n\n if (disabled) {\n onPreviewChange();\n return;\n }\n\n switch (event.type) {\n case 'mouseenter':\n onMouseEnter(day);\n onPreviewChange(day);\n stateChanges.hover = true;\n break;\n\n case 'blur':\n case 'mouseleave':\n stateChanges.hover = false;\n break;\n\n case 'mousedown':\n stateChanges.active = true;\n onMouseDown(day);\n break;\n\n case 'mouseup':\n event.stopPropagation();\n stateChanges.active = false;\n onMouseUp(day);\n break;\n\n case 'focus':\n onPreviewChange(day);\n break;\n }\n\n if (Object.keys(stateChanges).length) {\n _this.setState(stateChanges);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getClassNames\", function () {\n var _classnames;\n\n var _this$props3 = _this.props,\n isPassive = _this$props3.isPassive,\n isToday = _this$props3.isToday,\n isWeekend = _this$props3.isWeekend,\n isStartOfWeek = _this$props3.isStartOfWeek,\n isEndOfWeek = _this$props3.isEndOfWeek,\n isStartOfMonth = _this$props3.isStartOfMonth,\n isEndOfMonth = _this$props3.isEndOfMonth,\n disabled = _this$props3.disabled,\n styles = _this$props3.styles;\n return (0, _classnames4.default)(styles.day, (_classnames = {}, _defineProperty(_classnames, styles.dayPassive, isPassive), _defineProperty(_classnames, styles.dayDisabled, disabled), _defineProperty(_classnames, styles.dayToday, isToday), _defineProperty(_classnames, styles.dayWeekend, isWeekend), _defineProperty(_classnames, styles.dayStartOfWeek, isStartOfWeek), _defineProperty(_classnames, styles.dayEndOfWeek, isEndOfWeek), _defineProperty(_classnames, styles.dayStartOfMonth, isStartOfMonth), _defineProperty(_classnames, styles.dayEndOfMonth, isEndOfMonth), _defineProperty(_classnames, styles.dayHovered, _this.state.hover), _defineProperty(_classnames, styles.dayActive, _this.state.active), _classnames));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderPreviewPlaceholder\", function () {\n var _classnames2;\n\n var _this$props4 = _this.props,\n preview = _this$props4.preview,\n day = _this$props4.day,\n styles = _this$props4.styles;\n if (!preview) return null;\n var startDate = preview.startDate ? (0, _endOfDay.default)(preview.startDate) : null;\n var endDate = preview.endDate ? (0, _startOfDay.default)(preview.endDate) : null;\n var isInRange = (!startDate || (0, _isAfter.default)(day, startDate)) && (!endDate || (0, _isBefore.default)(day, endDate));\n var isStartEdge = !isInRange && (0, _isSameDay.default)(day, startDate);\n var isEndEdge = !isInRange && (0, _isSameDay.default)(day, endDate);\n return /*#__PURE__*/_react.default.createElement(\"span\", {\n className: (0, _classnames4.default)((_classnames2 = {}, _defineProperty(_classnames2, styles.dayStartPreview, isStartEdge), _defineProperty(_classnames2, styles.dayInPreview, isInRange), _defineProperty(_classnames2, styles.dayEndPreview, isEndEdge), _classnames2)),\n style: {\n color: preview.color\n }\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"renderSelectionPlaceholders\", function () {\n var _this$props5 = _this.props,\n styles = _this$props5.styles,\n ranges = _this$props5.ranges,\n day = _this$props5.day;\n\n if (_this.props.displayMode === 'date') {\n var isSelected = (0, _isSameDay.default)(_this.props.day, _this.props.date);\n return isSelected ? /*#__PURE__*/_react.default.createElement(\"span\", {\n className: styles.selected,\n style: {\n color: _this.props.color\n }\n }) : null;\n }\n\n var inRanges = ranges.reduce(function (result, range) {\n var startDate = range.startDate;\n var endDate = range.endDate;\n\n if (startDate && endDate && (0, _isBefore.default)(endDate, startDate)) {\n var _ref = [endDate, startDate];\n startDate = _ref[0];\n endDate = _ref[1];\n }\n\n startDate = startDate ? (0, _endOfDay.default)(startDate) : null;\n endDate = endDate ? (0, _startOfDay.default)(endDate) : null;\n var isInRange = (!startDate || (0, _isAfter.default)(day, startDate)) && (!endDate || (0, _isBefore.default)(day, endDate));\n var isStartEdge = !isInRange && (0, _isSameDay.default)(day, startDate);\n var isEndEdge = !isInRange && (0, _isSameDay.default)(day, endDate);\n\n if (isInRange || isStartEdge || isEndEdge) {\n return [].concat(_toConsumableArray(result), [_objectSpread({\n isStartEdge: isStartEdge,\n isEndEdge: isEndEdge,\n isInRange: isInRange\n }, range)]);\n }\n\n return result;\n }, []);\n return inRanges.map(function (range, i) {\n var _classnames3;\n\n return /*#__PURE__*/_react.default.createElement(\"span\", {\n key: i,\n className: (0, _classnames4.default)((_classnames3 = {}, _defineProperty(_classnames3, styles.startEdge, range.isStartEdge), _defineProperty(_classnames3, styles.endEdge, range.isEndEdge), _defineProperty(_classnames3, styles.inRange, range.isInRange), _classnames3)),\n style: {\n color: range.color || _this.props.color\n }\n });\n });\n });\n\n _this.state = {\n hover: false,\n active: false\n };\n return _this;\n }\n\n _createClass(DayCell, [{\n key: \"render\",\n value: function render() {\n var dayContentRenderer = this.props.dayContentRenderer;\n return /*#__PURE__*/_react.default.createElement(\"button\", _extends({\n type: \"button\",\n onMouseEnter: this.handleMouseEvent,\n onMouseLeave: this.handleMouseEvent,\n onFocus: this.handleMouseEvent,\n onMouseDown: this.handleMouseEvent,\n onMouseUp: this.handleMouseEvent,\n onBlur: this.handleMouseEvent,\n onPauseCapture: this.handleMouseEvent,\n onKeyDown: this.handleKeyEvent,\n onKeyUp: this.handleKeyEvent,\n className: this.getClassNames(this.props.styles)\n }, this.props.disabled || this.props.isPassive ? {\n tabIndex: -1\n } : {}, {\n style: {\n color: this.props.color\n }\n }), this.renderSelectionPlaceholders(), this.renderPreviewPlaceholder(), /*#__PURE__*/_react.default.createElement(\"span\", {\n className: this.props.styles.dayNumber\n }, (dayContentRenderer === null || dayContentRenderer === void 0 ? void 0 : dayContentRenderer(this.props.day)) || /*#__PURE__*/_react.default.createElement(\"span\", null, (0, _format.default)(this.props.day, this.props.dayDisplayFormat))));\n }\n }]);\n\n return DayCell;\n}(_react.Component);\n\nDayCell.defaultProps = {};\n\nvar rangeShape = _propTypes.default.shape({\n startDate: _propTypes.default.object,\n endDate: _propTypes.default.object,\n color: _propTypes.default.string,\n key: _propTypes.default.string,\n autoFocus: _propTypes.default.bool,\n disabled: _propTypes.default.bool,\n showDateDisplay: _propTypes.default.bool\n});\n\nexports.rangeShape = rangeShape;\nDayCell.propTypes = {\n day: _propTypes.default.object.isRequired,\n dayDisplayFormat: _propTypes.default.string,\n date: _propTypes.default.object,\n ranges: _propTypes.default.arrayOf(rangeShape),\n preview: _propTypes.default.shape({\n startDate: _propTypes.default.object,\n endDate: _propTypes.default.object,\n color: _propTypes.default.string\n }),\n onPreviewChange: _propTypes.default.func,\n previewColor: _propTypes.default.string,\n disabled: _propTypes.default.bool,\n isPassive: _propTypes.default.bool,\n isToday: _propTypes.default.bool,\n isWeekend: _propTypes.default.bool,\n isStartOfWeek: _propTypes.default.bool,\n isEndOfWeek: _propTypes.default.bool,\n isStartOfMonth: _propTypes.default.bool,\n isEndOfMonth: _propTypes.default.bool,\n color: _propTypes.default.string,\n displayMode: _propTypes.default.oneOf(['dateRange', 'date']),\n styles: _propTypes.default.object,\n onMouseDown: _propTypes.default.func,\n onMouseUp: _propTypes.default.func,\n onMouseEnter: _propTypes.default.func,\n dayContentRenderer: _propTypes.default.func\n};\nvar _default = DayCell;\nexports.default = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _styles = _interopRequireDefault(require(\"../../styles\"));\n\nvar _defaultRanges = require(\"../../defaultRanges\");\n\nvar _DayCell = require(\"../DayCell\");\n\nvar _InputRangeField = _interopRequireDefault(require(\"../InputRangeField\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nvar DefinedRange = /*#__PURE__*/function (_Component) {\n _inherits(DefinedRange, _Component);\n\n var _super = _createSuper(DefinedRange);\n\n function DefinedRange(props) {\n var _this;\n\n _classCallCheck(this, DefinedRange);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"handleRangeChange\", function (range) {\n var _this$props = _this.props,\n onChange = _this$props.onChange,\n ranges = _this$props.ranges,\n focusedRange = _this$props.focusedRange;\n var selectedRange = ranges[focusedRange[0]];\n if (!onChange || !selectedRange) return;\n onChange(_defineProperty({}, selectedRange.key || \"range\".concat(focusedRange[0] + 1), _objectSpread(_objectSpread({}, selectedRange), range)));\n });\n\n _this.state = {\n rangeOffset: 0,\n focusedInput: -1\n };\n return _this;\n }\n\n _createClass(DefinedRange, [{\n key: \"getRangeOptionValue\",\n value: function getRangeOptionValue(option) {\n var _this$props2 = this.props,\n _this$props2$ranges = _this$props2.ranges,\n ranges = _this$props2$ranges === void 0 ? [] : _this$props2$ranges,\n _this$props2$focusedR = _this$props2.focusedRange,\n focusedRange = _this$props2$focusedR === void 0 ? [] : _this$props2$focusedR;\n\n if (typeof option.getCurrentValue !== 'function') {\n return '';\n }\n\n var selectedRange = ranges[focusedRange[0]] || {};\n return option.getCurrentValue(selectedRange) || '';\n }\n }, {\n key: \"getSelectedRange\",\n value: function getSelectedRange(ranges, staticRange) {\n var focusedRangeIndex = ranges.findIndex(function (range) {\n if (!range.startDate || !range.endDate || range.disabled) return false;\n return staticRange.isSelected(range);\n });\n var selectedRange = ranges[focusedRangeIndex];\n return {\n selectedRange: selectedRange,\n focusedRangeIndex: focusedRangeIndex\n };\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props3 = this.props,\n headerContent = _this$props3.headerContent,\n footerContent = _this$props3.footerContent,\n onPreviewChange = _this$props3.onPreviewChange,\n inputRanges = _this$props3.inputRanges,\n staticRanges = _this$props3.staticRanges,\n ranges = _this$props3.ranges,\n renderStaticRangeLabel = _this$props3.renderStaticRangeLabel,\n rangeColors = _this$props3.rangeColors,\n className = _this$props3.className;\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: (0, _classnames.default)(_styles.default.definedRangesWrapper, className)\n }, headerContent, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _styles.default.staticRanges\n }, staticRanges.map(function (staticRange, i) {\n var _this2$getSelectedRan = _this2.getSelectedRange(ranges, staticRange),\n selectedRange = _this2$getSelectedRan.selectedRange,\n focusedRangeIndex = _this2$getSelectedRan.focusedRangeIndex;\n\n var labelContent;\n\n if (staticRange.hasCustomRendering) {\n labelContent = renderStaticRangeLabel(staticRange);\n } else {\n labelContent = staticRange.label;\n }\n\n return /*#__PURE__*/_react.default.createElement(\"button\", {\n type: \"button\",\n className: (0, _classnames.default)(_styles.default.staticRange, _defineProperty({}, _styles.default.staticRangeSelected, Boolean(selectedRange))),\n style: {\n color: selectedRange ? selectedRange.color || rangeColors[focusedRangeIndex] : null\n },\n key: i,\n onClick: function onClick() {\n return _this2.handleRangeChange(staticRange.range(_this2.props));\n },\n onFocus: function onFocus() {\n return onPreviewChange && onPreviewChange(staticRange.range(_this2.props));\n },\n onMouseOver: function onMouseOver() {\n return onPreviewChange && onPreviewChange(staticRange.range(_this2.props));\n },\n onMouseLeave: function onMouseLeave() {\n onPreviewChange && onPreviewChange();\n }\n }, /*#__PURE__*/_react.default.createElement(\"span\", {\n tabIndex: -1,\n className: _styles.default.staticRangeLabel\n }, labelContent));\n })), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: _styles.default.inputRanges\n }, inputRanges.map(function (rangeOption, i) {\n return /*#__PURE__*/_react.default.createElement(_InputRangeField.default, {\n key: i,\n styles: _styles.default,\n label: rangeOption.label,\n onFocus: function onFocus() {\n return _this2.setState({\n focusedInput: i,\n rangeOffset: 0\n });\n },\n onBlur: function onBlur() {\n return _this2.setState({\n rangeOffset: 0\n });\n },\n onChange: function onChange(value) {\n return _this2.handleRangeChange(rangeOption.range(value, _this2.props));\n },\n value: _this2.getRangeOptionValue(rangeOption)\n });\n })), footerContent);\n }\n }]);\n\n return DefinedRange;\n}(_react.Component);\n\nDefinedRange.propTypes = {\n inputRanges: _propTypes.default.array,\n staticRanges: _propTypes.default.array,\n ranges: _propTypes.default.arrayOf(_DayCell.rangeShape),\n focusedRange: _propTypes.default.arrayOf(_propTypes.default.number),\n onPreviewChange: _propTypes.default.func,\n onChange: _propTypes.default.func,\n footerContent: _propTypes.default.any,\n headerContent: _propTypes.default.any,\n rangeColors: _propTypes.default.arrayOf(_propTypes.default.string),\n className: _propTypes.default.string,\n renderStaticRangeLabel: _propTypes.default.func\n};\nDefinedRange.defaultProps = {\n inputRanges: _defaultRanges.defaultInputRanges,\n staticRanges: _defaultRanges.defaultStaticRanges,\n ranges: [],\n rangeColors: ['#3d91ff', '#3ecf8e', '#fed14c'],\n focusedRange: [0, 0]\n};\nvar _default = DefinedRange;\nexports.default = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nvar MIN = 0;\nvar MAX = 99999;\n\nvar InputRangeField = /*#__PURE__*/function (_Component) {\n _inherits(InputRangeField, _Component);\n\n var _super = _createSuper(InputRangeField);\n\n function InputRangeField(props, context) {\n var _this;\n\n _classCallCheck(this, InputRangeField);\n\n _this = _super.call(this, props, context);\n\n _defineProperty(_assertThisInitialized(_this), \"onChange\", function (e) {\n var onChange = _this.props.onChange;\n var value = parseInt(e.target.value, 10);\n value = isNaN(value) ? 0 : Math.max(Math.min(MAX, value), MIN);\n onChange(value);\n });\n\n return _this;\n }\n\n _createClass(InputRangeField, [{\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate(nextProps) {\n var _this$props = this.props,\n value = _this$props.value,\n label = _this$props.label,\n placeholder = _this$props.placeholder;\n return value !== nextProps.value || label !== nextProps.label || placeholder !== nextProps.placeholder;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n label = _this$props2.label,\n placeholder = _this$props2.placeholder,\n value = _this$props2.value,\n styles = _this$props2.styles,\n onBlur = _this$props2.onBlur,\n onFocus = _this$props2.onFocus;\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: styles.inputRange\n }, /*#__PURE__*/_react.default.createElement(\"input\", {\n className: styles.inputRangeInput,\n placeholder: placeholder,\n value: value,\n min: MIN,\n max: MAX,\n onChange: this.onChange,\n onFocus: onFocus,\n onBlur: onBlur\n }), /*#__PURE__*/_react.default.createElement(\"span\", {\n className: styles.inputRangeLabel\n }, label));\n }\n }]);\n\n return InputRangeField;\n}(_react.Component);\n\nInputRangeField.propTypes = {\n value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),\n label: _propTypes.default.oneOfType([_propTypes.default.element, _propTypes.default.node]).isRequired,\n placeholder: _propTypes.default.string,\n styles: _propTypes.default.shape({\n inputRange: _propTypes.default.string,\n inputRangeInput: _propTypes.default.string,\n inputRangeLabel: _propTypes.default.string\n }).isRequired,\n onBlur: _propTypes.default.func.isRequired,\n onFocus: _propTypes.default.func.isRequired,\n onChange: _propTypes.default.func.isRequired\n};\nInputRangeField.defaultProps = {\n value: '',\n placeholder: '-'\n};\nvar _default = InputRangeField;\nexports.default = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _DayCell = _interopRequireWildcard(require(\"../DayCell\"));\n\nvar _eachDayOfInterval = _interopRequireDefault(require(\"date-fns/eachDayOfInterval\"));\n\nvar _isWithinInterval = _interopRequireDefault(require(\"date-fns/isWithinInterval\"));\n\nvar _isWeekend = _interopRequireDefault(require(\"date-fns/isWeekend\"));\n\nvar _isAfter = _interopRequireDefault(require(\"date-fns/isAfter\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"date-fns/isSameDay\"));\n\nvar _isBefore = _interopRequireDefault(require(\"date-fns/isBefore\"));\n\nvar _endOfWeek = _interopRequireDefault(require(\"date-fns/endOfWeek\"));\n\nvar _startOfWeek = _interopRequireDefault(require(\"date-fns/startOfWeek\"));\n\nvar _endOfDay = _interopRequireDefault(require(\"date-fns/endOfDay\"));\n\nvar _startOfDay = _interopRequireDefault(require(\"date-fns/startOfDay\"));\n\nvar _format = _interopRequireDefault(require(\"date-fns/format\"));\n\nvar _utils = require(\"../../utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _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; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\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; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction renderWeekdays(styles, dateOptions, weekdayDisplayFormat) {\n var now = new Date();\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: styles.weekDays\n }, (0, _eachDayOfInterval.default)({\n start: (0, _startOfWeek.default)(now, dateOptions),\n end: (0, _endOfWeek.default)(now, dateOptions)\n }).map(function (day, i) {\n return /*#__PURE__*/_react.default.createElement(\"span\", {\n className: styles.weekDay,\n key: i\n }, (0, _format.default)(day, weekdayDisplayFormat, dateOptions));\n }));\n}\n\nvar Month = /*#__PURE__*/function (_PureComponent) {\n _inherits(Month, _PureComponent);\n\n var _super = _createSuper(Month);\n\n function Month() {\n _classCallCheck(this, Month);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Month, [{\n key: \"render\",\n value: function render() {\n var _this = this;\n\n var now = new Date();\n var _this$props = this.props,\n displayMode = _this$props.displayMode,\n focusedRange = _this$props.focusedRange,\n drag = _this$props.drag,\n styles = _this$props.styles,\n disabledDates = _this$props.disabledDates,\n disabledDay = _this$props.disabledDay;\n var minDate = this.props.minDate && (0, _startOfDay.default)(this.props.minDate);\n var maxDate = this.props.maxDate && (0, _endOfDay.default)(this.props.maxDate);\n var monthDisplay = (0, _utils.getMonthDisplayRange)(this.props.month, this.props.dateOptions, this.props.fixedHeight);\n var ranges = this.props.ranges;\n\n if (displayMode === 'dateRange' && drag.status) {\n var _drag$range = drag.range,\n startDate = _drag$range.startDate,\n endDate = _drag$range.endDate;\n ranges = ranges.map(function (range, i) {\n if (i !== focusedRange[0]) return range;\n return _objectSpread(_objectSpread({}, range), {}, {\n startDate: startDate,\n endDate: endDate\n });\n });\n }\n\n var showPreview = this.props.showPreview && !drag.disablePreview;\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: styles.month,\n style: this.props.style\n }, this.props.showMonthName ? /*#__PURE__*/_react.default.createElement(\"div\", {\n className: styles.monthName\n }, (0, _format.default)(this.props.month, this.props.monthDisplayFormat, this.props.dateOptions)) : null, this.props.showWeekDays && renderWeekdays(styles, this.props.dateOptions, this.props.weekdayDisplayFormat), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: styles.days,\n onMouseLeave: this.props.onMouseLeave\n }, (0, _eachDayOfInterval.default)({\n start: monthDisplay.start,\n end: monthDisplay.end\n }).map(function (day, index) {\n var isStartOfMonth = (0, _isSameDay.default)(day, monthDisplay.startDateOfMonth);\n var isEndOfMonth = (0, _isSameDay.default)(day, monthDisplay.endDateOfMonth);\n var isOutsideMinMax = minDate && (0, _isBefore.default)(day, minDate) || maxDate && (0, _isAfter.default)(day, maxDate);\n var isDisabledSpecifically = disabledDates.some(function (disabledDate) {\n return (0, _isSameDay.default)(disabledDate, day);\n });\n var isDisabledDay = disabledDay(day);\n return /*#__PURE__*/_react.default.createElement(_DayCell.default, _extends({}, _this.props, {\n ranges: ranges,\n day: day,\n preview: showPreview ? _this.props.preview : null,\n isWeekend: (0, _isWeekend.default)(day, _this.props.dateOptions),\n isToday: (0, _isSameDay.default)(day, now),\n isStartOfWeek: (0, _isSameDay.default)(day, (0, _startOfWeek.default)(day, _this.props.dateOptions)),\n isEndOfWeek: (0, _isSameDay.default)(day, (0, _endOfWeek.default)(day, _this.props.dateOptions)),\n isStartOfMonth: isStartOfMonth,\n isEndOfMonth: isEndOfMonth,\n key: index,\n disabled: isOutsideMinMax || isDisabledSpecifically || isDisabledDay,\n isPassive: !(0, _isWithinInterval.default)(day, {\n start: monthDisplay.startDateOfMonth,\n end: monthDisplay.endDateOfMonth\n }),\n styles: styles,\n onMouseDown: _this.props.onDragSelectionStart,\n onMouseUp: _this.props.onDragSelectionEnd,\n onMouseEnter: _this.props.onDragSelectionMove,\n dragRange: drag.range,\n drag: drag.status\n }));\n })));\n }\n }]);\n\n return Month;\n}(_react.PureComponent);\n\nMonth.defaultProps = {};\nMonth.propTypes = {\n style: _propTypes.default.object,\n styles: _propTypes.default.object,\n month: _propTypes.default.object,\n drag: _propTypes.default.object,\n dateOptions: _propTypes.default.object,\n disabledDates: _propTypes.default.array,\n disabledDay: _propTypes.default.func,\n preview: _propTypes.default.shape({\n startDate: _propTypes.default.object,\n endDate: _propTypes.default.object\n }),\n showPreview: _propTypes.default.bool,\n displayMode: _propTypes.default.oneOf(['dateRange', 'date']),\n minDate: _propTypes.default.object,\n maxDate: _propTypes.default.object,\n ranges: _propTypes.default.arrayOf(_DayCell.rangeShape),\n focusedRange: _propTypes.default.arrayOf(_propTypes.default.number),\n onDragSelectionStart: _propTypes.default.func,\n onDragSelectionEnd: _propTypes.default.func,\n onDragSelectionMove: _propTypes.default.func,\n onMouseLeave: _propTypes.default.func,\n monthDisplayFormat: _propTypes.default.string,\n weekdayDisplayFormat: _propTypes.default.string,\n dayDisplayFormat: _propTypes.default.string,\n showWeekDays: _propTypes.default.bool,\n showMonthName: _propTypes.default.bool,\n fixedHeight: _propTypes.default.bool\n};\nvar _default = Month;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createStaticRanges = createStaticRanges;\nexports.defaultInputRanges = exports.defaultStaticRanges = void 0;\n\nvar _differenceInCalendarDays = _interopRequireDefault(require(\"date-fns/differenceInCalendarDays\"));\n\nvar _isSameDay = _interopRequireDefault(require(\"date-fns/isSameDay\"));\n\nvar _endOfWeek = _interopRequireDefault(require(\"date-fns/endOfWeek\"));\n\nvar _startOfWeek = _interopRequireDefault(require(\"date-fns/startOfWeek\"));\n\nvar _addMonths = _interopRequireDefault(require(\"date-fns/addMonths\"));\n\nvar _endOfMonth = _interopRequireDefault(require(\"date-fns/endOfMonth\"));\n\nvar _startOfMonth = _interopRequireDefault(require(\"date-fns/startOfMonth\"));\n\nvar _startOfDay = _interopRequireDefault(require(\"date-fns/startOfDay\"));\n\nvar _endOfDay = _interopRequireDefault(require(\"date-fns/endOfDay\"));\n\nvar _addDays = _interopRequireDefault(require(\"date-fns/addDays\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\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; }\n\nvar defineds = {\n startOfWeek: (0, _startOfWeek.default)(new Date()),\n endOfWeek: (0, _endOfWeek.default)(new Date()),\n startOfLastWeek: (0, _startOfWeek.default)((0, _addDays.default)(new Date(), -7)),\n endOfLastWeek: (0, _endOfWeek.default)((0, _addDays.default)(new Date(), -7)),\n startOfToday: (0, _startOfDay.default)(new Date()),\n endOfToday: (0, _endOfDay.default)(new Date()),\n startOfYesterday: (0, _startOfDay.default)((0, _addDays.default)(new Date(), -1)),\n endOfYesterday: (0, _endOfDay.default)((0, _addDays.default)(new Date(), -1)),\n startOfMonth: (0, _startOfMonth.default)(new Date()),\n endOfMonth: (0, _endOfMonth.default)(new Date()),\n startOfLastMonth: (0, _startOfMonth.default)((0, _addMonths.default)(new Date(), -1)),\n endOfLastMonth: (0, _endOfMonth.default)((0, _addMonths.default)(new Date(), -1))\n};\nvar staticRangeHandler = {\n range: {},\n isSelected: function isSelected(range) {\n var definedRange = this.range();\n return (0, _isSameDay.default)(range.startDate, definedRange.startDate) && (0, _isSameDay.default)(range.endDate, definedRange.endDate);\n }\n};\n\nfunction createStaticRanges(ranges) {\n return ranges.map(function (range) {\n return _objectSpread(_objectSpread({}, staticRangeHandler), range);\n });\n}\n\nvar defaultStaticRanges = createStaticRanges([{\n label: 'Today',\n range: function range() {\n return {\n startDate: defineds.startOfToday,\n endDate: defineds.endOfToday\n };\n }\n}, {\n label: 'Yesterday',\n range: function range() {\n return {\n startDate: defineds.startOfYesterday,\n endDate: defineds.endOfYesterday\n };\n }\n}, {\n label: 'This Week',\n range: function range() {\n return {\n startDate: defineds.startOfWeek,\n endDate: defineds.endOfWeek\n };\n }\n}, {\n label: 'Last Week',\n range: function range() {\n return {\n startDate: defineds.startOfLastWeek,\n endDate: defineds.endOfLastWeek\n };\n }\n}, {\n label: 'This Month',\n range: function range() {\n return {\n startDate: defineds.startOfMonth,\n endDate: defineds.endOfMonth\n };\n }\n}, {\n label: 'Last Month',\n range: function range() {\n return {\n startDate: defineds.startOfLastMonth,\n endDate: defineds.endOfLastMonth\n };\n }\n}]);\nexports.defaultStaticRanges = defaultStaticRanges;\nvar defaultInputRanges = [{\n label: 'days up to today',\n range: function range(value) {\n return {\n startDate: (0, _addDays.default)(defineds.startOfToday, (Math.max(Number(value), 1) - 1) * -1),\n endDate: defineds.endOfToday\n };\n },\n getCurrentValue: function getCurrentValue(range) {\n if (!(0, _isSameDay.default)(range.endDate, defineds.endOfToday)) return '-';\n if (!range.startDate) return '∞';\n return (0, _differenceInCalendarDays.default)(defineds.endOfToday, range.startDate) + 1;\n }\n}, {\n label: 'days starting today',\n range: function range(value) {\n var today = new Date();\n return {\n startDate: today,\n endDate: (0, _addDays.default)(today, Math.max(Number(value), 1) - 1)\n };\n },\n getCurrentValue: function getCurrentValue(range) {\n if (!(0, _isSameDay.default)(range.startDate, defineds.startOfToday)) return '-';\n if (!range.endDate) return '∞';\n return (0, _differenceInCalendarDays.default)(range.endDate, defineds.startOfToday) + 1;\n }\n}];\nexports.defaultInputRanges = defaultInputRanges;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"DateRange\", {\n enumerable: true,\n get: function get() {\n return _DateRange.default;\n }\n});\nObject.defineProperty(exports, \"Calendar\", {\n enumerable: true,\n get: function get() {\n return _Calendar.default;\n }\n});\nObject.defineProperty(exports, \"DateRangePicker\", {\n enumerable: true,\n get: function get() {\n return _DateRangePicker.default;\n }\n});\nObject.defineProperty(exports, \"DefinedRange\", {\n enumerable: true,\n get: function get() {\n return _DefinedRange.default;\n }\n});\nObject.defineProperty(exports, \"defaultInputRanges\", {\n enumerable: true,\n get: function get() {\n return _defaultRanges.defaultInputRanges;\n }\n});\nObject.defineProperty(exports, \"defaultStaticRanges\", {\n enumerable: true,\n get: function get() {\n return _defaultRanges.defaultStaticRanges;\n }\n});\nObject.defineProperty(exports, \"createStaticRanges\", {\n enumerable: true,\n get: function get() {\n return _defaultRanges.createStaticRanges;\n }\n});\n\nvar _DateRange = _interopRequireDefault(require(\"./components/DateRange\"));\n\nvar _Calendar = _interopRequireDefault(require(\"./components/Calendar\"));\n\nvar _DateRangePicker = _interopRequireDefault(require(\"./components/DateRangePicker\"));\n\nvar _DefinedRange = _interopRequireDefault(require(\"./components/DefinedRange\"));\n\nvar _defaultRanges = require(\"./defaultRanges\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = {\n dateRangeWrapper: 'rdrDateRangeWrapper',\n calendarWrapper: 'rdrCalendarWrapper',\n dateDisplay: 'rdrDateDisplay',\n dateDisplayItem: 'rdrDateDisplayItem',\n dateDisplayItemActive: 'rdrDateDisplayItemActive',\n monthAndYearWrapper: 'rdrMonthAndYearWrapper',\n monthAndYearPickers: 'rdrMonthAndYearPickers',\n nextPrevButton: 'rdrNextPrevButton',\n month: 'rdrMonth',\n weekDays: 'rdrWeekDays',\n weekDay: 'rdrWeekDay',\n days: 'rdrDays',\n day: 'rdrDay',\n dayNumber: 'rdrDayNumber',\n dayPassive: 'rdrDayPassive',\n dayToday: 'rdrDayToday',\n dayStartOfWeek: 'rdrDayStartOfWeek',\n dayEndOfWeek: 'rdrDayEndOfWeek',\n daySelected: 'rdrDaySelected',\n dayDisabled: 'rdrDayDisabled',\n dayStartOfMonth: 'rdrDayStartOfMonth',\n dayEndOfMonth: 'rdrDayEndOfMonth',\n dayWeekend: 'rdrDayWeekend',\n dayStartPreview: 'rdrDayStartPreview',\n dayInPreview: 'rdrDayInPreview',\n dayEndPreview: 'rdrDayEndPreview',\n dayHovered: 'rdrDayHovered',\n dayActive: 'rdrDayActive',\n inRange: 'rdrInRange',\n endEdge: 'rdrEndEdge',\n startEdge: 'rdrStartEdge',\n prevButton: 'rdrPprevButton',\n nextButton: 'rdrNextButton',\n selected: 'rdrSelected',\n months: 'rdrMonths',\n monthPicker: 'rdrMonthPicker',\n yearPicker: 'rdrYearPicker',\n dateDisplayWrapper: 'rdrDateDisplayWrapper',\n definedRangesWrapper: 'rdrDefinedRangesWrapper',\n staticRanges: 'rdrStaticRanges',\n staticRange: 'rdrStaticRange',\n inputRanges: 'rdrInputRanges',\n inputRange: 'rdrInputRange',\n inputRangeInput: 'rdrInputRangeInput',\n dateRangePickerWrapper: 'rdrDateRangePickerWrapper',\n staticRangeLabel: 'rdrStaticRangeLabel',\n staticRangeSelected: 'rdrStaticRangeSelected',\n monthName: 'rdrMonthName',\n infiniteMonths: 'rdrInfiniteMonths',\n monthsVertical: 'rdrMonthsVertical',\n monthsHorizontal: 'rdrMonthsHorizontal'\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.calcFocusDate = calcFocusDate;\nexports.findNextRangeIndex = findNextRangeIndex;\nexports.getMonthDisplayRange = getMonthDisplayRange;\nexports.generateStyles = generateStyles;\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _addDays = _interopRequireDefault(require(\"date-fns/addDays\"));\n\nvar _differenceInCalendarMonths = _interopRequireDefault(require(\"date-fns/differenceInCalendarMonths\"));\n\nvar _differenceInCalendarDays = _interopRequireDefault(require(\"date-fns/differenceInCalendarDays\"));\n\nvar _endOfWeek = _interopRequireDefault(require(\"date-fns/endOfWeek\"));\n\nvar _startOfWeek = _interopRequireDefault(require(\"date-fns/startOfWeek\"));\n\nvar _endOfMonth = _interopRequireDefault(require(\"date-fns/endOfMonth\"));\n\nvar _startOfMonth = _interopRequireDefault(require(\"date-fns/startOfMonth\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction calcFocusDate(currentFocusedDate, props) {\n var shownDate = props.shownDate,\n date = props.date,\n months = props.months,\n ranges = props.ranges,\n focusedRange = props.focusedRange,\n displayMode = props.displayMode; // find primary date according the props\n\n var targetInterval;\n\n if (displayMode === 'dateRange') {\n var range = ranges[focusedRange[0]] || {};\n targetInterval = {\n start: range.startDate,\n end: range.endDate\n };\n } else {\n targetInterval = {\n start: date,\n end: date\n };\n }\n\n targetInterval.start = (0, _startOfMonth.default)(targetInterval.start || new Date());\n targetInterval.end = (0, _endOfMonth.default)(targetInterval.end || targetInterval.start);\n var targetDate = targetInterval.start || targetInterval.end || shownDate || new Date(); // initial focus\n\n if (!currentFocusedDate) return shownDate || targetDate; // // just return targetDate for native scrolled calendars\n // if (props.scroll.enabled) return targetDate;\n\n if ((0, _differenceInCalendarMonths.default)(targetInterval.start, targetInterval.end) > months) {\n // don't change focused if new selection in view area\n return currentFocusedDate;\n }\n\n return targetDate;\n}\n\nfunction findNextRangeIndex(ranges) {\n var currentRangeIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n var nextIndex = ranges.findIndex(function (range, i) {\n return i > currentRangeIndex && range.autoFocus !== false && !range.disabled;\n });\n if (nextIndex !== -1) return nextIndex;\n return ranges.findIndex(function (range) {\n return range.autoFocus !== false && !range.disabled;\n });\n}\n\nfunction getMonthDisplayRange(date, dateOptions, fixedHeight) {\n var startDateOfMonth = (0, _startOfMonth.default)(date, dateOptions);\n var endDateOfMonth = (0, _endOfMonth.default)(date, dateOptions);\n var startDateOfCalendar = (0, _startOfWeek.default)(startDateOfMonth, dateOptions);\n var endDateOfCalendar = (0, _endOfWeek.default)(endDateOfMonth, dateOptions);\n\n if (fixedHeight && (0, _differenceInCalendarDays.default)(endDateOfCalendar, startDateOfCalendar) <= 34) {\n endDateOfCalendar = (0, _addDays.default)(endDateOfCalendar, 7);\n }\n\n return {\n start: startDateOfCalendar,\n end: endDateOfCalendar,\n startDateOfMonth: startDateOfMonth,\n endDateOfMonth: endDateOfMonth\n };\n}\n\nfunction generateStyles(sources) {\n if (!sources.length) return {};\n var generatedStyles = sources.filter(function (source) {\n return Boolean(source);\n }).reduce(function (styles, styleSource) {\n Object.keys(styleSource).forEach(function (key) {\n styles[key] = (0, _classnames.default)(styles[key], styleSource[key]);\n });\n return styles;\n }, {});\n return generatedStyles;\n}","/**\n * @license React\n * react-dom.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/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ba=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function t(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new t(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new t(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new t(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new t(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new t(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new t(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new t(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new t(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new t(a,5,!1,a.toLowerCase(),null,!1,!1)});var qa=/[\\-:]([a-z])/g;function ra(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(qa,\nra);z[b]=new t(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(qa,ra);z[b]=new t(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(qa,ra);z[b]=new t(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new t(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new t(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new t(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction sa(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Ma=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?La(a):\"\"}\nfunction Oa(a){switch(a.tag){case 5:return La(a.type);case 16:return La(\"Lazy\");case 13:return La(\"Suspense\");case 19:return La(\"SuspenseList\");case 0:case 2:case 15:return a=Na(a.type,!1),a;case 11:return a=Na(a.type.render,!1),a;case 1:return a=Na(a.type,!0),a;default:return\"\"}}\nfunction Pa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case wa:return\"Fragment\";case va:return\"Portal\";case za:return\"Profiler\";case xa:return\"StrictMode\";case Da:return\"Suspense\";case Ea:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ba:return(a.displayName||\"Context\")+\".Consumer\";case Aa:return(a._context.displayName||\"Context\")+\".Provider\";case Ca:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Fa:return b=a.displayName||null,null!==b?b:Pa(a.type)||\"Memo\";case Ga:b=a._payload;a=a._init;try{return Pa(a(b))}catch(c){}}return null}\nfunction Qa(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Pa(b);case 8:return b===xa?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Ra(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Sa(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ta(a){var b=Sa(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Ua(a){a._valueTracker||(a._valueTracker=Ta(a))}function Va(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Sa(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Wa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Xa(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Ya(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Ra(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Za(a,b){b=b.checked;null!=b&&sa(a,\"checked\",b,!1)}\nfunction $a(a,b){Za(a,b);var c=Ra(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?bb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&bb(a,b.type,Ra(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction cb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction bb(a,b,c){if(\"number\"!==b||Wa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var db=Array.isArray;\nfunction eb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=lb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction nb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar ob={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},pb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(ob).forEach(function(a){pb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);ob[b]=ob[a]})});function qb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||ob.hasOwnProperty(a)&&ob[a]?(\"\"+b).trim():b+\"px\"}\nfunction rb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=qb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var sb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction tb(a,b){if(b){if(sb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction ub(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var vb=null;function wb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var xb=null,yb=null,zb=null;\nfunction Ab(a){if(a=Bb(a)){if(\"function\"!==typeof xb)throw Error(p(280));var b=a.stateNode;b&&(b=Cb(b),xb(a.stateNode,a.type,b))}}function Db(a){yb?zb?zb.push(a):zb=[a]:yb=a}function Eb(){if(yb){var a=yb,b=zb;zb=yb=null;Ab(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(oc(a)/pc|0)|0}var qc=64,rc=4194304;\nfunction sc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function tc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=sc(h):(f&=g,0!==f&&(d=sc(f)))}else g=c&~e,0!==g?d=sc(g):0!==f&&(d=sc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction zc(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-nc(b);a[b]=c}function Ac(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=ae),de=String.fromCharCode(32),ee=!1;\nfunction fe(a,b){switch(a){case \"keyup\":return-1!==Zd.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function ge(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var he=!1;function ie(a,b){switch(a){case \"compositionend\":return ge(b);case \"keypress\":if(32!==b.which)return null;ee=!0;return de;case \"textInput\":return a=b.data,a===de&&ee?null:a;default:return null}}\nfunction je(a,b){if(he)return\"compositionend\"===a||!$d&&fe(a,b)?(a=md(),ld=kd=jd=null,he=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Ie(c)}}function Ke(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Ke(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Le(){for(var a=window,b=Wa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Wa(a.document)}return b}function Me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Ne(a){var b=Le(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Ke(c.ownerDocument.documentElement,c)){if(null!==d&&Me(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Je(c,f);var g=Je(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Pe=null,Qe=null,Re=null,Se=!1;\nfunction Te(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Se||null==Pe||Pe!==Wa(d)||(d=Pe,\"selectionStart\"in d&&Me(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Re&&He(Re,d)||(Re=d,d=ne(Qe,\"onSelect\"),0Sf||(a.current=Rf[Sf],Rf[Sf]=null,Sf--)}function G(a,b){Sf++;Rf[Sf]=a.current;a.current=b}var Uf={},H=Tf(Uf),Vf=Tf(!1),Wf=Uf;function Xf(a,b){var c=a.type.contextTypes;if(!c)return Uf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Yf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Zf(){E(Vf);E(H)}function $f(a,b,c){if(H.current!==Uf)throw Error(p(168));G(H,b);G(Vf,c)}function ag(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Qa(a)||\"Unknown\",e));return A({},c,d)}\nfunction bg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Uf;Wf=H.current;G(H,a);G(Vf,Vf.current);return!0}function cg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=ag(a,b,Wf),d.__reactInternalMemoizedMergedChildContext=a,E(Vf),E(H),G(H,a)):E(Vf);G(Vf,c)}var dg=null,eg=!1,fg=!1;function gg(a){null===dg?dg=[a]:dg.push(a)}function hg(a){eg=!0;gg(a)}\nfunction ig(){if(!fg&&null!==dg){fg=!0;var a=0,b=C;try{var c=dg;for(C=1;a>=g;e-=g;Yg=1<<32-nc(b)+e|c<m?(x=r,r=null):x=r.sibling;var v=q(e,r,h[m],k);if(null===v){null===r&&(r=x);break}a&&r&&null===v.alternate&&b(e,r);g=f(v,g,m);null===n?l=v:n.sibling=v;n=v;r=x}if(m===h.length)return c(e,r),I&&$g(e,m),l;if(null===r){for(;mr?(x=m,m=null):x=m.sibling;var w=q(e,m,v.value,k);if(null===w){null===m&&(m=x);break}a&&m&&null===w.alternate&&b(e,m);g=f(w,g,r);null===n?l=w:n.sibling=w;n=w;m=x}if(v.done)return c(e,\nm),I&&$g(e,r),l;if(null===m){for(;!v.done;r++,v=h.next())v=u(e,v.value,k),null!==v&&(g=f(v,g,r),null===n?l=v:n.sibling=v,n=v);I&&$g(e,r);return l}for(m=d(e,m);!v.done;r++,v=h.next())v=y(m,e,r,v.value,k),null!==v&&(a&&null!==v.alternate&&m.delete(null===v.key?r:v.key),g=f(v,g,r),null===n?l=v:n.sibling=v,n=v);a&&m.forEach(function(a){return b(e,a)});I&&$g(e,r);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===wa&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case ua:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===wa){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ga&&rh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=ph(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===wa?(d=xh(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=vh(f.type,f.key,f.props,null,a.mode,h),h.ref=ph(a,d,f),h.return=a,a=h)}return g(a);case va:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=wh(f,a.mode,h);d.return=a;a=d}return g(a);case Ga:return l=f._init,J(a,d,l(f._payload),h)}if(db(f))return m(a,d,f,h);if(Ja(f))return w(a,d,f,h);qh(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=uh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var yh=sh(!0),zh=sh(!1),Ah={},Bh=Tf(Ah),Ch=Tf(Ah),Dh=Tf(Ah);function Eh(a){if(a===Ah)throw Error(p(174));return a}function Fh(a,b){G(Dh,b);G(Ch,a);G(Bh,Ah);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:kb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=kb(b,a)}E(Bh);G(Bh,b)}function Gh(){E(Bh);E(Ch);E(Dh)}\nfunction Hh(a){Eh(Dh.current);var b=Eh(Bh.current);var c=kb(b,a.type);b!==c&&(G(Ch,a),G(Bh,c))}function Ih(a){Ch.current===a&&(E(Bh),E(Ch))}var K=Tf(0);\nfunction Jh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Kh=[];\nfunction Lh(){for(var a=0;ac?c:4;a(!0);var d=Nh.transition;Nh.transition={};try{a(!1),b()}finally{C=c,Nh.transition=d}}function Bi(){return ai().memoizedState}\nfunction Ci(a,b,c){var d=Kg(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};Di(a)?Ei(b,c):(Fi(a,b,c),c=Jg(),a=Lg(a,d,c),null!==a&&Gi(a,b,d))}\nfunction ni(a,b,c){var d=Kg(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Di(a))Ei(b,e);else{Fi(a,b,e);var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(Ge(h,g))return}catch(k){}finally{}c=Jg();a=Lg(a,d,c);null!==a&&Gi(a,b,d)}}function Di(a){var b=a.alternate;return a===L||null!==b&&b===L}\nfunction Ei(a,b){Qh=Ph=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Fi(a,b,c){Bg(a)?(a=b.interleaved,null===a?(c.next=c,null===vg?vg=[b]:vg.push(b)):(c.next=a.next,a.next=c),b.interleaved=c):(a=b.pending,null===a?c.next=c:(c.next=a.next,a.next=c),b.pending=c)}function Gi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Bc(a,c)}}\nvar Yh={readContext:ug,useCallback:O,useContext:O,useEffect:O,useImperativeHandle:O,useInsertionEffect:O,useLayoutEffect:O,useMemo:O,useReducer:O,useRef:O,useState:O,useDebugValue:O,useDeferredValue:O,useTransition:O,useMutableSource:O,useSyncExternalStore:O,useId:O,unstable_isNewReconciler:!1},Vh={readContext:ug,useCallback:function(a,b){$h().memoizedState=[a,void 0===b?null:b];return a},useContext:ug,useEffect:ri,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return pi(4194308,\n4,ui.bind(null,b,a),c)},useLayoutEffect:function(a,b){return pi(4194308,4,a,b)},useInsertionEffect:function(a,b){return pi(4,2,a,b)},useMemo:function(a,b){var c=$h();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=$h();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Ci.bind(null,L,a);return[d.memoizedState,a]},useRef:function(a){var b=\n$h();a={current:a};return b.memoizedState=a},useState:mi,useDebugValue:wi,useDeferredValue:function(a){return $h().memoizedState=a},useTransition:function(){var a=mi(!1),b=a[0];a=Ai.bind(null,a[1]);$h().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=L,e=$h();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===P)throw Error(p(349));0!==(Oh&30)||ki(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;ri(hi.bind(null,d,\nf,a),[a]);d.flags|=2048;ii(9,ji.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=$h(),b=P.identifierPrefix;if(I){var c=Zg;var d=Yg;c=(d&~(1<<32-nc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Rh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Nf]=b;a[Of]=d;Ti(a,b,!1,!1);b.stateNode=a;a:{g=ub(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eaj&&(b.flags|=\n128,d=!0,Xi(f,!1),b.lanes=4194304)}else{if(!d)if(a=Jh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Xi(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return Q(b),null}else 2*B()-f.renderingStartTime>aj&&1073741824!==c&&(b.flags|=128,d=!0,Xi(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=b,f.tail=b.sibling,f.renderingStartTime=\nB(),b.sibling=null,c=K.current,G(K,d?c&1|2:c&1),b;Q(b);return null;case 22:case 23:return bj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(cj&1073741824)&&(Q(b),b.subtreeFlags&6&&(b.flags|=8192)):Q(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}var dj=ta.ReactCurrentOwner,tg=!1;function ej(a,b,c,d){b.child=null===a?zh(b,null,c,d):yh(b,a.child,c,d)}\nfunction fj(a,b,c,d,e){c=c.render;var f=b.ref;sg(b,e);d=Uh(a,b,c,d,f,e);c=Zh();if(null!==a&&!tg)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,gj(a,b,e);I&&c&&bh(b);b.flags|=1;ej(a,b,d,e);return b.child}\nfunction hj(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!ij(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,jj(a,b,f,d,e);a=vh(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:He;if(c(g,d)&&a.ref===b.ref)return gj(a,b,e)}b.flags|=1;a=th(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction jj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(He(f,d)&&a.ref===b.ref)if(tg=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(tg=!0);else return b.lanes=a.lanes,gj(a,b,e)}return kj(a,b,c,d,e)}\nfunction lj(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(mj,cj),cj|=c;else if(0!==(c&1073741824))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},d=null!==f?f.baseLanes:c,G(mj,cj),cj|=d;else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(mj,cj),cj|=a,null;\nelse null!==f?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(mj,cj),cj|=d;ej(a,b,e,c);return b.child}function nj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function kj(a,b,c,d,e){var f=Yf(c)?Wf:H.current;f=Xf(b,f);sg(b,e);c=Uh(a,b,c,d,f,e);d=Zh();if(null!==a&&!tg)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,gj(a,b,e);I&&d&&bh(b);b.flags|=1;ej(a,b,c,e);return b.child}\nfunction oj(a,b,c,d,e){if(Yf(c)){var f=!0;bg(b)}else f=!1;sg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),Og(b,c,d),Qg(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=ug(l):(l=Yf(c)?Wf:H.current,l=Xf(b,l));var n=c.getDerivedStateFromProps,u=\"function\"===typeof n||\"function\"===typeof g.getSnapshotBeforeUpdate;u||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Pg(b,g,d,l);wg=!1;var q=b.memoizedState;g.state=q;Eg(b,d,g,e);k=b.memoizedState;h!==d||q!==k||Vf.current||wg?(\"function\"===typeof n&&(Ig(b,c,n,d),k=b.memoizedState),(h=wg||Ng(b,c,h,d,q,k,l))?(u||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.flags|=4194308)):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;yg(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:kg(b.type,h);g.props=l;u=b.pendingProps;q=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=ug(k):(k=Yf(c)?Wf:H.current,k=Xf(b,k));var y=c.getDerivedStateFromProps;(n=\"function\"===\ntypeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==u||q!==k)&&Pg(b,g,d,k);wg=!1;q=b.memoizedState;g.state=q;Eg(b,d,g,e);var m=b.memoizedState;h!==u||q!==m||Vf.current||wg?(\"function\"===typeof y&&(Ig(b,c,y,d),m=b.memoizedState),(l=wg||Ng(b,c,l,d,q,m,k)||!1)?(n||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&\ng.componentWillUpdate(d,m,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,m,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&q===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&q===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=m),g.props=d,g.state=m,g.context=\nk,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&q===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&q===a.memoizedState||(b.flags|=1024),d=!1)}return pj(a,b,c,d,f,e)}\nfunction pj(a,b,c,d,e,f){nj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&cg(b,c,!1),gj(a,b,f);d=b.stateNode;dj.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=yh(b,a.child,null,f),b.child=yh(b,null,h,f)):ej(a,b,h,f);b.memoizedState=d.state;e&&cg(b,c,!0);return b.child}function qj(a){var b=a.stateNode;b.pendingContext?$f(a,b.pendingContext,b.pendingContext!==b.context):b.context&&$f(a,b.context,!1);Fh(a,b.containerInfo)}\nfunction rj(a,b,c,d,e){nh();oh(e);b.flags|=256;ej(a,b,c,d);return b.child}var sj={dehydrated:null,treeContext:null,retryLane:0};function tj(a){return{baseLanes:a,cachePool:null,transitions:null}}function uj(a,b){return{baseLanes:a.baseLanes|b,cachePool:null,transitions:a.transitions}}\nfunction vj(a,b,c){var d=b.pendingProps,e=K.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(K,e&1);if(null===a){kh(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;e=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,e={mode:\"hidden\",children:e},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ne):f=wj(e,d,0,null),a=xh(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=tj(c),b.memoizedState=sj,a):xj(b,e)}e=a.memoizedState;if(null!==e){h=e.dehydrated;if(null!==h){if(g){if(b.flags&256)return b.flags&=-257,yj(a,b,c,Error(p(422)));if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=wj({mode:\"visible\",children:d.children},e,0,null);f=xh(f,e,c,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&yh(b,a.child,\nnull,c);b.child.memoizedState=tj(c);b.memoizedState=sj;return f}if(0===(b.mode&1))b=yj(a,b,c,null);else if(\"$!\"===h.data)b=yj(a,b,c,Error(p(419)));else if(d=0!==(c&a.childLanes),tg||d){d=P;if(null!==d){switch(c&-c){case 4:f=2;break;case 16:f=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:f=32;break;case 536870912:f=\n268435456;break;default:f=0}d=0!==(f&(d.suspendedLanes|c))?0:f;0!==d&&d!==e.retryLane&&(e.retryLane=d,Lg(a,d,-1))}$i();b=yj(a,b,c,Error(p(421)))}else\"$?\"===h.data?(b.flags|=128,b.child=a.child,b=zj.bind(null,a),h._reactRetry=b,b=null):(c=e.treeContext,eh=Kf(h.nextSibling),dh=b,I=!0,fh=null,null!==c&&(Vg[Wg++]=Yg,Vg[Wg++]=Zg,Vg[Wg++]=Xg,Yg=c.id,Zg=c.overflow,Xg=b),b=xj(b,b.pendingProps.children),b.flags|=4096);return b}if(f)return d=Aj(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,\nf.memoizedState=null===e?tj(c):uj(e,c),f.childLanes=a.childLanes&~c,b.memoizedState=sj,d;c=Bj(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=Aj(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?tj(c):uj(e,c),f.childLanes=a.childLanes&~c,b.memoizedState=sj,d;c=Bj(a,b,d.children,c);b.memoizedState=null;return c}function xj(a,b){b=wj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}\nfunction Bj(a,b,c,d){var e=a.child;a=e.sibling;c=th(e,{mode:\"visible\",children:c});0===(b.mode&1)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(d=b.deletions,null===d?(b.deletions=[a],b.flags|=16):d.push(a));return b.child=c}\nfunction Aj(a,b,c,d,e){var f=b.mode;a=a.child;var g=a.sibling,h={mode:\"hidden\",children:c};0===(f&1)&&b.child!==a?(c=b.child,c.childLanes=0,c.pendingProps=h,b.deletions=null):(c=th(a,h),c.subtreeFlags=a.subtreeFlags&14680064);null!==g?d=th(g,d):(d=xh(d,f,e,null),d.flags|=2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function yj(a,b,c,d){null!==d&&oh(d);yh(b,a.child,null,c);a=xj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction Cj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);rg(a.return,b,c)}function Dj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction Ej(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;ej(a,b,d.children,c);d=K.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&Cj(a,c,b);else if(19===a.tag)Cj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(K,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Jh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);Dj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Jh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}Dj(b,!0,c,null,f);break;case \"together\":Dj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction gj(a,b,c){null!==a&&(b.dependencies=a.dependencies);Fg|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=th(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=th(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction Fj(a,b,c){switch(b.tag){case 3:qj(b);nh();break;case 5:Hh(b);break;case 1:Yf(b.type)&&bg(b);break;case 4:Fh(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(lg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(K,K.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return vj(a,b,c);G(K,K.current&1);a=gj(a,b,c);return null!==a?a.sibling:null}G(K,K.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return Ej(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(K,K.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,lj(a,b,c)}return gj(a,b,c)}\nfunction Gj(a,b){ch(b);switch(b.tag){case 1:return Yf(b.type)&&Zf(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Gh(),E(Vf),E(H),Lh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Ih(b),null;case 13:E(K);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));nh()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(K),null;case 4:return Gh(),null;case 10:return qg(b.type._context),null;case 22:case 23:return bj(),\nnull;case 24:return null;default:return null}}var Hj=!1,S=!1,Ij=\"function\"===typeof WeakSet?WeakSet:Set,T=null;function Jj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){U(a,b,d)}else c.current=null}function Kj(a,b,c){try{c()}catch(d){U(a,b,d)}}var Lj=!1;\nfunction Mj(a,b){Bf=cd;a=Le();if(Me(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(Z){c=null;break a}var g=0,h=-1,k=-1,l=0,n=0,u=a,q=null;b:for(;;){for(var y;;){u!==c||0!==e&&3!==u.nodeType||(h=g+e);u!==f||0!==d&&3!==u.nodeType||(k=g+d);3===u.nodeType&&(g+=\nu.nodeValue.length);if(null===(y=u.firstChild))break;q=u;u=y}for(;;){if(u===a)break b;q===c&&++l===e&&(h=g);q===f&&++n===d&&(k=g);if(null!==(y=u.nextSibling))break;u=q;q=u.parentNode}u=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Cf={focusedElem:a,selectionRange:c};cd=!1;for(T=b;null!==T;)if(b=T,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,T=a;else for(;null!==T;){b=T;try{var m=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==m){var w=m.memoizedProps,J=m.memoizedState,v=b.stateNode,x=v.getSnapshotBeforeUpdate(b.elementType===b.type?w:kg(b.type,w),J);v.__reactInternalSnapshotBeforeUpdate=x}break;case 3:var r=b.stateNode.containerInfo;if(1===r.nodeType)r.textContent=\"\";else if(9===r.nodeType){var F=r.body;null!=F&&(F.textContent=\"\")}break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(Z){U(b,b.return,Z)}a=b.sibling;if(null!==a){a.return=b.return;T=a;break}T=b.return}m=Lj;Lj=!1;return m}\nfunction Nj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Kj(b,c,f)}e=e.next}while(e!==d)}}function Oj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Pj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Qj(a){var b=a.alternate;null!==b&&(a.alternate=null,Qj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Nf],delete b[Of],delete b[nf],delete b[Pf],delete b[Qf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Rj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Sj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Rj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Tj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Af));else if(4!==d&&(a=a.child,null!==a))for(Tj(a,b,c),a=a.sibling;null!==a;)Tj(a,b,c),a=a.sibling}\nfunction Uj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Uj(a,b,c),a=a.sibling;null!==a;)Uj(a,b,c),a=a.sibling}var V=null,Vj=!1;function Wj(a,b,c){for(c=c.child;null!==c;)Xj(a,b,c),c=c.sibling}\nfunction Xj(a,b,c){if(kc&&\"function\"===typeof kc.onCommitFiberUnmount)try{kc.onCommitFiberUnmount(jc,c)}catch(h){}switch(c.tag){case 5:S||Jj(c,b);case 6:var d=V,e=Vj;V=null;Wj(a,b,c);V=d;Vj=e;null!==V&&(Vj?(a=V,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):V.removeChild(c.stateNode));break;case 18:null!==V&&(Vj?(a=V,c=c.stateNode,8===a.nodeType?Jf(a.parentNode,c):1===a.nodeType&&Jf(a,c),ad(a)):Jf(V,c.stateNode));break;case 4:d=V;e=Vj;V=c.stateNode.containerInfo;Vj=!0;\nWj(a,b,c);V=d;Vj=e;break;case 0:case 11:case 14:case 15:if(!S&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Kj(c,b,g):0!==(f&4)&&Kj(c,b,g));e=e.next}while(e!==d)}Wj(a,b,c);break;case 1:if(!S&&(Jj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){U(c,b,h)}Wj(a,b,c);break;case 21:Wj(a,b,c);break;case 22:c.mode&1?(S=(d=S)||null!==\nc.memoizedState,Wj(a,b,c),S=d):Wj(a,b,c);break;default:Wj(a,b,c)}}function Yj(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Ij);b.forEach(function(b){var d=Zj.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ak(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*jk(d/1960))-d;if(10a?16:a;if(null===uk)var d=!1;else{a=uk;uk=null;vk=0;if(0!==(W&6))throw Error(p(331));var e=W;W|=4;for(T=a.current;null!==T;){var f=T,g=f.child;if(0!==(T.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-dk?Jk(a,0):pk|=c);Ck(a,b)}function Xk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=rc,rc<<=1,0===(rc&130023424)&&(rc=4194304)));var c=Jg();a=Ak(a,b);null!==a&&(zc(a,b,c),Ck(a,c))}function zj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Xk(a,c)}\nfunction Zj(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Xk(a,c)}var Uk;\nUk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Vf.current)tg=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return tg=!1,Fj(a,b,c);tg=0!==(a.flags&131072)?!0:!1}else tg=!1,I&&0!==(b.flags&1048576)&&ah(b,Ug,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;var e=Xf(b,H.current);sg(b,c);e=Uh(null,b,d,a,e,c);var f=Zh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?\n(b.tag=1,b.memoizedState=null,b.updateQueue=null,Yf(d)?(f=!0,bg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,xg(b),e.updater=Mg,b.stateNode=e,e._reactInternals=b,Qg(b,d,a,c),b=pj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&bh(b),ej(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Yk(d);a=kg(d,a);switch(e){case 0:b=kj(null,b,d,a,c);break a;case 1:b=oj(null,b,\nd,a,c);break a;case 11:b=fj(null,b,d,a,c);break a;case 14:b=hj(null,b,d,kg(d.type,a),c);break a}throw Error(p(306,d,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:kg(d,e),kj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:kg(d,e),oj(a,b,d,e,c);case 3:a:{qj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;yg(a,b);Eg(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,\ncache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=f,b.memoizedState=f,b.flags&256){e=Error(p(423));b=rj(a,b,d,c,e);break a}else if(d!==e){e=Error(p(424));b=rj(a,b,d,c,e);break a}else for(eh=Kf(b.stateNode.containerInfo.firstChild),dh=b,I=!0,fh=null,c=zh(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{nh();if(d===e){b=gj(a,b,c);break a}ej(a,b,d,c)}b=b.child}return b;case 5:return Hh(b),null===a&&kh(b),d=b.type,e=\nb.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Df(d,e)?g=null:null!==f&&Df(d,f)&&(b.flags|=32),nj(a,b),ej(a,b,g,c),b.child;case 6:return null===a&&kh(b),null;case 13:return vj(a,b,c);case 4:return Fh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=yh(b,null,d,c):ej(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:kg(d,e),fj(a,b,d,e,c);case 7:return ej(a,b,b.pendingProps,c),b.child;case 8:return ej(a,b,b.pendingProps.children,c),b.child;case 12:return ej(a,\nb,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;g=e.value;G(lg,d._currentValue);d._currentValue=g;if(null!==f)if(Ge(f.value,g)){if(f.children===e.children&&!Vf.current){b=gj(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=zg(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var n=l.pending;null===n?k.next=\nk:(k.next=n.next,n.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);rg(f.return,c,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);rg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}ej(a,b,e.children,c);b=b.child}return b;\ncase 9:return e=b.type,d=b.pendingProps.children,sg(b,c),e=ug(e),d=d(e),b.flags|=1,ej(a,b,d,c),b.child;case 14:return d=b.type,e=kg(d,b.pendingProps),e=kg(d.type,e),hj(a,b,d,e,c);case 15:return jj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:kg(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),b.tag=1,Yf(d)?(a=!0,bg(b)):a=!1,sg(b,c),Og(b,d,e),Qg(b,d,e,c),pj(null,b,d,!0,a,c);case 19:return Ej(a,b,c);case 22:return lj(a,b,c)}throw Error(p(156,\nb.tag));};function Ek(a,b){return $b(a,b)}function Zk(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function hh(a,b,c,d){return new Zk(a,b,c,d)}\nfunction ij(a){a=a.prototype;return!(!a||!a.isReactComponent)}function Yk(a){if(\"function\"===typeof a)return ij(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Ca)return 11;if(a===Fa)return 14}return 2}\nfunction th(a,b){var c=a.alternate;null===c?(c=hh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction vh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)ij(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case wa:return xh(c.children,e,f,b);case xa:g=8;e|=8;break;case za:return a=hh(12,c,b,e|2),a.elementType=za,a.lanes=f,a;case Da:return a=hh(13,c,b,e),a.elementType=Da,a.lanes=f,a;case Ea:return a=hh(19,c,b,e),a.elementType=Ea,a.lanes=f,a;case Ha:return wj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Aa:g=10;break a;case Ba:g=9;break a;case Ca:g=11;\nbreak a;case Fa:g=14;break a;case Ga:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=hh(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function xh(a,b,c,d){a=hh(7,a,d,b);a.lanes=c;return a}function wj(a,b,c,d){a=hh(22,a,d,b);a.elementType=Ha;a.lanes=c;a.stateNode={};return a}function uh(a,b,c){a=hh(6,a,null,b);a.lanes=c;return a}\nfunction wh(a,b,c){b=hh(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction $k(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=yc(0);this.expirationTimes=yc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=yc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function al(a,b,c,d,e,f,g,h,k){a=new $k(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=hh(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};xg(f);return a}function bl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(\"react-list\", [\"prop-types\", \"react\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(require(\"prop-types\"), require(\"react\"));\n } else {\n var mod = {\n exports: {}\n };\n factory(global.PropTypes, global.React);\n global.ReactList = mod.exports;\n }\n})(typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : this, function (_propTypes, _react) {\n \"use strict\";\n\n _propTypes = _interopRequireDefault(_propTypes);\n _react = _interopRequireWildcard(_react);\n\n var _class, _temp;\n\n function _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\n function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\n function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n 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); } }\n\n function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n function _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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\n function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n function _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); }; }\n\n function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\n function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\n function _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\n function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n function _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; }\n\n var CLIENT_SIZE_KEYS = {\n x: 'clientWidth',\n y: 'clientHeight'\n };\n var CLIENT_START_KEYS = {\n x: 'clientTop',\n y: 'clientLeft'\n };\n var INNER_SIZE_KEYS = {\n x: 'innerWidth',\n y: 'innerHeight'\n };\n var OFFSET_SIZE_KEYS = {\n x: 'offsetWidth',\n y: 'offsetHeight'\n };\n var OFFSET_START_KEYS = {\n x: 'offsetLeft',\n y: 'offsetTop'\n };\n var OVERFLOW_KEYS = {\n x: 'overflowX',\n y: 'overflowY'\n };\n var SCROLL_SIZE_KEYS = {\n x: 'scrollWidth',\n y: 'scrollHeight'\n };\n var SCROLL_START_KEYS = {\n x: 'scrollLeft',\n y: 'scrollTop'\n };\n var SIZE_KEYS = {\n x: 'width',\n y: 'height'\n };\n\n var NOOP = function NOOP() {}; // If a browser doesn't support the `options` argument to\n // add/removeEventListener, we need to check, otherwise we will\n // accidentally set `capture` with a truthy value.\n\n\n var PASSIVE = function () {\n if (typeof window === 'undefined') return false;\n var hasSupport = false;\n\n try {\n document.createElement('div').addEventListener('test', NOOP, {\n get passive() {\n hasSupport = true;\n return false;\n }\n\n });\n } catch (e) {// noop\n }\n\n return hasSupport;\n }() ? {\n passive: true\n } : false;\n var UNSTABLE_MESSAGE = 'ReactList failed to reach a stable state.';\n var MAX_SYNC_UPDATES = 40;\n\n var isEqualSubset = function isEqualSubset(a, b) {\n for (var key in b) {\n if (a[key] !== b[key]) return false;\n }\n\n return true;\n };\n\n var defaultScrollParentGetter = function defaultScrollParentGetter(component) {\n var axis = component.props.axis;\n var el = component.getEl();\n var overflowKey = OVERFLOW_KEYS[axis];\n\n while (el = el.parentElement) {\n switch (window.getComputedStyle(el)[overflowKey]) {\n case 'auto':\n case 'scroll':\n case 'overlay':\n return el;\n }\n }\n\n return window;\n };\n\n var defaultScrollParentViewportSizeGetter = function defaultScrollParentViewportSizeGetter(component) {\n var axis = component.props.axis;\n var scrollParent = component.scrollParent;\n return scrollParent === window ? window[INNER_SIZE_KEYS[axis]] : scrollParent[CLIENT_SIZE_KEYS[axis]];\n };\n\n var constrain = function constrain(props, state) {\n var length = props.length,\n minSize = props.minSize,\n type = props.type;\n var from = state.from,\n size = state.size,\n itemsPerRow = state.itemsPerRow;\n size = Math.max(size, minSize);\n var mod = size % itemsPerRow;\n if (mod) size += itemsPerRow - mod;\n if (size > length) size = length;\n from = type === 'simple' || !from ? 0 : Math.max(Math.min(from, length - size), 0);\n\n if (mod = from % itemsPerRow) {\n from -= mod;\n size += mod;\n }\n\n if (from === state.from && size == state.size) return state;\n return _objectSpread(_objectSpread({}, state), {}, {\n from: from,\n size: size\n });\n };\n\n module.exports = (_temp = _class = /*#__PURE__*/function (_Component) {\n _inherits(ReactList, _Component);\n\n var _super = _createSuper(ReactList);\n\n _createClass(ReactList, null, [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n var newState = constrain(props, state);\n return newState === state ? null : newState;\n }\n }]);\n\n function ReactList(props) {\n var _this;\n\n _classCallCheck(this, ReactList);\n\n _this = _super.call(this, props);\n _this.state = constrain(props, {\n itemsPerRow: 1,\n from: props.initialIndex,\n size: 0\n });\n _this.cache = {};\n _this.cachedScrollPosition = null;\n _this.prevPrevState = {};\n _this.unstable = false;\n _this.updateCounter = 0;\n return _this;\n }\n\n _createClass(ReactList, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.updateFrameAndClearCache = this.updateFrameAndClearCache.bind(this);\n window.addEventListener('resize', this.updateFrameAndClearCache);\n this.updateFrame(this.scrollTo.bind(this, this.props.initialIndex));\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this2 = this;\n\n // Viewport scroll is no longer useful if axis changes\n if (this.props.axis !== prevProps.axis) this.clearSizeCache(); // If the list has reached an unstable state, prevent an infinite loop.\n\n if (this.unstable) return;\n\n if (++this.updateCounter > MAX_SYNC_UPDATES) {\n this.unstable = true;\n return console.error(UNSTABLE_MESSAGE);\n }\n\n if (!this.updateCounterTimeoutId) {\n this.updateCounterTimeoutId = setTimeout(function () {\n _this2.updateCounter = 0;\n delete _this2.updateCounterTimeoutId;\n }, 0);\n }\n\n this.updateFrame();\n }\n }, {\n key: \"maybeSetState\",\n value: function maybeSetState(b, cb) {\n if (isEqualSubset(this.state, b)) return cb();\n this.setState(b, cb);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n window.removeEventListener('resize', this.updateFrameAndClearCache);\n this.scrollParent.removeEventListener('scroll', this.updateFrameAndClearCache, PASSIVE);\n this.scrollParent.removeEventListener('mousewheel', NOOP, PASSIVE);\n }\n }, {\n key: \"getOffset\",\n value: function getOffset(el) {\n var axis = this.props.axis;\n var offset = el[CLIENT_START_KEYS[axis]] || 0;\n var offsetKey = OFFSET_START_KEYS[axis];\n\n do {\n offset += el[offsetKey] || 0;\n } while (el = el.offsetParent);\n\n return offset;\n }\n }, {\n key: \"getEl\",\n value: function getEl() {\n return this.el || this.items;\n }\n }, {\n key: \"getScrollPosition\",\n value: function getScrollPosition() {\n // Cache scroll position as this causes a forced synchronous layout.\n if (typeof this.cachedScrollPosition === 'number') {\n return this.cachedScrollPosition;\n }\n\n var scrollParent = this.scrollParent;\n var axis = this.props.axis;\n var scrollKey = SCROLL_START_KEYS[axis];\n var actual = scrollParent === window ? // Firefox always returns document.body[scrollKey] as 0 and Chrome/Safari\n // always return document.documentElement[scrollKey] as 0, so take\n // whichever has a value.\n document.body[scrollKey] || document.documentElement[scrollKey] : scrollParent[scrollKey];\n var max = this.getScrollSize() - this.props.scrollParentViewportSizeGetter(this);\n var scroll = Math.max(0, Math.min(actual, max));\n var el = this.getEl();\n this.cachedScrollPosition = this.getOffset(scrollParent) + scroll - this.getOffset(el);\n return this.cachedScrollPosition;\n }\n }, {\n key: \"setScroll\",\n value: function setScroll(offset) {\n var scrollParent = this.scrollParent;\n var axis = this.props.axis;\n offset += this.getOffset(this.getEl());\n if (scrollParent === window) return window.scrollTo(0, offset);\n offset -= this.getOffset(this.scrollParent);\n scrollParent[SCROLL_START_KEYS[axis]] = offset;\n }\n }, {\n key: \"getScrollSize\",\n value: function getScrollSize() {\n var scrollParent = this.scrollParent;\n var _document = document,\n body = _document.body,\n documentElement = _document.documentElement;\n var key = SCROLL_SIZE_KEYS[this.props.axis];\n return scrollParent === window ? Math.max(body[key], documentElement[key]) : scrollParent[key];\n }\n }, {\n key: \"hasDeterminateSize\",\n value: function hasDeterminateSize() {\n var _this$props = this.props,\n itemSizeGetter = _this$props.itemSizeGetter,\n type = _this$props.type;\n return type === 'uniform' || itemSizeGetter;\n }\n }, {\n key: \"getStartAndEnd\",\n value: function getStartAndEnd() {\n var threshold = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props.threshold;\n var scroll = this.getScrollPosition();\n var start = Math.max(0, scroll - threshold);\n var end = scroll + this.props.scrollParentViewportSizeGetter(this) + threshold;\n\n if (this.hasDeterminateSize()) {\n end = Math.min(end, this.getSpaceBefore(this.props.length));\n }\n\n return {\n start: start,\n end: end\n };\n }\n }, {\n key: \"getItemSizeAndItemsPerRow\",\n value: function getItemSizeAndItemsPerRow() {\n var _this$props2 = this.props,\n axis = _this$props2.axis,\n useStaticSize = _this$props2.useStaticSize;\n var _this$state = this.state,\n itemSize = _this$state.itemSize,\n itemsPerRow = _this$state.itemsPerRow;\n\n if (useStaticSize && itemSize && itemsPerRow) {\n return {\n itemSize: itemSize,\n itemsPerRow: itemsPerRow\n };\n }\n\n var itemEls = this.items.children;\n if (!itemEls.length) return {};\n var firstEl = itemEls[0]; // Firefox has a problem where it will return a *slightly* (less than\n // thousandths of a pixel) different size for the same element between\n // renders. This can cause an infinite render loop, so only change the\n // itemSize when it is significantly different.\n\n var firstElSize = firstEl[OFFSET_SIZE_KEYS[axis]];\n var delta = Math.abs(firstElSize - itemSize);\n if (isNaN(delta) || delta >= 1) itemSize = firstElSize;\n if (!itemSize) return {};\n var startKey = OFFSET_START_KEYS[axis];\n var firstStart = firstEl[startKey];\n itemsPerRow = 1;\n\n for (var item = itemEls[itemsPerRow]; item && item[startKey] === firstStart; item = itemEls[itemsPerRow]) {\n ++itemsPerRow;\n }\n\n return {\n itemSize: itemSize,\n itemsPerRow: itemsPerRow\n };\n }\n }, {\n key: \"clearSizeCache\",\n value: function clearSizeCache() {\n this.cachedScrollPosition = null;\n } // Called by 'scroll' and 'resize' events, clears scroll position cache.\n\n }, {\n key: \"updateFrameAndClearCache\",\n value: function updateFrameAndClearCache(cb) {\n this.clearSizeCache();\n return this.updateFrame(cb);\n }\n }, {\n key: \"updateFrame\",\n value: function updateFrame(cb) {\n this.updateScrollParent();\n if (typeof cb != 'function') cb = NOOP;\n\n switch (this.props.type) {\n case 'simple':\n return this.updateSimpleFrame(cb);\n\n case 'variable':\n return this.updateVariableFrame(cb);\n\n case 'uniform':\n return this.updateUniformFrame(cb);\n }\n }\n }, {\n key: \"updateScrollParent\",\n value: function updateScrollParent() {\n var prev = this.scrollParent;\n this.scrollParent = this.props.scrollParentGetter(this);\n if (prev === this.scrollParent) return;\n\n if (prev) {\n prev.removeEventListener('scroll', this.updateFrameAndClearCache);\n prev.removeEventListener('mousewheel', NOOP);\n } // If we have a new parent, cached parent dimensions are no longer useful.\n\n\n this.clearSizeCache();\n this.scrollParent.addEventListener('scroll', this.updateFrameAndClearCache, PASSIVE); // You have to attach mousewheel listener to the scrollable element.\n // Just an empty listener. After that onscroll events will be fired synchronously.\n\n this.scrollParent.addEventListener('mousewheel', NOOP, PASSIVE);\n }\n }, {\n key: \"updateSimpleFrame\",\n value: function updateSimpleFrame(cb) {\n var _this$getStartAndEnd = this.getStartAndEnd(),\n end = _this$getStartAndEnd.end;\n\n var itemEls = this.items.children;\n var elEnd = 0;\n\n if (itemEls.length) {\n var axis = this.props.axis;\n var firstItemEl = itemEls[0];\n var lastItemEl = itemEls[itemEls.length - 1];\n elEnd = this.getOffset(lastItemEl) + lastItemEl[OFFSET_SIZE_KEYS[axis]] - this.getOffset(firstItemEl);\n }\n\n if (elEnd > end) return cb();\n var _this$props3 = this.props,\n pageSize = _this$props3.pageSize,\n length = _this$props3.length;\n var size = Math.min(this.state.size + pageSize, length);\n this.maybeSetState({\n size: size\n }, cb);\n }\n }, {\n key: \"updateVariableFrame\",\n value: function updateVariableFrame(cb) {\n if (!this.props.itemSizeGetter) this.cacheSizes();\n\n var _this$getStartAndEnd2 = this.getStartAndEnd(),\n start = _this$getStartAndEnd2.start,\n end = _this$getStartAndEnd2.end;\n\n var _this$props4 = this.props,\n length = _this$props4.length,\n pageSize = _this$props4.pageSize;\n var space = 0;\n var from = 0;\n var size = 0;\n var maxFrom = length - 1;\n\n while (from < maxFrom) {\n var itemSize = this.getSizeOfItem(from);\n if (itemSize == null || space + itemSize > start) break;\n space += itemSize;\n ++from;\n }\n\n var maxSize = length - from;\n\n while (size < maxSize && space < end) {\n var _itemSize = this.getSizeOfItem(from + size);\n\n if (_itemSize == null) {\n size = Math.min(size + pageSize, maxSize);\n break;\n }\n\n space += _itemSize;\n ++size;\n }\n\n this.maybeSetState(constrain(this.props, {\n from: from,\n itemsPerRow: 1,\n size: size\n }), cb);\n }\n }, {\n key: \"updateUniformFrame\",\n value: function updateUniformFrame(cb) {\n var _this$getItemSizeAndI = this.getItemSizeAndItemsPerRow(),\n itemSize = _this$getItemSizeAndI.itemSize,\n itemsPerRow = _this$getItemSizeAndI.itemsPerRow;\n\n if (!itemSize || !itemsPerRow) return cb();\n\n var _this$getStartAndEnd3 = this.getStartAndEnd(),\n start = _this$getStartAndEnd3.start,\n end = _this$getStartAndEnd3.end;\n\n var _constrain = constrain(this.props, {\n from: Math.floor(start / itemSize) * itemsPerRow,\n size: (Math.ceil((end - start) / itemSize) + 1) * itemsPerRow,\n itemsPerRow: itemsPerRow\n }),\n from = _constrain.from,\n size = _constrain.size;\n\n return this.maybeSetState({\n itemsPerRow: itemsPerRow,\n from: from,\n itemSize: itemSize,\n size: size\n }, cb);\n }\n }, {\n key: \"getSpaceBefore\",\n value: function getSpaceBefore(index) {\n var cache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (cache[index] != null) return cache[index]; // Try the static itemSize.\n\n var _this$state2 = this.state,\n itemSize = _this$state2.itemSize,\n itemsPerRow = _this$state2.itemsPerRow;\n\n if (itemSize) {\n return cache[index] = Math.floor(index / itemsPerRow) * itemSize;\n } // Find the closest space to index there is a cached value for.\n\n\n var from = index;\n\n while (from > 0 && cache[--from] == null) {\n ;\n } // Finally, accumulate sizes of items from - index.\n\n\n var space = cache[from] || 0;\n\n for (var i = from; i < index; ++i) {\n cache[i] = space;\n\n var _itemSize2 = this.getSizeOfItem(i);\n\n if (_itemSize2 == null) break;\n space += _itemSize2;\n }\n\n return cache[index] = space;\n }\n }, {\n key: \"cacheSizes\",\n value: function cacheSizes() {\n var cache = this.cache;\n var from = this.state.from;\n var itemEls = this.items.children;\n var sizeKey = OFFSET_SIZE_KEYS[this.props.axis];\n\n for (var i = 0, l = itemEls.length; i < l; ++i) {\n cache[from + i] = itemEls[i][sizeKey];\n }\n }\n }, {\n key: \"getSizeOfItem\",\n value: function getSizeOfItem(index) {\n var cache = this.cache,\n items = this.items;\n var _this$props5 = this.props,\n axis = _this$props5.axis,\n itemSizeGetter = _this$props5.itemSizeGetter,\n itemSizeEstimator = _this$props5.itemSizeEstimator,\n type = _this$props5.type;\n var _this$state3 = this.state,\n from = _this$state3.from,\n itemSize = _this$state3.itemSize,\n size = _this$state3.size; // Try the static itemSize.\n\n if (itemSize) return itemSize; // Try the itemSizeGetter.\n\n if (itemSizeGetter) return itemSizeGetter(index); // Try the cache.\n\n if (index in cache) return cache[index]; // Try the DOM.\n\n if (type === 'simple' && index >= from && index < from + size && items) {\n var itemEl = items.children[index - from];\n if (itemEl) return itemEl[OFFSET_SIZE_KEYS[axis]];\n } // Try the itemSizeEstimator.\n\n\n if (itemSizeEstimator) return itemSizeEstimator(index, cache);\n }\n }, {\n key: \"scrollTo\",\n value: function scrollTo(index) {\n if (index != null) this.setScroll(this.getSpaceBefore(index));\n }\n }, {\n key: \"scrollAround\",\n value: function scrollAround(index) {\n var current = this.getScrollPosition();\n var bottom = this.getSpaceBefore(index);\n var top = bottom - this.props.scrollParentViewportSizeGetter(this) + this.getSizeOfItem(index);\n var min = Math.min(top, bottom);\n var max = Math.max(top, bottom);\n if (current <= min) return this.setScroll(min);\n if (current > max) return this.setScroll(max);\n }\n }, {\n key: \"getVisibleRange\",\n value: function getVisibleRange() {\n var _this$state4 = this.state,\n from = _this$state4.from,\n size = _this$state4.size;\n\n var _this$getStartAndEnd4 = this.getStartAndEnd(0),\n start = _this$getStartAndEnd4.start,\n end = _this$getStartAndEnd4.end;\n\n var cache = {};\n var first, last;\n\n for (var i = from; i < from + size; ++i) {\n var itemStart = this.getSpaceBefore(i, cache);\n var itemEnd = itemStart + this.getSizeOfItem(i);\n if (first == null && itemEnd > start) first = i;\n if (first != null && itemStart < end) last = i;\n }\n\n return [first, last];\n }\n }, {\n key: \"renderItems\",\n value: function renderItems() {\n var _this3 = this;\n\n var _this$props6 = this.props,\n itemRenderer = _this$props6.itemRenderer,\n itemsRenderer = _this$props6.itemsRenderer;\n var _this$state5 = this.state,\n from = _this$state5.from,\n size = _this$state5.size;\n var items = [];\n\n for (var i = 0; i < size; ++i) {\n items.push(itemRenderer(from + i, i));\n }\n\n return itemsRenderer(items, function (c) {\n return _this3.items = c;\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this4 = this;\n\n var _this$props7 = this.props,\n axis = _this$props7.axis,\n length = _this$props7.length,\n type = _this$props7.type,\n useTranslate3d = _this$props7.useTranslate3d;\n var _this$state6 = this.state,\n from = _this$state6.from,\n itemsPerRow = _this$state6.itemsPerRow;\n var items = this.renderItems();\n if (type === 'simple') return items;\n var style = {\n position: 'relative'\n };\n var cache = {};\n var bottom = Math.ceil(length / itemsPerRow) * itemsPerRow;\n var size = this.getSpaceBefore(bottom, cache);\n\n if (size) {\n style[SIZE_KEYS[axis]] = size;\n if (axis === 'x') style.overflowX = 'hidden';\n }\n\n var offset = this.getSpaceBefore(from, cache);\n var x = axis === 'x' ? offset : 0;\n var y = axis === 'y' ? offset : 0;\n var transform = useTranslate3d ? \"translate3d(\".concat(x, \"px, \").concat(y, \"px, 0)\") : \"translate(\".concat(x, \"px, \").concat(y, \"px)\");\n var listStyle = {\n msTransform: transform,\n WebkitTransform: transform,\n transform: transform\n };\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n style: style,\n ref: function ref(c) {\n return _this4.el = c;\n }\n }, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n style: listStyle\n }, items));\n }\n }]);\n\n return ReactList;\n }(_react.Component), _defineProperty(_class, \"displayName\", 'ReactList'), _defineProperty(_class, \"propTypes\", {\n axis: _propTypes[\"default\"].oneOf(['x', 'y']),\n initialIndex: _propTypes[\"default\"].number,\n itemRenderer: _propTypes[\"default\"].func,\n itemSizeEstimator: _propTypes[\"default\"].func,\n itemSizeGetter: _propTypes[\"default\"].func,\n itemsRenderer: _propTypes[\"default\"].func,\n length: _propTypes[\"default\"].number,\n minSize: _propTypes[\"default\"].number,\n pageSize: _propTypes[\"default\"].number,\n scrollParentGetter: _propTypes[\"default\"].func,\n scrollParentViewportSizeGetter: _propTypes[\"default\"].func,\n threshold: _propTypes[\"default\"].number,\n type: _propTypes[\"default\"].oneOf(['simple', 'variable', 'uniform']),\n useStaticSize: _propTypes[\"default\"].bool,\n useTranslate3d: _propTypes[\"default\"].bool\n }), _defineProperty(_class, \"defaultProps\", {\n axis: 'y',\n itemRenderer: function itemRenderer(index, key) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n key: key\n }, index);\n },\n itemsRenderer: function itemsRenderer(items, ref) {\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n ref: ref\n }, items);\n },\n length: 0,\n minSize: 1,\n pageSize: 10,\n scrollParentGetter: defaultScrollParentGetter,\n scrollParentViewportSizeGetter: defaultScrollParentViewportSizeGetter,\n threshold: 100,\n type: 'simple',\n useStaticSize: false,\n useTranslate3d: false\n }), _temp);\n});\n","/**\n * @license React\n * react-is.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 b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\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","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1 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\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","// Cache implementation based on Erik Rasmussen's `lru-memoize`:\n// https://github.com/erikras/lru-memoize\nvar NOT_FOUND = 'NOT_FOUND';\n\nfunction createSingletonCache(equals) {\n var entry;\n return {\n get: function get(key) {\n if (entry && equals(entry.key, key)) {\n return entry.value;\n }\n\n return NOT_FOUND;\n },\n put: function put(key, value) {\n entry = {\n key: key,\n value: value\n };\n },\n getEntries: function getEntries() {\n return entry ? [entry] : [];\n },\n clear: function clear() {\n entry = undefined;\n }\n };\n}\n\nfunction createLruCache(maxSize, equals) {\n var entries = [];\n\n function get(key) {\n var cacheIndex = entries.findIndex(function (entry) {\n return equals(key, entry.key);\n }); // We found a cached entry\n\n if (cacheIndex > -1) {\n var entry = entries[cacheIndex]; // Cached entry not at top of cache, move it to the top\n\n if (cacheIndex > 0) {\n entries.splice(cacheIndex, 1);\n entries.unshift(entry);\n }\n\n return entry.value;\n } // No entry found in cache, return sentinel\n\n\n return NOT_FOUND;\n }\n\n function put(key, value) {\n if (get(key) === NOT_FOUND) {\n // TODO Is unshift slow?\n entries.unshift({\n key: key,\n value: value\n });\n\n if (entries.length > maxSize) {\n entries.pop();\n }\n }\n }\n\n function getEntries() {\n return entries;\n }\n\n function clear() {\n entries = [];\n }\n\n return {\n get: get,\n put: put,\n getEntries: getEntries,\n clear: clear\n };\n}\n\nexport var defaultEqualityCheck = function defaultEqualityCheck(a, b) {\n return a === b;\n};\nexport function createCacheKeyComparator(equalityCheck) {\n return function areArgumentsShallowlyEqual(prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n } // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n\n\n var length = prev.length;\n\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n };\n}\n// defaultMemoize now supports a configurable cache size with LRU behavior,\n// and optional comparison of the result value with existing values\nexport function defaultMemoize(func, equalityCheckOrOptions) {\n var providedOptions = typeof equalityCheckOrOptions === 'object' ? equalityCheckOrOptions : {\n equalityCheck: equalityCheckOrOptions\n };\n var _providedOptions$equa = providedOptions.equalityCheck,\n equalityCheck = _providedOptions$equa === void 0 ? defaultEqualityCheck : _providedOptions$equa,\n _providedOptions$maxS = providedOptions.maxSize,\n maxSize = _providedOptions$maxS === void 0 ? 1 : _providedOptions$maxS,\n resultEqualityCheck = providedOptions.resultEqualityCheck;\n var comparator = createCacheKeyComparator(equalityCheck);\n var cache = maxSize === 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator); // we reference arguments instead of spreading them for performance reasons\n\n function memoized() {\n var value = cache.get(arguments);\n\n if (value === NOT_FOUND) {\n // @ts-ignore\n value = func.apply(null, arguments);\n\n if (resultEqualityCheck) {\n var entries = cache.getEntries();\n var matchingEntry = entries.find(function (entry) {\n return resultEqualityCheck(entry.value, value);\n });\n\n if (matchingEntry) {\n value = matchingEntry.value;\n }\n }\n\n cache.put(arguments, value);\n }\n\n return value;\n }\n\n memoized.clearCache = function () {\n return cache.clear();\n };\n\n return memoized;\n}","import { defaultMemoize, defaultEqualityCheck } from './defaultMemoize';\nexport { defaultMemoize, defaultEqualityCheck };\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return typeof dep === 'function' ? \"function \" + (dep.name || 'unnamed') + \"()\" : typeof dep;\n }).join(', ');\n throw new Error(\"createSelector expects all input-selectors to be functions, but received the following types: [\" + dependencyTypes + \"]\");\n }\n\n return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptionsFromArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptionsFromArgs[_key - 1] = arguments[_key];\n }\n\n var createSelector = function createSelector() {\n for (var _len2 = arguments.length, funcs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var _recomputations = 0;\n\n var _lastResult; // Due to the intricacies of rest params, we can't do an optional arg after `...funcs`.\n // So, start by declaring the default value here.\n // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\n\n\n var directlyPassedOptions = {\n memoizeOptions: undefined\n }; // Normally, the result func or \"output selector\" is the last arg\n\n var resultFunc = funcs.pop(); // If the result func is actually an _object_, assume it's our options object\n\n if (typeof resultFunc === 'object') {\n directlyPassedOptions = resultFunc; // and pop the real result func off\n\n resultFunc = funcs.pop();\n }\n\n if (typeof resultFunc !== 'function') {\n throw new Error(\"createSelector expects an output function after the inputs, but received: [\" + typeof resultFunc + \"]\");\n } // Determine which set of options we're using. Prefer options passed directly,\n // but fall back to options given to createSelectorCreator.\n\n\n var _directlyPassedOption = directlyPassedOptions,\n _directlyPassedOption2 = _directlyPassedOption.memoizeOptions,\n memoizeOptions = _directlyPassedOption2 === void 0 ? memoizeOptionsFromArgs : _directlyPassedOption2; // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\n // is an array. In most libs I've looked at, it's an equality function or options object.\n // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\n // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\n // we wrap it in an array so we can apply it.\n\n var finalMemoizeOptions = Array.isArray(memoizeOptions) ? memoizeOptions : [memoizeOptions];\n var dependencies = getDependencies(funcs);\n var memoizedResultFunc = memoize.apply(void 0, [function recomputationWrapper() {\n _recomputations++; // apply arguments instead of spreading for performance.\n\n return resultFunc.apply(null, arguments);\n }].concat(finalMemoizeOptions)); // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n\n var selector = memoize(function dependenciesChecker() {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n // @ts-ignore\n params.push(dependencies[i].apply(null, arguments));\n } // apply arguments instead of spreading for performance.\n\n\n _lastResult = memoizedResultFunc.apply(null, params);\n return _lastResult;\n });\n Object.assign(selector, {\n resultFunc: resultFunc,\n memoizedResultFunc: memoizedResultFunc,\n dependencies: dependencies,\n lastResult: function lastResult() {\n return _lastResult;\n },\n recomputations: function recomputations() {\n return _recomputations;\n },\n resetRecomputations: function resetRecomputations() {\n return _recomputations = 0;\n }\n });\n return selector;\n }; // @ts-ignore\n\n\n return createSelector;\n}\nexport var createSelector = /* #__PURE__ */createSelectorCreator(defaultMemoize);\n// Manual definition of state and output arguments\nexport var createStructuredSelector = function createStructuredSelector(selectors, selectorCreator) {\n if (selectorCreator === void 0) {\n selectorCreator = createSelector;\n }\n\n if (typeof selectors !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + (\"where each property is a selector, instead received a \" + typeof selectors));\n }\n\n var objectKeys = Object.keys(selectors);\n var resultSelector = selectorCreator( // @ts-ignore\n objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n return resultSelector;\n};","function shallowEqualObjects(objA, objB) {\n if (objA === objB) {\n return true;\n }\n\n if (!objA || !objB) {\n return false;\n }\n\n var aKeys = Object.keys(objA);\n var bKeys = Object.keys(objB);\n var len = aKeys.length;\n\n if (bKeys.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var key = aKeys[i];\n\n if (objA[key] !== objB[key] || !Object.prototype.hasOwnProperty.call(objB, key)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction shallowEqualArrays(arrA, arrB) {\n if (arrA === arrB) {\n return true;\n }\n\n if (!arrA || !arrB) {\n return false;\n }\n\n var len = arrA.length;\n\n if (arrB.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n if (arrA[i] !== arrB[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport { shallowEqualArrays, shallowEqualObjects };\n","let colors = require('./lib/public/colors')\nmodule.exports = (colors.__esModule ? colors : { default: colors }).default\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>_default\n});\nconst _default = [\n \"preflight\",\n \"container\",\n \"accessibility\",\n \"pointerEvents\",\n \"visibility\",\n \"position\",\n \"inset\",\n \"isolation\",\n \"zIndex\",\n \"order\",\n \"gridColumn\",\n \"gridColumnStart\",\n \"gridColumnEnd\",\n \"gridRow\",\n \"gridRowStart\",\n \"gridRowEnd\",\n \"float\",\n \"clear\",\n \"margin\",\n \"boxSizing\",\n \"display\",\n \"aspectRatio\",\n \"height\",\n \"maxHeight\",\n \"minHeight\",\n \"width\",\n \"minWidth\",\n \"maxWidth\",\n \"flex\",\n \"flexShrink\",\n \"flexGrow\",\n \"flexBasis\",\n \"tableLayout\",\n \"borderCollapse\",\n \"borderSpacing\",\n \"transformOrigin\",\n \"translate\",\n \"rotate\",\n \"skew\",\n \"scale\",\n \"transform\",\n \"animation\",\n \"cursor\",\n \"touchAction\",\n \"userSelect\",\n \"resize\",\n \"scrollSnapType\",\n \"scrollSnapAlign\",\n \"scrollSnapStop\",\n \"scrollMargin\",\n \"scrollPadding\",\n \"listStylePosition\",\n \"listStyleType\",\n \"appearance\",\n \"columns\",\n \"breakBefore\",\n \"breakInside\",\n \"breakAfter\",\n \"gridAutoColumns\",\n \"gridAutoFlow\",\n \"gridAutoRows\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\",\n \"flexDirection\",\n \"flexWrap\",\n \"placeContent\",\n \"placeItems\",\n \"alignContent\",\n \"alignItems\",\n \"justifyContent\",\n \"justifyItems\",\n \"gap\",\n \"space\",\n \"divideWidth\",\n \"divideStyle\",\n \"divideColor\",\n \"divideOpacity\",\n \"placeSelf\",\n \"alignSelf\",\n \"justifySelf\",\n \"overflow\",\n \"overscrollBehavior\",\n \"scrollBehavior\",\n \"textOverflow\",\n \"whitespace\",\n \"wordBreak\",\n \"borderRadius\",\n \"borderWidth\",\n \"borderStyle\",\n \"borderColor\",\n \"borderOpacity\",\n \"backgroundColor\",\n \"backgroundOpacity\",\n \"backgroundImage\",\n \"gradientColorStops\",\n \"boxDecorationBreak\",\n \"backgroundSize\",\n \"backgroundAttachment\",\n \"backgroundClip\",\n \"backgroundPosition\",\n \"backgroundRepeat\",\n \"backgroundOrigin\",\n \"fill\",\n \"stroke\",\n \"strokeWidth\",\n \"objectFit\",\n \"objectPosition\",\n \"padding\",\n \"textAlign\",\n \"textIndent\",\n \"verticalAlign\",\n \"fontFamily\",\n \"fontSize\",\n \"fontWeight\",\n \"textTransform\",\n \"fontStyle\",\n \"fontVariantNumeric\",\n \"lineHeight\",\n \"letterSpacing\",\n \"textColor\",\n \"textOpacity\",\n \"textDecoration\",\n \"textDecorationColor\",\n \"textDecorationStyle\",\n \"textDecorationThickness\",\n \"textUnderlineOffset\",\n \"fontSmoothing\",\n \"placeholderColor\",\n \"placeholderOpacity\",\n \"caretColor\",\n \"accentColor\",\n \"opacity\",\n \"backgroundBlendMode\",\n \"mixBlendMode\",\n \"boxShadow\",\n \"boxShadowColor\",\n \"outlineStyle\",\n \"outlineWidth\",\n \"outlineOffset\",\n \"outlineColor\",\n \"ringWidth\",\n \"ringColor\",\n \"ringOpacity\",\n \"ringOffsetWidth\",\n \"ringOffsetColor\",\n \"blur\",\n \"brightness\",\n \"contrast\",\n \"dropShadow\",\n \"grayscale\",\n \"hueRotate\",\n \"invert\",\n \"saturate\",\n \"sepia\",\n \"filter\",\n \"backdropBlur\",\n \"backdropBrightness\",\n \"backdropContrast\",\n \"backdropGrayscale\",\n \"backdropHueRotate\",\n \"backdropInvert\",\n \"backdropOpacity\",\n \"backdropSaturate\",\n \"backdropSepia\",\n \"backdropFilter\",\n \"transitionProperty\",\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionTimingFunction\",\n \"willChange\",\n \"content\"\n];\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n flagEnabled: ()=>flagEnabled,\n issueFlagNotices: ()=>issueFlagNotices,\n default: ()=>_default\n});\nconst _picocolors = /*#__PURE__*/ _interopRequireDefault(require(\"picocolors\"));\nconst _log = /*#__PURE__*/ _interopRequireDefault(require(\"./util/log\"));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nlet defaults = {\n optimizeUniversalDefaults: false\n};\nlet featureFlags = {\n future: [\n \"hoverOnlyWhenSupported\",\n \"respectDefaultRingColorOpacity\"\n ],\n experimental: [\n \"optimizeUniversalDefaults\",\n \"matchVariant\" /* , 'variantGrouping' */ \n ]\n};\nfunction flagEnabled(config, flag) {\n if (featureFlags.future.includes(flag)) {\n var ref;\n var ref1, ref2;\n return config.future === \"all\" || ((ref2 = (ref1 = config === null || config === void 0 ? void 0 : (ref = config.future) === null || ref === void 0 ? void 0 : ref[flag]) !== null && ref1 !== void 0 ? ref1 : defaults[flag]) !== null && ref2 !== void 0 ? ref2 : false);\n }\n if (featureFlags.experimental.includes(flag)) {\n var ref3;\n var ref4, ref5;\n return config.experimental === \"all\" || ((ref5 = (ref4 = config === null || config === void 0 ? void 0 : (ref3 = config.experimental) === null || ref3 === void 0 ? void 0 : ref3[flag]) !== null && ref4 !== void 0 ? ref4 : defaults[flag]) !== null && ref5 !== void 0 ? ref5 : false);\n }\n return false;\n}\nfunction experimentalFlagsEnabled(config) {\n if (config.experimental === \"all\") {\n return featureFlags.experimental;\n }\n var ref;\n return Object.keys((ref = config === null || config === void 0 ? void 0 : config.experimental) !== null && ref !== void 0 ? ref : {}).filter((flag)=>featureFlags.experimental.includes(flag) && config.experimental[flag]);\n}\nfunction issueFlagNotices(config) {\n if (process.env.JEST_WORKER_ID !== undefined) {\n return;\n }\n if (experimentalFlagsEnabled(config).length > 0) {\n let changes = experimentalFlagsEnabled(config).map((s)=>_picocolors.default.yellow(s)).join(\", \");\n _log.default.warn(\"experimental-flags-enabled\", [\n `You have enabled experimental features: ${changes}`,\n \"Experimental features in Tailwind CSS are not covered by semver, may introduce breaking changes, and can change at any time.\", \n ]);\n }\n}\nconst _default = featureFlags;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n pattern: ()=>pattern,\n withoutCapturing: ()=>withoutCapturing,\n any: ()=>any,\n optional: ()=>optional,\n zeroOrMore: ()=>zeroOrMore,\n nestedBrackets: ()=>nestedBrackets,\n escape: ()=>escape\n});\nconst REGEX_SPECIAL = /[\\\\^$.*+?()[\\]{}|]/g;\nconst REGEX_HAS_SPECIAL = RegExp(REGEX_SPECIAL.source);\n/**\n * @param {string|RegExp|Array} source\n */ function toSource(source) {\n source = Array.isArray(source) ? source : [\n source\n ];\n source = source.map((item)=>item instanceof RegExp ? item.source : item);\n return source.join(\"\");\n}\nfunction pattern(source) {\n return new RegExp(toSource(source), \"g\");\n}\nfunction withoutCapturing(source) {\n return new RegExp(`(?:${toSource(source)})`, \"g\");\n}\nfunction any(sources) {\n return `(?:${sources.map(toSource).join(\"|\")})`;\n}\nfunction optional(source) {\n return `(?:${toSource(source)})?`;\n}\nfunction zeroOrMore(source) {\n return `(?:${toSource(source)})*`;\n}\nfunction nestedBrackets(open, close, depth = 1) {\n return withoutCapturing([\n escape(open),\n /[^\\s]*/,\n depth === 1 ? `[^${escape(open)}${escape(close)}\\s]*` : any([\n `[^${escape(open)}${escape(close)}\\s]*`,\n nestedBrackets(open, close, depth - 1)\n ]),\n /[^\\s]*/,\n escape(close), \n ]);\n}\nfunction escape(string) {\n return string && REGEX_HAS_SPECIAL.test(string) ? string.replace(REGEX_SPECIAL, \"\\\\$&\") : string || \"\";\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>_default\n});\nconst _log = /*#__PURE__*/ _interopRequireDefault(require(\"../util/log\"));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nfunction warn({ version , from , to }) {\n _log.default.warn(`${from}-color-renamed`, [\n `As of Tailwind CSS ${version}, \\`${from}\\` has been renamed to \\`${to}\\`.`,\n \"Update your configuration file to silence this warning.\", \n ]);\n}\nconst _default = {\n inherit: \"inherit\",\n current: \"currentColor\",\n transparent: \"transparent\",\n black: \"#000\",\n white: \"#fff\",\n slate: {\n 50: \"#f8fafc\",\n 100: \"#f1f5f9\",\n 200: \"#e2e8f0\",\n 300: \"#cbd5e1\",\n 400: \"#94a3b8\",\n 500: \"#64748b\",\n 600: \"#475569\",\n 700: \"#334155\",\n 800: \"#1e293b\",\n 900: \"#0f172a\"\n },\n gray: {\n 50: \"#f9fafb\",\n 100: \"#f3f4f6\",\n 200: \"#e5e7eb\",\n 300: \"#d1d5db\",\n 400: \"#9ca3af\",\n 500: \"#6b7280\",\n 600: \"#4b5563\",\n 700: \"#374151\",\n 800: \"#1f2937\",\n 900: \"#111827\"\n },\n zinc: {\n 50: \"#fafafa\",\n 100: \"#f4f4f5\",\n 200: \"#e4e4e7\",\n 300: \"#d4d4d8\",\n 400: \"#a1a1aa\",\n 500: \"#71717a\",\n 600: \"#52525b\",\n 700: \"#3f3f46\",\n 800: \"#27272a\",\n 900: \"#18181b\"\n },\n neutral: {\n 50: \"#fafafa\",\n 100: \"#f5f5f5\",\n 200: \"#e5e5e5\",\n 300: \"#d4d4d4\",\n 400: \"#a3a3a3\",\n 500: \"#737373\",\n 600: \"#525252\",\n 700: \"#404040\",\n 800: \"#262626\",\n 900: \"#171717\"\n },\n stone: {\n 50: \"#fafaf9\",\n 100: \"#f5f5f4\",\n 200: \"#e7e5e4\",\n 300: \"#d6d3d1\",\n 400: \"#a8a29e\",\n 500: \"#78716c\",\n 600: \"#57534e\",\n 700: \"#44403c\",\n 800: \"#292524\",\n 900: \"#1c1917\"\n },\n red: {\n 50: \"#fef2f2\",\n 100: \"#fee2e2\",\n 200: \"#fecaca\",\n 300: \"#fca5a5\",\n 400: \"#f87171\",\n 500: \"#ef4444\",\n 600: \"#dc2626\",\n 700: \"#b91c1c\",\n 800: \"#991b1b\",\n 900: \"#7f1d1d\"\n },\n orange: {\n 50: \"#fff7ed\",\n 100: \"#ffedd5\",\n 200: \"#fed7aa\",\n 300: \"#fdba74\",\n 400: \"#fb923c\",\n 500: \"#f97316\",\n 600: \"#ea580c\",\n 700: \"#c2410c\",\n 800: \"#9a3412\",\n 900: \"#7c2d12\"\n },\n amber: {\n 50: \"#fffbeb\",\n 100: \"#fef3c7\",\n 200: \"#fde68a\",\n 300: \"#fcd34d\",\n 400: \"#fbbf24\",\n 500: \"#f59e0b\",\n 600: \"#d97706\",\n 700: \"#b45309\",\n 800: \"#92400e\",\n 900: \"#78350f\"\n },\n yellow: {\n 50: \"#fefce8\",\n 100: \"#fef9c3\",\n 200: \"#fef08a\",\n 300: \"#fde047\",\n 400: \"#facc15\",\n 500: \"#eab308\",\n 600: \"#ca8a04\",\n 700: \"#a16207\",\n 800: \"#854d0e\",\n 900: \"#713f12\"\n },\n lime: {\n 50: \"#f7fee7\",\n 100: \"#ecfccb\",\n 200: \"#d9f99d\",\n 300: \"#bef264\",\n 400: \"#a3e635\",\n 500: \"#84cc16\",\n 600: \"#65a30d\",\n 700: \"#4d7c0f\",\n 800: \"#3f6212\",\n 900: \"#365314\"\n },\n green: {\n 50: \"#f0fdf4\",\n 100: \"#dcfce7\",\n 200: \"#bbf7d0\",\n 300: \"#86efac\",\n 400: \"#4ade80\",\n 500: \"#22c55e\",\n 600: \"#16a34a\",\n 700: \"#15803d\",\n 800: \"#166534\",\n 900: \"#14532d\"\n },\n emerald: {\n 50: \"#ecfdf5\",\n 100: \"#d1fae5\",\n 200: \"#a7f3d0\",\n 300: \"#6ee7b7\",\n 400: \"#34d399\",\n 500: \"#10b981\",\n 600: \"#059669\",\n 700: \"#047857\",\n 800: \"#065f46\",\n 900: \"#064e3b\"\n },\n teal: {\n 50: \"#f0fdfa\",\n 100: \"#ccfbf1\",\n 200: \"#99f6e4\",\n 300: \"#5eead4\",\n 400: \"#2dd4bf\",\n 500: \"#14b8a6\",\n 600: \"#0d9488\",\n 700: \"#0f766e\",\n 800: \"#115e59\",\n 900: \"#134e4a\"\n },\n cyan: {\n 50: \"#ecfeff\",\n 100: \"#cffafe\",\n 200: \"#a5f3fc\",\n 300: \"#67e8f9\",\n 400: \"#22d3ee\",\n 500: \"#06b6d4\",\n 600: \"#0891b2\",\n 700: \"#0e7490\",\n 800: \"#155e75\",\n 900: \"#164e63\"\n },\n sky: {\n 50: \"#f0f9ff\",\n 100: \"#e0f2fe\",\n 200: \"#bae6fd\",\n 300: \"#7dd3fc\",\n 400: \"#38bdf8\",\n 500: \"#0ea5e9\",\n 600: \"#0284c7\",\n 700: \"#0369a1\",\n 800: \"#075985\",\n 900: \"#0c4a6e\"\n },\n blue: {\n 50: \"#eff6ff\",\n 100: \"#dbeafe\",\n 200: \"#bfdbfe\",\n 300: \"#93c5fd\",\n 400: \"#60a5fa\",\n 500: \"#3b82f6\",\n 600: \"#2563eb\",\n 700: \"#1d4ed8\",\n 800: \"#1e40af\",\n 900: \"#1e3a8a\"\n },\n indigo: {\n 50: \"#eef2ff\",\n 100: \"#e0e7ff\",\n 200: \"#c7d2fe\",\n 300: \"#a5b4fc\",\n 400: \"#818cf8\",\n 500: \"#6366f1\",\n 600: \"#4f46e5\",\n 700: \"#4338ca\",\n 800: \"#3730a3\",\n 900: \"#312e81\"\n },\n violet: {\n 50: \"#f5f3ff\",\n 100: \"#ede9fe\",\n 200: \"#ddd6fe\",\n 300: \"#c4b5fd\",\n 400: \"#a78bfa\",\n 500: \"#8b5cf6\",\n 600: \"#7c3aed\",\n 700: \"#6d28d9\",\n 800: \"#5b21b6\",\n 900: \"#4c1d95\"\n },\n purple: {\n 50: \"#faf5ff\",\n 100: \"#f3e8ff\",\n 200: \"#e9d5ff\",\n 300: \"#d8b4fe\",\n 400: \"#c084fc\",\n 500: \"#a855f7\",\n 600: \"#9333ea\",\n 700: \"#7e22ce\",\n 800: \"#6b21a8\",\n 900: \"#581c87\"\n },\n fuchsia: {\n 50: \"#fdf4ff\",\n 100: \"#fae8ff\",\n 200: \"#f5d0fe\",\n 300: \"#f0abfc\",\n 400: \"#e879f9\",\n 500: \"#d946ef\",\n 600: \"#c026d3\",\n 700: \"#a21caf\",\n 800: \"#86198f\",\n 900: \"#701a75\"\n },\n pink: {\n 50: \"#fdf2f8\",\n 100: \"#fce7f3\",\n 200: \"#fbcfe8\",\n 300: \"#f9a8d4\",\n 400: \"#f472b6\",\n 500: \"#ec4899\",\n 600: \"#db2777\",\n 700: \"#be185d\",\n 800: \"#9d174d\",\n 900: \"#831843\"\n },\n rose: {\n 50: \"#fff1f2\",\n 100: \"#ffe4e6\",\n 200: \"#fecdd3\",\n 300: \"#fda4af\",\n 400: \"#fb7185\",\n 500: \"#f43f5e\",\n 600: \"#e11d48\",\n 700: \"#be123c\",\n 800: \"#9f1239\",\n 900: \"#881337\"\n },\n get lightBlue () {\n warn({\n version: \"v2.2\",\n from: \"lightBlue\",\n to: \"sky\"\n });\n return this.sky;\n },\n get warmGray () {\n warn({\n version: \"v3.0\",\n from: \"warmGray\",\n to: \"stone\"\n });\n return this.stone;\n },\n get trueGray () {\n warn({\n version: \"v3.0\",\n from: \"trueGray\",\n to: \"neutral\"\n });\n return this.neutral;\n },\n get coolGray () {\n warn({\n version: \"v3.0\",\n from: \"coolGray\",\n to: \"gray\"\n });\n return this.gray;\n },\n get blueGray () {\n warn({\n version: \"v3.0\",\n from: \"blueGray\",\n to: \"slate\"\n });\n return this.slate;\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>resolveConfig\n});\nconst _resolveConfig = /*#__PURE__*/ _interopRequireDefault(require(\"../util/resolveConfig\"));\nconst _getAllConfigs = /*#__PURE__*/ _interopRequireDefault(require(\"../util/getAllConfigs\"));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nfunction resolveConfig(...configs) {\n let [, ...defaultConfigs] = (0, _getAllConfigs.default)(configs[0]);\n return (0, _resolveConfig.default)([\n ...configs,\n ...defaultConfigs\n ]);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"cloneDeep\", {\n enumerable: true,\n get: ()=>cloneDeep\n});\nfunction cloneDeep(value) {\n if (Array.isArray(value)) {\n return value.map((child)=>cloneDeep(child));\n }\n if (typeof value === \"object\" && value !== null) {\n return Object.fromEntries(Object.entries(value).map(([k, v])=>[\n k,\n cloneDeep(v)\n ]));\n }\n return value;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n parseColor: ()=>parseColor,\n formatColor: ()=>formatColor\n});\nconst _colorName = /*#__PURE__*/ _interopRequireDefault(require(\"color-name\"));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nlet HEX = /^#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i;\nlet SHORT_HEX = /^#([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?$/i;\nlet VALUE = /(?:\\d+|\\d*\\.\\d+)%?/;\nlet SEP = /(?:\\s*,\\s*|\\s+)/;\nlet ALPHA_SEP = /\\s*[,/]\\s*/;\nlet CUSTOM_PROPERTY = /var\\(--(?:[^ )]*?)\\)/;\nlet RGB = new RegExp(`^(rgb)a?\\\\(\\\\s*(${VALUE.source}|${CUSTOM_PROPERTY.source})(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${ALPHA_SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?\\\\s*\\\\)$`);\nlet HSL = new RegExp(`^(hsl)a?\\\\(\\\\s*((?:${VALUE.source})(?:deg|rad|grad|turn)?|${CUSTOM_PROPERTY.source})(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${ALPHA_SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?\\\\s*\\\\)$`);\nfunction parseColor(value, { loose =false } = {}) {\n var ref, ref1;\n if (typeof value !== \"string\") {\n return null;\n }\n value = value.trim();\n if (value === \"transparent\") {\n return {\n mode: \"rgb\",\n color: [\n \"0\",\n \"0\",\n \"0\"\n ],\n alpha: \"0\"\n };\n }\n if (value in _colorName.default) {\n return {\n mode: \"rgb\",\n color: _colorName.default[value].map((v)=>v.toString())\n };\n }\n let hex = value.replace(SHORT_HEX, (_, r, g, b, a)=>[\n \"#\",\n r,\n r,\n g,\n g,\n b,\n b,\n a ? a + a : \"\"\n ].join(\"\")).match(HEX);\n if (hex !== null) {\n return {\n mode: \"rgb\",\n color: [\n parseInt(hex[1], 16),\n parseInt(hex[2], 16),\n parseInt(hex[3], 16)\n ].map((v)=>v.toString()),\n alpha: hex[4] ? (parseInt(hex[4], 16) / 255).toString() : undefined\n };\n }\n var ref2;\n let match = (ref2 = value.match(RGB)) !== null && ref2 !== void 0 ? ref2 : value.match(HSL);\n if (match === null) {\n return null;\n }\n let color = [\n match[2],\n match[3],\n match[4]\n ].filter(Boolean).map((v)=>v.toString());\n if (!loose && color.length !== 3) {\n return null;\n }\n if (color.length < 3 && !color.some((part)=>/^var\\(.*?\\)$/.test(part))) {\n return null;\n }\n return {\n mode: match[1],\n color,\n alpha: (ref = match[5]) === null || ref === void 0 ? void 0 : (ref1 = ref.toString) === null || ref1 === void 0 ? void 0 : ref1.call(ref)\n };\n}\nfunction formatColor({ mode , color , alpha }) {\n let hasAlpha = alpha !== undefined;\n return `${mode}(${color.join(\" \")}${hasAlpha ? ` / ${alpha}` : \"\"})`;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>_default\n});\nfunction _default(pluginConfig, plugins) {\n if (pluginConfig === undefined) {\n return plugins;\n }\n const pluginNames = Array.isArray(pluginConfig) ? pluginConfig : [\n ...new Set(plugins.filter((pluginName)=>{\n return pluginConfig !== false && pluginConfig[pluginName] !== false;\n }).concat(Object.keys(pluginConfig).filter((pluginName)=>{\n return pluginConfig[pluginName] !== false;\n }))), \n ];\n return pluginNames;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n normalize: ()=>normalize,\n url: ()=>url,\n number: ()=>number,\n percentage: ()=>percentage,\n length: ()=>length,\n lineWidth: ()=>lineWidth,\n shadow: ()=>shadow,\n color: ()=>color,\n image: ()=>image,\n gradient: ()=>gradient,\n position: ()=>position,\n familyName: ()=>familyName,\n genericName: ()=>genericName,\n absoluteSize: ()=>absoluteSize,\n relativeSize: ()=>relativeSize\n});\nconst _color = require(\"./color\");\nconst _parseBoxShadowValue = require(\"./parseBoxShadowValue\");\nlet cssFunctions = [\n \"min\",\n \"max\",\n \"clamp\",\n \"calc\"\n];\n// Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Types\nlet COMMA = /,(?![^(]*\\))/g // Comma separator that is not located between brackets. E.g.: `cubiz-bezier(a, b, c)` these don't count.\n;\nlet UNDERSCORE = /_(?![^(]*\\))/g // Underscore separator that is not located between brackets. E.g.: `rgba(255,_255,_255)_black` these don't count.\n;\nfunction normalize(value, isRoot = true) {\n // Keep raw strings if it starts with `url(`\n if (value.includes(\"url(\")) {\n return value.split(/(url\\(.*?\\))/g).filter(Boolean).map((part)=>{\n if (/^url\\(.*?\\)$/.test(part)) {\n return part;\n }\n return normalize(part, false);\n }).join(\"\");\n }\n // Convert `_` to ` `, except for escaped underscores `\\_`\n value = value.replace(/([^\\\\])_+/g, (fullMatch, characterBefore)=>characterBefore + \" \".repeat(fullMatch.length - 1)).replace(/^_/g, \" \").replace(/\\\\_/g, \"_\");\n // Remove leftover whitespace\n if (isRoot) {\n value = value.trim();\n }\n // Add spaces around operators inside math functions like calc() that do not follow an operator\n // or '('.\n value = value.replace(/(calc|min|max|clamp)\\(.+\\)/g, (match)=>{\n return match.replace(/(-?\\d*\\.?\\d(?!\\b-.+[,)](?![^+\\-/*])\\D)(?:%|[a-z]+)?|\\))([+\\-/*])/g, \"$1 $2 \");\n });\n return value;\n}\nfunction url(value) {\n return value.startsWith(\"url(\");\n}\nfunction number(value) {\n return !isNaN(Number(value)) || cssFunctions.some((fn)=>new RegExp(`^${fn}\\\\(.+?`).test(value));\n}\nfunction percentage(value) {\n return value.split(UNDERSCORE).every((part)=>{\n return /%$/g.test(part) || cssFunctions.some((fn)=>new RegExp(`^${fn}\\\\(.+?%`).test(part));\n });\n}\nlet lengthUnits = [\n \"cm\",\n \"mm\",\n \"Q\",\n \"in\",\n \"pc\",\n \"pt\",\n \"px\",\n \"em\",\n \"ex\",\n \"ch\",\n \"rem\",\n \"lh\",\n \"vw\",\n \"vh\",\n \"vmin\",\n \"vmax\", \n];\nlet lengthUnitsPattern = `(?:${lengthUnits.join(\"|\")})`;\nfunction length(value) {\n return value.split(UNDERSCORE).every((part)=>{\n return part === \"0\" || new RegExp(`${lengthUnitsPattern}$`).test(part) || cssFunctions.some((fn)=>new RegExp(`^${fn}\\\\(.+?${lengthUnitsPattern}`).test(part));\n });\n}\nlet lineWidths = new Set([\n \"thin\",\n \"medium\",\n \"thick\"\n]);\nfunction lineWidth(value) {\n return lineWidths.has(value);\n}\nfunction shadow(value) {\n let parsedShadows = (0, _parseBoxShadowValue.parseBoxShadowValue)(normalize(value));\n for (let parsedShadow of parsedShadows){\n if (!parsedShadow.valid) {\n return false;\n }\n }\n return true;\n}\nfunction color(value) {\n let colors = 0;\n let result = value.split(UNDERSCORE).every((part)=>{\n part = normalize(part);\n if (part.startsWith(\"var(\")) return true;\n if ((0, _color.parseColor)(part, {\n loose: true\n }) !== null) return colors++, true;\n return false;\n });\n if (!result) return false;\n return colors > 0;\n}\nfunction image(value) {\n let images = 0;\n let result = value.split(COMMA).every((part)=>{\n part = normalize(part);\n if (part.startsWith(\"var(\")) return true;\n if (url(part) || gradient(part) || [\n \"element(\",\n \"image(\",\n \"cross-fade(\",\n \"image-set(\"\n ].some((fn)=>part.startsWith(fn))) {\n images++;\n return true;\n }\n return false;\n });\n if (!result) return false;\n return images > 0;\n}\nlet gradientTypes = new Set([\n \"linear-gradient\",\n \"radial-gradient\",\n \"repeating-linear-gradient\",\n \"repeating-radial-gradient\",\n \"conic-gradient\", \n]);\nfunction gradient(value) {\n value = normalize(value);\n for (let type of gradientTypes){\n if (value.startsWith(`${type}(`)) {\n return true;\n }\n }\n return false;\n}\nlet validPositions = new Set([\n \"center\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\"\n]);\nfunction position(value) {\n let positions = 0;\n let result = value.split(UNDERSCORE).every((part)=>{\n part = normalize(part);\n if (part.startsWith(\"var(\")) return true;\n if (validPositions.has(part) || length(part) || percentage(part)) {\n positions++;\n return true;\n }\n return false;\n });\n if (!result) return false;\n return positions > 0;\n}\nfunction familyName(value) {\n let fonts = 0;\n let result = value.split(COMMA).every((part)=>{\n part = normalize(part);\n if (part.startsWith(\"var(\")) return true;\n // If it contains spaces, then it should be quoted\n if (part.includes(\" \")) {\n if (!/(['\"])([^\"']+)\\1/g.test(part)) {\n return false;\n }\n }\n // If it starts with a number, it's invalid\n if (/^\\d/g.test(part)) {\n return false;\n }\n fonts++;\n return true;\n });\n if (!result) return false;\n return fonts > 0;\n}\nlet genericNames = new Set([\n \"serif\",\n \"sans-serif\",\n \"monospace\",\n \"cursive\",\n \"fantasy\",\n \"system-ui\",\n \"ui-serif\",\n \"ui-sans-serif\",\n \"ui-monospace\",\n \"ui-rounded\",\n \"math\",\n \"emoji\",\n \"fangsong\", \n]);\nfunction genericName(value) {\n return genericNames.has(value);\n}\nlet absoluteSizes = new Set([\n \"xx-small\",\n \"x-small\",\n \"small\",\n \"medium\",\n \"large\",\n \"x-large\",\n \"x-large\",\n \"xxx-large\", \n]);\nfunction absoluteSize(value) {\n return absoluteSizes.has(value);\n}\nlet relativeSizes = new Set([\n \"larger\",\n \"smaller\"\n]);\nfunction relativeSize(value) {\n return relativeSizes.has(value);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"defaults\", {\n enumerable: true,\n get: ()=>defaults\n});\nfunction defaults(target, ...sources) {\n for (let source of sources){\n for(let k in source){\n var ref;\n if (!(target === null || target === void 0 ? void 0 : (ref = target.hasOwnProperty) === null || ref === void 0 ? void 0 : ref.call(target, k))) {\n target[k] = source[k];\n }\n }\n for (let k1 of Object.getOwnPropertySymbols(source)){\n var ref1;\n if (!(target === null || target === void 0 ? void 0 : (ref1 = target.hasOwnProperty) === null || ref1 === void 0 ? void 0 : ref1.call(target, k1))) {\n target[k1] = source[k1];\n }\n }\n }\n return target;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>escapeCommas\n});\nfunction escapeCommas(className) {\n return className.replace(/\\\\,/g, \"\\\\2c \");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>getAllConfigs\n});\nconst _defaultConfigStubJs = /*#__PURE__*/ _interopRequireDefault(require(\"../../stubs/defaultConfig.stub.js\"));\nconst _featureFlags = require(\"../featureFlags\");\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nfunction getAllConfigs(config) {\n var ref;\n const configs = ((ref = config === null || config === void 0 ? void 0 : config.presets) !== null && ref !== void 0 ? ref : [\n _defaultConfigStubJs.default\n ]).slice().reverse().flatMap((preset)=>getAllConfigs(preset instanceof Function ? preset() : preset));\n const features = {\n // Add experimental configs here...\n respectDefaultRingColorOpacity: {\n theme: {\n ringColor: {\n DEFAULT: \"#3b82f67f\"\n }\n }\n }\n };\n const experimentals = Object.keys(features).filter((feature)=>(0, _featureFlags.flagEnabled)(config, feature)).map((feature)=>features[feature]);\n return [\n config,\n ...experimentals,\n ...configs\n ];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>isPlainObject\n});\nfunction isPlainObject(value) {\n if (Object.prototype.toString.call(value) !== \"[object Object]\") {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n dim: ()=>dim,\n default: ()=>_default\n});\nconst _picocolors = /*#__PURE__*/ _interopRequireDefault(require(\"picocolors\"));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nlet alreadyShown = new Set();\nfunction log(type, messages, key) {\n if (typeof process !== \"undefined\" && process.env.JEST_WORKER_ID) return;\n if (key && alreadyShown.has(key)) return;\n if (key) alreadyShown.add(key);\n console.warn(\"\");\n messages.forEach((message)=>console.warn(type, \"-\", message));\n}\nfunction dim(input) {\n return _picocolors.default.dim(input);\n}\nconst _default = {\n info (key, messages) {\n log(_picocolors.default.bold(_picocolors.default.cyan(\"info\")), ...Array.isArray(key) ? [\n key\n ] : [\n messages,\n key\n ]);\n },\n warn (key, messages) {\n log(_picocolors.default.bold(_picocolors.default.yellow(\"warn\")), ...Array.isArray(key) ? [\n key\n ] : [\n messages,\n key\n ]);\n },\n risk (key, messages) {\n log(_picocolors.default.bold(_picocolors.default.magenta(\"risk\")), ...Array.isArray(key) ? [\n key\n ] : [\n messages,\n key\n ]);\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>_default\n});\nfunction _default(value) {\n value = `${value}`;\n if (value === \"0\") {\n return \"0\";\n }\n // Flip sign of numbers\n if (/^[+-]?(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?(%|\\w+)?$/.test(value)) {\n return value.replace(/^[+-]?/, (sign)=>sign === \"-\" ? \"\" : \"-\");\n }\n if (value.includes(\"var(\") || value.includes(\"calc(\")) {\n return `calc(${value} * -1)`;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"normalizeConfig\", {\n enumerable: true,\n get: ()=>normalizeConfig\n});\nconst _log = /*#__PURE__*/ _interopRequireWildcard(require(\"./log\"));\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for(var key in obj){\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\nfunction normalizeConfig(config) {\n // Quick structure validation\n /**\n * type FilePath = string\n * type RawFile = { raw: string, extension?: string }\n * type ExtractorFn = (content: string) => Array\n * type TransformerFn = (content: string) => string\n *\n * type Content =\n * | Array\n * | {\n * files: Array,\n * extract?: ExtractorFn | { [extension: string]: ExtractorFn }\n * transform?: TransformerFn | { [extension: string]: TransformerFn }\n * }\n */ let valid = (()=>{\n // `config.purge` should not exist anymore\n if (config.purge) {\n return false;\n }\n // `config.content` should exist\n if (!config.content) {\n return false;\n }\n // `config.content` should be an object or an array\n if (!Array.isArray(config.content) && !(typeof config.content === \"object\" && config.content !== null)) {\n return false;\n }\n // When `config.content` is an array, it should consist of FilePaths or RawFiles\n if (Array.isArray(config.content)) {\n return config.content.every((path)=>{\n // `path` can be a string\n if (typeof path === \"string\") return true;\n // `path` can be an object { raw: string, extension?: string }\n // `raw` must be a string\n if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== \"string\") return false;\n // `extension` (if provided) should also be a string\n if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== \"string\") {\n return false;\n }\n return true;\n });\n }\n // When `config.content` is an object\n if (typeof config.content === \"object\" && config.content !== null) {\n // Only `files`, `extract` and `transform` can exist in `config.content`\n if (Object.keys(config.content).some((key)=>![\n \"files\",\n \"extract\",\n \"transform\"\n ].includes(key))) {\n return false;\n }\n // `config.content.files` should exist of FilePaths or RawFiles\n if (Array.isArray(config.content.files)) {\n if (!config.content.files.every((path)=>{\n // `path` can be a string\n if (typeof path === \"string\") return true;\n // `path` can be an object { raw: string, extension?: string }\n // `raw` must be a string\n if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== \"string\") return false;\n // `extension` (if provided) should also be a string\n if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== \"string\") {\n return false;\n }\n return true;\n })) {\n return false;\n }\n // `config.content.extract` is optional, and can be a Function or a Record\n if (typeof config.content.extract === \"object\") {\n for (let value of Object.values(config.content.extract)){\n if (typeof value !== \"function\") {\n return false;\n }\n }\n } else if (!(config.content.extract === undefined || typeof config.content.extract === \"function\")) {\n return false;\n }\n // `config.content.transform` is optional, and can be a Function or a Record\n if (typeof config.content.transform === \"object\") {\n for (let value1 of Object.values(config.content.transform)){\n if (typeof value1 !== \"function\") {\n return false;\n }\n }\n } else if (!(config.content.transform === undefined || typeof config.content.transform === \"function\")) {\n return false;\n }\n }\n return true;\n }\n return false;\n })();\n if (!valid) {\n _log.default.warn(\"purge-deprecation\", [\n \"The `purge`/`content` options have changed in Tailwind CSS v3.0.\",\n \"Update your configuration file to eliminate this warning.\",\n \"https://tailwindcss.com/docs/upgrade-guide#configure-content-sources\", \n ]);\n }\n // Normalize the `safelist`\n config.safelist = (()=>{\n var ref;\n let { content , purge , safelist } = config;\n if (Array.isArray(safelist)) return safelist;\n if (Array.isArray(content === null || content === void 0 ? void 0 : content.safelist)) return content.safelist;\n if (Array.isArray(purge === null || purge === void 0 ? void 0 : purge.safelist)) return purge.safelist;\n if (Array.isArray(purge === null || purge === void 0 ? void 0 : (ref = purge.options) === null || ref === void 0 ? void 0 : ref.safelist)) return purge.options.safelist;\n return [];\n })();\n // Normalize prefix option\n if (typeof config.prefix === \"function\") {\n _log.default.warn(\"prefix-function\", [\n \"As of Tailwind CSS v3.0, `prefix` cannot be a function.\",\n \"Update `prefix` in your configuration to be a string to eliminate this warning.\",\n \"https://tailwindcss.com/docs/upgrade-guide#prefix-cannot-be-a-function\", \n ]);\n config.prefix = \"\";\n } else {\n var _prefix;\n config.prefix = (_prefix = config.prefix) !== null && _prefix !== void 0 ? _prefix : \"\";\n }\n // Normalize the `content`\n config.content = {\n files: (()=>{\n let { content , purge } = config;\n if (Array.isArray(purge)) return purge;\n if (Array.isArray(purge === null || purge === void 0 ? void 0 : purge.content)) return purge.content;\n if (Array.isArray(content)) return content;\n if (Array.isArray(content === null || content === void 0 ? void 0 : content.content)) return content.content;\n if (Array.isArray(content === null || content === void 0 ? void 0 : content.files)) return content.files;\n return [];\n })(),\n extract: (()=>{\n let extract = (()=>{\n var ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9;\n if ((ref = config.purge) === null || ref === void 0 ? void 0 : ref.extract) return config.purge.extract;\n if ((ref1 = config.content) === null || ref1 === void 0 ? void 0 : ref1.extract) return config.content.extract;\n if ((ref2 = config.purge) === null || ref2 === void 0 ? void 0 : (ref3 = ref2.extract) === null || ref3 === void 0 ? void 0 : ref3.DEFAULT) return config.purge.extract.DEFAULT;\n if ((ref4 = config.content) === null || ref4 === void 0 ? void 0 : (ref5 = ref4.extract) === null || ref5 === void 0 ? void 0 : ref5.DEFAULT) return config.content.extract.DEFAULT;\n if ((ref6 = config.purge) === null || ref6 === void 0 ? void 0 : (ref7 = ref6.options) === null || ref7 === void 0 ? void 0 : ref7.extractors) return config.purge.options.extractors;\n if ((ref8 = config.content) === null || ref8 === void 0 ? void 0 : (ref9 = ref8.options) === null || ref9 === void 0 ? void 0 : ref9.extractors) return config.content.options.extractors;\n return {};\n })();\n let extractors = {};\n let defaultExtractor = (()=>{\n var ref, ref1, ref2, ref3;\n if ((ref = config.purge) === null || ref === void 0 ? void 0 : (ref1 = ref.options) === null || ref1 === void 0 ? void 0 : ref1.defaultExtractor) {\n return config.purge.options.defaultExtractor;\n }\n if ((ref2 = config.content) === null || ref2 === void 0 ? void 0 : (ref3 = ref2.options) === null || ref3 === void 0 ? void 0 : ref3.defaultExtractor) {\n return config.content.options.defaultExtractor;\n }\n return undefined;\n })();\n if (defaultExtractor !== undefined) {\n extractors.DEFAULT = defaultExtractor;\n }\n // Functions\n if (typeof extract === \"function\") {\n extractors.DEFAULT = extract;\n } else if (Array.isArray(extract)) {\n for (let { extensions , extractor } of extract !== null && extract !== void 0 ? extract : []){\n for (let extension of extensions){\n extractors[extension] = extractor;\n }\n }\n } else if (typeof extract === \"object\" && extract !== null) {\n Object.assign(extractors, extract);\n }\n return extractors;\n })(),\n transform: (()=>{\n let transform = (()=>{\n var ref, ref1, ref2, ref3, ref4, ref5;\n if ((ref = config.purge) === null || ref === void 0 ? void 0 : ref.transform) return config.purge.transform;\n if ((ref1 = config.content) === null || ref1 === void 0 ? void 0 : ref1.transform) return config.content.transform;\n if ((ref2 = config.purge) === null || ref2 === void 0 ? void 0 : (ref3 = ref2.transform) === null || ref3 === void 0 ? void 0 : ref3.DEFAULT) return config.purge.transform.DEFAULT;\n if ((ref4 = config.content) === null || ref4 === void 0 ? void 0 : (ref5 = ref4.transform) === null || ref5 === void 0 ? void 0 : ref5.DEFAULT) return config.content.transform.DEFAULT;\n return {};\n })();\n let transformers = {};\n if (typeof transform === \"function\") {\n transformers.DEFAULT = transform;\n }\n if (typeof transform === \"object\" && transform !== null) {\n Object.assign(transformers, transform);\n }\n return transformers;\n })()\n };\n // Validate globs to prevent bogus globs.\n // E.g.: `./src/*.{html}` is invalid, the `{html}` should just be `html`\n for (let file of config.content.files){\n if (typeof file === \"string\" && /{([^,]*?)}/g.test(file)) {\n _log.default.warn(\"invalid-glob-braces\", [\n `The glob pattern ${(0, _log.dim)(file)} in your Tailwind CSS configuration is invalid.`,\n `Update it to ${(0, _log.dim)(file.replace(/{([^,]*?)}/g, \"$1\"))} to silence this warning.`\n ]);\n break;\n }\n }\n return config;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n parseBoxShadowValue: ()=>parseBoxShadowValue,\n formatBoxShadowValue: ()=>formatBoxShadowValue\n});\nconst _splitAtTopLevelOnly = require(\"./splitAtTopLevelOnly\");\nlet KEYWORDS = new Set([\n \"inset\",\n \"inherit\",\n \"initial\",\n \"revert\",\n \"unset\"\n]);\nlet SPACE = /\\ +(?![^(]*\\))/g // Similar to the one above, but with spaces instead.\n;\nlet LENGTH = /^-?(\\d+|\\.\\d+)(.*?)$/g;\nfunction parseBoxShadowValue(input) {\n let shadows = Array.from((0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(input, \",\"));\n return shadows.map((shadow)=>{\n let value = shadow.trim();\n let result = {\n raw: value\n };\n let parts = value.split(SPACE);\n let seen = new Set();\n for (let part of parts){\n // Reset index, since the regex is stateful.\n LENGTH.lastIndex = 0;\n // Keyword\n if (!seen.has(\"KEYWORD\") && KEYWORDS.has(part)) {\n result.keyword = part;\n seen.add(\"KEYWORD\");\n } else if (LENGTH.test(part)) {\n if (!seen.has(\"X\")) {\n result.x = part;\n seen.add(\"X\");\n } else if (!seen.has(\"Y\")) {\n result.y = part;\n seen.add(\"Y\");\n } else if (!seen.has(\"BLUR\")) {\n result.blur = part;\n seen.add(\"BLUR\");\n } else if (!seen.has(\"SPREAD\")) {\n result.spread = part;\n seen.add(\"SPREAD\");\n }\n } else {\n if (!result.color) {\n result.color = part;\n } else {\n if (!result.unknown) result.unknown = [];\n result.unknown.push(part);\n }\n }\n }\n // Check if valid\n result.valid = result.x !== undefined && result.y !== undefined;\n return result;\n });\n}\nfunction formatBoxShadowValue(shadows) {\n return shadows.map((shadow)=>{\n if (!shadow.valid) {\n return shadow.raw;\n }\n return [\n shadow.keyword,\n shadow.x,\n shadow.y,\n shadow.blur,\n shadow.spread,\n shadow.color\n ].filter(Boolean).join(\" \");\n }).join(\", \");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n updateAllClasses: ()=>updateAllClasses,\n asValue: ()=>asValue,\n parseColorFormat: ()=>parseColorFormat,\n asColor: ()=>asColor,\n asLookupValue: ()=>asLookupValue,\n coerceValue: ()=>coerceValue\n});\nconst _postcssSelectorParser = /*#__PURE__*/ _interopRequireDefault(require(\"postcss-selector-parser\"));\nconst _escapeCommas = /*#__PURE__*/ _interopRequireDefault(require(\"./escapeCommas\"));\nconst _withAlphaVariable = require(\"./withAlphaVariable\");\nconst _dataTypes = require(\"./dataTypes\");\nconst _negateValue = /*#__PURE__*/ _interopRequireDefault(require(\"./negateValue\"));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nfunction updateAllClasses(selectors, updateClass) {\n let parser = (0, _postcssSelectorParser.default)((selectors)=>{\n selectors.walkClasses((sel)=>{\n let updatedClass = updateClass(sel.value);\n sel.value = updatedClass;\n if (sel.raws && sel.raws.value) {\n sel.raws.value = (0, _escapeCommas.default)(sel.raws.value);\n }\n });\n });\n let result = parser.processSync(selectors);\n return result;\n}\nfunction resolveArbitraryValue(modifier, validate) {\n if (!isArbitraryValue(modifier)) {\n return undefined;\n }\n let value = modifier.slice(1, -1);\n if (!validate(value)) {\n return undefined;\n }\n return (0, _dataTypes.normalize)(value);\n}\nfunction asNegativeValue(modifier, lookup = {}, validate) {\n let positiveValue = lookup[modifier];\n if (positiveValue !== undefined) {\n return (0, _negateValue.default)(positiveValue);\n }\n if (isArbitraryValue(modifier)) {\n let resolved = resolveArbitraryValue(modifier, validate);\n if (resolved === undefined) {\n return undefined;\n }\n return (0, _negateValue.default)(resolved);\n }\n}\nfunction asValue(modifier, options = {}, { validate =()=>true } = {}) {\n var ref;\n let value = (ref = options.values) === null || ref === void 0 ? void 0 : ref[modifier];\n if (value !== undefined) {\n return value;\n }\n if (options.supportsNegativeValues && modifier.startsWith(\"-\")) {\n return asNegativeValue(modifier.slice(1), options.values, validate);\n }\n return resolveArbitraryValue(modifier, validate);\n}\nfunction isArbitraryValue(input) {\n return input.startsWith(\"[\") && input.endsWith(\"]\");\n}\nfunction splitAlpha(modifier) {\n let slashIdx = modifier.lastIndexOf(\"/\");\n if (slashIdx === -1 || slashIdx === modifier.length - 1) {\n return [\n modifier\n ];\n }\n return [\n modifier.slice(0, slashIdx),\n modifier.slice(slashIdx + 1)\n ];\n}\nfunction parseColorFormat(value) {\n if (typeof value === \"string\" && value.includes(\"\")) {\n let oldValue = value;\n return ({ opacityValue =1 })=>oldValue.replace(\"\", opacityValue);\n }\n return value;\n}\nfunction asColor(modifier, options = {}, { tailwindConfig ={} } = {}) {\n var ref;\n if (((ref = options.values) === null || ref === void 0 ? void 0 : ref[modifier]) !== undefined) {\n var ref1;\n return parseColorFormat((ref1 = options.values) === null || ref1 === void 0 ? void 0 : ref1[modifier]);\n }\n let [color, alpha] = splitAlpha(modifier);\n if (alpha !== undefined) {\n var ref2, ref3, ref4;\n var ref5;\n let normalizedColor = (ref5 = (ref2 = options.values) === null || ref2 === void 0 ? void 0 : ref2[color]) !== null && ref5 !== void 0 ? ref5 : isArbitraryValue(color) ? color.slice(1, -1) : undefined;\n if (normalizedColor === undefined) {\n return undefined;\n }\n normalizedColor = parseColorFormat(normalizedColor);\n if (isArbitraryValue(alpha)) {\n return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, alpha.slice(1, -1));\n }\n if (((ref3 = tailwindConfig.theme) === null || ref3 === void 0 ? void 0 : (ref4 = ref3.opacity) === null || ref4 === void 0 ? void 0 : ref4[alpha]) === undefined) {\n return undefined;\n }\n return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, tailwindConfig.theme.opacity[alpha]);\n }\n return asValue(modifier, options, {\n validate: _dataTypes.color\n });\n}\nfunction asLookupValue(modifier, options = {}) {\n var ref;\n return (ref = options.values) === null || ref === void 0 ? void 0 : ref[modifier];\n}\nfunction guess(validate) {\n return (modifier, options)=>{\n return asValue(modifier, options, {\n validate\n });\n };\n}\nlet typeMap = {\n any: asValue,\n color: asColor,\n url: guess(_dataTypes.url),\n image: guess(_dataTypes.image),\n length: guess(_dataTypes.length),\n percentage: guess(_dataTypes.percentage),\n position: guess(_dataTypes.position),\n lookup: asLookupValue,\n \"generic-name\": guess(_dataTypes.genericName),\n \"family-name\": guess(_dataTypes.familyName),\n number: guess(_dataTypes.number),\n \"line-width\": guess(_dataTypes.lineWidth),\n \"absolute-size\": guess(_dataTypes.absoluteSize),\n \"relative-size\": guess(_dataTypes.relativeSize),\n shadow: guess(_dataTypes.shadow)\n};\nlet supportedTypes = Object.keys(typeMap);\nfunction splitAtFirst(input, delim) {\n let idx = input.indexOf(delim);\n if (idx === -1) return [\n undefined,\n input\n ];\n return [\n input.slice(0, idx),\n input.slice(idx + 1)\n ];\n}\nfunction coerceValue(types, modifier, options, tailwindConfig) {\n if (isArbitraryValue(modifier)) {\n let arbitraryValue = modifier.slice(1, -1);\n let [explicitType, value] = splitAtFirst(arbitraryValue, \":\");\n // It could be that this resolves to `url(https` which is not a valid\n // identifier. We currently only support \"simple\" words with dashes or\n // underscores. E.g.: family-name\n if (!/^[\\w-_]+$/g.test(explicitType)) {\n value = arbitraryValue;\n } else if (explicitType !== undefined && !supportedTypes.includes(explicitType)) {\n return [];\n }\n if (value.length > 0 && supportedTypes.includes(explicitType)) {\n return [\n asValue(`[${value}]`, options),\n explicitType\n ];\n }\n }\n // Find first matching type\n for (let type of [].concat(types)){\n let result = typeMap[type](modifier, options, {\n tailwindConfig\n });\n if (result !== undefined) return [\n result,\n type\n ];\n }\n return [];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>resolveConfig\n});\nconst _negateValue = /*#__PURE__*/ _interopRequireDefault(require(\"./negateValue\"));\nconst _corePluginList = /*#__PURE__*/ _interopRequireDefault(require(\"../corePluginList\"));\nconst _configurePlugins = /*#__PURE__*/ _interopRequireDefault(require(\"./configurePlugins\"));\nconst _defaultConfigStub = /*#__PURE__*/ _interopRequireDefault(require(\"../../stubs/defaultConfig.stub\"));\nconst _colors = /*#__PURE__*/ _interopRequireDefault(require(\"../public/colors\"));\nconst _defaults = require(\"./defaults\");\nconst _toPath = require(\"./toPath\");\nconst _normalizeConfig = require(\"./normalizeConfig\");\nconst _isPlainObject = /*#__PURE__*/ _interopRequireDefault(require(\"./isPlainObject\"));\nconst _cloneDeep = require(\"./cloneDeep\");\nconst _pluginUtils = require(\"./pluginUtils\");\nconst _withAlphaVariable = require(\"./withAlphaVariable\");\nconst _toColorValue = /*#__PURE__*/ _interopRequireDefault(require(\"./toColorValue\"));\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nfunction isFunction(input) {\n return typeof input === \"function\";\n}\nfunction isObject(input) {\n return typeof input === \"object\" && input !== null;\n}\nfunction mergeWith(target, ...sources) {\n let customizer = sources.pop();\n for (let source of sources){\n for(let k in source){\n let merged = customizer(target[k], source[k]);\n if (merged === undefined) {\n if (isObject(target[k]) && isObject(source[k])) {\n target[k] = mergeWith(target[k], source[k], customizer);\n } else {\n target[k] = source[k];\n }\n } else {\n target[k] = merged;\n }\n }\n }\n return target;\n}\nconst configUtils = {\n colors: _colors.default,\n negative (scale) {\n // TODO: Log that this function isn't really needed anymore?\n return Object.keys(scale).filter((key)=>scale[key] !== \"0\").reduce((negativeScale, key)=>{\n let negativeValue = (0, _negateValue.default)(scale[key]);\n if (negativeValue !== undefined) {\n negativeScale[`-${key}`] = negativeValue;\n }\n return negativeScale;\n }, {});\n },\n breakpoints (screens) {\n return Object.keys(screens).filter((key)=>typeof screens[key] === \"string\").reduce((breakpoints, key)=>({\n ...breakpoints,\n [`screen-${key}`]: screens[key]\n }), {});\n }\n};\nfunction value(valueToResolve, ...args) {\n return isFunction(valueToResolve) ? valueToResolve(...args) : valueToResolve;\n}\nfunction collectExtends(items) {\n return items.reduce((merged, { extend })=>{\n return mergeWith(merged, extend, (mergedValue, extendValue)=>{\n if (mergedValue === undefined) {\n return [\n extendValue\n ];\n }\n if (Array.isArray(mergedValue)) {\n return [\n extendValue,\n ...mergedValue\n ];\n }\n return [\n extendValue,\n mergedValue\n ];\n });\n }, {});\n}\nfunction mergeThemes(themes) {\n return {\n ...themes.reduce((merged, theme)=>(0, _defaults.defaults)(merged, theme), {}),\n // In order to resolve n config objects, we combine all of their `extend` properties\n // into arrays instead of objects so they aren't overridden.\n extend: collectExtends(themes)\n };\n}\nfunction mergeExtensionCustomizer(merged, value) {\n // When we have an array of objects, we do want to merge it\n if (Array.isArray(merged) && isObject(merged[0])) {\n return merged.concat(value);\n }\n // When the incoming value is an array, and the existing config is an object, prepend the existing object\n if (Array.isArray(value) && isObject(value[0]) && isObject(merged)) {\n return [\n merged,\n ...value\n ];\n }\n // Override arrays (for example for font-families, box-shadows, ...)\n if (Array.isArray(value)) {\n return value;\n }\n // Execute default behaviour\n return undefined;\n}\nfunction mergeExtensions({ extend , ...theme }) {\n return mergeWith(theme, extend, (themeValue, extensions)=>{\n // The `extend` property is an array, so we need to check if it contains any functions\n if (!isFunction(themeValue) && !extensions.some(isFunction)) {\n return mergeWith({}, themeValue, ...extensions, mergeExtensionCustomizer);\n }\n return (resolveThemePath, utils)=>mergeWith({}, ...[\n themeValue,\n ...extensions\n ].map((e)=>value(e, resolveThemePath, utils)), mergeExtensionCustomizer);\n });\n}\n/**\n *\n * @param {string} key\n * @return {Iterable}\n */ function* toPaths(key) {\n let path = (0, _toPath.toPath)(key);\n if (path.length === 0) {\n return;\n }\n yield path;\n if (Array.isArray(key)) {\n return;\n }\n let pattern = /^(.*?)\\s*\\/\\s*([^/]+)$/;\n let matches = key.match(pattern);\n if (matches !== null) {\n let [, prefix, alpha] = matches;\n let newPath = (0, _toPath.toPath)(prefix);\n newPath.alpha = alpha;\n yield newPath;\n }\n}\nfunction resolveFunctionKeys(object) {\n // theme('colors.red.500 / 0.5') -> ['colors', 'red', '500 / 0', '5]\n const resolvePath = (key, defaultValue)=>{\n for (const path of toPaths(key)){\n let index = 0;\n let val = object;\n while(val !== undefined && val !== null && index < path.length){\n val = val[path[index++]];\n let shouldResolveAsFn = isFunction(val) && (path.alpha === undefined || index <= path.length - 1);\n val = shouldResolveAsFn ? val(resolvePath, configUtils) : val;\n }\n if (val !== undefined) {\n if (path.alpha !== undefined) {\n let normalized = (0, _pluginUtils.parseColorFormat)(val);\n return (0, _withAlphaVariable.withAlphaValue)(normalized, path.alpha, (0, _toColorValue.default)(normalized));\n }\n if ((0, _isPlainObject.default)(val)) {\n return (0, _cloneDeep.cloneDeep)(val);\n }\n return val;\n }\n }\n return defaultValue;\n };\n Object.assign(resolvePath, {\n theme: resolvePath,\n ...configUtils\n });\n return Object.keys(object).reduce((resolved, key)=>{\n resolved[key] = isFunction(object[key]) ? object[key](resolvePath, configUtils) : object[key];\n return resolved;\n }, {});\n}\nfunction extractPluginConfigs(configs) {\n let allConfigs = [];\n configs.forEach((config)=>{\n allConfigs = [\n ...allConfigs,\n config\n ];\n var ref;\n const plugins = (ref = config === null || config === void 0 ? void 0 : config.plugins) !== null && ref !== void 0 ? ref : [];\n if (plugins.length === 0) {\n return;\n }\n plugins.forEach((plugin)=>{\n if (plugin.__isOptionsFunction) {\n plugin = plugin();\n }\n var ref;\n allConfigs = [\n ...allConfigs,\n ...extractPluginConfigs([\n (ref = plugin === null || plugin === void 0 ? void 0 : plugin.config) !== null && ref !== void 0 ? ref : {}\n ])\n ];\n });\n });\n return allConfigs;\n}\nfunction resolveCorePlugins(corePluginConfigs) {\n const result = [\n ...corePluginConfigs\n ].reduceRight((resolved, corePluginConfig)=>{\n if (isFunction(corePluginConfig)) {\n return corePluginConfig({\n corePlugins: resolved\n });\n }\n return (0, _configurePlugins.default)(corePluginConfig, resolved);\n }, _corePluginList.default);\n return result;\n}\nfunction resolvePluginLists(pluginLists) {\n const result = [\n ...pluginLists\n ].reduceRight((resolved, pluginList)=>{\n return [\n ...resolved,\n ...pluginList\n ];\n }, []);\n return result;\n}\nfunction resolveConfig(configs) {\n let allConfigs = [\n ...extractPluginConfigs(configs),\n {\n prefix: \"\",\n important: false,\n separator: \":\",\n variantOrder: _defaultConfigStub.default.variantOrder\n }, \n ];\n var ref, ref1;\n return (0, _normalizeConfig.normalizeConfig)((0, _defaults.defaults)({\n theme: resolveFunctionKeys(mergeExtensions(mergeThemes(allConfigs.map((t)=>{\n return (ref = t === null || t === void 0 ? void 0 : t.theme) !== null && ref !== void 0 ? ref : {};\n })))),\n corePlugins: resolveCorePlugins(allConfigs.map((c)=>c.corePlugins)),\n plugins: resolvePluginLists(configs.map((c)=>{\n return (ref1 = c === null || c === void 0 ? void 0 : c.plugins) !== null && ref1 !== void 0 ? ref1 : [];\n }))\n }, ...allConfigs));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"splitAtTopLevelOnly\", {\n enumerable: true,\n get: ()=>splitAtTopLevelOnly\n});\nconst _regex = /*#__PURE__*/ _interopRequireWildcard(require(\"../lib/regex\"));\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for(var key in obj){\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\nfunction* splitAtTopLevelOnly(input, separator) {\n let SPECIALS = new RegExp(`[(){}\\\\[\\\\]${_regex.escape(separator)}]`, \"g\");\n let depth = 0;\n let lastIndex = 0;\n let found = false;\n let separatorIndex = 0;\n let separatorStart = 0;\n let separatorLength = separator.length;\n // Find all paren-like things & character\n // And only split on commas if they're top-level\n for (let match of input.matchAll(SPECIALS)){\n let matchesSeparator = match[0] === separator[separatorIndex];\n let atEndOfSeparator = separatorIndex === separatorLength - 1;\n let matchesFullSeparator = matchesSeparator && atEndOfSeparator;\n if (match[0] === \"(\") depth++;\n if (match[0] === \")\") depth--;\n if (match[0] === \"[\") depth++;\n if (match[0] === \"]\") depth--;\n if (match[0] === \"{\") depth++;\n if (match[0] === \"}\") depth--;\n if (matchesSeparator && depth === 0) {\n if (separatorStart === 0) {\n separatorStart = match.index;\n }\n separatorIndex++;\n }\n if (matchesFullSeparator && depth === 0) {\n found = true;\n yield input.substring(lastIndex, separatorStart);\n lastIndex = separatorStart + separatorLength;\n }\n if (separatorIndex === separatorLength) {\n separatorIndex = 0;\n separatorStart = 0;\n }\n }\n // Provide the last segment of the string if available\n // Otherwise the whole string since no `char`s were found\n // This mirrors the behavior of string.split()\n if (found) {\n yield input.substring(lastIndex);\n } else {\n yield input;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: ()=>toColorValue\n});\nfunction toColorValue(maybeFunction) {\n return typeof maybeFunction === \"function\" ? maybeFunction({}) : maybeFunction;\n}\n","/**\n * Parse a path string into an array of path segments.\n *\n * Square bracket notation `a[b]` may be used to \"escape\" dots that would otherwise be interpreted as path separators.\n *\n * Example:\n * a -> ['a']\n * a.b.c -> ['a', 'b', 'c']\n * a[b].c -> ['a', 'b', 'c']\n * a[b.c].e.f -> ['a', 'b.c', 'e', 'f']\n * a[b][c][d] -> ['a', 'b', 'c', 'd']\n *\n * @param {string|string[]} path\n **/ \"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"toPath\", {\n enumerable: true,\n get: ()=>toPath\n});\nfunction toPath(path) {\n if (Array.isArray(path)) return path;\n let openBrackets = path.split(\"[\").length - 1;\n let closedBrackets = path.split(\"]\").length - 1;\n if (openBrackets !== closedBrackets) {\n throw new Error(`Path is invalid. Has unbalanced brackets: ${path}`);\n }\n return path.split(/\\.(?![^\\[]*\\])|[\\[\\]]/g).filter(Boolean);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n withAlphaValue: ()=>withAlphaValue,\n default: ()=>withAlphaVariable\n});\nconst _color = require(\"./color\");\nfunction withAlphaValue(color, alphaValue, defaultValue) {\n if (typeof color === \"function\") {\n return color({\n opacityValue: alphaValue\n });\n }\n let parsed = (0, _color.parseColor)(color, {\n loose: true\n });\n if (parsed === null) {\n return defaultValue;\n }\n return (0, _color.formatColor)({\n ...parsed,\n alpha: alphaValue\n });\n}\nfunction withAlphaVariable({ color , property , variable }) {\n let properties = [].concat(property);\n if (typeof color === \"function\") {\n return {\n [variable]: \"1\",\n ...Object.fromEntries(properties.map((p)=>{\n return [\n p,\n color({\n opacityVariable: variable,\n opacityValue: `var(${variable})`\n })\n ];\n }))\n };\n }\n const parsed = (0, _color.parseColor)(color);\n if (parsed === null) {\n return Object.fromEntries(properties.map((p)=>[\n p,\n color\n ]));\n }\n if (parsed.alpha !== undefined) {\n // Has an alpha value, return color as-is\n return Object.fromEntries(properties.map((p)=>[\n p,\n color\n ]));\n }\n return {\n [variable]: \"1\",\n ...Object.fromEntries(properties.map((p)=>{\n return [\n p,\n (0, _color.formatColor)({\n ...parsed,\n alpha: `var(${variable})`\n })\n ];\n }))\n };\n}\n","let resolveConfig = require('./lib/public/resolve-config')\nmodule.exports = (resolveConfig.__esModule ? resolveConfig : { default: resolveConfig }).default\n","/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n content: [],\n presets: [],\n darkMode: 'media', // or 'class'\n theme: {\n screens: {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n },\n colors: ({ colors }) => ({\n inherit: colors.inherit,\n current: colors.current,\n transparent: colors.transparent,\n black: colors.black,\n white: colors.white,\n slate: colors.slate,\n gray: colors.gray,\n zinc: colors.zinc,\n neutral: colors.neutral,\n stone: colors.stone,\n red: colors.red,\n orange: colors.orange,\n amber: colors.amber,\n yellow: colors.yellow,\n lime: colors.lime,\n green: colors.green,\n emerald: colors.emerald,\n teal: colors.teal,\n cyan: colors.cyan,\n sky: colors.sky,\n blue: colors.blue,\n indigo: colors.indigo,\n violet: colors.violet,\n purple: colors.purple,\n fuchsia: colors.fuchsia,\n pink: colors.pink,\n rose: colors.rose,\n }),\n columns: {\n auto: 'auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n '3xs': '16rem',\n '2xs': '18rem',\n xs: '20rem',\n sm: '24rem',\n md: '28rem',\n lg: '32rem',\n xl: '36rem',\n '2xl': '42rem',\n '3xl': '48rem',\n '4xl': '56rem',\n '5xl': '64rem',\n '6xl': '72rem',\n '7xl': '80rem',\n },\n spacing: {\n px: '1px',\n 0: '0px',\n 0.5: '0.125rem',\n 1: '0.25rem',\n 1.5: '0.375rem',\n 2: '0.5rem',\n 2.5: '0.625rem',\n 3: '0.75rem',\n 3.5: '0.875rem',\n 4: '1rem',\n 5: '1.25rem',\n 6: '1.5rem',\n 7: '1.75rem',\n 8: '2rem',\n 9: '2.25rem',\n 10: '2.5rem',\n 11: '2.75rem',\n 12: '3rem',\n 14: '3.5rem',\n 16: '4rem',\n 20: '5rem',\n 24: '6rem',\n 28: '7rem',\n 32: '8rem',\n 36: '9rem',\n 40: '10rem',\n 44: '11rem',\n 48: '12rem',\n 52: '13rem',\n 56: '14rem',\n 60: '15rem',\n 64: '16rem',\n 72: '18rem',\n 80: '20rem',\n 96: '24rem',\n },\n animation: {\n none: 'none',\n spin: 'spin 1s linear infinite',\n ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',\n pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',\n bounce: 'bounce 1s infinite',\n },\n aspectRatio: {\n auto: 'auto',\n square: '1 / 1',\n video: '16 / 9',\n },\n backdropBlur: ({ theme }) => theme('blur'),\n backdropBrightness: ({ theme }) => theme('brightness'),\n backdropContrast: ({ theme }) => theme('contrast'),\n backdropGrayscale: ({ theme }) => theme('grayscale'),\n backdropHueRotate: ({ theme }) => theme('hueRotate'),\n backdropInvert: ({ theme }) => theme('invert'),\n backdropOpacity: ({ theme }) => theme('opacity'),\n backdropSaturate: ({ theme }) => theme('saturate'),\n backdropSepia: ({ theme }) => theme('sepia'),\n backgroundColor: ({ theme }) => theme('colors'),\n backgroundImage: {\n none: 'none',\n 'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))',\n 'gradient-to-tr': 'linear-gradient(to top right, var(--tw-gradient-stops))',\n 'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))',\n 'gradient-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))',\n 'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))',\n 'gradient-to-bl': 'linear-gradient(to bottom left, var(--tw-gradient-stops))',\n 'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))',\n 'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))',\n },\n backgroundOpacity: ({ theme }) => theme('opacity'),\n backgroundPosition: {\n bottom: 'bottom',\n center: 'center',\n left: 'left',\n 'left-bottom': 'left bottom',\n 'left-top': 'left top',\n right: 'right',\n 'right-bottom': 'right bottom',\n 'right-top': 'right top',\n top: 'top',\n },\n backgroundSize: {\n auto: 'auto',\n cover: 'cover',\n contain: 'contain',\n },\n blur: {\n 0: '0',\n none: '0',\n sm: '4px',\n DEFAULT: '8px',\n md: '12px',\n lg: '16px',\n xl: '24px',\n '2xl': '40px',\n '3xl': '64px',\n },\n brightness: {\n 0: '0',\n 50: '.5',\n 75: '.75',\n 90: '.9',\n 95: '.95',\n 100: '1',\n 105: '1.05',\n 110: '1.1',\n 125: '1.25',\n 150: '1.5',\n 200: '2',\n },\n borderColor: ({ theme }) => ({\n ...theme('colors'),\n DEFAULT: theme('colors.gray.200', 'currentColor'),\n }),\n borderOpacity: ({ theme }) => theme('opacity'),\n borderRadius: {\n none: '0px',\n sm: '0.125rem',\n DEFAULT: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n '3xl': '1.5rem',\n full: '9999px',\n },\n borderSpacing: ({ theme }) => ({\n ...theme('spacing'),\n }),\n borderWidth: {\n DEFAULT: '1px',\n 0: '0px',\n 2: '2px',\n 4: '4px',\n 8: '8px',\n },\n boxShadow: {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\n none: 'none',\n },\n boxShadowColor: ({ theme }) => theme('colors'),\n caretColor: ({ theme }) => theme('colors'),\n accentColor: ({ theme }) => ({\n ...theme('colors'),\n auto: 'auto',\n }),\n contrast: {\n 0: '0',\n 50: '.5',\n 75: '.75',\n 100: '1',\n 125: '1.25',\n 150: '1.5',\n 200: '2',\n },\n container: {},\n content: {\n none: 'none',\n },\n cursor: {\n auto: 'auto',\n default: 'default',\n pointer: 'pointer',\n wait: 'wait',\n text: 'text',\n move: 'move',\n help: 'help',\n 'not-allowed': 'not-allowed',\n none: 'none',\n 'context-menu': 'context-menu',\n progress: 'progress',\n cell: 'cell',\n crosshair: 'crosshair',\n 'vertical-text': 'vertical-text',\n alias: 'alias',\n copy: 'copy',\n 'no-drop': 'no-drop',\n grab: 'grab',\n grabbing: 'grabbing',\n 'all-scroll': 'all-scroll',\n 'col-resize': 'col-resize',\n 'row-resize': 'row-resize',\n 'n-resize': 'n-resize',\n 'e-resize': 'e-resize',\n 's-resize': 's-resize',\n 'w-resize': 'w-resize',\n 'ne-resize': 'ne-resize',\n 'nw-resize': 'nw-resize',\n 'se-resize': 'se-resize',\n 'sw-resize': 'sw-resize',\n 'ew-resize': 'ew-resize',\n 'ns-resize': 'ns-resize',\n 'nesw-resize': 'nesw-resize',\n 'nwse-resize': 'nwse-resize',\n 'zoom-in': 'zoom-in',\n 'zoom-out': 'zoom-out',\n },\n divideColor: ({ theme }) => theme('borderColor'),\n divideOpacity: ({ theme }) => theme('borderOpacity'),\n divideWidth: ({ theme }) => theme('borderWidth'),\n dropShadow: {\n sm: '0 1px 1px rgb(0 0 0 / 0.05)',\n DEFAULT: ['0 1px 2px rgb(0 0 0 / 0.1)', '0 1px 1px rgb(0 0 0 / 0.06)'],\n md: ['0 4px 3px rgb(0 0 0 / 0.07)', '0 2px 2px rgb(0 0 0 / 0.06)'],\n lg: ['0 10px 8px rgb(0 0 0 / 0.04)', '0 4px 3px rgb(0 0 0 / 0.1)'],\n xl: ['0 20px 13px rgb(0 0 0 / 0.03)', '0 8px 5px rgb(0 0 0 / 0.08)'],\n '2xl': '0 25px 25px rgb(0 0 0 / 0.15)',\n none: '0 0 #0000',\n },\n fill: ({ theme }) => theme('colors'),\n grayscale: {\n 0: '0',\n DEFAULT: '100%',\n },\n hueRotate: {\n 0: '0deg',\n 15: '15deg',\n 30: '30deg',\n 60: '60deg',\n 90: '90deg',\n 180: '180deg',\n },\n invert: {\n 0: '0',\n DEFAULT: '100%',\n },\n flex: {\n 1: '1 1 0%',\n auto: '1 1 auto',\n initial: '0 1 auto',\n none: 'none',\n },\n flexBasis: ({ theme }) => ({\n auto: 'auto',\n ...theme('spacing'),\n '1/2': '50%',\n '1/3': '33.333333%',\n '2/3': '66.666667%',\n '1/4': '25%',\n '2/4': '50%',\n '3/4': '75%',\n '1/5': '20%',\n '2/5': '40%',\n '3/5': '60%',\n '4/5': '80%',\n '1/6': '16.666667%',\n '2/6': '33.333333%',\n '3/6': '50%',\n '4/6': '66.666667%',\n '5/6': '83.333333%',\n '1/12': '8.333333%',\n '2/12': '16.666667%',\n '3/12': '25%',\n '4/12': '33.333333%',\n '5/12': '41.666667%',\n '6/12': '50%',\n '7/12': '58.333333%',\n '8/12': '66.666667%',\n '9/12': '75%',\n '10/12': '83.333333%',\n '11/12': '91.666667%',\n full: '100%',\n }),\n flexGrow: {\n 0: '0',\n DEFAULT: '1',\n },\n flexShrink: {\n 0: '0',\n DEFAULT: '1',\n },\n fontFamily: {\n sans: [\n 'ui-sans-serif',\n 'system-ui',\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n '\"Noto Sans\"',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n '\"Noto Color Emoji\"',\n ],\n serif: ['ui-serif', 'Georgia', 'Cambria', '\"Times New Roman\"', 'Times', 'serif'],\n mono: [\n 'ui-monospace',\n 'SFMono-Regular',\n 'Menlo',\n 'Monaco',\n 'Consolas',\n '\"Liberation Mono\"',\n '\"Courier New\"',\n 'monospace',\n ],\n },\n fontSize: {\n xs: ['0.75rem', { lineHeight: '1rem' }],\n sm: ['0.875rem', { lineHeight: '1.25rem' }],\n base: ['1rem', { lineHeight: '1.5rem' }],\n lg: ['1.125rem', { lineHeight: '1.75rem' }],\n xl: ['1.25rem', { lineHeight: '1.75rem' }],\n '2xl': ['1.5rem', { lineHeight: '2rem' }],\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }],\n '4xl': ['2.25rem', { lineHeight: '2.5rem' }],\n '5xl': ['3rem', { lineHeight: '1' }],\n '6xl': ['3.75rem', { lineHeight: '1' }],\n '7xl': ['4.5rem', { lineHeight: '1' }],\n '8xl': ['6rem', { lineHeight: '1' }],\n '9xl': ['8rem', { lineHeight: '1' }],\n },\n fontWeight: {\n thin: '100',\n extralight: '200',\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n extrabold: '800',\n black: '900',\n },\n gap: ({ theme }) => theme('spacing'),\n gradientColorStops: ({ theme }) => theme('colors'),\n gridAutoColumns: {\n auto: 'auto',\n min: 'min-content',\n max: 'max-content',\n fr: 'minmax(0, 1fr)',\n },\n gridAutoRows: {\n auto: 'auto',\n min: 'min-content',\n max: 'max-content',\n fr: 'minmax(0, 1fr)',\n },\n gridColumn: {\n auto: 'auto',\n 'span-1': 'span 1 / span 1',\n 'span-2': 'span 2 / span 2',\n 'span-3': 'span 3 / span 3',\n 'span-4': 'span 4 / span 4',\n 'span-5': 'span 5 / span 5',\n 'span-6': 'span 6 / span 6',\n 'span-7': 'span 7 / span 7',\n 'span-8': 'span 8 / span 8',\n 'span-9': 'span 9 / span 9',\n 'span-10': 'span 10 / span 10',\n 'span-11': 'span 11 / span 11',\n 'span-12': 'span 12 / span 12',\n 'span-full': '1 / -1',\n },\n gridColumnEnd: {\n auto: 'auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n 13: '13',\n },\n gridColumnStart: {\n auto: 'auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n 13: '13',\n },\n gridRow: {\n auto: 'auto',\n 'span-1': 'span 1 / span 1',\n 'span-2': 'span 2 / span 2',\n 'span-3': 'span 3 / span 3',\n 'span-4': 'span 4 / span 4',\n 'span-5': 'span 5 / span 5',\n 'span-6': 'span 6 / span 6',\n 'span-full': '1 / -1',\n },\n gridRowStart: {\n auto: 'auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n },\n gridRowEnd: {\n auto: 'auto',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n },\n gridTemplateColumns: {\n none: 'none',\n 1: 'repeat(1, minmax(0, 1fr))',\n 2: 'repeat(2, minmax(0, 1fr))',\n 3: 'repeat(3, minmax(0, 1fr))',\n 4: 'repeat(4, minmax(0, 1fr))',\n 5: 'repeat(5, minmax(0, 1fr))',\n 6: 'repeat(6, minmax(0, 1fr))',\n 7: 'repeat(7, minmax(0, 1fr))',\n 8: 'repeat(8, minmax(0, 1fr))',\n 9: 'repeat(9, minmax(0, 1fr))',\n 10: 'repeat(10, minmax(0, 1fr))',\n 11: 'repeat(11, minmax(0, 1fr))',\n 12: 'repeat(12, minmax(0, 1fr))',\n },\n gridTemplateRows: {\n none: 'none',\n 1: 'repeat(1, minmax(0, 1fr))',\n 2: 'repeat(2, minmax(0, 1fr))',\n 3: 'repeat(3, minmax(0, 1fr))',\n 4: 'repeat(4, minmax(0, 1fr))',\n 5: 'repeat(5, minmax(0, 1fr))',\n 6: 'repeat(6, minmax(0, 1fr))',\n },\n height: ({ theme }) => ({\n auto: 'auto',\n ...theme('spacing'),\n '1/2': '50%',\n '1/3': '33.333333%',\n '2/3': '66.666667%',\n '1/4': '25%',\n '2/4': '50%',\n '3/4': '75%',\n '1/5': '20%',\n '2/5': '40%',\n '3/5': '60%',\n '4/5': '80%',\n '1/6': '16.666667%',\n '2/6': '33.333333%',\n '3/6': '50%',\n '4/6': '66.666667%',\n '5/6': '83.333333%',\n full: '100%',\n screen: '100vh',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n }),\n inset: ({ theme }) => ({\n auto: 'auto',\n ...theme('spacing'),\n '1/2': '50%',\n '1/3': '33.333333%',\n '2/3': '66.666667%',\n '1/4': '25%',\n '2/4': '50%',\n '3/4': '75%',\n full: '100%',\n }),\n keyframes: {\n spin: {\n to: {\n transform: 'rotate(360deg)',\n },\n },\n ping: {\n '75%, 100%': {\n transform: 'scale(2)',\n opacity: '0',\n },\n },\n pulse: {\n '50%': {\n opacity: '.5',\n },\n },\n bounce: {\n '0%, 100%': {\n transform: 'translateY(-25%)',\n animationTimingFunction: 'cubic-bezier(0.8,0,1,1)',\n },\n '50%': {\n transform: 'none',\n animationTimingFunction: 'cubic-bezier(0,0,0.2,1)',\n },\n },\n },\n letterSpacing: {\n tighter: '-0.05em',\n tight: '-0.025em',\n normal: '0em',\n wide: '0.025em',\n wider: '0.05em',\n widest: '0.1em',\n },\n lineHeight: {\n none: '1',\n tight: '1.25',\n snug: '1.375',\n normal: '1.5',\n relaxed: '1.625',\n loose: '2',\n 3: '.75rem',\n 4: '1rem',\n 5: '1.25rem',\n 6: '1.5rem',\n 7: '1.75rem',\n 8: '2rem',\n 9: '2.25rem',\n 10: '2.5rem',\n },\n listStyleType: {\n none: 'none',\n disc: 'disc',\n decimal: 'decimal',\n },\n margin: ({ theme }) => ({\n auto: 'auto',\n ...theme('spacing'),\n }),\n maxHeight: ({ theme }) => ({\n ...theme('spacing'),\n full: '100%',\n screen: '100vh',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n }),\n maxWidth: ({ theme, breakpoints }) => ({\n none: 'none',\n 0: '0rem',\n xs: '20rem',\n sm: '24rem',\n md: '28rem',\n lg: '32rem',\n xl: '36rem',\n '2xl': '42rem',\n '3xl': '48rem',\n '4xl': '56rem',\n '5xl': '64rem',\n '6xl': '72rem',\n '7xl': '80rem',\n full: '100%',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n prose: '65ch',\n ...breakpoints(theme('screens')),\n }),\n minHeight: {\n 0: '0px',\n full: '100%',\n screen: '100vh',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n },\n minWidth: {\n 0: '0px',\n full: '100%',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n },\n objectPosition: {\n bottom: 'bottom',\n center: 'center',\n left: 'left',\n 'left-bottom': 'left bottom',\n 'left-top': 'left top',\n right: 'right',\n 'right-bottom': 'right bottom',\n 'right-top': 'right top',\n top: 'top',\n },\n opacity: {\n 0: '0',\n 5: '0.05',\n 10: '0.1',\n 20: '0.2',\n 25: '0.25',\n 30: '0.3',\n 40: '0.4',\n 50: '0.5',\n 60: '0.6',\n 70: '0.7',\n 75: '0.75',\n 80: '0.8',\n 90: '0.9',\n 95: '0.95',\n 100: '1',\n },\n order: {\n first: '-9999',\n last: '9999',\n none: '0',\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 10: '10',\n 11: '11',\n 12: '12',\n },\n padding: ({ theme }) => theme('spacing'),\n placeholderColor: ({ theme }) => theme('colors'),\n placeholderOpacity: ({ theme }) => theme('opacity'),\n outlineColor: ({ theme }) => theme('colors'),\n outlineOffset: {\n 0: '0px',\n 1: '1px',\n 2: '2px',\n 4: '4px',\n 8: '8px',\n },\n outlineWidth: {\n 0: '0px',\n 1: '1px',\n 2: '2px',\n 4: '4px',\n 8: '8px',\n },\n ringColor: ({ theme }) => ({\n DEFAULT: theme(`colors.blue.500`, '#3b82f6'),\n ...theme('colors'),\n }),\n ringOffsetColor: ({ theme }) => theme('colors'),\n ringOffsetWidth: {\n 0: '0px',\n 1: '1px',\n 2: '2px',\n 4: '4px',\n 8: '8px',\n },\n ringOpacity: ({ theme }) => ({\n DEFAULT: '0.5',\n ...theme('opacity'),\n }),\n ringWidth: {\n DEFAULT: '3px',\n 0: '0px',\n 1: '1px',\n 2: '2px',\n 4: '4px',\n 8: '8px',\n },\n rotate: {\n 0: '0deg',\n 1: '1deg',\n 2: '2deg',\n 3: '3deg',\n 6: '6deg',\n 12: '12deg',\n 45: '45deg',\n 90: '90deg',\n 180: '180deg',\n },\n saturate: {\n 0: '0',\n 50: '.5',\n 100: '1',\n 150: '1.5',\n 200: '2',\n },\n scale: {\n 0: '0',\n 50: '.5',\n 75: '.75',\n 90: '.9',\n 95: '.95',\n 100: '1',\n 105: '1.05',\n 110: '1.1',\n 125: '1.25',\n 150: '1.5',\n },\n scrollMargin: ({ theme }) => ({\n ...theme('spacing'),\n }),\n scrollPadding: ({ theme }) => theme('spacing'),\n sepia: {\n 0: '0',\n DEFAULT: '100%',\n },\n skew: {\n 0: '0deg',\n 1: '1deg',\n 2: '2deg',\n 3: '3deg',\n 6: '6deg',\n 12: '12deg',\n },\n space: ({ theme }) => ({\n ...theme('spacing'),\n }),\n stroke: ({ theme }) => theme('colors'),\n strokeWidth: {\n 0: '0',\n 1: '1',\n 2: '2',\n },\n textColor: ({ theme }) => theme('colors'),\n textDecorationColor: ({ theme }) => theme('colors'),\n textDecorationThickness: {\n auto: 'auto',\n 'from-font': 'from-font',\n 0: '0px',\n 1: '1px',\n 2: '2px',\n 4: '4px',\n 8: '8px',\n },\n textUnderlineOffset: {\n auto: 'auto',\n 0: '0px',\n 1: '1px',\n 2: '2px',\n 4: '4px',\n 8: '8px',\n },\n textIndent: ({ theme }) => ({\n ...theme('spacing'),\n }),\n textOpacity: ({ theme }) => theme('opacity'),\n transformOrigin: {\n center: 'center',\n top: 'top',\n 'top-right': 'top right',\n right: 'right',\n 'bottom-right': 'bottom right',\n bottom: 'bottom',\n 'bottom-left': 'bottom left',\n left: 'left',\n 'top-left': 'top left',\n },\n transitionDelay: {\n 75: '75ms',\n 100: '100ms',\n 150: '150ms',\n 200: '200ms',\n 300: '300ms',\n 500: '500ms',\n 700: '700ms',\n 1000: '1000ms',\n },\n transitionDuration: {\n DEFAULT: '150ms',\n 75: '75ms',\n 100: '100ms',\n 150: '150ms',\n 200: '200ms',\n 300: '300ms',\n 500: '500ms',\n 700: '700ms',\n 1000: '1000ms',\n },\n transitionProperty: {\n none: 'none',\n all: 'all',\n DEFAULT:\n 'color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter',\n colors: 'color, background-color, border-color, text-decoration-color, fill, stroke',\n opacity: 'opacity',\n shadow: 'box-shadow',\n transform: 'transform',\n },\n transitionTimingFunction: {\n DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)',\n linear: 'linear',\n in: 'cubic-bezier(0.4, 0, 1, 1)',\n out: 'cubic-bezier(0, 0, 0.2, 1)',\n 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',\n },\n translate: ({ theme }) => ({\n ...theme('spacing'),\n '1/2': '50%',\n '1/3': '33.333333%',\n '2/3': '66.666667%',\n '1/4': '25%',\n '2/4': '50%',\n '3/4': '75%',\n full: '100%',\n }),\n width: ({ theme }) => ({\n auto: 'auto',\n ...theme('spacing'),\n '1/2': '50%',\n '1/3': '33.333333%',\n '2/3': '66.666667%',\n '1/4': '25%',\n '2/4': '50%',\n '3/4': '75%',\n '1/5': '20%',\n '2/5': '40%',\n '3/5': '60%',\n '4/5': '80%',\n '1/6': '16.666667%',\n '2/6': '33.333333%',\n '3/6': '50%',\n '4/6': '66.666667%',\n '5/6': '83.333333%',\n '1/12': '8.333333%',\n '2/12': '16.666667%',\n '3/12': '25%',\n '4/12': '33.333333%',\n '5/12': '41.666667%',\n '6/12': '50%',\n '7/12': '58.333333%',\n '8/12': '66.666667%',\n '9/12': '75%',\n '10/12': '83.333333%',\n '11/12': '91.666667%',\n full: '100%',\n screen: '100vw',\n min: 'min-content',\n max: 'max-content',\n fit: 'fit-content',\n }),\n willChange: {\n auto: 'auto',\n scroll: 'scroll-position',\n contents: 'contents',\n transform: 'transform',\n },\n zIndex: {\n auto: 'auto',\n 0: '0',\n 10: '10',\n 20: '20',\n 30: '30',\n 40: '40',\n 50: '50',\n },\n },\n variantOrder: [\n 'first',\n 'last',\n 'odd',\n 'even',\n 'visited',\n 'checked',\n 'empty',\n 'read-only',\n 'group-hover',\n 'group-focus',\n 'focus-within',\n 'hover',\n 'focus',\n 'focus-visible',\n 'active',\n 'disabled',\n ],\n plugins: [],\n}\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","/**\n * @license React\n * use-sync-external-store-shim/with-selector.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 h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\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","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","export default function _defineProperty(obj, key, value) {\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\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\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\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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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 = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\nlet batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip dealing with ESM bindings\n\nexport const getBatch = () => batch;","import { createContext } from 'react';\nexport const ReactReduxContext = /*#__PURE__*/createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n ReactReduxContext.displayName = 'ReactRedux';\n}\n\nexport default ReactReduxContext;","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const { store } = useReduxContext()\r\n * return
{store.getState()}
\r\n * }\r\n */\nexport function useReduxContext() {\n const contextValue = useContext(ReactReduxContext);\n\n if (process.env.NODE_ENV !== 'production' && !contextValue) {\n throw new Error('could not find react-redux context value; please ensure the component is wrapped in a ');\n }\n\n return contextValue;\n}","export const notInitialized = () => {\n throw new Error('uSES not initialized!');\n};","import { useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { ReactReduxContext } from '../components/Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStoreWithSelector = notInitialized;\nexport const initializeUseSelector = fn => {\n useSyncExternalStoreWithSelector = fn;\n};\n\nconst refEquality = (a, b) => a === b;\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context = ReactReduxContext) {\n const useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : () => useContext(context);\n return function useSelector(selector, equalityFn = refEquality) {\n if (process.env.NODE_ENV !== 'production') {\n if (!selector) {\n throw new Error(`You must pass a selector to useSelector`);\n }\n\n if (typeof selector !== 'function') {\n throw new Error(`You must pass a function as a selector to useSelector`);\n }\n\n if (typeof equalityFn !== 'function') {\n throw new Error(`You must pass a function as an equality function to useSelector`);\n }\n }\n\n const {\n store,\n subscription,\n getServerState\n } = useReduxContext();\n const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, selector, equalityFn);\n useDebugValue(selectedState);\n return selectedState;\n };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const counter = useSelector(state => state.counter)\r\n * return
{counter}
\r\n * }\r\n */\n\nexport const useSelector = /*#__PURE__*/createSelectorHook();","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n const batch = getBatch();\n let first = null;\n let last = null;\n return {\n clear() {\n first = null;\n last = null;\n },\n\n notify() {\n batch(() => {\n let listener = first;\n\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n\n get() {\n let listeners = [];\n let listener = first;\n\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n\n return listeners;\n },\n\n subscribe(callback) {\n let isSubscribed = true;\n let listener = last = {\n callback,\n next: null,\n prev: last\n };\n\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n\n };\n}\n\nconst nullListeners = {\n notify() {},\n\n get: () => []\n};\nexport function createSubscription(store, parentSub) {\n let unsubscribe;\n let listeners = nullListeners;\n\n function addNestedSub(listener) {\n trySubscribe();\n return listeners.subscribe(listener);\n }\n\n function notifyNestedSubs() {\n listeners.notify();\n }\n\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n\n function isSubscribed() {\n return Boolean(unsubscribe);\n }\n\n function trySubscribe() {\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n\n function tryUnsubscribe() {\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = undefined;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n\n const subscription = {\n addNestedSub,\n notifyNestedSubs,\n handleChangeWrapper,\n isSubscribed,\n trySubscribe,\n tryUnsubscribe,\n getListeners: () => listeners\n };\n return subscription;\n}","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n// Matches logic in React's `shared/ExecutionEnvironment` file\n\nexport const canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nexport const useIsomorphicLayoutEffect = canUseDOM ? useLayoutEffect : useEffect;","import React, { useMemo } from 'react';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider({\n store,\n context,\n children,\n serverState\n}) {\n const contextValue = useMemo(() => {\n const subscription = createSubscription(store);\n return {\n store,\n subscription,\n getServerState: serverState ? () => serverState : undefined\n };\n }, [store, serverState]);\n const previousState = useMemo(() => store.getState(), [store]);\n useIsomorphicLayoutEffect(() => {\n const {\n subscription\n } = contextValue;\n subscription.onStateChange = subscription.notifyNestedSubs;\n subscription.trySubscribe();\n\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n\n return () => {\n subscription.tryUnsubscribe();\n subscription.onStateChange = undefined;\n };\n }, [contextValue, previousState]);\n const Context = context || ReactReduxContext; // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype\n\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nexport default Provider;","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context = ReactReduxContext) {\n const useReduxContext = // @ts-ignore\n context === ReactReduxContext ? useDefaultReduxContext : () => useContext(context);\n return function useStore() {\n const {\n store\n } = useReduxContext(); // @ts-ignore\n\n return store;\n };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n * const store = useStore()\r\n * return
{store.getState()}
\r\n * }\r\n */\n\nexport const useStore = /*#__PURE__*/createStoreHook();","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context = ReactReduxContext) {\n const useStore = // @ts-ignore\n context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n return function useDispatch() {\n const store = useStore(); // @ts-ignore\n\n return store.dispatch;\n };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n * const dispatch = useDispatch()\r\n * const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n * return (\r\n *
\r\n * {value}\r\n * \r\n *
\r\n * )\r\n * }\r\n */\n\nexport const useDispatch = /*#__PURE__*/createDispatchHook();","function is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport default function shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (let i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}","// The primary entry point assumes we're working with standard ReactDOM/RN, but\n// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x).\n// Because of that, the useSyncExternalStore compat shim is needed.\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch';\nimport { initializeUseSelector } from './hooks/useSelector';\nimport { initializeConnect } from './components/connect';\ninitializeUseSelector(useSyncExternalStoreWithSelector);\ninitializeConnect(useSyncExternalStore); // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };\nexport * from './exports';","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"reactReduxForwardedRef\"];\n\n/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport hoistStatics from 'hoist-non-react-statics';\nimport React, { useContext, useMemo, useRef } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport defaultSelectorFactory from '../connect/selectorFactory';\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps';\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps';\nimport { mergePropsFactory } from '../connect/mergeProps';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport shallowEqual from '../utils/shallowEqual';\nimport warning from '../utils/warning';\nimport { ReactReduxContext } from './Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStore = notInitialized;\nexport const initializeConnect = fn => {\n useSyncExternalStore = fn;\n}; // Define some constant arrays just to avoid re-creating these\n\nconst EMPTY_ARRAY = [null, 0];\nconst NO_SUBSCRIPTION_ARRAY = [null, null]; // Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\n\nconst stringifyComponent = Comp => {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n// and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);\n} // Effect callback, extracted: assign the latest props values to refs for later usage\n\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, // actualChildProps: unknown,\nchildPropsFromStoreUpdate, notifyNestedSubs) {\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current = wrapperProps;\n renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n} // Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\n\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, // forceComponentUpdateDispatch: React.Dispatch,\nadditionalSubscribeListener) {\n // If we're not subscribed to the store, nothing to do here\n if (!shouldHandleStateChanges) return () => {}; // Capture values for checking if and when this component unmounts\n\n let didUnsubscribe = false;\n let lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n const checkForUpdates = () => {\n if (didUnsubscribe || !isMounted.current) {\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n } // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n\n\n const latestStoreState = store.getState();\n let newChildProps, error;\n\n try {\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n\n if (!error) {\n lastThrownError = null;\n } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer, we couldn't clear out the value without\n // forcing another re-render, which we don't want.\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true; // TODO This is hacky and not how `uSES` is meant to be used\n // Trigger the React `useSyncExternalStore` subscriber\n\n additionalSubscribeListener();\n }\n }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n const unsubscribeWrapper = () => {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n\n if (lastThrownError) {\n // It's possible that we caught an error due to a bad mapState function, but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly, but\n // if we ever do those wrong, this throw will surface the error in our tests.\n // In that case, throw the error from here so it doesn't get lost.\n throw lastThrownError;\n }\n };\n\n return unsubscribeWrapper;\n} // Reducer initial state creation for our update reducer\n\n\nconst initStateUpdates = () => EMPTY_ARRAY;\n\nfunction strictEqual(a, b) {\n return a === b;\n}\n/**\r\n * Infers the type of props that a connector will inject into a component.\r\n */\n\n\nlet hasWarnedAboutDeprecatedPureOption = false;\n/**\r\n * Connects a React component to a Redux store.\r\n *\r\n * - Without arguments, just wraps the component, without changing the behavior / props\r\n *\r\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\r\n * is to override ownProps (as stated in the docs), so what remains is everything that's\r\n * not a state or dispatch prop\r\n *\r\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\r\n * should be valid component props, because it depends on mergeProps implementation.\r\n * As such, it is the user's responsibility to extend ownProps interface from state or\r\n * dispatch props or both when applicable\r\n *\r\n * @param mapStateToProps A function that extracts values from state\r\n * @param mapDispatchToProps Setup for dispatching actions\r\n * @param mergeProps Optional callback to merge state and dispatch props together\r\n * @param options Options for configuring the connection\r\n *\r\n */\n\nfunction connect(mapStateToProps, mapDispatchToProps, mergeProps, {\n // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n // @ts-ignore\n pure,\n areStatesEqual = strictEqual,\n areOwnPropsEqual = shallowEqual,\n areStatePropsEqual = shallowEqual,\n areMergedPropsEqual = shallowEqual,\n // use React's forwardRef to expose a ref of the wrapped component\n forwardRef = false,\n // the context consumer to use\n context = ReactReduxContext\n} = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n hasWarnedAboutDeprecatedPureOption = true;\n warning('The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component');\n }\n }\n\n const Context = context;\n const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);\n const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);\n const initMergeProps = mergePropsFactory(mergeProps);\n const shouldHandleStateChanges = Boolean(mapStateToProps);\n\n const wrapWithConnect = WrappedComponent => {\n if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n throw new Error(`You must pass a component to the function returned by connect. Instead received ${stringifyComponent(WrappedComponent)}`);\n }\n\n const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n const displayName = `Connect(${wrappedComponentName})`;\n const selectorFactoryOptions = {\n shouldHandleStateChanges,\n displayName,\n wrappedComponentName,\n WrappedComponent,\n // @ts-ignore\n initMapStateToProps,\n // @ts-ignore\n initMapDispatchToProps,\n initMergeProps,\n areStatesEqual,\n areStatePropsEqual,\n areOwnPropsEqual,\n areMergedPropsEqual\n };\n\n function ConnectFunction(props) {\n const [propsContext, reactReduxForwardedRef, wrapperProps] = useMemo(() => {\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs, alternate context instances).\n // To maintain the wrapperProps object reference, memoize this destructuring.\n const {\n reactReduxForwardedRef\n } = props,\n wrapperProps = _objectWithoutPropertiesLoose(props, _excluded);\n\n return [props.context, reactReduxForwardedRef, wrapperProps];\n }, [props]);\n const ContextToUse = useMemo(() => {\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && // @ts-ignore\n isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n const contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(`Could not find \"store\" in the context of ` + `\"${displayName}\". Either wrap the root component in a , ` + `or pass a custom React context provider to and the corresponding ` + `React context consumer to ${displayName} in connect options.`);\n } // Based on the previous check, one of these must be true\n\n\n const store = didStoreComeFromProps ? props.store : contextValue.store;\n const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;\n const childPropsSelector = useMemo(() => {\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return defaultSelectorFactory(store.dispatch, selectorFactoryOptions);\n }, [store]);\n const [subscription, notifyNestedSubs] = useMemo(() => {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n const subscription = createSubscription(store, didStoreComeFromProps ? undefined : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n const notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n return [subscription, notifyNestedSubs];\n }, [store, didStoreComeFromProps, contextValue]); // Determine what {store, subscription} value should be put into nested context, if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n const overriddenContextValue = useMemo(() => {\n if (didStoreComeFromProps) {\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n } // Otherwise, put this component's subscription instance into context, so that\n // connected descendants won't update until after this component is done\n\n\n return _extends({}, contextValue, {\n subscription\n });\n }, [didStoreComeFromProps, contextValue, subscription]); // Set up refs to coordinate values between the subscription effect and the render logic\n\n const lastChildProps = useRef();\n const lastWrapperProps = useRef(wrapperProps);\n const childPropsFromStoreUpdate = useRef();\n const renderIsScheduled = useRef(false);\n const isProcessingDispatch = useRef(false);\n const isMounted = useRef(false);\n const latestSubscriptionCallbackError = useRef();\n useIsomorphicLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n const actualChildPropsSelector = useMemo(() => {\n const selector = () => {\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However, we may have gotten new wrapper props after that\n // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n } // TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(), wrapperProps);\n };\n\n return selector;\n }, [store, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning, since neither will run anyway.\n\n const subscribeForReact = useMemo(() => {\n const subscribe = reactListener => {\n if (!subscription) {\n return () => {};\n }\n\n return subscribeUpdates(shouldHandleStateChanges, store, subscription, // @ts-ignore\n childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, reactListener);\n };\n\n return subscribe;\n }, [subscription]);\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs]);\n let actualChildProps;\n\n try {\n actualChildProps = useSyncExternalStore( // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n subscribeForReact, // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n actualChildPropsSelector, getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector);\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n ;\n err.message += `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`;\n }\n\n throw err;\n }\n\n useIsomorphicLayoutEffect(() => {\n latestSubscriptionCallbackError.current = undefined;\n childPropsFromStoreUpdate.current = undefined;\n lastChildProps.current = actualChildProps;\n }); // Now that all that's done, we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n const renderedWrappedComponent = useMemo(() => {\n return (\n /*#__PURE__*/\n // @ts-ignore\n React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n ref: reactReduxForwardedRef\n }))\n );\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n const renderedChild = useMemo(() => {\n if (shouldHandleStateChanges) {\n // If this component is subscribed to store updates, we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance, and putting a different value into the context.\n return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n value: overriddenContextValue\n }, renderedWrappedComponent);\n }\n\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n }\n\n const _Connect = React.memo(ConnectFunction);\n\n // Add a hacky cast to get the right output type\n const Connect = _Connect;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n\n if (forwardRef) {\n const _forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n // @ts-ignore\n return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n reactReduxForwardedRef: ref\n }));\n });\n\n const forwarded = _forwarded;\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return hoistStatics(forwarded, WrappedComponent);\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n\n return wrapWithConnect;\n}\n\nexport default connect;","export var KEY_PREFIX = 'persist:';\nexport var FLUSH = 'persist/FLUSH';\nexport var REHYDRATE = 'persist/REHYDRATE';\nexport var PAUSE = 'persist/PAUSE';\nexport var PERSIST = 'persist/PERSIST';\nexport var PURGE = 'persist/PURGE';\nexport var REGISTER = 'persist/REGISTER';\nexport var DEFAULT_VERSION = -1;","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\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; }\n\n/*\n autoMergeLevel1: \n - merges 1 level of substate\n - skips substate if already modified\n*/\nexport default function autoMergeLevel1(inboundState, originalState, reducedState, _ref) {\n var debug = _ref.debug;\n\n var newState = _objectSpread({}, reducedState); // only rehydrate if inboundState exists and is an object\n\n\n if (inboundState && _typeof(inboundState) === 'object') {\n Object.keys(inboundState).forEach(function (key) {\n // ignore _persist data\n if (key === '_persist') return; // if reducer modifies substate, skip auto rehydration\n\n if (originalState[key] !== reducedState[key]) {\n if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist/stateReconciler: sub state for key `%s` modified, skipping.', key);\n return;\n } // otherwise hard set the new value\n\n\n newState[key] = inboundState[key];\n });\n }\n\n if (process.env.NODE_ENV !== 'production' && debug && inboundState && _typeof(inboundState) === 'object') console.log(\"redux-persist/stateReconciler: rehydrated keys '\".concat(Object.keys(inboundState).join(', '), \"'\"));\n return newState;\n}","import { KEY_PREFIX, REHYDRATE } from './constants';\n// @TODO remove once flow < 0.63 support is no longer required.\nexport default function createPersistoid(config) {\n // defaults\n var blacklist = config.blacklist || null;\n var whitelist = config.whitelist || null;\n var transforms = config.transforms || [];\n var throttle = config.throttle || 0;\n var storageKey = \"\".concat(config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX).concat(config.key);\n var storage = config.storage;\n var serialize;\n\n if (config.serialize === false) {\n serialize = function serialize(x) {\n return x;\n };\n } else if (typeof config.serialize === 'function') {\n serialize = config.serialize;\n } else {\n serialize = defaultSerialize;\n }\n\n var writeFailHandler = config.writeFailHandler || null; // initialize stateful values\n\n var lastState = {};\n var stagedState = {};\n var keysToProcess = [];\n var timeIterator = null;\n var writePromise = null;\n\n var update = function update(state) {\n // add any changed keys to the queue\n Object.keys(state).forEach(function (key) {\n if (!passWhitelistBlacklist(key)) return; // is keyspace ignored? noop\n\n if (lastState[key] === state[key]) return; // value unchanged? noop\n\n if (keysToProcess.indexOf(key) !== -1) return; // is key already queued? noop\n\n keysToProcess.push(key); // add key to queue\n }); //if any key is missing in the new state which was present in the lastState,\n //add it for processing too\n\n Object.keys(lastState).forEach(function (key) {\n if (state[key] === undefined && passWhitelistBlacklist(key) && keysToProcess.indexOf(key) === -1 && lastState[key] !== undefined) {\n keysToProcess.push(key);\n }\n }); // start the time iterator if not running (read: throttle)\n\n if (timeIterator === null) {\n timeIterator = setInterval(processNextKey, throttle);\n }\n\n lastState = state;\n };\n\n function processNextKey() {\n if (keysToProcess.length === 0) {\n if (timeIterator) clearInterval(timeIterator);\n timeIterator = null;\n return;\n }\n\n var key = keysToProcess.shift();\n var endState = transforms.reduce(function (subState, transformer) {\n return transformer.in(subState, key, lastState);\n }, lastState[key]);\n\n if (endState !== undefined) {\n try {\n stagedState[key] = serialize(endState);\n } catch (err) {\n console.error('redux-persist/createPersistoid: error serializing state', err);\n }\n } else {\n //if the endState is undefined, no need to persist the existing serialized content\n delete stagedState[key];\n }\n\n if (keysToProcess.length === 0) {\n writeStagedState();\n }\n }\n\n function writeStagedState() {\n // cleanup any removed keys just before write.\n Object.keys(stagedState).forEach(function (key) {\n if (lastState[key] === undefined) {\n delete stagedState[key];\n }\n });\n writePromise = storage.setItem(storageKey, serialize(stagedState)).catch(onWriteFail);\n }\n\n function passWhitelistBlacklist(key) {\n if (whitelist && whitelist.indexOf(key) === -1 && key !== '_persist') return false;\n if (blacklist && blacklist.indexOf(key) !== -1) return false;\n return true;\n }\n\n function onWriteFail(err) {\n // @TODO add fail handlers (typically storage full)\n if (writeFailHandler) writeFailHandler(err);\n\n if (err && process.env.NODE_ENV !== 'production') {\n console.error('Error storing data', err);\n }\n }\n\n var flush = function flush() {\n while (keysToProcess.length !== 0) {\n processNextKey();\n }\n\n return writePromise || Promise.resolve();\n }; // return `persistoid`\n\n\n return {\n update: update,\n flush: flush\n };\n} // @NOTE in the future this may be exposed via config\n\nfunction defaultSerialize(data) {\n return JSON.stringify(data);\n}","import { KEY_PREFIX } from './constants';\nexport default function getStoredState(config) {\n var transforms = config.transforms || [];\n var storageKey = \"\".concat(config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX).concat(config.key);\n var storage = config.storage;\n var debug = config.debug;\n var deserialize;\n\n if (config.deserialize === false) {\n deserialize = function deserialize(x) {\n return x;\n };\n } else if (typeof config.deserialize === 'function') {\n deserialize = config.deserialize;\n } else {\n deserialize = defaultDeserialize;\n }\n\n return storage.getItem(storageKey).then(function (serialized) {\n if (!serialized) return undefined;else {\n try {\n var state = {};\n var rawState = deserialize(serialized);\n Object.keys(rawState).forEach(function (key) {\n state[key] = transforms.reduceRight(function (subState, transformer) {\n return transformer.out(subState, key, rawState);\n }, deserialize(rawState[key]));\n });\n return state;\n } catch (err) {\n if (process.env.NODE_ENV !== 'production' && debug) console.log(\"redux-persist/getStoredState: Error restoring data \".concat(serialized), err);\n throw err;\n }\n }\n });\n}\n\nfunction defaultDeserialize(serial) {\n return JSON.parse(serial);\n}","import { KEY_PREFIX } from './constants';\nexport default function purgeStoredState(config) {\n var storage = config.storage;\n var storageKey = \"\".concat(config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX).concat(config.key);\n return storage.removeItem(storageKey, warnIfRemoveError);\n}\n\nfunction warnIfRemoveError(err) {\n if (err && process.env.NODE_ENV !== 'production') {\n console.error('redux-persist/purgeStoredState: Error purging data stored state', err);\n }\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\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; }\n\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; }\n\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; }\n\nimport { FLUSH, PAUSE, PERSIST, PURGE, REHYDRATE, DEFAULT_VERSION } from './constants';\nimport autoMergeLevel1 from './stateReconciler/autoMergeLevel1';\nimport createPersistoid from './createPersistoid';\nimport defaultGetStoredState from './getStoredState';\nimport purgeStoredState from './purgeStoredState';\nvar DEFAULT_TIMEOUT = 5000;\n/*\n @TODO add validation / handling for:\n - persisting a reducer which has nested _persist\n - handling actions that fire before reydrate is called\n*/\n\nexport default function persistReducer(config, baseReducer) {\n if (process.env.NODE_ENV !== 'production') {\n if (!config) throw new Error('config is required for persistReducer');\n if (!config.key) throw new Error('key is required in persistor config');\n if (!config.storage) throw new Error(\"redux-persist: config.storage is required. Try using one of the provided storage engines `import storage from 'redux-persist/lib/storage'`\");\n }\n\n var version = config.version !== undefined ? config.version : DEFAULT_VERSION;\n var debug = config.debug || false;\n var stateReconciler = config.stateReconciler === undefined ? autoMergeLevel1 : config.stateReconciler;\n var getStoredState = config.getStoredState || defaultGetStoredState;\n var timeout = config.timeout !== undefined ? config.timeout : DEFAULT_TIMEOUT;\n var _persistoid = null;\n var _purge = false;\n var _paused = true;\n\n var conditionalUpdate = function conditionalUpdate(state) {\n // update the persistoid only if we are rehydrated and not paused\n state._persist.rehydrated && _persistoid && !_paused && _persistoid.update(state);\n return state;\n };\n\n return function (state, action) {\n var _ref = state || {},\n _persist = _ref._persist,\n rest = _objectWithoutProperties(_ref, [\"_persist\"]); // $FlowIgnore need to update State type\n\n\n var restState = rest;\n\n if (action.type === PERSIST) {\n var _sealed = false;\n\n var _rehydrate = function _rehydrate(payload, err) {\n // dev warning if we are already sealed\n if (process.env.NODE_ENV !== 'production' && _sealed) console.error(\"redux-persist: rehydrate for \\\"\".concat(config.key, \"\\\" called after timeout.\"), payload, err); // only rehydrate if we are not already sealed\n\n if (!_sealed) {\n action.rehydrate(config.key, payload, err);\n _sealed = true;\n }\n };\n\n timeout && setTimeout(function () {\n !_sealed && _rehydrate(undefined, new Error(\"redux-persist: persist timed out for persist key \\\"\".concat(config.key, \"\\\"\")));\n }, timeout); // @NOTE PERSIST resumes if paused.\n\n _paused = false; // @NOTE only ever create persistoid once, ensure we call it at least once, even if _persist has already been set\n\n if (!_persistoid) _persistoid = createPersistoid(config); // @NOTE PERSIST can be called multiple times, noop after the first\n\n if (_persist) {\n // We still need to call the base reducer because there might be nested\n // uses of persistReducer which need to be aware of the PERSIST action\n return _objectSpread({}, baseReducer(restState, action), {\n _persist: _persist\n });\n }\n\n if (typeof action.rehydrate !== 'function' || typeof action.register !== 'function') throw new Error('redux-persist: either rehydrate or register is not a function on the PERSIST action. This can happen if the action is being replayed. This is an unexplored use case, please open an issue and we will figure out a resolution.');\n action.register(config.key);\n getStoredState(config).then(function (restoredState) {\n var migrate = config.migrate || function (s, v) {\n return Promise.resolve(s);\n };\n\n migrate(restoredState, version).then(function (migratedState) {\n _rehydrate(migratedState);\n }, function (migrateErr) {\n if (process.env.NODE_ENV !== 'production' && migrateErr) console.error('redux-persist: migration error', migrateErr);\n\n _rehydrate(undefined, migrateErr);\n });\n }, function (err) {\n _rehydrate(undefined, err);\n });\n return _objectSpread({}, baseReducer(restState, action), {\n _persist: {\n version: version,\n rehydrated: false\n }\n });\n } else if (action.type === PURGE) {\n _purge = true;\n action.result(purgeStoredState(config));\n return _objectSpread({}, baseReducer(restState, action), {\n _persist: _persist\n });\n } else if (action.type === FLUSH) {\n action.result(_persistoid && _persistoid.flush());\n return _objectSpread({}, baseReducer(restState, action), {\n _persist: _persist\n });\n } else if (action.type === PAUSE) {\n _paused = true;\n } else if (action.type === REHYDRATE) {\n // noop on restState if purging\n if (_purge) return _objectSpread({}, restState, {\n _persist: _objectSpread({}, _persist, {\n rehydrated: true\n }) // @NOTE if key does not match, will continue to default else below\n\n });\n\n if (action.key === config.key) {\n var reducedState = baseReducer(restState, action);\n var inboundState = action.payload; // only reconcile state if stateReconciler and inboundState are both defined\n\n var reconciledRest = stateReconciler !== false && inboundState !== undefined ? stateReconciler(inboundState, state, reducedState, config) : reducedState;\n\n var _newState = _objectSpread({}, reconciledRest, {\n _persist: _objectSpread({}, _persist, {\n rehydrated: true\n })\n });\n\n return conditionalUpdate(_newState);\n }\n } // if we have not already handled PERSIST, straight passthrough\n\n\n if (!_persist) return baseReducer(state, action); // run base reducer:\n // is state modified ? return original : return updated\n\n var newState = baseReducer(restState, action);\n if (newState === restState) return state;\n return conditionalUpdate(_objectSpread({}, newState, {\n _persist: _persist\n }));\n };\n}","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\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; }\n\nimport { createStore } from 'redux';\nimport { FLUSH, PAUSE, PERSIST, PURGE, REGISTER, REHYDRATE } from './constants';\nvar initialState = {\n registry: [],\n bootstrapped: false\n};\n\nvar persistorReducer = function persistorReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case REGISTER:\n return _objectSpread({}, state, {\n registry: [].concat(_toConsumableArray(state.registry), [action.key])\n });\n\n case REHYDRATE:\n var firstIndex = state.registry.indexOf(action.key);\n\n var registry = _toConsumableArray(state.registry);\n\n registry.splice(firstIndex, 1);\n return _objectSpread({}, state, {\n registry: registry,\n bootstrapped: registry.length === 0\n });\n\n default:\n return state;\n }\n};\n\nexport default function persistStore(store, options, cb) {\n // help catch incorrect usage of passing PersistConfig in as PersistorOptions\n if (process.env.NODE_ENV !== 'production') {\n var optionsToTest = options || {};\n var bannedKeys = ['blacklist', 'whitelist', 'transforms', 'storage', 'keyPrefix', 'migrate'];\n bannedKeys.forEach(function (k) {\n if (!!optionsToTest[k]) console.error(\"redux-persist: invalid option passed to persistStore: \\\"\".concat(k, \"\\\". You may be incorrectly passing persistConfig into persistStore, whereas it should be passed into persistReducer.\"));\n });\n }\n\n var boostrappedCb = cb || false;\n\n var _pStore = createStore(persistorReducer, initialState, options && options.enhancer ? options.enhancer : undefined);\n\n var register = function register(key) {\n _pStore.dispatch({\n type: REGISTER,\n key: key\n });\n };\n\n var rehydrate = function rehydrate(key, payload, err) {\n var rehydrateAction = {\n type: REHYDRATE,\n payload: payload,\n err: err,\n key: key // dispatch to `store` to rehydrate and `persistor` to track result\n\n };\n store.dispatch(rehydrateAction);\n\n _pStore.dispatch(rehydrateAction);\n\n if (boostrappedCb && persistor.getState().bootstrapped) {\n boostrappedCb();\n boostrappedCb = false;\n }\n };\n\n var persistor = _objectSpread({}, _pStore, {\n purge: function purge() {\n var results = [];\n store.dispatch({\n type: PURGE,\n result: function result(purgeResult) {\n results.push(purgeResult);\n }\n });\n return Promise.all(results);\n },\n flush: function flush() {\n var results = [];\n store.dispatch({\n type: FLUSH,\n result: function result(flushResult) {\n results.push(flushResult);\n }\n });\n return Promise.all(results);\n },\n pause: function pause() {\n store.dispatch({\n type: PAUSE\n });\n },\n persist: function persist() {\n store.dispatch({\n type: PERSIST,\n register: register,\n rehydrate: rehydrate\n });\n }\n });\n\n if (!(options && options.manualPersist)) {\n persistor.persist();\n }\n\n return persistor;\n}","import { createSlice } from '@reduxjs/toolkit';\nimport { PURGE } from 'redux-persist';\n\nconst initialState = {\n isLoading: true\n};\n\nconst isLoadingSlice = createSlice({\n name: 'isLoading',\n initialState,\n reducers: {\n setIsLoading: (state, { payload }) => {\n state.isLoading = payload.isLoading;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst { actions, reducer } = isLoadingSlice;\n\nexport const { setIsLoading } = actions;\n\nexport default reducer;\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export enum AttributionModelTypes {\n FirstClick = 'FirstClickAttributionModel',\n LastClick = 'LastClickAttributionModel',\n Linear = 'LinearAttributionModel',\n PositionBased = 'PositionalAttributionModel',\n TimeDecay = 'TimeDecayAttributionModel',\n DataDriven = 'DataDrivenAttributionModel',\n Impressions = 'HybridImpressionsAttributionModel'\n}\n","import { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport { AttributionModelTypes } from 'common/constants/attribution-model-types';\n\nexport const attributeModelDropDownRoutes = [\n {\n key: AttributionModelTypes.FirstClick,\n label: 'First Click',\n isActive: true\n },\n {\n key: AttributionModelTypes.LastClick,\n label: 'Last Click',\n isActive: false\n },\n { key: AttributionModelTypes.Linear, label: 'Linear', isActive: false },\n {\n key: AttributionModelTypes.PositionBased,\n label: 'Position Based',\n isActive: false\n },\n {\n key: AttributionModelTypes.TimeDecay,\n label: 'Time Decay',\n isActive: false\n },\n {\n key: AttributionModelTypes.Impressions,\n label: 'DDA & Impressions',\n isActive: false,\n pocOnly: true\n }\n] as DropDownItemType[];\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nexport default function _regeneratorRuntime() {\n \"use strict\";\n /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n\n _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n };\n\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return generator._invoke = function (innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }(innerFn, self, context), generator;\n }\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n exports.wrap = wrap;\n var ContinueSentinel = {};\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {}\n\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n\n reject(record.arg);\n }\n\n var previousPromise;\n\n this._invoke = function (method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n };\n }\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (undefined === method) {\n if (context.delegate = null, \"throw\" === context.method) {\n if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) {\n if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n }\n\n return next.value = undefined, next.done = !0, next;\n };\n\n return next.next = next;\n }\n }\n\n return {\n next: doneResult\n };\n }\n\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n }\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n }\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","import { useEffect, useRef, useMemo } from 'react'\r\nimport type { SerializeQueryArgs } from '@reduxjs/toolkit/dist/query/defaultSerializeQueryArgs'\r\nimport type { EndpointDefinition } from '@reduxjs/toolkit/dist/query/endpointDefinitions'\r\n\r\nexport function useStableQueryArgs(\r\n queryArgs: T,\r\n serialize: SerializeQueryArgs,\r\n endpointDefinition: EndpointDefinition,\r\n endpointName: string\r\n) {\r\n const incoming = useMemo(\r\n () => ({\r\n queryArgs,\r\n serialized:\r\n typeof queryArgs == 'object'\r\n ? serialize({ queryArgs, endpointDefinition, endpointName })\r\n : queryArgs,\r\n }),\r\n [queryArgs, serialize, endpointDefinition, endpointName]\r\n )\r\n const cache = useRef(incoming)\r\n useEffect(() => {\r\n if (cache.current.serialized !== incoming.serialized) {\r\n cache.current = incoming\r\n }\r\n }, [incoming])\r\n\r\n return cache.current.serialized === incoming.serialized\r\n ? cache.current.queryArgs\r\n : queryArgs\r\n}\r\n","export const UNINITIALIZED_VALUE = Symbol()\r\nexport type UninitializedValue = typeof UNINITIALIZED_VALUE\r\n","import { useEffect, useRef } from 'react'\r\nimport { shallowEqual } from 'react-redux'\r\n\r\nexport function useShallowStableValue(value: T) {\r\n const cache = useRef(value)\r\n useEffect(() => {\r\n if (!shallowEqual(cache.current, value)) {\r\n cache.current = value\r\n }\r\n }, [value])\r\n\r\n return shallowEqual(cache.current, value) ? cache.current : value\r\n}\r\n","import type { AnyAction, ThunkAction, ThunkDispatch } from '@reduxjs/toolkit'\r\nimport { createSelector } from '@reduxjs/toolkit'\r\nimport type { Selector } from '@reduxjs/toolkit'\r\nimport type { DependencyList } from 'react'\r\nimport {\r\n useCallback,\r\n useDebugValue,\r\n useEffect,\r\n useLayoutEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react'\r\nimport { QueryStatus, skipToken } from '@reduxjs/toolkit/query'\r\nimport type {\r\n QuerySubState,\r\n SubscriptionOptions,\r\n QueryKeys,\r\n RootState,\r\n} from '@reduxjs/toolkit/dist/query/core/apiState'\r\nimport type {\r\n EndpointDefinitions,\r\n MutationDefinition,\r\n QueryDefinition,\r\n QueryArgFrom,\r\n ResultTypeFrom,\r\n} from '@reduxjs/toolkit/dist/query/endpointDefinitions'\r\nimport type {\r\n QueryResultSelectorResult,\r\n MutationResultSelectorResult,\r\n SkipToken,\r\n} from '@reduxjs/toolkit/dist/query/core/buildSelectors'\r\nimport type {\r\n QueryActionCreatorResult,\r\n MutationActionCreatorResult,\r\n} from '@reduxjs/toolkit/dist/query/core/buildInitiate'\r\nimport type { SerializeQueryArgs } from '@reduxjs/toolkit/dist/query/defaultSerializeQueryArgs'\r\nimport { shallowEqual } from 'react-redux'\r\nimport type { Api, ApiContext } from '@reduxjs/toolkit/dist/query/apiTypes'\r\nimport type {\r\n Id,\r\n NoInfer,\r\n Override,\r\n} from '@reduxjs/toolkit/dist/query/tsHelpers'\r\nimport type {\r\n ApiEndpointMutation,\r\n ApiEndpointQuery,\r\n CoreModule,\r\n PrefetchOptions,\r\n} from '@reduxjs/toolkit/dist/query/core/module'\r\nimport type { ReactHooksModuleOptions } from './module'\r\nimport { useStableQueryArgs } from './useSerializedStableValue'\r\nimport type { UninitializedValue } from './constants'\r\nimport { UNINITIALIZED_VALUE } from './constants'\r\nimport { useShallowStableValue } from './useShallowStableValue'\r\nimport type { BaseQueryFn } from '../baseQueryTypes'\r\n\r\n// Copy-pasted from React-Redux\r\nexport const useIsomorphicLayoutEffect =\r\n typeof window !== 'undefined' &&\r\n typeof window.document !== 'undefined' &&\r\n typeof window.document.createElement !== 'undefined'\r\n ? useLayoutEffect\r\n : useEffect\r\n\r\nexport interface QueryHooks<\r\n Definition extends QueryDefinition\r\n> {\r\n useQuery: UseQuery\r\n useLazyQuery: UseLazyQuery\r\n useQuerySubscription: UseQuerySubscription\r\n useLazyQuerySubscription: UseLazyQuerySubscription\r\n useQueryState: UseQueryState\r\n}\r\n\r\nexport interface MutationHooks<\r\n Definition extends MutationDefinition\r\n> {\r\n useMutation: UseMutation\r\n}\r\n\r\n/**\r\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\r\n *\r\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\r\n *\r\n * This hook combines the functionality of both [`useQueryState`](#usequerystate) and [`useQuerySubscription`](#usequerysubscription) together, and is intended to be used in the majority of situations.\r\n *\r\n * #### Features\r\n *\r\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\r\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\r\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\r\n * - Returns the latest request status and cached data from the Redux store\r\n * - Re-renders as the request status changes and data becomes available\r\n */\r\nexport type UseQuery> = <\r\n R extends Record = UseQueryStateDefaultResult\r\n>(\r\n arg: QueryArgFrom | SkipToken,\r\n options?: UseQuerySubscriptionOptions & UseQueryStateOptions\r\n) => UseQueryHookResult\r\n\r\nexport type UseQueryHookResult<\r\n D extends QueryDefinition,\r\n R = UseQueryStateDefaultResult\r\n> = UseQueryStateResult & UseQuerySubscriptionResult\r\n\r\n/**\r\n * Helper type to manually type the result\r\n * of the `useQuery` hook in userland code.\r\n */\r\nexport type TypedUseQueryHookResult<\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n R = UseQueryStateDefaultResult<\r\n QueryDefinition\r\n >\r\n> = TypedUseQueryStateResult &\r\n TypedUseQuerySubscriptionResult\r\n\r\ninterface UseQuerySubscriptionOptions extends SubscriptionOptions {\r\n /**\r\n * Prevents a query from automatically running.\r\n *\r\n * @remarks\r\n * When `skip` is true (or `skipToken` is passed in as `arg`):\r\n *\r\n * - **If the query has cached data:**\r\n * * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\r\n * * The query will have a status of `uninitialized`\r\n * * If `skip: false` is set after the initial load, the cached result will be used\r\n * - **If the query does not have cached data:**\r\n * * The query will have a status of `uninitialized`\r\n * * The query will not exist in the state when viewed with the dev tools\r\n * * The query will not automatically fetch on mount\r\n * * The query will not automatically run when additional components with the same query are added that do run\r\n *\r\n * @example\r\n * ```tsx\r\n * // codeblock-meta title=\"Skip example\"\r\n * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\r\n * const { data, error, status } = useGetPokemonByNameQuery(name, {\r\n * skip,\r\n * });\r\n *\r\n * return (\r\n *
\r\n * {name} - {status}\r\n *
\r\n * );\r\n * };\r\n * ```\r\n */\r\n skip?: boolean\r\n /**\r\n * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\r\n * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\r\n * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\r\n * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\r\n *\r\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\r\n */\r\n refetchOnMountOrArgChange?: boolean | number\r\n}\r\n\r\n/**\r\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.\r\n *\r\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\r\n *\r\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useQuery`](#usequery) or [`useQueryState`](#usequerystate).\r\n *\r\n * #### Features\r\n *\r\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\r\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\r\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\r\n */\r\nexport type UseQuerySubscription<\r\n D extends QueryDefinition\r\n> = (\r\n arg: QueryArgFrom | SkipToken,\r\n options?: UseQuerySubscriptionOptions\r\n) => UseQuerySubscriptionResult\r\n\r\nexport type UseQuerySubscriptionResult<\r\n D extends QueryDefinition\r\n> = Pick, 'refetch'>\r\n\r\n/**\r\n * Helper type to manually type the result\r\n * of the `useQuerySubscription` hook in userland code.\r\n */\r\nexport type TypedUseQuerySubscriptionResult<\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn\r\n> = UseQuerySubscriptionResult<\r\n QueryDefinition\r\n>\r\n\r\nexport type UseLazyQueryLastPromiseInfo<\r\n D extends QueryDefinition\r\n> = {\r\n lastArg: QueryArgFrom\r\n}\r\n\r\n/**\r\n * A React hook similar to [`useQuery`](#usequery), but with manual control over when the data fetching occurs.\r\n *\r\n * This hook includes the functionality of [`useLazyQuerySubscription`](#uselazyquerysubscription).\r\n *\r\n * #### Features\r\n *\r\n * - Manual control over firing a request to retrieve data\r\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\r\n * - Returns the latest request status and cached data from the Redux store\r\n * - Re-renders as the request status changes and data becomes available\r\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\r\n *\r\n * #### Note\r\n *\r\n * When the trigger function returned from a LazyQuery is called, it always initiates a new request to the server even if there is cached data. Set `preferCacheValue`(the second argument to the function) as `true` if you want it to immediately return a cached value if one exists.\r\n */\r\nexport type UseLazyQuery> = <\r\n R extends Record = UseQueryStateDefaultResult\r\n>(\r\n options?: SubscriptionOptions & Omit, 'skip'>\r\n) => [\r\n LazyQueryTrigger,\r\n UseQueryStateResult,\r\n UseLazyQueryLastPromiseInfo\r\n]\r\n\r\nexport type LazyQueryTrigger> = {\r\n /**\r\n * Triggers a lazy query.\r\n *\r\n * By default, this will start a new request even if there is already a value in the cache.\r\n * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\r\n *\r\n * @remarks\r\n * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\r\n *\r\n * @example\r\n * ```ts\r\n * // codeblock-meta title=\"Using .unwrap with async await\"\r\n * try {\r\n * const payload = await getUserById(1).unwrap();\r\n * console.log('fulfilled', payload)\r\n * } catch (error) {\r\n * console.error('rejected', error);\r\n * }\r\n * ```\r\n */\r\n (\r\n arg: QueryArgFrom,\r\n preferCacheValue?: boolean\r\n ): QueryActionCreatorResult\r\n}\r\n\r\n/**\r\n * A React hook similar to [`useQuerySubscription`](#usequerysubscription), but with manual control over when the data fetching occurs.\r\n *\r\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useLazyQuery`](#uselazyquery).\r\n *\r\n * #### Features\r\n *\r\n * - Manual control over firing a request to retrieve data\r\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\r\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\r\n */\r\nexport type UseLazyQuerySubscription<\r\n D extends QueryDefinition\r\n> = (\r\n options?: SubscriptionOptions\r\n) => readonly [LazyQueryTrigger, QueryArgFrom | UninitializedValue]\r\n\r\nexport type QueryStateSelector<\r\n R extends Record,\r\n D extends QueryDefinition\r\n> = (state: UseQueryStateDefaultResult) => R\r\n\r\n/**\r\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\r\n *\r\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useQuery`](#usequery) or [`useQuerySubscription`](#usequerysubscription).\r\n *\r\n * #### Features\r\n *\r\n * - Returns the latest request status and cached data from the Redux store\r\n * - Re-renders as the request status changes and data becomes available\r\n */\r\nexport type UseQueryState> = <\r\n R extends Record = UseQueryStateDefaultResult\r\n>(\r\n arg: QueryArgFrom | SkipToken,\r\n options?: UseQueryStateOptions\r\n) => UseQueryStateResult\r\n\r\nexport type UseQueryStateOptions<\r\n D extends QueryDefinition,\r\n R extends Record\r\n> = {\r\n /**\r\n * Prevents a query from automatically running.\r\n *\r\n * @remarks\r\n * When skip is true:\r\n *\r\n * - **If the query has cached data:**\r\n * * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\r\n * * The query will have a status of `uninitialized`\r\n * * If `skip: false` is set after skipping the initial load, the cached result will be used\r\n * - **If the query does not have cached data:**\r\n * * The query will have a status of `uninitialized`\r\n * * The query will not exist in the state when viewed with the dev tools\r\n * * The query will not automatically fetch on mount\r\n * * The query will not automatically run when additional components with the same query are added that do run\r\n *\r\n * @example\r\n * ```ts\r\n * // codeblock-meta title=\"Skip example\"\r\n * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\r\n * const { data, error, status } = useGetPokemonByNameQuery(name, {\r\n * skip,\r\n * });\r\n *\r\n * return (\r\n *
\r\n * {name} - {status}\r\n *
\r\n * );\r\n * };\r\n * ```\r\n */\r\n skip?: boolean\r\n /**\r\n * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\r\n * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\r\n * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\r\n *\r\n * @example\r\n * ```ts\r\n * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\r\n * function PostsList() {\r\n * const { data: posts } = api.useGetPostsQuery();\r\n *\r\n * return (\r\n *
    \r\n * {posts?.data?.map((post) => (\r\n * \r\n * ))}\r\n *
\r\n * );\r\n * }\r\n *\r\n * function PostById({ id }: { id: number }) {\r\n * // Will select the post with the given id, and will only rerender if the given posts data changes\r\n * const { post } = api.useGetPostsQuery(undefined, {\r\n * selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\r\n * });\r\n *\r\n * return
  • {post?.name}
  • ;\r\n * }\r\n * ```\r\n */\r\n selectFromResult?: QueryStateSelector\r\n}\r\n\r\nexport type UseQueryStateResult<\r\n _ extends QueryDefinition,\r\n R\r\n> = NoInfer\r\n\r\n/**\r\n * Helper type to manually type the result\r\n * of the `useQueryState` hook in userland code.\r\n */\r\nexport type TypedUseQueryStateResult<\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n R = UseQueryStateDefaultResult<\r\n QueryDefinition\r\n >\r\n> = NoInfer\r\n\r\ntype UseQueryStateBaseResult> =\r\n QuerySubState & {\r\n /**\r\n * Where `data` tries to hold data as much as possible, also re-using\r\n * data from the last arguments passed into the hook, this property\r\n * will always contain the received data from the query, for the current query arguments.\r\n */\r\n currentData?: ResultTypeFrom\r\n /**\r\n * Query has not started yet.\r\n */\r\n isUninitialized: false\r\n /**\r\n * Query is currently loading for the first time. No data yet.\r\n */\r\n isLoading: false\r\n /**\r\n * Query is currently fetching, but might have data from an earlier request.\r\n */\r\n isFetching: false\r\n /**\r\n * Query has data from a successful load.\r\n */\r\n isSuccess: false\r\n /**\r\n * Query is currently in \"error\" state.\r\n */\r\n isError: false\r\n }\r\n\r\ntype UseQueryStateDefaultResult> =\r\n Id<\r\n | Override<\r\n Extract<\r\n UseQueryStateBaseResult,\r\n { status: QueryStatus.uninitialized }\r\n >,\r\n { isUninitialized: true }\r\n >\r\n | Override<\r\n UseQueryStateBaseResult,\r\n | { isLoading: true; isFetching: boolean; data: undefined }\r\n | ({\r\n isSuccess: true\r\n isFetching: true\r\n error: undefined\r\n } & Required<\r\n Pick, 'data' | 'fulfilledTimeStamp'>\r\n >)\r\n | ({\r\n isSuccess: true\r\n isFetching: false\r\n error: undefined\r\n } & Required<\r\n Pick<\r\n UseQueryStateBaseResult,\r\n 'data' | 'fulfilledTimeStamp' | 'currentData'\r\n >\r\n >)\r\n | ({ isError: true } & Required<\r\n Pick, 'error'>\r\n >)\r\n >\r\n > & {\r\n /**\r\n * @deprecated will be removed in the next version\r\n * please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\r\n * and `isUninitialized` flags instead\r\n */\r\n status: QueryStatus\r\n }\r\n\r\nexport type MutationStateSelector<\r\n R extends Record,\r\n D extends MutationDefinition\r\n> = (state: MutationResultSelectorResult) => R\r\n\r\nexport type UseMutationStateOptions<\r\n D extends MutationDefinition,\r\n R extends Record\r\n> = {\r\n selectFromResult?: MutationStateSelector\r\n fixedCacheKey?: string\r\n}\r\n\r\nexport type UseMutationStateResult<\r\n D extends MutationDefinition,\r\n R\r\n> = NoInfer & {\r\n originalArgs?: QueryArgFrom\r\n /**\r\n * Resets the hook state to it's initial `uninitialized` state.\r\n * This will also remove the last result from the cache.\r\n */\r\n reset: () => void\r\n}\r\n\r\n/**\r\n * Helper type to manually type the result\r\n * of the `useMutation` hook in userland code.\r\n */\r\nexport type TypedUseMutationResult<\r\n ResultType,\r\n QueryArg,\r\n BaseQuery extends BaseQueryFn,\r\n R = MutationResultSelectorResult<\r\n MutationDefinition\r\n >\r\n> = UseMutationStateResult<\r\n MutationDefinition,\r\n R\r\n>\r\n\r\n/**\r\n * A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.\r\n *\r\n * #### Features\r\n *\r\n * - Manual control over firing a request to alter data on the server or possibly invalidate the cache\r\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\r\n * - Returns the latest request status and cached data from the Redux store\r\n * - Re-renders as the request status changes and data becomes available\r\n */\r\nexport type UseMutation> = <\r\n R extends Record = MutationResultSelectorResult\r\n>(\r\n options?: UseMutationStateOptions\r\n) => readonly [MutationTrigger, UseMutationStateResult]\r\n\r\nexport type MutationTrigger> =\r\n {\r\n /**\r\n * Triggers the mutation and returns a Promise.\r\n * @remarks\r\n * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\r\n *\r\n * @example\r\n * ```ts\r\n * // codeblock-meta title=\"Using .unwrap with async await\"\r\n * try {\r\n * const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\r\n * console.log('fulfilled', payload)\r\n * } catch (error) {\r\n * console.error('rejected', error);\r\n * }\r\n * ```\r\n */\r\n (arg: QueryArgFrom): MutationActionCreatorResult\r\n }\r\n\r\nconst defaultQueryStateSelector: QueryStateSelector = (x) => x\r\nconst defaultMutationStateSelector: MutationStateSelector = (x) => x\r\n\r\n/**\r\n * Wrapper around `defaultQueryStateSelector` to be used in `useQuery`.\r\n * We want the initial render to already come back with\r\n * `{ isUninitialized: false, isFetching: true, isLoading: true }`\r\n * to prevent that the library user has to do an additional check for `isUninitialized`/\r\n */\r\nconst noPendingQueryStateSelector: QueryStateSelector = (\r\n selected\r\n) => {\r\n if (selected.isUninitialized) {\r\n return {\r\n ...selected,\r\n isUninitialized: false,\r\n isFetching: true,\r\n isLoading: selected.data !== undefined ? false : true,\r\n status: QueryStatus.pending,\r\n } as any\r\n }\r\n return selected\r\n}\r\n\r\ntype GenericPrefetchThunk = (\r\n endpointName: any,\r\n arg: any,\r\n options: PrefetchOptions\r\n) => ThunkAction\r\n\r\n/**\r\n *\r\n * @param opts.api - An API with defined endpoints to create hooks for\r\n * @param opts.moduleOptions.batch - The version of the `batchedUpdates` function to be used\r\n * @param opts.moduleOptions.useDispatch - The version of the `useDispatch` hook to be used\r\n * @param opts.moduleOptions.useSelector - The version of the `useSelector` hook to be used\r\n * @returns An object containing functions to generate hooks based on an endpoint\r\n */\r\nexport function buildHooks({\r\n api,\r\n moduleOptions: {\r\n batch,\r\n useDispatch,\r\n useSelector,\r\n useStore,\r\n unstable__sideEffectsInRender,\r\n },\r\n serializeQueryArgs,\r\n context,\r\n}: {\r\n api: Api\r\n moduleOptions: Required\r\n serializeQueryArgs: SerializeQueryArgs\r\n context: ApiContext\r\n}) {\r\n const usePossiblyImmediateEffect: (\r\n effect: () => void | undefined,\r\n deps?: DependencyList\r\n ) => void = unstable__sideEffectsInRender ? (cb) => cb() : useEffect\r\n\r\n return { buildQueryHooks, buildMutationHook, usePrefetch }\r\n\r\n function queryStatePreSelector(\r\n currentState: QueryResultSelectorResult,\r\n lastResult: UseQueryStateDefaultResult | undefined,\r\n queryArgs: any\r\n ): UseQueryStateDefaultResult {\r\n // if we had a last result and the current result is uninitialized,\r\n // we might have called `api.util.resetApiState`\r\n // in this case, reset the hook\r\n if (lastResult?.endpointName && currentState.isUninitialized) {\r\n const { endpointName } = lastResult\r\n const endpointDefinition = context.endpointDefinitions[endpointName]\r\n if (\r\n serializeQueryArgs({\r\n queryArgs: lastResult.originalArgs,\r\n endpointDefinition,\r\n endpointName,\r\n }) ===\r\n serializeQueryArgs({\r\n queryArgs,\r\n endpointDefinition,\r\n endpointName,\r\n })\r\n )\r\n lastResult = undefined\r\n }\r\n\r\n // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\r\n let data = currentState.isSuccess ? currentState.data : lastResult?.data\r\n if (data === undefined) data = currentState.data\r\n\r\n const hasData = data !== undefined\r\n\r\n // isFetching = true any time a request is in flight\r\n const isFetching = currentState.isLoading\r\n // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\r\n const isLoading = !hasData && isFetching\r\n // isSuccess = true when data is present\r\n const isSuccess = currentState.isSuccess || (isFetching && hasData)\r\n\r\n return {\r\n ...currentState,\r\n data,\r\n currentData: currentState.data,\r\n isFetching,\r\n isLoading,\r\n isSuccess,\r\n } as UseQueryStateDefaultResult\r\n }\r\n\r\n function usePrefetch>(\r\n endpointName: EndpointName,\r\n defaultOptions?: PrefetchOptions\r\n ) {\r\n const dispatch = useDispatch>()\r\n const stableDefaultOptions = useShallowStableValue(defaultOptions)\r\n\r\n return useCallback(\r\n (arg: any, options?: PrefetchOptions) =>\r\n dispatch(\r\n (api.util.prefetch as GenericPrefetchThunk)(endpointName, arg, {\r\n ...stableDefaultOptions,\r\n ...options,\r\n })\r\n ),\r\n [endpointName, dispatch, stableDefaultOptions]\r\n )\r\n }\r\n\r\n function buildQueryHooks(name: string): QueryHooks {\r\n const useQuerySubscription: UseQuerySubscription = (\r\n arg: any,\r\n {\r\n refetchOnReconnect,\r\n refetchOnFocus,\r\n refetchOnMountOrArgChange,\r\n skip = false,\r\n pollingInterval = 0,\r\n } = {}\r\n ) => {\r\n const { initiate } = api.endpoints[name] as ApiEndpointQuery<\r\n QueryDefinition,\r\n Definitions\r\n >\r\n const dispatch = useDispatch>()\r\n const stableArg = useStableQueryArgs(\r\n skip ? skipToken : arg,\r\n serializeQueryArgs,\r\n context.endpointDefinitions[name],\r\n name\r\n )\r\n const stableSubscriptionOptions = useShallowStableValue({\r\n refetchOnReconnect,\r\n refetchOnFocus,\r\n pollingInterval,\r\n })\r\n\r\n const promiseRef = useRef>()\r\n\r\n let { queryCacheKey, requestId } = promiseRef.current || {}\r\n const subscriptionRemoved = useSelector(\r\n (state: RootState) =>\r\n !!queryCacheKey &&\r\n !!requestId &&\r\n !state[api.reducerPath].subscriptions[queryCacheKey]?.[requestId]\r\n )\r\n\r\n usePossiblyImmediateEffect((): void | undefined => {\r\n promiseRef.current = undefined\r\n }, [subscriptionRemoved])\r\n\r\n usePossiblyImmediateEffect((): void | undefined => {\r\n const lastPromise = promiseRef.current\r\n if (\r\n typeof process !== 'undefined' &&\r\n process.env.NODE_ENV === 'removeMeOnCompilation'\r\n ) {\r\n // this is only present to enforce the rule of hooks to keep `isSubscribed` in the dependency array\r\n console.log(subscriptionRemoved)\r\n }\r\n\r\n if (stableArg === skipToken) {\r\n lastPromise?.unsubscribe()\r\n promiseRef.current = undefined\r\n return\r\n }\r\n\r\n const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions\r\n\r\n if (!lastPromise || lastPromise.arg !== stableArg) {\r\n lastPromise?.unsubscribe()\r\n const promise = dispatch(\r\n initiate(stableArg, {\r\n subscriptionOptions: stableSubscriptionOptions,\r\n forceRefetch: refetchOnMountOrArgChange,\r\n })\r\n )\r\n promiseRef.current = promise\r\n } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {\r\n lastPromise.updateSubscriptionOptions(stableSubscriptionOptions)\r\n }\r\n }, [\r\n dispatch,\r\n initiate,\r\n refetchOnMountOrArgChange,\r\n stableArg,\r\n stableSubscriptionOptions,\r\n subscriptionRemoved,\r\n ])\r\n\r\n useEffect(() => {\r\n return () => {\r\n promiseRef.current?.unsubscribe()\r\n promiseRef.current = undefined\r\n }\r\n }, [])\r\n\r\n return useMemo(\r\n () => ({\r\n /**\r\n * A method to manually refetch data for the query\r\n */\r\n refetch: () => void promiseRef.current?.refetch(),\r\n }),\r\n []\r\n )\r\n }\r\n\r\n const useLazyQuerySubscription: UseLazyQuerySubscription = ({\r\n refetchOnReconnect,\r\n refetchOnFocus,\r\n pollingInterval = 0,\r\n } = {}) => {\r\n const { initiate } = api.endpoints[name] as ApiEndpointQuery<\r\n QueryDefinition,\r\n Definitions\r\n >\r\n const dispatch = useDispatch>()\r\n\r\n const [arg, setArg] = useState(UNINITIALIZED_VALUE)\r\n const promiseRef = useRef | undefined>()\r\n\r\n const stableSubscriptionOptions = useShallowStableValue({\r\n refetchOnReconnect,\r\n refetchOnFocus,\r\n pollingInterval,\r\n })\r\n\r\n usePossiblyImmediateEffect(() => {\r\n const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions\r\n\r\n if (stableSubscriptionOptions !== lastSubscriptionOptions) {\r\n promiseRef.current?.updateSubscriptionOptions(\r\n stableSubscriptionOptions\r\n )\r\n }\r\n }, [stableSubscriptionOptions])\r\n\r\n const subscriptionOptionsRef = useRef(stableSubscriptionOptions)\r\n usePossiblyImmediateEffect(() => {\r\n subscriptionOptionsRef.current = stableSubscriptionOptions\r\n }, [stableSubscriptionOptions])\r\n\r\n const trigger = useCallback(\r\n function (arg: any, preferCacheValue = false) {\r\n let promise: QueryActionCreatorResult\r\n\r\n batch(() => {\r\n promiseRef.current?.unsubscribe()\r\n\r\n promiseRef.current = promise = dispatch(\r\n initiate(arg, {\r\n subscriptionOptions: subscriptionOptionsRef.current,\r\n forceRefetch: !preferCacheValue,\r\n })\r\n )\r\n\r\n setArg(arg)\r\n })\r\n\r\n return promise!\r\n },\r\n [dispatch, initiate]\r\n )\r\n\r\n /* cleanup on unmount */\r\n useEffect(() => {\r\n return () => {\r\n promiseRef?.current?.unsubscribe()\r\n }\r\n }, [])\r\n\r\n /* if \"cleanup on unmount\" was triggered from a fast refresh, we want to reinstate the query */\r\n useEffect(() => {\r\n if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {\r\n trigger(arg, true)\r\n }\r\n }, [arg, trigger])\r\n\r\n return useMemo(() => [trigger, arg] as const, [trigger, arg])\r\n }\r\n\r\n const useQueryState: UseQueryState = (\r\n arg: any,\r\n { skip = false, selectFromResult = defaultQueryStateSelector } = {}\r\n ) => {\r\n const { select } = api.endpoints[name] as ApiEndpointQuery<\r\n QueryDefinition,\r\n Definitions\r\n >\r\n const stableArg = useStableQueryArgs(\r\n skip ? skipToken : arg,\r\n serializeQueryArgs,\r\n context.endpointDefinitions[name],\r\n name\r\n )\r\n\r\n type ApiRootState = Parameters>[0]\r\n\r\n const lastValue = useRef()\r\n\r\n const selectDefaultResult: Selector = useMemo(\r\n () =>\r\n createSelector(\r\n [\r\n select(stableArg),\r\n (_: ApiRootState, lastResult: any) => lastResult,\r\n (_: ApiRootState) => stableArg,\r\n ],\r\n queryStatePreSelector\r\n ),\r\n [select, stableArg]\r\n )\r\n\r\n const querySelector: Selector = useMemo(\r\n () => createSelector([selectDefaultResult], selectFromResult),\r\n [selectDefaultResult, selectFromResult]\r\n )\r\n\r\n const currentState = useSelector(\r\n (state: RootState) =>\r\n querySelector(state, lastValue.current),\r\n shallowEqual\r\n )\r\n\r\n const store = useStore>()\r\n const newLastValue = selectDefaultResult(\r\n store.getState(),\r\n lastValue.current\r\n )\r\n useIsomorphicLayoutEffect(() => {\r\n lastValue.current = newLastValue\r\n }, [newLastValue])\r\n\r\n return currentState\r\n }\r\n\r\n return {\r\n useQueryState,\r\n useQuerySubscription,\r\n useLazyQuerySubscription,\r\n useLazyQuery(options) {\r\n const [trigger, arg] = useLazyQuerySubscription(options)\r\n const queryStateResults = useQueryState(arg, {\r\n ...options,\r\n skip: arg === UNINITIALIZED_VALUE,\r\n })\r\n\r\n const info = useMemo(() => ({ lastArg: arg }), [arg])\r\n return useMemo(\r\n () => [trigger, queryStateResults, info],\r\n [trigger, queryStateResults, info]\r\n )\r\n },\r\n useQuery(arg, options) {\r\n const querySubscriptionResults = useQuerySubscription(arg, options)\r\n const queryStateResults = useQueryState(arg, {\r\n selectFromResult:\r\n arg === skipToken || options?.skip\r\n ? undefined\r\n : noPendingQueryStateSelector,\r\n ...options,\r\n })\r\n\r\n const { data, status, isLoading, isSuccess, isError, error } = queryStateResults;\r\n useDebugValue({ data, status, isLoading, isSuccess, isError, error });\r\n\r\n return useMemo(\r\n () => ({ ...queryStateResults, ...querySubscriptionResults }),\r\n [queryStateResults, querySubscriptionResults]\r\n )\r\n },\r\n }\r\n }\r\n\r\n function buildMutationHook(name: string): UseMutation {\r\n return ({\r\n selectFromResult = defaultMutationStateSelector,\r\n fixedCacheKey,\r\n } = {}) => {\r\n const { select, initiate } = api.endpoints[name] as ApiEndpointMutation<\r\n MutationDefinition,\r\n Definitions\r\n >\r\n const dispatch = useDispatch>()\r\n const [promise, setPromise] = useState>()\r\n\r\n useEffect(\r\n () => () => {\r\n if (!promise?.arg.fixedCacheKey) {\r\n promise?.reset()\r\n }\r\n },\r\n [promise]\r\n )\r\n\r\n const triggerMutation = useCallback(\r\n function (arg: Parameters['0']) {\r\n const promise = dispatch(initiate(arg, { fixedCacheKey }))\r\n setPromise(promise)\r\n return promise\r\n },\r\n [dispatch, initiate, fixedCacheKey]\r\n )\r\n\r\n const { requestId } = promise || {}\r\n const mutationSelector = useMemo(\r\n () =>\r\n createSelector(\r\n [select({ fixedCacheKey, requestId: promise?.requestId })],\r\n selectFromResult\r\n ),\r\n [select, promise, selectFromResult, fixedCacheKey]\r\n )\r\n\r\n const currentState = useSelector(mutationSelector, shallowEqual)\r\n const originalArgs =\r\n fixedCacheKey == null ? promise?.arg.originalArgs : undefined\r\n const reset = useCallback(() => {\r\n batch(() => {\r\n if (promise) {\r\n setPromise(undefined)\r\n }\r\n if (fixedCacheKey) {\r\n dispatch(\r\n api.internalActions.removeMutationResult({\r\n requestId,\r\n fixedCacheKey,\r\n })\r\n )\r\n }\r\n })\r\n }, [dispatch, fixedCacheKey, promise, requestId])\r\n\r\n const { endpointName, data, status, isLoading, isSuccess, isError, error } = currentState;\r\n useDebugValue({ endpointName, data, status, isLoading, isSuccess, isError, error });\r\n\r\n const finalState = useMemo(\r\n () => ({ ...currentState, originalArgs, reset }),\r\n [currentState, originalArgs, reset]\r\n )\r\n\r\n return useMemo(\r\n () => [triggerMutation, finalState] as const,\r\n [triggerMutation, finalState]\r\n )\r\n }\r\n }\r\n}\r\n","export function capitalize(str: string) {\r\n return str.replace(str[0], str[0].toUpperCase())\r\n}\r\n","import type { MutationHooks, QueryHooks } from './buildHooks'\r\nimport { buildHooks } from './buildHooks'\r\nimport { isQueryDefinition, isMutationDefinition } from '../endpointDefinitions'\r\nimport type {\r\n EndpointDefinitions,\r\n QueryDefinition,\r\n MutationDefinition,\r\n QueryArgFrom,\r\n} from '@reduxjs/toolkit/dist/query/endpointDefinitions'\r\nimport type { Api, Module } from '../apiTypes'\r\nimport { capitalize } from '../utils'\r\nimport { safeAssign } from '../tsHelpers'\r\nimport type { BaseQueryFn } from '@reduxjs/toolkit/dist/query/baseQueryTypes'\r\n\r\nimport type { HooksWithUniqueNames } from './versionedTypes'\r\n\r\nimport {\r\n useDispatch as rrUseDispatch,\r\n useSelector as rrUseSelector,\r\n useStore as rrUseStore,\r\n batch as rrBatch,\r\n} from 'react-redux'\r\nimport type { QueryKeys } from '../core/apiState'\r\nimport type { PrefetchOptions } from '../core/module'\r\n\r\nexport const reactHooksModuleName = /* @__PURE__ */ Symbol()\r\nexport type ReactHooksModule = typeof reactHooksModuleName\r\n\r\ndeclare module '@reduxjs/toolkit/dist/query/apiTypes' {\r\n export interface ApiModules<\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n BaseQuery extends BaseQueryFn,\r\n Definitions extends EndpointDefinitions,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n ReducerPath extends string,\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n TagTypes extends string\r\n > {\r\n [reactHooksModuleName]: {\r\n /**\r\n * Endpoints based on the input endpoints provided to `createApi`, containing `select`, `hooks` and `action matchers`.\r\n */\r\n endpoints: {\r\n [K in keyof Definitions]: Definitions[K] extends QueryDefinition<\r\n any,\r\n any,\r\n any,\r\n any,\r\n any\r\n >\r\n ? QueryHooks\r\n : Definitions[K] extends MutationDefinition\r\n ? MutationHooks\r\n : never\r\n }\r\n /**\r\n * A hook that accepts a string endpoint name, and provides a callback that when called, pre-fetches the data for that endpoint.\r\n */\r\n usePrefetch>(\r\n endpointName: EndpointName,\r\n options?: PrefetchOptions\r\n ): (\r\n arg: QueryArgFrom,\r\n options?: PrefetchOptions\r\n ) => void\r\n } & HooksWithUniqueNames\r\n }\r\n}\r\n\r\ntype RR = typeof import('react-redux')\r\n\r\nexport interface ReactHooksModuleOptions {\r\n /**\r\n * The version of the `batchedUpdates` function to be used\r\n */\r\n batch?: RR['batch']\r\n /**\r\n * The version of the `useDispatch` hook to be used\r\n */\r\n useDispatch?: RR['useDispatch']\r\n /**\r\n * The version of the `useSelector` hook to be used\r\n */\r\n useSelector?: RR['useSelector']\r\n /**\r\n * The version of the `useStore` hook to be used\r\n */\r\n useStore?: RR['useStore']\r\n /**\r\n * Enables performing asynchronous tasks immediately within a render.\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * import {\r\n * buildCreateApi,\r\n * coreModule,\r\n * reactHooksModule\r\n * } from '@reduxjs/toolkit/query/react'\r\n *\r\n * const createApi = buildCreateApi(\r\n * coreModule(),\r\n * reactHooksModule({ unstable__sideEffectsInRender: true })\r\n * )\r\n * ```\r\n */\r\n unstable__sideEffectsInRender?: boolean\r\n}\r\n\r\n/**\r\n * Creates a module that generates react hooks from endpoints, for use with `buildCreateApi`.\r\n *\r\n * @example\r\n * ```ts\r\n * const MyContext = React.createContext(null as any);\r\n * const customCreateApi = buildCreateApi(\r\n * coreModule(),\r\n * reactHooksModule({ useDispatch: createDispatchHook(MyContext) })\r\n * );\r\n * ```\r\n *\r\n * @returns A module for use with `buildCreateApi`\r\n */\r\nexport const reactHooksModule = ({\r\n batch = rrBatch,\r\n useDispatch = rrUseDispatch,\r\n useSelector = rrUseSelector,\r\n useStore = rrUseStore,\r\n unstable__sideEffectsInRender = false,\r\n}: ReactHooksModuleOptions = {}): Module => ({\r\n name: reactHooksModuleName,\r\n init(api, { serializeQueryArgs }, context) {\r\n const anyApi = api as any as Api<\r\n any,\r\n Record,\r\n string,\r\n string,\r\n ReactHooksModule\r\n >\r\n const { buildQueryHooks, buildMutationHook, usePrefetch } = buildHooks({\r\n api,\r\n moduleOptions: {\r\n batch,\r\n useDispatch,\r\n useSelector,\r\n useStore,\r\n unstable__sideEffectsInRender,\r\n },\r\n serializeQueryArgs,\r\n context,\r\n })\r\n safeAssign(anyApi, { usePrefetch })\r\n safeAssign(context, { batch })\r\n\r\n return {\r\n injectEndpoint(endpointName, definition) {\r\n if (isQueryDefinition(definition)) {\r\n const {\r\n useQuery,\r\n useLazyQuery,\r\n useLazyQuerySubscription,\r\n useQueryState,\r\n useQuerySubscription,\r\n } = buildQueryHooks(endpointName)\r\n safeAssign(anyApi.endpoints[endpointName], {\r\n useQuery,\r\n useLazyQuery,\r\n useLazyQuerySubscription,\r\n useQueryState,\r\n useQuerySubscription,\r\n })\r\n ;(api as any)[`use${capitalize(endpointName)}Query`] = useQuery\r\n ;(api as any)[`useLazy${capitalize(endpointName)}Query`] =\r\n useLazyQuery\r\n } else if (isMutationDefinition(definition)) {\r\n const useMutation = buildMutationHook(endpointName)\r\n safeAssign(anyApi.endpoints[endpointName], {\r\n useMutation,\r\n })\r\n ;(api as any)[`use${capitalize(endpointName)}Mutation`] = useMutation\r\n }\r\n },\r\n }\r\n },\r\n})\r\n","import { coreModule, buildCreateApi, CreateApi } from '@reduxjs/toolkit/query'\r\nimport { reactHooksModule, reactHooksModuleName } from './module'\r\n\r\nimport type { MutationHooks, QueryHooks } from './buildHooks'\r\nimport type {\r\n EndpointDefinitions,\r\n QueryDefinition,\r\n MutationDefinition,\r\n QueryArgFrom,\r\n} from '@reduxjs/toolkit/dist/query/endpointDefinitions'\r\nimport type { BaseQueryFn } from '@reduxjs/toolkit/dist/query/baseQueryTypes'\r\n\r\nimport type { QueryKeys } from '@reduxjs/toolkit/dist/query/core/apiState'\r\nimport type { PrefetchOptions } from '@reduxjs/toolkit/dist/query/core/module'\r\n\r\nexport * from '@reduxjs/toolkit/query'\r\nexport { ApiProvider } from './ApiProvider'\r\n\r\nconst createApi = /* @__PURE__ */ buildCreateApi(\r\n coreModule(),\r\n reactHooksModule()\r\n)\r\n\r\nexport type {\r\n TypedUseQueryHookResult,\r\n TypedUseQueryStateResult,\r\n TypedUseQuerySubscriptionResult,\r\n TypedUseMutationResult,\r\n} from './buildHooks'\r\nexport { createApi, reactHooksModule }\r\n","import { FetchBaseQueryError } from '@reduxjs/toolkit/dist/query';\nimport { concatErrorCache } from './cacheErrorHandling';\n\nexport const defaultTags = ['UNAUTHORIZED', 'UNKNOWN_ERROR'] as const;\nexport type DefaultTags = 'UNAUTHORIZED' | 'UNKNOWN_ERROR';\n\n/**\n * An individual cache item\n */\nexport interface CacheItem {\n type: T;\n id: ID;\n}\n\n/**\n * A list of cache items, including a LIST entity cache\n */\nexport type CacheList = (\n | CacheItem\n | CacheItem\n | DefaultTags\n)[];\n\nexport type CacheListWithPagination = (\n | CacheItem\n | CacheItem\n | DefaultTags\n)[];\n\ntype InnerProvidesList = <\n Results extends { id: unknown }[],\n Error extends FetchBaseQueryError\n>(\n results: Results | undefined,\n error: Error | undefined\n) => CacheList;\n\nexport const providesListTags =\n (type: T): InnerProvidesList =>\n (results, error) => {\n // is result available?\n if (results) {\n // successful query\n return [\n { type, id: 'LIST' },\n ...results.map(({ id }) => ({ type, id } as const))\n ];\n }\n // Received an error, include an error cache item to the cache list\n return concatErrorCache([{ type, id: 'LIST' }], error);\n };\n\n/**\n * HOF to create an entity cache for a single item using the query argument as the ID.\n *\n * @example\n * ```ts\n * cacheByIdArg('Todo')({ id: 5, message: 'walk the fish' }, undefined, 5)\n * // returns:\n * // [{ type: 'Todo', id: 5 }]\n * ```\n */\nexport const cacheByQueryArg =\n (type: T) =>\n (\n result: Result,\n error: Error,\n id: ID\n ): readonly [CacheItem] =>\n [{ type, id }] as const;\n\n/**\n * HOF to create an entity cache for a single item using the query argument as the ID, where the target property on the query object is provided.\n *\n * @example\n * ```ts\n * cacheByIdArg('Todo', 'siteId')({ siteId: 'ruler', message: 'walk the fish' }, undefined, undefined)\n * // returns:\n * // [{ type: 'Todo', id: 5 }]\n * ```\n */\nexport const cacheByQueryArgProperties =\n (type: T, targetPropNames: string[]) =>\n , Result = undefined, Error = undefined>(\n result: Result,\n error: Error,\n arg: Arg\n ): readonly [CacheItem] =>\n [{ type, id: getGenerateIdForQuery(targetPropNames, arg) }] as const;\n\nconst getGenerateIdForQuery = (\n targetPropNames: string[],\n argumentWithProperties: Record\n) => {\n const keys = targetPropNames.map((prop) => argumentWithProperties[prop]);\n return keys.join('-');\n};\n\n/**\n * HOF to invalidate the 'UNAUTHORIZED' type cache item.\n */\nexport const invalidatesUnauthorized =\n () =>\n (\n result: Result,\n error: Error,\n arg: Arg\n ): ['UNAUTHORIZED'] =>\n ['UNAUTHORIZED'];\n\n/**\n * HOF to invalidate the 'UNKNOWN_ERROR' type cache item.\n */\nexport const invalidatesUnknownErrors =\n () =>\n (\n result: Result,\n error: Error,\n arg: Arg\n ): ['UNKNOWN_ERROR'] =>\n ['UNKNOWN_ERROR'];\n","export enum ExclusionLevel {\n Global = 'Global',\n SiteSpecificManual = 'SiteSpecificManual',\n SiteSpecificAutomatic = 'SiteSpecificAutomatic'\n}\n\nexport enum ExclusionCategory {\n Block = 'Block',\n Ignore = 'Ignore'\n}\n\nexport enum ExclusionTypeLabel {\n IpAddress = 'Ip Address',\n ServerSideRaId = 'Server Side Cookie',\n // UserAgent = 'UserAgent',\n EmailAddress = 'Email Address',\n PhoneNumber = 'Phone Number',\n RaId = 'Ruler Cookie',\n // EmailDomain = 'EmailDomain',\n LandingPageURL = 'Landing Page URL',\n ReferrerURL = 'Referrer URL'\n}\n\nexport enum ExclusionType {\n IpAddress = 'IpAddress',\n ServerSideRaId = 'ServerSideRaId',\n // UserAgent = 'UserAgent',\n EmailAddress = 'EmailAddress',\n PhoneNumber = 'PhoneNumber',\n RaId = 'RaId',\n // EmailDomain = 'EmailDomain',\n LandingPageURL = 'LandingPageURL',\n ReferrerURL = 'ReferrerURL'\n}\n\nexport enum ExclusionMatchTarget {\n RemoteAddress = 'RemoteAddress',\n ServerSideRaId = 'ServerSideRaId',\n Device = 'Device',\n UserAgent = 'UserAgent',\n RaId = 'RaId',\n EmailAddress = 'EmailAddress',\n PhoneNumber = 'PhoneNumber',\n LandingPageURL = 'LandingPageURL',\n ReferrerURL = 'ReferrerURL'\n}\n\nexport enum RuleMatchType {\n Equals = 'Equals',\n Contains = 'Contains'\n}\n\nconst exclusionTypeLabelMap: Record = {\n [ExclusionType.IpAddress]: ExclusionTypeLabel.IpAddress,\n [ExclusionType.ServerSideRaId]: ExclusionTypeLabel.ServerSideRaId,\n [ExclusionType.RaId]: ExclusionTypeLabel.RaId,\n [ExclusionType.EmailAddress]: ExclusionTypeLabel.EmailAddress,\n [ExclusionType.PhoneNumber]: ExclusionTypeLabel.PhoneNumber,\n [ExclusionType.LandingPageURL]: ExclusionTypeLabel.LandingPageURL,\n [ExclusionType.ReferrerURL]: ExclusionTypeLabel.ReferrerURL\n};\n\nconst exclusionTypeLabelToTypeMap: Record = {\n [ExclusionTypeLabel.IpAddress]: ExclusionType.IpAddress,\n [ExclusionTypeLabel.ServerSideRaId]: ExclusionType.ServerSideRaId,\n [ExclusionTypeLabel.RaId]: ExclusionType.RaId,\n [ExclusionTypeLabel.EmailAddress]: ExclusionType.EmailAddress,\n [ExclusionTypeLabel.PhoneNumber]: ExclusionType.PhoneNumber,\n [ExclusionTypeLabel.LandingPageURL]: ExclusionType.LandingPageURL,\n [ExclusionTypeLabel.ReferrerURL]: ExclusionType.ReferrerURL\n};\n\nconst typeMatchTargetMap: Record = {\n [ExclusionTypeLabel.IpAddress]: ExclusionMatchTarget.RemoteAddress,\n [ExclusionTypeLabel.ServerSideRaId]: ExclusionMatchTarget.ServerSideRaId,\n [ExclusionTypeLabel.RaId]: ExclusionMatchTarget.RaId,\n [ExclusionTypeLabel.EmailAddress]: ExclusionMatchTarget.EmailAddress,\n [ExclusionTypeLabel.PhoneNumber]: ExclusionMatchTarget.PhoneNumber,\n [ExclusionTypeLabel.LandingPageURL]: ExclusionMatchTarget.LandingPageURL,\n [ExclusionTypeLabel.ReferrerURL]: ExclusionMatchTarget.ReferrerURL\n};\n\nexport { exclusionTypeLabelToTypeMap };\nexport { exclusionTypeLabelMap };\nexport { typeMatchTargetMap };\n","import {\n cacheByQueryArgProperties,\n defaultTags,\n invalidatesUnauthorized,\n invalidatesUnknownErrors,\n providesListTags\n} from './genericCacheUtils';\nimport { cacheByPaginationQueryArgs } from './paginationCacheUtils';\n\nexport const cacher = {\n defaultTags,\n cacheByQueryArgProperties,\n providesListTags,\n cacheByPaginationQueryArgs,\n invalidatesUnauthorized,\n invalidatesUnknownErrors\n};\n","import { PaginationRequest } from 'features/pagination/types/paginationRequest';\nimport { CacheItem, DefaultTags } from './genericCacheUtils';\n\nexport type CacheListWithPagination = (\n | CacheItem\n | CacheItem\n | DefaultTags\n)[];\n\nexport const cacheByPaginationQueryArgs =\n (type: T) =>\n , Result = undefined, Error = undefined>(\n result: Result,\n error: Error,\n arg: Arg\n ): CacheItem[] =>\n [\n {\n type,\n id: `${arg.page}-${arg.pageSize}-${arg.startDate}-${arg.endDate}-${arg.searchTerm}-${arg.seekValue}-${arg.seekId}`\n }\n ];\n","export function getFileName(headers: Headers): string {\n const contentDisposition = headers.get('content-disposition');\n\n if (!contentDisposition) {\n return '';\n }\n\n const contentDispositionFileName = 'filename=';\n\n const startOfSubstring =\n contentDisposition.indexOf(contentDispositionFileName) +\n contentDispositionFileName.length;\n const endOfSubstring = contentDisposition.indexOf(';', startOfSubstring);\n\n return contentDisposition.substring(startOfSubstring, endOfSubstring);\n}\n","export function downloadFile(file: Blob, fileName: string): void {\n const htmlDownloadTag = document.createElement('a');\n document.body.appendChild(htmlDownloadTag);\n const url = window.URL.createObjectURL(file);\n htmlDownloadTag.href = url;\n htmlDownloadTag.download = fileName;\n htmlDownloadTag.click();\n setTimeout(() => {\n window.URL.revokeObjectURL(url);\n document.body.removeChild(htmlDownloadTag);\n }, 0);\n}\n","/**\n * The code was extracted from:\n * https://github.com/davidchambers/Base64.js\n */\n\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nfunction InvalidCharacterError(message) {\n this.message = message;\n}\n\nInvalidCharacterError.prototype = new Error();\nInvalidCharacterError.prototype.name = \"InvalidCharacterError\";\n\nfunction polyfill(input) {\n var str = String(input).replace(/=+$/, \"\");\n if (str.length % 4 == 1) {\n throw new InvalidCharacterError(\n \"'atob' failed: The string to be decoded is not correctly encoded.\"\n );\n }\n for (\n // initialize result and counters\n var bc = 0, bs, buffer, idx = 0, output = \"\";\n // get next character\n (buffer = str.charAt(idx++));\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer &&\n ((bs = bc % 4 ? bs * 64 + buffer : buffer),\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4) ?\n (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6)))) :\n 0\n ) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n}\n\nexport default (typeof window !== \"undefined\" &&\n window.atob &&\n window.atob.bind(window)) ||\npolyfill;","import atob from \"./atob\";\n\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(\n atob(str).replace(/(.)/g, function(m, p) {\n var code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n })\n );\n}\n\nexport default function(str) {\n var output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw \"Illegal base64url string!\";\n }\n\n try {\n return b64DecodeUnicode(output);\n } catch (err) {\n return atob(output);\n }\n}","\"use strict\";\n\nimport base64_url_decode from \"./base64_url_decode\";\n\nexport function InvalidTokenError(message) {\n this.message = message;\n}\n\nInvalidTokenError.prototype = new Error();\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\n\nexport default function(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified\");\n }\n\n options = options || {};\n var pos = options.header === true ? 0 : 1;\n try {\n return JSON.parse(base64_url_decode(token.split(\".\")[pos]));\n } catch (e) {\n throw new InvalidTokenError(\"Invalid token specified: \" + e.message);\n }\n}","export enum CustomDataKeys {\n MARKETING_SOURCE = 'marketing source',\n MARKETING_CHANNEL = 'marketing channel',\n SOURCE_CATEGORY = 'source category',\n KEYWORD = 'keyword',\n LANDING_PAGE = 'landing page',\n REFERRER = 'referrer',\n UTM_CAMPAIGN = 'utm campaign',\n UTM_MEDIUM = 'utm medium',\n UTM_CONTENT = 'utm content',\n BROWSER = 'browser',\n OPERATOR_SYSTEM = 'operating system',\n DEVICE = 'device',\n UTM_SOURCE = 'utm source',\n UTM_ID = 'utm id',\n CAMPAIGN_ID = 'campaign id'\n}\n","import jwt_decode from 'jwt-decode';\n\nexport interface JwtClaims {\n IsSuperUser: string;\n IsActive: string;\n Sites: string[];\n IsSandboxUser: string;\n}\n\nexport interface ClaimsSite {\n FullURL: string;\n SiteId: string;\n}\n\nexport interface UserDetailClaims {\n FirstName: string;\n LastName: string;\n Email: string;\n UserName: string;\n}\n\nexport const isSuperUser = (jwtToken: string): boolean => {\n const claims = jwt_decode(jwtToken);\n\n return claims.IsSuperUser.toUpperCase() === 'TRUE';\n};\n\nexport const isSandboxUser = (jwtToken: string): boolean => {\n const claims = jwt_decode(jwtToken);\n\n return claims.IsSandboxUser.toUpperCase() === 'TRUE';\n};\n\nexport const getUserDetails = (jwtToken: string): UserDetailClaims => {\n const claims = jwt_decode(jwtToken);\n\n return {\n FirstName: claims.FirstName,\n LastName: claims.LastName,\n Email: claims.Email,\n UserName: claims.UserName\n };\n};\n","import { SerializedError } from '@reduxjs/toolkit';\nimport {\n FetchBaseQueryError,\n createApi,\n fetchBaseQuery\n} from '@reduxjs/toolkit/query/react';\nimport { cacher } from 'app/cacheUtils/cacheIndex';\nimport { RootState } from 'app/store';\nimport { isSandboxUser } from 'common/utils/jwt-helpers';\nimport { isSandboxUrl } from 'common/utils/sandbox-helpers';\n\nexport interface AuthResponse {\n access_token: string;\n scope: string;\n expires_in: number;\n refresh_token: string;\n}\n\nexport interface LoginRequest {\n username: string;\n password: string;\n}\n\nexport const authApi = createApi({\n reducerPath: 'authApi',\n baseQuery: fetchBaseQuery({\n baseUrl: process.env.REACT_APP_LOGIN_URL,\n prepareHeaders: (headers, { getState }) => {\n // By default, if we have a token in the store, let's use that for authenticated requests\n const token: string | null = (getState() as RootState).auth.accessToken;\n if (token != null) {\n headers.set('authorization', `Bearer ${token}`);\n }\n\n return headers;\n }\n }),\n tagTypes: [...cacher.defaultTags, 'AUTHENTICATED'],\n endpoints: (builder) => ({\n login: builder.mutation({\n invalidatesTags: cacher.invalidatesUnauthorized(),\n async queryFn(request, { dispatch }, _, baseQuery) {\n const loginPromise = baseQuery({\n url: 'login',\n method: 'POST',\n body: request\n });\n\n const loginResult = await loginPromise;\n\n const loginError = loginResult.error as\n | FetchBaseQueryError\n | SerializedError\n | undefined;\n\n const isLoginSuccess = loginError == null;\n\n if (!isLoginSuccess) {\n return {\n error: loginError,\n isError: true\n } as any;\n }\n\n const authResponse = loginResult.data as AuthResponse;\n\n const accessToken = authResponse.access_token;\n\n const { data: jwtToken } = await dispatch(\n authApi.endpoints.authenticate.initiate(accessToken)\n );\n\n const isUserSandbox = isSandboxUser(jwtToken!);\n const isUrlSandbox = isSandboxUrl();\n\n const isInvalidDomainLogin =\n (isUserSandbox && !isUrlSandbox) || (!isUserSandbox && isUrlSandbox);\n\n if (isInvalidDomainLogin) {\n return {\n error: {\n originalStatus: 401,\n status: 'Error'\n },\n isError: true\n } as any;\n }\n\n return { data: authResponse };\n }\n }),\n authenticate: builder.query({\n query: (accessTokenOverride?: string) => {\n const authenticateRequest = {\n url: 'authenticate',\n method: 'GET'\n };\n\n if (accessTokenOverride) {\n return {\n ...authenticateRequest,\n headers: new Headers({\n authorization: `Bearer ${accessTokenOverride}`\n })\n };\n }\n\n return authenticateRequest;\n },\n providesTags: ['AUTHENTICATED']\n })\n })\n});\n\nexport const { useLoginMutation, useAuthenticateQuery } = authApi;\n","export const isSandboxUrl = () =>\n window.location.host.toUpperCase().includes('SANDBOX');\n","import { createSelector, createSlice } from '@reduxjs/toolkit';\nimport type { PayloadAction } from '@reduxjs/toolkit';\nimport { authApi, AuthResponse } from 'app/apis/authApi';\nimport { RootState } from 'app/store';\nimport {\n isSandboxUser,\n isSuperUser,\n getUserDetails\n} from 'common/utils/jwt-helpers';\nimport { PURGE } from 'redux-persist';\n\ninterface AuthState {\n accessToken: string | null;\n scope: string | null;\n expiresIn: number | null;\n refreshToken: string | null;\n isAuthenticated: boolean;\n idToken: string | null;\n}\n\nconst LoggedOutState: AuthState = {\n accessToken: null,\n scope: null,\n expiresIn: null,\n refreshToken: null,\n isAuthenticated: false,\n idToken: null\n};\n\nconst initialState = LoggedOutState;\n\nconst authSlice = createSlice({\n name: 'auth',\n initialState,\n reducers: {\n logout: () => {\n return LoggedOutState;\n }\n },\n extraReducers: (builder) => {\n builder\n .addCase(PURGE, (state) => {\n return LoggedOutState;\n })\n .addMatcher(\n authApi.endpoints.login.matchFulfilled,\n (state, { payload: action }: PayloadAction) => {\n state.accessToken = action.access_token;\n state.scope = action.scope;\n state.expiresIn = action.expires_in;\n state.refreshToken = action.refresh_token;\n state.isAuthenticated = true;\n }\n )\n .addMatcher(authApi.endpoints.login.matchPending, (state, action) => {\n console.log('pending', action);\n })\n .addMatcher(authApi.endpoints.login.matchRejected, (state, action) => {\n console.log('rejected', action);\n });\n\n builder.addMatcher(\n authApi.endpoints.authenticate.matchFulfilled,\n (state, action: PayloadAction) => {\n state.idToken = action.payload;\n }\n );\n }\n});\n\nconst { actions, reducer } = authSlice;\n\nexport const { logout } = actions;\n\nexport default reducer;\n\nexport const selectSelf = (state: RootState) => state.auth;\n\nexport const selectIdToken = createSelector(\n selectSelf,\n (state) => state.idToken\n);\n\nexport const selectIsSuperUser = createSelector(selectSelf, (state) => {\n if (state.idToken == null) {\n return false;\n }\n\n return isSuperUser(state.idToken);\n});\n\nexport const selectIsSandboxUser = createSelector(selectSelf, (state) => {\n if (state.idToken == null) {\n return false;\n }\n\n return isSandboxUser(state.idToken);\n});\n\nexport const selectIsAuthenticated = (state: RootState) =>\n state.auth.isAuthenticated;\n\nexport const selectUserDetails = createSelector(selectSelf, (state) => {\n if (state.idToken == null) {\n return {\n FirstName: '',\n LastName: '',\n Email: '',\n UserName: ''\n };\n }\n\n return getUserDetails(state.idToken);\n});\n","export const MetricIdSeperator: string = '-->';\n","import {\n AdvancedReportQueryRequestDto,\n AdvancedReportMetricRow\n} from 'features/advanced-reports/advanced-reports.types';\nimport { MetricIdSeperator } from 'features/advanced-reports/constants/advanced-reports-metric-id-seperator';\nimport { CustomDataKeys } from 'common/constants/custom-data-keys';\nimport {\n AdvancedReportMetricResponse,\n InsightMetricResponse\n} from '../advanced-report-api.types';\nimport { InsightQueryRequestDto } from 'features/insights/types/insights.types';\n\nconst sensitiveMetricTypeNames: string[] = [\n CustomDataKeys.KEYWORD,\n CustomDataKeys.LANDING_PAGE,\n CustomDataKeys.REFERRER,\n CustomDataKeys.UTM_CAMPAIGN,\n CustomDataKeys.UTM_MEDIUM,\n CustomDataKeys.UTM_CONTENT\n];\n\nexport const createMetrics = (\n metric: AdvancedReportMetricResponse,\n request: AdvancedReportQueryRequestDto\n): AdvancedReportMetricRow[] => {\n if (metric.metricTypeNames.length !== request.segmentRequests.length) {\n throw new Error(\n `The number of MetricTypeNames from the Query API does not match the number of SegmentRequests made. MetricTypeNames count: ${metric.metricTypeNames.length} - SegmentRequests count: ${request.segmentRequests.length}.`\n );\n }\n\n const metricRows = metric.metricTypeNames.map(\n (metricTypeName, metricIndex, metricTypeNames) => ({\n metricId: metricTypeNames\n .filter((_, index) => index <= metricIndex)\n .join(MetricIdSeperator),\n metricParentId: metricTypeNames\n .filter((_, index) => index < metricIndex)\n .join(MetricIdSeperator),\n rootAncestorId: metricTypeNames[0],\n metricTypeName,\n isMetricTypeNameSensitive: sensitiveMetricTypeNames.includes(\n request.segmentRequests[metricIndex].segmentCategory\n ),\n metricValue: metric.metricValue,\n depth: metricIndex\n })\n );\n\n return metricRows;\n};\n\nexport const createInsightMetrics = (\n metric: InsightMetricResponse,\n request: InsightQueryRequestDto\n): AdvancedReportMetricRow[] => {\n if (metric.metricTypeNames.length !== request.segmentRequests.length) {\n throw new Error(\n `The number of MetricTypeNames from the Query API does not match the number of SegmentRequests made. MetricTypeNames count: ${metric.metricTypeNames.length} - SegmentRequests count: ${request.segmentRequests.length}.`\n );\n }\n\n const metricRows = metric.metricTypeNames.map(\n (metricTypeName, metricIndex, metricTypeNames) => ({\n metricId: metricTypeNames\n .filter((_, index) => index <= metricIndex)\n .join(MetricIdSeperator),\n metricParentId: metricTypeNames\n .filter((_, index) => index < metricIndex)\n .join(MetricIdSeperator),\n rootAncestorId: metricTypeNames[0],\n metricTypeName,\n isMetricTypeNameSensitive: sensitiveMetricTypeNames.includes(\n request.segmentRequests[metricIndex].segmentCategory\n ),\n metricValue: metric.metricValue,\n depth: metricIndex\n })\n );\n\n return metricRows;\n};\n","export enum TabKey {\n Forms = 'Forms',\n Cost = 'Cost'\n}\n","// disabling as this is an exception case and a linting false positive\n/* eslint-disable @typescript-eslint/no-invalid-void-type */\nimport {\n BaseQueryFn,\n createApi,\n fetchBaseQuery,\n retry\n} from '@reduxjs/toolkit/query/react';\nimport { ConversionCountRequest } from 'common/types/conversionCountRequest';\nimport { CountDataRequest } from 'common/types/CountDataRequest';\nimport { RootState } from 'app/store';\nimport { REHYDRATE } from 'redux-persist';\nimport { PaginationResponse } from 'features/pagination/types/paginationResponse';\nimport { ConversionViewRequest } from 'features/conversions/forms/types/conversionSimpleViewRequest';\nimport { PaginationRequest } from 'features/pagination/types/paginationRequest';\nimport { cacher } from 'app/cacheUtils/cacheIndex';\nimport { getFileName } from 'common/helpers/headers-helper.';\nimport { downloadFile } from 'common/helpers/download-helper';\nimport { MappedRevenueExportRequest } from 'features/revenue/types/MappedRevenueExportRequest';\nimport {\n VisitorDetailRequest,\n VisitorDetailResponse\n} from 'features/visitors/visitorObjects';\nimport { ConversionSimpleViewResponse } from 'features/conversions/forms/types/conversionSimpleViewResponse';\nimport { ConversionDetailedViewResponse } from 'features/conversions/forms/types/converisonDetailedViewResponse';\nimport { MMMSegmentsRequest } from 'features/marketing-mix-modelling/mmmSegmentsRequest';\nimport { MmmModelOutput } from 'features/marketing-mix-modelling/mmmModelOutput';\nimport {\n GetWebhooksResult,\n GetWebhookDataFieldsResult,\n GetWebhookHistoriesResult\n} from 'features/webhooks/webhooks.models';\nimport { GetDataScienceTasksResult } from 'features/data-science/tasks.models';\nimport {\n ConversionInboundCallExportRequest,\n ConversionInboundCallViewResponse\n} from 'features/conversions/calls/conversion-inboundcalls.types';\nimport {\n GetRevenueResponse,\n RevenueByVisitorIdResponse\n} from 'features/revenue/types/get-revenue-response';\nimport {\n GetRevenueRequest,\n RevenueByVisitorIdRequest\n} from 'features/revenue/types/get-revenue-request';\nimport { OpportunityExportRequest } from 'features/opportunities/types/opportunities-export-request';\nimport {\n GetOpportunitiesResponse,\n OpportunitiesByVisitorIdResponse\n} from 'features/opportunities/types/get-opportunities-response';\nimport {\n GetOpportunitiesRequest,\n OpportunitiesByVisitorIdRequest\n} from 'features/opportunities/types/get-opportunities-request';\nimport { ConversionWebExportRequest } from 'features/conversions/forms/types/conversion-web-export-request';\nimport { Exclusion, ExclusionDto } from 'features/exclusions/exclusions.models';\nimport { CallRecordingResult } from 'features/conversions/calls/call-recording/call-recording-types';\nimport { ConversionPath } from 'features/conversions/paths/paths.models';\nimport { exclusionTypeLabelMap } from 'features/exclusions/exclusions.enums';\nimport { selectIsSandboxUser } from 'features/auth/authenticationSlice';\nimport { InsightQueryRequestDto } from 'features/insights/types/insights.types';\nimport { GetInsightResponse } from './advanced-reports/advanced-report-api.types';\nimport { AdvancedReportMetricRow } from 'features/advanced-reports/advanced-reports.types';\nimport { createInsightMetrics } from './advanced-reports/factories/advanced-report-metric-row-factory';\nimport { SegmentationConfig } from 'features/segmentation-config/segmentationConfig.model';\nimport { TabKey } from 'features/segmentation-config/segmentation-config-tab-keys';\n\nexport interface SiteResponse {\n siteId: string;\n fullURL: string;\n suspended: boolean;\n APIKey: string;\n currency: string;\n}\n\nexport interface UserSite {\n id: string;\n label: string;\n currency: string;\n}\n\nexport interface CountResponse {\n [date: string]: number;\n}\n\nexport interface AverageValueResponse {\n averageValue: number;\n}\n\nexport interface VisitorRevenueTotalsResponse {\n percentageDifference: number;\n visitorRevenueTotal: number;\n}\n\nexport interface MetricsRequest {\n siteId: string;\n startDate: string;\n endDate: string;\n conversionFilter: string;\n}\n\nconst handleTransformResponse = (\n response: GetInsightResponse,\n _: unknown,\n request: InsightQueryRequestDto\n): AdvancedReportMetricRow[] => {\n const metrics = response.metrics.flatMap((metric) =>\n createInsightMetrics(metric, request)\n );\n\n return metrics;\n};\n\nconst removeWebTokensFromUrl = (url: string) =>\n url.replace('http://', '').replace('https://', '').replace('www.', '');\n\nconst prepareHeaders = (\n headers: Headers,\n { getState }: { getState: () => unknown }\n) => {\n headers.set('Access-Control-Allow-Origin', '*');\n const token = (getState() as RootState).auth.accessToken;\n if (token != null) {\n headers.set('authorization', `Bearer ${token}`);\n }\n\n return headers;\n};\n\nconst staggeredBaseQuery = retry(\n fetchBaseQuery({\n baseUrl: process.env.REACT_APP_LOCAL_API,\n prepareHeaders\n }),\n { maxRetries: 2 }\n);\n\nconst customBaseQuery: BaseQueryFn = (...baseQueryArgs) => {\n const [args, { getState }] = baseQueryArgs;\n\n const isSandboxUser = selectIsSandboxUser(getState() as RootState);\n\n if (isSandboxUser) {\n return fetchBaseQuery({\n baseUrl: `${process.env.REACT_APP_LOCAL_API?.replace(\n /\\/?$/,\n ''\n )}/sandbox`,\n prepareHeaders\n })(...baseQueryArgs);\n }\n\n if (args.url?.endsWith('/conversion/paths')) {\n return fetchBaseQuery({\n baseUrl: process.env.REACT_APP_LOCAL_API,\n prepareHeaders\n })(...baseQueryArgs);\n }\n\n return staggeredBaseQuery(...baseQueryArgs);\n};\n\nexport const queryApi = createApi({\n keepUnusedDataFor: 3600,\n reducerPath: 'queryApi',\n baseQuery: customBaseQuery,\n extractRehydrationInfo(action, { reducerPath }) {\n if (action.type === REHYDRATE) {\n return action.payload?.[reducerPath];\n }\n },\n tagTypes: [\n ...cacher.defaultTags,\n 'Sites',\n 'Conversion-Metrics',\n 'Revenue-Metrics',\n 'Sales-Metrics',\n 'Cost-Metrics',\n 'Click-Metrics',\n 'Visitor-Count',\n 'Visitor-Detail',\n 'Visitor-Detail-Revenue',\n 'Conversion-Count',\n 'Cost',\n 'Revenue',\n 'Revenue-Average',\n 'Revenue-Average-LTV',\n 'Opportunities',\n 'Sales',\n 'Conversion-Web',\n 'Conversion-Call',\n 'MMM-Segments',\n 'MMM-Segment-Data',\n 'Webhooks',\n 'Exclusions',\n 'WebPageViewSegmentationConfigs',\n 'AdCostSegmentationConfigs',\n 'WebPageViewSegmentationConfig',\n 'AdCostSegmentationConfig'\n ],\n endpoints: (builder) => ({\n refetchErroredQueries: builder.mutation({\n queryFn: () => ({ data: null }),\n invalidatesTags: ['UNKNOWN_ERROR']\n }),\n getSites: builder.query({\n query: () => 'sites',\n providesTags: ['Sites'],\n transformResponse: (response: SiteResponse[]) => {\n return response.map((site) => ({\n id: site.siteId,\n label: removeWebTokensFromUrl(site.fullURL),\n currency: site.currency\n }));\n }\n }),\n getVisitorCount: builder.query({\n query: (request) => {\n return {\n url: `${request.siteId}/visitor/count`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate\n }\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Visitor-Count', [\n 'siteId',\n 'startDate',\n 'endDate'\n ])\n }),\n getMetrics: builder.query({\n query: (request) => {\n return {\n url: `${request.siteId}/visitor/count`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate,\n conversionFilter: request.conversionFilter\n }\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Visitor-Count', [\n 'siteId',\n 'startDate',\n 'endDate',\n 'conversionFilter'\n ])\n }),\n getVisitorDetail: builder.query<\n VisitorDetailResponse,\n VisitorDetailRequest\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/visitor/${request.visitorId}`\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Visitor-Detail', [\n 'siteId',\n 'visitorId'\n ])\n }),\n getConversionCount: builder.query({\n query: (request) => {\n return {\n url: `${request.siteId}/conversion/count`,\n params: {\n conversionType: request.conversionType,\n startDate: request.startDate,\n endDate: request.endDate\n }\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Conversion-Count', [\n 'siteId',\n 'startDate',\n 'endDate',\n 'conversionFilter'\n ])\n }),\n getTotalAdCosts: builder.query({\n query: (request) => {\n return {\n url: `${request.siteId}/adcost/totals`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate,\n currencyCode: request.currencyCode\n }\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Cost', [\n 'siteId',\n 'startDate',\n 'endDate',\n 'currencyCode'\n ])\n }),\n getTotalRevenue: builder.query({\n query: (request) => {\n return {\n url: `${request.siteId}/revenue/totals`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate,\n currencyCode: request.currencyCode\n }\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Revenue', [\n 'siteId',\n 'startDate',\n 'endDate'\n ])\n }),\n getTotalRevenueByVisitorId: builder.query<\n VisitorRevenueTotalsResponse,\n VisitorDetailRequest\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/revenue/totals/${request.visitorId}`,\n params: {\n currencyCode: request.currencyCode\n }\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Visitor-Detail-Revenue', [\n 'siteId',\n 'visitorId'\n ])\n }),\n getAverageRevenueBetweenDates: builder.query({\n query: (request) => {\n return {\n url: `${request.siteId}/revenue/average`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate,\n currencyCode: request.currencyCode\n }\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Revenue-Average', [\n 'siteId',\n 'startDate',\n 'endDate'\n ])\n }),\n getAverageVisitorLifetimeValue: builder.query<\n AverageValueResponse,\n CountDataRequest\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/revenue/average-lifetime-value`,\n params: {\n startDateTimeIso: request.startDate,\n endDateTimeIso: request.endDate,\n currencyCode: request.currencyCode\n }\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Revenue-Average-LTV', [\n 'siteId',\n 'startDate',\n 'endDate'\n ])\n }),\n getCountRevenue: builder.query({\n query: (request) => {\n return {\n url: `${request.siteId}/revenue/count`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate\n }\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('Sales', [\n 'siteId',\n 'startDate',\n 'endDate'\n ])\n }),\n getConversionsExport: builder.mutation({\n query: (request) => {\n return {\n url: `${request.siteId}/conversions/export`,\n params: {\n viewType: request.viewType,\n conversionType: request.conversionType,\n startDate: request.startDate,\n endDate: request.endDate,\n search: request.searchTerm\n },\n cache: 'no-cache',\n responseHandler: async (response: {\n blob: () => any;\n headers: Headers;\n }) => {\n const blob = await response.blob();\n const fileName = getFileName(response.headers);\n\n downloadFile(blob, fileName);\n }\n };\n }\n }),\n getConversionInboundCallExport: builder.mutation<\n Blob,\n ConversionInboundCallExportRequest\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/conversion/inboundcalls/export`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate,\n search: request.searchTerm\n },\n cache: 'no-cache',\n responseHandler: async (response: {\n blob: () => any;\n headers: Headers;\n }) => {\n const blob = await response.blob();\n const fileName = getFileName(response.headers);\n\n downloadFile(blob, fileName);\n }\n };\n }\n }),\n getConversionInboundCallRecordingUrl: builder.query<\n CallRecordingResult,\n { siteId: string; eventId: string }\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/conversion/inboundcalls/${request.eventId}/recording`,\n cache: 'no-cache'\n };\n }\n }),\n getRevenueExport: builder.mutation({\n query: (request) => {\n return {\n url: `${request.siteId}/revenue/export`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate,\n currencyCode: request.currencyCode,\n search: request.searchTerm\n },\n cache: 'no-cache',\n responseHandler: async (response: {\n blob: () => any;\n headers: Headers;\n }) => {\n const blob = await response.blob();\n const fileName = getFileName(response.headers);\n\n downloadFile(blob, fileName);\n }\n };\n }\n }),\n getOpportunitiesExport: builder.mutation({\n query: (request) => {\n return {\n url: `${request.siteId}/opportunities/export`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate,\n currencyCode: request.currencyCode,\n search: request.searchTerm\n },\n cache: 'no-cache',\n responseHandler: async (response: {\n blob: () => any;\n headers: Headers;\n }) => {\n const blob = await response.blob();\n const fileName = getFileName(response.headers);\n\n downloadFile(blob, fileName);\n }\n };\n }\n }),\n getPaginatedConversions: builder.query<\n PaginationResponse<\n ConversionSimpleViewResponse | ConversionDetailedViewResponse\n >,\n PaginationRequest\n >({\n query: (paginationRequest) => {\n return {\n url: `${paginationRequest.requestDetails.siteId}/conversions`,\n params: {\n conversionType: paginationRequest.requestDetails.conversionType,\n viewType: paginationRequest.requestDetails.viewType,\n startDate: paginationRequest.startDate,\n endDate: paginationRequest.endDate,\n page: paginationRequest.page,\n pageSize: paginationRequest.pageSize,\n search: paginationRequest.searchTerm,\n seekId: paginationRequest?.seekId,\n seekValue: paginationRequest?.seekValue,\n seekColumnName: paginationRequest?.seekColumnName,\n seekDirection: paginationRequest?.seekDirection,\n orderDirection: paginationRequest?.orderDirection\n }\n };\n },\n providesTags: cacher.cacheByPaginationQueryArgs('Conversion-Web'),\n transformResponse: (\n baseQueryReturnValue: unknown,\n meta: undefined,\n arg: PaginationRequest\n ) => {\n const typedResponse =\n arg.requestDetails.viewType === 'simple'\n ? (baseQueryReturnValue as PaginationResponse)\n : (baseQueryReturnValue as PaginationResponse);\n\n if (arg.seekDirection === 'pageBackward') {\n typedResponse.data = typedResponse.data.reverse();\n }\n\n return typedResponse;\n }\n }),\n getPaginatedRevenue: builder.query<\n PaginationResponse,\n PaginationRequest\n >({\n query: (paginationRequest) => {\n return {\n url: `${paginationRequest.requestDetails.siteId}/revenue`,\n params: {\n startDate: paginationRequest.startDate,\n endDate: paginationRequest.endDate,\n page: paginationRequest.page,\n pageSize: paginationRequest.pageSize,\n search: paginationRequest.searchTerm,\n seekId: paginationRequest?.seekId,\n seekValue: paginationRequest?.seekValue,\n seekColumnName: paginationRequest?.seekColumnName,\n seekDirection: paginationRequest?.seekDirection,\n orderDirection: paginationRequest?.orderDirection,\n currencyCode: paginationRequest.requestDetails.currencyCode\n }\n };\n },\n providesTags: cacher.cacheByPaginationQueryArgs('Revenue'),\n transformResponse: (\n baseQueryReturnValue: unknown,\n meta: undefined,\n arg: PaginationRequest\n ) => {\n const typedResponse =\n baseQueryReturnValue as PaginationResponse;\n\n if (arg.seekDirection === 'pageBackward') {\n typedResponse.data = typedResponse.data.reverse();\n }\n\n return typedResponse;\n }\n }),\n getPaginatedOpportunities: builder.query<\n PaginationResponse,\n PaginationRequest\n >({\n query: (paginationRequest) => {\n return {\n url: `${paginationRequest.requestDetails.siteId}/opportunities`,\n params: {\n startDate: paginationRequest.startDate,\n endDate: paginationRequest.endDate,\n page: paginationRequest.page,\n pageSize: paginationRequest.pageSize,\n search: paginationRequest.searchTerm,\n seekId: paginationRequest?.seekId,\n seekValue: paginationRequest?.seekValue,\n seekColumnName: paginationRequest?.seekColumnName,\n seekDirection: paginationRequest?.seekDirection,\n orderDirection: paginationRequest?.orderDirection,\n currencyCode: paginationRequest.requestDetails.currencyCode\n }\n };\n },\n providesTags: cacher.cacheByPaginationQueryArgs('Opportunities'),\n transformResponse: (\n baseQueryReturnValue: unknown,\n meta: undefined,\n arg: PaginationRequest\n ) => {\n const typedResponse =\n baseQueryReturnValue as PaginationResponse;\n\n if (arg.seekDirection === 'pageBackward') {\n typedResponse.data = typedResponse.data.reverse();\n }\n\n return typedResponse;\n }\n }),\n getPaginatedConversionInboundCalls: builder.query<\n PaginationResponse,\n PaginationRequest\n >({\n query: (paginationRequest) => {\n return {\n url: `${paginationRequest.requestDetails.siteId}/conversion/inboundcalls`,\n params: {\n startDate: paginationRequest.startDate,\n endDate: paginationRequest.endDate,\n pageSize: paginationRequest.pageSize,\n page: paginationRequest.page,\n search: paginationRequest.searchTerm,\n seekId: paginationRequest?.seekId,\n seekValue: paginationRequest?.seekValue,\n seekColumnName: paginationRequest?.seekColumnName,\n seekDirection: paginationRequest?.seekDirection,\n orderDirection: paginationRequest?.orderDirection\n }\n };\n },\n providesTags: cacher.cacheByPaginationQueryArgs('Conversion-Call'),\n transformResponse: (baseQueryReturnValue, meta, arg) => {\n const response =\n baseQueryReturnValue as PaginationResponse;\n\n const orderedData =\n arg.seekDirection === 'pageBackward'\n ? response.data.reverse()\n : response.data;\n\n const finalResponse: PaginationResponse =\n { ...response, data: orderedData };\n\n return finalResponse;\n }\n }),\n getDataScienceMmmSegments: builder.query({\n query: (request) => {\n return {\n url: `${request.siteId}/data-science/mmm/segments`\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('MMM-Segments', ['siteId'])\n }),\n getDataScienceMmmSegmentData: builder.query<\n MmmModelOutput,\n { siteId: string; segment: string }\n >({\n query: ({ siteId, segment }) => {\n return {\n url: `${siteId}/data-science/mmm/segments/${segment}`\n };\n },\n providesTags: cacher.cacheByQueryArgProperties('MMM-Segment-Data', [\n 'siteId',\n 'segment'\n ]),\n transformResponse: (\n baseQueryReturnValue: unknown,\n meta: undefined,\n arg: { siteId: string; segment: string }\n ) => {\n const typedResponse = baseQueryReturnValue as MmmModelOutput;\n\n const baseOffsets: { [key: string]: number } = {\n '644b77c160b59': 0.6,\n '644b9d48c71da': 0.6,\n '641d914945eb2': 0.85,\n demo: 1\n };\n\n typedResponse.dayMultiplier =\n typedResponse.dayMultiplier * baseOffsets[arg.siteId];\n\n return typedResponse;\n }\n }),\n getWebhooks: builder.query({\n query: ({ siteId }) => `${siteId}/webhooks`,\n providesTags: cacher.cacheByQueryArgProperties('Webhooks', ['siteId'])\n }),\n getWebhookDataFields: builder.query<\n GetWebhookDataFieldsResult,\n { siteId: string; webhookType: string }\n >({\n query: ({ siteId, webhookType }) =>\n `${siteId}/webhooks/${webhookType}/datafields`\n }),\n getWebhookHistories: builder.query<\n GetWebhookHistoriesResult,\n { siteId: string; webhookId: string }\n >({\n query: ({ siteId, webhookId }) =>\n `${siteId}/webhooks/${webhookId}/history`\n }),\n getDataScienceTasks: builder.query<\n GetDataScienceTasksResult,\n { siteId: string }\n >({\n query: ({ siteId }) => `${siteId}/data-science/tasks`\n }),\n getConversionPaths: builder.query<\n ConversionPath[],\n {\n siteId: string;\n startDate: string;\n endDate: string;\n currencyCode: string;\n }\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/conversion/paths`,\n params: {\n startDate: request.startDate,\n endDate: request.endDate,\n currencyCode: request.currencyCode\n }\n };\n }\n }),\n getExclusions: builder.query({\n query: ({ siteId }) => `${siteId}/exclusions`,\n providesTags: cacher.cacheByQueryArgProperties('Exclusions', ['siteId']),\n transformResponse: (baseQueryReturnValue: unknown) => {\n const typedResponse = baseQueryReturnValue as ExclusionDto[];\n return typedResponse.map((exclusion) => ({\n ...exclusion,\n exclusionType: exclusionTypeLabelMap[exclusion.exclusionType]\n }));\n }\n }),\n getRevenueByVisitorId: builder.query<\n RevenueByVisitorIdResponse[],\n RevenueByVisitorIdRequest\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/revenue/${request.visitorId}`,\n params: {\n currencyCode: request.currency\n }\n };\n }\n }),\n getOpportunitiesByVisitorId: builder.query<\n OpportunitiesByVisitorIdResponse[],\n OpportunitiesByVisitorIdRequest\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/opportunities/${request.visitorId}`,\n params: {\n currencyCode: request.currency\n }\n };\n }\n }),\n getInboundCallRecordingUrlByHash: builder.query<\n CallRecordingResult,\n { siteId: string; hash: string }\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/inboundcalls/recording/${request.hash}`,\n cache: 'no-cache'\n };\n }\n }),\n getConversionInfluenceInsights: builder.mutation<\n AdvancedReportMetricRow[],\n InsightQueryRequestDto\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/insights`,\n method: 'POST',\n body: request\n };\n },\n transformResponse: handleTransformResponse\n }),\n getWebPageViewSegmentationConfigs: builder.query<\n SegmentationConfig[],\n { siteId: string }\n >({\n query: (request) => ({\n url: `${request.siteId}/web-touchpoint/segmentation/config/`\n }),\n providesTags: cacher.cacheByQueryArgProperties(\n 'WebPageViewSegmentationConfigs',\n ['siteId']\n )\n }),\n getAdCostSegmentationConfigs: builder.query<\n SegmentationConfig[],\n { siteId: string }\n >({\n query: (request) => ({\n url: `${request.siteId}/adcost/segmentation/config/`\n }),\n providesTags: cacher.cacheByQueryArgProperties(\n 'AdCostSegmentationConfigs',\n ['siteId']\n )\n }),\n getSegmentationConfig: builder.query<\n SegmentationConfig,\n { siteId: string; configId: string; category: TabKey | null }\n >({\n query: ({ siteId, configId, category }) => {\n const isWebPageView = category === TabKey.Forms;\n const domain = isWebPageView ? `web-touchpoint` : `adcost`;\n\n return { url: `${siteId}/${domain}/segmentation/config/${configId}` };\n },\n providesTags: (result, error, { siteId, configId, category }) => {\n const tag =\n category === TabKey.Forms\n ? 'WebPageViewSegmentationConfig'\n : 'AdCostSegmentationConfig';\n\n return [{ type: tag, id: configId, siteId }];\n }\n })\n })\n});\n\nexport const {\n useGetSitesQuery,\n useGetVisitorCountQuery,\n useGetVisitorDetailQuery,\n useGetTotalRevenueByVisitorIdQuery,\n useGetConversionCountQuery,\n useGetTotalAdCostsQuery,\n useGetTotalRevenueQuery,\n useGetCountRevenueQuery,\n useGetAverageRevenueBetweenDatesQuery,\n useGetAverageVisitorLifetimeValueQuery,\n useGetMetricsQuery,\n useGetConversionsExportMutation,\n useGetConversionInboundCallExportMutation,\n useGetRevenueExportMutation,\n useGetOpportunitiesExportMutation,\n useGetPaginatedConversionsQuery,\n useGetPaginatedRevenueQuery,\n useGetPaginatedOpportunitiesQuery,\n useGetPaginatedConversionInboundCallsQuery,\n useGetConversionInboundCallRecordingUrlQuery,\n useGetDataScienceMmmSegmentsQuery,\n useGetDataScienceMmmSegmentDataQuery,\n useGetWebhooksQuery,\n useGetWebhookDataFieldsQuery,\n useGetWebhookHistoriesQuery,\n useGetExclusionsQuery,\n useGetDataScienceTasksQuery,\n useGetConversionPathsQuery,\n usePrefetch,\n useGetOpportunitiesByVisitorIdQuery,\n useGetRevenueByVisitorIdQuery,\n useGetInboundCallRecordingUrlByHashQuery,\n useGetConversionInfluenceInsightsMutation,\n useGetWebPageViewSegmentationConfigsQuery,\n useGetSegmentationConfigQuery,\n useGetAdCostSegmentationConfigsQuery\n} = queryApi;\n","import { createSelector, createSlice } from '@reduxjs/toolkit';\nimport { queryApi } from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\n\nconst defaultSite = {\n id: '',\n label: '',\n currency: undefined\n};\n\nconst initialState: {\n siteId: string;\n siteLabel: string;\n currency?: string;\n} = {\n siteId: defaultSite.id,\n siteLabel: defaultSite.label,\n currency: defaultSite.currency\n};\n\nconst selectedSiteSlice = createSlice({\n name: 'selectedSite',\n initialState,\n reducers: {\n selectSite: (state, { payload }) => {\n state.siteId = payload.id;\n state.siteLabel = payload.label;\n state.currency = payload.currency ? payload.currency : undefined;\n },\n clearSites: (state) => {\n state.currency = '';\n state.siteId = '';\n state.siteLabel = '';\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n builder.addMatcher(\n queryApi.endpoints.getSites.matchFulfilled,\n (state, { payload }) => {\n if (state.siteId === '' && payload.length > 0) {\n state.siteId = payload[0].id;\n state.siteLabel = payload[0].label;\n state.currency = payload[0].currency\n ? payload[0].currency\n : undefined;\n }\n }\n );\n }\n});\n\nconst selectSelf = (state: RootState) => state.selectedSite;\n\nexport const selectSiteId = createSelector(selectSelf, (state) => state.siteId);\n\nexport const selectSiteLabel = createSelector(\n selectSelf,\n (state) => state.siteLabel\n);\n\nconst { actions, reducer } = selectedSiteSlice;\n\nexport const { selectSite, clearSites } = actions;\n\nexport default reducer;\n","import { DropDownItemType } from './dropDownItemType';\n\nexport const doRoutesNeedToBeUpdated = (\n dropDownRoutes: DropDownItemType[],\n keyToSetActive: string\n): boolean => {\n return dropDownRoutes.some(\n (route) => route.key === keyToSetActive && !route.isActive\n );\n};\n\nexport const isActivityTriggerNeeded = (\n dropDownRoutes: DropDownItemType[],\n keyToSetActive: string | undefined\n): boolean => {\n return (\n keyToSetActive !== undefined &&\n doRoutesNeedToBeUpdated(dropDownRoutes, keyToSetActive)\n );\n};\n\nexport const setSelectedDropDownItemAsActive = (\n dropDownRoutes: DropDownItemType[],\n keyToSetActive: string\n): DropDownItemType[] => {\n return dropDownRoutes.map((route) => {\n return {\n ...route,\n isActive: route.key === keyToSetActive\n };\n });\n};\n","import { createSelector, createSlice } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\nconst defaultState = {\n isPocModeActive: false\n};\n\nconst pocToggleSlice = createSlice({\n name: 'pocToggle',\n initialState: defaultState,\n reducers: {\n togglePoc: (state) => {\n state.isPocModeActive = !state.isPocModeActive;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, (state) => {\n return defaultState;\n });\n }\n});\n\nconst selectSelf = (state: RootState) => state.pocToggle;\n\nexport const selectIsPOCModeActive = createSelector(\n selectSelf,\n (state) => state.isPocModeActive\n);\n\nconst { actions, reducer } = pocToggleSlice;\n\nexport const { togglePoc } = actions;\n\nexport default reducer;\n","import { createSelector, createSlice } from '@reduxjs/toolkit';\nimport { attributeModelDropDownRoutes } from './attributeModelRoutes';\nimport { clearSites, selectSite } from 'features/topbar/selectedSiteSlice';\n\nimport { AttributionModelTypes } from 'common/constants/attribution-model-types';\nimport { RootState } from 'app/store';\nimport { setSelectedDropDownItemAsActive } from 'common/components/drop-downs/legacy/dropDownUtils';\nimport { PURGE } from 'redux-persist';\nimport { togglePoc } from 'features/poc/poc-toggle/pocToggleSlice';\n\nconst initialState = {\n availableAttributionModels: attributeModelDropDownRoutes\n};\nconst defaultAttribution = 'FirstClickAttributionModel';\n\nconst availableAttributionModelsSlice = createSlice({\n name: 'availableAttributionModels',\n initialState,\n reducers: {\n selectAttributionModel: (state, { payload }) => {\n state.availableAttributionModels = setSelectedDropDownItemAsActive(\n state.availableAttributionModels,\n payload\n );\n },\n enableImpressionsAttributionModelDefault: (state) => {\n if (\n state.availableAttributionModels.find(\n (model) => model.key === AttributionModelTypes.Impressions\n )\n ) {\n return;\n }\n\n state.availableAttributionModels = [\n ...state.availableAttributionModels,\n {\n key: AttributionModelTypes.Impressions,\n label: 'Impressions',\n isActive: false,\n pocOnly: true\n }\n ];\n }\n },\n extraReducers: (builder) => {\n builder.addCase(clearSites, (state) => {\n state.availableAttributionModels = attributeModelDropDownRoutes;\n });\n builder.addCase(selectSite, (state) => {\n state.availableAttributionModels = attributeModelDropDownRoutes;\n });\n builder.addCase(PURGE, () => initialState);\n builder.addCase(togglePoc, (state) => {\n state.availableAttributionModels =\n state.availableAttributionModels.filter(\n (attributeModelRoute) =>\n attributeModelRoute.key !== AttributionModelTypes.DataDriven\n );\n\n if (\n !state.availableAttributionModels.find(\n (attributeModelRoute) =>\n attributeModelRoute.key === AttributionModelTypes.Impressions\n )\n ) {\n enableImpressionsAttributionModelDefault();\n }\n });\n }\n});\n\nconst selectAttributionModelsWithPocState = (\n state: RootState,\n pocEnabled: boolean\n) => {\n return state.availableAttributionModels.availableAttributionModels.filter(\n (model) => !model.pocOnly || pocEnabled\n );\n};\n\nexport const getAvailableAttributionModels = createSelector(\n selectAttributionModelsWithPocState,\n (attributionModels) => {\n return attributionModels;\n }\n);\n\nexport const getSelectedAttributionModel = createSelector(\n selectAttributionModelsWithPocState,\n (attributionModels) =>\n attributionModels.find((model) => model.isActive)?.key ?? defaultAttribution\n);\n\nexport const { actions, reducer } = availableAttributionModelsSlice;\n\nexport const {\n selectAttributionModel,\n enableImpressionsAttributionModelDefault\n} = actions;\n\nexport default reducer;\n","import { AttributionModelTypes } from 'common/constants/attribution-model-types';\nimport { AttributionCompareModel } from './attribution-compare-model.types';\n\nexport const attributeCompareModels = [\n {\n id: AttributionModelTypes.FirstClick,\n modelName: 'First Click'\n },\n {\n id: AttributionModelTypes.LastClick,\n modelName: 'Last Click'\n },\n { id: AttributionModelTypes.Linear, modelName: 'Linear' },\n {\n id: AttributionModelTypes.PositionBased,\n modelName: 'Position Based'\n },\n { id: AttributionModelTypes.TimeDecay, modelName: 'Time Decay' },\n {\n id: AttributionModelTypes.Impressions,\n modelName: 'DDA & Impressions',\n isPocOnly: true\n }\n] as AttributionCompareModel[];\n","import { queryApi } from 'app/apis/queryApi';\nimport { GetAdvancedReportResponse } from './advanced-report-api.types';\nimport {\n AdvancedReportMetricRow,\n AdvancedReportQueryRequestDto\n} from 'features/advanced-reports/advanced-reports.types';\nimport { createMetrics } from './factories/advanced-report-metric-row-factory';\n\nfunction handleTransformResponse(\n response: GetAdvancedReportResponse,\n _: unknown,\n request: AdvancedReportQueryRequestDto\n): AdvancedReportMetricRow[] {\n const metrics = response.metrics.flatMap((metric) =>\n createMetrics(metric, request)\n );\n\n return metrics;\n}\n\nexport const advancedReportQueryApi = queryApi.injectEndpoints({\n endpoints: (builder) => ({\n getClicksAdvancedReport: builder.mutation<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/web-touchpoint/clicks/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n }),\n getConversionAdvancedReport: builder.mutation<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/conversion/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n }),\n getOpportunityAdvancedReport: builder.mutation<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/opportunities/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n }),\n getRevenueAdvancedReport: builder.mutation<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/revenue/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n }),\n getCostAdvancedReport: builder.mutation<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/adcost/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n }),\n getClicksReport: builder.query<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/web-touchpoint/clicks/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n }),\n getCostReport: builder.query<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/adcost/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n }),\n getConversionReport: builder.query<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/conversion/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n }),\n getRevenueReport: builder.query<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/revenue/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n }),\n getOpportunityReport: builder.query<\n AdvancedReportMetricRow[],\n AdvancedReportQueryRequestDto\n >({\n query: (request) => ({\n url: `${request.siteId}/opportunities/advanced-report`,\n method: 'POST',\n body: request\n }),\n transformResponse: handleTransformResponse\n })\n }),\n overrideExisting: false\n});\n\nexport const {\n useGetClicksAdvancedReportMutation,\n useGetConversionAdvancedReportMutation,\n useGetOpportunityAdvancedReportMutation,\n useGetRevenueAdvancedReportMutation,\n useGetCostAdvancedReportMutation,\n useGetClicksReportQuery,\n useGetCostReportQuery,\n useGetConversionReportQuery,\n useGetRevenueReportQuery,\n useGetOpportunityReportQuery\n} = advancedReportQueryApi;\n","import { Middleware, MiddlewareAPI, createAction } from '@reduxjs/toolkit';\nimport { advancedReportQueryApi } from 'app/apis/advanced-reports/advanced-report-query-api';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\n\nexport const advancerReportsSiteIdChangedHandler: Middleware =\n (api: MiddlewareAPI) => (next) => (action) => {\n if (action.type === selectSite.type) {\n api.dispatch(advancedReportQueryApi.util.resetApiState());\n }\n return next(action);\n };\n\nexport const resetAdvancedReports = createAction('advancedreports/reset');\n","import { createSelector, createSlice } from '@reduxjs/toolkit';\nimport { attributeCompareModels } from './attribution-compare-models';\nimport { clearSites, selectSite } from 'features/topbar/selectedSiteSlice';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\nimport { AttributionModelTypes } from 'common/constants/attribution-model-types';\nimport { AttributionCompareModel } from './attribution-compare-model.types';\nimport { resetAdvancedReports } from 'features/advanced-reports/advanced-reports.middleware';\nimport { togglePoc } from 'features/poc/poc-toggle/pocToggleSlice';\n\nconst initialState = {\n availableAttributionCompareModels: attributeCompareModels,\n activeAttributionCompareModel: AttributionModelTypes.FirstClick,\n isAttributionComparisonActive: false\n};\n\nconst defaultAttributionCompareModel = {\n id: AttributionModelTypes.FirstClick,\n modelName: 'First Click'\n} as AttributionCompareModel;\n\nconst availableAttributionCompareModelsSlice = createSlice({\n name: 'availableAttributionCompareModels',\n initialState,\n reducers: {\n selectAttributionCompareModel: (state, { payload }) => {\n state.activeAttributionCompareModel = payload;\n },\n setDisplayAttributionComparisonData: (state, { payload }) => {\n state.isAttributionComparisonActive = payload;\n },\n enableImpressionsAttributionModelDefault: (state) => {\n if (\n state.availableAttributionCompareModels.find(\n (model) => model.modelName === AttributionModelTypes.Impressions\n )\n ) {\n return;\n }\n\n state.availableAttributionCompareModels = [\n ...state.availableAttributionCompareModels,\n {\n modelName: 'Impressions',\n id: AttributionModelTypes.Impressions,\n isPocOnly: true\n }\n ];\n }\n },\n extraReducers: (builder) => {\n builder.addCase(clearSites, (state) => {\n state.availableAttributionCompareModels = attributeCompareModels;\n });\n builder.addCase(selectSite, (state) => {\n state.availableAttributionCompareModels = attributeCompareModels;\n });\n builder.addCase(PURGE, () => initialState);\n builder.addCase(resetAdvancedReports, () => initialState);\n builder.addCase(togglePoc, (state) => {\n state.availableAttributionCompareModels =\n state.availableAttributionCompareModels.filter(\n (attributeModelRoute) =>\n attributeModelRoute.id !== AttributionModelTypes.DataDriven\n );\n\n if (\n !state.availableAttributionCompareModels.find(\n (attributeModelRoute) =>\n attributeModelRoute.id === AttributionModelTypes.Impressions\n )\n ) {\n enableImpressionsAttributionModelDefault();\n }\n });\n }\n});\n\nconst selectSelf = (state: RootState) =>\n state.availableAttributionCompareModels;\n\nconst selectAttributionModelsWithPocState = (\n state: RootState,\n pocEnabled: boolean\n) => {\n return state.availableAttributionCompareModels.availableAttributionCompareModels.filter(\n (model) => !model.isPocOnly || pocEnabled\n );\n};\n\nexport const getAvailableAttributionCompareModels = createSelector(\n selectAttributionModelsWithPocState,\n (availableAttributionCompareModels) => availableAttributionCompareModels\n);\n\nexport const selectIsAttributionComparisonActive = createSelector(\n selectSelf,\n (state) => {\n return state.isAttributionComparisonActive;\n }\n);\n\nexport const getSelectedAttributionCompareModel = createSelector(\n selectSelf,\n selectAttributionModelsWithPocState,\n (state, availableAttributionCompareModels) =>\n availableAttributionCompareModels.find(\n (model) => model.id === state.activeAttributionCompareModel\n ) ?? defaultAttributionCompareModel\n);\n\nexport const getSelectedAttributionCompareModelString = createSelector(\n selectSelf,\n selectAttributionModelsWithPocState,\n (state, availableAttributionCompareModels) =>\n availableAttributionCompareModels\n .find((model) => model.id === state.activeAttributionCompareModel)\n ?.id.toString() ?? defaultAttributionCompareModel.id.toString()\n);\n\nexport const { actions, reducer } = availableAttributionCompareModelsSlice;\n\nexport const {\n selectAttributionCompareModel,\n setDisplayAttributionComparisonData,\n enableImpressionsAttributionModelDefault\n} = actions;\n\nexport default reducer;\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\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}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct.bind();\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n }\n return dtfCache[zone];\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n if (!ianaZoneCache[name]) {\n ianaZoneCache[name] = new IANAZone(name);\n }\n return ianaZoneCache[name];\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache = {};\n dtfCache = {};\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated This method returns false for some valid IANA names. Use isValidZone instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /** @override **/\n get type() {\n return \"iana\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /** @override **/\n get isValid() {\n return this.valid;\n }\n}\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\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\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}","import { padStart, roundTo, hasRelative, formatOffset } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache[key];\n if (!inf) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache[key] = inf;\n }\n return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache[key];\n if (!inf) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache[key] = inf;\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\n/**\n * @private\n */\n\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n }\n\n static create(locale, numberingSystem, outputCalendar, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar);\n }\n\n constructor(locale, numbering, outputCalendar, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, \"month\"));\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\")\n );\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /** @override **/\n get type() {\n return \"fixed\";\n }\n\n /** @override **/\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /** @override **/\n offsetName() {\n return this.name;\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /** @override **/\n get isUniversal() {\n return true;\n }\n\n /** @override **/\n offset() {\n return this.fixed;\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n const factor = 10 ** digits,\n rounder = towardZero ? Math.trunc : Math.round;\n return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\nexport function weeksInWeekYear(weekYear) {\n const p1 =\n (weekYear +\n Math.floor(weekYear / 4) -\n Math.floor(weekYear / 100) +\n Math.floor(weekYear / 400)) %\n 7,\n last = weekYear - 1,\n p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n return p1 === 4 || p2 === 3 ? 53 : 52;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * Get the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // cut-off year is 0, so all 'yy' are interpreted as current century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 1949; '50' -> 2050\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"w\":\n return \"week\";\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n default:\n return null;\n }\n },\n tokenToString = (lildur) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n return this.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\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\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst 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\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction 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 .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior use the `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat\n * @param opts - On option object to override the formatting. Accepts the same keys as the options parameter of the native `Int.NumberFormat` constructor, as well as `listStyle`.\n * @example\n * ```js\n * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 day, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 day, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 day, 5 hr, 6 min'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see second example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @return {number}\n */\n count(unit = \"milliseconds\") {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit),\n end = this.end.startOf(unit);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort(),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Return whether this Interval engulfs the start and end of the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * @example Info.features() //=> { relative: false }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n units = tokens.map((t) => unitForToken(t, locale)),\n disqualifyingUnit = units.find((t) => t.invalidReason);\n\n if (disqualifyingUnit) {\n return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n } else {\n const [regexString, handlers] = buildRegex(units),\n regex = RegExp(regexString, \"i\"),\n [rawMatches, matches] = match(input, regex, handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return { input, tokens, regex, rawMatches, matches, result, zone, specificOffset };\n }\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nfunction dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = dayOfWeek(year, month, day);\n\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear);\n } else if (weekNumber > weeksInWeekYear(year)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\nexport function hasInvalidWeekData(obj) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.week);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n c += \"-\";\n c += padStart(o.c.day);\n } else {\n c += padStart(o.c.month);\n c += padStart(o.c.day);\n }\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n) {\n let c = padStart(o.c.hour);\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += \":\";\n }\n } else {\n c += padStart(o.c.minute);\n }\n\n if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) {\n c += padStart(o.c.second);\n\n if (o.c.millisecond !== 0 || !suppressMilliseconds) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone),\n loc = Locale.fromObject(opts),\n tsNow = Settings.now();\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = zone.offset(tsNow);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = tsNow;\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n const ot = zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n normalized = normalizeObject(obj, normalizeUnit),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n loc = Locale.fromObject(opts);\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnit),\n settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian({ ...gregorianToWeek(this.c), ...normalized });\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit) {\n if (!this.isValid) return this;\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n o.weekday = 1;\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @return {string}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext);\n c += \"T\";\n c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @return {string}\n */\n toISODate({ format = \"extended\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return toISODate(this, format === \"extended\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n let c = includePrefix ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return adjustedToZone.startOf(unit) <= inputMs && inputMs <= adjustedToZone.endOf(unit);\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Info from \"./info.js\";\nimport Zone from \"./zone.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport InvalidZone from \"./zones/invalidZone.js\";\nimport SystemZone from \"./zones/systemZone.js\";\nimport Settings from \"./settings.js\";\n\nconst VERSION = \"3.4.3\";\n\nexport {\n VERSION,\n DateTime,\n Duration,\n Interval,\n Info,\n Zone,\n FixedOffsetZone,\n IANAZone,\n InvalidZone,\n SystemZone,\n Settings,\n};\n","import { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\n\nexport const RangeRoutes = [\n {\n isActive: false,\n key: 'day',\n label: 'Day'\n },\n {\n isActive: false,\n key: 'week',\n label: 'Week'\n },\n {\n isActive: false,\n key: 'month',\n label: 'Month'\n },\n {\n isActive: false,\n key: 'year',\n label: 'Year'\n }\n] as DropDownItemType[];\n\nexport const RangeRouteMonth = RangeRoutes.find(\n (range) => range.key === 'month'\n) as DropDownItemType;\nexport const RangeRouteWeek = RangeRoutes.find(\n (range) => range.key === 'week'\n) as DropDownItemType;\n\nexport enum DateRangeTypes {\n DAY = 'day',\n WEEK = 'week',\n MONTH = 'month',\n YEAR = 'year'\n}\n","import { DateTime } from 'luxon';\n\nexport const toUtc = (date: Date): Date => {\n const localDateTime = DateTime.fromJSDate(date, {\n zone: Intl.DateTimeFormat().resolvedOptions().timeZone\n });\n\n const utcDateTime = localDateTime.toUTC().toJSDate();\n\n return utcDateTime;\n};\n\nexport const toLocalIso = (date: Date): string => {\n const localDateTime = DateTime.fromJSDate(date, {\n zone: Intl.DateTimeFormat().resolvedOptions().timeZone\n });\n\n return localDateTime.toISODate()!;\n};\n","import { createSelector, createSlice } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { toLocalIso, toUtc } from 'common/utils/date-helpers';\nimport { PURGE } from 'redux-persist';\n\nconst START_DATE = new Date();\nconst END_DATE = new Date();\n\nconst initialState = {\n startDate: toUtc(START_DATE).toISOString(),\n endDate: toUtc(END_DATE).toISOString(),\n key: 'selection'\n} as const;\n\nconst dateRangeSlice = createSlice({\n name: 'dateRange',\n initialState,\n reducers: {\n changeDateRange: (state, { payload }) => {\n state.endDate = payload.endDate;\n state.startDate = payload.startDate;\n state.key = payload.key;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst selectSelf = (state: RootState) => state.dateRange;\n\nexport const getDateRangeAsObjects = createSelector(\n selectSelf,\n (state): DateRangeValue => {\n return {\n startDate: new Date(state.startDate),\n endDate: new Date(state.endDate),\n key: state.key\n };\n }\n);\n\nexport const selectDateRangeLocalIso = createSelector(\n getDateRangeAsObjects,\n (dateRange): DateRangeLocalIso => ({\n startDate: toLocalIso(dateRange.startDate),\n endDate: toLocalIso(dateRange.endDate)\n })\n);\n\nconst { actions, reducer } = dateRangeSlice;\n\nexport const { changeDateRange } = actions;\n\nexport default reducer;\n\nexport interface DateRangeState {\n startDate: string;\n endDate: string;\n key: string;\n}\n\nexport interface DateRangeValue {\n startDate: Date;\n endDate: Date;\n key: string;\n}\n\nexport interface DateRangeLocalIso {\n startDate: string;\n endDate: string;\n}\n","import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { DateRangeTypes } from './chartButtons/constants/RangeRoutes';\nimport { PURGE } from 'redux-persist';\n\nexport interface ChartOptions {\n chartId: string;\n filterLegendKeys: string[];\n selectedChartType: string;\n selectedChartRange: string;\n}\n\nconst defaultChartOptions: ChartOptions = {\n chartId: '',\n filterLegendKeys: [],\n selectedChartType: 'stackedBar',\n selectedChartRange: 'Week'\n};\n\nconst cachedChartOptions: {\n chartOptionsArray: ChartOptions[];\n} = {\n chartOptionsArray: [] as ChartOptions[]\n};\n\nconst chartOptionsSlice = createSlice({\n name: 'chartFilterKeys',\n initialState: cachedChartOptions,\n\n reducers: {\n toggleChartLegendFilter: (\n state,\n {\n payload: { chartId, filterLegendKey }\n }: PayloadAction<{ chartId: string; filterLegendKey: string }>\n ) => {\n const chartOptions = state.chartOptionsArray.find(\n (chartOptions: ChartOptions) => chartOptions.chartId === chartId\n );\n\n if (chartOptions == null) {\n const filterLegendKeys = [filterLegendKey] as string[];\n\n state.chartOptionsArray.push({\n chartId,\n filterLegendKeys,\n selectedChartType: defaultChartOptions.selectedChartType,\n selectedChartRange: defaultChartOptions.selectedChartRange\n });\n } else {\n if (chartOptions.filterLegendKeys.includes(filterLegendKey)) {\n chartOptions.filterLegendKeys = chartOptions.filterLegendKeys.filter(\n (key: string) => key !== filterLegendKey\n ) as [];\n } else {\n chartOptions.filterLegendKeys.push(filterLegendKey);\n }\n }\n },\n selectChartType: (\n state,\n {\n payload: { chartId, selectedChartType }\n }: PayloadAction<{ chartId: string; selectedChartType: string }>\n ) => {\n const chartToUpdate = state.chartOptionsArray.find(\n (chart: ChartOptions) => chart.chartId === chartId\n );\n\n if (chartToUpdate != null) {\n chartToUpdate.selectedChartType = selectedChartType;\n } else {\n state.chartOptionsArray.push({\n chartId,\n filterLegendKeys: [],\n selectedChartType,\n selectedChartRange: defaultChartOptions.selectedChartRange\n });\n }\n },\n selectChartRange: (\n state,\n {\n payload: { chartId, selectedChartRange }\n }: PayloadAction<{ chartId: string; selectedChartRange: string }>\n ) => {\n const chartToUpdate = state.chartOptionsArray.find(\n (chart: ChartOptions) => chart.chartId === chartId\n );\n\n if (chartToUpdate != null) {\n chartToUpdate.selectedChartRange = selectedChartRange;\n } else {\n state.chartOptionsArray.push({\n chartId,\n filterLegendKeys: [],\n selectedChartType: defaultChartOptions.selectedChartType,\n selectedChartRange\n });\n }\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => cachedChartOptions);\n }\n});\n\nconst selectSelf = (state: RootState) => state.chartOptions;\nconst selectChartId = (state: RootState, chartId: string) => chartId;\nexport const getFilteredKeysAsObject = createSelector(\n selectSelf,\n selectChartId,\n (state, chartId) => {\n const chartOptions: any = state.chartOptionsArray.find(\n (chartFilerKeys: ChartOptions) => chartFilerKeys.chartId === chartId\n );\n\n return {\n filteredLegendKeys: (chartOptions?.filterLegendKeys as string[]) ?? []\n };\n }\n);\n\nexport const getChartOptions = createSelector(\n selectSelf,\n selectChartId,\n (state, chartId) => {\n const chartOptions = state.chartOptionsArray.find(\n (chartFilerKeys: ChartOptions) => chartFilerKeys.chartId === chartId\n );\n\n return {\n filteredLegendKeys: (chartOptions?.filterLegendKeys as string[]) ?? [],\n selectedChartType: chartOptions?.selectedChartType as string,\n selectedChartRange: chartOptions?.selectedChartRange as string\n };\n }\n);\n\nexport const getChartType = createSelector(\n selectSelf,\n selectChartId,\n (state, chartId) => {\n const chartOptions = state.chartOptionsArray.find(\n (chartFilerKeys: ChartOptions) => chartFilerKeys.chartId === chartId\n );\n\n return chartOptions?.selectedChartType;\n }\n);\n\nexport const getChartTypeAndRange = createSelector(\n selectSelf,\n selectChartId,\n getChartType,\n (state, chartId, chartType) => {\n const chartOptions = state.chartOptionsArray.find(\n (chartFilerKeys: ChartOptions) => chartFilerKeys.chartId === chartId\n );\n\n return [\n chartType,\n (chartOptions?.selectedChartRange as DateRangeTypes) ??\n DateRangeTypes.MONTH\n ] as const;\n }\n);\n\nconst { actions, reducer } = chartOptionsSlice;\n\nexport const { toggleChartLegendFilter, selectChartType, selectChartRange } =\n actions;\n\nexport default reducer;\n","export enum DataScienceTaskStatus {\n SCHEDULED = 'Scheduled',\n PROCESSING = 'Processing',\n COMPLETED = 'Completed',\n FAILED = 'Failed',\n AWAITINGAPPROVAL = 'Awaiting Approval',\n APPROVED = 'Approved',\n MODELAPPROVED = 'ModelApproved',\n DISABLED = 'Disabled'\n}\n","import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\n\nexport interface SearchBarState {\n [key: string]: {\n tableValueToSearch: string;\n graphValueToSearch: string;\n };\n}\n\nconst initialState: SearchBarState = {\n reports: {\n tableValueToSearch: '',\n graphValueToSearch: ''\n }\n};\n\nconst searchBarSlice = createSlice({\n name: 'searchBar',\n initialState,\n reducers: {\n applySearchToTable: (\n state,\n {\n payload: { id, valueToSearch }\n }: PayloadAction<{ id: string; valueToSearch: string }>\n ) => {\n if (Object.hasOwnProperty.call(state, id)) {\n state[id].tableValueToSearch = valueToSearch;\n } else {\n state[id] = {\n tableValueToSearch: valueToSearch,\n graphValueToSearch: ''\n };\n }\n },\n applySearchToGraph: (\n state,\n {\n payload: { id, valueToSearch }\n }: PayloadAction<{ id: string; valueToSearch: string }>\n ) => {\n if (Object.hasOwnProperty.call(state, id)) {\n state[id].graphValueToSearch = valueToSearch;\n } else {\n state[id] = {\n tableValueToSearch: '',\n graphValueToSearch: valueToSearch\n };\n }\n },\n applySearchToTableAndGraph: (\n state,\n {\n payload: { id, valueToSearch }\n }: PayloadAction<{ id: string; valueToSearch: string }>\n ) => {\n state[id] = {\n tableValueToSearch: valueToSearch,\n graphValueToSearch: valueToSearch\n };\n },\n clearSearch: (\n state,\n { payload: { id } }: PayloadAction<{ id: string }>\n ) => {\n state[id] = {\n tableValueToSearch: '',\n graphValueToSearch: ''\n };\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst selectSelf = (state: RootState) => state.searchBar;\nconst selectId = (state: RootState, id: string) => id;\nexport const getSearchTermsById = createSelector(\n selectSelf,\n selectId,\n (state, id) => {\n if (id === undefined || !Object.hasOwnProperty.call(state, id)) {\n return {\n tableValueToSearch: '',\n graphValueToSearch: ''\n };\n }\n\n return state[id];\n }\n);\n\nconst { reducer, actions } = searchBarSlice;\n\nexport const {\n applySearchToTable,\n applySearchToGraph,\n applySearchToTableAndGraph,\n clearSearch\n} = actions;\n\nexport default reducer;\n","import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { changeDateRange } from 'features/date-range-selection/dateRangeSlice';\nimport {\n applySearchToGraph,\n applySearchToTable,\n applySearchToTableAndGraph,\n clearSearch\n} from 'features/search-bar/searchBarSlice';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\nimport { WritableDraft } from 'immer/dist/internal';\nimport { PURGE } from 'redux-persist';\n\nconst MAX_PAGE_SIZE = 1000;\n\nexport interface PreviousRequest {\n currentPage: number;\n pageSize: number;\n totalPages: number;\n totalRecords: number;\n forwardSeekValue?: string;\n forwardSeekId?: string;\n backwardSeekValue?: string;\n backwardSeekId?: string;\n seekColumnName?: string;\n orderDirection?: string;\n}\n\nexport interface PaginationOptionsState {\n componentId?: string;\n pageSize: number;\n currentPage: number;\n searchTerm?: string;\n seekValue?: string;\n seekColumnName?: string;\n defaultColumnName?: string;\n seekId?: string;\n seekDirection?: string;\n orderDirection?: string;\n previousRequest?: PreviousRequest;\n}\n\nconst defaultPaginationOptions: PaginationOptionsState = {\n pageSize: 10,\n currentPage: 1,\n seekValue: undefined,\n seekColumnName: undefined,\n seekId: undefined,\n defaultColumnName: undefined,\n seekDirection: undefined,\n previousRequest: undefined,\n orderDirection: undefined,\n searchTerm: undefined\n};\n\nconst paginationOptionsSlice = createSlice({\n name: 'paginationOptions',\n initialState: {\n paginationOptions: [] as PaginationOptionsState[]\n },\n reducers: {\n resetToFirstPage: (\n state,\n { payload: { componentId } }: PayloadAction<{ componentId: string }>\n ) => {\n applyResetToFirstPage(state, componentId);\n },\n initializePaginationOptions: (\n state,\n {\n payload: { componentId, defaultColumnName, orderDirection }\n }: PayloadAction<{\n componentId: string;\n defaultColumnName: string;\n orderDirection: string;\n }>\n ) => {\n if (!state.paginationOptions.find((x) => x.componentId === componentId)) {\n const initializedPaginationOptions = {\n ...defaultPaginationOptions,\n componentId\n };\n\n initializedPaginationOptions.defaultColumnName = defaultColumnName;\n initializedPaginationOptions.seekColumnName = defaultColumnName;\n initializedPaginationOptions.orderDirection = orderDirection;\n state.paginationOptions.push(initializedPaginationOptions);\n }\n },\n setPaginationOptions: (\n state,\n {\n payload: { componentId, paginationOptions }\n }: PayloadAction<{\n componentId: string;\n paginationOptions: PaginationOptionsState;\n }>\n ) => {\n const targetPaginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === componentId\n );\n\n if (targetPaginationOptions) {\n Object.assign(targetPaginationOptions, paginationOptions);\n } else {\n state.paginationOptions.push({\n ...defaultPaginationOptions,\n componentId\n });\n }\n },\n setPreviousRequest: (\n state,\n {\n payload: { componentId, previousRequest }\n }: PayloadAction<{\n componentId: string;\n previousRequest: PreviousRequest;\n }>\n ) => {\n const targetPaginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === componentId\n );\n\n if (targetPaginationOptions) {\n targetPaginationOptions.previousRequest = previousRequest;\n }\n },\n setPageSize: (\n state,\n {\n payload: { componentId, pageSize }\n }: PayloadAction<{ componentId: string; pageSize: number }>\n ) => {\n let targetPaginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === componentId\n );\n\n if (!targetPaginationOptions) {\n targetPaginationOptions = { ...defaultPaginationOptions, componentId };\n }\n\n applyResetToFirstPage(state, componentId);\n\n pageSize = pageSize < MAX_PAGE_SIZE ? pageSize : MAX_PAGE_SIZE;\n targetPaginationOptions.pageSize = pageSize;\n },\n setColumnSorting: (\n state,\n {\n payload: { componentId, columnName, orderDirection }\n }: PayloadAction<{\n componentId: string;\n columnName: string;\n orderDirection: string;\n }>\n ) => {\n let targetPaginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === componentId\n );\n\n if (!targetPaginationOptions) {\n targetPaginationOptions = { ...defaultPaginationOptions, componentId };\n } else {\n targetPaginationOptions.seekId = undefined;\n targetPaginationOptions.seekValue = undefined;\n targetPaginationOptions.currentPage = 1;\n targetPaginationOptions.previousRequest = undefined;\n }\n\n targetPaginationOptions.orderDirection = orderDirection;\n targetPaginationOptions.seekColumnName = columnName;\n },\n nextPage: (\n state,\n { payload: { componentId } }: PayloadAction<{ componentId: string }>\n ) => {\n let targetPaginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === componentId\n );\n\n if (!targetPaginationOptions) {\n targetPaginationOptions = { ...defaultPaginationOptions, componentId };\n }\n\n if (!targetPaginationOptions.previousRequest) {\n return;\n }\n if (\n targetPaginationOptions.previousRequest?.totalPages >\n targetPaginationOptions.currentPage\n ) {\n if (\n targetPaginationOptions.previousRequest?.currentPage ===\n targetPaginationOptions.currentPage\n ) {\n targetPaginationOptions.seekValue =\n targetPaginationOptions.previousRequest?.forwardSeekValue;\n targetPaginationOptions.seekId =\n targetPaginationOptions.previousRequest?.forwardSeekId;\n targetPaginationOptions.seekDirection = 'pageForward';\n\n targetPaginationOptions.currentPage++;\n }\n }\n },\n previousPage: (\n state,\n { payload: { componentId } }: PayloadAction<{ componentId: string }>\n ) => {\n let targetPaginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === componentId\n );\n\n if (!targetPaginationOptions) {\n targetPaginationOptions = { ...defaultPaginationOptions, componentId };\n }\n\n if (targetPaginationOptions.currentPage > 1) {\n if (!targetPaginationOptions.previousRequest) {\n targetPaginationOptions.currentPage = 1;\n } else {\n targetPaginationOptions.seekValue =\n targetPaginationOptions.previousRequest.backwardSeekValue;\n targetPaginationOptions.seekId =\n targetPaginationOptions.previousRequest.backwardSeekId;\n targetPaginationOptions.seekDirection = 'pageBackward';\n\n targetPaginationOptions.currentPage -= 1;\n }\n }\n }\n },\n extraReducers: (builder) => {\n builder.addCase(changeDateRange, (state, action) => {\n state.paginationOptions.forEach((options) => {\n options.currentPage = 1;\n options.seekValue = undefined;\n options.seekId = undefined;\n options.seekDirection = undefined;\n options.previousRequest = undefined;\n });\n });\n builder.addCase(selectSite, (state, action) => {\n state.paginationOptions.forEach((options) => {\n options.currentPage = 1;\n options.seekValue = undefined;\n options.seekId = undefined;\n options.seekDirection = undefined;\n options.previousRequest = undefined;\n });\n });\n builder.addCase(applySearchToTable, (state, action) => {\n updateSearchTermState(state, action.payload);\n });\n builder.addCase(applySearchToTableAndGraph, (state, action) => {\n updateSearchTermState(state, action.payload);\n });\n builder.addCase(applySearchToGraph, (state, action) => {\n updateSearchTermState(state, action.payload);\n });\n builder.addCase(clearSearch, (state, action) => {\n const payload = {\n id: action.payload.id,\n valueToSearch: ''\n };\n updateSearchTermState(state, payload);\n });\n builder.addCase(PURGE, () => ({\n paginationOptions: [] as PaginationOptionsState[]\n }));\n }\n});\n\nconst applyResetToFirstPage = (\n state: WritableDraft<{\n paginationOptions: PaginationOptionsState[];\n }>,\n componentId: string\n) => {\n const paginationOptions = state.paginationOptions.find(\n (x) => x.componentId === componentId\n );\n if (paginationOptions) {\n paginationOptions.currentPage = 1;\n paginationOptions.seekValue = undefined;\n paginationOptions.seekId = undefined;\n paginationOptions.seekDirection = undefined;\n paginationOptions.previousRequest = undefined;\n }\n};\n\nconst updateSearchTermState = (\n state: WritableDraft<{ paginationOptions: PaginationOptionsState[] }>,\n payload: { id: string; valueToSearch: string }\n) => {\n const targetPaginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === payload.id\n );\n\n if (targetPaginationOptions) {\n targetPaginationOptions.searchTerm = payload.valueToSearch;\n }\n};\n\nconst selectSelf = (state: RootState) => state.paginationOptions;\nconst selectPaginationOptionsByComponentIdId = (\n state: RootState,\n componentId: string\n) => componentId;\n\nexport const selectPaginationOptions = createSelector(\n selectSelf,\n selectPaginationOptionsByComponentIdId,\n (state, componentId) => {\n const paginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === componentId\n );\n\n return {\n pageSize:\n paginationOptions?.pageSize ?? defaultPaginationOptions.pageSize,\n currentPage:\n paginationOptions?.currentPage ?? defaultPaginationOptions.currentPage,\n totalPages: paginationOptions?.previousRequest?.totalPages ?? 0,\n totalRecords: paginationOptions?.previousRequest?.totalRecords ?? 0,\n searchTerm: paginationOptions?.searchTerm,\n seekValue: paginationOptions?.seekValue,\n seekId: paginationOptions?.seekId,\n seekDirection: paginationOptions?.seekDirection,\n seekColumnName: paginationOptions?.seekColumnName,\n orderDirection: paginationOptions?.orderDirection\n };\n }\n);\n\nexport const selectNullablePaginationOptions = createSelector(\n selectSelf,\n selectPaginationOptionsByComponentIdId,\n (state, componentId) => {\n const paginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === componentId\n );\n\n if (!paginationOptions) {\n return;\n }\n\n return {\n pageSize:\n paginationOptions?.pageSize ?? defaultPaginationOptions.pageSize,\n currentPage:\n paginationOptions?.currentPage ?? defaultPaginationOptions.currentPage,\n totalPages: paginationOptions?.previousRequest?.totalPages ?? 0,\n totalRecords: paginationOptions?.previousRequest?.totalRecords ?? 0,\n searchTerm: paginationOptions?.searchTerm,\n seekValue: paginationOptions?.seekValue,\n seekId: paginationOptions?.seekId,\n seekDirection: paginationOptions?.seekDirection,\n seekColumnName: paginationOptions?.seekColumnName,\n orderDirection: paginationOptions?.orderDirection\n };\n }\n);\n\nexport const selectLastPaginationRequest = createSelector(\n selectSelf,\n selectPaginationOptionsByComponentIdId,\n (state, componentId) => {\n const paginationOptions = state.paginationOptions.find(\n (options: PaginationOptionsState) => options.componentId === componentId\n );\n\n return { ...paginationOptions?.previousRequest };\n }\n);\n\nconst { actions, reducer } = paginationOptionsSlice;\n\nexport const {\n initializePaginationOptions,\n setPaginationOptions,\n nextPage,\n previousPage,\n setPageSize,\n setPreviousRequest,\n resetToFirstPage,\n setColumnSorting\n} = actions;\n\nexport default reducer;\n","import { createSlice } from '@reduxjs/toolkit';\nimport { PURGE } from 'redux-persist';\n\nconst initialState = {\n isSidebarOpen: true,\n indexOfOpenAccordion: -1\n};\n\nconst sidebarTogglingSlice = createSlice({\n name: 'sidebar',\n initialState,\n reducers: {\n toggleSidebar: (state) => {\n state.isSidebarOpen = !state.isSidebarOpen;\n state.indexOfOpenAccordion = state.isSidebarOpen\n ? state.indexOfOpenAccordion\n : -1;\n },\n onToggleAccordion: (state, { payload }) => {\n state.indexOfOpenAccordion =\n payload === state.indexOfOpenAccordion ? -1 : payload;\n\n if (!state.isSidebarOpen && state.indexOfOpenAccordion > -1) {\n state.isSidebarOpen = true;\n }\n },\n closeSideBarAccordion: (state) => {\n state.indexOfOpenAccordion = -1;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst { actions, reducer } = sidebarTogglingSlice;\n\nexport const { toggleSidebar, onToggleAccordion, closeSideBarAccordion } =\n actions;\n\nexport default reducer;\n","import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\n\nexport interface SideBarMenuItem {\n id: string;\n title: string;\n order: number;\n icon: string;\n path: string;\n isSubMenuOpen?: boolean;\n isPocOnly?: boolean;\n isSiteProtectedFeature?: boolean;\n subMenuItems: SideBarSubMenuItem[];\n}\n\nexport interface SideBarSubMenuItem {\n id: string;\n title: string;\n order: number;\n icon?: string;\n path: string;\n isPocOnly?: boolean;\n isSiteProtectedFeature?: boolean;\n}\n\nconst whiteListedFeatures = [\n {\n siteId: '641d914945eb2',\n activatedProtectedFeatureIds: ['mmm']\n },\n {\n siteId: 'demo',\n activatedProtectedFeatureIds: ['mmm']\n }\n] as { siteId: string; activatedProtectedFeatureIds: string[] }[];\n\nconst initialState = {\n isSidebarOpen: true,\n sideBarMenuItems: [\n {\n id: 'dashboard',\n title: 'Dashboard',\n order: 1,\n icon: 'ra-icons-generic-menu',\n path: 'dashboard',\n subMenuItems: []\n },\n {\n id: 'reports',\n title: 'Reports',\n order: 2,\n icon: 'ra-icons-generic-page-1',\n subMenuItems: [\n {\n id: 'advanced-reports',\n title: 'Advanced Reports',\n icon: 'ra-icons-marketing-arrow-chart-1',\n path: 'advanced-reports',\n order: 1\n },\n {\n id: 'reports-source',\n title: 'Source',\n path: 'reports/source',\n order: 2\n },\n {\n id: 'reports-keyword',\n title: 'Keyword',\n path: 'reports/keywords',\n order: 3\n },\n {\n id: 'reports-landing-page',\n title: 'Landing Page',\n path: 'reports/landing-page',\n order: 4\n },\n {\n id: 'reports-referrer',\n title: 'Referrer',\n path: 'reports/referrer',\n order: 5\n },\n {\n id: 'reports-utm-campaign',\n title: 'UTM Campaign',\n path: 'reports/utm-campaign',\n order: 6\n },\n {\n id: 'reports-utm-medium',\n title: 'UTM Medium',\n path: 'reports/utm-medium',\n order: 7\n },\n {\n id: 'reports-utm-content',\n title: 'UTM Content',\n path: 'reports/utm-content',\n order: 8\n },\n {\n id: 'reports-browser',\n title: 'Browser',\n path: 'reports/browser',\n order: 9\n },\n {\n id: 'reports-os',\n title: 'OS',\n path: 'reports/os',\n order: 10\n },\n {\n id: 'reports-device',\n title: 'Device',\n path: 'reports/device',\n order: 11\n }\n ]\n },\n {\n id: 'events',\n title: 'Events',\n order: 3,\n icon: 'ra-icons-marketing-arrow-chart-4',\n subMenuItems: [\n {\n id: 'forms',\n title: 'Forms',\n order: 1,\n path: 'conversions/forms'\n },\n {\n id: 'calls',\n title: 'Phone Calls',\n order: 2,\n path: 'conversions/phone-calls'\n },\n {\n id: 'opportunities',\n title: 'Opportunities',\n order: 3,\n path: 'opportunities'\n },\n {\n id: 'revenue',\n title: 'Revenue',\n order: 4,\n path: 'revenue'\n }\n ]\n },\n {\n id: 'insights',\n title: 'Insights',\n order: 4,\n icon: 'ra-icons-marketing-database-1',\n subMenuItems: [\n {\n id: 'paths',\n title: 'Paths',\n path: 'paths',\n order: 1\n },\n {\n id: 'conversion-influence',\n title: 'Conversion Influence',\n isPocOnly: true,\n path: 'insights/conversion-influence',\n order: 2\n }\n ]\n },\n {\n id: 'mmm',\n title: 'Marketing Mix Modelling',\n order: 5,\n icon: 'ra-icons-marketing-ai',\n isPocOnly: true,\n IsSubMenuOpen: false,\n isSiteProtectedFeature: true,\n subMenuItems: [\n {\n id: 'modelled-roi',\n title: 'Modelled ROI',\n path: 'marketing-mix-modelling/modelled-roi',\n order: 1\n },\n {\n id: 'budget-optimiser',\n title: 'Budget Optimiser',\n path: 'marketing-mix-modelling/budget-optimiser',\n order: 2\n }\n ]\n }\n ] as SideBarMenuItem[]\n};\n\nconst sidebarSlice = createSlice({\n initialState,\n name: 'sidebarv2',\n reducers: {\n toggleSidebar: (state) => {\n state.isSidebarOpen = !state.isSidebarOpen;\n\n if (!state.isSidebarOpen) {\n state.sideBarMenuItems.forEach((menuItem) => {\n menuItem.isSubMenuOpen = false;\n });\n }\n },\n onToggleAccordion: (\n state,\n { payload: { menuItemId } }: PayloadAction<{ menuItemId: string }>\n ) => {\n state.isSidebarOpen = true;\n\n const menuItemToToggle = state.sideBarMenuItems.find(\n (menuItem) => menuItem.id === menuItemId\n );\n\n if (menuItemToToggle && menuItemToToggle.subMenuItems.length > 0) {\n menuItemToToggle.isSubMenuOpen =\n !menuItemToToggle.isSubMenuOpen ?? true;\n }\n },\n closeAllSideBarAccordions: (state) => {\n state.sideBarMenuItems.forEach((menuItem) => {\n menuItem.isSubMenuOpen = false;\n });\n }\n }\n});\n\nconst selectSelf = (state: RootState) => state.sidebarv2;\nconst selectSideBarMenuItemsWithPocModeIsActiveAndSiteId = (\n state: RootState,\n isPocModeActive: boolean,\n siteId: string\n) => ({ isPocModeActive, siteId });\n\nexport const selectIsSidebarOpen = createSelector(\n selectSelf,\n (state) => state.isSidebarOpen\n);\n\nexport const selectSideBarMenuItems = createSelector(\n selectSelf,\n selectSideBarMenuItemsWithPocModeIsActiveAndSiteId,\n (state, { isPocModeActive, siteId }) => {\n return state.sideBarMenuItems.reduce(\n (accumulator: SideBarMenuItem[], currentValue) => {\n const whiteListedFeatureList = whiteListedFeatures.find(\n (feature) => feature.siteId === siteId\n );\n\n const filteredSubMenuItems = currentValue.subMenuItems.filter(\n (subMenuItem) => {\n if (subMenuItem.isPocOnly && !subMenuItem.isSiteProtectedFeature) {\n return isPocModeActive;\n } else if (subMenuItem.isSiteProtectedFeature) {\n return whiteListedFeatureList?.activatedProtectedFeatureIds.includes(\n subMenuItem.id\n );\n }\n\n return true;\n }\n );\n\n if (\n (!currentValue.isPocOnly || isPocModeActive) &&\n (!currentValue.isSiteProtectedFeature ||\n whiteListedFeatureList?.activatedProtectedFeatureIds.includes(\n currentValue.id\n ))\n ) {\n accumulator.push({\n ...currentValue,\n subMenuItems: filteredSubMenuItems\n });\n }\n\n return accumulator;\n },\n []\n );\n }\n);\n\nconst selectSideBarMenuItemWithCurrentPathNameAndCurrentMenuItem = (\n state: RootState,\n currentPathName: string,\n currentMenuItem: SideBarMenuItem\n) => {\n return { currentPathName, currentMenuItem };\n};\n\nexport const selectIsRouteActive = createSelector(\n selectSelf,\n selectSideBarMenuItemWithCurrentPathNameAndCurrentMenuItem,\n (state, { currentPathName, currentMenuItem }): boolean => {\n const isRootPathActive =\n currentPathName === '' && currentMenuItem.path === 'dashboard';\n return (\n isRootPathActive ||\n currentMenuItem.path === currentPathName ||\n currentMenuItem.subMenuItems.some(\n (child: SideBarSubMenuItem) => child.path === currentPathName\n ) ||\n currentPathName.startsWith(currentMenuItem.path as string)\n );\n }\n);\n\nexport const { toggleSidebar, onToggleAccordion, closeAllSideBarAccordions } =\n sidebarSlice.actions;\n\nexport default sidebarSlice.reducer;\n","import { createSlice } from '@reduxjs/toolkit';\nimport { PURGE } from 'redux-persist';\n\nconst initialState = {\n helpTileHasClosed: false\n};\n\nconst helpTileSlice = createSlice({\n name: 'helpTile',\n initialState,\n reducers: {\n closeHelpTile: (state) => {\n state.helpTileHasClosed = true;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst { actions, reducer } = helpTileSlice;\n\nexport const { closeHelpTile } = actions;\n\nexport default reducer;\n","export enum ViewType {\n Simple = 'simple',\n Detailed = 'detailed'\n}\n","import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\nimport { cacher } from 'app/cacheUtils/cacheIndex';\nimport { RootState } from 'app/store';\nimport { queryApi } from './queryApi';\nimport { Webhook, WebhookDataField } from 'features/webhooks/webhooks.models';\nimport { DataScienceTaskStatus } from 'features/data-science/tasks-status';\nimport { DataScienceTask } from 'features/data-science/tasks.models';\nimport {\n ExclusionTypeLabel,\n exclusionTypeLabelToTypeMap\n} from 'features/exclusions/exclusions.enums';\nimport { selectIsSandboxUser } from 'features/auth/authenticationSlice';\nimport {\n CreateSegmentationConfigRequestDto,\n UpdateSegmentationConfigRequestDto\n} from 'features/segmentation-config/segmentation-config.types';\nimport { TabKey } from 'features/segmentation-config/segmentation-config-tab-keys';\n\nexport interface DeleteOpportunityRequest {\n opportunityId: string;\n opportunityDateTime: string;\n}\n\nexport interface DeleteRevenueRequest {\n revenueId: string;\n revenueClosedDateTime: string;\n}\n\nconst defaultSuccessResult = { data: 'success' };\n\nexport const commandApi = createApi({\n reducerPath: 'commandApi',\n baseQuery: fetchBaseQuery({\n baseUrl: process.env.REACT_APP_COMMAND_API_URL,\n prepareHeaders: (headers, { getState }) => {\n // By default, if we have a token in the store, let's use that for authenticated requests\n const token: string | null = (getState() as RootState).auth.accessToken;\n if (token != null) {\n headers.set('authorization', `Bearer ${token}`);\n }\n\n return headers;\n }\n }),\n tagTypes: [...cacher.defaultTags],\n endpoints: (builder) => ({\n deleteMultipleRevenues: builder.mutation<\n unknown,\n { siteId: string; revenue: DeleteRevenueRequest[]; componentId: string }\n >({\n async queryFn(request, api, _, baseQuery) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n const mutation = baseQuery({\n url: `${request.siteId}/revenue`,\n method: 'DELETE',\n body: request.revenue\n });\n\n await mutation;\n\n return defaultSuccessResult;\n }\n }),\n deleteMultipleOpportunities: builder.mutation<\n unknown,\n {\n siteId: string;\n opportunities: DeleteOpportunityRequest[];\n componentId: string;\n }\n >({\n async queryFn(request, api, extraOptions, baseQuery) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n const mutation = baseQuery({\n url: `${request.siteId}/opportunity`,\n method: 'DELETE',\n body: request.opportunities\n });\n\n await mutation;\n\n return defaultSuccessResult;\n }\n }),\n validateWebhookEndpoint: builder.mutation<\n any,\n {\n siteId: string;\n url: string;\n }\n >({\n async queryFn({ siteId, url }, api, _, baseQuery) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n return await baseQuery({\n url: `${siteId}/webhooks/validate`,\n method: 'POST',\n body: { url }\n });\n }\n }),\n createWebhook: builder.mutation<\n any,\n {\n siteId: string;\n webhookName: string;\n webhookDescription: string;\n webhookType: string;\n webhookUrl: string;\n isInternalWebhook: boolean;\n useCustomDataSchema: boolean;\n dataFields: WebhookDataField[];\n }\n >({\n async onQueryStarted(_, { dispatch, queryFulfilled }) {\n await queryFulfilled;\n\n dispatch(queryApi.util.invalidateTags(['Webhooks']));\n },\n async queryFn(\n {\n siteId,\n webhookName,\n webhookDescription,\n webhookType,\n webhookUrl,\n isInternalWebhook,\n useCustomDataSchema,\n dataFields\n },\n api,\n _,\n baseQuery\n ) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n return await baseQuery({\n url: `${siteId}/webhooks`,\n method: 'POST',\n body: {\n siteId,\n webhookName,\n webhookDescription,\n webhookType,\n webhookUrl,\n isInternalWebhook,\n useCustomDataSchema,\n dataFields\n }\n });\n }\n }),\n updateWebhook: builder.mutation({\n async onQueryStarted(webhookBeingUpdated, { dispatch, queryFulfilled }) {\n await queryFulfilled;\n\n const siteId = webhookBeingUpdated.siteId;\n\n dispatch(\n queryApi.util.updateQueryData('getWebhooks', { siteId }, (draft) => {\n const existingWebhooks = draft.webhooks;\n const webhookIndex = existingWebhooks.findIndex(\n (w) => w.id === webhookBeingUpdated.id\n );\n\n existingWebhooks[webhookIndex] = webhookBeingUpdated;\n })\n );\n },\n async queryFn(webhook, api, _, baseQuery) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n return await baseQuery({\n url: `${webhook.siteId}/webhooks/${webhook.id}`,\n method: 'PATCH',\n body: { status: webhook.status }\n });\n }\n }),\n triggerTaskRun: builder.mutation<\n any,\n {\n siteId: string;\n machineLearningModel: string;\n }\n >({\n async onQueryStarted(taskBeingTriggered, { dispatch, queryFulfilled }) {\n await queryFulfilled;\n\n const siteId = taskBeingTriggered.siteId;\n\n dispatch(\n queryApi.util.updateQueryData(\n 'getDataScienceTasks',\n { siteId },\n (draft) => {\n const existingDataScienceTasks = draft.dataScienceTasks;\n const dataScienceTaskIndex = existingDataScienceTasks.findIndex(\n (dt) =>\n dt.machineLearningModel ===\n taskBeingTriggered.machineLearningModel\n );\n\n existingDataScienceTasks[dataScienceTaskIndex].status =\n DataScienceTaskStatus.PROCESSING;\n }\n )\n );\n },\n async queryFn({ siteId, machineLearningModel }, api, _, baseQuery) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n return await baseQuery({\n url: `${siteId}/data-science/task/${machineLearningModel.toLocaleLowerCase()}/trigger`,\n method: 'POST',\n body: {\n siteId,\n machineLearningModel\n }\n });\n }\n }),\n updateDataScienceTask: builder.mutation<\n any,\n {\n siteId: string;\n dataScienceTask: DataScienceTask;\n }\n >({\n async onQueryStarted(\n dataScienceTaskBeingUpdated,\n { dispatch, queryFulfilled }\n ) {\n await queryFulfilled;\n\n const siteId = dataScienceTaskBeingUpdated.siteId;\n\n dispatch(\n queryApi.util.updateQueryData(\n 'getDataScienceTasks',\n { siteId },\n (draft) => {\n const existingDataScienceTasks = draft.dataScienceTasks;\n const dataScienceTaskIndex = existingDataScienceTasks.findIndex(\n (dt) =>\n dt.machineLearningModel ===\n dataScienceTaskBeingUpdated.dataScienceTask\n .machineLearningModel\n );\n\n existingDataScienceTasks[dataScienceTaskIndex].status =\n dataScienceTaskBeingUpdated.dataScienceTask.status;\n }\n )\n );\n },\n async queryFn({ siteId, dataScienceTask }, api, _, baseQuery) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n return await baseQuery({\n url: `${siteId}/data-science/task/${dataScienceTask.machineLearningModel}`,\n method: 'PATCH',\n body: { status: dataScienceTask.status }\n });\n }\n }),\n createExclusion: builder.mutation<\n any,\n {\n siteId: string;\n exclusionLevel: string;\n exclusionCategory: string;\n exclusionType: ExclusionTypeLabel;\n exclusionMatchTarget: string;\n additionalInformation: string;\n ruleMatchType: string;\n value: string;\n }\n >({\n async onQueryStarted(_, { dispatch, queryFulfilled }) {\n await queryFulfilled;\n\n dispatch(queryApi.util.invalidateTags(['Exclusions']));\n },\n async queryFn(\n {\n siteId,\n exclusionLevel,\n exclusionCategory,\n exclusionType,\n exclusionMatchTarget,\n additionalInformation,\n ruleMatchType,\n value\n },\n api,\n _,\n baseQuery\n ) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n return await baseQuery({\n url: `${siteId}/exclusions`,\n method: 'PUT',\n body: {\n siteId,\n exclusionLevel,\n exclusionCategory,\n exclusionType: exclusionTypeLabelToTypeMap[exclusionType],\n exclusionMatchTarget,\n additionalInformation,\n ruleMatchType,\n value\n }\n });\n }\n }),\n deleteExclusion: builder.mutation<\n any,\n {\n siteId: string;\n exclusionLevel: string;\n exclusionCategory: string;\n exclusionType: ExclusionTypeLabel;\n exclusionMatchTarget: string;\n additionalInformation: string;\n ruleMatchType: string;\n value: string;\n }\n >({\n async onQueryStarted(_, { dispatch, queryFulfilled }) {\n await queryFulfilled;\n\n dispatch(queryApi.util.invalidateTags(['Exclusions']));\n },\n async queryFn(\n {\n siteId,\n exclusionLevel,\n exclusionCategory,\n exclusionType,\n exclusionMatchTarget,\n additionalInformation,\n ruleMatchType,\n value\n },\n api,\n _,\n baseQuery\n ) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n return await baseQuery({\n url: `${siteId}/exclusions`,\n method: 'DELETE',\n body: {\n siteId,\n exclusionLevel,\n exclusionCategory,\n exclusionType: exclusionTypeLabelToTypeMap[exclusionType],\n exclusionMatchTarget,\n additionalInformation,\n ruleMatchType,\n value\n }\n });\n }\n }),\n updateSegmentationConfigStatus: builder.mutation<\n any,\n {\n siteId: string;\n configId: string;\n updatedConfigStatus: number;\n category: TabKey | null;\n }\n >({\n async onQueryStarted({ category }, { dispatch, queryFulfilled }) {\n try {\n await queryFulfilled;\n\n const cacheTag =\n category === TabKey.Forms\n ? 'WebPageViewSegmentationConfigs'\n : 'AdCostSegmentationConfigs';\n\n dispatch(queryApi.util.invalidateTags([cacheTag]));\n } catch (error) {\n console.error('Error invalidating cache:', error);\n }\n },\n\n async queryFn(\n { siteId, configId, updatedConfigStatus, category },\n api,\n _,\n baseQuery\n ) {\n const endpoint =\n category === TabKey.Forms\n ? `${siteId}/web-touchpoints/segmentation/config/status/update`\n : `${siteId}/adcosts/segmentation/config//status/update`;\n\n return await baseQuery({\n url: endpoint,\n method: 'PATCH',\n body: {\n SiteId: siteId,\n ConfigId: configId,\n ConfigStatus: 0,\n UpdatedConfigStatus: updatedConfigStatus\n }\n });\n }\n }),\n createSegmentationConfig: builder.mutation<\n any,\n { category: TabKey | null } & CreateSegmentationConfigRequestDto\n >({\n async onQueryStarted({ category }, { dispatch, queryFulfilled }) {\n try {\n await queryFulfilled;\n\n dispatch(\n queryApi.util.invalidateTags([\n category === TabKey.Forms\n ? 'WebPageViewSegmentationConfigs'\n : 'AdCostSegmentationConfigs'\n ])\n );\n } catch (error) {\n console.error('Failed to create segmentation config:', error);\n }\n },\n async queryFn(\n {\n category,\n siteId,\n ruleAccessType,\n name,\n createdDateTime,\n createdBy,\n segmentationType,\n segmentName,\n segmentValue,\n rules\n },\n api,\n _,\n baseQuery\n ) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n const endpoint =\n category === TabKey.Forms\n ? 'web-touchpoints/segmentation/config'\n : 'adcosts/segmentation/config';\n\n return await baseQuery({\n url: `${siteId}/${endpoint}`,\n method: 'POST',\n body: {\n siteId,\n ruleAccessType,\n name,\n createdDateTime,\n createdBy,\n segmentationType,\n segmentName,\n segmentValue,\n rules\n }\n });\n }\n }),\n updateSegmentationConfig: builder.mutation<\n any,\n { category: TabKey | null } & UpdateSegmentationConfigRequestDto\n >({\n async onQueryStarted(\n { category, ...requestDto },\n { dispatch, queryFulfilled }\n ) {\n try {\n await queryFulfilled;\n\n dispatch(\n queryApi.util.invalidateTags([\n category === TabKey.Forms\n ? 'WebPageViewSegmentationConfigs'\n : 'AdCostSegmentationConfigs'\n ])\n );\n dispatch(\n queryApi.util.invalidateTags([\n category === TabKey.Forms\n ? 'WebPageViewSegmentationConfig'\n : 'AdCostSegmentationConfig'\n ])\n );\n } catch (error) {\n console.error('Failed to update segmentation config:', error);\n }\n },\n\n async queryFn(\n {\n id,\n siteId,\n category,\n ruleAccessType,\n name,\n updatedDateTime,\n updatedBy,\n segmentationType,\n segmentName,\n segmentValue,\n rules\n },\n api,\n _,\n baseQuery\n ) {\n const isSandboxUser = selectIsSandboxUser(api.getState() as RootState);\n\n if (isSandboxUser) {\n return defaultSuccessResult;\n }\n\n const endpoint =\n category === TabKey.Forms\n ? `web-touchpoints/segmentation/config/update`\n : `adcosts/segmentation/config/update`;\n\n return await baseQuery({\n url: `${siteId}/${endpoint}`,\n method: 'PATCH',\n body: {\n id,\n siteId,\n status: 'Active',\n ruleAccessType,\n name,\n updatedDateTime,\n updatedBy,\n segmentationType,\n segmentName,\n segmentValue,\n rules\n }\n });\n }\n })\n })\n});\n\nexport const {\n useDeleteMultipleRevenuesMutation,\n useDeleteMultipleOpportunitiesMutation,\n useValidateWebhookEndpointMutation,\n useCreateWebhookMutation,\n useUpdateWebhookMutation,\n useTriggerTaskRunMutation,\n useUpdateDataScienceTaskMutation,\n useCreateExclusionMutation,\n useDeleteExclusionMutation,\n useUpdateSegmentationConfigStatusMutation,\n useCreateSegmentationConfigMutation,\n useUpdateSegmentationConfigMutation\n} = commandApi;\n","import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { commandApi } from 'app/apis/commandApi';\nimport { RootState } from 'app/store';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\nimport { PURGE } from 'redux-persist';\n\nexport interface BaseSelectedRow {\n rowId: string;\n rowData: any;\n}\n\nexport interface RowSelectionState {\n componentId?: string;\n rows: BaseSelectedRow[];\n}\n\nconst initialState = {\n rowSelections: [] as RowSelectionState[]\n};\n\nconst rowSelectionSlice = createSlice({\n name: 'rowSelection',\n initialState,\n reducers: {\n selectRow: (\n state,\n {\n payload: { componentId, selectedRow }\n }: PayloadAction<{\n componentId: string;\n selectedRow: BaseSelectedRow;\n }>\n ) => {\n const rowSelectionState = state.rowSelections.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n\n if (!rowSelectionState) {\n const newRowSelectionState: RowSelectionState = {\n componentId,\n rows: [selectedRow]\n };\n\n state.rowSelections = [...state.rowSelections, newRowSelectionState];\n } else {\n const rowShouldBeAdded = !rowSelectionState.rows.some(\n (row) => row.rowId === selectedRow.rowId\n );\n\n rowSelectionState.rows = rowShouldBeAdded\n ? [...rowSelectionState.rows, selectedRow]\n : rowSelectionState.rows.filter(\n (row) => row.rowId !== selectedRow.rowId\n );\n }\n },\n selectRows: (\n state,\n {\n payload: { componentId, selectedRows }\n }: PayloadAction<{\n componentId: string;\n selectedRows: BaseSelectedRow[];\n }>\n ) => {\n const rowSelectionState = state.rowSelections.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n\n if (!rowSelectionState) {\n const newRowSelectionState: RowSelectionState = {\n componentId,\n rows: selectedRows\n };\n\n state.rowSelections = [...state.rowSelections, newRowSelectionState];\n } else {\n const shouldRemoveRows = selectedRows.every((row) =>\n rowSelectionState.rows.some((r) => r.rowId === row.rowId)\n );\n\n if (shouldRemoveRows) {\n rowSelectionState.rows = rowSelectionState.rows.filter(\n (row) => !selectedRows.some((r) => r.rowId === row.rowId)\n );\n } else {\n const rowsToAdd = selectedRows.filter(\n (row) => !rowSelectionState.rows.some((r) => r.rowId === row.rowId)\n );\n\n rowSelectionState.rows = [...rowSelectionState.rows, ...rowsToAdd];\n }\n }\n },\n clearRowSelections: (state) => {\n state.rowSelections = [];\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n builder.addCase(selectSite, (state, action) => {\n state.rowSelections = [];\n });\n builder\n .addMatcher(\n commandApi.endpoints.deleteMultipleRevenues.matchFulfilled,\n (\n state,\n {\n meta: {\n arg: {\n originalArgs: { componentId, revenue }\n }\n }\n }\n ) => {\n const rowSelection = state.rowSelections.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n if (!rowSelection) return;\n\n const filteredRows = rowSelection.rows.filter(\n (row) => !revenue.map((rev) => rev.revenueId).includes(row.rowId)\n );\n\n rowSelection.rows = filteredRows;\n }\n )\n .addMatcher(\n commandApi.endpoints.deleteMultipleOpportunities.matchFulfilled,\n (\n state,\n {\n meta: {\n arg: {\n originalArgs: { componentId, opportunities }\n }\n }\n }\n ) => {\n const rowSelection = state.rowSelections.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n if (!rowSelection) return;\n\n rowSelection.rows = [];\n }\n );\n }\n});\n\nconst selectSelf = (state: RootState) => state.rowSelection;\nconst selectRowSelectionByComponentId = (\n state: RootState,\n componentId: string\n) => componentId;\n\nexport const selectRowSelectionsByComponentId = createSelector(\n selectSelf,\n selectRowSelectionByComponentId,\n (rowSelection, componentId) => {\n const rowSelectionState = rowSelection.rowSelections.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n\n const selectedRows: any = { rows: [] };\n\n if (!rowSelectionState?.rows) {\n return selectedRows;\n }\n\n rowSelectionState.rows.forEach(\n (row) => (selectedRows.rows[row.rowId] = true)\n );\n\n return selectedRows;\n }\n);\nexport const selectRowsByComponentId = createSelector(\n selectSelf,\n selectRowSelectionByComponentId,\n (rowSelection, componentId) => {\n const rowSelectionState = rowSelection.rowSelections.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n\n if (!rowSelectionState?.rows) {\n return [];\n }\n\n return rowSelectionState.rows;\n }\n);\n\nexport const selectRowByIdAndComponentId = createSelector(\n selectSelf,\n selectRowSelectionByComponentId,\n (rowSelection, componentId) => (rowId: string) => {\n const rowSelectionState = rowSelection.rowSelections.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n\n if (!rowSelectionState?.rows) {\n return null;\n }\n\n return rowSelectionState.rows.find((row) => row.rowId === rowId);\n }\n);\n\nconst { actions, reducer } = rowSelectionSlice;\n\nexport const { selectRow, selectRows } = actions;\n\nexport default reducer;\n","/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { ModalConfirmTypes } from './modal';\nimport { PURGE } from 'redux-persist';\nimport { tr } from 'date-fns/locale';\n\nexport interface ModalType {\n modalType: string;\n modalProps: ModalProps;\n modalConfirmType: ModalConfirmTypes;\n}\n\nexport interface ModalProps {\n title: string;\n content: string;\n buttonType: string;\n componentId?: string;\n}\n\nexport interface ModalState {\n modalInfo: ModalType;\n isOpen: boolean;\n isLoading: boolean;\n}\n\nconst initialState: ModalState = {\n modalInfo: {} as ModalType,\n isOpen: false,\n isLoading: false\n};\n\nconst modalSlice = createSlice({\n name: 'modal',\n initialState,\n reducers: {\n openModal: (\n state,\n {\n payload: { modalProps, modalType, modalConfirmType }\n }: PayloadAction\n ) => {\n state.modalInfo = {\n modalProps,\n modalType,\n modalConfirmType\n };\n state.isOpen = true;\n },\n confirmModal: (state) => {\n state.isLoading = true;\n },\n closeModal: (state) => {\n state.modalInfo = {} as ModalType;\n state.isOpen = false;\n state.isLoading = false;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nexport const selectModal = createSelector(\n (state: RootState) => state.modal,\n (modal) => modal\n);\n\nexport const { openModal, closeModal, confirmModal } = modalSlice.actions;\n\nexport default modalSlice.reducer;\n","/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\n\nexport interface AccordionDetails {\n componentId: string;\n isOpen: boolean;\n}\n\nexport interface AccordionState {\n accordions: AccordionDetails[];\n}\n\nconst initialState: AccordionState = {\n accordions: []\n};\n\nconst accordionSlice = createSlice({\n name: 'accordions',\n initialState,\n reducers: {\n triggerAccordion: (\n state,\n {\n payload: { componentId }\n }: PayloadAction<{\n componentId: string;\n }>\n ) => {\n const accordion = state.accordions.find(\n (accordion) => accordion.componentId === componentId\n );\n\n if (!accordion) {\n state.accordions.push({\n componentId,\n isOpen: true\n });\n } else {\n accordion.isOpen = !accordion.isOpen;\n }\n },\n openAccordion: (\n state,\n {\n payload: { componentId }\n }: PayloadAction<{\n componentId: string;\n }>\n ) => {\n const accordion = state.accordions.find(\n (accordion) => accordion.componentId === componentId\n );\n\n if (!accordion) {\n state.accordions.push({\n componentId,\n isOpen: true\n });\n } else {\n accordion.isOpen = true;\n }\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nexport const selectAccordion = createSelector(\n (state: RootState) => state.accordions,\n (state: RootState, componentId: string) => componentId,\n (state, componentId) => {\n const accordion = state.accordions.find(\n (accordion) => accordion.componentId === componentId\n );\n\n return {\n isOpen: accordion?.isOpen ?? false\n };\n }\n);\n\nexport const areAnyAccordionsOpen = createSelector(\n (state: RootState) => state.accordions,\n (state: RootState, accordionIds: string[]) => accordionIds,\n (state, accordionIds) => {\n return state.accordions.some(\n (accordion) =>\n accordionIds.includes(accordion.componentId) && accordion.isOpen\n );\n }\n);\n\nexport const { triggerAccordion, openAccordion } = accordionSlice.actions;\n\nexport default accordionSlice.reducer;\n","import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { ViewType } from './view-type';\nimport { PURGE } from 'redux-persist';\n\nexport interface ViewSelection {\n componentId: string;\n selection: ViewType;\n}\n\nconst initialState = {\n selections: [\n {\n componentId: 'forms-component',\n selection: ViewType.Simple\n }\n ] as ViewSelection[]\n};\n\nconst dataViewSelectionSlice = createSlice({\n name: 'dataViewSelection',\n initialState,\n reducers: {\n toggleSelection: (\n state,\n {\n payload: { newSelection, componentId }\n }: PayloadAction<{ newSelection: ViewType; componentId: string }>\n ) => {\n const selectionToToggle = state.selections.find(\n (selection) => selection.componentId === componentId\n );\n\n if (selectionToToggle) {\n selectionToToggle.selection = newSelection;\n } else {\n state.selections.push({ componentId, selection: newSelection });\n }\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nexport const selectViewSelectionByComponentId = createSelector(\n (state: RootState) => state.dataViewSelections,\n (state: RootState, componentId: string) => componentId,\n (state, componentId) => {\n const viewSelection: ViewSelection | undefined = state.selections.find(\n (options) => options.componentId === componentId\n );\n\n return { selection: viewSelection?.selection ?? ViewType.Simple };\n }\n);\n\nexport const { toggleSelection } = dataViewSelectionSlice.actions;\n\nexport default dataViewSelectionSlice.reducer;\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import { createSelector, createSlice } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\n\nexport interface StaticMapState {\n componentId: string;\n initialFocusLocation: string;\n currentFocusLocation?: string;\n isInGlobalFocusMode: boolean;\n initialZoomLevel: number;\n currentZoomLevel?: number;\n}\nconst initialState = {\n mapStates: [] as StaticMapState[]\n};\n\nconst googleStaticMapSlice = createSlice({\n name: 'googleStaticMap',\n initialState,\n reducers: {\n setInitialMapState: (\n state,\n { payload: { componentId, initialFocusLocation, initialZoomLevel } }\n ) => {\n const mapState = state.mapStates.find(\n (x) => x.componentId === componentId\n );\n if (!mapState) {\n state.mapStates.push({\n componentId,\n initialFocusLocation,\n currentFocusLocation: initialFocusLocation,\n isInGlobalFocusMode: true,\n initialZoomLevel,\n currentZoomLevel: initialZoomLevel\n });\n } else {\n mapState.isInGlobalFocusMode = true;\n mapState.initialZoomLevel = initialZoomLevel;\n mapState.currentZoomLevel = initialZoomLevel;\n mapState.currentFocusLocation = initialFocusLocation;\n mapState.initialFocusLocation = initialFocusLocation;\n }\n },\n focusLocation: (state, { payload: { componentId, focusLocation } }) => {\n const mapState = state.mapStates.find(\n (x) => x.componentId === componentId\n );\n if (mapState) {\n mapState.isInGlobalFocusMode = false;\n mapState.currentFocusLocation = focusLocation;\n mapState.currentZoomLevel = mapState.initialZoomLevel;\n }\n },\n zoomIn: (state, { payload }) => {\n const mapState = state.mapStates.find((x) => x.componentId === payload);\n if (mapState) {\n mapState.isInGlobalFocusMode = false;\n mapState.currentFocusLocation =\n mapState.currentFocusLocation ?? mapState.initialFocusLocation;\n if (!mapState.currentZoomLevel)\n mapState.currentZoomLevel = mapState.initialZoomLevel;\n mapState.currentZoomLevel++;\n }\n },\n zoomOut: (state, { payload }) => {\n const mapState = state.mapStates.find((x) => x.componentId === payload);\n if (mapState) {\n mapState.isInGlobalFocusMode = false;\n mapState.currentFocusLocation =\n mapState.currentFocusLocation ?? mapState.initialFocusLocation;\n if (!mapState.currentZoomLevel)\n mapState.currentZoomLevel = mapState.initialZoomLevel;\n mapState.currentZoomLevel--;\n }\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst selectSelf = (state: RootState) => state.googleStaticMap;\nconst selectMapStatesByComponentId = (state: RootState, componentId: string) =>\n componentId;\n\nexport const selectMapStateByComponentId = createSelector(\n selectSelf,\n selectMapStatesByComponentId,\n (googleStaticMap, componentId) => {\n const { isInGlobalFocusMode, currentFocusLocation, currentZoomLevel } =\n googleStaticMap.mapStates.find(\n (mapState) => mapState.componentId === componentId\n ) ?? {};\n return {\n isInGlobalFocusMode,\n currentFocusLocation,\n currentZoomLevel\n };\n }\n);\n\nexport const { zoomIn, zoomOut, setInitialMapState, focusLocation } =\n googleStaticMapSlice.actions;\n\nexport default googleStaticMapSlice.reducer;\n","import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\n\nconst initialState = {\n currencyCode: 'GBP'\n} as SettingsState;\n\nexport interface SettingsState {\n currencyCode: string;\n}\n\nconst settingsSlice = createSlice({\n name: 'settings',\n initialState,\n reducers: {\n setCurrencyCode: (state, { payload }: PayloadAction) => {\n state.currencyCode = payload;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nexport const selectCurrencyCode = createSelector(\n (state: RootState) => state.settings,\n (state) => {\n return state.currencyCode;\n }\n);\n\nexport const { setCurrencyCode } = settingsSlice.actions;\n\nexport default settingsSlice.reducer;\n","import { createSlice } from '@reduxjs/toolkit';\nimport { PURGE } from 'redux-persist';\n\nconst initialState = {\n isBlurActive: false\n};\n\nconst blurSlice = createSlice({\n name: 'blur',\n initialState,\n reducers: {\n toggleBlur: (state) => {\n state.isBlurActive = !state.isBlurActive;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst { actions, reducer } = blurSlice;\n\nexport const { toggleBlur } = actions;\n\nexport default reducer;\n","import { createSelector, createSlice } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\n\nexport interface UploadState {\n numberOfRevenueItemsToUpload: number;\n numberOfRevenueItemsUploaded: number;\n numberOfOpportunityItemsToUpload: number;\n numberOfOpportunityItemsUploaded: number;\n}\n\nconst initialState: UploadState = {\n numberOfRevenueItemsToUpload: 0,\n numberOfRevenueItemsUploaded: 0,\n numberOfOpportunityItemsToUpload: 0,\n numberOfOpportunityItemsUploaded: 0\n};\n\nconst uploadSlice = createSlice({\n name: 'uploads',\n initialState,\n reducers: {\n resetSlice: (state) => (state = initialState),\n onNumberOfRevenueItemsToUploadChanged: (\n state,\n { payload }: { payload: number }\n ) => {\n state.numberOfRevenueItemsToUpload = payload;\n },\n onNumberOfRevenueItemsUploadedChanged: (\n state,\n { payload }: { payload: number }\n ) => {\n state.numberOfRevenueItemsUploaded = payload;\n },\n onNumberOfOpportunityItemsToUploadChanged: (\n state,\n { payload }: { payload: number }\n ) => {\n state.numberOfOpportunityItemsToUpload = payload;\n },\n onNumberOfOpportunityItemsUploadedChanged: (\n state,\n { payload }: { payload: number }\n ) => {\n state.numberOfOpportunityItemsUploaded = payload;\n }\n }\n});\n\nexport const uploadStateSelector = createSelector(\n (state: RootState) => state.upload,\n (state) => state\n);\n\nexport const uploadRevenuePercentageSelector = createSelector(\n (state: RootState) => state.upload,\n (state) =>\n (state.numberOfRevenueItemsUploaded * 100) /\n state.numberOfRevenueItemsToUpload\n);\n\nexport const uploadOpportunityPercentageSelector = createSelector(\n (state: RootState) => state.upload,\n (state) =>\n (state.numberOfOpportunityItemsUploaded * 100) /\n state.numberOfOpportunityItemsToUpload\n);\n\nexport const {\n resetSlice,\n onNumberOfRevenueItemsToUploadChanged,\n onNumberOfRevenueItemsUploadedChanged,\n onNumberOfOpportunityItemsToUploadChanged,\n onNumberOfOpportunityItemsUploadedChanged\n} = uploadSlice.actions;\n\nexport default uploadSlice.reducer;\n","import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\nimport { cacher } from 'app/cacheUtils/cacheIndex';\nimport { queryApi } from './queryApi';\nimport { RevenueDto } from 'features/revenue/types/revenueDto';\nimport { RootState } from 'app/store';\nimport {\n onNumberOfRevenueItemsUploadedChanged,\n onNumberOfOpportunityItemsUploadedChanged\n} from 'features/upload/uploads.slice';\nimport { OpportunityDto } from 'features/opportunities/types/opportunityDto';\n\nexport const publicCommandApi = createApi({\n reducerPath: 'publicCommandApi',\n baseQuery: fetchBaseQuery({\n baseUrl: process.env.REACT_APP_PUBLIC_COMMAND_API_URL,\n prepareHeaders: (headers, { getState }) => {\n // By default, if we have a token in the store, let's use that for authenticated requests\n const token: string | null = (getState() as RootState).auth.accessToken;\n if (token != null) {\n headers.set('authorization', `Bearer ${token}`);\n }\n\n return headers;\n }\n }),\n tagTypes: [...cacher.defaultTags],\n endpoints: (builder) => ({\n uploadRevenues: builder.mutation<\n unknown,\n { siteId: string; revenues: RevenueDto[] }\n >({\n async queryFn(request, api, extraOptions, baseQuery) {\n for (const revenue of request.revenues) {\n const itemNumber = request.revenues.indexOf(revenue) + 1;\n\n const uploadPromise = baseQuery({\n url: `${request.siteId}/revenue/upload`,\n method: 'PUT',\n body: revenue\n });\n\n const result = await uploadPromise;\n\n const error = result.error?.data as any;\n const isUploadSuccessful = error == null;\n\n if (!isUploadSuccessful) {\n const errorData = {\n isUploadSuccessful: false,\n errors: error.Errors,\n itemNumberFailure: itemNumber\n };\n\n return {\n data: errorData\n };\n }\n\n api.dispatch(onNumberOfRevenueItemsUploadedChanged(itemNumber));\n }\n\n api.dispatch(queryApi.util.invalidateTags(['Revenue']));\n\n return { data: { isUploadSuccessful: true } };\n }\n }),\n uploadOpportunities: builder.mutation<\n unknown,\n { siteId: string; opportunities: OpportunityDto[] }\n >({\n async queryFn(request, api, extraOptions, baseQuery) {\n for (const opportunity of request.opportunities) {\n const itemNumber = request.opportunities.indexOf(opportunity) + 1;\n\n const uploadPromise = baseQuery({\n url: `${request.siteId}/opportunity/upload`,\n method: 'PUT',\n body: opportunity\n });\n\n const result = await uploadPromise;\n\n const error = result.error?.data as any;\n const isUploadSuccessful = error == null;\n\n if (!isUploadSuccessful) {\n const errorData = {\n isUploadSuccessful: false,\n errors: error.Errors,\n itemNumberFailure: itemNumber\n };\n\n return {\n data: errorData\n };\n }\n\n api.dispatch(onNumberOfOpportunityItemsUploadedChanged(itemNumber));\n }\n\n api.dispatch(queryApi.util.invalidateTags(['Opportunities']));\n\n return { data: { isUploadSuccessful: true } };\n }\n })\n })\n});\n\nexport const { useUploadRevenuesMutation, useUploadOpportunitiesMutation } =\n publicCommandApi;\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","export interface ToastPayload {\n title: string;\n description: string;\n}\n\nexport interface Toast {\n id: string;\n title: string;\n description: string;\n type: ToastType;\n}\n\nexport enum ToastType {\n Success,\n Error\n}\n","import { PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport { v4 as guid } from 'uuid';\nimport { Toast, ToastPayload, ToastType } from './toast.types';\nimport { PURGE } from 'redux-persist';\n\nconst toastSlice = createSlice({\n name: 'toast',\n initialState: {\n toasts: [] as Toast[]\n },\n reducers: {\n onError: (state, action: PayloadAction) => {\n const toast: Toast = {\n id: guid(),\n title: action.payload.title,\n description: action.payload.description,\n type: ToastType.Error\n };\n\n state.toasts = [...state.toasts, toast];\n },\n onSuccess: (state, action: PayloadAction) => {\n const toast: Toast = {\n id: guid(),\n title: action.payload.title,\n description: action.payload.description,\n type: ToastType.Success\n };\n\n state.toasts = [...state.toasts, toast];\n },\n onHideToast: (state, action: PayloadAction) => {\n state.toasts = state.toasts.filter(\n (toast) => toast.id !== action.payload\n );\n },\n onHideToastByTitle: (state, action: PayloadAction) => {\n state.toasts = state.toasts.filter(\n (toast) => toast.title !== action.payload\n );\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => {\n return {\n toasts: []\n };\n });\n }\n});\n\nconst { actions, reducer } = toastSlice;\n\nexport const { onError, onSuccess, onHideToast, onHideToastByTitle } = actions;\n\nexport default reducer;\n","import { KeyValuePair } from 'common/types/key-value-pair';\n\nexport interface ConversionPath {\n totalRevenue: number;\n totalSales: number;\n averageRevenue: number;\n averageHoursToConversion: number;\n averageMinutesToConversion: number;\n averageTouchpointsToConversion: number;\n conversionCount: number;\n chronologicalSources: string[];\n timeToConversionInSecondsValues: KeyValuePair<\n PathTimeCalculationTypes,\n number\n >[];\n}\n\nexport enum PathTimeCalculationTypes {\n Mean = 'Mean',\n Median = 'Median',\n Mode = 'Mode'\n}\n","import { PayloadAction, createSelector, createSlice } from '@reduxjs/toolkit';\nimport { SpendAmount } from '../budget-optimiser/budget-optimiser.types';\nimport { queryApi } from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\nimport { PURGE } from 'redux-persist';\n\nconst initialState = {\n spendAmounts: [] as SpendAmount[],\n selectedSegmentKey: ''\n};\n\nconst mmmHeaderControlsSlice = createSlice({\n name: 'mmmHeaderControls',\n initialState,\n reducers: {\n onSpendAmountChanged: (\n state,\n newSpendAmount: PayloadAction\n ) => {\n const newSpendAmounts = state.spendAmounts\n .filter((sa) => sa.segmentKey === state.selectedSegmentKey)\n .map((spendAmount) =>\n spendAmount.sourceCategoryName ===\n newSpendAmount.payload.sourceCategoryName\n ? newSpendAmount.payload\n : spendAmount\n );\n\n const otherSpendAmounts = state.spendAmounts.filter(\n (sa) => sa.segmentKey !== state.selectedSegmentKey\n );\n\n state.spendAmounts = [...newSpendAmounts, ...otherSpendAmounts];\n },\n onSegmentChanged: (state, newSegmentKey: PayloadAction) => {\n state.selectedSegmentKey = newSegmentKey.payload;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(selectSite, (state, action) => {\n state = initialState;\n });\n builder.addCase(PURGE, () => initialState);\n builder.addMatcher(\n queryApi.endpoints.getDataScienceMmmSegmentData.matchFulfilled,\n (state, mmmModelOutput) => {\n const spendAmounts = mmmModelOutput.payload.forecasts.map(\n (forecast) => {\n return {\n sourceCategoryName: forecast.sourceCategoryDisplayName,\n optimisedSpendAmount:\n forecast.optimisedSpend === 0\n ? forecast.maximumRealSpend\n : forecast.optimisedSpend,\n maximumSpend: forecast.maximumForecastSpend,\n segmentKey: mmmModelOutput.meta.arg.originalArgs.segment\n };\n }\n );\n\n state.spendAmounts = [...state.spendAmounts, ...spendAmounts];\n }\n );\n builder.addMatcher(\n queryApi.endpoints.getDataScienceMmmSegments.matchFulfilled,\n (state, segments: PayloadAction) => {\n if (segments.payload.length > 0) {\n const selectedSegmentKey =\n state.selectedSegmentKey.length < 1\n ? segments.payload[0]\n : state.selectedSegmentKey;\n\n state.selectedSegmentKey = selectedSegmentKey;\n }\n }\n );\n }\n});\n\nexport const getSpendAmounts = createSelector(\n (state: RootState) => state.mmmHeaderControls,\n (state) =>\n state.spendAmounts.filter(\n (sa) => sa.segmentKey === state.selectedSegmentKey\n )\n);\n\nconst { actions, reducer } = mmmHeaderControlsSlice;\n\nexport const { onSpendAmountChanged, onSegmentChanged } = actions;\n\nexport default reducer;\n","import { PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\n\ninterface ReportsTableState {\n currentPage: number;\n currentPageSize: number;\n pageSizes: number[];\n}\n\nconst initialState: ReportsTableState = {\n currentPage: 1,\n currentPageSize: 50,\n pageSizes: [5, 10, 25, 50, 100]\n};\n\nconst reportsTableSlice = createSlice({\n name: 'reportsTable',\n initialState,\n reducers: {\n onPreviousPage: (state) => {\n state.currentPage = state.currentPage - 1;\n },\n onNextPage: (state) => {\n state.currentPage = state.currentPage + 1;\n },\n onPageSizeChanged: (state, action: PayloadAction) => {\n state.currentPageSize = action.payload;\n state.currentPage = 1;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst { actions, reducer } = reportsTableSlice;\n\nexport const { onPreviousPage, onNextPage, onPageSizeChanged } = actions;\n\nexport default reducer;\n\nexport const selectReportsTableState = (state: RootState) => state.reportsTable;\n","import { PayloadAction, createSelector, createSlice } from '@reduxjs/toolkit';\nimport { Webhook } from '../webhooks.models';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\n\ninterface WebhooksTableState {\n webhookToBeDeleted?: Webhook;\n}\n\nconst initialState: WebhooksTableState = {};\n\nconst webhooksTableSlice = createSlice({\n name: 'webhooksTable',\n initialState,\n reducers: {\n onWebhookToBeDeletedChanged: (\n state,\n action: PayloadAction\n ) => {\n state.webhookToBeDeleted = action.payload;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst { actions, reducer } = webhooksTableSlice;\n\nexport const { onWebhookToBeDeletedChanged } = actions;\n\nconst selectSelf = (state: RootState) => state.webhooksTable;\n\nexport const selectWebhookToBeDeleted = createSelector(\n selectSelf,\n (state) => state.webhookToBeDeleted\n);\n\nexport default reducer;\n","import { PayloadAction, createSelector, createSlice } from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { PathTimeCalculationTypes } from './paths.models';\nimport { PURGE } from 'redux-persist';\n\ninterface PathsTableState {\n currentPage: number;\n currentPageSize: number;\n pageSizes: number[];\n isIconOnly: boolean;\n selectedCalculationType: PathTimeCalculationTypes;\n}\n\nconst initialState: PathsTableState = {\n currentPage: 1,\n currentPageSize: 50,\n pageSizes: [5, 10, 25, 50, 100],\n isIconOnly: false,\n selectedCalculationType: PathTimeCalculationTypes.Mean\n};\n\nconst pathsTableSlice = createSlice({\n name: 'pathsTable',\n initialState,\n reducers: {\n onPreviousPage: (state) => {\n state.currentPage = state.currentPage - 1;\n },\n onNextPage: (state) => {\n state.currentPage = state.currentPage + 1;\n },\n onPageSizeChanged: (state, action: PayloadAction) => {\n state.currentPageSize = action.payload;\n state.currentPage = 1;\n },\n onIsIconOnlyToggled: (state) => {\n state.isIconOnly = !state.isIconOnly;\n },\n onCalculationTypeChanged: (\n state,\n action: PayloadAction\n ) => {\n state.selectedCalculationType = action.payload;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst { actions, reducer } = pathsTableSlice;\n\nexport const {\n onPreviousPage,\n onNextPage,\n onPageSizeChanged,\n onIsIconOnlyToggled,\n onCalculationTypeChanged\n} = actions;\n\nexport default reducer;\n\nexport const selectPathsTableState = (state: RootState) => state.pathsTable;\n\nexport const selectIsIconOnly = createSelector(\n selectPathsTableState,\n (state) => state.isIconOnly\n);\n\nexport const selectPathCalculationType = createSelector(\n selectPathsTableState,\n (state) => state.selectedCalculationType ?? PathTimeCalculationTypes.Mean\n);\n","export interface DebugToggle {\n name: string;\n enabled: boolean;\n type: ToggleType;\n}\n\nexport enum ToggleType {\n DisplayConversionId = 'Display conversion Ids',\n DisplayOpportunityId = 'Display opportunity Ids',\n DisplayRevenueId = 'Display revenue Ids',\n DisplayPathsTimeToConversion = 'Display paths time to conversion',\n POCToggle = 'POC Toggle',\n AdvancedReports = 'Advanced Reports',\n DisplayPOCDashboardTiles = 'Display POC dashboard tiles',\n DisplayNewSideBar = 'Displays The New Side Bar'\n}\n","import { PayloadAction, createSelector, createSlice } from '@reduxjs/toolkit';\nimport { Exclusion } from '../exclusions.models';\nimport { RootState } from 'app/store';\nimport { PURGE } from 'redux-persist';\n\ninterface ExclusionsTableState {\n exclusionToBeDeleted?: Exclusion;\n}\n\nconst initialState: ExclusionsTableState = {};\n\nconst exclusionsTableSlice = createSlice({\n name: 'exclusionsTable',\n initialState,\n reducers: {\n onExclusionToBeDeletedChanged: (\n state,\n action: PayloadAction\n ) => {\n state.exclusionToBeDeleted = action.payload;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst { actions, reducer } = exclusionsTableSlice;\n\nexport const { onExclusionToBeDeletedChanged } = actions;\n\nconst selectSelf = (state: RootState) => state.exclusionsTable;\n\nexport const selectExclusionToBeDeleted = createSelector(\n selectSelf,\n (state: ExclusionsTableState) => state.exclusionToBeDeleted\n);\n\nexport default reducer;\n","import { PayloadAction, createSelector, createSlice } from '@reduxjs/toolkit';\nimport { DebugToggle, ToggleType } from './internal.models';\nimport { RootState } from 'app/store';\nimport { logout } from 'features/auth/authenticationSlice';\nimport { PURGE } from 'redux-persist';\n\ninterface InternalSettingsState {\n debugToggles: DebugToggle[];\n}\n\nconst initialState: InternalSettingsState = {\n debugToggles: [\n {\n name: ToggleType.POCToggle,\n enabled: false,\n type: ToggleType.POCToggle\n },\n {\n name: ToggleType.DisplayConversionId,\n enabled: false,\n type: ToggleType.DisplayConversionId\n },\n {\n name: ToggleType.DisplayRevenueId,\n enabled: false,\n type: ToggleType.DisplayRevenueId\n },\n {\n name: ToggleType.DisplayOpportunityId,\n enabled: false,\n type: ToggleType.DisplayOpportunityId\n },\n {\n name: ToggleType.DisplayPathsTimeToConversion,\n enabled: false,\n type: ToggleType.DisplayPathsTimeToConversion\n },\n {\n name: ToggleType.DisplayPOCDashboardTiles,\n enabled: false,\n type: ToggleType.DisplayPOCDashboardTiles\n },\n {\n name: ToggleType.DisplayNewSideBar,\n enabled: false,\n type: ToggleType.DisplayNewSideBar\n }\n ]\n};\n\nconst internalSettingsSlice = createSlice({\n name: 'internalSettingsToggle',\n initialState,\n reducers: {\n onDebugToggleChanged: (state, action: PayloadAction) => {\n const index = state.debugToggles.findIndex(\n (item) => item.name === action.payload.name\n );\n if (index !== -1) {\n state.debugToggles[index].enabled = !action.payload.enabled;\n } else {\n console.error(\n `Debug toggle with name '${action.payload.name}' not found.`\n );\n }\n }\n },\n extraReducers: (builder) => {\n builder.addCase(logout, (state) => {\n return initialState;\n });\n builder.addCase(PURGE, () => initialState);\n }\n});\n\nconst { actions, reducer } = internalSettingsSlice;\n\nexport const { onDebugToggleChanged } = actions;\n\nconst selectSelf = (state: RootState) => state.internalSettings;\n\nexport const allDebugToggles = createSelector(\n selectSelf,\n (state: InternalSettingsState) =>\n state.debugToggles.filter(\n (toggle) => toggle.type !== ToggleType.AdvancedReports\n )\n);\n\nexport const debugToggleByType = createSelector(\n (state: RootState) => state.internalSettings.debugToggles,\n (_: any, type: ToggleType) => type,\n (debugToggles: DebugToggle[], type: ToggleType) =>\n debugToggles.find((debugToggle) => debugToggle.type === type)\n);\n\nexport default reducer;\n","export enum SegmentTypes {\n CUSTOM_DATA_KEY = 'CustomDataKey'\n}\n","import { SegmentTypes } from 'features/segment-controls/constants/segment-types';\nimport { Segment } from '../segment-controls.types';\nimport { v4 as guid } from 'uuid';\n\nexport function createSegment(importance: number): Segment {\n return {\n id: guid(),\n order: importance,\n segmentType: SegmentTypes.CUSTOM_DATA_KEY, // Temporary - this needs changing when we add more than CustomDataKey,\n segmentCategory: ''\n };\n}\n","import { SegmentControlsFilterValueOperators } from 'features/segment-controls/constants/segment-controls-filter-value-operators';\nimport { SegmentFilter } from '../segment-controls.types';\nimport { v4 as guid } from 'uuid';\n\nexport const createSegmentFilter = (\n segmentId: string,\n order: number,\n value: string,\n operator: SegmentControlsFilterValueOperators\n): SegmentFilter => {\n return {\n id: guid(),\n order,\n segmentId,\n values: [{ value, valueOperator: operator }]\n };\n};\n","export enum SegmentControlsFilterValueOperators {\n CONTAINS = 'Contains',\n EQUALS = 'Equal'\n}\n","import { createAction } from '@reduxjs/toolkit';\n\nexport const resetInsights = createAction('insights/reset');\n","import {\n PayloadAction,\n createSelector,\n createSlice,\n isAnyOf\n} from '@reduxjs/toolkit';\nimport {\n SegmentChangedPayload,\n Segment,\n SegmentFilter,\n SegmentFilterChangedPayload,\n SegmentFilterBeingEditedChangedPayload,\n SegmentFilterBeingEdited,\n SegmentFilterDeletedPayload\n} from './segment-controls.types';\nimport { RootState } from 'app/store';\nimport { createSegment } from './factories/segment-factory';\nimport { advancedReportQueryApi } from 'app/apis/advanced-reports/advanced-report-query-api';\nimport { selectAttributionModel } from 'features/attribute-model/availableAttributionModelsSlice';\nimport { changeDateRange } from 'features/date-range-selection/dateRangeSlice';\nimport { createSegmentFilter } from './factories/segment-filter-factory';\nimport { PURGE } from 'redux-persist';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\nimport { selectAttributionCompareModel } from 'features/attribute-compare-model/availableAttributionCompareModelsSlice';\nimport { SegmentControlsFilterValueOperators } from 'features/segment-controls/constants/segment-controls-filter-value-operators';\nimport { resetAdvancedReports } from 'features/advanced-reports/advanced-reports.middleware';\nimport { resetInsights } from 'features/insights/insights.middleware';\nimport { queryApi } from 'app/apis/queryApi';\n\ninterface SelectedSegmentControls {\n segments: Segment[];\n segmentFilters: SegmentFilter[];\n isDirty: boolean;\n segmentFilterBeingEdited?: SegmentFilter;\n}\n\ninterface SegmentControlsState {\n componentId?: string;\n selectedSegmentControls: SelectedSegmentControls;\n}\n\nconst initialState = {\n pageSegmentControls: [\n {\n componentId: 'AdvancedReports',\n selectedSegmentControls: {\n segments: [createSegment(0)],\n segmentFilters: [],\n isDirty: false\n }\n },\n {\n componentId: 'ConversionInfluence',\n selectedSegmentControls: {\n segments: [createSegment(0)],\n segmentFilters: [],\n isDirty: false\n }\n }\n ] as SegmentControlsState[]\n};\n\nconst segmentControlsSlice = createSlice({\n name: 'segmentControls',\n initialState,\n reducers: {\n onSegmentChanged: (state, action: PayloadAction) => {\n const selectedSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === action.payload.componentId\n );\n if (selectedSegmentControls) {\n const appendedSegments = [\n ...selectedSegmentControls.selectedSegmentControls.segments.filter(\n (segment) => segment.id !== action.payload.segment.id\n ),\n action.payload.segment\n ];\n\n selectedSegmentControls.selectedSegmentControls.segments =\n appendedSegments as Segment[];\n selectedSegmentControls.selectedSegmentControls.isDirty = true;\n }\n },\n onSegmentAdded: (state, action: PayloadAction) => {\n const selectedSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === action.payload.componentId\n );\n\n if (selectedSegmentControls) {\n selectedSegmentControls.selectedSegmentControls.segments = [\n ...selectedSegmentControls.selectedSegmentControls.segments,\n action.payload.segment\n ];\n selectedSegmentControls.selectedSegmentControls.isDirty = true;\n }\n },\n onSegmentDeleted: (state, action: PayloadAction) => {\n const selectedSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === action.payload.componentId\n );\n\n if (selectedSegmentControls) {\n selectedSegmentControls.selectedSegmentControls.segments =\n selectedSegmentControls.selectedSegmentControls.segments.filter(\n (segment) => segment.id !== action.payload.segment.id\n );\n selectedSegmentControls.selectedSegmentControls.segmentFilters =\n selectedSegmentControls.selectedSegmentControls.segmentFilters.filter(\n (filter) => filter.segmentId !== action.payload.segment.id\n );\n selectedSegmentControls.selectedSegmentControls.isDirty = true;\n }\n },\n onSegmentFilterAdded: (\n state,\n action: PayloadAction\n ) => {\n const selectedSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === action.payload.componentId\n );\n if (selectedSegmentControls) {\n const highestExistingOrder =\n selectedSegmentControls.selectedSegmentControls.segmentFilters\n .filter((filter) => filter.segmentId === action.payload.segment?.id)\n .map((filter) => filter.order)\n .max();\n\n const newSegmentFilter = createSegmentFilter(\n action.payload.segment!.id,\n highestExistingOrder + 1,\n '',\n SegmentControlsFilterValueOperators.EQUALS\n );\n\n selectedSegmentControls.selectedSegmentControls.segmentFilterBeingEdited =\n newSegmentFilter;\n }\n },\n onSegmentFilterChanged: (\n state,\n action: PayloadAction\n ) => {\n const selectedSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === action.payload.componentId\n );\n\n if (selectedSegmentControls) {\n const newFilters = [\n ...selectedSegmentControls.selectedSegmentControls.segmentFilters.filter(\n (filter) =>\n filter.id !==\n selectedSegmentControls.selectedSegmentControls\n .segmentFilterBeingEdited!.id\n ),\n selectedSegmentControls.selectedSegmentControls\n .segmentFilterBeingEdited!\n ];\n\n selectedSegmentControls.selectedSegmentControls.segmentFilters =\n newFilters as SegmentFilter[];\n selectedSegmentControls.selectedSegmentControls.isDirty = true;\n selectedSegmentControls.selectedSegmentControls.segmentFilterBeingEdited =\n undefined;\n }\n },\n onSegmentFilterDeleted: (\n state,\n action: PayloadAction\n ) => {\n const selectedSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === action.payload.componentId\n );\n\n if (selectedSegmentControls) {\n selectedSegmentControls.selectedSegmentControls.segmentFilters =\n selectedSegmentControls.selectedSegmentControls.segmentFilters.filter(\n (filter) => filter.id !== action.payload.segmentFilterId\n );\n selectedSegmentControls.selectedSegmentControls.isDirty = true;\n }\n },\n onSegmentFilterBeingEditedChanged: (\n state,\n action: PayloadAction\n ) => {\n const selectedSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === action.payload.componentId\n );\n if (selectedSegmentControls) {\n selectedSegmentControls.selectedSegmentControls.segmentFilterBeingEdited =\n action.payload.segmentFilter;\n }\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n builder.addCase(selectSite, () => initialState);\n builder.addCase(resetAdvancedReports, () => initialState);\n builder.addCase(resetInsights, () => initialState);\n builder.addCase(selectAttributionModel, (state) => {\n // Only applicable to advanced reports\n const advancedReportsSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === 'AdvancedReports'\n );\n if (advancedReportsSegmentControls) {\n advancedReportsSegmentControls.selectedSegmentControls.isDirty = true;\n }\n });\n builder.addCase(selectAttributionCompareModel, (state) => {\n // Only applicable to advanced reports\n const advancedReportsSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === 'AdvancedReports'\n );\n if (advancedReportsSegmentControls) {\n advancedReportsSegmentControls.selectedSegmentControls.isDirty = true;\n }\n });\n builder.addCase(changeDateRange, (state) => {\n // Applicable to both advanced reports and insights\n state.pageSegmentControls.forEach((pageSegmentControl) => {\n pageSegmentControl.selectedSegmentControls.isDirty = true;\n });\n });\n builder.addMatcher(\n queryApi.endpoints.getConversionInfluenceInsights.matchFulfilled,\n (state) => {\n const advancedReportsSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === 'ConversionInfluence'\n );\n if (advancedReportsSegmentControls) {\n advancedReportsSegmentControls.selectedSegmentControls.isDirty =\n false;\n }\n }\n );\n builder.addMatcher(\n isAnyOf(\n advancedReportQueryApi.endpoints.getClicksAdvancedReport.matchFulfilled,\n advancedReportQueryApi.endpoints.getConversionAdvancedReport\n .matchFulfilled,\n advancedReportQueryApi.endpoints.getOpportunityAdvancedReport\n .matchFulfilled,\n advancedReportQueryApi.endpoints.getRevenueAdvancedReport\n .matchFulfilled,\n advancedReportQueryApi.endpoints.getCostAdvancedReport.matchFulfilled\n ),\n (state) => {\n // Only applicable to advanced reports\n const advancedReportsSegmentControls = state.pageSegmentControls.find(\n (pageSegmentControls) =>\n pageSegmentControls.componentId === 'AdvancedReports'\n );\n if (advancedReportsSegmentControls) {\n advancedReportsSegmentControls.selectedSegmentControls.isDirty =\n false;\n }\n }\n );\n }\n});\n\nconst { actions, reducer } = segmentControlsSlice;\n\nexport const {\n onSegmentChanged,\n onSegmentAdded,\n onSegmentDeleted,\n onSegmentFilterAdded,\n onSegmentFilterChanged,\n onSegmentFilterDeleted,\n onSegmentFilterBeingEditedChanged\n} = actions;\n\nexport default reducer;\n\nconst selectSelf = (state: RootState) => state.segmentControls;\nconst selectSegmentControlStateByComponentId = (\n state: RootState,\n componentId: string\n) => componentId;\n\nexport const selectSegmentControlsStateByComponentId = createSelector(\n selectSelf,\n selectSegmentControlStateByComponentId,\n (segmentControls, componentId) => {\n const selectedSegmentControls = segmentControls.pageSegmentControls.find(\n (pageSegmentControls) => pageSegmentControls.componentId === componentId\n );\n\n return selectedSegmentControls;\n }\n);\n\nexport const selectSegments = createSelector(\n selectSegmentControlsStateByComponentId,\n (state) => state?.selectedSegmentControls.segments ?? []\n);\n\nexport const areSegmentsInitialState = createSelector(\n selectSegments,\n (segments) => segments.length === 1 && segments[0].segmentCategory === ''\n);\n\nexport const selectSegmentsOrdered = createSelector(\n selectSegments,\n (segments) =>\n segments.map((segment) => segment).sort((a, b) => a.order - b.order)\n);\n\nexport const selectHighestSegmentOrder = createSelector(\n selectSegments,\n (segments) => segments.map((segment) => segment.order).max()\n);\n\nexport const selectAreSegmentsValid = createSelector(\n selectSegments,\n (segments) => segments.every((segment) => segment.segmentCategory !== '')\n);\n\nexport const selectIsDirty = createSelector(\n selectSegmentControlsStateByComponentId,\n (state) => state?.selectedSegmentControls.isDirty\n);\n\nexport const selectCanRunQuery = createSelector(\n selectSegmentControlsStateByComponentId,\n selectAreSegmentsValid,\n (state, areSegmentsValid) =>\n state?.selectedSegmentControls.isDirty && areSegmentsValid\n);\n\nexport const selectCanAddSegment = createSelector(\n selectSegments,\n selectAreSegmentsValid,\n (segments, areSegmentsValid) => segments.length <= 5 && areSegmentsValid\n);\n\nexport const selectValidSegments = createSelector(selectSegments, (segments) =>\n segments\n .filter((segment) => segment.segmentCategory !== '')\n .map((segment) => segment)\n);\n\nexport const selectSegmentCategories = createSelector(\n selectSegmentsOrdered,\n (segments) => segments.map((segment) => segment.segmentCategory)\n);\n\nexport const selectSegmentFilters = createSelector(\n selectSegmentControlsStateByComponentId,\n (state) =>\n state?.selectedSegmentControls.segmentFilters\n .map((filter) => filter)\n .sort((a, b) => a.order - b.order)\n);\n\nexport const selectHasSegmentFilters = createSelector(\n selectSegmentControlsStateByComponentId,\n (state) => (state?.selectedSegmentControls.segmentFilters.length ?? 0) > 0\n);\n\nexport const selectFilterBeingEdited = createSelector(\n selectSegmentControlsStateByComponentId,\n (state) => {\n if (!state?.selectedSegmentControls.segmentFilterBeingEdited) {\n return undefined;\n }\n\n const existingFilterIndex =\n state.selectedSegmentControls.segmentFilters.findIndex(\n (filter) =>\n filter.id ===\n state.selectedSegmentControls.segmentFilterBeingEdited!.id\n );\n\n let titlePrefix = 'Filter Control - ';\n\n if (existingFilterIndex < 0) {\n titlePrefix += ' Add';\n } else {\n titlePrefix += ' Edit';\n }\n\n const segmentHasExistingFilters =\n state.selectedSegmentControls.segmentFilters.filter(\n (filter) =>\n filter.segmentId ===\n state.selectedSegmentControls.segmentFilterBeingEdited?.segmentId\n ).length > 0;\n\n if (segmentHasExistingFilters && existingFilterIndex !== 0) {\n titlePrefix += ' And Condition';\n }\n\n const filterBeingEdited: SegmentFilterBeingEdited = {\n ...state.selectedSegmentControls.segmentFilterBeingEdited,\n title: titlePrefix\n };\n\n return filterBeingEdited;\n }\n);\n\nexport const selectSegmentFiltersBySegmentId = createSelector(\n [\n (state: RootState) => state.segmentControls,\n (state: RootState, segmentId: string, componentId: string) => ({\n segmentId,\n componentId\n })\n ],\n (segmentControls, { segmentId, componentId }) => {\n const selectedSegmentControls = segmentControls.pageSegmentControls.find(\n (pageSegmentControls) => pageSegmentControls.componentId === componentId\n );\n\n return selectedSegmentControls?.selectedSegmentControls.segmentFilters.filter(\n (filter) => filter.segmentId === segmentId\n );\n }\n);\n","import {\n PayloadAction,\n createSelector,\n createSlice,\n isAnyOf\n} from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { RowToggledPayload } from './advanced-reports-table.types';\nimport { advancedReportQueryApi } from 'app/apis/advanced-reports/advanced-report-query-api';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\nimport { resetAdvancedReports } from '../advanced-reports.middleware';\n\ninterface AdvancedReportsTableState {\n openRowIds: string[];\n}\n\nconst initialState: AdvancedReportsTableState = {\n openRowIds: []\n};\n\nconst advancedReportsTableSlice = createSlice({\n name: 'advancedReportsTable',\n initialState,\n reducers: {\n onRowToggled: (state, action: PayloadAction) => {\n state.openRowIds = state.openRowIds.includes(action.payload.rowId)\n ? state.openRowIds.filter((id) => id !== action.payload.rowId)\n : [...state.openRowIds, action.payload.rowId];\n }\n },\n extraReducers: (builder) => {\n builder.addMatcher(\n isAnyOf(\n advancedReportQueryApi.endpoints.getClicksAdvancedReport.matchFulfilled,\n advancedReportQueryApi.endpoints.getConversionAdvancedReport\n .matchFulfilled,\n advancedReportQueryApi.endpoints.getOpportunityAdvancedReport\n .matchFulfilled,\n advancedReportQueryApi.endpoints.getRevenueAdvancedReport\n .matchFulfilled,\n advancedReportQueryApi.endpoints.getCostAdvancedReport.matchFulfilled,\n selectSite,\n resetAdvancedReports\n ),\n () => initialState\n );\n }\n});\n\nconst { actions, reducer } = advancedReportsTableSlice;\n\nexport const { onRowToggled } = actions;\n\nexport default reducer;\n\nexport const selectAdvancedReportsTableState = (state: RootState) =>\n state.advancedReportsTable;\n\nexport const selectOpenRowIds = createSelector(\n selectAdvancedReportsTableState,\n (state) => state.openRowIds\n);\n\nexport const selectIsRowOpen = createSelector(\n (state: RootState) => state.advancedReportsTable,\n (_: RootState, rowId: string) => rowId,\n (state, rowId) => state.openRowIds.includes(rowId)\n);\n","import {\n createSelector,\n createSlice,\n original,\n PayloadAction\n} from '@reduxjs/toolkit';\nimport { commandApi } from 'app/apis/commandApi';\nimport { RootState } from 'app/store';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\nimport { PURGE } from 'redux-persist';\n\nexport interface BasePendingDeleteRow {\n rowId: string;\n}\n\nexport interface RowPendingDeleteState {\n componentId?: string;\n rows: BasePendingDeleteRow[];\n}\n\nconst initialState = {\n rowsPendingDelete: [] as RowPendingDeleteState[]\n};\n\nconst rowsPendingDeleteSlice = createSlice({\n name: 'rowsPendingDeleteSlice',\n initialState,\n reducers: {\n clearPendingDeletes: (\n state,\n { payload: { componentId } }: PayloadAction<{ componentId: string }>\n ) => {\n state.rowsPendingDelete = state.rowsPendingDelete.filter(\n (selection) => selection.componentId !== componentId\n );\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n builder.addCase(selectSite, (state, action) => initialState);\n builder.addMatcher(\n commandApi.endpoints.deleteMultipleRevenues.matchFulfilled,\n (\n state,\n {\n meta: {\n arg: {\n originalArgs: { componentId, revenue }\n }\n }\n }\n ) => {\n const currentRowSelection = state.rowsPendingDelete.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n if (!currentRowSelection) {\n state.rowsPendingDelete.push({\n componentId,\n rows: revenue.map((rev) => ({\n rowId: rev.revenueId\n }))\n });\n return;\n }\n\n const rowsToAdd = revenue\n .map((rev) => ({\n rowId: rev.revenueId\n }))\n .filter((revenueRows) =>\n currentRowSelection?.rows.some(\n (row) => row.rowId !== revenueRows.rowId\n )\n );\n\n currentRowSelection.rows = [...currentRowSelection.rows, ...rowsToAdd];\n }\n );\n builder.addMatcher(\n commandApi.endpoints.deleteMultipleOpportunities.matchFulfilled,\n (\n state,\n {\n meta: {\n arg: {\n originalArgs: { componentId, opportunities }\n }\n }\n }\n ) => {\n const currentRowSelection = state.rowsPendingDelete.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n if (!currentRowSelection) {\n state.rowsPendingDelete.push({\n componentId,\n rows: opportunities.map((opp) => ({\n rowId: opp.opportunityId\n }))\n });\n return;\n }\n\n const rowsToAdd = opportunities\n .map((opp) => ({\n rowId: opp.opportunityId\n }))\n .filter((opportunityRows) =>\n currentRowSelection?.rows.some(\n (row) => row.rowId !== opportunityRows.rowId\n )\n );\n\n currentRowSelection.rows = [...currentRowSelection.rows, ...rowsToAdd];\n }\n );\n }\n});\n\nconst selectSelf = (state: RootState) => state.rowsPendingDelete;\nconst selectRowsPendingDeleteByComponentId = (\n state: RootState,\n componentId: string\n) => componentId;\n\nexport const selectRowsPendingDeleteForComponent = createSelector(\n selectSelf,\n selectRowsPendingDeleteByComponentId,\n (state, componentId) => {\n const pendingRows = state.rowsPendingDelete.find(\n (rowSelection) => rowSelection.componentId === componentId\n );\n return pendingRows?.rows ?? [];\n }\n);\n\nexport const selectDoIHavePendingDeletesForComponent = createSelector(\n selectSelf,\n selectRowsPendingDeleteByComponentId,\n (state, componentId) =>\n state.rowsPendingDelete.some(\n (rowSelection) =>\n rowSelection.componentId === componentId && rowSelection.rows.length > 0\n )\n);\n\nconst { actions, reducer } = rowsPendingDeleteSlice;\n\nexport const { clearPendingDeletes } = actions;\n\nexport default reducer;\n","import {\n PayloadAction,\n createSelector,\n createSlice,\n isAnyOf\n} from '@reduxjs/toolkit';\nimport { RootState } from 'app/store';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\nimport { RowToggledPayload } from '../types/insights-table.types';\nimport { resetInsights } from '../insights.middleware';\n\ninterface ConversionInfluenceInsightTableState {\n openRowIds: string[];\n}\n\nconst initialState: ConversionInfluenceInsightTableState = {\n openRowIds: []\n};\n\nconst conversionInfluenceInsightsTableSlice = createSlice({\n name: 'conversionInfluenceInsightsTable',\n initialState,\n reducers: {\n onRowToggled: (state, action: PayloadAction) => {\n state.openRowIds = state.openRowIds.includes(action.payload.rowId)\n ? state.openRowIds.filter((id) => id !== action.payload.rowId)\n : [...state.openRowIds, action.payload.rowId];\n }\n },\n extraReducers: (builder) => {\n builder.addMatcher(isAnyOf(selectSite, resetInsights), () => initialState);\n }\n});\n\nconst { actions, reducer } = conversionInfluenceInsightsTableSlice;\n\nexport const { onRowToggled } = actions;\n\nexport default reducer;\n\nexport const selectConversionInfluenceInsightsTableState = (state: RootState) =>\n state.conversionInfluenceInsightsTable;\n\nexport const selectOpenRowIds = createSelector(\n selectConversionInfluenceInsightsTableState,\n (state) => state.openRowIds\n);\n\nexport const selectIsRowOpen = createSelector(\n (state: RootState) => state.conversionInfluenceInsightsTable,\n (_: RootState, rowId: string) => rowId,\n (state, rowId) => state.openRowIds.includes(rowId)\n);\n","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\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; }\n\n/*\n autoMergeLevel2: \n - merges 2 level of substate\n - skips substate if already modified\n - this is essentially redux-perist v4 behavior\n*/\nexport default function autoMergeLevel2(inboundState, originalState, reducedState, _ref) {\n var debug = _ref.debug;\n\n var newState = _objectSpread({}, reducedState); // only rehydrate if inboundState exists and is an object\n\n\n if (inboundState && _typeof(inboundState) === 'object') {\n Object.keys(inboundState).forEach(function (key) {\n // ignore _persist data\n if (key === '_persist') return; // if reducer modifies substate, skip auto rehydration\n\n if (originalState[key] !== reducedState[key]) {\n if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist/stateReconciler: sub state for key `%s` modified, skipping.', key);\n return;\n }\n\n if (isPlainEnoughObject(reducedState[key])) {\n // if object is plain enough shallow merge the new values (hence \"Level2\")\n newState[key] = _objectSpread({}, newState[key], {}, inboundState[key]);\n return;\n } // otherwise hard set\n\n\n newState[key] = inboundState[key];\n });\n }\n\n if (process.env.NODE_ENV !== 'production' && debug && inboundState && _typeof(inboundState) === 'object') console.log(\"redux-persist/stateReconciler: rehydrated keys '\".concat(Object.keys(inboundState).join(', '), \"'\"));\n return newState;\n}\n\nfunction isPlainEnoughObject(o) {\n return o !== null && !Array.isArray(o) && _typeof(o) === 'object';\n}","import { PayloadAction, createListenerMiddleware } from '@reduxjs/toolkit';\nimport { onHideToastByTitle, onSuccess } from './toast.slice';\nimport { ToastPayload } from './toast.types';\n\nexport const toastMiddleware = createListenerMiddleware();\ntoastMiddleware.startListening({\n actionCreator: onSuccess,\n effect: async (action: PayloadAction, listenerApi) => {\n await listenerApi.delay(5000);\n\n listenerApi.dispatch(onHideToastByTitle(action.payload.title));\n }\n});\n","export const timeInMilliSecondsToWaitForDataToBeDeleted = 300000;\n","export interface CreateSegmentationConfigRequestDto {\n siteId: string;\n ruleAccessType: RuleAccessType;\n name: string;\n createdDateTime: string;\n createdBy: string;\n segmentationType: SegmentationType;\n segmentName: string;\n segmentValue: string;\n rules: SegmentationRuleDto[];\n}\n\nexport interface UpdateSegmentationConfigRequestDto {\n id: string;\n siteId: string;\n ruleAccessType: RuleAccessType;\n name: string;\n updatedDateTime: string;\n updatedBy: string;\n segmentationType: SegmentationType;\n segmentName: string;\n segmentValue: string;\n rules: SegmentationRuleDto[];\n}\n\nexport interface SegmentationRuleDto {\n priority: number;\n targets: SegmentationRuleTargetDto;\n}\n\nexport interface SegmentationRuleTargetDto {\n value: string;\n type: string;\n conditionalOperator: ConditionalOperator;\n}\n\nexport interface Rule {\n id: number;\n}\n\nexport interface RuleTarget {\n rule_id: number;\n target_id: number;\n key?: string | null;\n value: string;\n type: TargetType;\n conditional_operator: string;\n}\n\nexport enum ConditionalOperator {\n EQUALS = 'equals',\n CONTAINS = 'contains',\n DOES_NOT_CONTAIN = 'does_not_contain',\n EQUALS_CASE_INSENSITIVE = 'equals_case_insensitive',\n MULTI_TYPE_EQUALITY = 'multi_type_equality',\n NOT_EMPTY = 'not_empty'\n}\n\nexport enum TargetType {\n UTM_MEDIUM = 'UtmMedium',\n UTM_SOURCE = 'UtmSource',\n REFERRER_HOST_NAME = 'ReferrerHostName',\n PAYLOAD_KEY = 'PayloadKey',\n LANDING_PAGE_FULL_URL = 'LandingPageFullUrl',\n UTM_CAMPAIGN = 'UtmCampaign',\n PAYLOAD_VALUE = 'PayloadValue',\n LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEY_AND_VALUE = 'LandingPageUrlAndQueryStringSegmentsKeyAndValue',\n PAYLOAD_KEY_AND_VALUE = 'PayloadKeyAndValue',\n LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEYS = 'LandingPageUrlAndQueryStringSegmentsKeys',\n LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_VALUES = 'LandingPageUrlAndQueryStringSegmentsValues',\n AD_PLATFORM = 'AdPlatform',\n CAMPAIGN_NAME = 'CampaignName',\n LABEL_NAME = 'LabelName',\n LABEL_TYPE = 'LabelType',\n CAMPAIGN_ADVERTISING_CHANNEL_TYPE = 'CampaignAdvertisingChannelType'\n}\n\nexport enum SegmentationType {\n SESSION = 'Session',\n FILTER = 'Filter'\n}\n\nexport enum RuleAccessType {\n ADMIN = 'Admin',\n MANUAL = 'Manual'\n}\n\nexport const getSegmentationType = (segmentationType: string) => {\n switch (segmentationType) {\n case 'Session':\n return SegmentationType.SESSION;\n case 'Filter':\n return SegmentationType.FILTER;\n default:\n throw Error(\n `Could not find segmentation type for given type ${segmentationType}`\n );\n }\n};\n\nexport const getRuleAccessType = (ruleAccessType: string) => {\n switch (ruleAccessType) {\n case 'Manual':\n return RuleAccessType.MANUAL;\n case 'Admin':\n return RuleAccessType.ADMIN;\n default:\n throw Error(\n `Could not find rule access type for given type ${ruleAccessType}`\n );\n }\n};\n\nexport const getTargetType = (targetType: string): TargetType => {\n switch (targetType) {\n case 'UtmMedium':\n return TargetType.UTM_MEDIUM;\n case 'UtmSource':\n return TargetType.UTM_SOURCE;\n case 'ReferrerHostName':\n return TargetType.REFERRER_HOST_NAME;\n case 'PayloadKey':\n return TargetType.PAYLOAD_KEY;\n case 'LandingPageFullUrl':\n return TargetType.LANDING_PAGE_FULL_URL;\n case 'UtmCampaign':\n return TargetType.UTM_CAMPAIGN;\n case 'PayloadValue':\n return TargetType.PAYLOAD_VALUE;\n case 'LandingPageUrlAndQueryStringSegmentsKeyAndValue':\n return TargetType.LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEY_AND_VALUE;\n case 'PayloadKeyAndValue':\n return TargetType.PAYLOAD_KEY_AND_VALUE;\n case 'LandingPageUrlAndQueryStringSegmentsKeys':\n return TargetType.LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEYS;\n case 'LandingPageUrlAndQueryStringSegmentsValues':\n return TargetType.LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_VALUES;\n case 'AdPlatform':\n return TargetType.AD_PLATFORM;\n case 'CampaignName':\n return TargetType.CAMPAIGN_NAME;\n case 'LabelName':\n return TargetType.LABEL_NAME;\n case 'LabelType':\n return TargetType.LABEL_TYPE;\n case 'CampaignAdvertisingChannelType':\n return TargetType.CAMPAIGN_ADVERTISING_CHANNEL_TYPE;\n default:\n throw new Error(\n `Could not find target type for given type ${targetType}`\n );\n }\n};\n\nexport const getConditionalOperator = (operator: any): ConditionalOperator => {\n switch (operator) {\n case 0:\n return ConditionalOperator.EQUALS;\n case 1:\n return ConditionalOperator.CONTAINS;\n case 2:\n return ConditionalOperator.DOES_NOT_CONTAIN;\n case 3:\n return ConditionalOperator.EQUALS_CASE_INSENSITIVE;\n case 4:\n return ConditionalOperator.MULTI_TYPE_EQUALITY;\n case 5:\n return ConditionalOperator.NOT_EMPTY;\n default:\n throw new Error(\n `Could not find conditional operator for given type ${operator}`\n );\n }\n};\n","import { createListenerMiddleware } from '@reduxjs/toolkit';\nimport { clearPendingDeletes } from './rowPendingDeletionSlice';\nimport { commandApi } from 'app/apis/commandApi';\nimport { timeInMilliSecondsToWaitForDataToBeDeleted } from 'common/constants/timeout-values';\nimport { queryApi } from 'app/apis/queryApi';\n\nexport const revenueRowPendingDeletionListenerMiddleware =\n createListenerMiddleware();\nexport const opportunityRowPendingDeletionListenerMiddleware =\n createListenerMiddleware();\n\nrevenueRowPendingDeletionListenerMiddleware.startListening({\n matcher: commandApi.endpoints.deleteMultipleRevenues.matchFulfilled,\n effect: async (\n {\n meta: {\n arg: {\n originalArgs: { componentId }\n }\n }\n },\n listenerApi\n ) => {\n listenerApi.cancelActiveListeners();\n\n console.log('Waiting for revenue data to be deleted...');\n\n await listenerApi.delay(timeInMilliSecondsToWaitForDataToBeDeleted);\n\n listenerApi.dispatch(clearPendingDeletes({ componentId }));\n listenerApi.dispatch(queryApi.util.invalidateTags(['Revenue']));\n }\n});\n\nopportunityRowPendingDeletionListenerMiddleware.startListening({\n matcher: commandApi.endpoints.deleteMultipleOpportunities.matchFulfilled,\n effect: async (\n {\n meta: {\n arg: {\n originalArgs: { componentId }\n }\n }\n },\n listenerApi\n ) => {\n listenerApi.cancelActiveListeners();\n\n console.log('Waiting for opportunity data to be deleted...');\n\n await listenerApi.delay(timeInMilliSecondsToWaitForDataToBeDeleted);\n\n listenerApi.dispatch(clearPendingDeletes({ componentId }));\n listenerApi.dispatch(queryApi.util.invalidateTags(['Opportunities']));\n }\n});\n","import { createSelector, createSlice } from '@reduxjs/toolkit';\nimport {\n ConditionalOperator,\n Rule,\n RuleAccessType,\n RuleTarget,\n SegmentationType,\n TargetType\n} from './segmentation-config.types';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\nimport { PURGE } from 'redux-persist';\nimport { RootState } from 'app/store';\nimport { TabKey } from './segmentation-config-tab-keys';\n\nconst targetTypeOptionsByCategory: Record = {\n [TabKey.Forms]: [\n TargetType.UTM_MEDIUM,\n TargetType.UTM_SOURCE,\n TargetType.UTM_CAMPAIGN,\n TargetType.REFERRER_HOST_NAME,\n TargetType.PAYLOAD_KEY,\n TargetType.LANDING_PAGE_FULL_URL,\n TargetType.LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEY_AND_VALUE,\n TargetType.PAYLOAD_KEY_AND_VALUE\n ],\n [TabKey.Cost]: [\n TargetType.AD_PLATFORM,\n TargetType.CAMPAIGN_NAME,\n TargetType.LABEL_NAME,\n TargetType.LABEL_TYPE,\n TargetType.CAMPAIGN_ADVERTISING_CHANNEL_TYPE\n ]\n};\n\nconst initialState = {\n segmentationConfigName: '',\n segmentName: '',\n segmentValue: '',\n segmentationType: SegmentationType.FILTER,\n ruleAccessType: RuleAccessType.ADMIN,\n rules: [{ id: 1 }] as Rule[],\n ruleTargets: [\n {\n rule_id: 1,\n target_id: 1,\n value: '',\n key: '',\n type: TargetType.UTM_MEDIUM,\n conditional_operator: ConditionalOperator.EQUALS\n }\n ] as RuleTarget[],\n segmentNameErrors: [],\n segmentationConfigNameErrors: [],\n segmentationCategory: null as TabKey | null\n};\n\nconst segmentationConfigSlice = createSlice({\n name: 'segmentationConfig',\n initialState,\n reducers: {\n setSegmentationCategory: (state, action) => {\n state.segmentationCategory = action.payload;\n },\n onSegmentationConfigNameChanged: (state, action) => {\n const { newSegmentationConfigName } = action.payload;\n state.segmentationConfigName = newSegmentationConfigName;\n },\n onSegmentNameChanged: (state, action) => {\n const { newSegmentName } = action.payload;\n state.segmentName = newSegmentName;\n },\n onSegmentValueChanged: (state, action) => {\n const { newSegmentValue } = action.payload;\n state.segmentValue = newSegmentValue;\n },\n onSegmentationTypeChanged: (state, action) => {\n const { newSegmentationType } = action.payload;\n state.segmentationType = newSegmentationType;\n },\n onRuleAccessTypeChanged: (state, action) => {\n const { newRuleAccessType } = action.payload;\n state.ruleAccessType = newRuleAccessType;\n },\n onSegmentationConfigNameErrorsChanged: (state, action) => {\n const { newSegmentationConfigNameErrors } = action.payload;\n state.segmentationConfigNameErrors = newSegmentationConfigNameErrors;\n },\n onSegmentNameErrorsChanged: (state, action) => {\n const { newSegmentNameErrors } = action.payload;\n state.segmentNameErrors = newSegmentNameErrors;\n },\n onRuleAdded: (state) => {\n const newRuleId = state.rules[state.rules.length - 1].id + 1;\n state.rules.push({ id: newRuleId });\n state.ruleTargets.push({\n rule_id: newRuleId,\n target_id: 1,\n key: '',\n value: '',\n type: TargetType.UTM_MEDIUM,\n conditional_operator: ConditionalOperator.EQUALS\n });\n },\n onRulesChanged: (state, action) => {\n const { rules } = action.payload;\n state.rules = rules;\n },\n onRuleRemoved: (state, action) => {\n const { ruleKey } = action.payload;\n state.rules = state.rules.filter((item) => item.id !== ruleKey);\n state.ruleTargets = state.ruleTargets.filter(\n (item) => item.rule_id !== ruleKey\n );\n },\n onTargetAdded: (state, action) => {\n const { ruleKey } = action.payload;\n const newTargetKey =\n state.ruleTargets.filter((target) => target.rule_id === ruleKey)\n .length + 1;\n\n state.ruleTargets.push({\n rule_id: ruleKey,\n target_id: newTargetKey,\n value: '',\n type: TargetType.UTM_MEDIUM,\n conditional_operator: ConditionalOperator.EQUALS\n });\n },\n onTargetsChanged: (state, action) => {\n const { targets } = action.payload;\n state.ruleTargets = targets;\n },\n onTargetRemoved: (state, action) => {\n const { ruleKey, targetKey } = action.payload;\n state.ruleTargets = state.ruleTargets.filter(\n (item) => !(item.rule_id === ruleKey && item.target_id === targetKey)\n );\n },\n updateRuleTarget: (state, action) => {\n const { ruleKey, targetKey, props } = action.payload;\n state.ruleTargets = state.ruleTargets.map((item) =>\n item.rule_id === ruleKey && item.target_id === targetKey\n ? { ...item, ...props }\n : item\n );\n },\n onRuleTargetsChanged: (state, action) => {\n const { ruleTargets } = action.payload;\n state.ruleTargets = ruleTargets;\n },\n resetSegmentationConfig: (state) => {\n Object.assign(state, initialState);\n }\n },\n extraReducers: (builder) => {\n builder.addCase(PURGE, () => initialState);\n builder.addCase(selectSite, () => initialState);\n }\n});\n\nconst { actions, reducer } = segmentationConfigSlice;\n\nexport const {\n onSegmentationConfigNameChanged,\n onSegmentNameChanged,\n onSegmentValueChanged,\n onSegmentationTypeChanged,\n onRuleAccessTypeChanged,\n onSegmentationConfigNameErrorsChanged,\n onSegmentNameErrorsChanged,\n onRuleAdded,\n onRulesChanged,\n onRuleRemoved,\n onTargetAdded,\n onTargetsChanged,\n onTargetRemoved,\n updateRuleTarget,\n onRuleTargetsChanged,\n resetSegmentationConfig,\n setSegmentationCategory\n} = actions;\n\nexport default reducer;\n\nexport const selectSegmentationConfigState = (state: RootState) =>\n state.segmentationConfig;\n\nexport const selectSegmentationCategory = (state: RootState) =>\n state.segmentationConfig.segmentationCategory;\n\nexport const selectTargetTypeOptions = (state: RootState) => {\n return state.segmentationConfig.segmentationCategory\n ? targetTypeOptionsByCategory[state.segmentationConfig.segmentationCategory]\n : [];\n};\n\nexport const selectRules = createSelector(\n selectSegmentationConfigState,\n (state) => state.rules\n);\n\nexport const selectRuleTargets = createSelector(\n selectSegmentationConfigState,\n (state) => state.ruleTargets\n);\n\nexport const selectConfigName = createSelector(\n selectSegmentationConfigState,\n (state) => state.segmentationConfigName\n);\n\nexport const selectSegmentName = createSelector(\n selectSegmentationConfigState,\n (state) => state.segmentName\n);\n\nexport const selectSegmentValue = createSelector(\n selectSegmentationConfigState,\n (state) => state.segmentValue\n);\n\nexport const selectSegmentationType = createSelector(\n selectSegmentationConfigState,\n (state) => state.segmentationType\n);\n\nexport const selectRuleAccessType = createSelector(\n selectSegmentationConfigState,\n (state) => state.ruleAccessType\n);\n\nexport const selectConfigNameErrors = createSelector(\n selectSegmentationConfigState,\n (state): string[] => state.segmentationConfigNameErrors\n);\n\nexport const selectSegmentNameErrors = createSelector(\n selectSegmentationConfigState,\n (state): string[] => state.segmentNameErrors\n);\n\nexport const selectRuleTargetsByRuleId = createSelector(\n (state: RootState) => state.segmentationConfig.ruleTargets,\n (_: RootState, ruleId: number) => ruleId,\n (ruleTargets, ruleId) =>\n ruleTargets?.filter((target) => target.rule_id === ruleId) || []\n);\n","import {\n combineReducers,\n configureStore,\n createListenerMiddleware\n} from '@reduxjs/toolkit';\nimport isLoadingReducer from 'common/components/loading/isLoadingSlice';\nimport availableAttributionModelsReducer from 'features/attribute-model/availableAttributionModelsSlice';\nimport availableAttributionCompareModelsReducer from 'features/attribute-compare-model/availableAttributionCompareModelsSlice';\nimport selectedSiteReducer from 'features/topbar/selectedSiteSlice';\nimport dateRangeReducer from 'features/date-range-selection/dateRangeSlice';\nimport chartOptionsReducer from 'features/charts/chartOptionsSlice';\nimport paginationOptionsReducer from 'features/pagination/paginationOptionsSlice';\nimport searchBarReducer from 'features/search-bar/searchBarSlice';\nimport authReducer from 'features/auth/authenticationSlice';\nimport { authApi } from 'app/apis/authApi';\nimport { queryApi } from 'app/apis/queryApi';\nimport sidebarTogglingReducer from 'features/sidebar/sidebarTogglingSlice';\nimport sidebarReducer from 'features/sidebar/sidebarSlice';\nimport pocToggleReducer from 'features/poc/poc-toggle/pocToggleSlice';\nimport helpTileReducer from 'features/dashboard/helpTileSlice';\nimport rowSelectionReducer from 'features/row-selection/rowSelectionSlice';\nimport modalSliceReducer from 'features/modal/modalSlice';\nimport accordionSliceReducer from 'common/components/accordion/accordionSlice';\nimport dataViewSelectionReducer from 'features/data-view-selection/dataViewSelectionSlice';\nimport googleStaticMapReducer from 'features/maps/google-static-maps/googleStaticMapSlice';\nimport settingsReducer from 'features/settings/settingsSlice';\nimport {\n persistStore,\n persistReducer,\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n PersistConfig\n} from 'redux-persist';\nimport storage from 'redux-persist-indexeddb-storage';\nimport { commandApi } from './apis/commandApi';\nimport blurReducer from 'features/blur/blurToggleSlice';\nimport { publicCommandApi } from './apis/publicCommandApi';\nimport toastReducer from 'features/toast/toast.slice';\nimport { uploadReducer } from 'features/upload';\nimport mmmHeaderControlsReducer from 'features/marketing-mix-modelling/header-controls/header-controls.slice';\nimport reportsTableReducer from 'features/reports/reports-table.slice';\nimport webhooksTableReducer from 'features/webhooks/webhooks-table/webhooks-table.slice';\nimport pathsTableReducer from 'features/conversions/paths/paths.slice';\nimport exclusionsTableReducer from 'features/exclusions/exclusions-table/exclusions-table.slice';\nimport internalSettingsReducer from 'features/internal/internal-settings.slice';\nimport segmentControlsReducer from 'features/segment-controls/segment-controls.slice';\nimport advancedReportsTableReducer from 'features/advanced-reports/table/advanced-reports-table.slice';\nimport rowPendingDeleteSliceReducer from 'features/row-deletion/rowPendingDeletionSlice';\nimport conversionInfluenceInsightsReducer from 'features/insights/conversion-influence/conversion-influence-table.slice';\nimport autoMergeLevel2 from 'redux-persist/es/stateReconciler/autoMergeLevel2';\nimport { advancerReportsSiteIdChangedHandler } from 'features/advanced-reports/advanced-reports.middleware';\nimport { toastMiddleware } from 'features/toast/toast.listenermiddleware';\nimport {\n opportunityRowPendingDeletionListenerMiddleware,\n revenueRowPendingDeletionListenerMiddleware\n} from 'features/row-deletion/rowPendingDeletion.listenermiddleware';\nimport segmentationConfigReducer from 'features/segmentation-config/segmentation-config.slice';\n\nconst rootReducer = combineReducers({\n [commandApi.reducerPath]: commandApi.reducer,\n [publicCommandApi.reducerPath]: publicCommandApi.reducer,\n [authApi.reducerPath]: authApi.reducer,\n [queryApi.reducerPath]: queryApi.reducer,\n blur: blurReducer,\n dateRange: dateRangeReducer,\n isLoading: isLoadingReducer,\n selectedSite: selectedSiteReducer,\n auth: authReducer,\n chartOptions: chartOptionsReducer,\n paginationOptions: paginationOptionsReducer,\n searchBar: searchBarReducer,\n sidebar: sidebarTogglingReducer,\n sidebarv2: sidebarReducer,\n pocToggle: pocToggleReducer,\n helpTile: helpTileReducer,\n rowSelection: rowSelectionReducer,\n modal: modalSliceReducer,\n accordions: accordionSliceReducer,\n dataViewSelections: dataViewSelectionReducer,\n googleStaticMap: googleStaticMapReducer,\n settings: settingsReducer,\n toast: toastReducer,\n upload: uploadReducer,\n mmmHeaderControls: mmmHeaderControlsReducer,\n reportsTable: reportsTableReducer,\n availableAttributionModels: availableAttributionModelsReducer,\n availableAttributionCompareModels: availableAttributionCompareModelsReducer,\n webhooksTable: webhooksTableReducer,\n exclusionsTable: exclusionsTableReducer,\n pathsTable: pathsTableReducer,\n internalSettings: internalSettingsReducer,\n segmentControls: segmentControlsReducer,\n advancedReportsTable: advancedReportsTableReducer,\n conversionInfluenceInsightsTable: conversionInfluenceInsightsReducer,\n rowsPendingDelete: rowPendingDeleteSliceReducer,\n segmentationConfig: segmentationConfigReducer\n});\n\nconst persistConfig: PersistConfig = {\n key: 'root',\n stateReconciler: autoMergeLevel2,\n version: 2,\n storage: storage('appState'),\n blacklist: [\n authApi.reducerPath,\n queryApi.reducerPath,\n commandApi.reducerPath,\n publicCommandApi.reducerPath,\n 'helpTile',\n 'modal',\n 'toast',\n 'upload',\n 'sidebar',\n 'sidebarv2',\n 'mmmHeaderControls',\n 'webhooksTable',\n 'segmentControls',\n 'advancedReportsTable',\n 'availableAttributionModels',\n 'availableAttributionCompareModels'\n ],\n timeout: undefined\n};\n\nconst persistedReducer = persistReducer(persistConfig, rootReducer);\n\n// listenerMiddleware used for inline listeners in components i.e. dispatch(addListener({ actionCreator: confirmModal, effect: ... }))\nconst genericListenerMiddleware = createListenerMiddleware();\n\nexport const store = configureStore({\n reducer: persistedReducer,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER]\n }\n })\n .prepend([\n genericListenerMiddleware.middleware,\n toastMiddleware.middleware,\n revenueRowPendingDeletionListenerMiddleware.middleware,\n opportunityRowPendingDeletionListenerMiddleware.middleware\n ]) // Must be prepended. See https://redux-toolkit.js.org/api/createListenerMiddleware#basic-usage\n .concat(\n advancerReportsSiteIdChangedHandler,\n authApi.middleware,\n queryApi.middleware,\n commandApi.middleware,\n publicCommandApi.middleware\n ),\n devTools: process.env.NODE_ENV !== 'production'\n});\n\nexport const persistor = persistStore(store);\n\nexport type RootState = ReturnType;\nexport type AppDispatch = typeof store.dispatch;\n","export default function _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}","Array.prototype.max = function () {\n if (this && this.length > 0) {\n return Math.max.apply(null, this);\n }\n return 0;\n};\n\n// Required for transpiler to pick it up as a module\nexport {};\n","import * as React from \"react\";\nimport type { History, Location } from \"history\";\nimport { Action as NavigationType } from \"history\";\n\nimport type { RouteMatch } from \"./router\";\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 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 type Navigator = Pick;\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n}\n\nexport const NavigationContext = React.createContext(\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(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\ninterface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n","import type { Location, Path, To } from \"history\";\nimport { parsePath } from \"history\";\n\nexport function invariant(cond: any, message: string): asserts cond {\n if (!cond) throw new Error(message);\n}\n\nexport function warning(cond: any, message: string): void {\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 React Router!\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\nconst alreadyWarned: Record = {};\nexport function warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n\ntype ParamParseFailed = { failed: true };\n\ntype ParamParseSegment =\n // Check here if there exists a forward slash in the string.\n Segment extends `${infer LeftSegment}/${infer RightSegment}`\n ? // If there is a forward slash, then attempt to parse each side of the\n // forward slash.\n ParamParseSegment extends infer LeftResult\n ? ParamParseSegment extends infer RightResult\n ? LeftResult extends string\n ? // If the left side is successfully parsed as a param, then check if\n // the right side can be successfully parsed as well. If both sides\n // can be parsed, then the result is a union of the two sides\n // (read: \"foo\" | \"bar\").\n RightResult extends string\n ? LeftResult | RightResult\n : LeftResult\n : // If the left side is not successfully parsed as a param, then check\n // if only the right side can be successfully parse as a param. If it\n // can, then the result is just right, else it's a failure.\n RightResult extends string\n ? RightResult\n : ParamParseFailed\n : ParamParseFailed\n : // If the left side didn't parse into a param, then just check the right\n // side.\n ParamParseSegment extends infer RightResult\n ? RightResult extends string\n ? RightResult\n : ParamParseFailed\n : ParamParseFailed\n : // If there's no forward slash, then check if this segment starts with a\n // colon. If it does, then this is a dynamic segment, so the result is\n // just the remainder of the string. Otherwise, it's a failure.\n Segment extends `:${infer Remaining}`\n ? Remaining\n : ParamParseFailed;\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 =\n ParamParseSegment extends string\n ? ParamParseSegment\n : string;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\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 interface RouteObject {\n caseSensitive?: boolean;\n children?: RouteObject[];\n element?: React.ReactNode;\n index?: boolean;\n path?: string;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/docs/en/v6/api#generatepath\n */\nexport function generatePath(path: string, params: Params = {}): string {\n return path\n .replace(/:(\\w+)/g, (_, key) => {\n invariant(params[key] != null, `Missing \":${key}\" param`);\n return params[key]!;\n })\n .replace(/\\/*\\*$/, (_) =>\n params[\"*\"] == null ? \"\" : params[\"*\"].replace(/^\\/*/, \"/\")\n );\n}\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface RouteMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\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: RouteObject;\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/docs/en/v6/api#matchroutes\n */\nexport function matchRoutes(\n routes: RouteObject[],\n locationArg: Partial | string,\n basename = \"/\"\n): RouteMatch[] | 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(branches[i], pathname);\n }\n\n return matches;\n}\n\ninterface RouteMeta {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObject;\n}\n\ninterface RouteBranch {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes(\n routes: RouteObject[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n routes.forEach((route, index) => {\n let meta: RouteMeta = {\n relativePath: route.path || \"\",\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 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({ path, score: computeScore(path, route.index), routesMeta });\n });\n\n return branches;\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 branch: RouteBranch,\n pathname: string\n): RouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: RouteMatch[] = [];\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 params: matchedParams,\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 * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\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 {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\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 = {\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/docs/en/v6/api#matchpath\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, paramNames] = 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 = paramNames.reduce>(\n (memo, paramName, 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 memo[paramName] = safelyDecodeURIComponent(\n captureGroups[index] || \"\",\n paramName\n );\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, string[]] {\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 paramNames: string[] = [];\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) => {\n paramNames.push(paramName);\n return \"([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n paramNames.push(\"*\");\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else {\n regexpSource += end\n ? \"\\\\/*$\" // When matching to the end, ignore trailing slashes\n : // Otherwise, match a word boundary or a proceeding /. The word boundary restricts\n // parent routes to matching only their own words and nothing more, e.g. parent\n // route \"/home\" should not match \"/home2\".\n // Additionally, allow paths starting with `.`, `-`, `~`, and url-encoded entities,\n // but do not consume the character in the matched path so they can match against\n // nested paths.\n \"(?:(?=[.~-]|%[0-9A-F]{2})|\\\\b|\\\\/|$)\";\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, paramNames];\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 * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/docs/en/v6/api#resolvepath\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\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string\n): Path {\n let to = typeof toArg === \"string\" ? parsePath(toArg) : toArg;\n let toPathname = toArg === \"\" || to.pathname === \"\" ? \"/\" : to.pathname;\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 `` 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 let from: string;\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // Each leading .. segment means \"go up one route\" instead of \"go up one\n // URL segment\". This is a key difference from how works and a\n // major reason we call this a \"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 value had one.\n if (\n toPathname &&\n toPathname !== \"/\" &&\n toPathname.endsWith(\"/\") &&\n !path.pathname.endsWith(\"/\")\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\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\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 let nextChar = pathname.charAt(basename.length);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(basename.length) || \"/\";\n}\n\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\nconst normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\nconst normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n","import * as React from \"react\";\nimport type { Location, Path, To } from \"history\";\nimport { Action as NavigationType, parsePath } from \"history\";\n\nimport { LocationContext, NavigationContext, RouteContext } from \"./context\";\nimport type {\n ParamParseKey,\n Params,\n PathMatch,\n PathPattern,\n RouteMatch,\n RouteObject,\n} from \"./router\";\nimport {\n getToPathname,\n invariant,\n joinPaths,\n matchPath,\n matchRoutes,\n resolveTo,\n warning,\n warningOnce,\n} from \"./router\";\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/docs/en/v6/api#usehref\n */\nexport function useHref(to: To): 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 component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to);\n\n let joinedPathname = pathname;\n if (basename !== \"/\") {\n let toPathname = getToPathname(to);\n let endsWithSlash = toPathname != null && toPathname.endsWith(\"/\");\n joinedPathname =\n pathname === \"/\"\n ? basename + (endsWithSlash ? \"/\" : \"\")\n : 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 .\n *\n * @see https://reactrouter.com/docs/en/v6/api#useinroutercontext\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/docs/en/v6/api#uselocation\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 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/docs/en/v6/api#usenavigationtype\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns true if the URL for the given \"to\" value matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * .\n *\n * @see https://reactrouter.com/docs/en/v6/api#usematch\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | 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 component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(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\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n}\n\n/**\n * Returns an imperative method for changing the location. Used by s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usenavigate\n */\nexport function useNavigate(): 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 component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n matches.map((match) => match.pathnameBase)\n );\n\n let activeRef = React.useRef(false);\n React.useEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(\n activeRef.current,\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`\n );\n\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 );\n\n if (basename !== \"/\") {\n path.pathname = joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state\n );\n },\n [basename, navigator, routePathnamesJson, locationPathname]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(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/docs/en/v6/api#useoutletcontext\n */\nexport function useOutletContext(): 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 to render child routes.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useoutlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\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/docs/en/v6/api#useparams\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\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/docs/en/v6/api#useresolvedpath\n */\nexport function useResolvedPath(to: To): Path {\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n matches.map((match) => match.pathnameBase)\n );\n\n return React.useMemo(\n () => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname),\n [to, routePathnamesJson, locationPathname]\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 to render their child route's\n * element.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useroutes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\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 component.`\n );\n\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 under a \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 // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) 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 to .`\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 \\`\\` 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 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 `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" does not have an element. ` +\n `This means it will render an with a null value by default resulting in an \"empty\" page.`\n );\n }\n\n return _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([parentPathnameBase, match.pathname]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([parentPathnameBase, match.pathnameBase]),\n })\n ),\n parentMatches\n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = []\n): React.ReactElement | null {\n if (matches == null) return null;\n\n return matches.reduceRight((outlet, match, index) => {\n return (\n \n );\n }, null as React.ReactElement | null);\n}\n","import * as React from \"react\";\nimport type { InitialEntry, Location, MemoryHistory, To } from \"history\";\nimport {\n Action as NavigationType,\n createMemoryHistory,\n parsePath,\n} from \"history\";\n\nimport { LocationContext, NavigationContext, Navigator } from \"./context\";\nimport {\n useInRouterContext,\n useNavigate,\n useOutlet,\n useRoutes,\n _renderMatches,\n} from \"./hooks\";\nimport type { RouteMatch, RouteObject } from \"./router\";\nimport { invariant, normalizePathname, stripBasename, warning } from \"./router\";\n\nexport interface MemoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n}\n\n/**\n * A that stores all entries in memory.\n *\n * @see https://reactrouter.com/docs/en/v6/api#memoryrouter\n */\nexport function MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex,\n}: MemoryRouterProps): React.ReactElement {\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({ initialEntries, initialIndex });\n }\n\n let history = historyRef.current;\n let [state, setState] = React.useState({\n action: history.action,\n location: history.location,\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n \n );\n}\n\nexport interface NavigateProps {\n to: To;\n replace?: boolean;\n state?: any;\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/docs/en/v6/api#navigate\n */\nexport function Navigate({ to, replace, state }: 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 ` may be used only in the context of a component.`\n );\n\n warning(\n !React.useContext(NavigationContext).static,\n ` must not be used on the initial render in a . ` +\n `This is a no-op, but you should modify your code so the is ` +\n `only ever rendered in response to some user interaction or state change.`\n );\n\n let navigate = useNavigate();\n React.useEffect(() => {\n navigate(to, { 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/docs/en/v6/api#outlet\n */\nexport function Outlet(props: OutletProps): React.ReactElement | null {\n return useOutlet(props.context);\n}\n\nexport interface RouteProps {\n caseSensitive?: boolean;\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n index?: boolean;\n path?: string;\n}\n\nexport interface PathRouteProps {\n caseSensitive?: boolean;\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n index?: false;\n path: string;\n}\n\nexport interface LayoutRouteProps {\n children?: React.ReactNode;\n element?: React.ReactNode | null;\n}\n\nexport interface IndexRouteProps {\n element?: React.ReactNode | null;\n index: true;\n}\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/docs/en/v6/api#route\n */\nexport function Route(\n _props: PathRouteProps | LayoutRouteProps | IndexRouteProps\n): React.ReactElement | null {\n invariant(\n false,\n `A is only ever to be used as the child of element, ` +\n `never rendered directly. Please wrap your in a .`\n );\n}\n\nexport interface RouterProps {\n basename?: string;\n children?: React.ReactNode;\n location: Partial | string;\n navigationType?: NavigationType;\n navigator: Navigator;\n static?: boolean;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a directly. Instead, you'll render a\n * router that is more specific to your environment such as a \n * in web browsers or a for server rendering.\n *\n * @see https://reactrouter.com/docs/en/v6/api#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}: RouterProps): React.ReactElement | null {\n invariant(\n !useInRouterContext(),\n `You cannot render a inside another .` +\n ` You should never have more than one in your app.`\n );\n\n let basename = normalizePathname(basenameProp);\n let navigationContext = React.useMemo(\n () => ({ basename, navigator, static: staticProp }),\n [basename, 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 location = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n\n if (trailingPathname == null) {\n return null;\n }\n\n return {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key,\n };\n }, [basename, pathname, search, hash, state, key]);\n\n warning(\n location != null,\n ` is not able to match the URL ` +\n `\"${pathname}${search}${hash}\" because it does not start with the ` +\n `basename, so the won't render anything.`\n );\n\n if (location == null) {\n return null;\n }\n\n return (\n \n \n \n );\n}\n\nexport interface RoutesProps {\n children?: React.ReactNode;\n location?: Partial | string;\n}\n\n/**\n * A container for a nested tree of elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#routes\n */\nexport function Routes({\n children,\n location,\n}: RoutesProps): React.ReactElement | null {\n return useRoutes(createRoutesFromChildren(children), location);\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `` element or an array of them. Used internally by\n * `` to create a route config from its children.\n *\n * @see https://reactrouter.com/docs/en/v6/api#createroutesfromchildren\n */\nexport function createRoutesFromChildren(\n children: React.ReactNode\n): RouteObject[] {\n let routes: RouteObject[] = [];\n\n React.Children.forEach(children, (element) => {\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 if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children)\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 component. All component children of must be a or `\n );\n\n let route: RouteObject = {\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n index: element.props.index,\n path: element.props.path,\n };\n\n if (element.props.children) {\n route.children = createRoutesFromChildren(element.props.children);\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","/**\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 type { BrowserHistory, HashHistory, History } from \"history\";\nimport { createBrowserHistory, createHashHistory } from \"history\";\nimport {\n MemoryRouter,\n Navigate,\n Outlet,\n Route,\n Router,\n Routes,\n createRoutesFromChildren,\n generatePath,\n matchRoutes,\n matchPath,\n createPath,\n parsePath,\n resolvePath,\n renderMatches,\n useHref,\n useInRouterContext,\n useLocation,\n useMatch,\n useNavigate,\n useNavigationType,\n useOutlet,\n useParams,\n useResolvedPath,\n useRoutes,\n useOutletContext,\n} from \"react-router\";\nimport type { To } from \"react-router\";\n\nfunction warning(cond: boolean, message: string): void {\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 React Router!\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\n////////////////////////////////////////////////////////////////////////////////\n// RE-EXPORTS\n////////////////////////////////////////////////////////////////////////////////\n\n// Note: Keep in sync with react-router exports!\nexport {\n MemoryRouter,\n Navigate,\n Outlet,\n Route,\n Router,\n Routes,\n createRoutesFromChildren,\n generatePath,\n matchRoutes,\n matchPath,\n createPath,\n parsePath,\n renderMatches,\n resolvePath,\n useHref,\n useInRouterContext,\n useLocation,\n useMatch,\n useNavigate,\n useNavigationType,\n useOutlet,\n useParams,\n useResolvedPath,\n useRoutes,\n useOutletContext,\n};\n\nexport { NavigationType } from \"react-router\";\nexport type {\n Hash,\n Location,\n Path,\n To,\n MemoryRouterProps,\n NavigateFunction,\n NavigateOptions,\n NavigateProps,\n Navigator,\n OutletProps,\n Params,\n PathMatch,\n RouteMatch,\n RouteObject,\n RouteProps,\n PathRouteProps,\n LayoutRouteProps,\n IndexRouteProps,\n RouterProps,\n Pathname,\n Search,\n RoutesProps,\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_NavigationContext,\n UNSAFE_LocationContext,\n UNSAFE_RouteContext,\n} from \"react-router\";\n\n////////////////////////////////////////////////////////////////////////////////\n// COMPONENTS\n////////////////////////////////////////////////////////////////////////////////\n\nexport interface BrowserRouterProps {\n basename?: string;\n children?: React.ReactNode;\n window?: Window;\n}\n\n/**\n * A `` for use in web browsers. Provides the cleanest URLs.\n */\nexport function BrowserRouter({\n basename,\n children,\n window,\n}: BrowserRouterProps) {\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({ window });\n }\n\n let history = historyRef.current;\n let [state, setState] = React.useState({\n action: history.action,\n location: history.location,\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n \n );\n}\n\nexport interface HashRouterProps {\n basename?: string;\n children?: React.ReactNode;\n window?: Window;\n}\n\n/**\n * A `` 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({ basename, children, window }: HashRouterProps) {\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({ window });\n }\n\n let history = historyRef.current;\n let [state, setState] = React.useState({\n action: history.action,\n location: history.location,\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n \n );\n}\n\nexport interface HistoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n history: History;\n}\n\n/**\n * A `` 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({ basename, children, history }: HistoryRouterProps) {\n const [state, setState] = React.useState({\n action: history.action,\n location: history.location,\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n \n );\n}\n\nif (__DEV__) {\n HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\n\nexport { HistoryRouter as unstable_HistoryRouter };\n\nfunction isModifiedEvent(event: React.MouseEvent) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nexport interface LinkProps\n extends Omit, \"href\"> {\n reloadDocument?: boolean;\n replace?: boolean;\n state?: any;\n to: To;\n}\n\n/**\n * The public API for rendering a history-aware .\n */\nexport const Link = React.forwardRef(\n function LinkWithRef(\n { onClick, reloadDocument, replace = false, state, target, to, ...rest },\n ref\n ) {\n let href = useHref(to);\n let internalOnClick = useLinkClickHandler(to, { replace, state, target });\n function handleClick(\n event: React.MouseEvent\n ) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented && !reloadDocument) {\n internalOnClick(event);\n }\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n \n );\n }\n);\n\nif (__DEV__) {\n Link.displayName = \"Link\";\n}\n\nexport interface NavLinkProps\n extends Omit {\n children?:\n | React.ReactNode\n | ((props: { isActive: boolean }) => React.ReactNode);\n caseSensitive?: boolean;\n className?: string | ((props: { isActive: boolean }) => string | undefined);\n end?: boolean;\n style?:\n | React.CSSProperties\n | ((props: { isActive: boolean }) => React.CSSProperties);\n}\n\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\nexport const NavLink = React.forwardRef(\n function NavLinkWithRef(\n {\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n children,\n ...rest\n },\n ref\n ) {\n let location = useLocation();\n let path = useResolvedPath(to);\n\n let locationPathname = location.pathname;\n let toPathname = path.pathname;\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n toPathname = toPathname.toLowerCase();\n }\n\n let isActive =\n locationPathname === toPathname ||\n (!end &&\n locationPathname.startsWith(toPathname) &&\n locationPathname.charAt(toPathname.length) === \"/\");\n\n let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n\n let className: string | undefined;\n if (typeof classNameProp === \"function\") {\n className = classNameProp({ isActive });\n } else {\n // If the className prop is not a function, we use a default `active`\n // class for 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 = [classNameProp, isActive ? \"active\" : null]\n .filter(Boolean)\n .join(\" \");\n }\n\n let style =\n typeof styleProp === \"function\" ? styleProp({ isActive }) : styleProp;\n\n return (\n \n {typeof children === \"function\" ? children({ isActive }) : children}\n \n );\n }\n);\n\nif (__DEV__) {\n NavLink.displayName = \"NavLink\";\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// HOOKS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Handles the click behavior for router `` components. This is useful if\n * you need to create custom `` components with the same click behavior we\n * use in our exported ``.\n */\nexport function useLinkClickHandler(\n to: To,\n {\n target,\n replace: replaceProp,\n state,\n }: {\n target?: React.HTMLAttributeAnchorTarget;\n replace?: boolean;\n state?: any;\n } = {}\n): (event: React.MouseEvent) => void {\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to);\n\n return React.useCallback(\n (event: React.MouseEvent) => {\n if (\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 event.preventDefault();\n\n // If the URL hasn't changed, a regular will do a replace instead of\n // a push, so do the same here.\n let replace =\n !!replaceProp || createPath(location) === createPath(path);\n\n navigate(to, { replace, state });\n }\n },\n [location, navigate, path, replaceProp, state, target, to]\n );\n}\n\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nexport function useSearchParams(defaultInit?: URLSearchParamsInit) {\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\n let location = useLocation();\n let searchParams = React.useMemo(() => {\n let searchParams = createSearchParams(location.search);\n\n for (let key of defaultSearchParamsRef.current.keys()) {\n if (!searchParams.has(key)) {\n defaultSearchParamsRef.current.getAll(key).forEach((value) => {\n searchParams.append(key, value);\n });\n }\n }\n\n return searchParams;\n }, [location.search]);\n\n let navigate = useNavigate();\n let setSearchParams = React.useCallback(\n (\n nextInit: URLSearchParamsInit,\n navigateOptions?: { replace?: boolean; state?: any }\n ) => {\n navigate(\"?\" + createSearchParams(nextInit), navigateOptions);\n },\n [navigate]\n );\n\n return [searchParams, setSearchParams] as const;\n}\n\nexport type ParamKeyValuePair = [string, string];\n\nexport type URLSearchParamsInit =\n | string\n | ParamKeyValuePair[]\n | Record\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","export enum ChartDisplayType {\n NONE = 'none',\n STACKED_BAR = 'stacked-bar',\n BAR = 'bar',\n LINE = 'line',\n SCATTER = 'scatter',\n DOUGHNUT = 'doughnut',\n MIXED = 'mixed'\n}\n\nexport enum ChartDataType {\n DATE = 'date',\n STRING = 'string',\n STRING_BAR_SCATTER = 'string-bar-scatter',\n NUMBER_PREDICTION = 'number-prediction'\n}\n\nexport interface ChartBase {\n title: string;\n type: ChartDataType;\n id: string;\n tooltipFormat: Intl.NumberFormat;\n shouldShowChartTypeDropdown: boolean;\n defaultChartDisplayType: ChartDisplayType;\n}\n\nexport interface AxisChart extends ChartBase {\n yAxisFormat: Intl.NumberFormat;\n xAxisTitle: string;\n yAxisTitle: string;\n}\n\nexport interface ChartByString extends ChartBase {\n dataPointSets: DataPointSetByString[];\n shouldAnimate: boolean;\n}\n\nexport interface AxisChartByDate extends AxisChart {\n dataPointSets: DataPointSetByDate[];\n shouldShowDateRangeDropdown: boolean;\n}\n\nexport interface AxisChartByString extends AxisChart {\n dataPointSets: DataPointSetByString[];\n yHighestValue?: number;\n shouldAnimate: boolean;\n}\n\nexport interface ChartByStringBarScatter extends AxisChart {\n barDataPointSets: DataPointSetByString[];\n scatterDataPointSets: DataPointSetByStringYAxis[];\n yHighestValue: number;\n yScatterHighestValue: number;\n}\n\nexport interface AxisChartByNumberPrediction extends AxisChart {\n dataPointSetWithPredictions: DataPointSetByNumberPrediction[];\n dataPointSetWithOptimisations: DataPointSetByNumberOptimisation[];\n}\n\nexport interface DataPointSet {\n label: string;\n value: number;\n}\n\nexport interface DataPointSetByDate {\n dataPointDate: string;\n countByDate: number;\n dataPointSetName: string;\n}\n\nexport interface DataPointSetByString {\n dataPointString: string;\n value: number;\n dataPointSetName: string;\n}\n\nexport interface DataPointSetByStringYAxis {\n dataPointString: string;\n value: number;\n dataPointSetName: string;\n yAxisName: string;\n yAxisFormat: Intl.NumberFormat;\n yAxisTooltipFormat: Intl.NumberFormat;\n yAxisTitle: string;\n}\n\nexport interface DataPointSetByNumberOptimisation {\n xValue: number;\n yValue: number;\n dataPointSetName: string;\n}\nexport interface DataPointSetByNumberPrediction {\n xValue: number | null;\n yValue: number | null;\n dataPointSetName: string;\n actualParentDataPointSetName: string;\n style: DataPointSetStyle;\n}\nexport enum DataPointSetStyle {\n SOLID = 'solid',\n DASHED = 'dashed'\n}\n","import React, { FC } from 'react';\nimport { NavLink } from 'react-router-dom';\n\nexport interface LinkParams {\n path: string;\n href: string;\n buttonTitle: string;\n}\n\nconst CustomLink: FC<{ linkParams: LinkParams }> = ({\n linkParams: { href, path, buttonTitle }\n}: {\n linkParams: LinkParams;\n}) => {\n if (path) {\n return (\n \n {buttonTitle}\n \n );\n }\n\n if (href) {\n return (\n \n {buttonTitle}\n \n );\n }\n\n return null;\n};\n\nexport default CustomLink;\n","import CustomLink, {\n LinkParams\n} from 'common/components/anchors/custom-navlink';\nimport { FC } from 'react';\nimport { NavLink } from 'react-router-dom';\n\nexport interface TileContent {\n title: string;\n message: string;\n linkDetails: LinkParams;\n}\n\nconst HelpTile: FC<{ helpTile: TileContent }> = ({\n helpTile: { title, message, linkDetails }\n}: {\n helpTile: TileContent;\n}) => {\n return (\n <>\n
    \n
    \n
    {title}
    \n\n

    {message}

    \n\n \n
    \n
    \n \n );\n};\n\nexport default HelpTile;\n","import { FC, Fragment } from 'react';\nimport HelpTile, { TileContent } from 'features/dashboard/helpTile';\n\nconst HelpTileContainer: FC<{ closeHelp: () => void }> = ({ closeHelp }) => {\n const helpTileContents = [\n {\n title: 'Setup Instructions',\n message:\n 'To get started please follow the setup instructions in our documentation guide',\n linkDetails: {\n buttonTitle: 'Setup Guide',\n path: '',\n href: 'https://ruler-documentation.readme.io/docs/introduction'\n }\n },\n {\n title: 'How to use Ruler',\n message:\n 'You can find more information about how to use Ruler in our Help Centre',\n linkDetails: {\n buttonTitle: 'Help Centre',\n path: '',\n href: 'https://ruler-documentation.readme.io/docs/introduction'\n }\n },\n {\n title: 'Site Setup & Integrations',\n message:\n 'Visit the Settings cog in the top right corner for Site Setup & Integrations',\n linkDetails: {\n buttonTitle: 'Settings',\n path: '/site-setup',\n href: ''\n }\n },\n {\n title: 'Further help?',\n message:\n 'If you need any further help please contact us or use the Live Chat',\n linkDetails: {\n buttonTitle: 'Contact Us',\n path: '',\n href: 'https://www.ruleranalytics.com/contact/'\n }\n }\n ] as TileContent[];\n\n return (\n <>\n
    \n \n
    \n

    \n Welcome to Ruler - Getting Started\n

    \n \n
    \n\n
    \n {helpTileContents.map((item: TileContent, index: number) => {\n return (\n \n \n \n );\n })}\n
    \n
    \n \n );\n};\n\nexport default HelpTileContainer;\n","import { FC } from 'react';\n\nconst TileGridContainer: FC<{\n children: JSX.Element | JSX.Element[];\n className?: string;\n}> = ({ children, className }) => {\n return (\n
    \n {children}\n
    \n );\n};\n\nexport default TileGridContainer;\n","import { FC } from 'react';\n\nconst Loading: FC = () => {\n return (\n <>\n
    \n
    \n
    \n \n );\n};\n\nexport default Loading;\n","export const currencySymbolMap: { [key: string]: string } = {\n AED: 'د.إ',\n AFN: '؋',\n ALL: 'L',\n AMD: '֏',\n ANG: 'ƒ',\n AOA: 'Kz',\n ARS: '$',\n AUD: '$',\n AWG: 'ƒ',\n AZN: '₼',\n BAM: 'KM',\n BBD: '$',\n BDT: '৳',\n BGN: 'лв',\n BHD: '.د.ب',\n BIF: 'FBu',\n BMD: '$',\n BND: '$',\n BOB: '$b',\n BOV: 'BOV',\n BRL: 'R$',\n BSD: '$',\n BTC: '₿',\n BTN: 'Nu.',\n BWP: 'P',\n BYN: 'Br',\n BYR: 'Br',\n BZD: 'BZ$',\n CAD: '$',\n CDF: 'FC',\n CHE: 'CHE',\n CHF: 'CHF',\n CHW: 'CHW',\n CLF: 'CLF',\n CLP: '$',\n CNH: '¥',\n CNY: '¥',\n COP: '$',\n COU: 'COU',\n CRC: '₡',\n CUC: '$',\n CUP: '₱',\n CVE: '$',\n CZK: 'Kč',\n DJF: 'Fdj',\n DKK: 'kr',\n DOP: 'RD$',\n DZD: 'دج',\n EEK: 'kr',\n EGP: '£',\n ERN: 'Nfk',\n ETB: 'Br',\n ETH: 'Ξ',\n EUR: '€',\n FJD: '$',\n FKP: '£',\n GBP: '£',\n GEL: '₾',\n GGP: '£',\n GHC: '₵',\n GHS: 'GH₵',\n GIP: '£',\n GMD: 'D',\n GNF: 'FG',\n GTQ: 'Q',\n GYD: '$',\n HKD: '$',\n HNL: 'L',\n HRK: 'kn',\n HTG: 'G',\n HUF: 'Ft',\n IDR: 'Rp',\n ILS: '₪',\n IMP: '£',\n INR: '₹',\n IQD: 'ع.د',\n IRR: '﷼',\n ISK: 'kr',\n JEP: '£',\n JMD: 'J$',\n JOD: 'JD',\n JPY: '¥',\n KES: 'KSh',\n KGS: 'лв',\n KHR: '៛',\n KMF: 'CF',\n KPW: '₩',\n KRW: '₩',\n KWD: 'KD',\n KYD: '$',\n KZT: '₸',\n LAK: '₭',\n LBP: '£',\n LKR: '₨',\n LRD: '$',\n LSL: 'M',\n LTC: 'Ł',\n LTL: 'Lt',\n LVL: 'Ls',\n LYD: 'LD',\n MAD: 'MAD',\n MDL: 'lei',\n MGA: 'Ar',\n MKD: 'ден',\n MMK: 'K',\n MNT: '₮',\n MOP: 'MOP$',\n MRO: 'UM',\n MRU: 'UM',\n MUR: '₨',\n MVR: 'Rf',\n MWK: 'MK',\n MXN: '$',\n MXV: 'MXV',\n MYR: 'RM',\n MZN: 'MT',\n NAD: '$',\n NGN: '₦',\n NIO: 'C$',\n NOK: 'kr',\n NPR: '₨',\n NZD: '$',\n OMR: '﷼',\n PAB: 'B/.',\n PEN: 'S/.',\n PGK: 'K',\n PHP: '₱',\n PKR: '₨',\n PLN: 'zł',\n PYG: 'Gs',\n QAR: '﷼',\n RMB: '¥',\n RON: 'lei',\n RSD: 'Дин.',\n RUB: '₽',\n RWF: 'R₣',\n SAR: '﷼',\n SBD: '$',\n SCR: '₨',\n SDG: 'ج.س.',\n SEK: 'kr',\n SGD: 'S$',\n SHP: '£',\n SLL: 'Le',\n SOS: 'S',\n SRD: '$',\n SSP: '£',\n STD: 'Db',\n STN: 'Db',\n SVC: '$',\n SYP: '£',\n SZL: 'E',\n THB: '฿',\n TJS: 'SM',\n TMT: 'T',\n TND: 'د.ت',\n TOP: 'T$',\n TRL: '₤',\n TRY: '₺',\n TTD: 'TT$',\n TVD: '$',\n TWD: 'NT$',\n TZS: 'TSh',\n UAH: '₴',\n UGX: 'USh',\n USD: '$',\n UYI: 'UYI',\n UYU: '$U',\n UYW: 'UYW',\n UZS: 'лв',\n VEF: 'Bs',\n VES: 'Bs.S',\n VND: '₫',\n VUV: 'VT',\n WST: 'WS$',\n XAF: 'FCFA',\n XBT: 'Ƀ',\n XCD: '$',\n XOF: 'CFA',\n XPF: '₣',\n XSU: 'Sucre',\n XUA: 'XUA',\n YER: '﷼',\n ZAR: 'R',\n ZMW: 'ZK',\n ZWD: 'Z$',\n ZWL: '$'\n};\n","import { currencySymbolMap } from './currencySymbolMap';\n\nexport const getSymbolFromCurrency = (currencyCode: string): string => {\n if (typeof currencyCode !== 'string') {\n return '';\n }\n\n const code = currencyCode.toUpperCase();\n\n if (!Object.prototype.hasOwnProperty.call(currencySymbolMap, code)) {\n return currencyCode;\n }\n\n try {\n return currencySymbolMap[code];\n } catch (e) {\n return currencyCode;\n }\n};\n","import { FC } from 'react';\nimport { getSymbolFromCurrency } from './currencySymbolMapHelper';\n\ninterface CurrencyDisplayWrapperProps {\n currencyCode?: string;\n children: string | JSX.Element | JSX.Element[] | undefined;\n className?: string;\n}\n\nexport const CurrencyDisplayWrapper: FC = ({\n currencyCode,\n children,\n className\n}) => {\n return (\n <>\n
    \n {currencyCode ? getSymbolFromCurrency(currencyCode) : null}\n {children}\n
    \n \n );\n};\n","import { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\n\nexport interface TileData {\n label: string;\n count: number;\n metric?: string | number;\n currencyCode?: string;\n format: Intl.NumberFormat;\n percentageDiff?: number | undefined;\n}\n\nexport const NumberTile = ({\n tileData: { label, count, metric, currencyCode, format, percentageDiff }\n}: {\n tileData: TileData;\n}) => {\n const shouldShowPercentageDiff =\n percentageDiff !== undefined && (percentageDiff > 0 || percentageDiff < 0);\n return (\n <>\n
    \n
    \n
    \n
    \n {label}\n
    \n
    \n {currencyCode ? (\n \n <>{format.format(count)}\n \n ) : (\n format.format(count)\n )}\n
    \n
    \n {shouldShowPercentageDiff && percentageDiff !== undefined ? (\n \n \n {percentageDiff < 0\n ? format.format(percentageDiff)\n : `+${format.format(percentageDiff)}`}\n %\n \n
    \n ) : null}\n
    \n\n
    {metric}
    \n \n \n );\n};\n","import { FC } from 'react';\n\nconst Tile: FC<{\n children: JSX.Element | JSX.Element[];\n className?: string;\n}> = ({ children, className = '' }) => {\n return (\n \n {children}\n \n );\n};\n\nexport default Tile;\n","import Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\nimport { FC } from 'react';\nimport {\n useGetTotalAdCostsQuery,\n useGetTotalRevenueQuery,\n useGetCountRevenueQuery,\n CountResponse\n} from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport moment from 'moment';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\n\nconst ROIMetricTile: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const {\n data: adCostData,\n isLoading: adCostIsLoading,\n isFetching: adCostIsFetching\n } = useGetTotalAdCostsQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const {\n data: revenueData,\n isLoading: revenueIsLoading,\n isFetching: revenueIsFetching\n } = useGetTotalRevenueQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const {\n data: salesData,\n isLoading: salesIsLoading,\n isFetching: salesIsFetching\n } = useGetCountRevenueQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const sumTileDataForDateRange = (tileData: CountResponse): number => {\n return Object.values(tileData).reduce((a, b) => a + b, 0);\n };\n\n const getDataForTile = (\n tileTitle: string,\n data: CountResponse[],\n locales: string,\n formatOptions: Intl.NumberFormatOptions\n ): TileData => {\n const totalRevenue = sumTileDataForDateRange(data[0]);\n const totalCost = sumTileDataForDateRange(data[1]);\n const roas =\n totalRevenue > 0 && totalCost > 0 ? (totalRevenue / totalCost) * 100 : 0;\n return {\n label: tileTitle,\n count:\n sumTileDataForDateRange(data[0]) - sumTileDataForDateRange(data[1]),\n metric: `${roas.toLocaleString(locales, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n })}% ROAS`,\n format: Intl.NumberFormat(locales, formatOptions)\n };\n };\n return (\n <>\n \n {!revenueIsLoading &&\n !revenueIsFetching &&\n revenueData != null &&\n !adCostIsLoading &&\n !adCostIsFetching &&\n adCostData != null &&\n !salesIsLoading &&\n !salesIsFetching &&\n salesData != null ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default ROIMetricTile;\n","import Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\nimport { FC } from 'react';\nimport {\n useGetTotalRevenueQuery,\n CountResponse,\n useGetAverageRevenueBetweenDatesQuery\n} from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport moment from 'moment';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { getSymbolFromCurrency } from 'features/currency/currencySymbolMapHelper';\n\nconst RevenueMetricTile: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const {\n data: revenueData,\n isLoading: revenueIsLoading,\n isFetching: revenueIsFetching\n } = useGetTotalRevenueQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const {\n data: revenueAverage,\n isLoading: revenueAverageIsLoading,\n isFetching: revenueAverageIsFetching\n } = useGetAverageRevenueBetweenDatesQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const sumTileDataForDateRange = (tileData: CountResponse): number => {\n return Object.values(tileData).reduce((a, b) => a + b, 0);\n };\n\n const getDataForTile = (\n tileTitle: string,\n data: CountResponse[],\n locales: string,\n formatOptions: Intl.NumberFormatOptions,\n currencySymbol: string\n ): TileData => {\n const total = sumTileDataForDateRange(data[0]);\n return {\n label: tileTitle,\n count: total,\n metric: `${currencySymbol}${revenueAverage?.toLocaleString(\n locales,\n formatOptions\n )} Average per Sale`,\n format: Intl.NumberFormat(locales, formatOptions),\n currencyCode: selectedCurrencyCode\n };\n };\n return (\n <>\n \n {!revenueIsLoading &&\n !revenueIsFetching &&\n revenueData != null &&\n !revenueAverageIsFetching &&\n !revenueAverageIsLoading ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default RevenueMetricTile;\n","import Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\nimport { FC } from 'react';\nimport {\n useGetTotalAdCostsQuery,\n useGetCountRevenueQuery,\n CountResponse\n} from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport moment from 'moment';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { getSymbolFromCurrency } from 'features/currency/currencySymbolMapHelper';\n\nconst CostMetricTile: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const {\n data: adCostData,\n isLoading: adCostIsLoading,\n isFetching: adCostIsFetching\n } = useGetTotalAdCostsQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const {\n data: salesData,\n isLoading: salesIsLoading,\n isFetching: salesIsFetching\n } = useGetCountRevenueQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const sumTileDataForDateRange = (tileData: CountResponse): number => {\n return Object.values(tileData).reduce((a, b) => a + b, 0);\n };\n\n const getDataForTile = (\n tileTitle: string,\n data: CountResponse[],\n locales: string,\n formatOptions: Intl.NumberFormatOptions,\n currencySymbol: string\n ): TileData => {\n const total = sumTileDataForDateRange(data[0]);\n const costPerSale =\n sumTileDataForDateRange(data[1]) === 0\n ? 0\n : total / sumTileDataForDateRange(data[1]);\n return {\n label: tileTitle,\n count: total,\n metric: `${currencySymbol}${costPerSale.toLocaleString(locales, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n })} Cost per Sale`,\n format: Intl.NumberFormat(locales, formatOptions)\n };\n };\n return (\n <>\n \n {!adCostIsLoading &&\n !adCostIsFetching &&\n !salesIsFetching &&\n !salesIsLoading &&\n adCostData != null &&\n salesData != null ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default CostMetricTile;\n","import Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\nimport { FC } from 'react';\nimport {\n useGetConversionCountQuery,\n useGetCountRevenueQuery,\n CountResponse\n} from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport moment from 'moment';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\n\nconst CostMetricTile: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const {\n data: salesData,\n isLoading: salesIsLoading,\n isFetching: salesIsFetching\n } = useGetCountRevenueQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const {\n data: webConversionData,\n isLoading: webConversionIsLoading,\n isFetching: webConversionIsFetching\n } = useGetConversionCountQuery({\n siteId,\n conversionType: 'Web',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const {\n data: inboundCallsConversionData,\n isLoading: inboundCallsConversionIsLoading,\n isFetching: inboundCallsConversionIsFetching\n } = useGetConversionCountQuery({\n siteId,\n conversionType: 'InboundCall',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const sumTileDataForDateRange = (tileData: CountResponse): number => {\n return Object.values(tileData).reduce((a, b) => a + b, 0);\n };\n\n const getDataForTile = (\n tileTitle: string,\n data: CountResponse[],\n locales: string,\n formatOptions: Intl.NumberFormatOptions\n ): TileData => {\n const total = sumTileDataForDateRange(data[0]);\n const totalFormsAndConversions =\n sumTileDataForDateRange(data[1]) + sumTileDataForDateRange(data[2]);\n const salesPercentageConverted = (total / totalFormsAndConversions) * 100;\n return {\n label: tileTitle,\n count: total,\n metric: `${salesPercentageConverted.toLocaleString(locales, {\n maximumFractionDigits: 2,\n minimumFractionDigits: 2\n })}% Forms and Phone Calls Converted`,\n format: Intl.NumberFormat(locales)\n };\n };\n return (\n <>\n \n {!salesIsFetching &&\n !salesIsLoading &&\n salesData != null &&\n !inboundCallsConversionIsFetching &&\n !inboundCallsConversionIsLoading &&\n inboundCallsConversionData != null &&\n !webConversionIsFetching &&\n !webConversionIsLoading &&\n webConversionData != null ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default CostMetricTile;\n","import Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\nimport { FC } from 'react';\nimport {\n useGetConversionCountQuery,\n CountResponse,\n useGetVisitorCountQuery\n} from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport moment from 'moment';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\n\nconst FormAndPhoneMetricTile: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const {\n data: visitorData,\n isLoading: visitorIsLoading,\n isFetching: visitorIsFetching\n } = useGetVisitorCountQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const {\n data: webConversionData,\n isLoading: webConversionIsLoading,\n isFetching: webConversionIsFetching\n } = useGetConversionCountQuery({\n siteId,\n conversionType: 'Web',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const {\n data: inboundCallsConversionData,\n isLoading: inboundCallsConversionIsLoading,\n isFetching: inboundCallsConversionIsFetching\n } = useGetConversionCountQuery({\n siteId,\n conversionType: 'InboundCall',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const sumTileDataForDateRange = (tileData: CountResponse): number => {\n return Object.values(tileData).reduce((a, b) => a + b, 0);\n };\n\n const averageTileDataForDateRange = (data: CountResponse[]): number => {\n if (data.length === 0) {\n return 0;\n }\n\n const combinedData = Object.assign({}, ...data);\n const values = Object.values(combinedData);\n const sum = values.reduce((a, b) => Number(a) + Number(b), 0);\n const count = values.length;\n return count > 0 ? Number(sum) / count : 0;\n };\n\n const getDataForTile = (\n tileTitle: string,\n data: CountResponse[],\n locales: string,\n formatOptions: Intl.NumberFormatOptions\n ): TileData => {\n const dailyAverageCalls = averageTileDataForDateRange([\n data[0]\n ]).toLocaleString(locales, formatOptions);\n const dailyAverageForms = averageTileDataForDateRange([\n data[1]\n ]).toLocaleString(locales, formatOptions);\n return {\n label: tileTitle,\n count:\n sumTileDataForDateRange(data[0]) + sumTileDataForDateRange(data[1]),\n metric: `${dailyAverageForms} Forms and ${dailyAverageCalls} Phone Calls Daily`,\n format: Intl.NumberFormat(locales, formatOptions)\n };\n };\n return (\n <>\n \n {!visitorIsFetching &&\n !visitorIsLoading &&\n visitorData != null &&\n !inboundCallsConversionIsFetching &&\n !inboundCallsConversionIsLoading &&\n inboundCallsConversionData != null &&\n !webConversionIsFetching &&\n !webConversionIsLoading &&\n webConversionData != null ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default FormAndPhoneMetricTile;\n","import Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\nimport { FC } from 'react';\nimport {\n useGetMetricsQuery,\n CountResponse,\n useGetConversionCountQuery,\n useGetVisitorCountQuery\n} from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport moment from 'moment';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\n\nconst PhoneCallMetricTile: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const {\n data: visitorData,\n isLoading: visitorIsLoading,\n isFetching: visitorIsFetching\n } = useGetVisitorCountQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const {\n data: inboundCallsConversionData,\n isLoading: inboundCallsConversionIsLoading,\n isFetching: inboundCallsConversionIsFetching\n } = useGetConversionCountQuery({\n siteId,\n conversionType: 'InboundCall',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const {\n data: inboundCallsMetricData,\n isLoading: inboundCallsMetricDataIsLoading,\n isFetching: inboundCallsMetricDataIsFetching\n } = useGetMetricsQuery({\n siteId,\n conversionFilter: 'InboundCallOnly',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const sumTileDataForDateRange = (tileData: CountResponse): number => {\n return Object.values(tileData).reduce((a, b) => a + b, 0);\n };\n\n const createTileMetricsValue = (\n visitorDataTotal: number,\n metricDataTotal: number\n ): number => {\n const metric = (metricDataTotal / visitorDataTotal) * 100;\n return Number(metric.toFixed(2));\n };\n\n const getDataForTile = (\n tileTitle: string,\n data: CountResponse[],\n metricData: CountResponse,\n locales: string,\n formatOptions: Intl.NumberFormatOptions\n ): TileData => {\n if (visitorData === undefined) {\n return {\n label: tileTitle,\n count: 0,\n metric: '',\n format: Intl.NumberFormat(locales)\n };\n }\n const total = sumTileDataForDateRange(data[0]);\n const visitorTotal = sumTileDataForDateRange(visitorData);\n const metricTotal = sumTileDataForDateRange(metricData);\n const metricValue = createTileMetricsValue(visitorTotal, metricTotal);\n\n return {\n label: tileTitle,\n count: total,\n metric: `${metricValue}% of Visitors made a Phone Call`,\n format: Intl.NumberFormat(locales)\n };\n };\n return (\n <>\n \n {!visitorIsFetching &&\n !visitorIsLoading &&\n visitorData != null &&\n !inboundCallsConversionIsLoading &&\n !inboundCallsMetricDataIsLoading &&\n !inboundCallsConversionIsFetching &&\n !inboundCallsMetricDataIsFetching &&\n inboundCallsConversionData != null &&\n inboundCallsMetricData != null ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default PhoneCallMetricTile;\n","import Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\nimport { FC } from 'react';\nimport {\n useGetMetricsQuery,\n CountResponse,\n useGetConversionCountQuery,\n useGetVisitorCountQuery\n} from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport moment from 'moment';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\n\nconst FormMetricTile: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const {\n data: visitorData,\n isLoading: visitorIsLoading,\n isFetching: visitorIsFetching\n } = useGetVisitorCountQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const {\n data: webConversionData,\n isLoading: webConversionIsLoading,\n isFetching: webConversionIsFetching\n } = useGetConversionCountQuery({\n siteId,\n conversionType: 'Web',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const {\n data: webOnlyMetricsData,\n isLoading: webOnlyMetricsDataIsLoading,\n isFetching: webOnlyMetricsDataIsFetching\n } = useGetMetricsQuery({\n siteId,\n conversionFilter: 'WebOnly',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const sumTileDataForDateRange = (tileData: CountResponse): number => {\n return Object.values(tileData).reduce((a, b) => a + b, 0);\n };\n\n const createTileMetricsValue = (\n visitorDataTotal: number,\n metricDataTotal: number\n ): number => {\n const metric = (metricDataTotal / visitorDataTotal) * 100;\n return Number(metric.toFixed(2));\n };\n\n const getDataForTile = (\n tileTitle: string,\n data: CountResponse[],\n metricData: CountResponse,\n locales: string,\n formatOptions: Intl.NumberFormatOptions\n ): TileData => {\n if (visitorData === undefined) {\n return {\n label: tileTitle,\n count: 0,\n metric: '',\n format: Intl.NumberFormat(locales)\n };\n }\n const total = sumTileDataForDateRange(data[0]);\n const visitorTotal = sumTileDataForDateRange(visitorData);\n const metricTotal = sumTileDataForDateRange(metricData);\n const metricValue = createTileMetricsValue(visitorTotal, metricTotal);\n\n return {\n label: tileTitle,\n count: total,\n metric: `${metricValue}% of Visitors completed a Form`,\n format: Intl.NumberFormat(locales)\n };\n };\n return (\n <>\n \n {!visitorIsLoading &&\n !visitorIsFetching &&\n visitorData != null &&\n !webConversionIsLoading &&\n !webConversionIsFetching &&\n webConversionData != null &&\n !webOnlyMetricsDataIsLoading &&\n !webOnlyMetricsDataIsFetching &&\n webOnlyMetricsData != null ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default FormMetricTile;\n","import Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\nimport { FC } from 'react';\nimport {\n useGetMetricsQuery,\n CountResponse,\n useGetVisitorCountQuery\n} from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport moment from 'moment';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\n\nconst VisitorMetricTile: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const {\n data: visitorData,\n isLoading: visitorIsLoading,\n isFetching: visitorIsFetching\n } = useGetVisitorCountQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const {\n data: allMetricsData,\n isLoading: allMetricsDataIsLoading,\n isFetching: allMetricsDataIsFetching\n } = useGetMetricsQuery({\n siteId,\n conversionFilter: 'All',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const sumTileDataForDateRange = (tileData: CountResponse): number => {\n return Object.values(tileData).reduce((a, b) => a + b, 0);\n };\n\n const createTileMetricsValue = (\n visitorDataTotal: number,\n metricDataTotal: number\n ): number => {\n const metric = (metricDataTotal / visitorDataTotal) * 100;\n return Number(metric.toFixed(2));\n };\n\n const getDataForTile = (\n tileTitle: string,\n data: CountResponse[],\n metricData: CountResponse,\n locales: string,\n formatOptions: Intl.NumberFormatOptions\n ): TileData => {\n if (visitorData === undefined) {\n return {\n label: tileTitle,\n count: 0,\n metric: '',\n format: Intl.NumberFormat(locales)\n };\n }\n const total = sumTileDataForDateRange(data[0]);\n const visitorTotal = sumTileDataForDateRange(visitorData);\n const metricTotal = sumTileDataForDateRange(metricData);\n const metricValue = createTileMetricsValue(visitorTotal, metricTotal);\n\n return {\n label: tileTitle,\n count: total,\n metric: `${metricValue}% Converted to lead`,\n format: Intl.NumberFormat(locales)\n };\n };\n return (\n <>\n \n {!visitorIsLoading &&\n !allMetricsDataIsLoading &&\n !visitorIsFetching &&\n !allMetricsDataIsFetching &&\n visitorData != null &&\n allMetricsData != null ? (\n \n ) : (\n \n )}\n \n \n );\n};\n\nexport default VisitorMetricTile;\n","import { CountResponse } from 'app/apis/queryApi';\nimport { MetricReport } from 'features/reports/types/metric-report';\nimport {\n AxisChartByDate,\n ChartDataType,\n ChartDisplayType,\n DataPointSetByDate\n} from '../charts/chart.models';\nimport { v4 as guid } from 'uuid';\n\nexport const formatDashboardSummaryChartData = (\n data: Record\n): MetricReport[] => {\n return Object.keys(data).reduce(\n (acc: MetricReport[], nextDataTypeKey: string) => {\n const dataValueDictionary = data[nextDataTypeKey];\n\n const dataValueArray = Object.keys(dataValueDictionary).map((dateKey) => {\n return {\n Field: dateKey,\n [nextDataTypeKey]: dataValueDictionary[dateKey]\n };\n });\n\n if (acc.length === 0) {\n acc.push(...dataValueArray);\n return acc;\n }\n\n dataValueArray.forEach((dataValue) => {\n const existingData = acc.find(\n (existingData) => existingData.Field === dataValue.Field\n );\n\n if (existingData === undefined) {\n throw new Error(\n 'This should never happen, it means the data sent is missing the same number of days between DataTypes'\n );\n }\n\n existingData[nextDataTypeKey] = dataValue[nextDataTypeKey];\n });\n\n return acc;\n },\n []\n );\n};\n\ninterface DataPointDateCount {\n dataSetName: string;\n dateCount: CountResponse;\n}\n\nexport const toChartByDate = (\n visitors: CountResponse,\n web: CountResponse,\n inboundCall: CountResponse,\n cost: CountResponse,\n revenue: CountResponse,\n sales: CountResponse\n): AxisChartByDate => {\n const dataPointDateCounts: DataPointDateCount[] = [\n { dataSetName: 'Visitors', dateCount: visitors },\n { dataSetName: 'Forms', dateCount: web },\n { dataSetName: 'Phone Calls', dateCount: inboundCall },\n { dataSetName: 'Cost', dateCount: cost },\n { dataSetName: 'Revenue', dateCount: revenue },\n { dataSetName: 'Sales', dateCount: sales }\n ];\n\n const dateStrings = getDateStrings(dataPointDateCounts);\n\n const dataPointSets = getDataPointSets(dataPointDateCounts, dateStrings);\n\n return {\n id: guid(),\n type: ChartDataType.DATE,\n title: '',\n shouldShowChartTypeDropdown: false,\n shouldShowDateRangeDropdown: true,\n dataPointSets,\n defaultChartDisplayType: ChartDisplayType.STACKED_BAR,\n xAxisTitle: '',\n yAxisTitle: '',\n yAxisFormat: new Intl.NumberFormat('en-GB'),\n tooltipFormat: new Intl.NumberFormat('en-GB')\n };\n\n function getDateStrings(dataPointDateCounts: DataPointDateCount[]): string[] {\n return [\n ...new Set(\n dataPointDateCounts\n .map((dataPointDateCount) =>\n Object.keys(dataPointDateCount.dateCount)\n )\n .flatMap((dateString) => dateString)\n )\n ];\n }\n\n function getDataPointSets(\n dataPointDateCounts: DataPointDateCount[],\n dateStrings: string[]\n ): DataPointSetByDate[] {\n return dataPointDateCounts.flatMap((dataPointSetCount) =>\n dateStrings.map((dateString) =>\n toDataPointSetByDate(dateString, dataPointSetCount)\n )\n );\n }\n\n function toDataPointSetByDate(\n dateString: string,\n dataPointSetCount: DataPointDateCount\n ): DataPointSetByDate {\n const dataPoint: DataPointSetByDate = {\n dataPointDate: dateString,\n countByDate: dataPointSetCount.dateCount[dateString] ?? 0,\n dataPointSetName: dataPointSetCount.dataSetName\n };\n return dataPoint;\n }\n};\n","export var noop = function () { };\nexport function on(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.addEventListener) {\n obj.addEventListener.apply(obj, args);\n }\n}\nexport function off(obj) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (obj && obj.removeEventListener) {\n obj.removeEventListener.apply(obj, args);\n }\n}\nexport var isBrowser = typeof window !== 'undefined';\nexport var isNavigator = typeof navigator !== 'undefined';\n","import { FC } from 'react';\n\nexport enum SpinnerSize {\n SMALL = 4,\n DEFAULT = 5\n}\n\nconst Spinner: FC<{\n size?: SpinnerSize;\n}> = ({ size = SpinnerSize.DEFAULT }: { size?: SpinnerSize }) => {\n return (\n <>\n \n \n );\n};\n\nexport default Spinner;\n","import { useEffect, useRef } from 'react';\nimport { off, on } from './misc/util';\nvar defaultEvents = ['mousedown', 'touchstart'];\nvar useClickAway = function (ref, onClickAway, events) {\n if (events === void 0) { events = defaultEvents; }\n var savedCallback = useRef(onClickAway);\n useEffect(function () {\n savedCallback.current = onClickAway;\n }, [onClickAway]);\n useEffect(function () {\n var handler = function (event) {\n var el = ref.current;\n el && !el.contains(event.target) && savedCallback.current(event);\n };\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var eventName = events_1[_i];\n on(document, eventName, handler);\n }\n return function () {\n for (var _i = 0, events_2 = events; _i < events_2.length; _i++) {\n var eventName = events_2[_i];\n off(document, eventName, handler);\n }\n };\n }, [events, ref]);\n};\nexport default useClickAway;\n","import {\n Children,\n cloneElement,\n FC,\n Fragment,\n isValidElement,\n useRef,\n useState\n} from 'react';\nimport { useClickAway } from 'react-use';\nimport { DropDownItemType } from './dropDownItemType';\n\nexport interface DropDownOptions {\n children?: JSX.Element;\n additionalChildProps?: any;\n dropDownItems: DropDownItemType[];\n dropDirection?: 'left' | 'right';\n dropdownYPositionClass?: string;\n disablePositionRelative?: boolean;\n selectDropDownItem: (key: string) => void;\n}\n\nconst DropDownButtonLegacy: FC = ({\n children,\n additionalChildProps,\n dropDownItems,\n dropDirection,\n dropdownYPositionClass,\n disablePositionRelative: disableRelative,\n selectDropDownItem\n}): JSX.Element => {\n const ref = useRef(null);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n useClickAway(ref, () => setIsDropdownOpen(false));\n\n const childrenWithAdditionalChildProps = Children.map(children, (child) => {\n // Checking isValidElement is the safe way and avoids a\n // typescript error too.\n if (isValidElement(child) && additionalChildProps) {\n return cloneElement(child, { ...additionalChildProps });\n }\n return child;\n });\n\n const relativeClass = disableRelative ? '' : 'relative';\n\n return (\n <>\n
    \n setIsDropdownOpen(!isDropdownOpen)}\n >\n {childrenWithAdditionalChildProps}\n \n\n {isDropdownOpen ? (\n \n
    \n {dropDownItems.map(({ label, key, isActive }, index) => {\n return (\n \n {\n selectDropDownItem(key);\n setIsDropdownOpen(false);\n }}\n >\n {label}\n \n \n );\n })}\n
    \n
    \n ) : null}\n \n \n );\n};\n\nexport default DropDownButtonLegacy;\n","import { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport { ChartDisplayType } from 'features/charts/chart.models';\n\nexport const ChartRoutes = [\n {\n isActive: false,\n key: ChartDisplayType.STACKED_BAR,\n label: 'StackedBar'\n },\n {\n isActive: false,\n key: ChartDisplayType.LINE,\n label: 'StackedLine'\n }\n] as DropDownItemType[];\n","import { FC } from 'react';\nimport Spinner from '../../loading/spinner';\n\nconst SimpleButtonContainerContent: FC<{\n dropdownLabel: string;\n additionalContainerStyling?: string;\n isLoading?: boolean;\n widthClass?: string;\n}> = ({\n dropdownLabel,\n additionalContainerStyling = '',\n isLoading = false,\n widthClass = ''\n}) => {\n const defaultParentStyling = widthClass\n ? 'flex text-sm items-center py-2.5 px-3 justify-between'\n : 'flex text-sm items-center py-2.5 px-3 justify-center';\n\n return (\n <>\n \n {isLoading ? (\n
    \n \n
    \n ) : null}\n

    \n {dropdownLabel}\n

    \n \n \n \n );\n};\n\nexport default SimpleButtonContainerContent;\n","import { FC, useEffect, useState } from 'react';\nimport DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { ChartRoutes } from './constants/chartRoutes';\nimport { selectChartType, getChartOptions } from '../chartOptionsSlice';\nimport { RootState } from 'app/store';\nimport SimpleButtonContainContent from 'common/components/drop-downs/legacy/simpleDropDownButtonContainerContent';\nimport {\n doRoutesNeedToBeUpdated,\n setSelectedDropDownItemAsActive\n} from 'common/components/drop-downs/legacy/dropDownUtils';\n\nconst ChartTypeButton: FC<{\n chartId: string;\n defaultType: string;\n}> = ({ chartId, defaultType }: { chartId: string; defaultType: string }) => {\n const dispatch = useDispatch();\n const [chartRoutes, setChartRoutes] = useState(ChartRoutes);\n const { selectedChartType } = useSelector((state: RootState) =>\n getChartOptions(state, chartId)\n );\n\n useEffect(() => {\n if (chartId === undefined || chartId === '') {\n throw new Error('ChartId is undefined, you must pass a chartId');\n }\n\n if (selectedChartType === undefined) {\n dispatch(selectChartType({ chartId, selectedChartType: defaultType }));\n } else if (doRoutesNeedToBeUpdated(chartRoutes, selectedChartType)) {\n setChartRoutes(\n setSelectedDropDownItemAsActive(chartRoutes, selectedChartType)\n );\n }\n }, [chartId, chartRoutes, defaultType, dispatch, selectedChartType]);\n\n return (\n \n dispatch(selectChartType({ chartId, selectedChartType: label }))\n }\n >\n \n \n );\n};\n\nexport default ChartTypeButton;\n","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}","import superPropBase from \"./superPropBase.js\";\nexport default function _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get.bind();\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}","/*!\n * @kurkle/color v0.3.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n let id = 0;\n return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n return value === null || typeof value === 'undefined';\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray(value: unknown): value is T[] {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault(value: T | undefined, defaultValue: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback R, TA, R>(\n fn: T | undefined,\n args: unknown[],\n thisArg?: TA\n): R | undefined {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each(\n loopable: Record,\n fn: (this: TA, v: T, i: string) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[],\n fn: (this: TA, v: T, i: number) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[] | Record,\n fn: (this: TA, v: T, i: any) => void,\n thisArg?: TA,\n reverse?: boolean\n) {\n let i: number, len: number, keys: string[];\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone(source: T): T {\n if (isArray(source)) {\n return source.map(clone) as unknown as T;\n }\n\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key: string) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\n\nexport interface MergeOptions {\n merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge(target: T, source: [], options?: MergeOptions): T;\nexport function merge(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge(\n target: T,\n source: [S1, S2, S3, S4],\n options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n\n if (!isObject(target)) {\n return target as AnyObject;\n }\n\n options = options || {};\n const merger = options.merger || _merger;\n let current: AnyObject;\n\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options as AnyObject);\n }\n }\n\n return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf(target: T, source: []): T;\nexport function mergeIf(target: T, source: S1): T & S1;\nexport function mergeIf(target: T, source: [S1]): T & S1;\nexport function mergeIf(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n const parts = key.split('.');\n const keys: string[] = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n // For backward compatibility:\n // Chart.helpers.core resolveObjectKey should break at empty key\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): AnyObject {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = (a: Set, b: Set) => {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n const result: number[] = [];\n const sqrt = Math.sqrt(value);\n let i: number;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) { // if value is a square number\n result.push(sqrt);\n }\n\n result.sort((a, b) => a - b).pop();\n return result;\n}\n\nexport function isNumber(n: unknown): n is number {\n return !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n array: Record[],\n target: { min: number, max: number },\n property: string\n) {\n let i: number, ilen: number, value: number;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nexport function toRadians(degrees: number) {\n return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n if (!isFiniteNumber(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n centrePoint: Point,\n anglePoint: Point\n) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < (-0.5 * PI)) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n table: number[],\n value: number,\n cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: T[],\n value: number,\n cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: unknown[],\n value: number,\n cmp?: (value: number) => boolean\n) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid: number;\n\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n table: Record[],\n key: string,\n value: number,\n last?: boolean\n) =>\n _lookup(table, value, last\n ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n }\n : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n table: Record[],\n key: string,\n value: number\n) =>\n _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n let start = 0;\n let end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener {\n _onDataPush?(...item: T[]): void;\n _onDataPop?(): void;\n _onDataShift?(): void;\n _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n\n delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique(items: T[]) {\n const set = new Set();\n let i: number, ilen: number;\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n\n if (set.size === ilen) {\n return items;\n }\n\n return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled>(\n fn: (...args: TArgs) => void,\n thisArg: any,\n) {\n let argsToUse = [] as TArgs;\n let ticking = false;\n\n return function(...args: TArgs) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce>(fn: (...args: TArgs) => void, delay: number) {\n let timeout;\n return function(...args: TArgs) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n const pointCount = points.length;\n\n let start = 0;\n let count = pointCount;\n\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = _limitValue(Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: (t: number) => t,\n\n easeInQuad: (t: number) => t * t,\n\n easeOutQuad: (t: number) => -t * (t - 2),\n\n easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n\n easeInCubic: (t: number) => t * t * t,\n\n easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n\n easeInQuart: (t: number) => t * t * t * t,\n\n easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n\n easeInQuint: (t: number) => t * t * t * t * t,\n\n easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n easeInOutElastic(t: number) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n\n easeInBack(t: number) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n\n easeOutBack(t: number) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n\n easeInOutBack(t: number) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n\n easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n easeOutBounce(t: number) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n\n easeInOutBounce: (t: number) => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n\n return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n value:\n | string\n | { r: number; g: number; b: number; a: number }\n | [number, number, number]\n | [number, number, number, number]\n): Color;\nexport function color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n });\n\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n });\n\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n });\n\n defaults.describe('animations', {\n _fallback: 'animation',\n });\n\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0 // show immediately\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n },\n }\n }\n });\n}\n","\nconst intlCache = new Map();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n /**\n * Formatter for value labels\n * @method Chart.Ticks.formatters.values\n * @param value the value to display\n * @return {string|string[]} the label to display\n */\n values(value) {\n return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n },\n\n /**\n * Formatter for numeric ticks\n * @method Chart.Ticks.formatters.numeric\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0'; // never show decimal places for 0\n }\n\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n if (ticks.length > 1) {\n // all ticks are small or there huge numbers; use scientific notation\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0); // toFixed has a max of 20 decimal places\n\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n\n return formatNumber(tickValue, locale, options);\n },\n\n\n /**\n * Formatter for logarithmic ticks\n * @method Chart.Ticks.formatters.logarithmic\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n // Figure out how many digits to show\n // The space between the first two ticks might be smaller than normal spacing\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n // not an integer\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\n\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope(root, scope), values);\n }\n return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n set(scope, values) {\n return set(this, scope, values);\n }\n\n /**\n\t * @param {string} scope\n\t */\n get(scope) {\n return getScope(this, scope);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n\n override(scope, values) {\n return set(overrides, scope, values);\n }\n\n /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t * - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope(this, scope);\n const targetScopeObject = getScope(this, targetScope);\n const privateName = '_' + name;\n\n Object.defineProperties(scopeObject, {\n // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n\n apply(appliers) {\n appliers.forEach((apply) => apply(this));\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","export function applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 3.0.0\n */\n bounds: 'ticks',\n\n /**\n * Addition grace added to max and reduced from min data value.\n * @since 3.0.0\n */\n grace: 0,\n\n // grid line settings\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n },\n\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n\n // scale title\n title: {\n // display property\n display: false,\n\n // actual label\n text: '',\n\n // top/bottom padding\n padding: {\n top: 4,\n bottom: 4\n }\n },\n\n // label settings\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n });\n\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n });\n\n defaults.describe('scales', {\n _fallback: 'scale',\n });\n\n defaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n });\n}\n","import {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `canvas` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } canvas.Chart\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * @namespace Chart.helpers.canvas\n */\n\n/**\n * Converts the given font object into a CSS font string.\n * @param {object} font - A font object.\n * @return {string|null} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n\n/**\n * @private\n */\nexport function _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param {canvas.Chart} chart - The chart instance.\n * @param {number} pixel - A pixel value.\n * @param {number} width - The width of the element.\n * @returns {number} The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n * @param {HTMLCanvasElement} canvas\n * @param {CanvasRenderingContext2D} [ctx]\n */\nexport function clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nexport function drawPoint(ctx, options, x, y) {\n drawPointLegend(ctx, options, x, y, null);\n}\n\nexport function drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param {Point} point - The point to test\n * @param {object} area - The rectangle\n * @param {number} [margin] - allowed margin\n * @returns {boolean}\n * @private\n */\nexport function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nexport function unclipArea(ctx) {\n ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n\n y += font.lineHeight;\n }\n\n ctx.restore();\n}\n\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nexport function addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\n\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {Point, toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n default:\n break;\n }\n\n return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps(value: number | Record, props: K[]): Record;\nexport function _readValueToProps(value: number | Record, props: Record): Record;\nexport function _readValueToProps(value: number | Record, props: string[] | Record) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n const obj = toTRBL(value) as ChartArea;\n\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n\n return obj;\n}\n\nexport interface CanvasFontSpec extends FontSpec {\n string: string;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial, fallback?: Partial) {\n options = options || {};\n fallback = fallback || defaults.font as FontSpec;\n\n let size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n\n font.string = toFontString(font);\n return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array, context?: object, index?: number, info?: { cacheable: boolean }) {\n let cacheable = true;\n let i: number, ilen: number, value: unknown;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext(parentContext: null, context: T): T;\nexport function createContext(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n return Object.assign(Object.create(parentContext), context);\n}\n","import {defined, isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param {object[]} scopes - The option scopes to look for values, in resolution order\n * @param {string[]} [prefixes] - The prefixes for values, in resolution order.\n * @param {object[]} [rootScopes] - The root option scopes\n * @param {string|boolean} [fallback] - Parent scopes fallback\n * @param {function} [getTarget] - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param {object} proxy - The Proxy returned by `_createResolver`\n * @param {object} context - Context object for scriptable/indexable options\n * @param {object} [subProxy] - The proxy provided for scriptable options\n * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults] - Defaults for descriptors\n * @private\n */\nexport function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n\n/**\n * @private\n */\nexport function _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\n\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\n\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop]; // resolve from proxy\n\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\n\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n // @ts-ignore\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\n\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\n\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\n\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\n\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\n\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\n\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\n\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\n\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(meta, data, start, count) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\n\nexport interface SplinePoint {\n x: number;\n y: number;\n skip?: boolean;\n\n // Both Bezier and monotone interpolations have these fields\n // but they are added in different spots\n cp1x?: number;\n cp1y?: number;\n cp2x?: number;\n cp2y?: number;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n firstPoint: SplinePoint,\n middlePoint: SplinePoint,\n afterPoint: SplinePoint,\n t: number\n): {\n previous: SplinePoint\n next: SplinePoint\n } {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n // This function must also respect \"skipped\" points\n\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n const pointsLen = points.length;\n\n let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK: number[] = Array(pointsLen).fill(0);\n const mK: number[] = Array(pointsLen);\n\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n points: SplinePoint[],\n options,\n area: ChartArea,\n loop: boolean,\n indexAxis: 'x' | 'y'\n) {\n let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType;\n\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type Chart from '../core/core.controller.js';\nimport type {ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = (parent as ShadowRoot).host;\n }\n return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n let valueInPixels: number;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n const result = {} as ChartArea;\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n e: Event | TouchEvent | MouseEvent,\n canvas: HTMLCanvasElement\n): {\n x: number;\n y: number;\n box: boolean;\n } {\n const touches = (e as TouchEvent).touches;\n const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n const {offsetX, offsetY} = source as MouseEvent;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n event: Event | ChartEvent | TouchEvent | MouseEvent,\n chart: Chart\n): { x: number; y: number } {\n if ('native' in event) {\n return event;\n }\n\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial {\n let maxWidth: number, maxHeight: number;\n\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n canvas: HTMLCanvasElement,\n bbWidth?: number,\n bbHeight?: number,\n aspectRatio?: number\n): { width: number; height: number } {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n\n return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n chart: Chart,\n forceRatio: number,\n forceStyle?: boolean\n): boolean | void {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n\n const canvas = chart.canvas;\n\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() { // This function will be called when the browser attempts to access the passive property.\n passiveSupported = true;\n return false;\n }\n } as EventListenerOptions;\n\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n element: HTMLElement,\n property: 'width' | 'height'\n): number | undefined {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n","import type {Point} from '../types/geometric.js';\nimport type {SplinePoint} from './helpers.curve.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n p1: Point,\n p2: Point,\n t: number, mode: 'middle' | 'after' | unknown\n) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n","export interface RTLAdapter {\n x(x: number): number;\n setWidth(w: number): void;\n textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n xPlus(x: number, value: number): number;\n leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n return {\n x(x) {\n return x;\n },\n setWidth(w) { // eslint-disable-line no-unused-vars\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return x;\n },\n };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n let style: CSSStyleDeclaration, original: [string, string];\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n\n style.setProperty('direction', direction, 'important');\n (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n if (original !== undefined) {\n delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n // eslint-disable-next-line prefer-const\n let {start, end, loop} = segment;\n let i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n\n return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n\n if (loop && !spanGaps) {\n // loop and not spanning gaps, first find a gap to start from\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n // find first non skipped point (after the first gap possibly)\n while (start < count && points[start].skip) {\n start++;\n }\n\n // if we looped to count, start needs to be 0\n start %= count;\n\n if (loop) {\n // loop will go past count, if start > 0\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n // end could be more than count, normalize\n end %= count;\n\n return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n // @ts-ignore\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n\n return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n\n if (!count) {\n return [];\n }\n\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n // Style can not start/end on a skipped point, adjust indices accordingly\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n","import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n /**\n\t * @private\n\t */\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n\n /**\n\t * @private\n\t */\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n\n if (this._running) {\n this._refresh();\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _update(date = Date.now()) {\n let remaining = 0;\n\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n // if the animation has been updated and its duration prolonged,\n // update to total duration of current animations run (for progress event)\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n // Remove the item by replacing it with last item and removing the last\n // A lot faster than splice.\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n\n /**\n\t * @private\n\t */\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n\n /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n\n /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n\n /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n\n /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n\n /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n /**\n * @param {string} from\n * @param {string} to\n * @param {number} factor\n */\n color(from, to, factor) {\n const c0 = helpersColor(from || transparent);\n const c1 = c0.valid && helpersColor(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nexport default class Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n active() {\n return this._active;\n }\n\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n\n cancel() {\n if (this._active) {\n // update current evaluated value, for smoother animations\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n\n this._active = from !== to && (loop || (elapsed < duration));\n\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n this._target[prop] = this._fn(from, to, factor);\n }\n\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n\n /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n // Going to shared options:\n // After all animations are done, assign the shared options object to the element\n // So any new updates to the shared options are observed\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n // rejected, noop\n });\n }\n\n return animations;\n }\n\n /**\n\t * @private\n\t */\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n // There is an existing active animation, let's update that\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n // not animated, set directly to new value\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n\n\n /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n update(target, values) {\n if (this._properties.size === 0) {\n // Nothing is animated, just apply the new values.\n Object.assign(target, values);\n return;\n }\n\n const animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\n\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n // @ts-ignore\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n // Going from shared options to distinct one:\n // Create new options object containing the old shared values and start updating that.\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n let t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\n\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n // Not using meta.index here, because it might be already updated if the dataset changed location\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n /**\n * @type {any}\n */\n static defaults = {};\n\n /**\n * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n */\n static datasetElementType = null;\n\n /**\n * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n */\n static dataElementType = null;\n\n /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n /** @type {boolean | object} */\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n\n this.initialize();\n }\n\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n\n /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n\n /**\n\t * @private\n\t */\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n\n reset() {\n this._update('reset');\n }\n\n /**\n\t * @private\n\t */\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n\n /**\n\t * @private\n\t */\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n\n // In order to correctly handle data addition/deletion animation (an thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal meta data accordingly.\n\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(_data, this);\n // Discard old parsed data and stacks\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n\n addElements() {\n const meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n\n this._dataCheck();\n\n // make sure cached _stacked status is current\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n // detect change in stack option\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n // remove values from old stack\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n this._resyncElements(resetNewElements);\n\n // if stack changed, update stack values for the whole dataset\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n\n /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n\n /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n\n /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n\n /**\n\t * @protected\n\t */\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n\n /**\n\t * @protected\n\t */\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n\n /**\n\t * @protected\n\t */\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n // if the data is sorted, we don't need to check further from this end of array\n break;\n }\n }\n if (sorted) {\n // in the sorted case, find first non-skipped value from other end of array\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return false;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n\n /**\n\t * @private\n\t */\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {} // eslint-disable-line no-unused-vars\n\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n\n /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n\n /**\n\t * @protected\n\t */\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n\n /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n\n /**\n\t * @private\n\t */\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n // context is provided as a function, and is called only if needed,\n // so we don't create a context for each element if not needed.\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n // `$shared` indicates this set of options can be shared between multiple elements.\n // Sharing is used to reduce number of properties to change during animation.\n values.$shared = sharing;\n\n // We cache options by `mode`, which can be 'active' for example. This enables us\n // to have the 'active' element options and 'default' options to switch between\n // when interacting.\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n\n\n /**\n\t * @private\n\t */\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n\n /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n\n /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n\n /**\n * @todo v4, rename to getSharedOptions and remove excess functions\n */\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n\n /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n\n /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n\n /**\n\t * @private\n\t */\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n // When going from active to inactive, we need to update to the shared options.\n // This way the once hovered element will end up with the same original shared options instance, after animation.\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n\n /**\n\t * @private\n\t */\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n\n /**\n\t * @private\n\t */\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n\n /**\n\t * @private\n\t */\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n\n // Apply changes detected through array listeners\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n\n if (count) {\n // TODO: It is not optimal to always parse the old data\n // This is done because we are not detecting direct assignments:\n // chart.data.datasets[0].data[5] = 10;\n // chart.data.datasets[0].data[5].y = 10;\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n\n /**\n\t * @private\n\t */\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n\n updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @private\n\t */\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n\n /**\n\t * @private\n */\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n _arrayUnique, isArray, isNullOrUndef,\n valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n // Ignore truncated pixels\n return;\n }\n if (defined(prev)) {\n // curr - prev === 0 is ignored\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n // Store `barEnd` (furthest away from origin) as parsed value,\n // to make stacking straight forward\n item[vScale.axis] = barEnd;\n\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n\n const {start, end, reverse, top, bottom} = borderProps(properties);\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n };\n\n\n /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n // float bar: only one end of the bar is considered by `super`\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n\n initialize() {\n this.enableOptionSharing = true;\n\n super.initialize();\n\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n\n /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n\n const skipNull = (meta) => {\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n // stacked | meta.stack\n // | found | not found | undefined\n // false | x | x | x\n // true | | x |\n // undefined | | x | x\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n\n // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n // stack where possible invisible bars will be located.\n // https://github.com/chartjs/Chart.js/issues/6368\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n\n /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n\n /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1; // indexOf returns -1 if element is not present\n\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n\n /**\n\t * @private\n\t */\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n // bar thickness ratio used for non-grouped bars\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n\n /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n // bars crossing origin are not stacked\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n // When not visible, no height\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n\n if (_stacked && !floating) {\n // visual data coordinates after applying minBarLength\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n\n /**\n\t * @private\n\t */\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n // For non-grouped bar charts, exact pixel values are used\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n static id = 'bubble';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n\n /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n\n update(mode) {\n const points = this._cachedMeta.data;\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n\n // In case values were cached (and thus frozen), we need to clone the values\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n\n // Custom radius resolution\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n return values;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n static id = 'doughnut';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n // The percentage of the chart that we cut out of the middle.\n cutout: '50%',\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outr radius of the chart\n radius: '100%',\n\n // Spacing between arcs\n spacing: 0,\n\n indexAxis: 'r',\n };\n\n static descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n // Need to override these to give a nice default\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n\n linkScales() {}\n\n /**\n\t * Override data parsing, since we are not using scales\n\t */\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n\n /**\n\t * @private\n\t */\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n\n /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n\n // Compute the maximal rotation & circumference limits.\n // If we only consider our dataset, this can cause problems when two datasets\n // are both less than a circle with different rotations (starting angles)\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n\n meta.total = this.calculateTotal();\n\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @private\n */\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n\n getMaxOffset(arcs) {\n let max = 0;\n\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n\n /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n\n /**\n\t * @private\n\t */\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n\n /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n\n showLine: true,\n spanGaps: false,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n static id = 'polarArea';\n\n /**\n * @type {any}\n */\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const arcs = this._cachedMeta.data;\n\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @protected\n */\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n\n return range;\n }\n\n /**\n\t * @private\n\t */\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n\n const defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n\n return count;\n }\n\n /**\n\t * @private\n\t */\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n static id = 'pie';\n\n /**\n * @type {any}\n */\n static defaults = {\n // The percentage of the chart that we cut out of the middle.\n cutout: 0,\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outr radius of the chart\n radius: '100%'\n };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n static id = 'radar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n\n // Update Line\n line.points = points;\n // In resize mode only point locations change, so no need to set the points or options.\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n\n this.updateElement(line, undefined, properties, mode);\n }\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n static id = 'scatter';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n\n interaction: {\n mode: 'point'\n },\n\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n\n const {dataset: line, _dataset} = meta;\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n }\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n addElements() {\n const {showLine} = this.options;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n\n super.addElements();\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter {\n readonly options: T;\n /**\n * Will called with chart options after adapter creation.\n */\n init(this: DateAdapter, chartOptions: ChartOptions): void;\n /**\n * Returns a map of time formats for the supported formatting units defined\n * in Unit as well as 'datetime' representing a detailed date/time string.\n */\n formats(this: DateAdapter): Record;\n /**\n * Parses the given `value` and return the associated timestamp.\n * @param value - the value to parse (usually comes from the data)\n * @param [format] - the expected data format\n */\n parse(this: DateAdapter, value: unknown, format?: TimeUnit): number | null;\n /**\n * Returns the formatted date in the specified `format` for a given `timestamp`.\n * @param timestamp - the timestamp to format\n * @param format - the date/time token\n */\n format(this: DateAdapter, timestamp: number, format: TimeUnit): string;\n /**\n * Adds the specified `amount` of `unit` to the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param amount - the amount to add\n * @param unit - the unit as string\n */\n add(this: DateAdapter, timestamp: number, amount: number, unit: TimeUnit): number;\n /**\n * Returns the number of `unit` between the given timestamps.\n * @param a - the input timestamp (reference)\n * @param b - the timestamp to subtract\n * @param unit - the unit as string\n */\n diff(this: DateAdapter, a: number, b: number, unit: TimeUnit): number;\n /**\n * Returns start of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n * @param [weekday] - the ISO day of the week with 1 being Monday\n * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n */\n startOf(this: DateAdapter, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number): number;\n /**\n * Returns end of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n */\n endOf(this: DateAdapter, timestamp: number, unit: TimeUnit | 'isoWeek'): number;\n}\n\nfunction abstract(): T {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override(\n members: Partial, 'options'>>\n ) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n\n readonly options: AnyObject;\n\n constructor(options: AnyObject) {\n this.options = options || {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n\n formats(): Record {\n return abstract();\n }\n\n parse(): number | null {\n return abstract();\n }\n\n format(): string {\n return abstract();\n }\n\n add(): number {\n return abstract();\n }\n\n diff(): number {\n return abstract();\n }\n\n startOf(): number {\n return abstract();\n }\n\n endOf(): number {\n return abstract();\n }\n}\n\nexport default {\n _date: DateAdapterBase\n};\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n // _sharedOptions indicates that each element has equal options -> equal proportions\n // So we can do a ranged binary search based on the range of first element and\n // be confident to get the full range of indices that can intersect with the value.\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n // Default to all elements, when binary search can not be used.\n return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n // Part of the public API to facilitate developers creating their own modes\n evaluateInteractionItems,\n\n // Helper function for different modes\n modes: {\n /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n // Default axis for index mode is 'x' to match old behaviour\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n\n // don't count items that are skipped (null data)\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n\n return elements;\n },\n\n /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n\n return items;\n },\n\n /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n\n /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n\n // dynamically placed boxes size is not considered\n if (!isObject(pos)) {\n if (layout.size) {\n // this layout was already counted for, lets first reduce old size\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n\n // return booleans on the changes per direction\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n // Dimensions changed and there were non full width boxes before this\n // -> we have to refit those\n refit |= same && refitBoxes.length;\n\n // Chart area changed in the opposite direction\n changed = changed || other;\n\n if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n // initialize item with default values\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n // @ts-ignore\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n\n /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n\n /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n\n // Before any changes are made, notify boxes that an update is about to being\n // This is used to clear any cached data (e.g. scale limits)\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n\n // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n // First fit the fullSize boxes, to reduce probability of re-fitting.\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n // Then fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n // Then fit horizontal boxes\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n // if the area changed, re-fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n\n // Finally place the boxes to correct coordinates\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n // Move to opposite side of chart\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n\n // Finally update boxes in chartArea (radial scale for example)\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n releaseContext(context) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n getDevicePixelRatio() {\n return 1;\n }\n\n /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n isAttached(canvas) { // eslint-disable-line no-unused-vars\n return true;\n }\n\n /**\n * Updates config with platform specific requirements\n * @param {import('../core/core.config.js').default} config\n */\n updateConfig(config) { // eslint-disable-line no-unused-vars\n // no-op\n }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n acquireContext(item) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n\n // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n\n // Chart.js modifies some canvas values that we want to restore on destroy\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n\n // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n style.display = style.display || 'block';\n // Include possible borders in the size\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener();\n }\n }, window);\n\n // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n // When its container's display is set to 'none' the callback will be called with a\n // size of (0, 0), which will cause the chart to lose its original height, so skip\n // resizing in such case.\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n // This case can occur if the chart is destroyed while waiting\n // for the throttled function to occur. We prevent crashes by checking\n // for a destroyed chart\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n\n addListener(canvas, type, proxy);\n\n return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n acquireContext(canvas, aspectRatio) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n // inside an iframe or when running in a protected environment. We could guess the\n // types from their toString() value but let's keep things flexible and assume it's\n // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n // https://github.com/chartjs/Chart.js/issues/3887\n // https://github.com/chartjs/Chart.js/issues/4102\n // https://github.com/chartjs/Chart.js/issues/4152\n if (context && context.canvas === canvas) {\n // Load platform resources on first chart creation, to make it possible to\n // import the library before setting platform options.\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n\n /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n\n // The canvas render size might have been changed (and thus the state stack discarded),\n // we can't use save() and restore() to restore the initial state. So make sure that at\n // least the canvas context is reset to the default state by setting the canvas width.\n // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n // eslint-disable-next-line no-self-assign\n canvas.width = canvas.width;\n\n delete canvas[EXPANDO_KEY];\n return true;\n }\n\n /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n addEventListener(chart, type, listener) {\n // Can have only one listener per type, so make sure previous is removed\n this.removeEventListener(chart, type);\n\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element {\n\n static defaults = {};\n static defaultRoutes = undefined;\n\n x: number;\n y: number;\n active = false;\n options: O;\n $animations: Record;\n\n tooltipPosition(useFinalPosition: boolean): Point {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y} as Point;\n }\n\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n\n /**\n * Gets the current or final value of each prop. Can return extra properties (whole object).\n * @param props - properties to get\n * @param [final] - get the final value (animation target)\n */\n getProps

    (props: P, final?: boolean): Pick;\n getProps

    (props: P[], final?: boolean): Partial>;\n getProps(props: string[], final?: boolean): Partial> {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this as Record;\n }\n const ret: Record = {};\n props.forEach((prop) => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n });\n return ret;\n }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n\n // If there are too many major ticks to display them all\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n\n // If the major ticks are evenly spaced apart, place the minor ticks\n // so that they divide the major ticks into even chunks\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n\n // Return undefined if the pixel is out of the range\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n\n return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n // eslint-disable-next-line max-statements\n constructor(cfg) {\n super();\n\n /** @type {string} */\n this.id = cfg.id;\n /** @type {string} */\n this.type = cfg.type;\n /** @type {any} */\n this.options = undefined;\n /** @type {CanvasRenderingContext2D} */\n this.ctx = cfg.ctx;\n /** @type {Chart} */\n this.chart = cfg.chart;\n\n // implements box\n /** @type {number} */\n this.top = undefined;\n /** @type {number} */\n this.bottom = undefined;\n /** @type {number} */\n this.left = undefined;\n /** @type {number} */\n this.right = undefined;\n /** @type {number} */\n this.width = undefined;\n /** @type {number} */\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n /** @type {number} */\n this.maxWidth = undefined;\n /** @type {number} */\n this.maxHeight = undefined;\n /** @type {number} */\n this.paddingTop = undefined;\n /** @type {number} */\n this.paddingBottom = undefined;\n /** @type {number} */\n this.paddingLeft = undefined;\n /** @type {number} */\n this.paddingRight = undefined;\n\n // scale-specific properties\n /** @type {string=} */\n this.axis = undefined;\n /** @type {number=} */\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n /** @type {Tick[]} */\n this.ticks = [];\n /** @type {object[]|null} */\n this._gridLineItems = null;\n /** @type {object[]|null} */\n this._labelItems = null;\n /** @type {object|null} */\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n /** @type {number} */\n this._startPixel = undefined;\n /** @type {number} */\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n\n /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n init(options) {\n this.options = options.setContext(this.getContext());\n\n this.axis = options.axis;\n\n // parse min/max value, so we can properly determine min/max for other scales\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n\n /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n return raw;\n }\n\n /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isFinite(_userMin),\n maxDefined: isFinite(_userMax)\n };\n }\n\n /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n getMinMax(canStack) {\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n\n if (minDefined && maxDefined) {\n return {min, max};\n }\n\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n // Make sure min <= max when only min or max is defined by user and the data is outside that range\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n\n /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n\n /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n getTicks() {\n return this.ticks;\n }\n\n /**\n\t * @return {string[]}\n\t */\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n\n /**\n * @return {import('../types.js').LabelItem[]}\n */\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n\n // When a new layout is created, reset the data limits cache\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n\n // These methods are ordered by lifecycle. Utilities then follow.\n // Any function defined here is inherited by all scale types.\n // Any function can be extended by the scale type\n\n beforeUpdate() {\n call(this.options.beforeUpdate, [this]);\n }\n\n /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t * This space comes from two sources:\n\t * - padding - space that's required to show the labels at the edges of the scale\n\t * - thickness of scales or legends in another orientation\n\t */\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n\n // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n this.beforeUpdate();\n\n // Absorb the master measurements\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n\n // Dimensions\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n\n // Data min/max\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n\n this.ticks = this.buildTicks() || [];\n\n // Allow modification of ticks in callback.\n this.afterBuildTicks();\n\n // Compute tick rotation and fit using a sampled subset of labels\n // We generally don't need to compute the size of every single label for determining scale size\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n // configure is called twice, once here, once from core.controller.updateLayout.\n // Here we haven't been positioned yet, but dimensions are correct.\n // Variables set in configure are needed for calculateLabelRotation, and\n // it's ok that coordinates are not correct there, only dimensions matter.\n this.configure();\n\n // Tick Rotation\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n this.afterCalculateLabelRotation();\n\n // Auto-skip\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n // Generate labels using all non-skipped ticks\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n this.afterFit();\n\n // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n this.afterUpdate();\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n // by default vertical scales are from bottom to top, so pixels are reversed\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n\n afterUpdate() {\n call(this.options.afterUpdate, [this]);\n }\n\n //\n\n beforeSetDimensions() {\n call(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n if (this.isHorizontal()) {\n // Reset position before calculating rotation\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n\n // Reset position before calculating rotation\n this.top = 0;\n this.bottom = this.height;\n }\n\n // Reset padding\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n call(this.options.afterSetDimensions, [this]);\n }\n\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n call(this.options[name], [this]);\n }\n\n // Data limits\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n\n //\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n /**\n\t * @return {object[]} the ticks\n\t */\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n\n beforeTickToLabelConversion() {\n call(this.options.beforeTickToLabelConversion, [this]);\n }\n /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n call(this.options.afterTickToLabelConversion, [this]);\n }\n\n //\n\n beforeCalculateLabelRotation() {\n call(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = this.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n\n // Estimate the width of each grid based on the canvas width, the maximum\n // label width and the number of tick intervals\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n // Allow 3 pixels x2 padding either side for label readability\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n call(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n\n //\n\n beforeFit() {\n call(this.options.beforeFit, [this]);\n }\n fit() {\n // Reset\n const minSize = {\n width: 0,\n height: 0\n };\n\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight; // fill all the height\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n // Don't bother fitting the ticks if we are not showing the labels\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n // A horizontal axis is more constrained by the height.\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n // A vertical axis is more constrained by the width. Labels are the\n // dominant factor here, so get that length first and account for padding\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n\n // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n // which means that the right padding is dominated by the font height\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n // Adjust padding taking into account changes in offsets\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n\n /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n\n afterFit() {\n call(this.options.afterFit, [this]);\n }\n\n // Shared Methods\n /**\n\t * @return {boolean}\n\t */\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n /**\n\t * @return {boolean}\n\t */\n isFullSize() {\n return this.options.fullSize;\n }\n\n /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n\n this.generateTickLabels(ticks);\n\n // Ticks should be skipped when callback returns null or undef, so lets remove those.\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n\n /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n\n return labelSizes;\n }\n\n /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n // if it is an array let's measure each element\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n\n /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value;\n }\n\n /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n return NaN;\n }\n\n /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n\n /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n\n /**\n\t * @return {number}\n\t */\n getBaseValue() {\n const {min, max} = this;\n\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n\n /**\n\t * @protected\n\t */\n getContext(index) {\n const ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n\n /**\n\t * @return {number}\n\t * @private\n\t */\n _tickSize() {\n const optionTicks = this.options.ticks;\n\n // Calculate space needed by label in axis direction.\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n // Calculate space needed for 1 tick in axis direction.\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n\n /**\n\t * @return {boolean}\n\t * @private\n\t */\n _isVisible() {\n const display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n\n /**\n\t * @private\n\t */\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position, border} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n lineValue = getPixelForGridLine(this, i, offset);\n\n // Skip if the pixel is out of the range\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n\n return items;\n }\n\n /**\n\t * @private\n\t */\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += (lineHeight / 2) * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n let backdrop;\n\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n default:\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n default:\n break;\n }\n\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n\n color: optsAtIndex.backdropColor,\n };\n }\n\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n }\n });\n }\n\n return items;\n }\n\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n let align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n\n let textAlign;\n let x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {textAlign, x};\n }\n\n /**\n\t * @private\n\t */\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n const chart = this.chart;\n const position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n\n /**\n * @protected\n */\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {\n const {chart, ctx, options: {border, grid}} = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n const ctx = this.ctx;\n\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n\n if (!title.display) {\n return;\n }\n\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n\n /**\n\t * @return {object[]}\n\t * @private\n\t */\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n // backward compatibility: draw has been overridden by custom scale\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n\n /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n\n /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n\n /**\n * @protected\n */\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n\n /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n\n if (isIChartComponent(proto)) {\n // Make sure the parent is registered and note the scope where its defaults are.\n parentScope = this.register(proto);\n }\n\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n // already registered\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n get(id) {\n return this.items[id];\n }\n\n /**\n\t * @param {IChartComponent} item\n\t */\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n // Inherit the parent's defaults and keep existing defaults\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n // Order is important, Scale has Element in prototype chain,\n // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n /**\n\t * @param {...any} args\n\t */\n add(...args) {\n this._each('register', args);\n }\n\n remove(...args) {\n this._each('unregister', args);\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n\n /**\n\t * @private\n\t */\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n // Handle loopable args\n // Use case:\n // import * as plugins from './plugins.js';\n // Chart.register(plugins);\n each(arg, item => {\n // If there are mixed types in the loopable, make sure those are\n // registered in correct registry\n // Use case: (treemap exporting controller, elements etc)\n // import * as treemap from 'chartjs-chart-treemap.js';\n // Chart.register(treemap);\n\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n registry[method](component);\n call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n }\n\n /**\n\t * @private\n\t */\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n // plugins is the fallback registry\n return this.plugins;\n }\n\n /**\n\t * @private\n\t */\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n constructor() {\n this._init = [];\n }\n\n /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n\n /**\n\t * @private\n\t */\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callCallback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n\n return true;\n }\n\n invalidate() {\n // When plugins are registered, there is the possibility of a double\n // invalidate situation. In this case, we only want to invalidate once.\n // If we invalidate multiple times, the `_oldCache` is lost and all of the\n // plugins are restarted without being correctly stopped.\n // See https://github.com/chartjs/Chart.js/issues/8147\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n const descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n // options === false => all plugins are disabled\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n // make sure plugin defaults are in scopes for local (not registered) plugins\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n // These are just defaults that plugins can override\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nexport function determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n\n id = scaleOptions.axis\n || axisFromPosition(scaleOptions.position)\n || id.length > 1 && determineAxis(id[0].toLowerCase(), scaleOptions);\n\n if (id) {\n return id;\n }\n\n throw new Error(`Cannot determine type of '${name}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n\n // First figure out first scale id's per axis.\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n\n // Then merge dataset defaults to scale configs\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n\n // apply scale defaults, if not overridden by dataset defaults\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n\n return scales;\n}\n\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n\n initOptions(config);\n\n return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nexport default class Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n get platform() {\n return this._config.platform;\n }\n\n get type() {\n return this._config.type;\n }\n\n set type(type) {\n this._config.type = type;\n }\n\n get data() {\n return this._config.data;\n }\n\n set data(data) {\n this._config.data = initData(data);\n }\n\n get options() {\n return this._config.options;\n }\n\n set options(options) {\n this._config.options = options;\n }\n\n get plugins() {\n return this._config.plugins;\n }\n\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n\n /**\n * Returns the option scope keys for resolving dataset options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @return {string[][]}\n */\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the option scope keys for resolving dataset animation options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @param {string} transition\n * @return {string[][]}\n */\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n // The following are used for looking up the `animations` and `animation` keys\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n\n /**\n * Returns the options scope keys for resolving element options that belong\n * to an dataset. These keys do not include the dataset itself, because it\n * is not under options.\n * @param {string} datasetType\n * @param {string} elementType\n * @return {string[][]}\n */\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the options scope keys for resolving plugin options.\n * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n * @return {string[][]}\n */\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n\n /**\n * @private\n */\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n\n /**\n * Resolves the objects from options and defaults for option value resolution.\n * @param {object} mainScope - The main scope object for options\n * @param {string[][]} keyLists - The arrays of keys in resolution order\n * @param {boolean} [resetCache] - reset the cache for this mainScope\n */\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n\n const scopes = new Set();\n\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n\n /**\n * Returns the option scopes for resolving chart options\n * @return {object[]}\n */\n chartOptionScopes() {\n const {options, type} = this;\n\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n {type},\n defaults,\n descriptors\n ];\n }\n\n /**\n * @param {object[]} scopes\n * @param {string[]} names\n * @param {function|object} context\n * @param {string[]} [prefixes]\n * @return {object}\n */\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n // subResolver is passed to scriptable options. It should not resolve to hover options.\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n\n /**\n * @param {object[]} scopes\n * @param {object} [context]\n * @param {string[]} [prefixes]\n * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n */\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\n\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\n\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {retinaScale, _isDomSupported} from '../helpers/helpers.dom.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n\n chart.notifyPlugins('afterRender');\n callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n // Support for array based queries (such as jQuery)\n item = item[0];\n }\n\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\n\nfunction getDatasetArea(meta) {\n const {xScale, yScale} = meta;\n if (xScale && yScale) {\n return {\n left: xScale.left,\n right: xScale.right,\n top: yScale.top,\n bottom: yScale.bottom\n };\n }\n}\n\nclass Chart {\n\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n\n // eslint-disable-next-line max-statements\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n // Store the previously used aspect ratio to determine if a resize\n // is needed during updates. Do this after _options is set since\n // aspectRatio uses a getter\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n /** @type {?{attach?: function, detach?: function, resize?: function}} */\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n\n // Add the chart instance to the global namespace\n instances[this.id] = this;\n\n if (!context || !canvas) {\n // The given item is not a compatible context2d element, let's return before finalizing\n // the chart initialization but after setting basic chart / controller properties that\n // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n // https://github.com/chartjs/Chart.js/issues/2807\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n // If aspectRatio is defined in options, use that.\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n return _aspectRatio;\n }\n\n // Calculate\n return height ? width / height : null;\n }\n\n get data() {\n return this.config.data;\n }\n\n set data(data) {\n this.config.data = data;\n }\n\n get options() {\n return this._options;\n }\n\n set options(options) {\n this.config.options = options;\n }\n\n get registry() {\n return registry;\n }\n\n /**\n\t * @private\n\t */\n _initialize() {\n // Before init plugin notification\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n\n // After init plugin notification\n this.notifyPlugins('afterInit');\n\n return this;\n }\n\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n\n stop() {\n animator.stop(this);\n return this;\n }\n\n /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {size: newSize});\n\n callCallback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n // The resize update is delayed, only draw without updating.\n this.render();\n }\n }\n }\n\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n\n /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n // clear up discarded scales\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n\n /**\n\t * @private\n\t */\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n\n /**\n\t * @private\n\t */\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n return newControllers;\n }\n\n /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n\n /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n\n update(mode) {\n const config = this.config;\n\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n\n // plugins options references might have change, let's invalidate the cache\n // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n // Make sure dataset controllers are updated and new controllers are reset\n const newControllers = this.buildOrUpdateControllers();\n\n this.notifyPlugins('beforeElementsUpdate');\n\n // Make sure all dataset controllers have correct meta data counts\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n // New controllers will be reset after the layout pass, so we only want to modify\n // elements added to new datasets\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n\n // Only reset the controllers if we have animations\n if (!animsDisabled) {\n // Can only reset the new controllers after the scales have been updated\n // Reset is done to get the starting point for the initial animation\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n // Do this before render so that any plugins that need final scale updates can use it\n this.notifyPlugins('afterUpdate', {mode});\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n // Replay last event from before update, or set hover styles on active elements\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n\n /**\n * @private\n */\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n // The configured events have changed. Rebind.\n this.unbindEvents();\n this.bindEvents();\n }\n }\n\n /**\n * @private\n */\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n\n /**\n * @private\n */\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n\n /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n return;\n }\n\n // configure is called twice, once in core.scale.update and once here.\n // Here the boxes are fully updated and at their final positions.\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n\n /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n\n /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n\n // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n // currently be part of layers. Instead, we draw\n // layers <= 0 before(default, backward compat), and the rest after\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n // Rest of layers\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n\n /**\n\t * @private\n\t */\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n\n /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n\n /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n\n /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta) || this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n\n meta.controller.draw();\n\n if (useClip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n\n /**\n * Checks whether the given point is in the chart area.\n * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n * @returns {boolean}\n */\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\t\t\t// See isDatasetVisible() comment\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n\n const meta = this.getDatasetMeta(datasetIndex);\n\n // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n\n /**\n\t * @private\n\t */\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n\n /**\n\t * @private\n\t */\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n\n this._stop();\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n delete instances[this.id];\n\n this.notifyPlugins('afterDestroy');\n }\n\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n\n /**\n\t * @private\n\t */\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n\n /**\n * @private\n */\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n\n each(this.options.events, (type) => _add(type, listener));\n }\n\n /**\n * @private\n */\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n\n let detached; // eslint-disable-line prefer-const\n const attached = () => {\n _remove('attach', attached);\n\n this.attached = true;\n this.resize();\n\n _add('resize', listener);\n _add('detach', detached);\n };\n\n detached = () => {\n this.attached = false;\n\n _remove('resize', listener);\n\n // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n this._stop();\n this._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n\n /**\n\t * @private\n\t */\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n\n /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n // Make sure we don't use the previous mouse event to override the active elements in update.\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n\n /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n\n /**\n * Check if a plugin with the specific ID is registered and enabled\n * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n * @returns {boolean}\n */\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n\n /**\n\t * @private\n\t */\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n\n /**\n\t * @private\n\t */\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n const changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n\n // If the event is replayed from `update`, we should evaluate with the final positions.\n //\n // The `replay`:\n // It's the last event (excluding click) that has occurred before `update`.\n // So mouse has not moved. It's also over the chart, because there is a `replay`.\n //\n // The why:\n // If animations are active, the elements haven't moved yet compared to state before update.\n // But if they will, we are activating the elements that would be active, if this check\n // was done after the animations have completed. => \"final positions\".\n // If there is no animations, the \"final\" and \"current\" positions are equal.\n // This is done so we do not have to evaluate the active elements each animation frame\n // - it would be expensive.\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n // Set _lastEvent to null while we are processing the event handlers.\n // This prevents recursion if the handler calls chart.update()\n this._lastEvent = null;\n\n // Invoke onHover hook\n callCallback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callCallback(options.onClick, [e, active, this], this);\n }\n }\n\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n\n return changed;\n }\n\n /**\n * @param {ChartEvent} e - The event\n * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n * @param {boolean} inChartArea - Is the envent inside chartArea\n * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n * @pravate\n */\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n return lastActive;\n }\n\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n end: number,\n circular: boolean,\n) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n let spacingOffset = 0;\n const alpha = end - start;\n\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n ctx.beginPath();\n\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawBorder(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference, options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\n\nexport interface ArcProps extends Point {\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n outerRadius: number;\n circumference: number;\n}\n\nexport default class ArcElement extends Element {\n\n static id = 'arc';\n\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n };\n\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n\n circumference: number;\n endAngle: number;\n fullCircles: number;\n innerRadius: number;\n outerRadius: number;\n pixelMargin: number;\n startAngle: number;\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return (betweenAngles && withinRadius);\n }\n\n getCenterPoint(useFinalPosition: boolean) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n\n tooltipPosition(useFinalPosition: boolean) {\n return this.getCenterPoint(useFinalPosition);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n ctx.restore();\n }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n // eslint-disable-next-line prefer-const\n let {move = true, reverse} = params || {};\n let i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n // Draw line to maxY and minY, using the average x-coordinate\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n // Line to y-value of last point in group. So the line continues\n // from correct position. Not using move, to have solid path.\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n }\n\n const x = point.x;\n const y = point.y;\n const truncX = x | 0; // truncated x-coordinate\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n // Draw line to next x-position, using the first (or only)\n // y-value in that group\n ctx.lineTo(x, y);\n\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n // Keep track of the last y-value in group\n lastY = y;\n }\n drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nexport default class LineElement extends Element {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n };\n\n\n constructor(cfg) {\n super();\n\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n\n get points() {\n return this._points;\n }\n\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n\n /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n\n /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n\n /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n\n if (!segments.length) {\n return;\n }\n\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n\n /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n\n /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n\n start = start || 0;\n count = count || (this.points.length - start);\n\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n\n /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n // When line is animated, the control points and path are not cached.\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n CartesianParsedData,\n ChartArea,\n Point,\n PointHoverOptions,\n PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element {\n\n static id = 'point';\n\n parsed: CartesianParsedData;\n skip?: boolean;\n stop?: boolean;\n\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n\n inXRange(mouseX: number, useFinalPosition?: boolean) {\n return inRange(this, mouseX, 'x', useFinalPosition);\n }\n\n inYRange(mouseY: number, useFinalPosition?: boolean) {\n return inRange(this, mouseY, 'y', useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition?: boolean) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n\n size(options?: Partial) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n\n draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n const options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n let left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n\n // If the value is an object, assume the user knows what they are doing\n // and apply as directed.\n const enableBorder = enableBorderRadius || isObject(value);\n\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nexport default class BarElement extends Element {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n\n ctx.restore();\n }\n\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n // Special case for boundary not supporting `segments` (simpleArc)\n // Bounds are provided as `target` for partial circle, or undefined for full circle\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n // Get all segments from `target` that intersect the bounds of current segment of `line`\n const targetSegments = _boundSegments(target, bounds);\n\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n // @ts-ignore\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n /** @type {string | {value: number}} */\n const fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n let target = parseFloat(fill);\n\n if (isFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n // @ts-ignore\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n let value;\n\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n // @ts-ignore\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n // First point of an segment -> need to add another point before this,\n // from next line below.\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n // In the middle of an segment, no need to add more points.\n break;\n }\n }\n }\n points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n const {chart, fill, line} = source;\n\n if (isFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n const boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n\n if (isFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n\n return null;\n}\n\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\n","import {clipArea, unclipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\n\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n\n ctx.save();\n\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {line, target, color: below, scale, property});\n\n ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n\n ctx.save();\n ctx.fillStyle = backgroundColor;\n\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n\n ctx.beginPath();\n\n const lineLoop = !!line.pathSegment(ctx, src);\n\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n ctx.restore();\n }\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n id: 'filler',\n\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n _isBetween,\n callback as call,\n clipArea,\n getRtlAdapter,\n overrideTextDirection,\n restoreTextDirection,\n toFont,\n toPadding,\n unclipArea,\n valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this._added = false;\n\n // Contains hit boxes for each dataset (in dataset order)\n this.legendHitBoxes = [];\n\n /**\n \t\t * @private\n \t\t */\n this._hoveredItem = null;\n\n // Are we in doughnut mode which has a different data type\n this.doughnutMode = false;\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n\n fit() {\n const {options, ctx} = this;\n\n // The legend may not be displayed for a variety of reasons including\n // the fact that the defaults got set to `false`.\n // When the legend is not displayed, there are no guarantees that the options\n // are correctly formatted so we need to bail out as early as possible.\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n let width, height;\n\n ctx.font = labelFont.string;\n\n if (this.isHorizontal()) {\n width = this.maxWidth; // fill all the width\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight; // fill all the height\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n\n /**\n\t * @private\n\t */\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n\n return totalHeight;\n }\n\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n\n let left = 0;\n let col = 0;\n\n this.legendItems.forEach((legendItem, i) => {\n const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n // If too tall, go to new column\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n // Store the hitbox width and height here. Final position will be updated in `draw`\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n // Get max width\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n return totalWidth;\n }\n\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @private\n\t */\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n\n this.drawTitle();\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n // current position\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n // Set the ctx for the box\n ctx.save();\n\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n\n // Draw pointStyle as legend symbol\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n // Draw box as legend symbol\n // Adjust position when boxHeight < fontSize (want it centered)\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n // Horizontal\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(this.ctx, opts.textDirection);\n\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n\n rtlHelper.setWidth(this.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n\n const realX = rtlHelper.x(x);\n\n drawLegendBox(realX, y, legendItem);\n\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n // Fill the actual label\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight);\n } else {\n cursor.y += lineHeight;\n }\n });\n\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n\n // These defaults are used when the legend is vertical.\n // When horizontal, they are computed below.\n let left = this.left;\n let maxWidth = this.width;\n\n if (this.isHorizontal()) {\n // Move left / right so that the title is above the legend lines\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n // Move down so that the title is above the legend stack in every alignment\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n\n // Now that we know the left edge of the inner legend box, compute the correct\n // X coordinate from the title alignment\n const x = _alignStartEnd(position, left, left + maxWidth);\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n\n /**\n\t * @private\n\t */\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n\n /**\n\t * @private\n\t */\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n // See if we are touching one of the dataset boxes\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n // Touching an element\n return this.legendItems[i];\n }\n }\n }\n\n return null;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n\n // Chart event already has relative position in it\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n call(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n call(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n call(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n }\n return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length + 0.5 : 0;\n return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\n\nexport default {\n id: 'legend',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Legend,\n\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n\n // During the beforeUpdate step, the layout configuration needs to run\n // This ensures that if the legend position changes (via an option update)\n // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n\n // The labels need to be built after datasets are updated to ensure that colors\n // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n\n\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n\n // a callback that will handle\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n\n onHover: null,\n onLeave: null,\n\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n // Generates labels shown in the legend\n // Valid properties to return:\n // text : text to display\n // fillStyle : fill of coloured box\n // strokeStyle: stroke of coloured box\n // hidden : if this legend item refers to a hidden item\n // lineCap : cap style for line\n // lineDash\n // lineDashOffset :\n // lineJoin :\n // lineWidth :\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n // Below is extra data used for toggling the datasets\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n","import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight) {\n const opts = this.options;\n\n this.left = 0;\n this.top = 0;\n\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n\n if (!opts.display) {\n return;\n }\n\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\n\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\n\nexport default {\n id: 'title',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Title,\n\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000 // by default greater than legend (1000) to be above\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n average(items) {\n if (!items.length) {\n return false;\n }\n\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n\n return {\n x: x / count,\n y: y / count\n };\n },\n\n /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x,\n y\n };\n }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n // base = base.concat(toPush);\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n\n // Count of all lines in the body\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n // Body lines may include some extra height depending on boxHeight\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n\n // Title width\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n\n // Body width\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n // Body lines may include some extra width due to the color box\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n\n // Reset back to 0\n widthPadding = 0;\n\n // Footer width\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n\n ctx.restore();\n\n // Add padding\n width += padding.width;\n\n return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n // eslint-disable-next-line prefer-const\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n // Args are: (tooltipItems, data)\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n\n // Args are: (tooltipItems, data)\n beforeBody: noop,\n\n // Args are: (tooltipItem, data)\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n let label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n\n // Args are: (tooltipItems, data)\n afterBody: noop,\n\n // Args are: (tooltipItems, data)\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n\n return result;\n}\n\nexport class Tooltip extends Element {\n\n /**\n * @namespace Chart.Tooltip.positioners\n */\n static positioners = positioners;\n\n constructor(config) {\n super();\n\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n // and `labelTextColors` to create a single variable\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n\n /**\n\t * @private\n\t */\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n\n /**\n\t * @protected\n\t */\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n\n getTitle(context, options) {\n const {callbacks} = options;\n\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n return lines;\n }\n\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n );\n }\n\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n bodyItems.push(bodyItem);\n });\n\n return bodyItems;\n }\n\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n );\n }\n\n // Get the footer and beforeFooter and afterFooter lines\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n return lines;\n }\n\n /**\n\t * @private\n\t */\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n // If the user provided a filter function, use it to modify the tooltip items\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n\n // If the user provided a sorting function, use it to modify the tooltip items\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n\n // Determine colors for boxes\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n\n // Left draws bottom -> top, this y1 is on the bottom\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n\n // Right draws top -> bottom, thus y1 is on the top\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n\n // Top draws left -> right, thus x1 is on the left\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n\n // Bottom draws right -> left, thus x1 is on the right\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.titleAlign, options);\n\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n }\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n\n // Fill the point with white so that colours merge nicely if the opacity is < 1\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n\n // Draw the point\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n // Border\n ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : (labelColors.borderWidth || 1); // TODO, v4 remove fallback\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n\n // Fill a white rect so that colours merge nicely if the opacity is < 1\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n\n // Inner square\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n // Normal rect\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n // Inner square\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n // restore fillStyle\n ctx.fillStyle = this.labelTextColors[i];\n }\n\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n // Before body lines\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n\n // Draw body lines now\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n\n lines = bodyItem.lines;\n // Draw Legend-like boxes if needed\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n // Reset for any lines that don't include colorbox\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n // Reset back to 0 for after body\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n\n // After body lines\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing; // Remove last body spacing\n }\n\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n\n footerFont = toFont(options.footerFont);\n\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n\n /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n\n /**\n * Determine if the tooltip will draw anything\n * @returns {boolean} True if the tooltip will render\n */\n _willRender() {\n return !!this.opacity;\n }\n\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n\n // IE11/Edge does not like very small opacities, so snap to 0\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n const padding = toPadding(options.padding);\n\n // Truthy/falsey value for empty tooltip\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n\n // Draw Background\n this.drawBackground(pt, ctx, tooltipSize, options);\n\n overrideTextDirection(ctx, options.textDirection);\n\n pt.y += padding.top;\n\n // Titles\n this.drawTitle(pt, ctx, options);\n\n // Body\n this.drawBody(pt, ctx, options);\n\n // Footer\n this.drawFooter(pt, ctx, options);\n\n restoreTextDirection(ctx, options.textDirection);\n\n ctx.restore();\n }\n }\n\n /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n // When there are multiple items shown, but the tooltip position is nearest mode\n // an update may need to be made because our position may have changed even though\n // the items are the same as before.\n const positionChanged = this._positionChanged(active, e);\n\n // Remember Last Actives\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n // Only handle target event on tooltip change\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n\n /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n return lastActive;\n }\n\n // Find Active Elements for tooltips\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n\n /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\n\nexport default {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n\n afterEvent(chart, args) {\n if (chart.tooltip) {\n // If the event is replayed from `update`, we should evaluate with the final positions.\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n // notify chart about the change, so it will render\n args.changed = true;\n }\n }\n },\n\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n\n // Resolve additionally from `interaction` options and defaults.\n additionalOptionScopes: ['interaction']\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n id: 'subtitle',\n\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500 // by default greater than legend (1000) and smaller than title (2000)\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n static id = 'category';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n\n // If we are viewing some subset of labels, slice the original array\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n super.configure();\n\n if (!this.isHorizontal()) {\n // For backward compatibility, vertical category scale reverse is inverted.\n this._reversePixels = !this._reversePixels;\n }\n }\n\n // Used to get data value locations. Value can either be an index or a numerical value\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n // Must override base implementation because it calls getPixelForValue\n // and category scale can have duplicate values\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n\n getBasePixel() {\n return this.bottom;\n }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n * if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n * Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n * spacing = (max - min) / count\n * Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n * spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n const ticks = [];\n // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n // for details.\n\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n\n // Beyond MIN_SPACING floating point numbers being to lose precision\n // such that we can't do the math necessary to generate ticks\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n // If the user specified a precision, round to that number of decimal places\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n // spacing = step;\n // numSpaces = (max - min) / spacing;\n // Note that we round here to handle the case where almostWhole translated an FP error\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n // Sometimes these are no-ops, but it makes the code a lot clearer\n // and when a user defined range is specified, we want the correct ticks\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n // Case 4\n numSpaces = (niceMax - niceMin) / spacing;\n\n // If very close to our rounded value, use it.\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n // until this point\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n\n if (niceMin < min) {\n j++; // Skip niceMin\n }\n // If the next nice tick is close to min, skip it\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n // If the previous tick is too close to max, replace it with max, else add max\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n /** @type {number} */\n this._endValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n\n getTickLimit() {\n const tickOpts = this.options.ticks;\n // eslint-disable-next-line prefer-const\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n\n /**\n\t * @protected\n\t */\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n // Figure out what the max number of ticks we can support it is based on the size of\n // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n // the graph. Make sure we always have at least 2 ticks\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n\n super.configure();\n\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n static id = 'linear';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? min : 0;\n this.max = isFinite(max) ? max : 1;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n\n // Utils\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\n\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({value, major: isMajor(value), significand});\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n static id = 'logarithmic';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isFinite(value) && value > 0 ? value : null;\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? Math.max(0, min) : null;\n this.max = isFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n\n this.handleTickRangeOptions();\n }\n\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (min === max) {\n if (min <= 0) { // includes null\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n\n setMax(changeExponent(min, +1));\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const opts = this.options;\n\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const start = this.min;\n\n super.configure();\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n // Right, this is really confusing and there is a lot of maths going on here\n // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n //\n // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n //\n // Solution:\n //\n // We assume the radius of the polygon is half the size of the canvas at first\n // at each index we check if the text overlaps.\n //\n // Where it does, we store that angle and that index.\n //\n // After finding the largest index and angle we calculate how much we need to remove\n // from the shape radius to move the point inwards by that x.\n //\n // We average the left and right distances to get the maximum shape radius that can fit in the box\n // along with labels.\n //\n // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n // on each side, removing that from the size, halving it and adding the left x protrusion width.\n //\n // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n // and position it in the most space efficient manner\n //\n // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n\n // Now that text size is determined, compute the full positions\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n\n for (let i = 0; i < valueCount; i++) {\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n\n items.push({\n // Text position\n x: pointLabelPosition.x,\n y,\n\n // Text rendering data\n textAlign,\n\n // Bounding box\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\n\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n // Draw circular arcs between the points\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n // Draw straight lines connecting each index\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n\n const {color, lineWidth} = gridLineOpts;\n\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n static id = 'radialLinear';\n\n /**\n * @type {any}\n */\n static defaults = {\n display: true,\n\n // Boolean - Whether to animate scaling the chart from the centre\n animate: true,\n position: 'chartArea',\n\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n\n grid: {\n circular: false\n },\n\n startAngle: 0,\n\n // label settings\n ticks: {\n // Boolean - Show a backdrop to the scale label\n showLabelBackdrop: true,\n\n callback: Ticks.formatters.numeric\n },\n\n pointLabels: {\n backdropColor: undefined,\n\n // Number - The backdrop padding above & below the label in pixels\n backdropPadding: 2,\n\n // Boolean - if true, show point labels\n display: true,\n\n // Number - Point label font size in pixels\n font: {\n size: 10\n },\n\n // Function - Used to convert point labels\n callback(label) {\n return label;\n },\n\n // Number - Additionl padding between scale and pointLabel\n padding: 5,\n\n // Boolean - if true, center point labels to slices in polar chart\n centerPointLabels: false\n }\n };\n\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.xCenter = undefined;\n /** @type {number} */\n this.yCenter = undefined;\n /** @type {number} */\n this.drawingArea = undefined;\n /** @type {string[]} */\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n\n this.min = isFinite(min) && !isNaN(min) ? min : 0;\n this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n // Point labels\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n\n fit() {\n const opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n // Take into account half font size + the yPadding of the top value\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n\n /**\n\t * @protected\n\t */\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid, border} = opts;\n const labelCount = this._pointLabels.length;\n\n let i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {}\n\n /**\n\t * @protected\n\t */\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n this.ticks.forEach((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n });\n });\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object}\n */\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n // Only parse if its not a timestamp already\n if (!isFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, /** @type {Unit} */ (parser))\n : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n /** @type {Object} */\n const map = {};\n const ilen = values.length;\n let i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n\n ticks.push({\n value,\n major: false\n });\n }\n\n // We set the major ticks separately from the above loop because calling startOf for every tick\n // is expensive when there is a large number of ticks\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n static id = 'time';\n\n /**\n * @type {any}\n */\n static defaults = {\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 2.7.0\n */\n bounds: 'data',\n\n adapters: {},\n time: {\n parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n unit: false, // false == automatic or override with week, month, year, etc.\n round: false, // none, or override with week, month, year, etc.\n isoWeekday: false, // override week start day\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n /**\n * Ticks generation input values:\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n source: 'auto',\n\n callback: false,\n\n major: {\n enabled: false\n }\n }\n };\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {{data: number[], labels: number[], all: number[]}} */\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n\n /** @type {Unit} */\n this._unit = 'day';\n /** @type {Unit=} */\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n /** @type {DateAdapter} */\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n adapter.init(opts);\n\n // Backward compatibility: before introducing adapter, `displayFormats` was\n // supposed to contain *all* unit/string pairs but this can't be resolved\n // when loading the scale (adapters are loaded afterward), so let's populate\n // missing formats on update\n mergeIf(time.displayFormats, adapter.formats());\n\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n super.init(scaleOpts);\n\n this._normalized = opts.normalized;\n }\n\n /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n /**\n\t\t * @param {object} bounds\n\t\t */\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n // If we have user provided `min` and `max` labels / data bounds can be ignored\n if (!minDefined || !maxDefined) {\n // Labels are always considered, when user did not force bounds\n _applyBounds(this._getLabelBounds());\n\n // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n // data bounds are ignored (and don't need to be determined)\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n\n min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n\n /**\n\t * @private\n\t */\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n\n /**\n\t * @return {object[]}\n\t */\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n const min = this.min;\n const max = this.max;\n\n const ticks = _filterBetween(timestamps, min, max);\n\n // PRIVATE\n // determineUnitForFormatting relies on the number of ticks so we don't use it when\n // autoSkip is enabled because we don't yet know what the final number of ticks will be\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n\n afterAutoSkip() {\n // Offsets for bar charts need to be handled with the auto skipped\n // ticks. Once ticks have been skipped, we re-compute the offsets.\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n\n /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n\n /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @private\n\t */\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n // @ts-ignore\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n\n // For 'week' unit, handle the first day of week option\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n // Align first ticks on unit\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n // Prevent browser from freezing in case user options request millions of milliseconds\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n // @ts-ignore\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n\n /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n\n if (formatter) {\n return call(formatter, [time, index, ticks], this);\n }\n\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n\n /**\n\t * @param {object[]} ticks\n\t */\n generateTickLabels(ticks) {\n let i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n\n /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n\n /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n\n // pick the longest format (milliseconds) for guestimation\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n // subtract 1 - if offset then there's one less label than tick\n // if not offset then one half label padding is added to each end leaving room for one less label\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n\n /**\n\t * @protected\n\t */\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return (this._cache.data = this.normalize(timestamps));\n }\n\n /**\n\t * @protected\n\t */\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n\n /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n normalize(values) {\n // It seems to be somewhat faster to do sorting first\n return _arrayUnique(values.sort(sorter));\n }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n static id = 'timeseries';\n\n /**\n * @type {any}\n */\n static defaults = TimeScale.defaults;\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {object[]} */\n this._table = [];\n /** @type {number} */\n this._minPos = undefined;\n /** @type {number} */\n this._tableRange = undefined;\n }\n\n /**\n\t * @protected\n\t */\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n\n /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n // only add points that breaks the scale linearity\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n\n /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n // If combining labels and data (data might not contain all labels),\n // we need to recheck uniqueness and sort\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n\n return timestamps;\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nexport default TimeSeriesScale;\n","import type { MouseEvent } from 'react';\nimport type {\n ChartType,\n ChartData,\n DefaultDataPoint,\n ChartDataset,\n ChartOptions,\n Chart,\n} from 'chart.js';\n\nimport type { ForwardedRef } from './types.js';\n\nconst defaultDatasetIdKey = 'label';\n\nexport function reforwardRef(ref: ForwardedRef, value: T) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n\nexport function setOptions<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(chart: Chart, nextOptions: ChartOptions) {\n const options = chart.options;\n\n if (options && nextOptions) {\n Object.assign(options, nextOptions);\n }\n}\n\nexport function setLabels<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextLabels: TLabel[] | undefined\n) {\n currentData.labels = nextLabels;\n}\n\nexport function setDatasets<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextDatasets: ChartDataset[],\n datasetIdKey = defaultDatasetIdKey\n) {\n const addedDatasets: ChartDataset[] = [];\n\n currentData.datasets = nextDatasets.map(\n (nextDataset: Record) => {\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find(\n (dataset: Record) =>\n dataset[datasetIdKey] === nextDataset[datasetIdKey]\n );\n\n // There is no original to update, so simply add new one\n if (\n !currentDataset ||\n !nextDataset.data ||\n addedDatasets.includes(currentDataset)\n ) {\n return { ...nextDataset } as ChartDataset;\n }\n\n addedDatasets.push(currentDataset);\n\n Object.assign(currentDataset, nextDataset);\n\n return currentDataset;\n }\n );\n}\n\nexport function cloneData<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(data: ChartData, datasetIdKey = defaultDatasetIdKey) {\n const nextData: ChartData = {\n labels: [],\n datasets: [],\n };\n\n setLabels(nextData, data.labels);\n setDatasets(nextData, data.datasets, datasetIdKey);\n\n return nextData;\n}\n\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getDatasetAtEvent(\n chart: Chart,\n event: MouseEvent\n) {\n return chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'dataset',\n { intersect: true },\n false\n );\n}\n\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementAtEvent(\n chart: Chart,\n event: MouseEvent\n) {\n return chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'nearest',\n { intersect: true },\n false\n );\n}\n\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementsAtEvent(\n chart: Chart,\n event: MouseEvent\n) {\n return chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'index',\n { intersect: true },\n false\n );\n}\n","import React, { useEffect, useRef, forwardRef } from 'react';\nimport { Chart as ChartJS } from 'chart.js';\nimport type { ChartType, DefaultDataPoint } from 'chart.js';\n\nimport type { ForwardedRef, ChartProps, BaseChartComponent } from './types.js';\nimport {\n reforwardRef,\n cloneData,\n setOptions,\n setLabels,\n setDatasets,\n} from './utils.js';\n\nfunction ChartComponent<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n props: ChartProps,\n ref: ForwardedRef>\n) {\n const {\n height = 150,\n width = 300,\n redraw = false,\n datasetIdKey,\n type,\n data,\n options,\n plugins = [],\n fallbackContent,\n updateMode,\n ...canvasProps\n } = props as ChartProps;\n const canvasRef = useRef(null);\n const chartRef = useRef();\n\n const renderChart = () => {\n if (!canvasRef.current) return;\n\n chartRef.current = new ChartJS(canvasRef.current, {\n type,\n data: cloneData(data, datasetIdKey),\n options: options && { ...options },\n plugins,\n });\n\n reforwardRef(ref, chartRef.current);\n };\n\n const destroyChart = () => {\n reforwardRef(ref, null);\n\n if (chartRef.current) {\n chartRef.current.destroy();\n chartRef.current = null;\n }\n };\n\n useEffect(() => {\n if (!redraw && chartRef.current && options) {\n setOptions(chartRef.current, options);\n }\n }, [redraw, options]);\n\n useEffect(() => {\n if (!redraw && chartRef.current) {\n setLabels(chartRef.current.config.data, data.labels);\n }\n }, [redraw, data.labels]);\n\n useEffect(() => {\n if (!redraw && chartRef.current && data.datasets) {\n setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);\n }\n }, [redraw, data.datasets]);\n\n useEffect(() => {\n if (!chartRef.current) return;\n\n if (redraw) {\n destroyChart();\n setTimeout(renderChart);\n } else {\n chartRef.current.update(updateMode);\n }\n }, [redraw, options, data.labels, data.datasets, updateMode]);\n\n useEffect(() => {\n if (!chartRef.current) return;\n\n destroyChart();\n setTimeout(renderChart);\n }, [type]);\n\n useEffect(() => {\n renderChart();\n\n return () => destroyChart();\n }, []);\n\n return (\n \n {fallbackContent}\n \n );\n}\n\nexport const Chart = forwardRef(ChartComponent) as BaseChartComponent;\n","import React, { forwardRef } from 'react';\nimport {\n Chart as ChartJS,\n LineController,\n BarController,\n RadarController,\n DoughnutController,\n PolarAreaController,\n BubbleController,\n PieController,\n ScatterController,\n} from 'chart.js';\nimport type { ChartType, ChartComponentLike } from 'chart.js';\n\nimport type {\n ChartProps,\n ChartJSOrUndefined,\n TypedChartComponent,\n} from './types.js';\nimport { Chart } from './chart.js';\n\nfunction createTypedChart(\n type: T,\n registerables: ChartComponentLike\n) {\n ChartJS.register(registerables);\n\n return forwardRef, Omit, 'type'>>(\n (props, ref) => \n ) as TypedChartComponent;\n}\n\nexport const Line = /* #__PURE__ */ createTypedChart('line', LineController);\n\nexport const Bar = /* #__PURE__ */ createTypedChart('bar', BarController);\n\nexport const Radar = /* #__PURE__ */ createTypedChart('radar', RadarController);\n\nexport const Doughnut = /* #__PURE__ */ createTypedChart(\n 'doughnut',\n DoughnutController\n);\n\nexport const PolarArea = /* #__PURE__ */ createTypedChart(\n 'polarArea',\n PolarAreaController\n);\n\nexport const Bubble = /* #__PURE__ */ createTypedChart(\n 'bubble',\n BubbleController\n);\n\nexport const Pie = /* #__PURE__ */ createTypedChart('pie', PieController);\n\nexport const Scatter = /* #__PURE__ */ createTypedChart(\n 'scatter',\n ScatterController\n);\n","export const calculateGrace = (n: number): number =>\n Math.ceil(Math.round(n * 0.05));\n\nexport const createTooltipLabel = (\n value: number,\n format: Intl.NumberFormat,\n dataSetPrefix?: string\n): string => {\n const formattedValue = format.format(value);\n\n const label = `${dataSetPrefix}: ${formattedValue}`;\n\n return label;\n};\n","import { Bar, getDatasetAtEvent } from 'react-chartjs-2';\nimport { FC, useRef } from 'react';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport {\n calculateGrace,\n createTooltipLabel\n} from 'common/helpers/chart-helpers';\n\nexport const ChartBar: FC<{\n title: string;\n isStackedX: boolean;\n isStackedY: boolean;\n yAxisFormat: Intl.NumberFormat;\n tooltipFormat: Intl.NumberFormat;\n xAxisTitle: string;\n yAxisTitle: string;\n yHighestValue?: number;\n shouldAnimate: boolean;\n data: ChartData<'bar', (number | [number, number] | null)[], unknown>;\n}> = ({\n title,\n isStackedX,\n isStackedY,\n yAxisFormat,\n tooltipFormat,\n xAxisTitle,\n yAxisTitle,\n yHighestValue,\n shouldAnimate,\n data\n}: {\n title: string;\n isStackedX: boolean;\n isStackedY: boolean;\n yAxisFormat: Intl.NumberFormat;\n tooltipFormat: Intl.NumberFormat;\n xAxisTitle: string;\n yAxisTitle: string;\n yHighestValue?: number;\n shouldAnimate: boolean;\n data: ChartData<'bar', (number | [number, number] | null)[], unknown>;\n}) => {\n const chartRef = useRef();\n\n const onClick = (e: any) => {\n console.log(getDatasetAtEvent(chartRef.current, e));\n };\n\n const options: ChartOptions<'bar'> = {\n plugins: {\n title: {\n display: title.length > 0,\n text: title,\n align: 'start',\n font: {\n weight: '700',\n size: 14\n }\n },\n legend: {\n position: 'top',\n align: 'end',\n labels: {\n usePointStyle: true,\n pointStyle: 'circle',\n boxHeight: 8\n }\n },\n tooltip: {\n callbacks: {\n label: function (context) {\n return createTooltipLabel(\n context.parsed.y,\n tooltipFormat,\n context.dataset.label\n );\n }\n }\n }\n },\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n x: {\n stacked: isStackedX,\n grid: {\n display: false\n }\n },\n xTitle: {\n type: 'category',\n axis: 'x',\n labels: [],\n display: xAxisTitle.length > 0,\n border: {\n display: false\n },\n title: {\n align: 'center',\n text: xAxisTitle,\n display: true,\n font: {\n size: 12\n }\n }\n },\n y: {\n stacked: isStackedY,\n ticks: {\n callback: function (value) {\n const valueAsNumber = value as number;\n const formattedValue = yAxisFormat.format(valueAsNumber);\n\n return formattedValue;\n }\n },\n max: yHighestValue,\n grace: calculateGrace(yHighestValue ?? 0)\n },\n yTitle: {\n type: 'category',\n axis: 'y',\n labels: [],\n display: yAxisTitle.length > 0,\n border: {\n display: false\n },\n title: {\n align: 'center',\n text: yAxisTitle,\n display: true,\n font: {\n size: 12\n }\n }\n }\n }\n };\n\n (options as any).animation = shouldAnimate;\n\n return (\n \n );\n};\n","import { Line, getDatasetAtEvent } from 'react-chartjs-2';\nimport { FC, useRef } from 'react';\nimport { ChartData, ChartOptions, ScatterDataPoint } from 'chart.js';\n\nexport const ChartLine: FC<{\n title: string;\n isStackedX: boolean;\n isStackedY: boolean;\n isLinearX: boolean;\n legendKeysToIgnore: string[];\n xAxisTitle: string;\n yAxisTitle: string;\n data: ChartData<'line', (number | ScatterDataPoint | null)[], unknown>;\n}> = ({\n title,\n isStackedX,\n isStackedY,\n isLinearX,\n legendKeysToIgnore,\n xAxisTitle,\n yAxisTitle,\n data\n}: {\n title: string;\n isStackedX: boolean;\n isStackedY: boolean;\n isLinearX: boolean;\n legendKeysToIgnore: string[];\n xAxisTitle: string;\n yAxisTitle: string;\n data: ChartData<'line', (number | ScatterDataPoint | null)[], unknown>;\n}) => {\n const chartRef = useRef();\n\n const onClick = (e: any) => {\n console.log(e);\n console.log(getDatasetAtEvent(chartRef.current, e));\n };\n\n const options: ChartOptions<'line'> = {\n animation: false,\n normalized: true,\n parsing: false,\n elements: {\n point: {\n radius: 0\n }\n },\n plugins: {\n title: {\n display: title.length > 0,\n text: title,\n align: 'start',\n font: {\n weight: '700',\n size: 14\n }\n },\n legend: {\n position: 'top',\n align: 'end',\n labels: {\n usePointStyle: true,\n pointStyle: 'circle',\n boxHeight: 8,\n filter: (legendItem) => !legendKeysToIgnore.includes(legendItem.text)\n }\n },\n decimation: {\n enabled: true,\n algorithm: 'lttb',\n samples: 100\n }\n },\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n x: {\n stacked: isStackedX,\n type: isLinearX ? 'linear' : 'category',\n grid: {\n display: false\n }\n },\n xTitle: {\n type: 'category',\n axis: 'x',\n display: xAxisTitle.length > 0,\n border: {\n display: false\n },\n title: {\n align: 'center',\n text: xAxisTitle,\n display: true,\n font: {\n size: 12\n }\n }\n },\n y: {\n stacked: isStackedY\n },\n yTitle: {\n type: 'category',\n axis: 'y',\n display: yAxisTitle.length > 0,\n border: {\n display: false\n },\n title: {\n align: 'center',\n text: yAxisTitle,\n display: true,\n font: {\n size: 12\n }\n }\n }\n }\n };\n\n return (\n \n );\n};\n","import resolveConfig from 'tailwindcss/resolveConfig';\nimport { Config } from 'tailwindcss/types/config';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst tailwindConfig = require('./tailwind.config');\n\nconst config = resolveConfig(tailwindConfig as Config);\nconst theme = config.theme as any;\n\nexport default theme;\n","import theme from 'tailwind.theme';\n\nexport const chartColours = [\n theme.colors.secondary[200],\n theme.colors.primary[700],\n theme.colors.success[400],\n theme.colors.primary[500],\n theme.colors.primary[300],\n theme.colors.error[300],\n theme.colors.success[200],\n theme.colors.primary[100],\n theme.colors.primary[50]\n];\n","import { ChartData, ChartTypeRegistry } from 'chart.js';\nimport { AxisChartByDate, DataPointSetByDate } from '../chart.models';\nimport { useCallback, useMemo } from 'react';\nimport moment from 'moment';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { ChartBar } from 'common/components/charts/chart-bar';\nimport { ChartLine } from 'common/components/charts/chart-line';\nimport { getChartTypeAndRange } from '../chartOptionsSlice';\nimport { DateRangeTypes } from '../chartButtons/constants/RangeRoutes';\nimport { chartColours } from 'common/components/charts/chart-colours';\n\nexport const ChartStrategyDate = ({ chart }: { chart: AxisChartByDate }) => {\n const [selectedChartType, selectedChartRange] = useSelector(\n (state: RootState) => getChartTypeAndRange(state, chart.id)\n );\n\n const groupByDay = (dataPointSets: DataPointSetByDate[]) => {\n const days = [...new Set(dataPointSets.map((dp) => dp.dataPointDate))];\n\n const dataPointSetNames = [\n ...new Set(dataPointSets.map((dp) => dp.dataPointSetName))\n ];\n\n const chartData: ChartData = {\n labels: days,\n datasets: dataPointSetNames.map((dps, i) =>\n toChartDataSet(dps, i, dataPointSets, days)\n )\n };\n\n return chartData;\n };\n\n const groupByWeek = (dataPointSets: DataPointSetByDate[]) => {\n const dataPointsByWeeks = dataPointSets.map(\n toDataPointSetWithWeeklyDateFormat\n );\n\n const weeks = [...new Set(dataPointsByWeeks.map((dp) => dp.dataPointDate))];\n\n const dataPointSetNames = [\n ...new Set(dataPointsByWeeks.map((dp) => dp.dataPointSetName))\n ];\n\n const dataPointsByWeeksAndCount = aggregateOnCountByDate(dataPointsByWeeks);\n\n const chartData: ChartData = {\n labels: weeks,\n datasets: dataPointSetNames.map((dps, i) =>\n toChartDataSet(dps, i, dataPointsByWeeksAndCount, weeks)\n )\n };\n return chartData;\n\n function toDataPointSetWithWeeklyDateFormat(\n dataPointSet: DataPointSetByDate\n ) {\n const dataPointDate = moment(new Date(dataPointSet.dataPointDate));\n\n const currentWeekStart: string = dataPointDate\n .startOf('week')\n .format('MMMM - DD')\n .toLocaleString();\n const currentWeekEnd: string = dataPointDate\n .endOf('week')\n .format('DD')\n .toLocaleString();\n\n const dataPointSetWithMonthDate: DataPointSetByDate = {\n ...dataPointSet,\n dataPointDate: `${currentWeekStart}-${currentWeekEnd}`\n };\n return dataPointSetWithMonthDate;\n }\n };\n\n const groupByMonth = (dataPointSets: DataPointSetByDate[]) => {\n const dataPointSetsByMonths = dataPointSets.map((dps) =>\n toDataPointSetWithDateFormat(dps, 'MMMM-YYYY')\n );\n\n const months = [\n ...new Set(dataPointSetsByMonths.map((dp) => dp.dataPointDate))\n ];\n\n const dataPointSetNames = [\n ...new Set(dataPointSetsByMonths.map((dp) => dp.dataPointSetName))\n ];\n\n const dataPointsByMonthsAndCount = aggregateOnCountByDate(\n dataPointSetsByMonths\n );\n\n const chartData: ChartData = {\n labels: months,\n datasets: dataPointSetNames.map((dps, i) =>\n toChartDataSet(dps, i, dataPointsByMonthsAndCount, months)\n )\n };\n\n return chartData;\n };\n\n const groupByYear = (dataPointSets: DataPointSetByDate[]) => {\n const dataPointSetsByYears = dataPointSets.map((dps) =>\n toDataPointSetWithDateFormat(dps, 'YYYY')\n );\n\n const years = [\n ...new Set(dataPointSetsByYears.map((dp) => dp.dataPointDate))\n ];\n\n const dataPointSetNames = [\n ...new Set(dataPointSetsByYears.map((dp) => dp.dataPointSetName))\n ];\n\n const dataPointsByYearsAndCount =\n aggregateOnCountByDate(dataPointSetsByYears);\n\n const chartData: ChartData = {\n labels: years,\n datasets: dataPointSetNames.map((dps, i) =>\n toChartDataSet(dps, i, dataPointsByYearsAndCount, years)\n )\n };\n\n return chartData;\n };\n\n const groupByDate = useCallback(\n (dataPointSets: DataPointSetByDate[], dateRangeType: DateRangeTypes) => {\n switch (dateRangeType) {\n case DateRangeTypes.DAY:\n return groupByDay(dataPointSets);\n case DateRangeTypes.WEEK:\n return groupByWeek(dataPointSets);\n case DateRangeTypes.MONTH:\n return groupByMonth(dataPointSets);\n case DateRangeTypes.YEAR:\n return groupByYear(dataPointSets);\n default:\n throw Error(`Unknown date range type: ${dateRangeType}`);\n }\n },\n []\n );\n\n const groupedChartData = useMemo(() => {\n if (chart.dataPointSets.length > 0) {\n return groupByDate(chart.dataPointSets, selectedChartRange);\n }\n }, [chart.dataPointSets, groupByDate, selectedChartRange]);\n\n const tryRenderChart = () => {\n switch (selectedChartType) {\n case 'stackedBar':\n return (\n }\n isStackedX={true}\n isStackedY={true}\n yAxisFormat={chart.yAxisFormat}\n tooltipFormat={chart.tooltipFormat}\n xAxisTitle={chart.xAxisTitle}\n yAxisTitle={chart.yAxisTitle}\n shouldAnimate={true}\n key={`${chart.id}-bar`}\n />\n );\n case 'stackedLine':\n return (\n }\n isStackedX={true}\n isStackedY={true}\n isLinearX={false}\n legendKeysToIgnore={[]}\n xAxisTitle={chart.xAxisTitle}\n yAxisTitle={chart.yAxisTitle}\n key={`${chart.id}-line`}\n />\n );\n }\n };\n\n return groupedChartData ? <>{tryRenderChart()} : null;\n};\n\nfunction toDataPointSetWithDateFormat(\n dataPointSet: DataPointSetByDate,\n dateFormat: string\n) {\n const dataPointSetWithMonthDate: DataPointSetByDate = {\n ...dataPointSet,\n dataPointDate: moment(new Date(dataPointSet.dataPointDate)).format(\n dateFormat\n )\n };\n return dataPointSetWithMonthDate;\n}\n\nfunction aggregateOnCountByDate(dataPoints: DataPointSetByDate[]) {\n return dataPoints.reduce((all: DataPointSetByDate[], next) => {\n const existingDataSetDateAggregate = all.find(\n (dps) =>\n dps.dataPointDate === next.dataPointDate &&\n dps.dataPointSetName === next.dataPointSetName\n );\n\n if (existingDataSetDateAggregate) {\n existingDataSetDateAggregate.countByDate =\n existingDataSetDateAggregate.countByDate + next.countByDate;\n return all;\n } else {\n return [...all, next];\n }\n }, []);\n}\n\n// We use 'any' because ChartJs types can be awkward\nfunction toChartDataSet(\n dataPointSetName: string,\n index: number,\n dataPointsByDateAndCount: DataPointSetByDate[],\n labels: string[]\n) {\n const datePointsByDate = labels.map(\n (label) =>\n dataPointsByDateAndCount.find(\n (dps) =>\n dps.dataPointSetName === dataPointSetName &&\n dps.dataPointDate === label\n )?.countByDate ?? 0\n );\n\n const dataSet: any = {\n label: dataPointSetName,\n backgroundColor: chartColours[index],\n fill: true,\n data: datePointsByDate\n };\n\n return dataSet;\n}\n","import { Doughnut, getDatasetAtEvent } from 'react-chartjs-2';\nimport { FC, useRef } from 'react';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { createTooltipLabel } from 'common/helpers/chart-helpers';\n\n// This is partially completed and needs refinement when coming back to it.\nexport const ChartDoughnut: FC<{\n title: string;\n tooltipFormat: Intl.NumberFormat;\n shouldAnimate: boolean;\n data: ChartData<'doughnut', (number | [number, number] | null)[], unknown>;\n}> = ({\n title,\n tooltipFormat,\n shouldAnimate,\n data\n}: {\n title: string;\n tooltipFormat: Intl.NumberFormat;\n shouldAnimate: boolean;\n data: ChartData<'doughnut', (number | [number, number] | null)[], unknown>;\n}) => {\n const chartRef = useRef();\n\n const onClick = (e: any) => {\n console.log(getDatasetAtEvent(chartRef.current, e));\n };\n\n const options: ChartOptions<'doughnut'> = {\n plugins: {\n title: {\n display: title.length > 0,\n text: title,\n align: 'start',\n font: {\n weight: '700',\n size: 14\n }\n },\n legend: {\n position: 'top',\n align: 'end',\n labels: {\n usePointStyle: true,\n pointStyle: 'circle',\n boxHeight: 8\n }\n },\n tooltip: {\n callbacks: {\n label: function (context) {\n console.log(context);\n return createTooltipLabel(\n context.parsed,\n tooltipFormat,\n context.dataset.label\n );\n }\n }\n }\n },\n responsive: true,\n maintainAspectRatio: false\n };\n\n (options as any).animation = shouldAnimate;\n\n return (\n \n );\n};\n","/* eslint-disable no-case-declarations */\nimport { ChartData, ChartTypeRegistry } from 'chart.js';\nimport {\n AxisChartByString,\n ChartByString,\n ChartDisplayType,\n DataPointSetByString\n} from '../chart.models';\nimport { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { ChartBar } from 'common/components/charts/chart-bar';\nimport { ChartLine } from 'common/components/charts/chart-line';\nimport { getChartType } from '../chartOptionsSlice';\nimport { chartColours } from 'common/components/charts/chart-colours';\nimport { ChartDoughnut } from 'common/components/charts/chart-doughnut';\n\nexport const ChartStrategyString = ({\n chart\n}: {\n chart: AxisChartByString | ChartByString;\n}) => {\n const selectedChartType =\n useSelector((state: RootState) => getChartType(state, chart.id)) ??\n chart.defaultChartDisplayType;\n\n const groupByString = (dataPointSets: DataPointSetByString[]) => {\n const labels = [...new Set(dataPointSets.map((dp) => dp.dataPointString))];\n\n const dataPointSetNames = [\n ...new Set(dataPointSets.map((dp) => dp.dataPointSetName))\n ];\n\n const chartData: ChartData = {\n labels,\n datasets: dataPointSetNames.map((dps, i) =>\n toChartDataSet(dps, i, dataPointSets, labels)\n )\n };\n\n return chartData;\n };\n\n const groupedChartData = useMemo(() => {\n if (chart.dataPointSets.length > 0) {\n return groupByString(chart.dataPointSets);\n }\n }, [chart.dataPointSets]);\n\n const tryRenderChart = () => {\n switch (selectedChartType) {\n case ChartDisplayType.STACKED_BAR:\n case ChartDisplayType.BAR:\n const barChart = chart as AxisChartByString;\n return (\n }\n isStackedX={selectedChartType === ChartDisplayType.STACKED_BAR}\n isStackedY={selectedChartType === ChartDisplayType.STACKED_BAR}\n yAxisFormat={barChart.yAxisFormat}\n tooltipFormat={barChart.tooltipFormat}\n xAxisTitle={barChart.xAxisTitle}\n yAxisTitle={barChart.yAxisTitle}\n yHighestValue={barChart.yHighestValue}\n shouldAnimate={barChart.shouldAnimate}\n key={`${barChart.id}-bar`}\n />\n );\n case ChartDisplayType.LINE:\n const lineChart = chart as AxisChartByString;\n return (\n }\n isStackedX={true}\n isStackedY={true}\n isLinearX={false}\n legendKeysToIgnore={[]}\n xAxisTitle={lineChart.xAxisTitle}\n yAxisTitle={lineChart.yAxisTitle}\n key={`${lineChart.id}-line`}\n />\n );\n case ChartDisplayType.DOUGHNUT:\n return (\n \n );\n }\n };\n\n return groupedChartData ? <>{tryRenderChart()} : null;\n};\n\nfunction toChartDataSet(\n dataPointSetName: string,\n index: number,\n dataPointsByStringAndCount: DataPointSetByString[],\n labels: string[]\n) {\n const dataPointsByStringAndCountWithZeroValues = labels.map(\n (label) =>\n dataPointsByStringAndCount.find(\n (dataPoint) =>\n dataPoint.dataPointSetName === dataPointSetName &&\n dataPoint.dataPointString === label\n )?.value ?? 0\n );\n\n const dataSet: any = {\n label: dataPointSetName,\n backgroundColor: chartColours[index],\n fill: true,\n data: dataPointsByStringAndCountWithZeroValues\n };\n\n return dataSet;\n}\n","import { useEffect, useState } from 'react';\nimport { getChartOptions, selectChartRange } from '../chartOptionsSlice';\nimport { RangeRoutes } from './constants/RangeRoutes';\nimport { useDispatch, useSelector } from 'react-redux';\nimport DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport { RootState } from 'app/store';\nimport SimpleButtonContainerContent from 'common/components/drop-downs/legacy/simpleDropDownButtonContainerContent';\nimport {\n isActivityTriggerNeeded,\n setSelectedDropDownItemAsActive\n} from 'common/components/drop-downs/legacy/dropDownUtils';\n\nconst ChartDateRangeButton = ({\n chartId,\n defaultRange\n}: {\n chartId: string;\n defaultRange: string;\n}) => {\n const dispatch = useDispatch();\n const [rangeRoutes, setChartRangeRoutes] = useState(RangeRoutes);\n\n const { selectedChartRange } = useSelector((state: RootState) =>\n getChartOptions(state, chartId)\n );\n\n useEffect(() => {\n if (selectedChartRange === undefined && defaultRange !== undefined) {\n dispatch(selectChartRange({ chartId, selectedChartRange: defaultRange }));\n } else if (\n selectedChartRange !== undefined &&\n isActivityTriggerNeeded(rangeRoutes, selectedChartRange)\n ) {\n setChartRangeRoutes(\n setSelectedDropDownItemAsActive(rangeRoutes, selectedChartRange)\n );\n }\n }, [chartId, defaultRange, dispatch, rangeRoutes, selectedChartRange]);\n\n return (\n \n dispatch(selectChartRange({ chartId, selectedChartRange: key }))\n }\n >\n \n \n );\n};\nexport default ChartDateRangeButton;\n","import { ChartData, ChartTypeRegistry } from 'chart.js';\nimport {\n AxisChartByNumberPrediction,\n ChartDisplayType,\n DataPointSetByNumberOptimisation,\n DataPointSetByNumberPrediction,\n DataPointSetStyle\n} from '../chart.models';\nimport { useMemo } from 'react';\nimport { ChartLine } from 'common/components/charts/chart-line';\nimport { chartColours } from 'common/components/charts/chart-colours';\n\nexport const ChartStrategyNumberPrediction = ({\n chart\n}: {\n chart: AxisChartByNumberPrediction;\n}) => {\n const chartData = useMemo(() => {\n if (chart.dataPointSetWithPredictions.length > 0) {\n return createChartData(\n chart.dataPointSetWithPredictions,\n chart.dataPointSetWithOptimisations\n );\n }\n }, [chart.dataPointSetWithPredictions, chart.dataPointSetWithOptimisations]);\n\n const tryRenderChart = () => {\n switch (chart.defaultChartDisplayType) {\n case ChartDisplayType.LINE:\n return (\n }\n isStackedX={false}\n isStackedY={false}\n isLinearX={true}\n legendKeysToIgnore={getLegendKeysToIgnore(\n chart.dataPointSetWithPredictions\n )}\n xAxisTitle={chart.xAxisTitle}\n yAxisTitle={chart.yAxisTitle}\n key={`${chart.id}-line`}\n />\n );\n default:\n throw Error(\n `You cannot use chart type \"${chart.defaultChartDisplayType}\" for number charts`\n );\n }\n };\n\n return chartData ? <>{tryRenderChart()} : null;\n};\n\nfunction createChartData(\n dataPointSetWithPredictions: DataPointSetByNumberPrediction[],\n dataPointSetWithOptimisations: DataPointSetByNumberOptimisation[]\n) {\n const actualDataPointSetNames = dataPointSetWithPredictions\n .filter((dps) => dps.actualParentDataPointSetName === '')\n .map((dps) => dps.dataPointSetName);\n\n const actualDataPointSetNamesDistinct = [...new Set(actualDataPointSetNames)];\n\n const actualChartDataSets = actualDataPointSetNamesDistinct.map(\n (dataPointSetName, dataPointSetNameIndex) =>\n createPredictiveChartDataSet(\n dataPointSetName,\n dataPointSetNameIndex,\n dataPointSetWithPredictions\n )\n );\n\n const predictionDataPointSetNames = dataPointSetWithPredictions\n .filter((dps) => dps.actualParentDataPointSetName !== '')\n .map((dps) => dps.dataPointSetName);\n\n const predictionDataPointSetNamesDistinct = [\n ...new Set(predictionDataPointSetNames)\n ];\n\n const childChartDataSets = predictionDataPointSetNamesDistinct.map(\n (dataPointSetName) => {\n const actualIndex = getActualDataPointSetNameIndex(\n dataPointSetName,\n dataPointSetWithPredictions,\n actualDataPointSetNamesDistinct\n );\n\n return createPredictiveChartDataSet(\n dataPointSetName,\n actualIndex,\n dataPointSetWithPredictions\n );\n }\n );\n\n const optimisationDataSet = createOptimisationChartDataSet(\n dataPointSetWithOptimisations,\n actualDataPointSetNamesDistinct\n );\n\n const chartData: ChartData = {\n datasets: [\n ...actualChartDataSets,\n ...childChartDataSets,\n optimisationDataSet\n ]\n };\n\n return chartData;\n}\n\nfunction getActualDataPointSetNameIndex(\n dataPointSetName: string,\n dataPointSets: DataPointSetByNumberPrediction[],\n dataPointSetNames: string[]\n): number {\n const actualDataPointSetName =\n dataPointSets.find((dps) => dps.dataPointSetName === dataPointSetName)\n ?.actualParentDataPointSetName ?? '';\n return dataPointSetNames.findIndex((dpsn) => dpsn === actualDataPointSetName);\n}\n\nfunction createPredictiveChartDataSet(\n dataPointSetName: string,\n index: number,\n dataPoints: DataPointSetByNumberPrediction[]\n) {\n const chartDataSetStyle =\n dataPoints.find((dp) => dp.dataPointSetName === dataPointSetName)?.style ??\n DataPointSetStyle.SOLID;\n\n const dataSet: any = {\n label: dataPointSetName,\n backgroundColor: chartColours[index],\n borderColor: chartColours[index],\n fill: false,\n borderWidth: chartDataSetStyle === DataPointSetStyle.SOLID ? 2 : 1,\n borderDash: chartDataSetStyle === DataPointSetStyle.SOLID ? [0, 0] : [5, 5],\n pointStyle: false,\n parsing: false,\n order: 2,\n data: dataPoints\n .filter((dp) => dp.dataPointSetName === dataPointSetName)\n .map((dataPoint) => {\n return {\n x: dataPoint.xValue,\n y: dataPoint.yValue\n };\n })\n };\n return dataSet;\n}\n\nfunction createOptimisationChartDataSet(\n dataPoints: DataPointSetByNumberOptimisation[],\n actualDataPointSetNamesDistinct: string[]\n) {\n const scatterDataSet: any = {\n label: 'Optimisation',\n fill: false,\n type: 'scatter',\n pointRadius: 6,\n pointHoverRadius: 8,\n order: 1,\n backgroundColor: chartColours[actualDataPointSetNamesDistinct.length + 1],\n data: dataPoints.map((dp) => {\n return {\n x: dp.xValue,\n y: dp.yValue\n };\n })\n };\n\n return scatterDataSet;\n}\n\nfunction getLegendKeysToIgnore(\n dataPointSets: DataPointSetByNumberPrediction[]\n): string[] {\n return dataPointSets\n .filter((dps) => dps.actualParentDataPointSetName !== '')\n .map((dps) => dps.dataPointSetName);\n}\n","import { Bar, getDatasetAtEvent } from 'react-chartjs-2';\nimport { FC, useRef } from 'react';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { DataPointSetByStringYAxis } from 'features/charts/chart.models';\nimport {\n calculateGrace,\n createTooltipLabel\n} from 'common/helpers/chart-helpers';\n\nexport const ChartBarScatter: FC<{\n title: string;\n data: ChartData;\n scatterDataPointSets: DataPointSetByStringYAxis[];\n yAxisFormat: Intl.NumberFormat;\n tooltipFormat: Intl.NumberFormat;\n xAxisTitle: string;\n yAxisTitle: string;\n yHighestValue: number;\n yScatterHighestValue: number;\n}> = ({\n title,\n data,\n scatterDataPointSets,\n yAxisFormat,\n tooltipFormat,\n xAxisTitle,\n yAxisTitle,\n yHighestValue,\n yScatterHighestValue\n}: {\n title: string;\n data: ChartData;\n scatterDataPointSets: DataPointSetByStringYAxis[];\n yAxisFormat: Intl.NumberFormat;\n tooltipFormat: Intl.NumberFormat;\n xAxisTitle: string;\n yAxisTitle: string;\n yHighestValue: number;\n yScatterHighestValue: number;\n}) => {\n const chartRef = useRef();\n\n const onClick = (e: any) => {\n console.log(getDatasetAtEvent(chartRef.current, e));\n };\n\n const options: ChartOptions<'bar'> = {\n animation: false,\n normalized: true,\n plugins: {\n title: {\n display: title.length > 0,\n text: title,\n position: 'top',\n align: 'start',\n font: {\n weight: '700',\n size: 14\n }\n },\n legend: {\n position: 'top',\n align: 'end',\n labels: {\n usePointStyle: true,\n pointStyle: 'circle',\n boxHeight: 8\n }\n },\n tooltip: {\n callbacks: {\n label: function (context) {\n const matchingTooltipFormat =\n scatterDataPointSets.find(\n (dps) => dps.yAxisName === context.dataset.yAxisID\n )?.yAxisTooltipFormat ?? tooltipFormat;\n\n return createTooltipLabel(\n context.parsed.y,\n matchingTooltipFormat,\n context.dataset.label\n );\n }\n }\n }\n },\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n x: {\n stacked: false,\n grid: {\n display: false\n }\n },\n xTitle: {\n type: 'category',\n axis: 'x',\n labels: [],\n display: xAxisTitle.length > 0,\n border: {\n display: false\n },\n title: {\n align: 'center',\n text: xAxisTitle,\n display: true,\n font: {\n size: 12\n }\n }\n },\n y: {\n stacked: false,\n ticks: {\n callback: function (value) {\n const valueAsNumber = value as number;\n const formattedValue = yAxisFormat.format(valueAsNumber);\n\n return formattedValue;\n }\n },\n suggestedMax: yHighestValue\n },\n yTitle: {\n type: 'category',\n axis: 'y',\n labels: [],\n display: yAxisTitle.length > 0,\n border: {\n display: false\n },\n title: {\n align: 'center',\n text: yAxisTitle,\n display: true,\n font: {\n size: 12\n }\n }\n }\n }\n };\n\n scatterDataPointSets.forEach((dps) => {\n const scale = {\n type: 'linear',\n axis: 'y',\n display: true,\n position: 'right',\n grid: {\n drawOnChartArea: false\n },\n title: {\n align: 'center',\n text: dps.yAxisTitle\n },\n ticks: {\n callback: (value: number) => dps.yAxisFormat.format(value)\n },\n suggestedMax: yScatterHighestValue,\n grace: calculateGrace(yScatterHighestValue)\n };\n\n (options.scales as any)[dps.yAxisName] = scale;\n });\n\n return ;\n};\n","import { ChartData, ChartTypeRegistry } from 'chart.js';\nimport {\n ChartByStringBarScatter,\n DataPointSetByString,\n DataPointSetByStringYAxis\n} from '../chart.models';\nimport { useMemo } from 'react';\nimport { chartColours } from 'common/components/charts/chart-colours';\nimport { ChartBarScatter } from 'common/components/charts/chart-bar-scatter';\n\nexport const ChartStrategyStringBarScatter = ({\n chart\n}: {\n chart: ChartByStringBarScatter;\n}) => {\n const groupByString = (\n barDataPointSets: DataPointSetByString[],\n scatterDataPointSets: DataPointSetByStringYAxis[]\n ) => {\n const labels = getLabels(barDataPointSets, scatterDataPointSets);\n\n const barDataSets = createBarDataSets(barDataPointSets);\n\n const scatterDataSets = createScatterDataSets(scatterDataPointSets);\n\n const datasets = appendColours(\n barDataPointSets,\n barDataSets,\n scatterDataPointSets,\n scatterDataSets\n );\n\n const chartData: ChartData = {\n labels,\n datasets\n };\n\n return chartData;\n };\n\n const groupedChartData = useMemo(() => {\n if (chart.barDataPointSets.length > 0 && chart.scatterDataPointSets) {\n return groupByString(chart.barDataPointSets, chart.scatterDataPointSets);\n }\n }, [chart.barDataPointSets, chart.scatterDataPointSets]);\n\n const tryRenderChart = () => {\n return (\n }\n scatterDataPointSets={chart.scatterDataPointSets}\n yAxisFormat={chart.yAxisFormat}\n tooltipFormat={chart.tooltipFormat}\n xAxisTitle={chart.xAxisTitle}\n yAxisTitle={chart.yAxisTitle}\n yHighestValue={chart.yHighestValue}\n yScatterHighestValue={chart.yScatterHighestValue}\n key={`${chart.id}-bar-scatter`}\n />\n );\n };\n\n return groupedChartData ? tryRenderChart() : null;\n};\n\nfunction getLabels(\n dataPointSets: DataPointSetByString[],\n dataPointSetsOnCustomAxis: DataPointSetByStringYAxis[]\n): string[] {\n const dataPointSetLabels = dataPointSets.map((dps) => dps.dataPointString);\n const dataPointSetOnCustomAxisLabels = dataPointSetsOnCustomAxis.map(\n (dps) => dps.dataPointString\n );\n\n return [\n ...new Set(dataPointSetLabels.concat(dataPointSetOnCustomAxisLabels))\n ];\n}\n\nfunction createBarDataSets(dataPointSets: DataPointSetByString[]): any[] {\n const dataPointSetNames = [\n ...new Set(dataPointSets.map((dps) => dps.dataPointSetName))\n ];\n\n return dataPointSetNames.map((dpsName) => {\n const dataPointSet = dataPointSets.find(\n (dps) => dps.dataPointSetName === dpsName\n );\n\n if (!dataPointSet) {\n throw Error(`Could not find bar dataPointSet with name ${dpsName}`);\n }\n\n const dataPointSetValues = dataPointSets\n .filter((dps) => dps.dataPointSetName === dpsName)\n .map((dps) => dps.value);\n\n const barDataSet: any = {\n label: dpsName,\n fill: true,\n data: dataPointSetValues,\n order: 2,\n categoryPercentage: 0.9,\n barPercentage: 1\n };\n\n return barDataSet;\n });\n}\n\nfunction createScatterDataSets(\n dataPointSets: DataPointSetByStringYAxis[]\n): any[] {\n const dataPointSetNames = [\n ...new Set(dataPointSets.map((dps) => dps.dataPointSetName))\n ];\n\n return dataPointSetNames.map((dpsName) => {\n const dataPointSet = dataPointSets.find(\n (dps) => dps.dataPointSetName === dpsName\n );\n\n if (!dataPointSet) {\n throw Error(`Could not find scattter dataPointSet with name ${dpsName}`);\n }\n\n const dataPointSetValues = dataPointSets\n .filter((dps) => dps.dataPointSetName === dpsName)\n .map((dps) => dps.value);\n\n const scatterDataSet: any = {\n label: dpsName,\n fill: false,\n data: dataPointSetValues,\n type: 'scatter',\n pointRadius: 6,\n pointHoverRadius: 8,\n order: 1,\n yAxisID: dataPointSet.yAxisName\n };\n\n return scatterDataSet;\n });\n}\n\nfunction appendColours(\n barDataPointSets: DataPointSetByString[],\n barChartDataSets: any[],\n scatterDataPointSets: DataPointSetByStringYAxis[],\n scatterChartDataSets: any[]\n): any[] {\n const allDataSetNames = barDataPointSets\n .map((s) => s.dataPointSetName)\n .concat(scatterDataPointSets.map((s) => s.dataPointSetName));\n\n const allDataSetNamesDistinct = [...new Set(allDataSetNames)];\n\n const combinedDataSets = barChartDataSets.concat(scatterChartDataSets);\n\n return combinedDataSets.map((dataSet) => {\n const colourIndex = allDataSetNamesDistinct.findIndex(\n (name) => name === dataSet.label\n );\n\n return {\n ...dataSet,\n backgroundColor: chartColours[colourIndex]\n };\n });\n}\n","import { FC } from 'react';\nimport {\n AxisChart,\n ChartBase,\n AxisChartByDate,\n AxisChartByNumberPrediction,\n AxisChartByString,\n ChartByStringBarScatter,\n ChartDataType,\n ChartDisplayType\n} from '../chart.models';\nimport ChartTypeButton from '../chartButtons/chartTypeButton';\nimport { ChartStrategyDate } from './chart-strategy-date';\nimport { ChartStrategyString } from './chart-strategy-string';\nimport { RangeRouteWeek } from '../chartButtons/constants/RangeRoutes';\nimport ChartDateRangeButton from '../chartButtons/chartDateRangeButton';\nimport { ChartStrategyNumberPrediction } from './chart-strategy-number-prediction';\nimport { ChartStrategyStringBarScatter } from './chart-strategy-string-bar-scatter';\n\nconst defaultDateRange = RangeRouteWeek;\n\nexport const ChartBridge: FC<{\n chart: ChartBase;\n}> = ({ chart }: { chart: ChartBase }) => {\n const chartStrategy = () => {\n switch (chart.type) {\n case ChartDataType.DATE:\n return ;\n case ChartDataType.STRING:\n return ;\n case ChartDataType.STRING_BAR_SCATTER:\n return (\n \n );\n case ChartDataType.NUMBER_PREDICTION:\n return (\n \n );\n default:\n throw Error(\n `Unexpected ChartDataType when trying to bridge to strategy: ${chart.type}`\n );\n }\n };\n\n const basicChart = chart as AxisChart;\n const shouldShowChartTypeDropdown = basicChart.shouldShowChartTypeDropdown;\n\n const shouldShowDateRangeDropdown =\n chart.type === ChartDataType.DATE &&\n (chart as AxisChartByDate).shouldShowDateRangeDropdown;\n\n return (\n <>\n {shouldShowChartTypeDropdown || shouldShowDateRangeDropdown ? (\n <>\n

    \n {shouldShowChartTypeDropdown ? (\n \n ) : null}\n {shouldShowDateRangeDropdown ? (\n \n ) : null}\n
    \n \n ) : null}\n {chartStrategy()}\n \n );\n};\n\nexport default ChartBridge;\n","import Loading from 'common/components/loading/loading';\nimport Tile from 'features/tiles/tile';\nimport { FC, useMemo } from 'react';\nimport {\n useGetConversionCountQuery,\n useGetCountRevenueQuery,\n useGetTotalAdCostsQuery,\n useGetTotalRevenueQuery,\n useGetVisitorCountQuery\n} from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport moment from 'moment';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { toChartByDate } from './dashboardSummaryChartDataFormatter';\nimport ChartBridge from 'features/charts/strategies/chart-bridge';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\n\nconst DashboardChart: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const {\n data: visitorData,\n isLoading: visitorIsLoading,\n isFetching: visitorIsFetching\n } = useGetVisitorCountQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const {\n data: webConversionData,\n isLoading: webConversionIsLoading,\n isFetching: webConversionIsFetching\n } = useGetConversionCountQuery({\n siteId,\n conversionType: 'Web',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const {\n data: inboundCallsConversionData,\n isLoading: inboundCallsConversionIsLoading,\n isFetching: inboundCallsConversionIsFetching\n } = useGetConversionCountQuery({\n siteId,\n conversionType: 'InboundCall',\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const {\n data: adCostData,\n isLoading: adCostIsLoading,\n isFetching: adCostIsFetching\n } = useGetTotalAdCostsQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const { data: revenueData, isFetching: revenueIsFetching } =\n useGetTotalRevenueQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n\n const { data: salesData, isFetching: salesIsFetching } =\n useGetCountRevenueQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY'),\n currencyCode: selectedCurrencyCode\n });\n const isChartDataLoaded =\n visitorData !== undefined &&\n webConversionData !== undefined &&\n inboundCallsConversionData !== undefined &&\n adCostData !== undefined &&\n revenueData !== undefined &&\n salesData !== undefined &&\n !visitorIsLoading &&\n !webConversionIsLoading &&\n !inboundCallsConversionIsLoading &&\n !adCostIsLoading &&\n !visitorIsFetching &&\n !webConversionIsFetching &&\n !inboundCallsConversionIsFetching &&\n !adCostIsFetching &&\n !revenueIsFetching &&\n !salesIsFetching;\n\n const summaryChartData = useMemo(() => {\n if (isChartDataLoaded) {\n return toChartByDate(\n visitorData,\n webConversionData,\n inboundCallsConversionData,\n adCostData,\n revenueData,\n salesData\n );\n }\n }, [\n visitorData,\n webConversionData,\n inboundCallsConversionData,\n isChartDataLoaded,\n adCostData,\n revenueData,\n salesData\n ]);\n return (\n <>\n \n
    \n {isChartDataLoaded && summaryChartData ? (\n \n ) : (\n \n )}\n
    \n
    \n \n );\n};\n\nexport default DashboardChart;\n","import { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport moment from 'moment';\nimport {\n AverageValueResponse,\n useGetAverageVisitorLifetimeValueQuery\n} from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { getSymbolFromCurrency } from 'features/currency/currencySymbolMapHelper';\nimport Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\n\nconst useAverageVisitorLifetimeValue = (\n startDate: string,\n endDate: string,\n currencyCode: string\n) => {\n return useGetAverageVisitorLifetimeValueQuery({\n siteId: useSelector((state: RootState) => state.selectedSite.siteId),\n startDate,\n endDate,\n currencyCode\n });\n};\n\nconst AverageVisitorLifetimeValueTile: FC = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const {\n data: averageVisitorLifetimeValueData,\n isLoading: averageVisitorLifetimeValueIsLoading,\n isFetching: averageVisitorLifetimeValueIsFetching\n } = useAverageVisitorLifetimeValue(\n moment(dateRange.startDate).format('YYYY-MM-DD'),\n moment(dateRange.endDate).format('YYYY-MM-DD'),\n selectedCurrencyCode\n );\n const today = moment();\n const {\n data: averageVisitorLifetimeValueYearlyData,\n isLoading: averageVisitorLifetimeValueYearlyIsLoading,\n isFetching: averageVisitorLifetimeValueYearlyIsFetching\n } = useAverageVisitorLifetimeValue(\n today.clone().subtract(1, 'year').startOf('day').format('YYYY-MM-DD'),\n today.format('YYYY-MM-DD'),\n selectedCurrencyCode\n );\n const calculatePercentageDifference = (\n currentValue: number,\n comparisonValue: number\n ): number => {\n if (comparisonValue === 0) {\n return 0;\n }\n return ((currentValue - comparisonValue) / comparisonValue) * 100;\n };\n\n const getDataForTile = (\n tileTitle: string,\n data: AverageValueResponse,\n metricData: AverageValueResponse,\n locales: string,\n formatOptions: Intl.NumberFormatOptions,\n currencySymbol: string,\n selectedCurrencyCode: string\n ): TileData => {\n const percentageDifference = calculatePercentageDifference(\n data.averageValue,\n metricData.averageValue\n );\n\n const averageValueDifference = data.averageValue - metricData.averageValue;\n\n return {\n label: tileTitle,\n count: data.averageValue || 0,\n metric: `${\n averageValueDifference > 0\n ? currencySymbol +\n averageValueDifference.toLocaleString(locales, formatOptions) +\n ' above'\n : averageValueDifference\n .toLocaleString(locales, formatOptions)\n .replace('-', currencySymbol) + ' below'\n } annual average (${currencySymbol}${metricData.averageValue.toLocaleString(\n locales,\n formatOptions\n )})`,\n format: Intl.NumberFormat(locales, formatOptions),\n currencyCode: selectedCurrencyCode,\n percentageDiff: percentageDifference\n };\n };\n const shouldRenderTile =\n !averageVisitorLifetimeValueIsLoading &&\n !averageVisitorLifetimeValueYearlyIsLoading &&\n !averageVisitorLifetimeValueIsFetching &&\n !averageVisitorLifetimeValueYearlyIsFetching &&\n averageVisitorLifetimeValueData &&\n averageVisitorLifetimeValueYearlyData;\n return (\n \n {shouldRenderTile ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default AverageVisitorLifetimeValueTile;\n","import Loading from 'common/components/loading/loading';\nimport { NumberTile, TileData } from 'features/tiles/numberTile';\nimport Tile from 'features/tiles/tile';\nimport { FC } from 'react';\n\nconst FakeTile: FC<{ tileData: TileData }> = ({ tileData }) => {\n const shouldRenderTile = true;\n\n return (\n \n {shouldRenderTile ? : }\n \n );\n};\n\nexport default FakeTile;\n","import { FC } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport moment from 'moment';\nimport HelpTileContainer from 'features/dashboard/helpTilesContainer';\nimport { RootState } from 'app/store';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { CountResponse, useGetVisitorCountQuery } from 'app/apis/queryApi';\nimport { NavLink } from 'react-router-dom';\nimport { closeHelpTile } from 'features/dashboard/helpTileSlice';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport ROIMetricTile from 'features/dashboard/roiMetricTile';\nimport RevenueMetricTile from 'features/dashboard/revenueMetricTile';\nimport CostMetricTile from 'features/dashboard/costMetricTile';\nimport SalesMetricTile from 'features/dashboard/salesMetricTile';\nimport FormAndPhoneMetricTile from 'features/dashboard/formAndPhoneMetricTile';\nimport PhoneCallMetricTile from 'features/dashboard/phoneCallMetricTile';\nimport FormMetricTile from 'features/dashboard/formMetricTile';\nimport VisitorMetricTile from 'features/dashboard/visitorMetricTile';\nimport DashboardChart from 'features/dashboard/dashboardChart';\nimport AverageVisitorLifetimeValueTile from 'features/dashboard/averageVisitorLifetimeValueTile';\nimport { ToggleType } from 'features/internal/internal.models';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport FakeTile from 'features/dashboard/fakeTile';\n\nconst Dashboard: FC> = () => {\n const dateRange = useSelector(getDateRangeAsObjects);\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const dashboardPOCToggles = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayPOCDashboardTiles)\n );\n\n const showDashboardPOCToggles = dashboardPOCToggles?.enabled ?? false;\n\n const { helpTileHasClosed } = useSelector(\n (state: RootState) => state.helpTile\n );\n\n const dispatch = useDispatch();\n\n const {\n data: visitorData,\n isLoading: visitorIsLoading,\n isSuccess: visitorQueryIsFinished\n } = useGetVisitorCountQuery({\n siteId,\n startDate: moment(dateRange.startDate).format('DD/MM/YYYY'),\n endDate: moment(dateRange.endDate).format('DD/MM/YYYY')\n });\n\n const shouldDisplayHelp = (): boolean => {\n function doesDataHaveAnyValueGreaterThanZero(\n isDataLoading: boolean,\n data: CountResponse | undefined\n ): boolean {\n return (\n data !== undefined &&\n !isDataLoading &&\n Object.values(data) !== undefined &&\n Object.values(data).some((value) => value > 0)\n );\n }\n\n const isHelpNeeded =\n visitorQueryIsFinished &&\n !doesDataHaveAnyValueGreaterThanZero(\n visitorIsLoading ?? true,\n visitorData\n );\n return isHelpNeeded;\n };\n\n return (\n <>\n {!helpTileHasClosed && shouldDisplayHelp() ? (\n dispatch(closeHelpTile())} />\n ) : null}\n <>\n \n \n\n
    \n \n
    \n\n \n \n \n\n
    \n \n \n \n
    \n
    \n \n
    \n \n \n \n
    \n \n
    \n\n \n \n \n \n \n \n
    \n \n
    \n {showDashboardPOCToggles ? (\n <>\n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n ) : (\n <>\n )}\n
    \n \n \n );\n};\n\nexport default Dashboard;\n","import { TypedUseSelectorHook, useSelector } from 'react-redux';\nimport type { RootState } from 'app/store';\n\nexport const useTypedSelector: TypedUseSelectorHook = useSelector;\n","import { FC, Fragment } from 'react';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { SideBarRoutes } from 'features/sidebar/types/SideBarRoutes';\nimport { useTypedSelector } from 'common/hooks/store';\nimport { ChildRoute } from 'common/types/RouteChildren';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { RootState } from 'app/store';\nimport {\n closeSideBarAccordion,\n onToggleAccordion\n} from 'features/sidebar/sidebarTogglingSlice';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport { ToggleType } from 'features/internal/internal.models';\n\nconst menuItemStyle = 'h-14 cursor-pointer flex items-center px-8 mx-2';\nconst memuItemStyleMinimal =\n 'h-14 cursor-pointer flex items-center justify-center px-8 mx-5 md:px-2.5 md:m-2.5';\n\nconst SidebarMenuItemLegacy: FC<{\n data: SideBarRoutes;\n index: number;\n isSidebarOpen: boolean;\n}> = ({\n data,\n index,\n isSidebarOpen\n}: {\n data: SideBarRoutes;\n index: number;\n isSidebarOpen: boolean;\n}) => {\n const dispatch = useDispatch();\n\n const { indexOfOpenAccordion } = useSelector(\n (state: RootState) => state.sidebar\n );\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const { isPocModeActive } = useTypedSelector(\n (state: RootState) => state.pocToggle\n );\n const location = useLocation();\n const currentPathName = location.pathname.substring(\n location.pathname.indexOf('/') + 1\n );\n\n const isRouteActive = (\n currentPathName: string,\n sidebarItem: SideBarRoutes\n ): boolean => {\n const isRootPathActive =\n currentPathName === '' && sidebarItem.path === 'dashboard';\n return (\n isRootPathActive ||\n sidebarItem.path === currentPathName ||\n sidebarItem.children.some(\n (child: ChildRoute) => child.path === currentPathName\n ) ||\n currentPathName.startsWith(sidebarItem.path as string)\n );\n };\n\n const getIconColour = (\n currentPathName: string,\n sidebarItem: SideBarRoutes\n ): string =>\n isRouteActive(currentPathName, sidebarItem) ? 'text-tertiary-600' : '';\n\n const getButtonColour = (\n currentPathName: string,\n sidebarItem: SideBarRoutes\n ): string =>\n isRouteActive(currentPathName, sidebarItem) ? 'bg-navy-dark' : '';\n\n const getFlatIcon = (label: string): string => {\n switch (label) {\n case 'Dashboard':\n return 'ra-icons-generic-menu';\n case 'Advanced Reports':\n return 'ra-icons-marketing-arrow-chart-1';\n case 'Reports':\n return 'ra-icons-generic-page-1';\n case 'Conversions':\n return 'ra-icons-marketing-analytics';\n case 'Revenue':\n return 'ra-icons-marketing-money-bag';\n case 'Opportunities':\n return 'ra-icons-marketing-sales-funnel-1';\n case 'Paths':\n return 'ra-icons-marketing-breadcrumb-2';\n case 'Marketing Mix Modelling':\n return 'ra-icons-marketing-ai';\n default:\n return 'ra-icons-generic-question-sign';\n }\n };\n\n const shouldShowPocLinks = (\n isLinkPocType: boolean | undefined,\n isPocModeActive: boolean\n ): boolean => {\n return (\n isLinkPocType === undefined ||\n (isLinkPocType !== undefined && isLinkPocType && isPocModeActive)\n );\n };\n\n const shouldShowWhiteListedSiteLinks = (\n whiteListedSites: string[] | undefined,\n siteId: string\n ): boolean => {\n return (\n whiteListedSites === undefined ||\n (whiteListedSites !== undefined &&\n whiteListedSites.length > 0 &&\n whiteListedSites.includes(siteId))\n );\n };\n\n const RenderSingleMenuItem = (menuItem: SideBarRoutes) => (\n dispatch(closeSideBarAccordion())}\n title={menuItem.label}\n to={menuItem.path ?? '*'}\n className=\" text-off-gray mb-2 block\"\n >\n \n \n \n {menuItem.label}\n \n \n \n );\n\n const SingleMenuItem = (menuItem: SideBarRoutes) => {\n return (\n <>\n {shouldShowPocLinks(menuItem?.poc, isPocModeActive) &&\n shouldShowWhiteListedSiteLinks(menuItem?.whiteListedSites, siteId)\n ? RenderSingleMenuItem(menuItem)\n : null}\n \n );\n };\n\n const MultiMenuItem = (menuItem: SideBarRoutes, isPocModeActive: boolean) => {\n const handleClick = () => {\n dispatch(onToggleAccordion(index));\n };\n\n const CreateMultipleLevel = () => {\n return (\n <>\n
    \n {menuItem.children.map(\n (childItem: ChildRoute, childIndex: number) => {\n return (\n \n {shouldShowPocLinks(menuItem.poc, isPocModeActive) &&\n shouldShowPocLinks(childItem.poc, isPocModeActive) &&\n shouldShowWhiteListedSiteLinks(\n menuItem?.whiteListedSites,\n siteId\n ) ? (\n \n \n {isSidebarOpen ? childItem.label : ''}\n
    \n \n ) : null}\n \n );\n }\n )}\n \n \n );\n };\n\n const addChevron = () => {\n return isSidebarOpen ? (\n \n ) : null;\n };\n\n return (\n <>\n {shouldShowPocLinks(menuItem?.poc, isPocModeActive) &&\n shouldShowWhiteListedSiteLinks(menuItem?.whiteListedSites, siteId) ? (\n <>\n \n \n \n \n {isSidebarOpen ? menuItem.label : ''}\n \n \n {addChevron()}\n \n \n \n \n \n ) : null}\n \n );\n };\n\n const MenuItem = (menuItem: SideBarRoutes, isPocModeActive: boolean) => {\n if (menuItem.children.length > 0) {\n return MultiMenuItem(menuItem, isPocModeActive);\n }\n\n return SingleMenuItem(menuItem);\n };\n\n return <>{MenuItem(data, isPocModeActive)};\n};\n\nexport default SidebarMenuItemLegacy;\n","import { SideBarRoutes } from 'features/sidebar/types/SideBarRoutes';\n\nexport const sidebarRoutes: SideBarRoutes[] = [\n {\n label: 'Dashboard',\n path: 'dashboard',\n children: [],\n active: false\n },\n {\n label: 'Advanced Reports',\n path: 'advanced-reports',\n children: [],\n active: false\n },\n {\n label: 'Reports',\n active: false,\n children: [\n {\n label: 'Source',\n path: 'reports/source'\n },\n {\n label: 'Keyword',\n path: 'reports/keywords'\n },\n {\n label: 'Landing Page',\n path: 'reports/landing-page'\n },\n {\n label: 'Referrer',\n path: 'reports/referrer'\n },\n {\n label: 'UTM Campaign',\n path: 'reports/utm-campaign'\n },\n {\n label: 'UTM Medium',\n path: 'reports/utm-medium'\n },\n {\n label: 'UTM Content',\n path: 'reports/utm-content'\n },\n {\n label: 'Browser',\n path: 'reports/browser'\n },\n {\n label: 'OS',\n path: 'reports/os'\n },\n {\n label: 'Device',\n path: 'reports/device'\n }\n ]\n },\n {\n label: 'Conversions',\n active: false,\n children: [\n {\n label: 'Form',\n path: 'conversions/forms'\n },\n {\n label: 'Phone Call',\n path: 'conversions/phone-calls'\n }\n ]\n },\n {\n label: 'Revenue',\n active: false,\n path: 'revenue',\n children: []\n },\n {\n label: 'Opportunities',\n active: false,\n path: 'opportunities',\n children: []\n },\n {\n label: 'Paths',\n active: false,\n path: 'paths',\n children: []\n },\n {\n label: 'Marketing Mix Modelling',\n active: false,\n path: 'marketing-mix-modelling',\n poc: true,\n whiteListedSites: ['641d914945eb2', 'demo'],\n children: [\n {\n label: 'Modelled ROI',\n path: 'marketing-mix-modelling/modelled-roi'\n },\n {\n label: 'Budget Optimiser',\n path: 'marketing-mix-modelling/budget-optimiser'\n }\n ]\n }\n];\n","import { useEffect } from 'react';\nvar useEffectOnce = function (effect) {\n useEffect(effect, []);\n};\nexport default useEffectOnce;\n","import { useRef } from 'react';\nimport useEffectOnce from './useEffectOnce';\nvar useUnmount = function (fn) {\n var fnRef = useRef(fn);\n // update the ref each render so if it change the newest callback will be invoked\n fnRef.current = fn;\n useEffectOnce(function () { return function () { return fnRef.current(); }; });\n};\nexport default useUnmount;\n","import { useCallback, useRef, useState } from 'react';\nimport useUnmount from './useUnmount';\nvar useRafState = function (initialState) {\n var frame = useRef(0);\n var _a = useState(initialState), state = _a[0], setState = _a[1];\n var setRafState = useCallback(function (value) {\n cancelAnimationFrame(frame.current);\n frame.current = requestAnimationFrame(function () {\n setState(value);\n });\n }, []);\n useUnmount(function () {\n cancelAnimationFrame(frame.current);\n });\n return [state, setRafState];\n};\nexport default useRafState;\n","import { useEffect } from 'react';\nimport useRafState from './useRafState';\nimport { isBrowser, off, on } from './misc/util';\nvar useWindowSize = function (initialWidth, initialHeight) {\n if (initialWidth === void 0) { initialWidth = Infinity; }\n if (initialHeight === void 0) { initialHeight = Infinity; }\n var _a = useRafState({\n width: isBrowser ? window.innerWidth : initialWidth,\n height: isBrowser ? window.innerHeight : initialHeight,\n }), state = _a[0], setState = _a[1];\n useEffect(function () {\n if (isBrowser) {\n var handler_1 = function () {\n setState({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n };\n on(window, 'resize', handler_1);\n return function () {\n off(window, 'resize', handler_1);\n };\n }\n }, []);\n return state;\n};\nexport default useWindowSize;\n","import { toggleSidebar } from 'features/sidebar/sidebarTogglingSlice';\nimport { FC } from 'react';\nimport { useDispatch } from 'react-redux';\n\nconst ResponsiveBurgerButton: FC = () => {\n const dispatch = useDispatch();\n\n return (\n dispatch(toggleSidebar())}\n className=\"visible sm:visible\"\n >\n \n \n \n \n );\n};\n\nexport default ResponsiveBurgerButton;\n","import { RootState } from 'app/store';\nimport { useTypedSelector } from 'common/hooks/store';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport { ToggleType } from 'features/internal/internal.models';\nimport { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport { selectIsSidebarOpen } from './sidebarSlice';\n\nconst Icon: FC = () => {\n const isNewSideBarEnabledDebugToggle = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayNewSideBar)\n );\n\n const isSidebarOpenLegacy = useTypedSelector(\n (state: RootState) => state.sidebar.isSidebarOpen\n );\n\n const isSidebarOpen = useSelector(selectIsSidebarOpen);\n\n const [logoUrl, scale] =\n ((isNewSideBarEnabledDebugToggle?.enabled ?? false) && isSidebarOpen) ||\n ((!isNewSideBarEnabledDebugToggle?.enabled ?? false) && isSidebarOpenLegacy)\n ? ['ruler_white.svg', 'scale-50']\n : ['r_white.svg', 'scale-75'];\n\n return (\n <>\n \n \n \n\n \n \n \n \n );\n};\n\nexport default Icon;\n","import { useTypedSelector } from 'common/hooks/store';\nimport SidebarMenuItemLegacy from 'features/sidebar/sidebarMenuItemLegacy';\nimport { sidebarRoutes } from 'features/sidebar/sidebarRoutes/sidebarRoutes';\nimport { SideBarRoutes } from 'features/sidebar/types/SideBarRoutes';\nimport { useWindowSize } from 'react-use';\nimport ResponsiveBurgerButton from 'features/sidebar/responsive-burger-button/responsiveBurgerButton';\nimport Icon from 'features/sidebar/sidebarIcon';\nimport { useDispatch } from 'react-redux';\nimport { toggleSidebar } from './sidebarTogglingSlice';\nimport { RootState } from 'app/store';\n\nconst screenWidthTriggerAmount = 768;\n\nconst SidebarLegacy = () => {\n const dispatch = useDispatch();\n\n const isSidebarOpen = useTypedSelector(\n (state: RootState) => state.sidebar.isSidebarOpen\n );\n const { width } = useWindowSize();\n\n return (\n <>\n
    \n dispatch(toggleSidebar())}\n className={`hidden md:flex fixed top-19 z-20 items-center justify-center w-6 h-6 rounded-full shadow-sm border border-neutral-500 transition-all bg-white text-black hover:bg-secondary-400 hover:border-secondary-400 hover:text-white group-hover:opacity-100 ${\n isSidebarOpen ? 'left-69 opacity-0' : 'left-15 opacity-1'\n }`}\n >\n \n \n \n {width < screenWidthTriggerAmount ||\n width > screenWidthTriggerAmount ? (\n <>\n \n \n
    \n \n
    \n {width < screenWidthTriggerAmount ? (\n
    \n \n
    \n ) : null}\n
    \n \n
    \n {width > screenWidthTriggerAmount ||\n width < screenWidthTriggerAmount\n ? sidebarRoutes.map(\n (item: SideBarRoutes, index: number) => {\n return (\n \n );\n }\n )\n : null}\n
    \n \n \n \n ) : null}\n \n \n \n );\n};\n\nexport default SidebarLegacy;\n","import Tile from 'features/tiles/tile';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC } from 'react';\n\nconst NotFound: FC = () => {\n return (\n <>\n \n \n

    Page Not Found.

    \n
    \n
    \n \n );\n};\n\nexport default NotFound;\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\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\n return (hint === \"string\" ? String : Number)(input);\n}","import { TableState, Updater } from './types'\n\nexport type PartialKeys = Omit & Partial>\nexport type RequiredKeys = Omit &\n Required>\nexport type Overwrite = Omit<\n T,\n keyof U\n> &\n U\n\nexport type UnionToIntersection = (\n T extends any ? (x: T) => any : never\n) extends (x: infer R) => any\n ? R\n : never\n\nexport type IsAny = 1 extends 0 & T ? Y : N\nexport type IsKnown = unknown extends T ? N : Y\n\ntype ComputeRange<\n N extends number,\n Result extends Array = []\n> = Result['length'] extends N\n ? Result\n : ComputeRange\ntype Index40 = ComputeRange<40>[number]\n\n// Is this type a tuple?\ntype IsTuple = T extends readonly any[] & { length: infer Length }\n ? Length extends Index40\n ? T\n : never\n : never\n\n// If this type is a tuple, what indices are allowed?\ntype AllowedIndexes<\n Tuple extends ReadonlyArray,\n Keys extends number = never\n> = Tuple extends readonly []\n ? Keys\n : Tuple extends readonly [infer _, ...infer Tail]\n ? AllowedIndexes\n : Keys\n\nexport type DeepKeys = unknown extends T\n ? keyof T\n : object extends T\n ? string\n : T extends readonly any[] & IsTuple\n ? AllowedIndexes | DeepKeysPrefix>\n : T extends any[]\n ? never & 'Dynamic length array indexing is not supported'\n : T extends Date\n ? never\n : T extends object\n ? (keyof T & string) | DeepKeysPrefix\n : never\n\ntype DeepKeysPrefix = TPrefix extends keyof T & (number | string)\n ? `${TPrefix}.${DeepKeys & string}`\n : never\n\nexport type DeepValue = T extends Record\n ? TProp extends `${infer TBranch}.${infer TDeepProp}`\n ? DeepValue\n : T[TProp & string]\n : never\n\nexport type NoInfer = [T][T extends any ? 0 : never]\n\nexport type Getter = () => NoInfer\n\n///\n\nexport function functionalUpdate(updater: Updater, input: T): T {\n return typeof updater === 'function'\n ? (updater as (input: T) => T)(input)\n : updater\n}\n\nexport function noop() {\n //\n}\n\nexport function makeStateUpdater(\n key: K,\n instance: unknown\n) {\n return (updater: Updater) => {\n ;(instance as any).setState((old: TTableState) => {\n return {\n ...old,\n [key]: functionalUpdate(updater, (old as any)[key]),\n }\n })\n }\n}\n\ntype AnyFunction = (...args: any) => any\n\nexport function isFunction(d: any): d is T {\n return d instanceof Function\n}\n\nexport function flattenBy(\n arr: TNode[],\n getChildren: (item: TNode) => TNode[]\n) {\n const flat: TNode[] = []\n\n const recurse = (subArr: TNode[]) => {\n subArr.forEach(item => {\n flat.push(item)\n const children = getChildren(item)\n if (children?.length) {\n recurse(children)\n }\n })\n }\n\n recurse(arr)\n\n return flat\n}\n\nexport function memo(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n }\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug) {\n if (opts?.debug()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts?.key\n )\n }\n }\n\n return result!\n }\n}\n","import { RowData, Column, Header, HeaderGroup, Table } from '../types'\nimport { memo } from '../utils'\nimport { TableFeature } from './table'\n\nexport interface CoreHeaderGroup {\n id: string\n depth: number\n headers: Header[]\n}\n\nexport interface HeaderContext {\n table: Table\n header: Header\n column: Column\n}\n\nexport interface CoreHeader {\n id: string\n index: number\n depth: number\n column: Column\n headerGroup: HeaderGroup\n subHeaders: Header[]\n colSpan: number\n rowSpan: number\n getLeafHeaders: () => Header[]\n isPlaceholder: boolean\n placeholderId?: string\n getContext: () => HeaderContext\n}\n\nexport interface HeadersInstance {\n getHeaderGroups: () => HeaderGroup[]\n getLeftHeaderGroups: () => HeaderGroup[]\n getCenterHeaderGroups: () => HeaderGroup[]\n getRightHeaderGroups: () => HeaderGroup[]\n\n getFooterGroups: () => HeaderGroup[]\n getLeftFooterGroups: () => HeaderGroup[]\n getCenterFooterGroups: () => HeaderGroup[]\n getRightFooterGroups: () => HeaderGroup[]\n\n getFlatHeaders: () => Header[]\n getLeftFlatHeaders: () => Header[]\n getCenterFlatHeaders: () => Header[]\n getRightFlatHeaders: () => Header[]\n\n getLeafHeaders: () => Header[]\n getLeftLeafHeaders: () => Header[]\n getCenterLeafHeaders: () => Header[]\n getRightLeafHeaders: () => Header[]\n}\n\n//\n\nfunction createHeader(\n table: Table,\n column: Column,\n options: {\n id?: string\n isPlaceholder?: boolean\n placeholderId?: string\n index: number\n depth: number\n }\n): Header {\n const id = options.id ?? column.id\n\n let header: CoreHeader = {\n id,\n column,\n index: options.index,\n isPlaceholder: !!options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null!,\n getLeafHeaders: (): Header[] => {\n const leafHeaders: Header[] = []\n\n const recurseHeader = (h: CoreHeader) => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader)\n }\n leafHeaders.push(h as Header)\n }\n\n recurseHeader(header)\n\n return leafHeaders\n },\n getContext: () => ({\n table,\n header: header as Header,\n column,\n }),\n }\n\n table._features.forEach(feature => {\n Object.assign(header, feature.createHeader?.(header, table))\n })\n\n return header as Header\n}\n\nexport const Headers: TableFeature = {\n createTable: (\n table: Table\n ): HeadersInstance => {\n return {\n // Header Groups\n\n getHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, left, right) => {\n const leftColumns =\n left\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n const rightColumns =\n right\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n const centerColumns = leafColumns.filter(\n column => !left?.includes(column.id) && !right?.includes(column.id)\n )\n\n const headerGroups = buildHeaderGroups(\n allColumns,\n [...leftColumns, ...centerColumns, ...rightColumns],\n table\n )\n\n return headerGroups\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getCenterHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(\n column => !left?.includes(column.id) && !right?.includes(column.id)\n )\n return buildHeaderGroups(allColumns, leafColumns, table, 'center')\n },\n {\n key:\n process.env.NODE_ENV === 'development' && 'getCenterHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n ],\n (allColumns, leafColumns, left) => {\n const orderedLeafColumns =\n left\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n return buildHeaderGroups(\n allColumns,\n orderedLeafColumns,\n table,\n 'left'\n )\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, right) => {\n const orderedLeafColumns =\n right\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n return buildHeaderGroups(\n allColumns,\n orderedLeafColumns,\n table,\n 'right'\n )\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n // Footer Groups\n\n getFooterGroups: memo(\n () => [table.getHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftFooterGroups: memo(\n () => [table.getLeftHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getCenterFooterGroups: memo(\n () => [table.getCenterHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key:\n process.env.NODE_ENV === 'development' && 'getCenterFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightFooterGroups: memo(\n () => [table.getRightHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n // Flat Headers\n\n getFlatHeaders: memo(\n () => [table.getHeaderGroups()],\n headerGroups => {\n return headerGroups\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftFlatHeaders: memo(\n () => [table.getLeftHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getCenterFlatHeaders: memo(\n () => [table.getCenterHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getCenterFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightFlatHeaders: memo(\n () => [table.getRightHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n // Leaf Headers\n\n getCenterLeafHeaders: memo(\n () => [table.getCenterFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getCenterLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftLeafHeaders: memo(\n () => [table.getLeftFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightLeafHeaders: memo(\n () => [table.getRightFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeafHeaders: memo(\n () => [\n table.getLeftHeaderGroups(),\n table.getCenterHeaderGroups(),\n table.getRightHeaderGroups(),\n ],\n (left, center, right) => {\n return [\n ...(left[0]?.headers ?? []),\n ...(center[0]?.headers ?? []),\n ...(right[0]?.headers ?? []),\n ]\n .map(header => {\n return header.getLeafHeaders()\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n }\n },\n}\n\nexport function buildHeaderGroups(\n allColumns: Column[],\n columnsToGroup: Column[],\n table: Table,\n headerFamily?: 'center' | 'left' | 'right'\n) {\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0\n\n const findMaxDepth = (columns: Column[], depth = 1) => {\n maxDepth = Math.max(maxDepth, depth)\n\n columns\n .filter(column => column.getIsVisible())\n .forEach(column => {\n if (column.columns?.length) {\n findMaxDepth(column.columns, depth + 1)\n }\n }, 0)\n }\n\n findMaxDepth(allColumns)\n\n let headerGroups: HeaderGroup[] = []\n\n const createHeaderGroup = (\n headersToGroup: Header[],\n depth: number\n ) => {\n // The header group we are creating\n const headerGroup: HeaderGroup = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: [],\n }\n\n // The parent columns we're going to scan next\n const pendingParentHeaders: Header[] = []\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0]\n\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth\n\n let column: Column\n let isPlaceholder = false\n\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent\n } else {\n // The parent header is repeated\n column = headerToGroup.column\n isPlaceholder = true\n }\n\n if (\n latestPendingParentHeader &&\n latestPendingParentHeader?.column === column\n ) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup)\n } else {\n // This is a new header. Let's create it\n const header = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup?.id]\n .filter(Boolean)\n .join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder\n ? `${pendingParentHeaders.filter(d => d.column === column).length}`\n : undefined,\n depth,\n index: pendingParentHeaders.length,\n })\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup)\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header)\n }\n\n headerGroup.headers.push(headerToGroup)\n headerToGroup.headerGroup = headerGroup\n })\n\n headerGroups.push(headerGroup)\n\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1)\n }\n }\n\n const bottomHeaders = columnsToGroup.map((column, index) =>\n createHeader(table, column, {\n depth: maxDepth,\n index,\n })\n )\n\n createHeaderGroup(bottomHeaders, maxDepth - 1)\n\n headerGroups.reverse()\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = (\n headers: Header[]\n ): { colSpan: number; rowSpan: number }[] => {\n const filteredHeaders = headers.filter(header =>\n header.column.getIsVisible()\n )\n\n return filteredHeaders.map(header => {\n let colSpan = 0\n let rowSpan = 0\n let childRowSpans = [0]\n\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = []\n\n recurseHeadersForSpans(header.subHeaders).forEach(\n ({ colSpan: childColSpan, rowSpan: childRowSpan }) => {\n colSpan += childColSpan\n childRowSpans.push(childRowSpan)\n }\n )\n } else {\n colSpan = 1\n }\n\n const minChildRowSpan = Math.min(...childRowSpans)\n rowSpan = rowSpan + minChildRowSpan\n\n header.colSpan = colSpan\n header.rowSpan = rowSpan\n\n return { colSpan, rowSpan }\n })\n }\n\n recurseHeadersForSpans(headerGroups[0]?.headers ?? [])\n\n return headerGroups\n}\n","import { TableFeature } from '../core/table'\nimport { RowData, Column, Header, OnChangeFn, Table, Updater } from '../types'\nimport { makeStateUpdater } from '../utils'\nimport { ColumnPinningPosition } from './Pinning'\n\n//\n\nexport interface ColumnSizingTableState {\n columnSizing: ColumnSizingState\n columnSizingInfo: ColumnSizingInfoState\n}\n\nexport type ColumnSizingState = Record\n\nexport interface ColumnSizingInfoState {\n startOffset: null | number\n startSize: null | number\n deltaOffset: null | number\n deltaPercentage: null | number\n isResizingColumn: false | string\n columnSizingStart: [string, number][]\n}\n\nexport type ColumnResizeMode = 'onChange' | 'onEnd'\n\nexport interface ColumnSizingOptions {\n enableColumnResizing?: boolean\n columnResizeMode?: ColumnResizeMode\n onColumnSizingChange?: OnChangeFn\n onColumnSizingInfoChange?: OnChangeFn\n}\n\nexport interface ColumnSizingDefaultOptions {\n columnResizeMode: ColumnResizeMode\n onColumnSizingChange: OnChangeFn\n onColumnSizingInfoChange: OnChangeFn\n}\n\nexport interface ColumnSizingInstance {\n setColumnSizing: (updater: Updater) => void\n setColumnSizingInfo: (updater: Updater) => void\n resetColumnSizing: (defaultState?: boolean) => void\n resetHeaderSizeInfo: (defaultState?: boolean) => void\n getTotalSize: () => number\n getLeftTotalSize: () => number\n getCenterTotalSize: () => number\n getRightTotalSize: () => number\n}\n\nexport interface ColumnSizingColumnDef {\n enableResizing?: boolean\n size?: number\n minSize?: number\n maxSize?: number\n}\n\nexport interface ColumnSizingColumn {\n getSize: () => number\n getStart: (position?: ColumnPinningPosition) => number\n getCanResize: () => boolean\n getIsResizing: () => boolean\n resetSize: () => void\n}\n\nexport interface ColumnSizingHeader {\n getSize: () => number\n getStart: (position?: ColumnPinningPosition) => number\n getResizeHandler: () => (event: unknown) => void\n}\n\n//\n\nexport const defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER,\n}\n\nconst getDefaultColumnSizingInfoState = (): ColumnSizingInfoState => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: [],\n})\n\nexport const ColumnSizing: TableFeature = {\n getDefaultColumnDef: (): ColumnSizingColumnDef => {\n return defaultColumnSizing\n },\n getInitialState: (state): ColumnSizingTableState => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state,\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): ColumnSizingDefaultOptions => {\n return {\n columnResizeMode: 'onEnd',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table),\n }\n },\n\n createColumn: (\n column: Column,\n table: Table\n ): ColumnSizingColumn => {\n return {\n getSize: () => {\n const columnSize = table.getState().columnSizing[column.id]\n\n return Math.min(\n Math.max(\n column.columnDef.minSize ?? defaultColumnSizing.minSize,\n columnSize ?? column.columnDef.size ?? defaultColumnSizing.size\n ),\n column.columnDef.maxSize ?? defaultColumnSizing.maxSize\n )\n },\n getStart: position => {\n const columns = !position\n ? table.getVisibleLeafColumns()\n : position === 'left'\n ? table.getLeftVisibleLeafColumns()\n : table.getRightVisibleLeafColumns()\n\n const index = columns.findIndex(d => d.id === column.id)\n\n if (index > 0) {\n const prevSiblingColumn = columns[index - 1]!\n\n return (\n prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize()\n )\n }\n\n return 0\n },\n resetSize: () => {\n table.setColumnSizing(({ [column.id]: _, ...rest }) => {\n return rest\n })\n },\n getCanResize: () => {\n return (\n (column.columnDef.enableResizing ?? true) &&\n (table.options.enableColumnResizing ?? true)\n )\n },\n getIsResizing: () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id\n },\n }\n },\n\n createHeader: (\n header: Header,\n table: Table\n ): ColumnSizingHeader => {\n return {\n getSize: () => {\n let sum = 0\n\n const recurse = (header: Header) => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse)\n } else {\n sum += header.column.getSize() ?? 0\n }\n }\n\n recurse(header)\n\n return sum\n },\n getStart: () => {\n if (header.index > 0) {\n const prevSiblingHeader =\n header.headerGroup.headers[header.index - 1]!\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize()\n }\n\n return 0\n },\n getResizeHandler: () => {\n const column = table.getColumn(header.column.id)\n const canResize = column.getCanResize()\n\n return (e: unknown) => {\n if (!canResize) {\n return\n }\n\n ;(e as any).persist?.()\n\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return\n }\n }\n\n const startSize = header.getSize()\n\n const columnSizingStart: [string, number][] = header\n ? header\n .getLeafHeaders()\n .map(d => [d.column.id, d.column.getSize()])\n : [[column.id, column.getSize()]]\n\n const clientX = isTouchStartEvent(e)\n ? Math.round(e.touches[0]!.clientX)\n : (e as MouseEvent).clientX\n\n const updateOffset = (\n eventType: 'move' | 'end',\n clientXPos?: number\n ) => {\n if (typeof clientXPos !== 'number') {\n return\n }\n\n let newColumnSizing: ColumnSizingState = {}\n\n table.setColumnSizingInfo(old => {\n const deltaOffset = clientXPos - (old?.startOffset ?? 0)\n const deltaPercentage = Math.max(\n deltaOffset / (old?.startSize ?? 0),\n -0.999999\n )\n\n old.columnSizingStart.forEach(([columnId, headerSize]) => {\n newColumnSizing[columnId] =\n Math.round(\n Math.max(headerSize + headerSize * deltaPercentage, 0) * 100\n ) / 100\n })\n\n return {\n ...old,\n deltaOffset,\n deltaPercentage,\n }\n })\n\n if (\n table.options.columnResizeMode === 'onChange' ||\n eventType === 'end'\n ) {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing,\n }))\n }\n }\n\n const onMove = (clientXPos?: number) =>\n updateOffset('move', clientXPos)\n\n const onEnd = (clientXPos?: number) => {\n updateOffset('end', clientXPos)\n\n table.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: [],\n }))\n }\n\n const mouseEvents = {\n moveHandler: (e: MouseEvent) => onMove(e.clientX),\n upHandler: (e: MouseEvent) => {\n document.removeEventListener('mousemove', mouseEvents.moveHandler)\n document.removeEventListener('mouseup', mouseEvents.upHandler)\n onEnd(e.clientX)\n },\n }\n\n const touchEvents = {\n moveHandler: (e: TouchEvent) => {\n if (e.cancelable) {\n e.preventDefault()\n e.stopPropagation()\n }\n onMove(e.touches[0]!.clientX)\n return false\n },\n upHandler: (e: TouchEvent) => {\n document.removeEventListener('touchmove', touchEvents.moveHandler)\n document.removeEventListener('touchend', touchEvents.upHandler)\n if (e.cancelable) {\n e.preventDefault()\n e.stopPropagation()\n }\n onEnd(e.touches[0]?.clientX)\n },\n }\n\n const passiveIfSupported = passiveEventSupported()\n ? { passive: false }\n : false\n\n if (isTouchStartEvent(e)) {\n document.addEventListener(\n 'touchmove',\n touchEvents.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n 'touchend',\n touchEvents.upHandler,\n passiveIfSupported\n )\n } else {\n document.addEventListener(\n 'mousemove',\n mouseEvents.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n 'mouseup',\n mouseEvents.upHandler,\n passiveIfSupported\n )\n }\n\n table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id,\n }))\n }\n },\n }\n },\n\n createTable: (\n table: Table\n ): ColumnSizingInstance => {\n return {\n setColumnSizing: updater => table.options.onColumnSizingChange?.(updater),\n setColumnSizingInfo: updater =>\n table.options.onColumnSizingInfoChange?.(updater),\n resetColumnSizing: defaultState => {\n table.setColumnSizing(\n defaultState ? {} : table.initialState.columnSizing ?? {}\n )\n },\n resetHeaderSizeInfo: defaultState => {\n table.setColumnSizingInfo(\n defaultState\n ? getDefaultColumnSizingInfoState()\n : table.initialState.columnSizingInfo ??\n getDefaultColumnSizingInfoState()\n )\n },\n getTotalSize: () =>\n table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n getLeftTotalSize: () =>\n table.getLeftHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n getCenterTotalSize: () =>\n table.getCenterHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n getRightTotalSize: () =>\n table.getRightHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n }\n },\n}\n\nlet passiveSupported: boolean | null = null\nexport function passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported\n\n let supported = false\n try {\n const options = {\n get passive() {\n supported = true\n return false\n },\n }\n\n const noop = () => {}\n\n window.addEventListener('test', noop, options)\n window.removeEventListener('test', noop)\n } catch (err) {\n supported = false\n }\n passiveSupported = supported\n return passiveSupported\n}\n\nfunction isTouchStartEvent(e: unknown): e is TouchEvent {\n return (e as TouchEvent).type === 'touchstart'\n}\n","import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport { OnChangeFn, Table, Row, Updater, RowData } from '../types'\nimport { makeStateUpdater } from '../utils'\n\nexport type ExpandedStateList = Record\nexport type ExpandedState = true | Record\nexport interface ExpandedTableState {\n expanded: ExpandedState\n}\n\nexport interface ExpandedRow {\n toggleExpanded: (expanded?: boolean) => void\n getIsExpanded: () => boolean\n getCanExpand: () => boolean\n getToggleExpandedHandler: () => () => void\n}\n\nexport interface ExpandedOptions {\n manualExpanding?: boolean\n onExpandedChange?: OnChangeFn\n autoResetExpanded?: boolean\n enableExpanding?: boolean\n getExpandedRowModel?: (table: Table) => () => RowModel\n getIsRowExpanded?: (row: Row) => boolean\n getRowCanExpand?: (row: Row) => boolean\n paginateExpandedRows?: boolean\n}\n\nexport interface ExpandedInstance {\n _autoResetExpanded: () => void\n setExpanded: (updater: Updater) => void\n toggleAllRowsExpanded: (expanded?: boolean) => void\n resetExpanded: (defaultState?: boolean) => void\n getCanSomeRowsExpand: () => boolean\n getToggleAllRowsExpandedHandler: () => (event: unknown) => void\n getIsSomeRowsExpanded: () => boolean\n getIsAllRowsExpanded: () => boolean\n getExpandedDepth: () => number\n getExpandedRowModel: () => RowModel\n _getExpandedRowModel?: () => RowModel\n getPreExpandedRowModel: () => RowModel\n}\n\n//\n\nexport const Expanding: TableFeature = {\n getInitialState: (state): ExpandedTableState => {\n return {\n expanded: {},\n ...state,\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): ExpandedOptions => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true,\n }\n },\n\n createTable: (\n table: Table\n ): ExpandedInstance => {\n let registered = false\n let queued = false\n\n return {\n _autoResetExpanded: () => {\n if (!registered) {\n table._queue(() => {\n registered = true\n })\n return\n }\n\n if (\n table.options.autoResetAll ??\n table.options.autoResetExpanded ??\n !table.options.manualExpanding\n ) {\n if (queued) return\n queued = true\n table._queue(() => {\n table.resetExpanded()\n queued = false\n })\n }\n },\n setExpanded: updater => table.options.onExpandedChange?.(updater),\n toggleAllRowsExpanded: expanded => {\n if (expanded ?? !table.getIsAllRowsExpanded()) {\n table.setExpanded(true)\n } else {\n table.setExpanded({})\n }\n },\n resetExpanded: defaultState => {\n table.setExpanded(\n defaultState ? {} : table.initialState?.expanded ?? {}\n )\n },\n getCanSomeRowsExpand: () => {\n return table.getRowModel().flatRows.some(row => row.getCanExpand())\n },\n getToggleAllRowsExpandedHandler: () => {\n return (e: unknown) => {\n ;(e as any).persist?.()\n table.toggleAllRowsExpanded()\n }\n },\n getIsSomeRowsExpanded: () => {\n const expanded = table.getState().expanded\n return expanded === true || Object.values(expanded).some(Boolean)\n },\n getIsAllRowsExpanded: () => {\n const expanded = table.getState().expanded\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true\n }\n\n if (!Object.keys(expanded).length) {\n return false\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n return false\n }\n\n // They must all be expanded :shrug:\n return true\n },\n getExpandedDepth: () => {\n let maxDepth = 0\n\n const rowIds =\n table.getState().expanded === true\n ? Object.keys(table.getRowModel().rowsById)\n : Object.keys(table.getState().expanded)\n\n rowIds.forEach(id => {\n const splitId = id.split('.')\n maxDepth = Math.max(maxDepth, splitId.length)\n })\n\n return maxDepth\n },\n getPreExpandedRowModel: () => table.getSortedRowModel(),\n getExpandedRowModel: () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table)\n }\n\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel()\n }\n\n return table._getExpandedRowModel()\n },\n }\n },\n\n createRow: (\n row: Row,\n table: Table\n ): ExpandedRow => {\n return {\n toggleExpanded: expanded => {\n table.setExpanded(old => {\n const exists = old === true ? true : !!old?.[row.id]\n\n let oldExpanded: ExpandedStateList = {}\n\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true\n })\n } else {\n oldExpanded = old\n }\n\n expanded = expanded ?? !exists\n\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [row.id]: true,\n }\n }\n\n if (exists && !expanded) {\n const { [row.id]: _, ...rest } = oldExpanded\n return rest\n }\n\n return old\n })\n },\n getIsExpanded: () => {\n const expanded = table.getState().expanded\n\n return !!(\n table.options.getIsRowExpanded?.(row) ??\n (expanded === true || expanded?.[row.id])\n )\n },\n getCanExpand: () => {\n return (\n table.options.getRowCanExpand?.(row) ??\n ((table.options.enableExpanding ?? true) && !!row.subRows?.length)\n )\n },\n getToggleExpandedHandler: () => {\n const canExpand = row.getCanExpand()\n\n return () => {\n if (!canExpand) return\n row.toggleExpanded()\n }\n },\n }\n },\n}\n","import { FilterFn } from './features/Filters'\n\nconst includesString: FilterFn = (\n row,\n columnId: string,\n filterValue: string\n) => {\n const search = filterValue.toLowerCase()\n return Boolean(row.getValue(columnId)?.toLowerCase().includes(search))\n}\n\nincludesString.autoRemove = (val: any) => testFalsey(val)\n\nconst includesStringSensitive: FilterFn = (\n row,\n columnId: string,\n filterValue: string\n) => {\n return Boolean(row.getValue(columnId)?.includes(filterValue))\n}\n\nincludesStringSensitive.autoRemove = (val: any) => testFalsey(val)\n\nconst equalsString: FilterFn = (\n row,\n columnId: string,\n filterValue: string\n) => {\n return (\n row.getValue(columnId)?.toLowerCase() === filterValue.toLowerCase()\n )\n}\n\nequalsString.autoRemove = (val: any) => testFalsey(val)\n\nconst arrIncludes: FilterFn = (\n row,\n columnId: string,\n filterValue: unknown\n) => {\n return row.getValue(columnId)?.includes(filterValue)\n}\n\narrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst arrIncludesAll: FilterFn = (\n row,\n columnId: string,\n filterValue: unknown[]\n) => {\n return !filterValue.some(\n val => !row.getValue(columnId)?.includes(val)\n )\n}\n\narrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst arrIncludesSome: FilterFn = (\n row,\n columnId: string,\n filterValue: unknown[]\n) => {\n return filterValue.some(val =>\n row.getValue(columnId)?.includes(val)\n )\n}\n\narrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst equals: FilterFn = (row, columnId: string, filterValue: unknown) => {\n return row.getValue(columnId) === filterValue\n}\n\nequals.autoRemove = (val: any) => testFalsey(val)\n\nconst weakEquals: FilterFn = (\n row,\n columnId: string,\n filterValue: unknown\n) => {\n return row.getValue(columnId) == filterValue\n}\n\nweakEquals.autoRemove = (val: any) => testFalsey(val)\n\nconst inNumberRange: FilterFn = (\n row,\n columnId: string,\n filterValue: [number, number]\n) => {\n let [min, max] = filterValue\n\n const rowValue = row.getValue(columnId)\n return rowValue >= min && rowValue <= max\n}\n\ninNumberRange.resolveFilterValue = (val: [any, any]) => {\n let [unsafeMin, unsafeMax] = val\n\n let parsedMin =\n typeof unsafeMin !== 'number' ? parseFloat(unsafeMin as string) : unsafeMin\n let parsedMax =\n typeof unsafeMax !== 'number' ? parseFloat(unsafeMax as string) : unsafeMax\n\n let min =\n unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax\n\n if (min > max) {\n const temp = min\n min = max\n max = temp\n }\n\n return [min, max] as const\n}\n\ninNumberRange.autoRemove = (val: any) =>\n testFalsey(val) || (testFalsey(val[0]) && testFalsey(val[1]))\n\n// Export\n\nexport const filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange,\n}\n\nexport type BuiltInFilterFn = keyof typeof filterFns\n\n// Utils\n\nfunction testFalsey(val: any) {\n return val === undefined || val === null || val === ''\n}\n","import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport { BuiltInFilterFn, filterFns } from '../filterFns'\nimport {\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n RowData,\n FilterMeta,\n FilterFns,\n} from '../types'\nimport { functionalUpdate, isFunction, makeStateUpdater } from '../utils'\n\nexport interface FiltersTableState {\n columnFilters: ColumnFiltersState\n globalFilter: any\n}\n\nexport type ColumnFiltersState = ColumnFilter[]\n\nexport interface ColumnFilter {\n id: string\n value: unknown\n}\n\nexport interface ResolvedColumnFilter {\n id: string\n resolvedValue: unknown\n filterFn: FilterFn\n}\n\nexport interface FilterFn {\n (\n row: Row,\n columnId: string,\n filterValue: any,\n addMeta: (meta: FilterMeta) => void\n ): boolean\n\n resolveFilterValue?: TransformFilterValueFn\n autoRemove?: ColumnFilterAutoRemoveTestFn\n}\n\nexport type TransformFilterValueFn = (\n value: any,\n column?: Column\n) => unknown\n\nexport type ColumnFilterAutoRemoveTestFn = (\n value: any,\n column?: Column\n) => boolean\n\nexport type CustomFilterFns = Record<\n string,\n FilterFn\n>\n\nexport type FilterFnOption =\n | 'auto'\n | BuiltInFilterFn\n | keyof FilterFns\n | FilterFn\n\nexport interface FiltersColumnDef {\n filterFn?: FilterFnOption\n enableColumnFilter?: boolean\n enableGlobalFilter?: boolean\n}\n\nexport interface FiltersColumn {\n getAutoFilterFn: () => FilterFn | undefined\n getFilterFn: () => FilterFn | undefined\n setFilterValue: (updater: Updater) => void\n getCanFilter: () => boolean\n getCanGlobalFilter: () => boolean\n getFacetedRowModel: () => RowModel\n _getFacetedRowModel?: () => RowModel\n getIsFiltered: () => boolean\n getFilterValue: () => unknown\n getFilterIndex: () => number\n getFacetedUniqueValues: () => Map\n _getFacetedUniqueValues?: () => Map\n getFacetedMinMaxValues: () => undefined | [number, number]\n _getFacetedMinMaxValues?: () => undefined | [number, number]\n}\n\nexport interface FiltersRow {\n columnFilters: Record\n columnFiltersMeta: Record\n}\n\ninterface FiltersOptionsBase {\n enableFilters?: boolean\n manualFiltering?: boolean\n filterFromLeafRows?: boolean\n maxLeafRowFilterDepth?: number\n getFilteredRowModel?: (table: Table) => () => RowModel\n\n // Column\n onColumnFiltersChange?: OnChangeFn\n enableColumnFilters?: boolean\n\n // Global\n globalFilterFn?: FilterFnOption\n onGlobalFilterChange?: OnChangeFn\n enableGlobalFilter?: boolean\n getColumnCanGlobalFilter?: (column: Column) => boolean\n\n // Faceting\n getFacetedRowModel?: (\n table: Table,\n columnId: string\n ) => () => RowModel\n getFacetedUniqueValues?: (\n table: Table,\n columnId: string\n ) => () => Map\n getFacetedMinMaxValues?: (\n table: Table,\n columnId: string\n ) => () => undefined | [number, number]\n}\n\ntype ResolvedFilterFns = keyof FilterFns extends never\n ? {\n filterFns?: Record>\n }\n : {\n filterFns: Record>\n }\n\nexport interface FiltersOptions\n extends FiltersOptionsBase,\n ResolvedFilterFns {}\n\nexport interface FiltersInstance {\n setColumnFilters: (updater: Updater) => void\n\n resetColumnFilters: (defaultState?: boolean) => void\n\n // Column Filters\n getPreFilteredRowModel: () => RowModel\n getFilteredRowModel: () => RowModel\n _getFilteredRowModel?: () => RowModel\n\n // Global Filters\n setGlobalFilter: (updater: Updater) => void\n resetGlobalFilter: (defaultState?: boolean) => void\n getGlobalAutoFilterFn: () => FilterFn | undefined\n getGlobalFilterFn: () => FilterFn | undefined\n getGlobalFacetedRowModel: () => RowModel\n _getGlobalFacetedRowModel?: () => RowModel\n getGlobalFacetedUniqueValues: () => Map\n _getGlobalFacetedUniqueValues?: () => Map\n getGlobalFacetedMinMaxValues: () => undefined | [number, number]\n _getGlobalFacetedMinMaxValues?: () => undefined | [number, number]\n}\n\n//\n\nexport const Filters: TableFeature = {\n getDefaultColumnDef: (): FiltersColumnDef => {\n return {\n filterFn: 'auto',\n }\n },\n\n getInitialState: (state): FiltersTableState => {\n return {\n columnFilters: [],\n globalFilter: undefined,\n // filtersProgress: 1,\n // facetProgress: {},\n ...state,\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): FiltersOptions => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n filterFromLeafRows: false,\n maxLeafRowFilterDepth: 100,\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n const value = table\n .getCoreRowModel()\n .flatRows[0]?._getAllCellsByColumnId()\n [column.id]?.getValue()\n\n return typeof value === 'string' || typeof value === 'number'\n },\n } as FiltersOptions\n },\n\n createColumn: (\n column: Column,\n table: Table\n ): FiltersColumn => {\n return {\n getAutoFilterFn: () => {\n const firstRow = table.getCoreRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'string') {\n return filterFns.includesString\n }\n\n if (typeof value === 'number') {\n return filterFns.inNumberRange\n }\n\n if (typeof value === 'boolean') {\n return filterFns.equals\n }\n\n if (value !== null && typeof value === 'object') {\n return filterFns.equals\n }\n\n if (Array.isArray(value)) {\n return filterFns.arrIncludes\n }\n\n return filterFns.weakEquals\n },\n getFilterFn: () => {\n return isFunction(column.columnDef.filterFn)\n ? column.columnDef.filterFn\n : column.columnDef.filterFn === 'auto'\n ? column.getAutoFilterFn()\n // @ts-ignore\n : table.options.filterFns?.[column.columnDef.filterFn as string] ??\n filterFns[column.columnDef.filterFn as BuiltInFilterFn]\n },\n getCanFilter: () => {\n return (\n (column.columnDef.enableColumnFilter ?? true) &&\n (table.options.enableColumnFilters ?? true) &&\n (table.options.enableFilters ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanGlobalFilter: () => {\n return (\n (column.columnDef.enableGlobalFilter ?? true) &&\n (table.options.enableGlobalFilter ?? true) &&\n (table.options.enableFilters ?? true) &&\n (table.options.getColumnCanGlobalFilter?.(column) ?? true) &&\n !!column.accessorFn\n )\n },\n\n getIsFiltered: () => column.getFilterIndex() > -1,\n\n getFilterValue: () =>\n table.getState().columnFilters?.find(d => d.id === column.id)?.value,\n\n getFilterIndex: () =>\n table.getState().columnFilters?.findIndex(d => d.id === column.id) ??\n -1,\n\n setFilterValue: value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn()\n const previousfilter = old?.find(d => d.id === column.id)\n\n const newFilter = functionalUpdate(\n value,\n previousfilter ? previousfilter.value : undefined\n )\n\n //\n if (\n shouldAutoRemoveFilter(\n filterFn as FilterFn,\n newFilter,\n column\n )\n ) {\n return old?.filter(d => d.id !== column.id) ?? []\n }\n\n const newFilterObj = { id: column.id, value: newFilter }\n\n if (previousfilter) {\n return (\n old?.map(d => {\n if (d.id === column.id) {\n return newFilterObj\n }\n return d\n }) ?? []\n )\n }\n\n if (old?.length) {\n return [...old, newFilterObj]\n }\n\n return [newFilterObj]\n })\n },\n _getFacetedRowModel:\n table.options.getFacetedRowModel &&\n table.options.getFacetedRowModel(table, column.id),\n getFacetedRowModel: () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return column._getFacetedRowModel()\n },\n _getFacetedUniqueValues:\n table.options.getFacetedUniqueValues &&\n table.options.getFacetedUniqueValues(table, column.id),\n getFacetedUniqueValues: () => {\n if (!column._getFacetedUniqueValues) {\n return new Map()\n }\n\n return column._getFacetedUniqueValues()\n },\n _getFacetedMinMaxValues:\n table.options.getFacetedMinMaxValues &&\n table.options.getFacetedMinMaxValues(table, column.id),\n getFacetedMinMaxValues: () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined\n }\n\n return column._getFacetedMinMaxValues()\n },\n // () => [column.getFacetedRowModel()],\n // facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id),\n }\n },\n\n createRow: (\n row: Row,\n table: Table\n ): FiltersRow => {\n return {\n columnFilters: {},\n columnFiltersMeta: {},\n }\n },\n\n createTable: (\n table: Table\n ): FiltersInstance => {\n return {\n getGlobalAutoFilterFn: () => {\n return filterFns.includesString\n },\n\n getGlobalFilterFn: () => {\n const { globalFilterFn: globalFilterFn } = table.options\n\n return isFunction(globalFilterFn)\n ? globalFilterFn\n : globalFilterFn === 'auto'\n ? table.getGlobalAutoFilterFn()\n // @ts-ignore\n : table.options.filterFns?.[globalFilterFn as string] ??\n filterFns[globalFilterFn as BuiltInFilterFn]\n },\n\n setColumnFilters: (updater: Updater) => {\n const leafColumns = table.getAllLeafColumns()\n\n const updateFn = (old: ColumnFiltersState) => {\n return functionalUpdate(updater, old)?.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id)\n\n if (column) {\n const filterFn = column.getFilterFn()\n\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false\n }\n }\n\n return true\n })\n }\n\n table.options.onColumnFiltersChange?.(updateFn)\n },\n\n setGlobalFilter: updater => {\n table.options.onGlobalFilterChange?.(updater)\n },\n\n resetGlobalFilter: defaultState => {\n table.setGlobalFilter(\n defaultState ? undefined : table.initialState.globalFilter\n )\n },\n\n resetColumnFilters: defaultState => {\n table.setColumnFilters(\n defaultState ? [] : table.initialState?.columnFilters ?? []\n )\n },\n\n getPreFilteredRowModel: () => table.getCoreRowModel(),\n getFilteredRowModel: () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table)\n }\n\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return table._getFilteredRowModel()\n },\n\n _getGlobalFacetedRowModel:\n table.options.getFacetedRowModel &&\n table.options.getFacetedRowModel(table, '__global__'),\n\n getGlobalFacetedRowModel: () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return table._getGlobalFacetedRowModel()\n },\n\n _getGlobalFacetedUniqueValues:\n table.options.getFacetedUniqueValues &&\n table.options.getFacetedUniqueValues(table, '__global__'),\n getGlobalFacetedUniqueValues: () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map()\n }\n\n return table._getGlobalFacetedUniqueValues()\n },\n\n _getGlobalFacetedMinMaxValues:\n table.options.getFacetedMinMaxValues &&\n table.options.getFacetedMinMaxValues(table, '__global__'),\n getGlobalFacetedMinMaxValues: () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return\n }\n\n return table._getGlobalFacetedMinMaxValues()\n },\n }\n },\n}\n\nexport function shouldAutoRemoveFilter(\n filterFn?: FilterFn,\n value?: any,\n column?: Column\n) {\n return (\n (filterFn && filterFn.autoRemove\n ? filterFn.autoRemove(value, column)\n : false) ||\n typeof value === 'undefined' ||\n (typeof value === 'string' && !value)\n )\n}\n","import { AggregationFn } from './features/Grouping'\n\nconst sum: AggregationFn = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId)\n return sum + (typeof nextValue === 'number' ? nextValue : 0)\n }, 0)\n}\n\nconst min: AggregationFn = (columnId, _leafRows, childRows) => {\n let min: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue(columnId)\n\n if (\n value != null &&\n (min! > value || (min === undefined && value >= value))\n ) {\n min = value\n }\n })\n\n return min\n}\n\nconst max: AggregationFn = (columnId, _leafRows, childRows) => {\n let max: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue(columnId)\n if (\n value != null &&\n (max! < value || (max === undefined && value >= value))\n ) {\n max = value\n }\n })\n\n return max\n}\n\nconst extent: AggregationFn = (columnId, _leafRows, childRows) => {\n let min: number | undefined\n let max: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue(columnId)\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value\n } else {\n if (min > value) min = value\n if (max! < value) max = value\n }\n }\n })\n\n return [min, max]\n}\n\nconst mean: AggregationFn = (columnId, leafRows) => {\n let count = 0\n let sum = 0\n\n leafRows.forEach(row => {\n let value = row.getValue(columnId)\n if (value != null && (value = +value) >= value) {\n ++count, (sum += value)\n }\n })\n\n if (count) return sum / count\n\n return\n}\n\nconst median: AggregationFn = (columnId, leafRows) => {\n if (!leafRows.length) {\n return\n }\n\n let min = 0\n let max = 0\n\n leafRows.forEach(row => {\n let value = row.getValue(columnId)\n if (typeof value === 'number') {\n min = Math.min(min, value)\n max = Math.max(max, value)\n }\n })\n\n return (min + max) / 2\n}\n\nconst unique: AggregationFn = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values())\n}\n\nconst uniqueCount: AggregationFn = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size\n}\n\nconst count: AggregationFn = (_columnId, leafRows) => {\n return leafRows.length\n}\n\nexport const aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count,\n}\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n","import { RowModel } from '..'\nimport { BuiltInAggregationFn, aggregationFns } from '../aggregationFns'\nimport { TableFeature } from '../core/table'\nimport {\n Cell,\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n ColumnDefTemplate,\n RowData,\n AggregationFns,\n} from '../types'\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport type GroupingState = string[]\n\nexport interface GroupingTableState {\n grouping: GroupingState\n}\n\nexport type AggregationFn = (\n columnId: string,\n leafRows: Row[],\n childRows: Row[]\n) => any\n\nexport type CustomAggregationFns = Record>\n\nexport type AggregationFnOption =\n | 'auto'\n | keyof AggregationFns\n | BuiltInAggregationFn\n | AggregationFn\n\nexport interface GroupingColumnDef {\n aggregationFn?: AggregationFnOption\n aggregatedCell?: ColumnDefTemplate<\n ReturnType['getContext']>\n >\n enableGrouping?: boolean\n}\n\nexport interface GroupingColumn {\n getCanGroup: () => boolean\n getIsGrouped: () => boolean\n getGroupedIndex: () => number\n toggleGrouping: () => void\n getToggleGroupingHandler: () => () => void\n getAutoAggregationFn: () => AggregationFn | undefined\n getAggregationFn: () => AggregationFn | undefined\n}\n\nexport interface GroupingRow {\n groupingColumnId?: string\n groupingValue?: unknown\n getIsGrouped: () => boolean\n _groupingValuesCache: Record\n}\n\nexport interface GroupingCell {\n getIsGrouped: () => boolean\n getIsPlaceholder: () => boolean\n getIsAggregated: () => boolean\n}\n\nexport interface ColumnDefaultOptions {\n // Column\n onGroupingChange: OnChangeFn\n enableGrouping: boolean\n}\n\ninterface GroupingOptionsBase {\n manualGrouping?: boolean\n onGroupingChange?: OnChangeFn\n enableGrouping?: boolean\n getGroupedRowModel?: (table: Table) => () => RowModel\n groupedColumnMode?: false | 'reorder' | 'remove'\n}\n\ntype ResolvedAggregationFns = keyof AggregationFns extends never\n ? {\n aggregationFns?: Record>\n }\n : {\n aggregationFns: Record>\n }\n\nexport interface GroupingOptions\n extends GroupingOptionsBase,\n ResolvedAggregationFns {}\n\nexport type GroupingColumnMode = false | 'reorder' | 'remove'\n\nexport interface GroupingInstance {\n setGrouping: (updater: Updater) => void\n resetGrouping: (defaultState?: boolean) => void\n getPreGroupedRowModel: () => RowModel\n getGroupedRowModel: () => RowModel\n _getGroupedRowModel?: () => RowModel\n}\n\n//\n\nexport const Grouping: TableFeature = {\n getDefaultColumnDef: (): GroupingColumnDef<\n TData,\n unknown\n > => {\n return {\n aggregatedCell: props => (props.getValue() as any)?.toString?.() ?? null,\n aggregationFn: 'auto',\n }\n },\n\n getInitialState: (state): GroupingTableState => {\n return {\n grouping: [],\n ...state,\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): GroupingOptions => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder',\n }\n },\n\n createColumn: (\n column: Column,\n table: Table\n ): GroupingColumn => {\n return {\n toggleGrouping: () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old?.includes(column.id)) {\n return old.filter(d => d !== column.id)\n }\n\n return [...(old ?? []), column.id]\n })\n },\n\n getCanGroup: () => {\n return (\n column.columnDef.enableGrouping ??\n true ??\n table.options.enableGrouping ??\n true ??\n !!column.accessorFn\n )\n },\n\n getIsGrouped: () => {\n return table.getState().grouping?.includes(column.id)\n },\n\n getGroupedIndex: () => table.getState().grouping?.indexOf(column.id),\n\n getToggleGroupingHandler: () => {\n const canGroup = column.getCanGroup()\n\n return () => {\n if (!canGroup) return\n column.toggleGrouping()\n }\n },\n getAutoAggregationFn: () => {\n const firstRow = table.getCoreRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'number') {\n return aggregationFns.sum\n }\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent\n }\n },\n getAggregationFn: () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.aggregationFn)\n ? column.columnDef.aggregationFn\n : column.columnDef.aggregationFn === 'auto'\n ? column.getAutoAggregationFn()\n : table.options.aggregationFns?.[\n column.columnDef.aggregationFn as string\n ] ??\n aggregationFns[\n column.columnDef.aggregationFn as BuiltInAggregationFn\n ]\n },\n }\n },\n\n createTable: (\n table: Table\n ): GroupingInstance => {\n return {\n setGrouping: updater => table.options.onGroupingChange?.(updater),\n\n resetGrouping: defaultState => {\n table.setGrouping(\n defaultState ? [] : table.initialState?.grouping ?? []\n )\n },\n\n getPreGroupedRowModel: () => table.getFilteredRowModel(),\n getGroupedRowModel: () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table)\n }\n\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel()\n }\n\n return table._getGroupedRowModel()\n },\n }\n },\n\n createRow: (row: Row): GroupingRow => {\n return {\n getIsGrouped: () => !!row.groupingColumnId,\n _groupingValuesCache: {},\n }\n },\n\n createCell: (\n cell: Cell,\n column: Column,\n row: Row,\n table: Table\n ): GroupingCell => {\n const getRenderValue = () =>\n cell.getValue() ?? table.options.renderFallbackValue\n\n return {\n getIsGrouped: () =>\n column.getIsGrouped() && column.id === row.groupingColumnId,\n getIsPlaceholder: () => !cell.getIsGrouped() && column.getIsGrouped(),\n getIsAggregated: () =>\n !cell.getIsGrouped() &&\n !cell.getIsPlaceholder() &&\n !!row.subRows?.length,\n }\n },\n}\n\nexport function orderColumns(\n leafColumns: Column[],\n grouping: string[],\n groupedColumnMode?: GroupingColumnMode\n) {\n if (!grouping?.length || !groupedColumnMode) {\n return leafColumns\n }\n\n const nonGroupingColumns = leafColumns.filter(\n col => !grouping.includes(col.id)\n )\n\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns\n }\n\n const groupingColumns = grouping\n .map(g => leafColumns.find(col => col.id === g)!)\n .filter(Boolean)\n\n return [...groupingColumns, ...nonGroupingColumns]\n}\n","import { makeStateUpdater, memo } from '../utils'\n\nimport { Table, OnChangeFn, Updater, Column, RowData } from '../types'\n\nimport { orderColumns } from './Grouping'\nimport { TableFeature } from '../core/table'\n\nexport interface ColumnOrderTableState {\n columnOrder: ColumnOrderState\n}\n\nexport type ColumnOrderState = string[]\n\nexport interface ColumnOrderOptions {\n onColumnOrderChange?: OnChangeFn\n}\n\nexport interface ColumnOrderDefaultOptions {\n onColumnOrderChange: OnChangeFn\n}\n\nexport interface ColumnOrderInstance {\n setColumnOrder: (updater: Updater) => void\n resetColumnOrder: (defaultState?: boolean) => void\n _getOrderColumnsFn: () => (\n columns: Column[]\n ) => Column[]\n}\n\n//\n\nexport const Ordering: TableFeature = {\n getInitialState: (state): ColumnOrderTableState => {\n return {\n columnOrder: [],\n ...state,\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): ColumnOrderDefaultOptions => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table),\n }\n },\n\n createTable: (\n table: Table\n ): ColumnOrderInstance => {\n return {\n setColumnOrder: updater => table.options.onColumnOrderChange?.(updater),\n resetColumnOrder: defaultState => {\n table.setColumnOrder(\n defaultState ? [] : table.initialState.columnOrder ?? []\n )\n },\n _getOrderColumnsFn: memo(\n () => [\n table.getState().columnOrder,\n table.getState().grouping,\n table.options.groupedColumnMode,\n ],\n (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns: Column[] = []\n\n // If there is no order, return the normal columns\n if (!columnOrder?.length) {\n orderedColumns = columns\n } else {\n const columnOrderCopy = [...columnOrder]\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns]\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift()\n const foundIndex = columnsCopy.findIndex(\n d => d.id === targetColumnId\n )\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]!)\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy]\n }\n\n return orderColumns(orderedColumns, grouping, groupedColumnMode)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getOrderColumnsFn',\n // debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport { OnChangeFn, Table, RowModel, Updater, RowData } from '../types'\nimport { functionalUpdate, makeStateUpdater, memo } from '../utils'\n\nexport interface PaginationState {\n pageIndex: number\n pageSize: number\n}\n\nexport interface PaginationTableState {\n pagination: PaginationState\n}\n\nexport interface PaginationInitialTableState {\n pagination?: Partial\n}\n\nexport interface PaginationOptions {\n pageCount?: number\n manualPagination?: boolean\n onPaginationChange?: OnChangeFn\n autoResetPageIndex?: boolean\n getPaginationRowModel?: (table: Table) => () => RowModel\n}\n\nexport interface PaginationDefaultOptions {\n onPaginationChange: OnChangeFn\n}\n\nexport interface PaginationInstance {\n _autoResetPageIndex: () => void\n setPagination: (updater: Updater) => void\n resetPagination: (defaultState?: boolean) => void\n setPageIndex: (updater: Updater) => void\n resetPageIndex: (defaultState?: boolean) => void\n setPageSize: (updater: Updater) => void\n resetPageSize: (defaultState?: boolean) => void\n setPageCount: (updater: Updater) => void\n getPageOptions: () => number[]\n getCanPreviousPage: () => boolean\n getCanNextPage: () => boolean\n previousPage: () => void\n nextPage: () => void\n getPrePaginationRowModel: () => RowModel\n getPaginationRowModel: () => RowModel\n _getPaginationRowModel?: () => RowModel\n getPageCount: () => number\n}\n\n//\n\nconst defaultPageIndex = 0\nconst defaultPageSize = 10\n\nconst getDefaultPaginationState = (): PaginationState => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize,\n})\n\nexport const Pagination: TableFeature = {\n getInitialState: (state): PaginationTableState => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...state?.pagination,\n },\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): PaginationDefaultOptions => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table),\n }\n },\n\n createTable: (\n table: Table\n ): PaginationInstance => {\n let registered = false\n let queued = false\n\n return {\n _autoResetPageIndex: () => {\n if (!registered) {\n table._queue(() => {\n registered = true\n })\n return\n }\n\n if (\n table.options.autoResetAll ??\n table.options.autoResetPageIndex ??\n !table.options.manualPagination\n ) {\n if (queued) return\n queued = true\n table._queue(() => {\n table.resetPageIndex()\n queued = false\n })\n }\n },\n setPagination: updater => {\n const safeUpdater: Updater = old => {\n let newState = functionalUpdate(updater, old)\n\n return newState\n }\n\n return table.options.onPaginationChange?.(safeUpdater)\n },\n resetPagination: defaultState => {\n table.setPagination(\n defaultState\n ? getDefaultPaginationState()\n : table.initialState.pagination ?? getDefaultPaginationState()\n )\n },\n setPageIndex: updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex)\n\n const maxPageIndex =\n typeof table.options.pageCount === 'undefined' ||\n table.options.pageCount === -1\n ? Number.MAX_SAFE_INTEGER\n : table.options.pageCount - 1\n\n pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex))\n\n return {\n ...old,\n pageIndex,\n }\n })\n },\n resetPageIndex: defaultState => {\n table.setPageIndex(\n defaultState\n ? defaultPageIndex\n : table.initialState?.pagination?.pageIndex ?? defaultPageIndex\n )\n },\n resetPageSize: defaultState => {\n table.setPageSize(\n defaultState\n ? defaultPageSize\n : table.initialState?.pagination?.pageSize ?? defaultPageSize\n )\n },\n setPageSize: updater => {\n table.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize))\n const topRowIndex = old.pageSize * old.pageIndex!\n const pageIndex = Math.floor(topRowIndex / pageSize)\n\n return {\n ...old,\n pageIndex,\n pageSize,\n }\n })\n },\n setPageCount: updater =>\n table.setPagination(old => {\n let newPageCount = functionalUpdate(\n updater,\n table.options.pageCount ?? -1\n )\n\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount)\n }\n\n return {\n ...old,\n pageCount: newPageCount,\n }\n }),\n\n getPageOptions: memo(\n () => [table.getPageCount()],\n pageCount => {\n let pageOptions: number[] = []\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)\n }\n return pageOptions\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getPageOptions',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n getCanPreviousPage: () => table.getState().pagination.pageIndex > 0,\n\n getCanNextPage: () => {\n const { pageIndex } = table.getState().pagination\n\n const pageCount = table.getPageCount()\n\n if (pageCount === -1) {\n return true\n }\n\n if (pageCount === 0) {\n return false\n }\n\n return pageIndex < pageCount - 1\n },\n\n previousPage: () => {\n return table.setPageIndex(old => old - 1)\n },\n\n nextPage: () => {\n return table.setPageIndex(old => {\n return old + 1\n })\n },\n\n getPrePaginationRowModel: () => table.getExpandedRowModel(),\n getPaginationRowModel: () => {\n if (\n !table._getPaginationRowModel &&\n table.options.getPaginationRowModel\n ) {\n table._getPaginationRowModel =\n table.options.getPaginationRowModel(table)\n }\n\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel()\n }\n\n return table._getPaginationRowModel()\n },\n\n getPageCount: () => {\n return (\n table.options.pageCount ??\n Math.ceil(\n table.getPrePaginationRowModel().rows.length /\n table.getState().pagination.pageSize\n )\n )\n },\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport {\n OnChangeFn,\n Updater,\n Table,\n Column,\n Row,\n Cell,\n RowData,\n} from '../types'\nimport { makeStateUpdater, memo } from '../utils'\n\nexport type ColumnPinningPosition = false | 'left' | 'right'\n\nexport interface ColumnPinningState {\n left?: string[]\n right?: string[]\n}\n\nexport interface ColumnPinningTableState {\n columnPinning: ColumnPinningState\n}\n\nexport interface ColumnPinningOptions {\n onColumnPinningChange?: OnChangeFn\n enablePinning?: boolean\n}\n\nexport interface ColumnPinningDefaultOptions {\n onColumnPinningChange: OnChangeFn\n}\n\nexport interface ColumnPinningColumnDef {\n enablePinning?: boolean\n}\n\nexport interface ColumnPinningColumn {\n getCanPin: () => boolean\n getPinnedIndex: () => number\n getIsPinned: () => ColumnPinningPosition\n pin: (position: ColumnPinningPosition) => void\n}\n\nexport interface ColumnPinningRow {\n getLeftVisibleCells: () => Cell[]\n getCenterVisibleCells: () => Cell[]\n getRightVisibleCells: () => Cell[]\n}\n\nexport interface ColumnPinningInstance {\n setColumnPinning: (updater: Updater) => void\n resetColumnPinning: (defaultState?: boolean) => void\n getIsSomeColumnsPinned: (position?: ColumnPinningPosition) => boolean\n getLeftLeafColumns: () => Column[]\n getRightLeafColumns: () => Column[]\n getCenterLeafColumns: () => Column[]\n}\n\n//\n\nconst getDefaultPinningState = (): ColumnPinningState => ({\n left: [],\n right: [],\n})\n\nexport const Pinning: TableFeature = {\n getInitialState: (state): ColumnPinningTableState => {\n return {\n columnPinning: getDefaultPinningState(),\n ...state,\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): ColumnPinningDefaultOptions => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table),\n }\n },\n\n createColumn: (\n column: Column,\n table: Table\n ): ColumnPinningColumn => {\n return {\n pin: position => {\n const columnIds = column\n .getLeafColumns()\n .map(d => d.id)\n .filter(Boolean) as string[]\n\n table.setColumnPinning(old => {\n if (position === 'right') {\n return {\n left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),\n right: [\n ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),\n ...columnIds,\n ],\n }\n }\n\n if (position === 'left') {\n return {\n left: [\n ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),\n ...columnIds,\n ],\n right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),\n }\n }\n\n return {\n left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),\n right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),\n }\n })\n },\n\n getCanPin: () => {\n const leafColumns = column.getLeafColumns()\n\n return leafColumns.some(\n d =>\n (d.columnDef.enablePinning ?? true) &&\n (table.options.enablePinning ?? true)\n )\n },\n\n getIsPinned: () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id)\n\n const { left, right } = table.getState().columnPinning\n\n const isLeft = leafColumnIds.some(d => left?.includes(d))\n const isRight = leafColumnIds.some(d => right?.includes(d))\n\n return isLeft ? 'left' : isRight ? 'right' : false\n },\n\n getPinnedIndex: () => {\n const position = column.getIsPinned()\n\n return position\n ? table.getState().columnPinning?.[position]?.indexOf(column.id) ?? -1\n : 0\n },\n }\n },\n\n createRow: (\n row: Row,\n table: Table\n ): ColumnPinningRow => {\n return {\n getCenterVisibleCells: memo(\n () => [\n row._getAllVisibleCells(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allCells, left, right) => {\n const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n return allCells.filter(d => !leftAndRight.includes(d.column.id))\n },\n {\n key:\n process.env.NODE_ENV === 'production' &&\n 'row.getCenterVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n getLeftVisibleCells: memo(\n () => [\n row._getAllVisibleCells(),\n table.getState().columnPinning.left,\n ,\n ],\n (allCells, left) => {\n const cells = (left ?? [])\n .map(\n columnId => allCells.find(cell => cell.column.id === columnId)!\n )\n .filter(Boolean)\n .map(d => ({ ...d, position: 'left' } as Cell))\n\n return cells\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row.getLeftVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n getRightVisibleCells: memo(\n () => [row._getAllVisibleCells(), table.getState().columnPinning.right],\n (allCells, right) => {\n const cells = (right ?? [])\n .map(\n columnId => allCells.find(cell => cell.column.id === columnId)!\n )\n .filter(Boolean)\n .map(d => ({ ...d, position: 'right' } as Cell))\n\n return cells\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row.getRightVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n }\n },\n\n createTable: (\n table: Table\n ): ColumnPinningInstance => {\n return {\n setColumnPinning: updater =>\n table.options.onColumnPinningChange?.(updater),\n\n resetColumnPinning: defaultState =>\n table.setColumnPinning(\n defaultState\n ? getDefaultPinningState()\n : table.initialState?.columnPinning ?? getDefaultPinningState()\n ),\n\n getIsSomeColumnsPinned: position => {\n const pinningState = table.getState().columnPinning\n\n if (!position) {\n return Boolean(\n pinningState.left?.length || pinningState.right?.length\n )\n }\n return Boolean(pinningState[position]?.length)\n },\n\n getLeftLeafColumns: memo(\n () => [table.getAllLeafColumns(), table.getState().columnPinning.left],\n (allColumns, left) => {\n return (left ?? [])\n .map(columnId => allColumns.find(column => column.id === columnId)!)\n .filter(Boolean)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getRightLeafColumns: memo(\n () => [table.getAllLeafColumns(), table.getState().columnPinning.right],\n (allColumns, right) => {\n return (right ?? [])\n .map(columnId => allColumns.find(column => column.id === columnId)!)\n .filter(Boolean)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getCenterLeafColumns: memo(\n () => [\n table.getAllLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, left, right) => {\n const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n return allColumns.filter(d => !leftAndRight.includes(d.id))\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getCenterLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport { OnChangeFn, Table, Row, RowModel, Updater, RowData } from '../types'\nimport { makeStateUpdater, memo } from '../utils'\n\nexport type RowSelectionState = Record\n\nexport interface RowSelectionTableState {\n rowSelection: RowSelectionState\n}\n\nexport interface RowSelectionOptions {\n enableRowSelection?: boolean | ((row: Row) => boolean)\n enableMultiRowSelection?: boolean | ((row: Row) => boolean)\n enableSubRowSelection?: boolean | ((row: Row) => boolean)\n onRowSelectionChange?: OnChangeFn\n // enableGroupingRowSelection?:\n // | boolean\n // | ((\n // row: Row\n // ) => boolean)\n // isAdditiveSelectEvent?: (e: unknown) => boolean\n // isInclusiveSelectEvent?: (e: unknown) => boolean\n // selectRowsFn?: (\n // table: Table,\n // rowModel: RowModel\n // ) => RowModel\n}\n\nexport interface RowSelectionRow {\n getIsSelected: () => boolean\n getIsSomeSelected: () => boolean\n getIsAllSubRowsSelected: () => boolean\n getCanSelect: () => boolean\n getCanMultiSelect: () => boolean\n getCanSelectSubRows: () => boolean\n toggleSelected: (value?: boolean) => void\n getToggleSelectedHandler: () => (event: unknown) => void\n}\n\nexport interface RowSelectionInstance {\n getToggleAllRowsSelectedHandler: () => (event: unknown) => void\n getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void\n setRowSelection: (updater: Updater) => void\n resetRowSelection: (defaultState?: boolean) => void\n getIsAllRowsSelected: () => boolean\n getIsAllPageRowsSelected: () => boolean\n getIsSomeRowsSelected: () => boolean\n getIsSomePageRowsSelected: () => boolean\n toggleAllRowsSelected: (value?: boolean) => void\n toggleAllPageRowsSelected: (value?: boolean) => void\n getPreSelectedRowModel: () => RowModel\n getSelectedRowModel: () => RowModel\n getFilteredSelectedRowModel: () => RowModel\n getGroupedSelectedRowModel: () => RowModel\n}\n\n//\n\nexport const RowSelection: TableFeature = {\n getInitialState: (state): RowSelectionTableState => {\n return {\n rowSelection: {},\n ...state,\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): RowSelectionOptions => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true,\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n }\n },\n\n createTable: (\n table: Table\n ): RowSelectionInstance => {\n return {\n setRowSelection: updater => table.options.onRowSelectionChange?.(updater),\n resetRowSelection: defaultState =>\n table.setRowSelection(\n defaultState ? {} : table.initialState.rowSelection ?? {}\n ),\n toggleAllRowsSelected: value => {\n table.setRowSelection(old => {\n value =\n typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected()\n\n const rowSelection = { ...old }\n\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n if (!row.getCanSelect()) {\n return\n }\n rowSelection[row.id] = true\n })\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id]\n })\n }\n\n return rowSelection\n })\n },\n toggleAllPageRowsSelected: value =>\n table.setRowSelection(old => {\n const resolvedValue =\n typeof value !== 'undefined'\n ? value\n : !table.getIsAllPageRowsSelected()\n\n const rowSelection: RowSelectionState = { ...old }\n\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, table)\n })\n\n return rowSelection\n }),\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // table.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // table.setRowSelection(selectedRowIds)\n // },\n getPreSelectedRowModel: () => table.getCoreRowModel(),\n getSelectedRowModel: memo(\n () => [table.getState().rowSelection, table.getCoreRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getSelectedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n getFilteredSelectedRowModel: memo(\n () => [table.getState().rowSelection, table.getFilteredRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n {\n key:\n process.env.NODE_ENV === 'production' &&\n 'getFilteredSelectedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n getGroupedSelectedRowModel: memo(\n () => [table.getState().rowSelection, table.getSortedRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n {\n key:\n process.env.NODE_ENV === 'production' &&\n 'getGroupedSelectedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n getIsAllRowsSelected: () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows\n const { rowSelection } = table.getState()\n\n let isAllRowsSelected = Boolean(\n preGroupedFlatRows.length && Object.keys(rowSelection).length\n )\n\n if (isAllRowsSelected) {\n if (\n preGroupedFlatRows.some(\n row => row.getCanSelect() && !rowSelection[row.id]\n )\n ) {\n isAllRowsSelected = false\n }\n }\n\n return isAllRowsSelected\n },\n\n getIsAllPageRowsSelected: () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows\n const { rowSelection } = table.getState()\n\n let isAllPageRowsSelected = !!paginationFlatRows.length\n\n if (\n isAllPageRowsSelected &&\n paginationFlatRows.some(row => !rowSelection[row.id])\n ) {\n isAllPageRowsSelected = false\n }\n\n return isAllPageRowsSelected\n },\n\n getIsSomeRowsSelected: () => {\n const totalSelected = Object.keys(\n table.getState().rowSelection ?? {}\n ).length\n return (\n totalSelected > 0 &&\n totalSelected < table.getFilteredRowModel().flatRows.length\n )\n },\n\n getIsSomePageRowsSelected: () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows\n return table.getIsAllPageRowsSelected()\n ? false\n : paginationFlatRows.some(\n d => d.getIsSelected() || d.getIsSomeSelected()\n )\n },\n\n getToggleAllRowsSelectedHandler: () => {\n return (e: unknown) => {\n table.toggleAllRowsSelected(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n },\n\n getToggleAllPageRowsSelectedHandler: () => {\n return (e: unknown) => {\n table.toggleAllPageRowsSelected(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n },\n }\n },\n\n createRow: (\n row: Row,\n table: Table\n ): RowSelectionRow => {\n return {\n toggleSelected: value => {\n const isSelected = row.getIsSelected()\n\n table.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !isSelected\n\n if (isSelected === value) {\n return old\n }\n\n const selectedRowIds = { ...old }\n\n mutateRowIsSelected(selectedRowIds, row.id, value, table)\n\n return selectedRowIds\n })\n },\n getIsSelected: () => {\n const { rowSelection } = table.getState()\n return isRowSelected(row, rowSelection)\n },\n\n getIsSomeSelected: () => {\n const { rowSelection } = table.getState()\n return isSubRowSelected(row, rowSelection, table) === 'some'\n },\n\n getIsAllSubRowsSelected: () => {\n const { rowSelection } = table.getState()\n return isSubRowSelected(row, rowSelection, table) === 'all'\n },\n\n getCanSelect: () => {\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row)\n }\n\n return table.options.enableRowSelection ?? true\n },\n\n getCanSelectSubRows: () => {\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row)\n }\n\n return table.options.enableSubRowSelection ?? true\n },\n\n getCanMultiSelect: () => {\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row)\n }\n\n return table.options.enableMultiRowSelection ?? true\n },\n getToggleSelectedHandler: () => {\n const canSelect = row.getCanSelect()\n\n return (e: unknown) => {\n if (!canSelect) return\n row.toggleSelected(\n ((e as MouseEvent).target as HTMLInputElement)?.checked\n )\n }\n },\n }\n },\n}\n\nconst mutateRowIsSelected = (\n selectedRowIds: Record,\n id: string,\n value: boolean,\n table: Table\n) => {\n const row = table.getRow(id)\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key])\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true\n }\n } else {\n delete selectedRowIds[id]\n }\n // }\n\n if (row.subRows?.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row =>\n mutateRowIsSelected(selectedRowIds, row.id, value, table)\n )\n }\n}\n\nexport function selectRowsFn(\n table: Table,\n rowModel: RowModel\n): RowModel {\n const rowSelection = table.getState().rowSelection\n\n const newSelectedFlatRows: Row[] = []\n const newSelectedRowsById: Record> = {}\n\n // Filters top level and nested rows\n const recurseRows = (rows: Row[], depth = 0): Row[] => {\n return rows\n .map(row => {\n const isSelected = isRowSelected(row, rowSelection)\n\n if (isSelected) {\n newSelectedFlatRows.push(row)\n newSelectedRowsById[row.id] = row\n }\n\n if (row.subRows?.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows, depth + 1),\n }\n }\n\n if (isSelected) {\n return row\n }\n })\n .filter(Boolean) as Row[]\n }\n\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById,\n }\n}\n\nexport function isRowSelected(\n row: Row,\n selection: Record\n): boolean {\n return selection[row.id] ?? false\n}\n\nexport function isSubRowSelected(\n row: Row,\n selection: Record,\n table: Table\n): boolean | 'some' | 'all' {\n if (row.subRows && row.subRows.length) {\n let allChildrenSelected = true\n let someSelected = false\n\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return\n }\n\n if (isRowSelected(subRow, selection)) {\n someSelected = true\n } else {\n allChildrenSelected = false\n }\n })\n\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false\n }\n\n return false\n}\n","import { SortingFn } from './features/Sorting'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nconst alphanumeric: SortingFn = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\nconst alphanumericCaseSensitive: SortingFn = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text: SortingFn = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive: SortingFn = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\nconst datetime: SortingFn = (rowA, rowB, columnId) => {\n const a = rowA.getValue(columnId)\n const b = rowB.getValue(columnId)\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0\n}\n\nconst basic: SortingFn = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))\n}\n\n// Utils\n\nfunction compareBasic(a: any, b: any) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction toString(a: any) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr: string, bStr: string) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean)\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean)\n\n // While\n while (a.length && b.length) {\n const aa = a.shift()!\n const bb = b.shift()!\n\n const an = parseInt(aa, 10)\n const bn = parseInt(bb, 10)\n\n const combo = [an, bn].sort()\n\n // Both are string\n if (isNaN(combo[0]!)) {\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1]!)) {\n return isNaN(an) ? -1 : 1\n }\n\n // Both are numbers\n if (an > bn) {\n return 1\n }\n if (bn > an) {\n return -1\n }\n }\n\n return a.length - b.length\n}\n\n// Exports\n\nexport const sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic,\n}\n\nexport type BuiltInSortingFn = keyof typeof sortingFns\n","import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport {\n BuiltInSortingFn,\n reSplitAlphaNumeric,\n sortingFns,\n} from '../sortingFns'\n\nimport {\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n RowData,\n SortingFns,\n} from '../types'\n\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport interface ColumnSort {\n id: string\n desc: boolean\n}\n\nexport type SortingState = ColumnSort[]\n\nexport interface SortingTableState {\n sorting: SortingState\n}\n\nexport interface SortingFn {\n (rowA: Row, rowB: Row, columnId: string): number\n}\n\nexport type CustomSortingFns = Record<\n string,\n SortingFn\n>\n\nexport type SortingFnOption =\n | 'auto'\n | keyof SortingFns\n | BuiltInSortingFn\n | SortingFn\n\nexport interface SortingColumnDef {\n sortingFn?: SortingFnOption\n sortDescFirst?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n invertSorting?: boolean\n sortUndefined?: false | -1 | 1\n}\n\nexport interface SortingColumn {\n getAutoSortingFn: () => SortingFn\n getAutoSortDir: () => SortDirection\n getSortingFn: () => SortingFn\n getFirstSortDir: () => SortDirection\n getNextSortingOrder: () => SortDirection | false\n getCanSort: () => boolean\n getCanMultiSort: () => boolean\n getSortIndex: () => number\n getIsSorted: () => false | SortDirection\n clearSorting: () => void\n toggleSorting: (desc?: boolean, isMulti?: boolean) => void\n getToggleSortingHandler: () => undefined | ((event: unknown) => void)\n}\n\ninterface SortingOptionsBase {\n manualSorting?: boolean\n onSortingChange?: OnChangeFn\n enableSorting?: boolean\n enableSortingRemoval?: boolean\n enableMultiRemove?: boolean\n enableMultiSort?: boolean\n sortDescFirst?: boolean\n getSortedRowModel?: (table: Table) => () => RowModel\n maxMultiSortColCount?: number\n isMultiSortEvent?: (e: unknown) => boolean\n}\n\ntype ResolvedSortingFns = keyof SortingFns extends never\n ? {\n sortingFns?: Record>\n }\n : {\n sortingFns: Record>\n }\n\nexport interface SortingOptions\n extends SortingOptionsBase,\n ResolvedSortingFns {}\n\nexport interface SortingInstance {\n setSorting: (updater: Updater) => void\n resetSorting: (defaultState?: boolean) => void\n getPreSortedRowModel: () => RowModel\n getSortedRowModel: () => RowModel\n _getSortedRowModel?: () => RowModel\n}\n\n//\n\nexport const Sorting: TableFeature = {\n getInitialState: (state): SortingTableState => {\n return {\n sorting: [],\n ...state,\n }\n },\n\n getDefaultColumnDef: (): SortingColumnDef => {\n return {\n sortingFn: 'auto',\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): SortingOptions => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: (e: unknown) => {\n return (e as MouseEvent).shiftKey\n },\n }\n },\n\n createColumn: (\n column: Column,\n table: Table\n ): SortingColumn => {\n return {\n getAutoSortingFn: () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10)\n\n let isString = false\n\n for (const row of firstRows) {\n const value = row?.getValue(column.id)\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime\n }\n\n if (typeof value === 'string') {\n isString = true\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric\n }\n }\n }\n\n if (isString) {\n return sortingFns.text\n }\n\n return sortingFns.basic\n },\n getAutoSortDir: () => {\n const firstRow = table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n },\n getSortingFn: () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.sortingFn)\n ? column.columnDef.sortingFn\n : column.columnDef.sortingFn === 'auto'\n ? column.getAutoSortingFn()\n : table.options.sortingFns?.[column.columnDef.sortingFn as string] ??\n sortingFns[column.columnDef.sortingFn as BuiltInSortingFn]\n },\n toggleSorting: (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder()\n const hasManualValue = typeof desc !== 'undefined' && desc !== null\n\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old?.find(d => d.id === column.id)\n const existingIndex = old?.findIndex(d => d.id === column.id)\n\n let newSorting: SortingState = []\n\n // What should we do with this sort action?\n let sortAction: 'add' | 'remove' | 'toggle' | 'replace'\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n // Multi-mode\n if (old?.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'add'\n }\n } else {\n // Normal mode\n if (old?.length && existingIndex !== old.length - 1) {\n sortAction = 'replace'\n } else if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'replace'\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove'\n }\n }\n }\n\n if (sortAction === 'add') {\n newSorting = [\n ...old,\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n // Take latest n columns\n newSorting.splice(\n 0,\n newSorting.length -\n (table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER)\n )\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc,\n }\n }\n return d\n })\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id)\n } else {\n newSorting = [\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n }\n\n return newSorting\n })\n },\n\n getFirstSortDir: () => {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n table.options.sortDescFirst ??\n column.getAutoSortDir() === 'desc'\n return sortDescFirst ? 'desc' : 'asc'\n },\n\n getNextSortingOrder: (multi?: boolean) => {\n const firstSortDirection = column.getFirstSortDir()\n const isSorted = column.getIsSorted()\n\n if (!isSorted) {\n return firstSortDirection\n }\n\n if (\n isSorted !== firstSortDirection &&\n (table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n (multi ? table.options.enableMultiRemove ?? true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false\n }\n return isSorted === 'desc' ? 'asc' : 'desc'\n },\n\n getCanSort: () => {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanMultiSort: () => {\n return (\n column.columnDef.enableMultiSort ??\n table.options.enableMultiSort ??\n !!column.accessorFn\n )\n },\n\n getIsSorted: () => {\n const columnSort = table\n .getState()\n .sorting?.find(d => d.id === column.id)\n\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n },\n\n getSortIndex: () =>\n table.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,\n\n clearSorting: () => {\n //clear sorting for just 1 column\n table.setSorting(old =>\n old?.length ? old.filter(d => d.id !== column.id) : []\n )\n },\n\n getToggleSortingHandler: () => {\n const canSort = column.getCanSort()\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column.toggleSorting?.(\n undefined,\n column.getCanMultiSort()\n ? table.options.isMultiSortEvent?.(e)\n : false\n )\n }\n },\n }\n },\n\n createTable: (\n table: Table\n ): SortingInstance => {\n return {\n setSorting: updater => table.options.onSortingChange?.(updater),\n resetSorting: defaultState => {\n table.setSorting(defaultState ? [] : table.initialState?.sorting ?? [])\n },\n getPreSortedRowModel: () => table.getGroupedRowModel(),\n getSortedRowModel: () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table)\n }\n\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel()\n }\n\n return table._getSortedRowModel()\n },\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport {\n Cell,\n Column,\n OnChangeFn,\n Table,\n Updater,\n Row,\n RowData,\n} from '../types'\nimport { makeStateUpdater, memo } from '../utils'\n\nexport type VisibilityState = Record\n\nexport interface VisibilityTableState {\n columnVisibility: VisibilityState\n}\n\nexport interface VisibilityOptions {\n onColumnVisibilityChange?: OnChangeFn\n enableHiding?: boolean\n}\n\nexport interface VisibilityDefaultOptions {\n onColumnVisibilityChange: OnChangeFn\n}\n\nexport interface VisibilityInstance {\n getVisibleFlatColumns: () => Column[]\n getVisibleLeafColumns: () => Column[]\n getLeftVisibleLeafColumns: () => Column[]\n getRightVisibleLeafColumns: () => Column[]\n getCenterVisibleLeafColumns: () => Column[]\n setColumnVisibility: (updater: Updater) => void\n resetColumnVisibility: (defaultState?: boolean) => void\n toggleAllColumnsVisible: (value?: boolean) => void\n getIsAllColumnsVisible: () => boolean\n getIsSomeColumnsVisible: () => boolean\n getToggleAllColumnsVisibilityHandler: () => (event: unknown) => void\n}\n\nexport interface VisibilityColumnDef {\n enableHiding?: boolean\n}\n\nexport interface VisibilityRow {\n _getAllVisibleCells: () => Cell[]\n getVisibleCells: () => Cell[]\n}\n\nexport interface VisibilityColumn {\n getCanHide: () => boolean\n getIsVisible: () => boolean\n toggleVisibility: (value?: boolean) => void\n getToggleVisibilityHandler: () => (event: unknown) => void\n}\n\n//\n\nexport const Visibility: TableFeature = {\n getInitialState: (state): VisibilityTableState => {\n return {\n columnVisibility: {},\n ...state,\n }\n },\n\n getDefaultOptions: (\n table: Table\n ): VisibilityDefaultOptions => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table),\n }\n },\n\n createColumn: (\n column: Column,\n table: Table\n ): VisibilityColumn => {\n return {\n toggleVisibility: value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value ?? !column.getIsVisible(),\n }))\n }\n },\n getIsVisible: () => {\n return table.getState().columnVisibility?.[column.id] ?? true\n },\n\n getCanHide: () => {\n return (\n (column.columnDef.enableHiding ?? true) &&\n (table.options.enableHiding ?? true)\n )\n },\n getToggleVisibilityHandler: () => {\n return (e: unknown) => {\n column.toggleVisibility?.(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n },\n }\n },\n\n createRow: (\n row: Row,\n table: Table\n ): VisibilityRow => {\n return {\n _getAllVisibleCells: memo(\n () => [row.getAllCells(), table.getState().columnVisibility],\n cells => {\n return cells.filter(cell => cell.column.getIsVisible())\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row._getAllVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n getVisibleCells: memo(\n () => [\n row.getLeftVisibleCells(),\n row.getCenterVisibleCells(),\n row.getRightVisibleCells(),\n ],\n (left, center, right) => [...left, ...center, ...right],\n {\n key: process.env.NODE_ENV === 'development' && 'row.getVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n }\n },\n\n createTable: (\n table: Table\n ): VisibilityInstance => {\n const makeVisibleColumnsMethod = (\n key: string,\n getColumns: () => Column[]\n ): (() => Column[]) => {\n return memo(\n () => [\n getColumns(),\n getColumns()\n .filter(d => d.getIsVisible())\n .map(d => d.id)\n .join('_'),\n ],\n columns => {\n return columns.filter(d => d.getIsVisible?.())\n },\n {\n key,\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n )\n }\n\n return {\n getVisibleFlatColumns: makeVisibleColumnsMethod(\n 'getVisibleFlatColumns',\n () => table.getAllFlatColumns()\n ),\n getVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getVisibleLeafColumns',\n () => table.getAllLeafColumns()\n ),\n getLeftVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getLeftVisibleLeafColumns',\n () => table.getLeftLeafColumns()\n ),\n getRightVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getRightVisibleLeafColumns',\n () => table.getRightLeafColumns()\n ),\n getCenterVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getCenterVisibleLeafColumns',\n () => table.getCenterLeafColumns()\n ),\n\n setColumnVisibility: updater =>\n table.options.onColumnVisibilityChange?.(updater),\n\n resetColumnVisibility: defaultState => {\n table.setColumnVisibility(\n defaultState ? {} : table.initialState.columnVisibility ?? {}\n )\n },\n\n toggleAllColumnsVisible: value => {\n value = value ?? !table.getIsAllColumnsVisible()\n\n table.setColumnVisibility(\n table.getAllLeafColumns().reduce(\n (obj, column) => ({\n ...obj,\n [column.id]: !value ? !column.getCanHide?.() : value,\n }),\n {}\n )\n )\n },\n\n getIsAllColumnsVisible: () =>\n !table.getAllLeafColumns().some(column => !column.getIsVisible?.()),\n\n getIsSomeColumnsVisible: () =>\n table.getAllLeafColumns().some(column => column.getIsVisible?.()),\n\n getToggleAllColumnsVisibilityHandler: () => {\n return (e: unknown) => {\n table.toggleAllColumnsVisible(\n ((e as MouseEvent).target as HTMLInputElement)?.checked\n )\n }\n },\n }\n },\n}\n","import { functionalUpdate, memo, RequiredKeys } from '../utils'\n\nimport {\n Updater,\n TableOptionsResolved,\n TableState,\n Table,\n InitialTableState,\n Row,\n Column,\n RowModel,\n ColumnDef,\n TableOptions,\n RowData,\n TableMeta,\n ColumnDefResolved,\n GroupColumnDef,\n} from '../types'\n\n//\nimport { createColumn } from './column'\nimport { Headers } from './headers'\n//\n\nimport { ColumnSizing } from '../features/ColumnSizing'\nimport { Expanding } from '../features/Expanding'\nimport { Filters } from '../features/Filters'\nimport { Grouping } from '../features/Grouping'\nimport { Ordering } from '../features/Ordering'\nimport { Pagination } from '../features/Pagination'\nimport { Pinning } from '../features/Pinning'\nimport { RowSelection } from '../features/RowSelection'\nimport { Sorting } from '../features/Sorting'\nimport { Visibility } from '../features/Visibility'\n\nexport interface TableFeature {\n getDefaultOptions?: (table: any) => any\n getInitialState?: (initialState?: InitialTableState) => any\n createTable?: (table: any) => any\n getDefaultColumnDef?: () => any\n createColumn?: (column: any, table: any) => any\n createHeader?: (column: any, table: any) => any\n createCell?: (cell: any, column: any, row: any, table: any) => any\n createRow?: (row: any, table: any) => any\n}\n\nconst features = [\n Headers,\n Visibility,\n Ordering,\n Pinning,\n Filters,\n Sorting,\n Grouping,\n Expanding,\n Pagination,\n RowSelection,\n ColumnSizing,\n] as const\n\n//\n\nexport interface CoreTableState {}\n\nexport interface CoreOptions {\n data: TData[]\n state: Partial\n onStateChange: (updater: Updater) => void\n debugAll?: boolean\n debugTable?: boolean\n debugHeaders?: boolean\n debugColumns?: boolean\n debugRows?: boolean\n initialState?: InitialTableState\n autoResetAll?: boolean\n mergeOptions?: (\n defaultOptions: TableOptions,\n options: Partial>\n ) => TableOptions\n meta?: TableMeta\n getCoreRowModel: (table: Table) => () => RowModel\n getSubRows?: (originalRow: TData, index: number) => undefined | TData[]\n getRowId?: (originalRow: TData, index: number, parent?: Row) => string\n columns: ColumnDef[]\n defaultColumn?: Partial>\n renderFallbackValue: any\n}\n\nexport interface CoreInstance {\n initialState: TableState\n reset: () => void\n options: RequiredKeys, 'state'>\n setOptions: (newOptions: Updater>) => void\n getState: () => TableState\n setState: (updater: Updater) => void\n _features: readonly TableFeature[]\n _queue: (cb: () => void) => void\n _getRowId: (_: TData, index: number, parent?: Row) => string\n getCoreRowModel: () => RowModel\n _getCoreRowModel?: () => RowModel\n getRowModel: () => RowModel\n getRow: (id: string) => Row\n _getDefaultColumnDef: () => Partial>\n _getColumnDefs: () => ColumnDef[]\n _getAllFlatColumnsById: () => Record>\n getAllColumns: () => Column[]\n getAllFlatColumns: () => Column[]\n getAllLeafColumns: () => Column[]\n getColumn: (columnId: string) => Column\n}\n\nexport function createTable(\n options: TableOptionsResolved\n): Table {\n if (options.debugAll || options.debugTable) {\n console.info('Creating Table Instance...')\n }\n\n let table = { _features: features } as unknown as Table\n\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions?.(table))\n }, {}) as TableOptionsResolved\n\n const mergeOptions = (options: TableOptionsResolved) => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options)\n }\n\n return {\n ...defaultOptions,\n ...options,\n }\n }\n\n const coreInitialState: CoreTableState = {}\n\n let initialState = {\n ...coreInitialState,\n ...(options.initialState ?? {}),\n } as TableState\n\n table._features.forEach(feature => {\n initialState = feature.getInitialState?.(initialState) ?? initialState\n })\n\n const queued: (() => void)[] = []\n let queuedTimeout = false\n\n const coreInstance: CoreInstance = {\n _features: features,\n options: {\n ...defaultOptions,\n ...options,\n },\n initialState,\n _queue: cb => {\n queued.push(cb)\n\n if (!queuedTimeout) {\n queuedTimeout = true\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve()\n .then(() => {\n while (queued.length) {\n queued.shift()!()\n }\n queuedTimeout = false\n })\n .catch(error =>\n setTimeout(() => {\n throw error\n })\n )\n }\n },\n reset: () => {\n table.setState(table.initialState)\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options)\n table.options = mergeOptions(newOptions) as RequiredKeys<\n TableOptionsResolved,\n 'state'\n >\n },\n\n getState: () => {\n return table.options.state as TableState\n },\n\n setState: (updater: Updater) => {\n table.options.onStateChange?.(updater)\n },\n\n _getRowId: (row: TData, index: number, parent?: Row) =>\n table.options.getRowId?.(row, index, parent) ??\n `${parent ? [parent.id, index].join('.') : index}`,\n\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table)\n }\n\n return table._getCoreRowModel!()\n },\n\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return table.getPaginationRowModel()\n },\n getRow: (id: string) => {\n const row = table.getRowModel().rowsById[id]\n\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow expected an ID, but got ${id}`)\n }\n throw new Error()\n }\n\n return row\n },\n _getDefaultColumnDef: memo(\n () => [table.options.defaultColumn],\n defaultColumn => {\n defaultColumn = (defaultColumn ?? {}) as Partial<\n ColumnDef\n >\n\n return {\n header: props => {\n const resolvedColumnDef = props.header.column\n .columnDef as ColumnDefResolved\n\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey\n }\n\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id\n }\n\n return null\n },\n // footer: props => props.header.column.id,\n cell: props => props.renderValue()?.toString?.() ?? null,\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef?.())\n }, {}),\n ...defaultColumn,\n } as Partial>\n },\n {\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n key: process.env.NODE_ENV === 'development' && 'getDefaultColumnDef',\n }\n ),\n\n _getColumnDefs: () => table.options.columns,\n\n getAllColumns: memo(\n () => [table._getColumnDefs()],\n columnDefs => {\n const recurseColumns = (\n columnDefs: ColumnDef[],\n parent?: Column,\n depth = 0\n ): Column[] => {\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent)\n\n const groupingColumnDef = columnDef as GroupColumnDef<\n TData,\n unknown\n >\n\n column.columns = groupingColumnDef.columns\n ? recurseColumns(groupingColumnDef.columns, column, depth + 1)\n : []\n\n return column\n })\n }\n\n return recurseColumns(columnDefs)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getAllFlatColumns: memo(\n () => [table.getAllColumns()],\n allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns()\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllFlatColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n _getAllFlatColumnsById: memo(\n () => [table.getAllFlatColumns()],\n flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column\n return acc\n }, {} as Record>)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllFlatColumnsById',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getAllLeafColumns: memo(\n () => [table.getAllColumns(), table._getOrderColumnsFn()],\n (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns())\n return orderColumns(leafColumns)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getColumn: columnId => {\n const column = table._getAllFlatColumnsById()[columnId]\n\n if (!column) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`[Table] Column with id ${columnId} does not exist.`)\n }\n throw new Error()\n }\n\n return column\n },\n }\n\n Object.assign(table, coreInstance)\n\n table._features.forEach(feature => {\n return Object.assign(table, feature.createTable?.(table))\n })\n\n return table\n}\n","import {\n Column,\n Table,\n AccessorFn,\n ColumnDef,\n RowData,\n ColumnDefResolved,\n} from '../types'\nimport { memo } from '../utils'\n\nexport interface CoreColumn {\n id: string\n depth: number\n accessorFn?: AccessorFn\n columnDef: ColumnDef\n columns: Column[]\n parent?: Column\n getFlatColumns: () => Column[]\n getLeafColumns: () => Column[]\n}\n\nexport function createColumn(\n table: Table,\n columnDef: ColumnDef,\n depth: number,\n parent?: Column\n): Column {\n const defaultColumn = table._getDefaultColumnDef()\n\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef,\n } as ColumnDefResolved\n\n const accessorKey = resolvedColumnDef.accessorKey\n\n let id =\n resolvedColumnDef.id ??\n (accessorKey ? accessorKey.replace('.', '_') : undefined) ??\n (typeof resolvedColumnDef.header === 'string'\n ? resolvedColumnDef.header\n : undefined)\n\n let accessorFn: AccessorFn | undefined\n\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = (originalRow: TData) => {\n let result = originalRow as Record\n\n for (const key of accessorKey.split('.')) {\n result = result[key]\n if (process.env.NODE_ENV !== 'production' && result === undefined) {\n throw new Error(\n `\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`\n )\n }\n }\n\n return result\n }\n } else {\n accessorFn = (originalRow: TData) =>\n (originalRow as any)[resolvedColumnDef.accessorKey]\n }\n }\n\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n resolvedColumnDef.accessorFn\n ? `Columns require an id when using an accessorFn`\n : `Columns require an id when using a non-string header`\n )\n }\n throw new Error()\n }\n\n let column: CoreColumn = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent as any,\n depth,\n columnDef: resolvedColumnDef as ColumnDef,\n columns: [],\n getFlatColumns: memo(\n () => [true],\n () => {\n return [\n column as Column,\n ...column.columns?.flatMap(d => d.getFlatColumns()),\n ]\n },\n {\n key: process.env.NODE_ENV === 'production' && 'column.getFlatColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n getLeafColumns: memo(\n () => [table._getOrderColumnsFn()],\n orderColumns => {\n if (column.columns?.length) {\n let leafColumns = column.columns.flatMap(column =>\n column.getLeafColumns()\n )\n\n return orderColumns(leafColumns)\n }\n\n return [column as Column]\n },\n {\n key: process.env.NODE_ENV === 'production' && 'column.getLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n }\n\n column = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.createColumn?.(column, table))\n }, column)\n\n // Yes, we have to convert table to uknown, because we know more than the compiler here.\n return column as Column\n}\n","import { RowData, Cell, Row, Table } from '../types'\nimport { flattenBy, memo } from '../utils'\nimport { createCell } from './cell'\n\nexport interface CoreRow {\n id: string\n index: number\n original: TData\n depth: number\n _valuesCache: Record\n _uniqueValuesCache: Record\n getValue: (columnId: string) => TValue\n getUniqueValues: (columnId: string) => TValue[]\n renderValue: (columnId: string) => TValue\n subRows: Row[]\n getLeafRows: () => Row[]\n originalSubRows?: TData[]\n getAllCells: () => Cell[]\n _getAllCellsByColumnId: () => Record>\n}\n\nexport const createRow = (\n table: Table,\n id: string,\n original: TData,\n rowIndex: number,\n depth: number,\n subRows?: Row[]\n): Row => {\n let row: CoreRow = {\n id,\n index: rowIndex,\n original,\n depth,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: columnId => {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId]\n }\n\n const column = table.getColumn(columnId)\n\n if (!column.accessorFn) {\n return undefined\n }\n\n row._valuesCache[columnId] = column.accessorFn(\n row.original as TData,\n rowIndex\n )\n\n return row._valuesCache[columnId] as any\n },\n getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId]\n }\n\n const column = table.getColumn(columnId)\n\n if (!column.accessorFn) {\n return undefined\n }\n\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)]\n return row._uniqueValuesCache[columnId]\n }\n\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(\n row.original as TData,\n rowIndex\n )\n\n return row._uniqueValuesCache[columnId] as any\n },\n renderValue: columnId =>\n row.getValue(columnId) ?? table.options.renderFallbackValue,\n subRows: subRows ?? [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getAllCells: memo(\n () => [table.getAllLeafColumns()],\n leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row as Row, column, column.id)\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'row.getAllCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n\n _getAllCellsByColumnId: memo(\n () => [row.getAllCells()],\n allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell\n return acc\n }, {} as Record>)\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row.getAllCellsByColumnId',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n }\n\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i]\n Object.assign(row, feature?.createRow?.(row, table))\n }\n\n return row as Row\n}\n","import { RowData, Cell, Column, Row, Table } from '../types'\nimport { Getter, memo } from '../utils'\n\nexport interface CellContext {\n table: Table\n column: Column\n row: Row\n cell: Cell\n getValue: Getter\n renderValue: Getter\n}\n\nexport interface CoreCell {\n id: string\n getValue: CellContext['getValue']\n renderValue: CellContext['renderValue']\n row: Row\n column: Column\n getContext: () => CellContext\n}\n\nexport function createCell(\n table: Table,\n row: Row,\n column: Column,\n columnId: string\n): Cell {\n const getRenderValue = () =>\n cell.getValue() ?? table.options.renderFallbackValue\n\n const cell: CoreCell = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(\n () => [table, column, row, cell],\n (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell as Cell,\n getValue: cell.getValue,\n renderValue: cell.renderValue,\n }),\n {\n key: process.env.NODE_ENV === 'development' && 'cell.getContext',\n debug: () => table.options.debugAll,\n }\n ),\n }\n\n table._features.forEach(feature => {\n Object.assign(\n cell,\n feature.createCell?.(\n cell as Cell,\n column,\n row as Row,\n table\n )\n )\n }, {})\n\n return cell as Cell\n}\n","import {\n AccessorFn,\n ColumnDef,\n DisplayColumnDef,\n GroupColumnDef,\n IdentifiedColumnDef,\n RowData,\n} from './types'\nimport { DeepKeys, DeepValue, RequiredKeys } from './utils'\n\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys = 'nested.foo.0.bar'\n// const test2: DeepKeys = 'nested.bar'\n\n// const helper = createColumnHelper()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nexport type ColumnHelper = {\n accessor: <\n TAccessor extends AccessorFn | DeepKeys,\n TValue extends TAccessor extends AccessorFn\n ? TReturn\n : TAccessor extends DeepKeys\n ? DeepValue\n : never\n >(\n accessor: TAccessor,\n column: TAccessor extends AccessorFn\n ? DisplayColumnDef\n : IdentifiedColumnDef\n ) => ColumnDef\n display: (column: DisplayColumnDef) => ColumnDef\n group: (column: GroupColumnDef) => ColumnDef\n}\n\nexport function createColumnHelper<\n TData extends RowData\n>(): ColumnHelper {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function'\n ? ({\n ...column,\n accessorFn: accessor,\n } as any)\n : {\n ...column,\n accessorKey: accessor,\n }\n },\n display: column => column as ColumnDef,\n group: column => column as ColumnDef,\n }\n}\n","import { createRow } from '../core/row'\nimport { Table, Row, RowModel, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getCoreRowModel(): (\n table: Table\n) => () => RowModel {\n return table =>\n memo(\n () => [table.options.data],\n (\n data\n ): {\n rows: Row[]\n flatRows: Row[]\n rowsById: Record>\n } => {\n const rowModel: RowModel = {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n\n const accessRows = (\n originalRows: TData[],\n depth = 0,\n parent?: Row\n ): Row[] => {\n const rows = [] as Row[]\n\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\n // if (!id) {\n // if (process.env.NODE_ENV !== 'production') {\n // throw new Error(`getRowId expected an ID, but got ${id}`)\n // }\n // }\n\n // Make the row\n const row = createRow(\n table,\n table._getRowId(originalRows[i]!, i, parent),\n originalRows[i]!,\n i,\n depth\n )\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row)\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row\n // Push table row into parent\n rows.push(row)\n\n // Get the original subrows\n if (table.options.getSubRows) {\n row.originalSubRows = table.options.getSubRows(\n originalRows[i]!,\n i\n )\n\n // Then recursively access them\n if (row.originalSubRows?.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row)\n }\n }\n }\n\n return rows\n }\n\n rowModel.rows = accessRows(data)\n\n return rowModel\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._autoResetPageIndex()\n },\n }\n )\n}\n","import { createRow } from '../core/row'\nimport { Row, RowModel, Table, RowData } from '../types'\n\nexport function filterRows(\n rows: Row[],\n filterRowImpl: (row: Row) => any,\n table: Table\n) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table)\n }\n\n return filterRowModelFromRoot(rows, filterRowImpl, table)\n}\n\nexport function filterRowModelFromLeafs(\n rowsToFilter: Row[],\n filterRow: (row: Row) => Row[],\n table: Table\n): RowModel {\n const newFilteredFlatRows: Row[] = []\n const newFilteredRowsById: Record> = {}\n const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\n\n const recurseFilterRows = (rowsToFilter: Row[], depth = 0) => {\n const rows: Row[] = []\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i]!\n\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth\n )\n newRow.columnFilters = row.columnFilters\n\n if (row.subRows?.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1)\n row = newRow\n\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredRowsById[i] = row\n continue\n }\n\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredRowsById[i] = row\n continue\n }\n } else {\n row = newRow\n if (filterRow(row)) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredRowsById[i] = row\n }\n }\n }\n\n return rows\n }\n\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById,\n }\n}\n\nexport function filterRowModelFromRoot(\n rowsToFilter: Row[],\n filterRow: (row: Row) => any,\n table: Table\n): RowModel {\n const newFilteredFlatRows: Row[] = []\n const newFilteredRowsById: Record> = {}\n const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\n\n // Filters top level and nested rows\n const recurseFilterRows = (rowsToFilter: Row[], depth = 0) => {\n // Filter from parents downward first\n\n const rows = []\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i]!\n\n const pass = filterRow(row)\n\n if (pass) {\n if (row.subRows?.length && depth < maxDepth) {\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth\n )\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1)\n row = newRow\n }\n\n rows.push(row)\n newFilteredFlatRows.push(row)\n newFilteredRowsById[row.id] = row\n }\n }\n\n return rows\n }\n\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById,\n }\n}\n","import { ResolvedColumnFilter } from '../features/Filters'\nimport { Table, RowModel, Row, RowData } from '../types'\nimport { memo } from '../utils'\nimport { filterRows } from './filterRowsUtils'\n\nexport function getFilteredRowModel(): (\n table: Table\n) => () => RowModel {\n return table =>\n memo(\n () => [\n table.getPreFilteredRowModel(),\n table.getState().columnFilters,\n table.getState().globalFilter,\n ],\n (rowModel, columnFilters, globalFilter) => {\n if (\n !rowModel.rows.length ||\n (!columnFilters?.length && !globalFilter)\n ) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i]!.columnFilters = {}\n rowModel.flatRows[i]!.columnFiltersMeta = {}\n }\n return rowModel\n }\n\n const resolvedColumnFilters: ResolvedColumnFilter[] = []\n const resolvedGlobalFilters: ResolvedColumnFilter[] = []\n\n ;(columnFilters ?? []).forEach(d => {\n const column = table.getColumn(d.id)\n\n if (!column) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Table: Could not find a column to filter with columnId: ${d.id}`\n )\n }\n }\n\n const filterFn = column.getFilterFn()\n\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`\n )\n }\n return\n }\n\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: filterFn.resolveFilterValue?.(d.value) ?? d.value,\n })\n })\n\n const filterableIds = columnFilters.map(d => d.id)\n\n const globalFilterFn = table.getGlobalFilterFn()\n\n const globallyFilterableColumns = table\n .getAllLeafColumns()\n .filter(column => column.getCanGlobalFilter())\n\n if (\n globalFilter &&\n globalFilterFn &&\n globallyFilterableColumns.length\n ) {\n filterableIds.push('__global__')\n\n globallyFilterableColumns.forEach(column => {\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue:\n globalFilterFn.resolveFilterValue?.(globalFilter) ??\n globalFilter,\n })\n })\n }\n\n let currentColumnFilter\n let currentGlobalFilter\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j]!\n\n row.columnFilters = {}\n\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i]!\n const id = currentColumnFilter.id\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(\n row,\n id,\n currentColumnFilter.resolvedValue,\n filterMeta => {\n row.columnFiltersMeta[id] = filterMeta\n }\n )\n }\n }\n\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i]!\n const id = currentGlobalFilter.id\n // Tag the row with the first truthy global filter state\n if (\n currentGlobalFilter.filterFn(\n row,\n id,\n currentGlobalFilter.resolvedValue,\n filterMeta => {\n row.columnFiltersMeta[id] = filterMeta\n }\n )\n ) {\n row.columnFilters.__global__ = true\n break\n }\n }\n\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false\n }\n }\n }\n\n const filterRowsImpl = (row: Row) => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]!] === false) {\n return false\n }\n }\n return true\n }\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getFilteredRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._autoResetPageIndex()\n },\n }\n )\n}\n","import { Table, RowModel, Row, RowData } from '../types'\nimport { memo } from '../utils'\nimport { filterRows } from './filterRowsUtils'\n\nexport function getFacetedRowModel(): (\n table: Table,\n columnId: string\n) => () => RowModel {\n return (table, columnId) =>\n memo(\n () => [\n table.getPreFilteredRowModel(),\n table.getState().columnFilters,\n table.getState().globalFilter,\n table.getFilteredRowModel(),\n ],\n (preRowModel, columnFilters, globalFilter) => {\n if (\n !preRowModel.rows.length ||\n (!columnFilters?.length && !globalFilter)\n ) {\n return preRowModel\n }\n\n const filterableIds = [\n ...columnFilters.map(d => d.id).filter(d => d !== columnId),\n globalFilter ? '__global__' : undefined,\n ].filter(Boolean) as string[]\n\n const filterRowsImpl = (row: Row) => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]!] === false) {\n return false\n }\n }\n return true\n }\n\n return filterRows(preRowModel.rows, filterRowsImpl, table)\n },\n {\n key:\n process.env.NODE_ENV === 'development' &&\n 'getFacetedRowModel_' + columnId,\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {},\n }\n )\n}\n","import { Table, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getFacetedUniqueValues(): (\n table: Table,\n columnId: string\n) => () => Map {\n return (table, columnId) =>\n memo(\n () => [table.getColumn(columnId).getFacetedRowModel()],\n facetedRowModel => {\n let facetedUniqueValues = new Map()\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values =\n facetedRowModel.flatRows[i]!.getUniqueValues(columnId)\n\n for (let j = 0; j < values.length; j++) {\n const value = values[j]!\n\n if (facetedUniqueValues.has(value)) {\n facetedUniqueValues.set(\n value,\n (facetedUniqueValues.get(value) ?? 0) + 1\n )\n } else {\n facetedUniqueValues.set(value, 1)\n }\n }\n }\n\n return facetedUniqueValues\n },\n {\n key:\n process.env.NODE_ENV === 'development' &&\n 'getFacetedUniqueValues_' + columnId,\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {},\n }\n )\n}\n","import { Table, Row, RowModel, RowData } from '../types'\nimport { SortingFn } from '../features/Sorting'\nimport { memo } from '../utils'\n\nexport function getSortedRowModel(): (\n table: Table\n) => () => RowModel {\n return table =>\n memo(\n () => [table.getState().sorting, table.getPreSortedRowModel()],\n (sorting, rowModel) => {\n if (!rowModel.rows.length || !sorting?.length) {\n return rowModel\n }\n\n const sortingState = table.getState().sorting\n\n const sortedFlatRows: Row[] = []\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort =>\n table.getColumn(sort.id).getCanSort()\n )\n\n const columnInfoById: Record<\n string,\n {\n sortUndefined?: false | -1 | 1\n invertSorting?: boolean\n sortingFn: SortingFn\n }\n > = {}\n\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id)\n\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn(),\n }\n })\n\n const sortData = (rows: Row[]) => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = [...rows]\n\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n const sortEntry = availableSorting[i]!\n const columnInfo = columnInfoById[sortEntry.id]!\n const isDesc = sortEntry?.desc ?? false\n\n if (columnInfo.sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id)\n const bValue = rowB.getValue(sortEntry.id)\n\n const aUndefined = typeof aValue === 'undefined'\n const bUndefined = typeof bValue === 'undefined'\n\n if (aUndefined || bUndefined) {\n return aUndefined && bUndefined\n ? 0\n : aUndefined\n ? columnInfo.sortUndefined\n : -columnInfo.sortUndefined\n }\n }\n\n // This function should always return in ascending order\n let sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id)\n\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1\n }\n\n if (columnInfo.invertSorting) {\n sortInt *= -1\n }\n\n return sortInt\n }\n }\n\n return rowA.index - rowB.index\n })\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n sortedFlatRows.push(row)\n if (row.subRows?.length) {\n row.subRows = sortData(row.subRows);\n }\n })\n\n return sortedData\n }\n\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById,\n }\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getSortedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._autoResetPageIndex()\n },\n }\n )\n}\n","import { Table, Row, RowModel, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getExpandedRowModel(): (\n table: Table\n) => () => RowModel {\n return table =>\n memo(\n () => [\n table.getState().expanded,\n table.getPreExpandedRowModel(),\n table.options.paginateExpandedRows,\n ],\n (expanded, rowModel, paginateExpandedRows) => {\n if (\n !rowModel.rows.length ||\n (expanded !== true && !Object.keys(expanded ?? {}).length)\n ) {\n return rowModel\n }\n\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel\n }\n\n return expandRows(rowModel)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getExpandedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n )\n}\n\nexport function expandRows(rowModel: RowModel) {\n const expandedRows: Row[] = []\n\n const handleRow = (row: Row) => {\n expandedRows.push(row)\n\n if (row.subRows?.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow)\n }\n }\n\n rowModel.rows.forEach(handleRow)\n\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById,\n }\n}\n","import { Table, RowModel, Row, RowData } from '../types'\nimport { memo } from '../utils'\nimport { expandRows } from './getExpandedRowModel'\n\nexport function getPaginationRowModel(opts?: {\n initialSync: boolean\n}): (table: Table) => () => RowModel {\n return table =>\n memo(\n () => [\n table.getState().pagination,\n table.getPrePaginationRowModel(),\n table.options.paginateExpandedRows\n ? undefined\n : table.getState().expanded,\n ],\n (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel\n }\n\n const { pageSize, pageIndex } = pagination\n let { rows, flatRows, rowsById } = rowModel\n const pageStart = pageSize * pageIndex\n const pageEnd = pageStart + pageSize\n\n rows = rows.slice(pageStart, pageEnd)\n\n let paginatedRowModel: RowModel\n\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById,\n })\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById,\n }\n }\n\n paginatedRowModel.flatRows = []\n\n const handleRow = (row: Row) => {\n paginatedRowModel.flatRows.push(row)\n if (row.subRows.length) {\n row.subRows.forEach(handleRow)\n }\n }\n\n paginatedRowModel.rows.forEach(handleRow)\n\n return paginatedRowModel\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getPaginationRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n )\n}\n","import * as React from 'react'\nexport * from '@tanstack/table-core'\n\nimport {\n TableOptions,\n TableOptionsResolved,\n RowData,\n createTable,\n} from '@tanstack/table-core'\n\nexport type Renderable = React.ReactNode | React.ComponentType\n\n//\n\nexport function flexRender(\n Comp: Renderable,\n props: TProps\n): React.ReactNode | JSX.Element {\n return !Comp ? null : isReactComponent(Comp) ? (\n \n ) : (\n Comp\n )\n}\n\nfunction isReactComponent(\n component: unknown\n): component is React.ComponentType {\n return (\n isClassComponent(component) ||\n typeof component === 'function' ||\n isExoticComponent(component)\n )\n}\n\nfunction isClassComponent(component: any) {\n return (\n typeof component === 'function' &&\n (() => {\n const proto = Object.getPrototypeOf(component)\n return proto.prototype && proto.prototype.isReactComponent\n })()\n )\n}\n\nfunction isExoticComponent(component: any) {\n return (\n typeof component === 'object' &&\n typeof component.$$typeof === 'symbol' &&\n ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description)\n )\n}\n\nexport function useReactTable(\n options: TableOptions\n) {\n // Compose in the generic options to the user options\n const resolvedOptions: TableOptionsResolved = {\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n renderFallbackValue: null,\n ...options,\n }\n\n // Create a new table and store it in state\n const [tableRef] = React.useState(() => ({\n current: createTable(resolvedOptions),\n }))\n\n // By default, manage table state here using the table's initial state\n const [state, setState] = React.useState(() => tableRef.current.initialState)\n\n // Compose the default state above with any user state. This will allow the user\n // to only control a subset of the state if desired.\n tableRef.current.setOptions(prev => ({\n ...prev,\n ...options,\n state: {\n ...state,\n ...options.state,\n },\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n setState(updater)\n options.onStateChange?.(updater)\n },\n }))\n\n return tableRef.current\n}\n","import { useEffect, useLayoutEffect } from 'react';\nimport { isBrowser } from './misc/util';\nvar useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;\n","import { useMemo, useState } from 'react';\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';\nimport { isBrowser, noop } from './misc/util';\nvar defaultState = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n};\nfunction useMeasure() {\n var _a = useState(null), element = _a[0], ref = _a[1];\n var _b = useState(defaultState), rect = _b[0], setRect = _b[1];\n var observer = useMemo(function () {\n return new window.ResizeObserver(function (entries) {\n if (entries[0]) {\n var _a = entries[0].contentRect, x = _a.x, y = _a.y, width = _a.width, height = _a.height, top_1 = _a.top, left = _a.left, bottom = _a.bottom, right = _a.right;\n setRect({ x: x, y: y, width: width, height: height, top: top_1, left: left, bottom: bottom, right: right });\n }\n });\n }, []);\n useIsomorphicLayoutEffect(function () {\n if (!element)\n return;\n observer.observe(element);\n return function () {\n observer.disconnect();\n };\n }, [element]);\n return [ref, rect];\n}\nexport default isBrowser && typeof window.ResizeObserver !== 'undefined'\n ? useMeasure\n : (function () { return [noop, defaultState]; });\n","import { FC, HTMLAttributes } from 'react';\n\nexport const TableSortAscButton: FC> = ({\n ...rest\n}) => {\n return (\n
    \n \n
    \n );\n};\n\nexport const TableSortDescButton: FC> = ({\n ...rest\n}) => {\n return (\n
    \n \n
    \n );\n};\n","export interface DropdownMenuButtonProps {\n identifier: string;\n buttonClasses?: string;\n iconClasses?: string;\n isDisabled?: boolean;\n children: JSX.Element | JSX.Element[];\n onClick: () => void;\n}\n\nconst DropdownMenuButton = ({\n identifier,\n buttonClasses,\n iconClasses,\n isDisabled = false,\n children,\n onClick\n}: DropdownMenuButtonProps) => {\n return (\n <>\n onClick()}\n >\n {iconClasses ? : <>}\n {children}\n \n \n );\n};\nexport default DropdownMenuButton;\n","const characterMap: Record = {\n À: 'A',\n Á: 'A',\n Â: 'A',\n Ã: 'A',\n Ä: 'A',\n Å: 'A',\n Ấ: 'A',\n Ắ: 'A',\n Ẳ: 'A',\n Ẵ: 'A',\n Ặ: 'A',\n Æ: 'AE',\n Ầ: 'A',\n Ằ: 'A',\n Ȃ: 'A',\n Ç: 'C',\n Ḉ: 'C',\n È: 'E',\n É: 'E',\n Ê: 'E',\n Ë: 'E',\n Ế: 'E',\n Ḗ: 'E',\n Ề: 'E',\n Ḕ: 'E',\n Ḝ: 'E',\n Ȇ: 'E',\n Ì: 'I',\n Í: 'I',\n Î: 'I',\n Ï: 'I',\n Ḯ: 'I',\n Ȋ: 'I',\n Ð: 'D',\n Ñ: 'N',\n Ò: 'O',\n Ó: 'O',\n Ô: 'O',\n Õ: 'O',\n Ö: 'O',\n Ø: 'O',\n Ố: 'O',\n Ṍ: 'O',\n Ṓ: 'O',\n Ȏ: 'O',\n Ù: 'U',\n Ú: 'U',\n Û: 'U',\n Ü: 'U',\n Ý: 'Y',\n à: 'a',\n á: 'a',\n â: 'a',\n ã: 'a',\n ä: 'a',\n å: 'a',\n ấ: 'a',\n ắ: 'a',\n ẳ: 'a',\n ẵ: 'a',\n ặ: 'a',\n æ: 'ae',\n ầ: 'a',\n ằ: 'a',\n ȃ: 'a',\n ç: 'c',\n ḉ: 'c',\n è: 'e',\n é: 'e',\n ê: 'e',\n ë: 'e',\n ế: 'e',\n ḗ: 'e',\n ề: 'e',\n ḕ: 'e',\n ḝ: 'e',\n ȇ: 'e',\n ì: 'i',\n í: 'i',\n î: 'i',\n ï: 'i',\n ḯ: 'i',\n ȋ: 'i',\n ð: 'd',\n ñ: 'n',\n ò: 'o',\n ó: 'o',\n ô: 'o',\n õ: 'o',\n ö: 'o',\n ø: 'o',\n ố: 'o',\n ṍ: 'o',\n ṓ: 'o',\n ȏ: 'o',\n ù: 'u',\n ú: 'u',\n û: 'u',\n ü: 'u',\n ý: 'y',\n ÿ: 'y',\n Ā: 'A',\n ā: 'a',\n Ă: 'A',\n ă: 'a',\n Ą: 'A',\n ą: 'a',\n Ć: 'C',\n ć: 'c',\n Ĉ: 'C',\n ĉ: 'c',\n Ċ: 'C',\n ċ: 'c',\n Č: 'C',\n č: 'c',\n C̆: 'C',\n c̆: 'c',\n Ď: 'D',\n ď: 'd',\n Đ: 'D',\n đ: 'd',\n Ē: 'E',\n ē: 'e',\n Ĕ: 'E',\n ĕ: 'e',\n Ė: 'E',\n ė: 'e',\n Ę: 'E',\n ę: 'e',\n Ě: 'E',\n ě: 'e',\n Ĝ: 'G',\n Ǵ: 'G',\n ĝ: 'g',\n ǵ: 'g',\n Ğ: 'G',\n ğ: 'g',\n Ġ: 'G',\n ġ: 'g',\n Ģ: 'G',\n ģ: 'g',\n Ĥ: 'H',\n ĥ: 'h',\n Ħ: 'H',\n ħ: 'h',\n Ḫ: 'H',\n ḫ: 'h',\n Ĩ: 'I',\n ĩ: 'i',\n Ī: 'I',\n ī: 'i',\n Ĭ: 'I',\n ĭ: 'i',\n Į: 'I',\n į: 'i',\n İ: 'I',\n ı: 'i',\n IJ: 'IJ',\n ij: 'ij',\n Ĵ: 'J',\n ĵ: 'j',\n Ķ: 'K',\n ķ: 'k',\n Ḱ: 'K',\n ḱ: 'k',\n K̆: 'K',\n k̆: 'k',\n Ĺ: 'L',\n ĺ: 'l',\n Ļ: 'L',\n ļ: 'l',\n Ľ: 'L',\n ľ: 'l',\n Ŀ: 'L',\n ŀ: 'l',\n Ł: 'l',\n ł: 'l',\n Ḿ: 'M',\n ḿ: 'm',\n M̆: 'M',\n m̆: 'm',\n Ń: 'N',\n ń: 'n',\n Ņ: 'N',\n ņ: 'n',\n Ň: 'N',\n ň: 'n',\n ʼn: 'n',\n N̆: 'N',\n n̆: 'n',\n Ō: 'O',\n ō: 'o',\n Ŏ: 'O',\n ŏ: 'o',\n Ő: 'O',\n ő: 'o',\n Œ: 'OE',\n œ: 'oe',\n P̆: 'P',\n p̆: 'p',\n Ŕ: 'R',\n ŕ: 'r',\n Ŗ: 'R',\n ŗ: 'r',\n Ř: 'R',\n ř: 'r',\n R̆: 'R',\n r̆: 'r',\n Ȓ: 'R',\n ȓ: 'r',\n Ś: 'S',\n ś: 's',\n Ŝ: 'S',\n ŝ: 's',\n Ş: 'S',\n Ș: 'S',\n ș: 's',\n ş: 's',\n Š: 'S',\n š: 's',\n Ţ: 'T',\n ţ: 't',\n ț: 't',\n Ț: 'T',\n Ť: 'T',\n ť: 't',\n Ŧ: 'T',\n ŧ: 't',\n T̆: 'T',\n t̆: 't',\n Ũ: 'U',\n ũ: 'u',\n Ū: 'U',\n ū: 'u',\n Ŭ: 'U',\n ŭ: 'u',\n Ů: 'U',\n ů: 'u',\n Ű: 'U',\n ű: 'u',\n Ų: 'U',\n ų: 'u',\n Ȗ: 'U',\n ȗ: 'u',\n V̆: 'V',\n v̆: 'v',\n Ŵ: 'W',\n ŵ: 'w',\n Ẃ: 'W',\n ẃ: 'w',\n X̆: 'X',\n x̆: 'x',\n Ŷ: 'Y',\n ŷ: 'y',\n Ÿ: 'Y',\n Y̆: 'Y',\n y̆: 'y',\n Ź: 'Z',\n ź: 'z',\n Ż: 'Z',\n ż: 'z',\n Ž: 'Z',\n ž: 'z',\n ſ: 's',\n ƒ: 'f',\n Ơ: 'O',\n ơ: 'o',\n Ư: 'U',\n ư: 'u',\n Ǎ: 'A',\n ǎ: 'a',\n Ǐ: 'I',\n ǐ: 'i',\n Ǒ: 'O',\n ǒ: 'o',\n Ǔ: 'U',\n ǔ: 'u',\n Ǖ: 'U',\n ǖ: 'u',\n Ǘ: 'U',\n ǘ: 'u',\n Ǚ: 'U',\n ǚ: 'u',\n Ǜ: 'U',\n ǜ: 'u',\n Ứ: 'U',\n ứ: 'u',\n Ṹ: 'U',\n ṹ: 'u',\n Ǻ: 'A',\n ǻ: 'a',\n Ǽ: 'AE',\n ǽ: 'ae',\n Ǿ: 'O',\n ǿ: 'o',\n Þ: 'TH',\n þ: 'th',\n Ṕ: 'P',\n ṕ: 'p',\n Ṥ: 'S',\n ṥ: 's',\n X́: 'X',\n x́: 'x',\n Ѓ: 'Г',\n ѓ: 'г',\n Ќ: 'К',\n ќ: 'к',\n A̋: 'A',\n a̋: 'a',\n E̋: 'E',\n e̋: 'e',\n I̋: 'I',\n i̋: 'i',\n Ǹ: 'N',\n ǹ: 'n',\n Ồ: 'O',\n ồ: 'o',\n Ṑ: 'O',\n ṑ: 'o',\n Ừ: 'U',\n ừ: 'u',\n Ẁ: 'W',\n ẁ: 'w',\n Ỳ: 'Y',\n ỳ: 'y',\n Ȁ: 'A',\n ȁ: 'a',\n Ȅ: 'E',\n ȅ: 'e',\n Ȉ: 'I',\n ȉ: 'i',\n Ȍ: 'O',\n ȍ: 'o',\n Ȑ: 'R',\n ȑ: 'r',\n Ȕ: 'U',\n ȕ: 'u',\n B̌: 'B',\n b̌: 'b',\n Č̣: 'C',\n č̣: 'c',\n Ê̌: 'E',\n ê̌: 'e',\n F̌: 'F',\n f̌: 'f',\n Ǧ: 'G',\n ǧ: 'g',\n Ȟ: 'H',\n ȟ: 'h',\n J̌: 'J',\n ǰ: 'j',\n Ǩ: 'K',\n ǩ: 'k',\n M̌: 'M',\n m̌: 'm',\n P̌: 'P',\n p̌: 'p',\n Q̌: 'Q',\n q̌: 'q',\n Ř̩: 'R',\n ř̩: 'r',\n Ṧ: 'S',\n ṧ: 's',\n V̌: 'V',\n v̌: 'v',\n W̌: 'W',\n w̌: 'w',\n X̌: 'X',\n x̌: 'x',\n Y̌: 'Y',\n y̌: 'y',\n A̧: 'A',\n a̧: 'a',\n B̧: 'B',\n b̧: 'b',\n Ḑ: 'D',\n ḑ: 'd',\n Ȩ: 'E',\n ȩ: 'e',\n Ɛ̧: 'E',\n ɛ̧: 'e',\n Ḩ: 'H',\n ḩ: 'h',\n I̧: 'I',\n i̧: 'i',\n Ɨ̧: 'I',\n ɨ̧: 'i',\n M̧: 'M',\n m̧: 'm',\n O̧: 'O',\n o̧: 'o',\n Q̧: 'Q',\n q̧: 'q',\n U̧: 'U',\n u̧: 'u',\n X̧: 'X',\n x̧: 'x',\n Z̧: 'Z',\n z̧: 'z',\n}\n\nconst chars = Object.keys(characterMap).join('|')\nconst allAccents = new RegExp(chars, 'g')\n\nexport function removeAccents(str: string) {\n return str.replace(allAccents, match => {\n return characterMap[match]!\n })\n}\n","/**\n * @name match-sorter\n * @license MIT license.\n * @copyright (c) 2099 Kent C. Dodds\n * @author Kent C. Dodds (https://kentcdodds.com)\n */\n\n// This is a fork of match-sorter. Instead of offering\n// a unified API for filtering and sorting in a single pass,\n// match-sorter-utils provides the lower-level utilities of\n// ranking items and comparing ranks in a way that can\n// be incrementally applied to a system rather than\n// all-at-once.\n\n// 1. Use the rankItem function to rank an item\n// 2. Use the resulting rankingInfo.passed to filter\n// 3. Use the resulting rankingInfo.rank to sort\n\n// For bundling purposes (mainly remove-accents not being esm safe/ready),\n// we've also hard-coded remove-accents into this source.\n// The remove-accents package is still included as a dependency\n// for attribution purposes, but it will not be imported and bundled.\n\nimport { removeAccents } from './remove-accents'\n\nexport type AccessorAttributes = {\n threshold?: Ranking\n maxRanking: Ranking\n minRanking: Ranking\n}\n\nexport interface RankingInfo {\n rankedValue: any\n rank: Ranking\n accessorIndex: number\n accessorThreshold: Ranking | undefined\n passed: boolean\n}\n\nexport interface AccessorOptions {\n accessor: AccessorFn\n threshold?: Ranking\n maxRanking?: Ranking\n minRanking?: Ranking\n}\n\nexport type AccessorFn = (item: TItem) => string | Array\n\nexport type Accessor = AccessorFn | AccessorOptions\n\nexport interface RankItemOptions {\n accessors?: ReadonlyArray>\n threshold?: Ranking\n keepDiacritics?: boolean\n}\n\nexport const rankings = {\n CASE_SENSITIVE_EQUAL: 7,\n EQUAL: 6,\n STARTS_WITH: 5,\n WORD_STARTS_WITH: 4,\n CONTAINS: 3,\n ACRONYM: 2,\n MATCHES: 1,\n NO_MATCH: 0,\n} as const\n\nexport type Ranking = typeof rankings[keyof typeof rankings]\n\n/**\n * Gets the highest ranking for value for the given item based on its values for the given keys\n * @param {*} item - the item to rank\n * @param {Array} keys - the keys to get values from the item for the ranking\n * @param {String} value - the value to rank against\n * @param {Object} options - options to control the ranking\n * @return {{rank: Number, accessorIndex: Number, accessorThreshold: Number}} - the highest ranking\n */\nexport function rankItem(\n item: TItem,\n value: string,\n options?: RankItemOptions\n): RankingInfo {\n options = options || {}\n\n options.threshold = options.threshold ?? rankings.MATCHES\n\n if (!options.accessors) {\n // if keys is not specified, then we assume the item given is ready to be matched\n const rank = getMatchRanking(item as unknown as string, value, options)\n return {\n // ends up being duplicate of 'item' in matches but consistent\n rankedValue: item,\n rank,\n accessorIndex: -1,\n accessorThreshold: options.threshold,\n passed: rank >= options.threshold,\n }\n }\n\n const valuesToRank = getAllValuesToRank(item, options.accessors)\n\n const rankingInfo: RankingInfo = {\n rankedValue: item,\n rank: rankings.NO_MATCH as Ranking,\n accessorIndex: -1,\n accessorThreshold: options.threshold,\n passed: false,\n }\n\n for (let i = 0; i < valuesToRank.length; i++) {\n const rankValue = valuesToRank[i]!\n\n let newRank = getMatchRanking(rankValue.itemValue, value, options)\n\n const {\n minRanking,\n maxRanking,\n threshold = options.threshold,\n } = rankValue.attributes\n\n if (newRank < minRanking && newRank >= rankings.MATCHES) {\n newRank = minRanking\n } else if (newRank > maxRanking) {\n newRank = maxRanking\n }\n\n newRank = Math.min(newRank, maxRanking) as Ranking\n\n if (newRank >= threshold && newRank > rankingInfo.rank) {\n rankingInfo.rank = newRank\n rankingInfo.passed = true\n rankingInfo.accessorIndex = i\n rankingInfo.accessorThreshold = threshold\n rankingInfo.rankedValue = rankValue.itemValue\n }\n }\n\n return rankingInfo\n}\n\n/**\n * Gives a rankings score based on how well the two strings match.\n * @param {String} testString - the string to test against\n * @param {String} stringToRank - the string to rank\n * @param {Object} options - options for the match (like keepDiacritics for comparison)\n * @returns {Number} the ranking for how well stringToRank matches testString\n */\nfunction getMatchRanking(\n testString: string,\n stringToRank: string,\n options: RankItemOptions\n): Ranking {\n testString = prepareValueForComparison(testString, options)\n stringToRank = prepareValueForComparison(stringToRank, options)\n\n // too long\n if (stringToRank.length > testString.length) {\n return rankings.NO_MATCH\n }\n\n // case sensitive equals\n if (testString === stringToRank) {\n return rankings.CASE_SENSITIVE_EQUAL\n }\n\n // Lower casing before further comparison\n testString = testString.toLowerCase()\n stringToRank = stringToRank.toLowerCase()\n\n // case insensitive equals\n if (testString === stringToRank) {\n return rankings.EQUAL\n }\n\n // starts with\n if (testString.startsWith(stringToRank)) {\n return rankings.STARTS_WITH\n }\n\n // word starts with\n if (testString.includes(` ${stringToRank}`)) {\n return rankings.WORD_STARTS_WITH\n }\n\n // contains\n if (testString.includes(stringToRank)) {\n return rankings.CONTAINS\n } else if (stringToRank.length === 1) {\n // If the only character in the given stringToRank\n // isn't even contained in the testString, then\n // it's definitely not a match.\n return rankings.NO_MATCH\n }\n\n // acronym\n if (getAcronym(testString).includes(stringToRank)) {\n return rankings.ACRONYM\n }\n\n // will return a number between rankings.MATCHES and\n // rankings.MATCHES + 1 depending on how close of a match it is.\n return getClosenessRanking(testString, stringToRank)\n}\n\n/**\n * Generates an acronym for a string.\n *\n * @param {String} string the string for which to produce the acronym\n * @returns {String} the acronym\n */\nfunction getAcronym(string: string): string {\n let acronym = ''\n const wordsInString = string.split(' ')\n wordsInString.forEach(wordInString => {\n const splitByHyphenWords = wordInString.split('-')\n splitByHyphenWords.forEach(splitByHyphenWord => {\n acronym += splitByHyphenWord.substr(0, 1)\n })\n })\n return acronym\n}\n\n/**\n * Returns a score based on how spread apart the\n * characters from the stringToRank are within the testString.\n * A number close to rankings.MATCHES represents a loose match. A number close\n * to rankings.MATCHES + 1 represents a tighter match.\n * @param {String} testString - the string to test against\n * @param {String} stringToRank - the string to rank\n * @returns {Number} the number between rankings.MATCHES and\n * rankings.MATCHES + 1 for how well stringToRank matches testString\n */\nfunction getClosenessRanking(\n testString: string,\n stringToRank: string\n): Ranking {\n let matchingInOrderCharCount = 0\n let charNumber = 0\n function findMatchingCharacter(\n matchChar: undefined | string,\n string: string,\n index: number\n ) {\n for (let j = index, J = string.length; j < J; j++) {\n const stringChar = string[j]\n if (stringChar === matchChar) {\n matchingInOrderCharCount += 1\n return j + 1\n }\n }\n return -1\n }\n function getRanking(spread: number) {\n const spreadPercentage = 1 / spread\n const inOrderPercentage = matchingInOrderCharCount / stringToRank.length\n const ranking = rankings.MATCHES + inOrderPercentage * spreadPercentage\n return ranking as Ranking\n }\n const firstIndex = findMatchingCharacter(stringToRank[0], testString, 0)\n if (firstIndex < 0) {\n return rankings.NO_MATCH\n }\n charNumber = firstIndex\n for (let i = 1, I = stringToRank.length; i < I; i++) {\n const matchChar = stringToRank[i]\n charNumber = findMatchingCharacter(matchChar, testString, charNumber)\n const found = charNumber > -1\n if (!found) {\n return rankings.NO_MATCH\n }\n }\n\n const spread = charNumber - firstIndex\n return getRanking(spread)\n}\n\n/**\n * Sorts items that have a rank, index, and accessorIndex\n * @param {Object} a - the first item to sort\n * @param {Object} b - the second item to sort\n * @return {Number} -1 if a should come first, 1 if b should come first, 0 if equal\n */\nexport function compareItems(a: RankingInfo, b: RankingInfo): number {\n return a.rank === b.rank ? 0 : a.rank > b.rank ? -1 : 1\n}\n\n/**\n * Prepares value for comparison by stringifying it, removing diacritics (if specified)\n * @param {String} value - the value to clean\n * @param {Object} options - {keepDiacritics: whether to remove diacritics}\n * @return {String} the prepared value\n */\nfunction prepareValueForComparison(\n value: string,\n { keepDiacritics }: RankItemOptions\n): string {\n // value might not actually be a string at this point (we don't get to choose)\n // so part of preparing the value for comparison is ensure that it is a string\n value = `${value}` // toString\n if (!keepDiacritics) {\n value = removeAccents(value)\n }\n return value\n}\n\n/**\n * Gets value for key in item at arbitrarily nested keypath\n * @param {Object} item - the item\n * @param {Object|Function} key - the potentially nested keypath or property callback\n * @return {Array} - an array containing the value(s) at the nested keypath\n */\nfunction getItemValues(\n item: TItem,\n accessor: Accessor\n): Array {\n let accessorFn = accessor as AccessorFn\n\n if (typeof accessor === 'object') {\n accessorFn = accessor.accessor\n }\n\n const value = accessorFn(item)\n\n // because `value` can also be undefined\n if (value == null) {\n return []\n }\n\n if (Array.isArray(value)) {\n return value\n }\n\n return [String(value)]\n}\n\n/**\n * Gets all the values for the given keys in the given item and returns an array of those values\n * @param item - the item from which the values will be retrieved\n * @param keys - the keys to use to retrieve the values\n * @return objects with {itemValue, attributes}\n */\nfunction getAllValuesToRank(\n item: TItem,\n accessors: ReadonlyArray>\n) {\n const allValues: Array<{\n itemValue: string\n attributes: AccessorAttributes\n }> = []\n for (let j = 0, J = accessors.length; j < J; j++) {\n const accessor = accessors[j]!\n const attributes = getAccessorAttributes(accessor)\n const itemValues = getItemValues(item, accessor)\n for (let i = 0, I = itemValues.length; i < I; i++) {\n allValues.push({\n itemValue: itemValues[i]!,\n attributes,\n })\n }\n }\n return allValues\n}\n\nconst defaultKeyAttributes = {\n maxRanking: Infinity as Ranking,\n minRanking: -Infinity as Ranking,\n}\n/**\n * Gets all the attributes for the given accessor\n * @param accessor - the accessor from which the attributes will be retrieved\n * @return object containing the accessor's attributes\n */\nfunction getAccessorAttributes(\n accessor: Accessor\n): AccessorAttributes {\n if (typeof accessor === 'function') {\n return defaultKeyAttributes\n }\n return { ...defaultKeyAttributes, ...accessor }\n}\n","import { rankItem } from '@tanstack/match-sorter-utils';\nimport { FilterFn } from '@tanstack/react-table';\n\nexport const fuzzyFilter: FilterFn = (row, columnId, value, addMeta) => {\n // Rank the item\n const itemRank = rankItem(row.getValue(columnId), value);\n\n // Store the itemRank info\n addMeta({\n itemRank\n });\n\n // Return if the item should be filtered in/out\n return itemRank.passed;\n};\n\nexport const multiSelectFilter: FilterFn = (\n row,\n columnId,\n values,\n addMeta\n) => {\n if (!Array.isArray(values) || values.length === 0) {\n return true;\n }\n const rowValue = row.getValue(columnId);\n\n const rowStringValue = String(rowValue);\n return values.some((value) => rowStringValue.includes(String(value)));\n};\n","import { useMemo } from 'react';\n\ntype FilterFunction = (item: T, searchTerm: string) => boolean;\n\nexport function useFilteredValues(\n data: T[] | undefined,\n searchTerm: string,\n filterFn: FilterFunction\n): T[] {\n return useMemo(() => {\n if (!data) return [];\n if (searchTerm === '') return data;\n\n return data.filter((item) => filterFn(item, searchTerm.toLowerCase()));\n }, [data, searchTerm, filterFn]);\n}\n","import { useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useClickAway } from 'react-use';\nimport Spinner, { SpinnerSize } from '../loading/spinner';\n\ninterface DropdownMenuReactPortalProps {\n isDropdownOpen: boolean;\n children: JSX.Element | JSX.Element[];\n buttonIconClasses: string;\n buttonClasses: string;\n buttonLabel?: string;\n buttonLabelClasses?: string;\n hasExtraButtonIconClasses?: boolean;\n extraButtonIconClasses?: string;\n dropdownMenuClasses?: string;\n containerClasses?: string;\n isDisabled?: boolean;\n title?: string;\n isLoading?: boolean;\n onDropdownClicked: () => void;\n onClickAway: () => void;\n}\n\nconst DropdownMenuReactPortal = ({\n isDropdownOpen,\n children,\n buttonIconClasses,\n buttonClasses,\n buttonLabel,\n buttonLabelClasses,\n hasExtraButtonIconClasses,\n extraButtonIconClasses,\n dropdownMenuClasses,\n containerClasses,\n isDisabled = false,\n title,\n isLoading,\n onDropdownClicked,\n onClickAway\n}: DropdownMenuReactPortalProps) => {\n const buttonRef = useRef(null);\n const dropdownRef = useRef(null);\n const [position, setPosition] = useState<{\n top: number;\n left: number;\n } | null>(null);\n\n useClickAway(buttonRef, (event) => {\n if (\n dropdownRef.current &&\n event.target instanceof Node &&\n dropdownRef.current.contains(event.target)\n ) {\n return;\n }\n onClickAway();\n });\n\n const buttonLabelClassesToUse = buttonLabelClasses ?? 'ml-2 text-sm';\n\n const onClickPositionHandler = () => {\n const buttonRect = buttonRef.current?.getBoundingClientRect();\n if (buttonRect) {\n setPosition({\n top: buttonRect.top + buttonRect.height + window.scrollY,\n left: buttonRect.left + window.scrollX\n });\n }\n onDropdownClicked();\n };\n\n const dropdownContent = isDropdownOpen ? (\n \n
    \n {children}\n
    \n \n ) : null;\n\n return (\n <>\n
    \n \n {isLoading ? (\n \n ) : (\n <>\n \n {hasExtraButtonIconClasses && (\n \n )}\n \n )}\n {buttonLabel && (\n {buttonLabel}\n )}\n \n {isDropdownOpen &&\n ReactDOM.createPortal(dropdownContent, document.body)}\n
    \n \n );\n};\n\nexport default DropdownMenuReactPortal;\n","import { Column, Table } from '@tanstack/react-table';\nimport { useMemo, useState } from 'react';\nimport DropdownMenuButton from '../drop-downs/dropdown-menu-button';\nimport { multiSelectFilter } from './table-functions/filters';\nimport { SearchFilterOptions } from './tableTypes';\nimport { useFilteredValues } from 'common/hooks/filteredValues';\nimport DropdownMenuReactPortal from '../drop-downs/drop-down-menu-react-portal';\n\nexport interface TableFilterToggleProps {\n column: Column;\n componentId: string;\n table: Table;\n isLastColumn?: boolean;\n}\n\nconst TableFilterToggle = ({\n column,\n componentId,\n table,\n isLastColumn\n}: TableFilterToggleProps) => {\n const preFilteredValue = table\n .getPreFilteredRowModel()\n .flatRows[0]?.getValue(column.id);\n\n const facetedUniqueValues = column.getFacetedUniqueValues();\n\n const isMultiSelectFilter = column.columnDef.filterFn === multiSelectFilter;\n\n const sortedUniqueValues = useMemo(\n () =>\n typeof preFilteredValue === 'number'\n ? []\n : Array.from(facetedUniqueValues.keys()).sort((a, b) =>\n a.localeCompare(b)\n ),\n [preFilteredValue, facetedUniqueValues]\n );\n\n const [searchTerm, setSearchTerm] = useState('');\n\n const isSearchFilterEnabled = (meta: any): boolean => {\n const searchFilterOptions: SearchFilterOptions | undefined =\n meta?.searchFilterOptions;\n if (searchFilterOptions === undefined) {\n return false;\n }\n return searchFilterOptions?.isEnabled;\n };\n\n const filteredUniqueValues = useFilteredValues(\n sortedUniqueValues,\n searchTerm,\n (value, term) => value.toLowerCase().indexOf(term) !== -1\n );\n\n const typedColumnFilterValue = isMultiSelectFilter\n ? (column.getFilterValue() as string[])\n : (column.getFilterValue() as string);\n\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const triggerFilter = (isFiltered: boolean, value: any) => {\n if (isMultiSelectFilter) {\n let multiSelectedColumns = typedColumnFilterValue as string[] | undefined;\n if (multiSelectedColumns === undefined) {\n multiSelectedColumns = [];\n }\n const updatedFilter = isFiltered\n ? multiSelectedColumns.filter((v) => v !== value)\n : [...multiSelectedColumns, value];\n\n column.setFilterValue(updatedFilter);\n } else {\n column.setFilterValue(isFiltered ? '' : value);\n }\n };\n\n const isValueFiltered = (value: any, filterValues: string | string[]) => {\n if (Array.isArray(filterValues)) {\n return filterValues.includes(value);\n } else {\n return filterValues === value;\n }\n };\n\n return (\n setIsDropdownOpen(!isDropdownOpen)}\n onClickAway={() => setIsDropdownOpen(false)}\n >\n {isSearchFilterEnabled(column.columnDef.meta) ? (\n
    \n setSearchTerm(e.target.value)}\n />\n {searchTerm && (\n {\n e.preventDefault();\n setSearchTerm('');\n }}\n >\n \n \n )}\n
    \n ) : (\n <>\n )}\n <>\n {filteredUniqueValues.map((value) => {\n const isFiltered = isValueFiltered(value, typedColumnFilterValue);\n return (\n triggerFilter(isFiltered, value)}\n >\n {value}\n \n );\n })}\n \n \n );\n};\n\nexport default TableFilterToggle;\n\nfunction getHeaderName(column: Column): string | undefined {\n return column.columnDef.header?.toString()?.split(\"'\")[1];\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport {\n Table,\n RowData,\n flexRender,\n Header,\n CoreRow\n} from '@tanstack/react-table';\nimport { Fragment, useMemo, useRef } from 'react';\nimport { useMeasure } from 'react-use';\nimport { TableSortAscButton, TableSortDescButton } from './tableSortButtons';\nimport { StickyOptions } from './tableTypes';\nimport TableFilterToggle from './tableFilterToggle';\nimport { useSelector } from 'react-redux';\nimport { selectRowsPendingDeleteForComponent } from 'features/row-deletion/rowPendingDeletionSlice';\nimport { RootState } from 'app/store';\n\ninterface Props {\n table: Table;\n componentId: string;\n heightClass?: string;\n fontsizeClass?: string;\n cellClasses?: string;\n overflowClass?: string;\n}\n\n// Come back to this when we come back to snags\nconst tryGetStickyOptions = (meta: any): string => {\n const stickyOptions: StickyOptions | undefined = meta?.stickyOptions;\n\n return stickyOptions?.isEnabled ? `sticky ${stickyOptions.side}-0 z-20` : '';\n};\n\nconst isTableHeaderSticky = (meta: any): boolean => {\n const stickyOptions: StickyOptions | undefined = meta?.stickyOptions;\n return stickyOptions?.isEnabled ?? false;\n};\n\nexport function CustomTable({\n table,\n componentId,\n heightClass,\n fontsizeClass,\n cellClasses,\n overflowClass\n}: Props) {\n const [ref, { width }] = useMeasure();\n const hasResized = useRef(false);\n\n const getCustomHandlerResizer = (header: Header) => {\n if (!hasResized.current) {\n hasResized.current = true;\n }\n return header.getResizeHandler();\n };\n\n const maxHeightClasses = `max-${heightClass}`;\n const fontsizeClasses = fontsizeClass ?? '';\n const overflowClasses = 'overflow-x-scroll';\n\n const tableContainerClasses = `${maxHeightClasses} ${fontsizeClasses} ${overflowClasses}`;\n\n const selectRowsPendingDelete = useSelector((state: RootState) =>\n selectRowsPendingDeleteForComponent(state, componentId)\n );\n\n const getBackgroundColour = useMemo(\n () =>\n (row: CoreRow, index: number): string => {\n return selectRowsPendingDelete.some(\n (pendingRow) => pendingRow.rowId === row.id\n )\n ? 'bg-error-100'\n : index % 2 === 0\n ? 'bg-neutral-100'\n : 'bg-white';\n },\n [selectRowsPendingDelete]\n );\n\n return (\n \n
    \n {table.getHeaderGroups().map((headerGroup) => {\n return (\n \n {headerGroup.headers.some((header) =>\n header.column.getCanFilter()\n ) && (\n \n {headerGroup.headers\n .filter((header) => header.column.getCanFilter())\n .map((header, index, array) => {\n return (\n \n \n \n );\n })}\n
    \n )}\n \n );\n })}\n width\n ? table.getCenterTotalSize()\n : width\n }\n }}\n >\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => (\n \n {header.isPlaceholder ? null : (\n <>\n {}\n }\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n
    \n {{\n asc: ,\n desc: \n }[header.column.getIsSorted() as string] ?? null}\n
    \n \n {header.column.getCanResize() &&\n !isTableHeaderSticky(header.column.columnDef.meta) ? (\n \n \n \n ) : null}\n \n )}\n \n ))}\n \n ))}\n \n \n {table.getRowModel()?.rows?.map((row, index) => {\n const backgroundColour = getBackgroundColour(row, index);\n\n return (\n \n {row.getVisibleCells().map((cell) => (\n \n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n \n ))}\n \n );\n })}\n \n \n \n \n );\n}\n","import { FC } from 'react';\n\nconst TileWithoutDefaultStyling: FC<{\n children: JSX.Element | JSX.Element[];\n className?: string;\n}> = ({ children, className = '' }) => {\n return
    {children}
    ;\n};\n\nexport default TileWithoutDefaultStyling;\n","// Do not append the string values of this enum as they're linked to database values\nexport enum MetricTypes {\n WEB = 'Web',\n INBOUND_CALL = 'InboundCall',\n CLICKS = 'Clicks',\n COST = 'Cost',\n REVENUES = 'Revenues', // Also known as \"Sales\"\n REVENUE_VALUES = 'RevenueValues',\n OPPORTUNITIES = 'Opportunities',\n OPPORTUNITY_VALUES = 'OpportunityValues',\n CPA = 'CPA',\n CPS = 'CPS',\n ROI = 'ROI',\n ROAS = 'ROAS',\n IMPRESSIONS = 'Impressions'\n}\n","export enum ButtonTheme {\n PRIMARY = 'primary',\n SECONDARY = 'secondary',\n CANCEL = 'cancel',\n SUCCESS = 'success',\n WARNING = 'warning',\n ERROR = 'error',\n MAPZOOM = 'map-zoom',\n MAPRESET = 'map-reset',\n MINIMAL = 'minimal',\n NONE = 'none'\n}\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport SimpleButtonContainerContent from 'common/components/drop-downs/legacy/simpleDropDownButtonContainerContent';\nimport { RootState } from 'app/store';\nimport { FC } from 'react';\nimport {\n getAvailableAttributionModels,\n getSelectedAttributionModel,\n selectAttributionModel\n} from './availableAttributionModelsSlice';\n\nconst AttributionButton: FC<{\n dropDirection?: 'left' | 'right';\n width?: string;\n}> = ({ dropDirection = 'right', width = 'w-40' }) => {\n const dispatch = useDispatch();\n\n const { isPocModeActive } = useSelector(\n (state: RootState) => state.pocToggle\n );\n\n const attributeModelRoutes = useSelector((state: RootState) =>\n getAvailableAttributionModels(state, isPocModeActive)\n );\n\n const selectedAttributionModel = useSelector((state: RootState) =>\n getSelectedAttributionModel(state, isPocModeActive)\n );\n\n const getSelectedAttributionDropdownLabel = () =>\n attributeModelRoutes.find((route) => route.key === selectedAttributionModel)\n ?.label ?? 'Select an Attribution Model';\n\n return (\n <>\n dispatch(selectAttributionModel(key))}\n dropDirection={dropDirection ?? 'right'}\n >\n \n \n \n );\n};\n\nexport default AttributionButton;\n","import { FC, useRef, useState } from 'react';\nimport { useClickAway } from 'react-use';\n\nconst SearchBar: FC<{\n searchValue: string | undefined;\n onClickFunction: (searchValue: string) => void;\n onClearFunction?: () => void;\n}> = ({\n searchValue,\n onClickFunction,\n onClearFunction\n}: {\n searchValue: string | undefined;\n onClickFunction: (searchValue: string) => void;\n onClearFunction?: () => void;\n}) => {\n const [searchTerm, setSearchTerm] = useState(searchValue ?? '');\n\n return (\n <>\n {\n e.preventDefault();\n onClickFunction(searchTerm);\n }}\n >\n
    \n \n {\n e.preventDefault();\n onClickFunction(searchTerm);\n }}\n >\n \n \n \n {\n e.preventDefault();\n setSearchTerm(e.currentTarget.value);\n }}\n />\n {onClearFunction && searchTerm ? (\n {\n e.preventDefault();\n setSearchTerm('');\n onClearFunction();\n }}\n >\n \n \n ) : null}\n
    \n \n \n );\n};\n\nexport default SearchBar;\n","import { MetricTypes } from 'common/constants/metric-types';\n\nexport function getMetricTypeFriendlyName(\n metricType: MetricTypes | string\n): string {\n switch (metricType) {\n case MetricTypes.WEB:\n return 'Forms';\n case MetricTypes.INBOUND_CALL:\n return 'Calls';\n case MetricTypes.OPPORTUNITY_VALUES:\n return 'Opportunity Values';\n default:\n return metricType;\n }\n}\n","import { ButtonTheme } from './button-theme';\n\nexport const getThemeClasses = (theme: ButtonTheme): string => {\n switch (theme) {\n case ButtonTheme.PRIMARY:\n return 'bg-primary-700 hover:bg-primary-600 focus:bg-primary-800 active:bg-primary-800 border border-primary-700 hover:border-primary-600 focus:border-primary-800 active:border-primary-800 text-white text-sm';\n case ButtonTheme.SECONDARY:\n return 'bg-secondary-400 hover:bg-secondary-300 focus:bg-primary-500 active:bg-primary-500 border border-primary-400 hover:border-primary-300 focus:border-primary-600 active:border-primary-600 text-white text-sm';\n case ButtonTheme.CANCEL:\n return 'bg-white hover:bg-neutral-50 focus:bg-neutral-100 active:bg-neutral-100 border border-neutral-200 hover:border-neutral-400 active:border-neutral-500 focus:border-neutral-500 text-black text-sm';\n case ButtonTheme.SUCCESS:\n return 'bg-[#28a745] hover:bg-[#218838] focus:bg-[#1e7e34] active:bg-[#1e7e34] border border-[#28a745] hover:border-[#218838] focus:border-[#1e7e34] active:border-[#1e7e34] text-white text-sm';\n case ButtonTheme.WARNING:\n return 'text-warning-600 border border-warning-600 hover:bg-warning-100 focus:bg-warning-100 active:bg-warning-100 text-sm';\n case ButtonTheme.ERROR:\n return 'bg-error-100 text-error-300 border border-error-300 hover:bg-error-150 focus:bg-error-150 active:bg-error-200 text-sm';\n case ButtonTheme.MAPZOOM:\n return 'bg-white hover:bg-neutral-50 focus:bg-neutral-100 active:bg-neutral-100 border border-neutral-400 hover:border-neutral-400 active:border-neutral-200 focus:border-neutral-400 text-black text-sm font-semibold';\n case ButtonTheme.MAPRESET:\n return 'bg-white hover:bg-neutral-50 focus:bg-neutral-100 active:bg-neutral-100 border border-neutral-400 hover:border-neutral-400 active:border-neutral-200 focus:border-neutral-400 text-black text-xs';\n case ButtonTheme.MINIMAL:\n return 'text-sm rounded text-center bg-white focus:bg-neutral-100 active:bg-neutral-100 text-black text-sm font-semibold';\n default:\n return 'border';\n }\n};\n\nexport const getDisabledThemeClasses = (theme: ButtonTheme): string => {\n switch (theme) {\n case ButtonTheme.MINIMAL:\n return ' text-neutral-500 cursor-default';\n default:\n return 'bg-neutral-200 text-neutral-500 border border-white cursor-default';\n }\n};\n","import { FC } from 'react';\nimport Spinner from '../loading/spinner';\nimport { ButtonTheme } from './button-theme';\nimport { getDisabledThemeClasses, getThemeClasses } from './button-functions';\n\nconst Button: FC<{\n theme: ButtonTheme;\n identifier: string;\n classOverrides?: string;\n isLoading?: boolean;\n isDisabled?: boolean;\n type?: 'button' | 'submit';\n children: JSX.Element | JSX.Element[];\n onClick: () => any;\n}> = ({\n theme,\n identifier,\n classOverrides,\n isLoading,\n isDisabled,\n type,\n children,\n onClick\n}: {\n theme: ButtonTheme;\n identifier: string;\n classOverrides?: string;\n isLoading?: boolean;\n isDisabled?: boolean;\n type?: 'button' | 'submit';\n children: JSX.Element | JSX.Element[];\n onClick: () => any;\n}) => {\n const classes = classOverrides ?? 'px-4 py-2.5';\n const themeClasses = isDisabled\n ? getDisabledThemeClasses(theme)\n : getThemeClasses(theme);\n\n return (\n <>\n \n \n \n \n \n {children}\n \n \n \n );\n};\n\nexport default Button;\n","import Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { FC } from 'react';\nimport { CSVLink } from 'react-csv';\n\ninterface CSVExportButtonProps {\n headers: string[];\n rows: any[][];\n filename: string;\n}\n\nexport const CSVExportButton: FC = ({\n headers,\n rows,\n filename\n}) => {\n const allRowsForCsv = [headers, ...rows];\n\n return (\n \n null}\n isLoading={false}\n >\n
    \n \n Export\n
    \n \n
    \n );\n};\n\nexport default CSVExportButton;\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { FC } from 'react';\nimport { ReportExport } from './types/report-export';\nimport { MetricTypes } from 'common/constants/metric-types';\nimport { getMetricTypeFriendlyName } from './functions/metric-type-functions';\nimport { getSymbolFromCurrency } from 'features/currency/currencySymbolMapHelper';\nimport CSVExportButton from 'features/csv-export/csv-export-button';\nimport moment from 'moment';\nimport { MetricValue } from './types/metric-report';\n\nfunction formatToEnGbNumberWithDecimalPlaces(\n value: number | string | undefined,\n minimumDecimalPlaces: number,\n maximumDecimalPlaces: number\n): string {\n if (value === undefined || value === null) {\n return '0';\n }\n\n let valueAsNumber = +value;\n\n if (isNaN(valueAsNumber)) {\n valueAsNumber = 0;\n }\n\n return Intl.NumberFormat('en-GB', {\n minimumFractionDigits: minimumDecimalPlaces,\n maximumFractionDigits: maximumDecimalPlaces\n }).format(valueAsNumber);\n}\n\nfunction formatToCurrencyCode(\n value: number | string | undefined,\n currencyCode: string\n): string {\n if (value === undefined) {\n return `${currencyCode}0.00`;\n }\n\n const formattedValue = Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(+value);\n\n return `${currencyCode}${formattedValue}`;\n}\n\ninterface ReportsCSVDownloadButtonProps {\n reportExport: ReportExport;\n}\n/*\n This exists in the front end as it's easier to replicate what's going on in the table view\n We also save on unnecessary Athena calls\n We could tie the column configuration to export but it makes things more complex to understand so we went with an easy to read switch block\n*/\nexport const ReportsCSVExportButton: FC = ({\n reportExport\n}) => {\n const startDateShortIso = moment(reportExport.dates.startDate).format(\n 'yyyy-MM-DD'\n );\n const endDateShortIso = moment(reportExport.dates.endDate).format(\n 'yyyy-MM-DD'\n );\n const searchTermFileNameSuffix = reportExport.searchTerm\n ? `_${reportExport.searchTerm}`\n : '';\n\n const filename = `Reports_${startDateShortIso}_${endDateShortIso}_${reportExport.attributionModel}${searchTermFileNameSuffix}`;\n\n const currencySymbol = getSymbolFromCurrency(reportExport.currencyCode);\n\n const orderedHeaders = reportExport.orderedReportColumnIds;\n\n const searchTerm = reportExport.searchTerm\n ? reportExport.searchTerm.toUpperCase()\n : null;\n\n const orderedRows = reportExport.metricReports\n .filter((metric) =>\n searchTerm ? metric.Field.toUpperCase().includes(searchTerm) : metric\n )\n .map((metric) =>\n orderedHeaders.map((header) => {\n switch (header) {\n case MetricTypes.CLICKS:\n case MetricTypes.IMPRESSIONS:\n case MetricTypes.INBOUND_CALL:\n case MetricTypes.WEB:\n case MetricTypes.OPPORTUNITIES:\n case MetricTypes.REVENUES:\n return formatToEnGbNumberWithDecimalPlaces(\n (metric[header] as MetricValue).main,\n 0,\n 2\n );\n case MetricTypes.OPPORTUNITY_VALUES:\n case MetricTypes.REVENUE_VALUES:\n case MetricTypes.COST:\n case MetricTypes.CPA:\n case MetricTypes.CPS:\n case MetricTypes.ROI:\n return formatToCurrencyCode(\n (metric[header] as MetricValue).main,\n currencySymbol\n );\n case MetricTypes.ROAS:\n return formatToEnGbNumberWithDecimalPlaces(\n (metric[header] as MetricValue).main,\n 2,\n 2\n );\n case 'Field':\n return metric[header];\n default:\n throw Error(\n `Unexpected MetricType/ColumnName found when trying to create ReportsCsvExportButton: ${header}`\n );\n }\n })\n );\n\n const friendlyOrderedHeaders = orderedHeaders.map((header) =>\n getMetricTypeFriendlyName(header)\n );\n\n return orderedRows.length > 0 ? (\n \n ) : (\n <>\n );\n};\n\nexport default ReportsCSVExportButton;\n","import { FC } from 'react';\n\nenum IconType {\n FLATICON,\n IMAGE\n}\n\ninterface MarketingSourceLogoDto {\n marketingSource: string;\n path: string;\n iconType: IconType;\n}\n\nconst marketingSourceLogos: MarketingSourceLogoDto[] = [\n {\n marketingSource: 'Direct',\n iconType: IconType.FLATICON,\n path: 'ra-icons-marketing-login'\n },\n {\n marketingSource: 'Email',\n iconType: IconType.FLATICON,\n path: 'ra-icons-generic-envelope-2'\n },\n {\n marketingSource: 'Sms',\n iconType: IconType.FLATICON,\n path: 'ra-icons-device-smartphone'\n },\n {\n marketingSource: 'Referral',\n iconType: IconType.FLATICON,\n path: 'ra-icons-generic-forward'\n },\n {\n marketingSource: 'UnMatched',\n iconType: IconType.IMAGE,\n path: '/media/misc/unmatched.png'\n },\n {\n marketingSource: 'Offline',\n iconType: IconType.IMAGE,\n path: '/media/misc/offline.png'\n },\n {\n marketingSource: 'Offline - Trade Show',\n iconType: IconType.IMAGE,\n path: '/media/misc/offline.png'\n },\n {\n marketingSource: 'AdRoll Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/adroll-logo.png'\n },\n {\n marketingSource: 'AdRoll Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/adroll-logo.png'\n },\n {\n marketingSource: 'Awin Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/awin-logo.png'\n },\n {\n marketingSource: 'Awin Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/awin-logo.png'\n },\n {\n marketingSource: 'Awin',\n iconType: IconType.IMAGE,\n path: '/media/logos/awin-logo.png'\n },\n {\n marketingSource: 'Bing Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/bing-logo.png'\n },\n {\n marketingSource: 'Bing Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/bing-logo.png'\n },\n {\n marketingSource: 'DuckDuckGo Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/duckduckgo-logo.png'\n },\n {\n marketingSource: 'Facebook Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/facebook-logo.png'\n },\n {\n marketingSource: 'Facebook Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/facebook-logo.png'\n },\n {\n marketingSource: 'Google Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/google-logo.png'\n },\n {\n marketingSource: 'Google Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/google-ads-logo.png'\n },\n {\n marketingSource: 'Google Places',\n iconType: IconType.IMAGE,\n path: '/media/logos/google-maps-icon.png'\n },\n {\n marketingSource: 'Instagram Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/instagram-logo.png'\n },\n {\n marketingSource: 'Instagram Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/instagram-logo.png'\n },\n {\n marketingSource: 'LinkedIn Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/linkedin-logo.png'\n },\n {\n marketingSource: 'LinkedIn Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/linkedin-logo.png'\n },\n {\n marketingSource: 'Outbrain Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/outbrain-logo.png'\n },\n {\n marketingSource: 'Outbrain Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/outbrain-logo.png'\n },\n {\n marketingSource: 'Outbrain',\n iconType: IconType.IMAGE,\n path: '/media/logos/outbrain-logo.png'\n },\n {\n marketingSource: 'Pinterest Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/pinterest-logo.png'\n },\n {\n marketingSource: 'Pinterest Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/pinterest-logo.png'\n },\n {\n marketingSource: 'Reddit Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/reddit-logo.png'\n },\n {\n marketingSource: 'Reddit Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/reddit-logo.png'\n },\n {\n marketingSource: 'Snapchat Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/snapchat-logo.png'\n },\n {\n marketingSource: 'Snapchat Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/snapchat-logo.png'\n },\n {\n marketingSource: 'StackAdapt Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/stackadapt-logo.png'\n },\n {\n marketingSource: 'StackAdapt Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/stackadapt-logo.png'\n },\n {\n marketingSource: 'StackAdapt',\n iconType: IconType.IMAGE,\n path: '/media/logos/stackadapt-logo.png'\n },\n {\n marketingSource: 'TikTok Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/tiktok-logo.png'\n },\n {\n marketingSource: 'TikTok Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/tiktok-logo.png'\n },\n {\n marketingSource: 'Twitter Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/twitter-logo.png'\n },\n {\n marketingSource: 'Twitter Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/twitter-logo.png'\n },\n {\n marketingSource: 'Yahoo Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/yahoo-logo.png'\n },\n {\n marketingSource: 'Yahoo Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/yahoo-logo.png'\n },\n {\n marketingSource: 'YouTube Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/youtube-logo.png'\n },\n {\n marketingSource: 'YouTube Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/youtube-logo.png'\n },\n {\n marketingSource: 'Klaviyo Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/klaviyo-logo.png'\n },\n {\n marketingSource: 'Criteo Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/criteo-logo.png'\n },\n {\n marketingSource: 'Impact Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/impact-logo.png'\n },\n {\n marketingSource: 'ShareASale Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/shareasale-logo.png'\n },\n {\n marketingSource: 'TheTradeDesk Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/thetradedesk-logo.png'\n },\n {\n marketingSource: 'Unassigned',\n iconType: IconType.FLATICON,\n path: 'ra-icons-generic-question-sign'\n },\n {\n marketingSource: 'Taboola Paid',\n iconType: IconType.IMAGE,\n path: '/media/logos/taboola-logo.png'\n },\n {\n marketingSource: 'Moneypenny Answered',\n iconType: IconType.IMAGE,\n path: '/media/logos/moneypenny-logo.png'\n },\n {\n marketingSource: 'Moneypenny Not Answered',\n iconType: IconType.IMAGE,\n path: '/media/logos/moneypenny-logo.png'\n },\n {\n marketingSource: 'ChatGPT Organic',\n iconType: IconType.IMAGE,\n path: '/media/logos/chatgpt-logo.png'\n }\n];\n\nconst MarketingSourceLogo: FC<{\n marketingSource: string;\n imageClasses?: string;\n iconClasses?: string;\n}> = ({\n marketingSource,\n imageClasses,\n iconClasses\n}: {\n marketingSource: string;\n imageClasses?: string;\n iconClasses?: string;\n}) => {\n const logoToUse = marketingSourceLogos.find(\n (icon) => icon.marketingSource === marketingSource\n );\n\n return logoToUse ? (\n <>\n {logoToUse.iconType === IconType.FLATICON ? (\n \n ) : (\n \n )}\n \n ) : (\n <>\n );\n};\n\nexport default MarketingSourceLogo;\n","import { useRef } from 'react';\nimport { useClickAway } from 'react-use';\nimport Spinner, { SpinnerSize } from '../loading/spinner';\n\ninterface DropdownMenuProps {\n isDropdownOpen: boolean;\n children: JSX.Element | JSX.Element[];\n buttonIconClasses: string;\n buttonClasses: string;\n buttonLabel?: string;\n buttonLabelClasses?: string;\n hasExtraButtonIconClasses?: boolean;\n extraButtonIconClasses?: string;\n dropdownMenuClasses?: string;\n containerClasses?: string;\n isDisabled?: boolean;\n title?: string;\n isLoading?: boolean;\n onDropdownClicked: () => void;\n onClickAway: () => void;\n}\n\nconst DropdownMenu = ({\n isDropdownOpen,\n children,\n buttonIconClasses,\n buttonClasses,\n buttonLabel,\n buttonLabelClasses,\n hasExtraButtonIconClasses,\n extraButtonIconClasses,\n dropdownMenuClasses,\n containerClasses,\n isDisabled = false,\n title,\n isLoading,\n onDropdownClicked,\n onClickAway\n}: DropdownMenuProps) => {\n const ref = useRef(null);\n\n useClickAway(ref, onClickAway);\n\n const disabledIconClasses = isDisabled ? 'text-neutral-200' : '';\n\n const buttonLabelClassesToUse = buttonLabelClasses ?? 'ml-2 text-sm';\n\n return (\n <>\n
    \n \n {isLoading ? (\n \n ) : (\n <>\n \n {hasExtraButtonIconClasses ? (\n <>\n \n \n ) : (\n <>\n )}\n \n )}\n {buttonLabel ? (\n <>\n {buttonLabel}\n \n ) : (\n <>\n )}\n \n {isDropdownOpen ? (\n \n
    \n {children}\n
    \n
    \n ) : null}\n \n \n );\n};\n\nexport default DropdownMenu;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { FC, useState } from 'react';\nimport {\n getAvailableAttributionCompareModels,\n selectIsAttributionComparisonActive,\n getSelectedAttributionCompareModel,\n selectAttributionCompareModel,\n setDisplayAttributionComparisonData\n} from './availableAttributionCompareModelsSlice';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport Button from 'common/components/buttons/button';\nimport DropdownMenu from 'common/components/drop-downs/drop-down-menu';\nimport DropdownMenuButton from 'common/components/drop-downs/dropdown-menu-button';\n\nconst AttributionCompareButton: FC = () => {\n const dispatch = useDispatch();\n\n const { isPocModeActive } = useSelector(\n (state: RootState) => state.pocToggle\n );\n\n const attributeModelRoutes = useSelector((state: RootState) =>\n getAvailableAttributionCompareModels(state, isPocModeActive)\n );\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const displayDropDown = useSelector((state: RootState) =>\n selectIsAttributionComparisonActive(state)\n );\n\n const selectedAttributionModel = useSelector((state: RootState) =>\n getSelectedAttributionCompareModel(state, isPocModeActive)\n );\n\n return (\n
    \n {displayDropDown ? (\n
    \n setIsDropdownOpen(!isDropdownOpen)}\n onClickAway={() => setIsDropdownOpen(false)}\n >\n {attributeModelRoutes.map((model) => (\n {\n dispatch(selectAttributionCompareModel(model.id));\n setIsDropdownOpen(false);\n }}\n >\n {model.modelName}\n \n ))}\n \n
    \n \n dispatch(setDisplayAttributionComparisonData(false))\n }\n >\n \n \n
    \n
    \n ) : (\n
    \n dispatch(setDisplayAttributionComparisonData(true))}\n >\n
    \n \n Compare\n
    \n \n
    \n )}\n
    \n );\n};\n\nexport default AttributionCompareButton;\n","import { RootState } from 'app/store';\nimport AttributionButton from 'features/attribute-model/attributeButton';\nimport SearchBar from 'features/search-bar/searchBar';\nimport {\n applySearchToTableAndGraph,\n clearSearch,\n getSearchTermsById\n} from 'features/search-bar/searchBarSlice';\nimport { FC } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport ReportsCSVExportButton from './reports-csv-export-button';\nimport { ReportExport } from './types/report-export';\nimport AttributionCompareButton from 'features/attribute-compare-model/attributeCompareButton';\nimport { selectIsAttributionComparisonActive } from 'features/attribute-compare-model/availableAttributionCompareModelsSlice';\n\nconst ReportsInteractionBar: FC<{\n componentId: string;\n reportExport: ReportExport;\n}> = ({\n componentId,\n reportExport\n}: {\n componentId: string;\n reportExport: ReportExport;\n}) => {\n const dispatch = useDispatch();\n\n const { tableValueToSearch } = useSelector((state: RootState) =>\n getSearchTermsById(state, componentId)\n );\n\n const displayComparisonAttributionModelData = useSelector(\n (state: RootState) => selectIsAttributionComparisonActive(state)\n );\n\n return (\n <>\n
    \n {\n dispatch(\n applySearchToTableAndGraph({\n id: componentId,\n valueToSearch: searchTerm\n })\n );\n }}\n onClearFunction={() => {\n dispatch(\n clearSearch({\n id: componentId\n })\n );\n }}\n />\n
    \n {!displayComparisonAttributionModelData && (\n
    \n \n
    \n )}\n \n \n
    \n
    \n \n );\n};\n\nexport default ReportsInteractionBar;\n","import { RootState } from 'app/store';\nimport { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nexport const Blur: FC<{\n children: JSX.Element | JSX.Element[];\n}> = ({ children }) => {\n const { isBlurActive } = useSelector((state: RootState) => state.blur);\n\n return (\n
    \n {children}\n
    \n );\n};\n\nexport default Blur;\n","/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport { createColumnHelper } from '@tanstack/table-core';\nimport MarketingSourceLogo from 'common/components/icons/marketingSourceLogo';\nimport { MetricTypes } from 'common/constants/metric-types';\nimport { MetricReport, MetricValue } from './types/metric-report';\nimport { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\nimport { StickyOptions } from 'common/components/table/tableTypes';\nimport Blur from 'features/blur/blur';\nimport { Row } from '@tanstack/react-table';\nimport { UseReportQueriesResult } from './hooks/use-report-queries';\nimport Spinner, { SpinnerSize } from 'common/components/loading/spinner';\nimport { AdvancedReportTableRow } from 'features/advanced-reports/table/advanced-reports-table.types';\n\nfunction setZeroAsDefault(value: any): any {\n if (!value) {\n return 0;\n }\n\n return value;\n}\n\nfunction setDashAsDefaultAfterFormat(value: string): string {\n if (!value || value === '0') {\n return '-';\n }\n\n return value;\n}\n\nfunction getFieldCell(cellContent: string): any {\n return (\n
    \n \n {cellContent}\n
    \n );\n}\n\nconst reportColumnHelper = createColumnHelper();\n\nfunction createHeader(headerName: string, isLoading: boolean) {\n return (\n
    \n \n {headerName}\n {isLoading ? (\n
    \n \n
    \n ) : (\n <>\n )}\n
    \n
    \n );\n}\n\nconst defaultColumnWidth = 100;\n\nexport const getMetricReportColumns = (\n totalsMetricReport: AdvancedReportTableRow,\n shouldBlurFieldColumn: boolean,\n displayComparisonAttributionModelData: boolean,\n reportQueryResults: UseReportQueriesResult,\n currencyCode?: string\n) => {\n const isMainImpressionsDataFetching =\n reportQueryResults.main.impressions.isFetching;\n const isMainClicksDataFetching = reportQueryResults.main.clicks.isFetching;\n const isMainCallsDataFetching = reportQueryResults.main.calls.isFetching;\n const isMainFormsDataFetching = reportQueryResults.main.forms.isFetching;\n const isMainOppsDataFetching = reportQueryResults.main.opps.isFetching;\n const isMainOppsValueDataFetching =\n reportQueryResults.main.oppValues.isFetching;\n const isMainSalesDataFetching = reportQueryResults.main.sales.isFetching;\n const isMainRevenueDataFetching = reportQueryResults.main.revenues.isFetching;\n const isMainCostDataFetching = reportQueryResults.main.cost.isLoading;\n const isCompareImpressionsDataFetching =\n reportQueryResults.compare.impressions.isFetching;\n const isCompareClicksDataFetching =\n reportQueryResults.compare.clicks.isFetching;\n const isCompareCallsDataFetching =\n reportQueryResults.compare.calls.isFetching;\n const isCompareFormsDataFetching =\n reportQueryResults.compare.forms.isFetching;\n const isCompareOppsDataFetching = reportQueryResults.compare.opps.isFetching;\n const isCompareOppsValueDataFetching =\n reportQueryResults.compare.oppValues.isFetching;\n const isCompareSalesDataFetching =\n reportQueryResults.compare.sales.isFetching;\n const isCompareRevenueDataFetching =\n reportQueryResults.compare.revenues.isFetching;\n const isCompareCostDataFetching = reportQueryResults.compare.cost.isFetching;\n\n return [\n reportColumnHelper.accessor((row) => row.field, {\n id: 'Field',\n header: () => Field,\n enableColumnFilter: false,\n cell: (info) =>\n shouldBlurFieldColumn ? (\n {getFieldCell(info.getValue())}\n ) : (\n getFieldCell(info.getValue())\n ),\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'left'\n } as StickyOptions\n },\n enableGlobalFilter: true,\n minSize: 200\n }),\n reportColumnHelper.accessor((row) => row.impressions, {\n id: MetricTypes.IMPRESSIONS,\n header: () =>\n createHeader(\n 'Impressions',\n isMainImpressionsDataFetching || isCompareImpressionsDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n <>\n \n {setDashAsDefaultAfterFormat(\n Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))\n )}\n \n {displayComparisonAttributionModelData ? (\n <>\n \n {setDashAsDefaultAfterFormat(\n Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))\n )}\n \n \n ) : (\n <>\n )}\n \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.clicks, {\n id: MetricTypes.CLICKS,\n header: () =>\n createHeader(\n 'Clicks',\n isMainClicksDataFetching || isCompareClicksDataFetching\n ),\n enableColumnFilter: false,\n enableSorting: true,\n cell: (info) => (\n <>\n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n {displayComparisonAttributionModelData ? (\n <>\n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n ) : (\n <>\n )}\n \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.call, {\n id: MetricTypes.INBOUND_CALL,\n header: () =>\n createHeader(\n 'Calls',\n isMainCallsDataFetching || isCompareCallsDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n <>\n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n {displayComparisonAttributionModelData ? (\n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n ) : (\n <>\n )}\n \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.web, {\n id: MetricTypes.WEB,\n header: () =>\n createHeader(\n 'Forms',\n isMainFormsDataFetching || isCompareFormsDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n \n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n {info.row.original.field !== 'Total' ? (\n \n {toPercentage(\n +info.getValue(),\n +totalsMetricReport.web.primaryValue\n )}\n \n ) : (\n <>\n )}\n {displayComparisonAttributionModelData ? (\n <>\n
    \n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n ) : (\n <>\n )}\n
    \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.opportunity, {\n id: MetricTypes.OPPORTUNITIES,\n header: () =>\n createHeader(\n 'Opps',\n isMainOppsDataFetching || isCompareOppsDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n \n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n {displayComparisonAttributionModelData ? (\n <>\n
    \n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n ) : (\n <>\n )}\n {info.row.original.field !== 'Total' ? (\n \n {toPercentage(\n +info.getValue(),\n +totalsMetricReport.opportunity.primaryValue\n )}\n \n ) : (\n <>\n )}\n
    \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.opportunityValue, {\n id: MetricTypes.OPPORTUNITY_VALUES,\n header: () =>\n createHeader(\n 'Opps Values',\n isMainOppsValueDataFetching || isCompareOppsValueDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n <>\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n \n {displayComparisonAttributionModelData ? (\n <>\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n \n ) : (\n <>\n )}\n \n ),\n size: 110\n }),\n reportColumnHelper.accessor((row) => row.sales, {\n id: MetricTypes.REVENUES,\n header: () =>\n createHeader(\n 'Sales',\n isMainSalesDataFetching || isCompareSalesDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n \n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n {info.row.original.field !== 'Total' ? (\n \n {toPercentage(\n +info.getValue(),\n +totalsMetricReport.sales.primaryValue\n )}\n \n ) : (\n <>\n )}\n {displayComparisonAttributionModelData ? (\n <>\n
    \n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n ) : (\n <>\n )}\n
    \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.revenue, {\n id: MetricTypes.REVENUE_VALUES,\n header: () =>\n createHeader(\n 'Revenue',\n isMainRevenueDataFetching || isCompareRevenueDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n <>\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n \n {displayComparisonAttributionModelData ? (\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n ) : (\n <>\n )}\n \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.cost, {\n id: MetricTypes.COST,\n header: () =>\n createHeader(\n 'Cost',\n isMainCostDataFetching || isCompareCostDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n <>\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n \n {displayComparisonAttributionModelData ? (\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n ) : (\n <>\n )}\n \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.cpa, {\n id: MetricTypes.CPA,\n header: () =>\n createHeader(\n 'CPA',\n isMainCostDataFetching ||\n isMainFormsDataFetching ||\n isMainCallsDataFetching ||\n isCompareCostDataFetching ||\n isCompareFormsDataFetching ||\n isCompareCallsDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n <>\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n \n {displayComparisonAttributionModelData ? (\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n ) : (\n <>\n )}\n \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.cps, {\n id: MetricTypes.CPS,\n header: () =>\n createHeader(\n 'CPS',\n isMainCostDataFetching ||\n isMainSalesDataFetching ||\n isCompareCostDataFetching ||\n isCompareSalesDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n <>\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n \n {displayComparisonAttributionModelData ? (\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n ) : (\n <>\n )}\n \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.roi, {\n id: MetricTypes.ROI,\n header: () =>\n createHeader(\n 'ROI',\n isMainCostDataFetching ||\n isMainRevenueDataFetching ||\n isCompareCostDataFetching ||\n isCompareRevenueDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n <>\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n \n {displayComparisonAttributionModelData ? (\n \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n \n ) : (\n <>\n )}\n \n ),\n size: defaultColumnWidth\n }),\n reportColumnHelper.accessor((row) => row.roas, {\n id: MetricTypes.ROAS,\n header: () =>\n createHeader(\n 'ROAS',\n isMainCostDataFetching ||\n isMainRevenueDataFetching ||\n isCompareCostDataFetching ||\n isCompareRevenueDataFetching\n ),\n enableColumnFilter: false,\n cell: (info) => (\n <>\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().primaryValue))}\n \n {displayComparisonAttributionModelData ? (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue().compareValue))}\n \n ) : (\n <>\n )}\n \n ),\n size: defaultColumnWidth\n })\n ].filter((column) => column !== undefined) as any[];\n};\n\nfunction toPercentage(value: number, total: number): string {\n const percentageValue = (value / total) * 100;\n\n if (isNaN(percentageValue)) {\n return '';\n }\n\n return `(${percentageValue.toFixed(2)}%)`;\n}\n","import { MetricTypes } from 'common/constants/metric-types';\nimport { MetricAttribution } from 'common/types/metric.models';\n\nexport function calculateRoasBase(cost: number, revenueValue: number) {\n return revenueValue && cost ? revenueValue / cost : 0;\n}\n\nexport function calculateRoiBase(cost: number, revenueValue: number) {\n return revenueValue && cost ? revenueValue - cost : 0;\n}\n\nexport function calculateCpaBase(cost: number, forms: number, calls: number) {\n const totalFormsAndCalls = forms + calls;\n return cost && totalFormsAndCalls ? cost / totalFormsAndCalls : 0;\n}\n\nexport function calculateCpsBase(cost: number, sale: number) {\n return cost && sale ? cost / sale : 0;\n}\n\nexport function calculateRoi(\n metrics: MetricAttribution[],\n metricTypeName: string\n) {\n const cost = getMetric(metrics, metricTypeName, MetricTypes.COST);\n const revenue = getMetric(\n metrics,\n metricTypeName,\n MetricTypes.REVENUE_VALUES\n );\n return calculateRoiBase(cost, revenue);\n}\n\nexport function calculateRoas(\n metrics: MetricAttribution[],\n metricTypeName: string\n) {\n const cost = getMetric(metrics, metricTypeName, MetricTypes.COST);\n const revenue = getMetric(\n metrics,\n metricTypeName,\n MetricTypes.REVENUE_VALUES\n );\n return calculateRoasBase(cost, revenue);\n}\n\nexport function calculateCpa(\n metrics: MetricAttribution[],\n metricTypeName: string\n) {\n const cost = getMetric(metrics, metricTypeName, MetricTypes.COST);\n const forms = getMetric(metrics, metricTypeName, MetricTypes.WEB);\n const calls = getMetric(metrics, metricTypeName, MetricTypes.INBOUND_CALL);\n return calculateCpaBase(cost, forms, calls);\n}\n\nexport function calculateCps(\n metrics: MetricAttribution[],\n metricTypeName: string\n) {\n const cost = getMetric(metrics, metricTypeName, MetricTypes.COST);\n const sales = getMetric(metrics, metricTypeName, MetricTypes.REVENUES);\n return calculateCpsBase(cost, sales);\n}\n\nfunction getMetric(\n metrics: MetricAttribution[],\n metricTypeName: string,\n metricType: MetricTypes\n): number {\n return (\n metrics.find(\n (metric) =>\n metric.metricTypeName === metricTypeName &&\n metric.metricType === metricType\n )?.attributionValue ?? 0\n );\n}\n","import { MetricTypes } from 'common/constants/metric-types';\nimport { MetricAttribution } from 'common/types/metric.models';\nimport {\n AxisChartByString,\n ChartDataType,\n ChartDisplayType,\n DataPointSetByString\n} from 'features/charts/chart.models';\nimport { v4 as guid } from 'uuid';\nimport { MetricReport, MetricValue } from './types/metric-report';\nimport { getMetricTypeFriendlyName } from './functions/metric-type-functions';\nimport {\n calculateCpaBase,\n calculateCps,\n calculateCpsBase,\n calculateRoasBase,\n calculateRoiBase\n} from './functions/metric-calculation-functions';\n\nexport const metricAttributionsToChartByString = (\n metrics: MetricAttribution[],\n selectedAttributionModel: string,\n searchedTerm: string\n): AxisChartByString => {\n const searchedTermUpper = searchedTerm.toUpperCase();\n\n const dataPointSets: DataPointSetByString[] = metrics\n .filter(\n (metric) =>\n metric.attributionModelName === selectedAttributionModel &&\n metric.metricTypeName.toUpperCase().includes(searchedTermUpper)\n )\n .map(toDataPointSetByString);\n\n const chart: AxisChartByString = {\n id: guid(),\n title: '',\n type: ChartDataType.STRING,\n defaultChartDisplayType: ChartDisplayType.STACKED_BAR,\n shouldShowChartTypeDropdown: false,\n yAxisFormat: new Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }),\n tooltipFormat: new Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }),\n xAxisTitle: '',\n yAxisTitle: '',\n dataPointSets,\n shouldAnimate: true\n };\n\n return chart;\n\n function toDataPointSetByString(\n metric: MetricAttribution\n ): DataPointSetByString {\n const dataPoint: DataPointSetByString = {\n dataPointString: metric.metricTypeName,\n dataPointSetName: getMetricTypeFriendlyName(metric.metricType),\n value: metric.attributionValue\n };\n\n return dataPoint;\n }\n};\n\nexport const metricAttributionsToMetricReports = (\n metrics: MetricAttribution[],\n primaryAttributionModel: string,\n compareAttributionModel?: string\n): MetricReport[] => {\n const primaryMetrics = metrics.filter(\n (metric) => metric.attributionModelName === primaryAttributionModel\n );\n\n const metricReports = primaryMetrics.reduce(\n (allReports, metric) => {\n const existingReport = allReports.find(\n (m) => m.Field === metric.metricTypeName\n );\n\n if (existingReport) {\n existingReport[metric.metricType] = {\n main: metric.attributionValue,\n compare: 0\n } as MetricValue;\n } else {\n const newReport: MetricReport = {\n Field: metric.metricTypeName,\n [metric.metricType]: {\n main: metric.attributionValue,\n compare: 0\n } as MetricValue\n };\n allReports = [...allReports, newReport];\n }\n\n return allReports;\n },\n []\n );\n\n const compareMetrics = metrics.filter(\n (metric) => metric.attributionModelName === compareAttributionModel\n );\n\n for (const compareMetric of compareMetrics) {\n const existingMetricReportIndex = metricReports.findIndex(\n (report) => report.Field === compareMetric.metricTypeName\n );\n\n if (existingMetricReportIndex >= 0) {\n let existingMetricReport = metricReports[existingMetricReportIndex];\n let existingMetricValue = existingMetricReport[\n compareMetric.metricType\n ] as MetricValue;\n\n existingMetricValue = {\n ...existingMetricValue,\n compare: compareMetric.attributionValue\n };\n\n existingMetricReport = metricReports[existingMetricReportIndex] = {\n ...metricReports[existingMetricReportIndex],\n [compareMetric.metricType]: existingMetricValue\n };\n } else {\n const newMetric: MetricReport = {\n Field: compareMetric.metricTypeName,\n [compareMetric.metricType]: {\n main: 0,\n compare: compareMetric.attributionValue\n } as MetricValue\n };\n metricReports.push(newMetric);\n }\n }\n\n metricReports.forEach((metric) => {\n // refactor all below\n setMetricTypesToZeroWhichHaveNoValue(metric);\n\n const cost = metric[MetricTypes.COST] as MetricValue;\n const forms = metric[MetricTypes.WEB] as MetricValue;\n const calls = metric[MetricTypes.INBOUND_CALL] as MetricValue;\n const revenue = metric[MetricTypes.REVENUES] as MetricValue;\n const revenueValue = metric[MetricTypes.REVENUE_VALUES] as MetricValue;\n\n const mainCostValue = (cost.main as number) ?? 0;\n const mainFormsValue = (forms.main as number) ?? 0;\n const mainCallsValue = (calls.main as number) ?? 0;\n const mainRevenueValue = (revenue.main as number) ?? 0;\n const mainRevenueValuesValue = (revenueValue.main as number) ?? 0;\n\n const compareCostValue = (cost.compare as number) ?? 0;\n const compareFormsValue = (forms.compare as number) ?? 0;\n const compareCallsValue = (calls.compare as number) ?? 0;\n const compareRevenueValue = (revenue.compare as number) ?? 0;\n const compareRevenueValuesValue = (revenueValue.compare as number) ?? 0;\n\n metric[MetricTypes.CPA] = {\n main: calculateCpaBase(mainCostValue, mainFormsValue, mainCallsValue),\n compare: calculateCpaBase(\n compareCostValue,\n compareFormsValue,\n compareCallsValue\n )\n } as MetricValue;\n metric[MetricTypes.CPS] = {\n main: calculateCpsBase(mainCostValue, mainRevenueValue),\n compare: calculateCpsBase(compareCostValue, compareRevenueValue)\n } as MetricValue;\n metric[MetricTypes.ROI] = {\n main: calculateRoiBase(mainCostValue, mainRevenueValuesValue),\n compare: calculateRoiBase(compareCostValue, compareRevenueValuesValue)\n } as MetricValue;\n metric[MetricTypes.ROAS] = {\n main: calculateRoasBase(mainCostValue, mainRevenueValuesValue),\n compare: calculateRoasBase(compareCostValue, compareRevenueValuesValue)\n } as MetricValue;\n });\n\n return metricReports;\n};\n\n// DO NOT DELETE. This is necessary for the sorting function to work in TanStack\n// A property must have a default value of 0, not undefined\nfunction setMetricTypesToZeroWhichHaveNoValue(metric: MetricReport): void {\n metric[MetricTypes.CLICKS] =\n metric[MetricTypes.CLICKS] ??\n ({\n main: 0,\n compare: 0\n } as MetricValue);\n metric[MetricTypes.IMPRESSIONS] =\n metric[MetricTypes.IMPRESSIONS] ??\n ({\n main: 0,\n compare: 0\n } as MetricValue);\n metric[MetricTypes.INBOUND_CALL] =\n metric[MetricTypes.INBOUND_CALL] ??\n ({\n main: 0,\n compare: 0\n } as MetricValue);\n metric[MetricTypes.WEB] =\n metric[MetricTypes.WEB] ??\n ({\n main: 0,\n compare: 0\n } as MetricValue);\n metric[MetricTypes.OPPORTUNITIES] =\n metric[MetricTypes.OPPORTUNITIES] ??\n ({\n main: 0,\n compare: 0\n } as MetricValue);\n metric[MetricTypes.OPPORTUNITY_VALUES] =\n metric[MetricTypes.OPPORTUNITY_VALUES] ??\n ({\n main: 0,\n compare: 0\n } as MetricValue);\n metric[MetricTypes.REVENUES] =\n metric[MetricTypes.REVENUES] ??\n ({\n main: 0,\n compare: 0\n } as MetricValue);\n metric[MetricTypes.REVENUE_VALUES] =\n metric[MetricTypes.REVENUE_VALUES] ??\n ({\n main: 0,\n compare: 0\n } as MetricValue);\n metric[MetricTypes.COST] =\n metric[MetricTypes.COST] ??\n ({\n main: 0,\n compare: 0\n } as MetricValue);\n}\n\nexport const createTotalsMetricReport = (\n metricReports: MetricReport[]\n): MetricReport => {\n const web = metricReports\n .map((mr) => ((mr[MetricTypes.WEB] as MetricValue).main as number) ?? 0)\n .reduce((a, b) => a + b, 0);\n\n const inboundCall = metricReports\n .map(\n (mr) =>\n ((mr[MetricTypes.INBOUND_CALL] as MetricValue).main as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const clicks = metricReports\n .map((mr) => ((mr[MetricTypes.CLICKS] as MetricValue).main as number) ?? 0)\n .reduce((a, b) => a + b, 0);\n\n const impressions = metricReports\n .map(\n (mr) => ((mr[MetricTypes.IMPRESSIONS] as MetricValue).main as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const cost = metricReports\n .map((mr) => ((mr[MetricTypes.COST] as MetricValue).main as number) ?? 0)\n .reduce((a, b) => a + b, 0);\n\n const revenues = metricReports\n .map(\n (mr) => ((mr[MetricTypes.REVENUES] as MetricValue).main as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const revenueValues = metricReports\n .map(\n (mr) =>\n ((mr[MetricTypes.REVENUE_VALUES] as MetricValue).main as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const opportunities = metricReports\n .map(\n (mr) =>\n ((mr[MetricTypes.OPPORTUNITIES] as MetricValue).main as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const opportunityValues = metricReports\n .map(\n (mr) =>\n ((mr[MetricTypes.OPPORTUNITY_VALUES] as MetricValue).main as number) ??\n 0\n )\n .reduce((a, b) => a + b, 0);\n\n const cpa = calculateCpaBase(cost, web, inboundCall);\n\n const cps = calculateCpsBase(cost, revenues);\n\n const roi = calculateRoiBase(cost, revenueValues);\n\n const roas = calculateRoasBase(cost, revenueValues);\n\n const compareWeb = metricReports\n .map((mr) => ((mr[MetricTypes.WEB] as MetricValue).compare as number) ?? 0)\n .reduce((a, b) => a + b, 0);\n\n const compareInboundCall = metricReports\n .map(\n (mr) =>\n ((mr[MetricTypes.INBOUND_CALL] as MetricValue).compare as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const compareClicks = metricReports\n .map(\n (mr) => ((mr[MetricTypes.CLICKS] as MetricValue).compare as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const compareImpressions = metricReports\n .map(\n (mr) =>\n ((mr[MetricTypes.IMPRESSIONS] as MetricValue).compare as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const compareCost = metricReports\n .map((mr) => ((mr[MetricTypes.COST] as MetricValue).compare as number) ?? 0)\n .reduce((a, b) => a + b, 0);\n\n const compareRevenues = metricReports\n .map(\n (mr) => ((mr[MetricTypes.REVENUES] as MetricValue).compare as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const compareRevenueValues = metricReports\n .map(\n (mr) =>\n ((mr[MetricTypes.REVENUE_VALUES] as MetricValue).compare as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const compareOpportunities = metricReports\n .map(\n (mr) =>\n ((mr[MetricTypes.OPPORTUNITIES] as MetricValue).compare as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const compareOpportunityValues = metricReports\n .map(\n (mr) =>\n ((mr[MetricTypes.OPPORTUNITY_VALUES] as MetricValue)\n .compare as number) ?? 0\n )\n .reduce((a, b) => a + b, 0);\n\n const compareCpa = calculateCpaBase(\n compareCost,\n compareWeb,\n compareInboundCall\n );\n\n const compareCps = calculateCpsBase(compareCost, compareRevenues);\n\n const compareRoi = calculateRoiBase(compareCost, compareRevenueValues);\n\n const compareRoas = calculateRoasBase(compareCost, compareRevenueValues);\n\n const totalsMetricReport: MetricReport = {\n Field: 'Total',\n [MetricTypes.WEB]: { main: web, compare: compareWeb } as MetricValue,\n [MetricTypes.INBOUND_CALL]: {\n main: inboundCall,\n compare: compareInboundCall\n } as MetricValue,\n [MetricTypes.IMPRESSIONS]: {\n main: impressions,\n compare: compareImpressions\n } as MetricValue,\n [MetricTypes.CLICKS]: {\n main: clicks,\n compare: compareClicks\n } as MetricValue,\n [MetricTypes.COST]: { main: cost, compare: compareCost } as MetricValue,\n [MetricTypes.REVENUES]: {\n main: revenues,\n compare: compareRevenues\n } as MetricValue,\n [MetricTypes.REVENUE_VALUES]: {\n main: revenueValues,\n compare: compareRevenueValues\n } as MetricValue,\n [MetricTypes.OPPORTUNITIES]: {\n main: opportunities,\n compare: compareOpportunities\n } as MetricValue,\n [MetricTypes.OPPORTUNITY_VALUES]: {\n main: opportunityValues,\n compare: compareOpportunityValues\n } as MetricValue,\n [MetricTypes.CPA]: { main: cpa, compare: compareCpa } as MetricValue,\n [MetricTypes.CPS]: { main: cps, compare: compareCps } as MetricValue,\n [MetricTypes.ROI]: { main: roi, compare: compareRoi } as MetricValue,\n [MetricTypes.ROAS]: { main: roas, compare: compareRoas } as MetricValue\n };\n\n return totalsMetricReport;\n};\n","export const createComponentId = (reportType: string | undefined): string => {\n return `${reportType ?? 'default'}-component`;\n};\n","import { SelectedItemButtonContainerContentProps } from './selectedItemButtonContainerContentProps';\n\nconst SelectedItemButtonContainerContent = ({\n styles,\n selectedItem,\n onRenderSelectedItem\n}: SelectedItemButtonContainerContentProps) => {\n return (\n
    \n {onRenderSelectedItem && selectedItem\n ? onRenderSelectedItem(selectedItem)\n : null}\n \n
    \n );\n};\n\nexport default SelectedItemButtonContainerContent;\n","import DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport SelectedItemButtonContainerContent from 'common/components/drop-downs/legacy/selectedItemDropDownButtonContainerContent';\nimport { FC } from 'react';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\n\nexport const Pagination: FC<{\n currentPage: number;\n totalPages: number;\n totalRecords: number;\n currentPageSize: number;\n pageSizes: DropDownItemType[];\n isSticky: boolean;\n onNextPage: () => void;\n onPreviousPage: () => void;\n onPageSizeChanged: (pageSizeKey: number) => void;\n}> = ({\n currentPage,\n totalPages,\n totalRecords,\n pageSizes,\n currentPageSize,\n isSticky,\n onNextPage,\n onPreviousPage,\n onPageSizeChanged\n}) => {\n return (\n \n \n \n \n\n \n {totalPages > 0 ? currentPage : 0}\n \n of\n \n {totalPages}\n \n \n Total Records: {totalRecords ?? 0}\n \n\n = totalPages}\n className={`text-sm pt-0 p-1 my-1 text-center text-black`}\n onClick={onNextPage}\n >\n \n \n\n onPageSizeChanged(+pageSizeKey)}\n additionalChildProps={{ selectedItem: currentPageSize }}\n dropdownYPositionClass=\"bottom-7\"\n >\n (\n \n Page Size: {selectedPageSize}\n \n )}\n />\n \n \n );\n};\n","import {\n AdvancedReportMetricRow,\n AdvancedReportMetricRowsResult\n} from 'features/advanced-reports/advanced-reports.types';\nimport {\n AdvancedReportTableCell,\n AdvancedReportTableRow\n} from '../advanced-reports-table.types';\nimport {\n calculateCpaBase,\n calculateCpsBase,\n calculateRoasBase,\n calculateRoiBase\n} from 'features/reports/functions/metric-calculation-functions';\nimport { MetricAttribution } from 'common/types/metric.models';\nimport { MetricTypes } from 'common/constants/metric-types';\n\nfunction getSummedMetricValuesById(\n metrics: AdvancedReportMetricRow[],\n metricId: string\n): number {\n const summedMetrics = metrics\n .filter((metric) => metric.metricId === metricId)\n .map((metric) => metric.metricValue)\n .reduce((total, metricValue) => (total += metricValue), 0);\n\n return summedMetrics;\n}\n\nfunction createCellByMetricId(\n primaryMetrics: AdvancedReportMetricRow[],\n compareMetrics: AdvancedReportMetricRow[],\n metricId: string\n): AdvancedReportTableCell {\n const cell: AdvancedReportTableCell = {\n primaryValue: getSummedMetricValuesById(primaryMetrics, metricId),\n compareValue: getSummedMetricValuesById(compareMetrics, metricId)\n };\n\n return cell;\n}\n\nexport const createRows = (\n primaryMetrics: AdvancedReportMetricRowsResult,\n compareMetrics: AdvancedReportMetricRowsResult\n): AdvancedReportTableRow[] => {\n const allMetrics = [\n ...primaryMetrics.impressions,\n ...primaryMetrics.clicks,\n ...primaryMetrics.calls,\n ...primaryMetrics.webs,\n ...primaryMetrics.opps,\n ...primaryMetrics.oppValues,\n ...primaryMetrics.sales,\n ...primaryMetrics.revenues,\n ...primaryMetrics.costs,\n ...compareMetrics.impressions,\n ...compareMetrics.clicks,\n ...compareMetrics.calls,\n ...compareMetrics.webs,\n ...compareMetrics.opps,\n ...compareMetrics.oppValues,\n ...compareMetrics.sales,\n ...compareMetrics.revenues,\n ...compareMetrics.costs\n ];\n\n const unqiueMetricIdsSet = new Set([\n ...allMetrics.map((metric) => metric.metricId)\n ]);\n\n const unqiqueMetricIds = [...unqiueMetricIdsSet];\n const metricRows = unqiqueMetricIds.map((metricId) => {\n const metric = allMetrics.find((m) => m.metricId === metricId)!;\n const call = createCellByMetricId(\n primaryMetrics.calls,\n compareMetrics.calls,\n metricId\n );\n const web = createCellByMetricId(\n primaryMetrics.webs,\n compareMetrics.webs,\n metricId\n );\n const cost = createCellByMetricId(\n primaryMetrics.costs,\n compareMetrics.costs,\n metricId\n );\n const revenue = createCellByMetricId(\n primaryMetrics.revenues,\n compareMetrics.revenues,\n metricId\n );\n const sales = createCellByMetricId(\n primaryMetrics.sales,\n compareMetrics.sales,\n metricId\n );\n\n const row: AdvancedReportTableRow = {\n id: metricId,\n parentId: metric.metricParentId,\n hasChildren: allMetrics.some((m) => m.metricParentId === metricId),\n depth: metric.depth,\n field: metric.metricTypeName,\n shouldBlurField: metric.isMetricTypeNameSensitive,\n impressions: createCellByMetricId(\n primaryMetrics.impressions,\n compareMetrics.impressions,\n metricId\n ),\n clicks: createCellByMetricId(\n primaryMetrics.clicks,\n compareMetrics.clicks,\n metricId\n ),\n call,\n web,\n opportunity: createCellByMetricId(\n primaryMetrics.opps,\n compareMetrics.opps,\n metricId\n ),\n opportunityValue: createCellByMetricId(\n primaryMetrics.oppValues,\n compareMetrics.oppValues,\n metricId\n ),\n sales,\n revenue,\n cost,\n cpa: {\n primaryValue: calculateCpaBase(\n cost.primaryValue,\n web.primaryValue,\n call.primaryValue\n ),\n compareValue: calculateCpaBase(\n cost.compareValue,\n web.compareValue,\n call.compareValue\n )\n },\n cps: {\n primaryValue: calculateCpsBase(cost.primaryValue, sales.primaryValue),\n compareValue: calculateCpsBase(cost.compareValue, sales.compareValue)\n },\n roi: {\n primaryValue: calculateRoiBase(cost.primaryValue, revenue.primaryValue),\n compareValue: calculateRoiBase(cost.compareValue, revenue.compareValue)\n },\n roas: {\n primaryValue: calculateRoasBase(\n cost.primaryValue,\n revenue.primaryValue\n ),\n compareValue: calculateRoasBase(cost.compareValue, revenue.compareValue)\n }\n };\n\n return row;\n });\n\n return metricRows;\n};\n\nexport const createTotalRow = (\n rows: AdvancedReportTableRow[]\n): AdvancedReportTableRow => {\n const call = createCell(\n rows.map((row) => row.call.primaryValue),\n rows.map((row) => row.call.compareValue)\n );\n const web = createCell(\n rows.map((row) => row.web.primaryValue),\n rows.map((row) => row.web.compareValue)\n );\n const sales = createCell(\n rows.map((row) => row.sales.primaryValue),\n rows.map((row) => row.sales.compareValue)\n );\n const revenue = createCell(\n rows.map((row) => row.revenue.primaryValue),\n rows.map((row) => row.revenue.compareValue)\n );\n const cost = createCell(\n rows.map((row) => row.cost.primaryValue),\n rows.map((row) => row.cost.compareValue)\n );\n\n const totalRow: AdvancedReportTableRow = {\n id: 'total',\n parentId: '',\n hasChildren: false,\n depth: 0,\n field: 'Total',\n shouldBlurField: false,\n impressions: createCell(\n rows.map((row) => row.impressions.primaryValue),\n rows.map((row) => row.impressions.compareValue)\n ),\n clicks: createCell(\n rows.map((row) => row.clicks.primaryValue),\n rows.map((row) => row.clicks.compareValue)\n ),\n call,\n web,\n opportunity: createCell(\n rows.map((row) => row.opportunity.primaryValue),\n rows.map((row) => row.opportunity.compareValue)\n ),\n opportunityValue: createCell(\n rows.map((row) => row.opportunityValue.primaryValue),\n rows.map((row) => row.opportunityValue.compareValue)\n ),\n sales,\n revenue,\n cost,\n cpa: {\n primaryValue: calculateCpaBase(\n cost.primaryValue,\n web.primaryValue,\n call.primaryValue\n ),\n compareValue: calculateCpaBase(\n cost.compareValue,\n web.compareValue,\n call.compareValue\n )\n },\n cps: {\n primaryValue: calculateCpsBase(cost.primaryValue, sales.primaryValue),\n compareValue: calculateCpsBase(cost.compareValue, sales.compareValue)\n },\n roi: {\n primaryValue: calculateRoiBase(cost.primaryValue, revenue.primaryValue),\n compareValue: calculateRoiBase(cost.compareValue, revenue.compareValue)\n },\n roas: {\n primaryValue: calculateRoasBase(cost.primaryValue, revenue.primaryValue),\n compareValue: calculateRoasBase(cost.compareValue, revenue.compareValue)\n }\n };\n\n return totalRow;\n};\n\nfunction createCell(\n primaryValues: number[],\n compareValues: number[]\n): AdvancedReportTableCell {\n const cell: AdvancedReportTableCell = {\n primaryValue: primaryValues.reduce(\n (total, current) => (total += current),\n 0\n ),\n compareValue: compareValues.reduce(\n (total, current) => (total += current),\n 0\n )\n };\n\n return cell;\n}\n\nexport const createMetricAttributions = (\n attributionModel: string,\n metricRows: AdvancedReportMetricRow[],\n metricType: MetricTypes\n): MetricAttribution[] => {\n const attributions = metricRows.map((metric) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: metric.metricValue,\n metricType,\n metricTypeName: metric.metricTypeName\n };\n });\n\n return attributions;\n};\n\nexport const createAllMetricAttributionsFromArMetricRows = (\n attributionModel: string,\n impressions: AdvancedReportMetricRow[],\n clicks: AdvancedReportMetricRow[],\n calls: AdvancedReportMetricRow[],\n forms: AdvancedReportMetricRow[],\n opps: AdvancedReportMetricRow[],\n oppValues: AdvancedReportMetricRow[],\n sales: AdvancedReportMetricRow[],\n revenues: AdvancedReportMetricRow[],\n costs: AdvancedReportMetricRow[]\n): MetricAttribution[] => {\n const impressionAttributions = impressions.map((imp) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: imp.metricValue,\n metricType: MetricTypes.IMPRESSIONS,\n metricTypeName: imp.metricTypeName\n };\n });\n\n const clickAttributions = clicks.map((click) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: click.metricValue,\n metricType: MetricTypes.CLICKS,\n metricTypeName: click.metricTypeName\n };\n });\n\n const callAttributions = calls.map((call) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: call.metricValue,\n metricType: MetricTypes.INBOUND_CALL,\n metricTypeName: call.metricTypeName\n };\n });\n\n const formsAttributions = forms.map((form) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: form.metricValue,\n metricType: MetricTypes.WEB,\n metricTypeName: form.metricTypeName\n };\n });\n\n const oppsAttributions = opps.map((opp) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: opp.metricValue,\n metricType: MetricTypes.OPPORTUNITIES,\n metricTypeName: opp.metricTypeName\n };\n });\n\n const oppValuesAttributions = oppValues.map((oppValue) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: oppValue.metricValue,\n metricType: MetricTypes.OPPORTUNITY_VALUES,\n metricTypeName: oppValue.metricTypeName\n };\n });\n\n const salesAttributions = sales.map((sale) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: sale.metricValue,\n metricType: MetricTypes.REVENUES,\n metricTypeName: sale.metricTypeName\n };\n });\n\n const revenuesAttributions = revenues.map((rev) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: rev.metricValue,\n metricType: MetricTypes.REVENUE_VALUES,\n metricTypeName: rev.metricTypeName\n };\n });\n\n const costsAttributions = costs.map((cost) => {\n return {\n attributionModelName: attributionModel,\n attributionValue: cost.metricValue,\n metricType: MetricTypes.COST,\n metricTypeName: cost.metricTypeName\n };\n });\n\n return [\n ...impressionAttributions,\n ...clickAttributions,\n ...callAttributions,\n ...formsAttributions,\n ...oppsAttributions,\n ...oppValuesAttributions,\n ...salesAttributions,\n ...revenuesAttributions,\n ...costsAttributions\n ];\n};\n","import { MetricTypes } from 'common/constants/metric-types';\nimport { AdvancedReportTableRow } from '../advanced-reports-table.types';\n\nexport const sortRows = (\n rows: AdvancedReportTableRow[],\n idToSort: string,\n isDesc: boolean\n): AdvancedReportTableRow[] => {\n switch (idToSort) {\n case MetricTypes.IMPRESSIONS:\n return isDesc\n ? sortDesc(rows, (row) => row.impressions.primaryValue)\n : sortAsc(rows, (row) => row.impressions.primaryValue);\n case MetricTypes.CLICKS:\n return isDesc\n ? sortDesc(rows, (row) => row.clicks.primaryValue)\n : sortAsc(rows, (row) => row.clicks.primaryValue);\n case MetricTypes.INBOUND_CALL:\n return isDesc\n ? sortDesc(rows, (row) => row.call.primaryValue)\n : sortAsc(rows, (row) => row.call.primaryValue);\n case MetricTypes.WEB:\n return isDesc\n ? sortDesc(rows, (row) => row.web.primaryValue)\n : sortAsc(rows, (row) => row.web.primaryValue);\n case MetricTypes.OPPORTUNITIES:\n return isDesc\n ? sortDesc(rows, (row) => row.opportunity.primaryValue)\n : sortAsc(rows, (row) => row.opportunity.primaryValue);\n case MetricTypes.OPPORTUNITY_VALUES:\n return isDesc\n ? sortDesc(rows, (row) => row.opportunityValue.primaryValue)\n : sortAsc(rows, (row) => row.opportunityValue.primaryValue);\n case MetricTypes.REVENUES:\n return isDesc\n ? sortDesc(rows, (row) => row.sales.primaryValue)\n : sortAsc(rows, (row) => row.sales.primaryValue);\n case MetricTypes.REVENUE_VALUES:\n return isDesc\n ? sortDesc(rows, (row) => row.revenue.primaryValue)\n : sortAsc(rows, (row) => row.revenue.primaryValue);\n case MetricTypes.COST:\n return isDesc\n ? sortDesc(rows, (row) => row.cost.primaryValue)\n : sortAsc(rows, (row) => row.cost.primaryValue);\n case MetricTypes.CPA:\n return isDesc\n ? sortDesc(rows, (row) => row.cpa.primaryValue)\n : sortAsc(rows, (row) => row.cpa.primaryValue);\n case MetricTypes.CPS:\n return isDesc\n ? sortDesc(rows, (row) => row.cps.primaryValue)\n : sortAsc(rows, (row) => row.cps.primaryValue);\n case MetricTypes.ROI:\n return isDesc\n ? sortDesc(rows, (row) => row.roi.primaryValue)\n : sortAsc(rows, (row) => row.roi.primaryValue);\n case MetricTypes.ROAS:\n return isDesc\n ? sortDesc(rows, (row) => row.roas.primaryValue)\n : sortAsc(rows, (row) => row.roas.primaryValue);\n default:\n return sortAsc(rows, (row) => row.id);\n }\n};\n\nfunction sortAsc(\n rows: AdvancedReportTableRow[],\n predicate: (report: AdvancedReportTableRow) => number | string\n): AdvancedReportTableRow[] {\n return rows.sort((a, b) => (predicate(a) > predicate(b) ? 1 : -1));\n}\n\nfunction sortDesc(\n rows: AdvancedReportTableRow[],\n predicate: (report: AdvancedReportTableRow) => number | string\n): AdvancedReportTableRow[] {\n return rows.sort((a, b) => (predicate(a) > predicate(b) ? -1 : 1));\n}\n","import { useDispatch, useSelector } from 'react-redux';\nimport { onRowToggled, selectIsRowOpen } from '../advanced-reports-table.slice';\nimport { RootState } from 'app/store';\nimport { RowToggledPayload } from '../advanced-reports-table.types';\n\ninterface AdvancedReportsTableAccordionProps {\n rowId: string;\n isHidden: boolean;\n}\n\nconst AdvancedReportsTableAccordion = ({\n rowId,\n isHidden\n}: AdvancedReportsTableAccordionProps) => {\n const dispatch = useDispatch();\n const isOpen = useSelector((state: RootState) =>\n selectIsRowOpen(state, rowId)\n );\n\n const onToggleRow = () => {\n if (isHidden) {\n return;\n }\n\n const payload: RowToggledPayload = {\n rowId\n };\n\n dispatch(onRowToggled(payload));\n };\n\n return (\n <>\n \n \n \n \n );\n};\nexport default AdvancedReportsTableAccordion;\n","import { createColumnHelper } from '@tanstack/table-core';\nimport { StickyOptions } from 'common/components/table/tableTypes';\nimport {\n AdvancedReportTableCell,\n AdvancedReportTableRow\n} from './advanced-reports-table.types';\nimport Blur from 'features/blur/blur';\nimport MarketingSourceLogo from 'common/components/icons/marketingSourceLogo';\nimport { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\nimport Spinner, { SpinnerSize } from 'common/components/loading/spinner';\nimport AdvancedReportsTableAccordion from './advanced-reports-table-controls/advanced-reports-table-accordion';\nimport { MetricTypes } from 'common/constants/metric-types';\nimport { AdvancedReportQueryStatus } from '../advanced-reports.types';\nimport { QueryStatus } from '@reduxjs/toolkit/dist/query';\n\nfunction setDashAsDefaultAfterFormat(value: string): string {\n if (!value || value === '0') {\n return '-';\n }\n\n return value;\n}\n\nconst reportColumnHelper = createColumnHelper();\n\nfunction createHeader(headerName: string, isLoading: boolean) {\n return (\n
    \n \n {headerName}\n {isLoading ? (\n
    \n \n
    \n ) : (\n <>\n )}\n
    \n
    \n );\n}\n\nexport const fieldColumnId = 'Field';\n\nexport const getAdvancedReportColumnDefs = (\n currencyCode: string,\n primaryQueryStatus: AdvancedReportQueryStatus,\n compareQueryStatus: AdvancedReportQueryStatus,\n displayComparisonAttributionModelData: boolean\n) => {\n const primaryImpressionsIsLoading =\n primaryQueryStatus.impressions === QueryStatus.pending;\n const primaryClicksIsLoading =\n primaryQueryStatus.clicks === QueryStatus.pending;\n const primaryCallsIsLoading =\n primaryQueryStatus.calls === QueryStatus.pending;\n const primaryWebsIsLoading = primaryQueryStatus.webs === QueryStatus.pending;\n const primaryOppsIsLoading = primaryQueryStatus.opps === QueryStatus.pending;\n const primaryOppValuesIsLoading =\n primaryQueryStatus.oppValues === QueryStatus.pending;\n const primarySalesIsLoading =\n primaryQueryStatus.sales === QueryStatus.pending;\n const primaryRevenuesIsLoading =\n primaryQueryStatus.revenues === QueryStatus.pending;\n const primaryCostsIsLoading =\n primaryQueryStatus.costs === QueryStatus.pending;\n\n const compareImpressionsIsLoading =\n compareQueryStatus.impressions === QueryStatus.pending;\n const compareClicksIsLoading =\n compareQueryStatus.clicks === QueryStatus.pending;\n const compareCallsIsLoading =\n compareQueryStatus.calls === QueryStatus.pending;\n const compareWebsIsLoading = compareQueryStatus.webs === QueryStatus.pending;\n const compareOppsIsLoading = compareQueryStatus.opps === QueryStatus.pending;\n const compareOppValuesIsLoading =\n compareQueryStatus.oppValues === QueryStatus.pending;\n const compareSalesIsLoading =\n compareQueryStatus.sales === QueryStatus.pending;\n const compareRevenuesIsLoading =\n compareQueryStatus.revenues === QueryStatus.pending;\n const compareCostsIsLoading =\n compareQueryStatus.costs === QueryStatus.pending;\n\n return [\n reportColumnHelper.accessor((row) => row.field, {\n id: fieldColumnId,\n header: () => Field,\n enableColumnFilter: false,\n cell: (info) =>\n createFieldCell(\n info.getValue(),\n info.row.original.id,\n info.row.original.hasChildren,\n info.row.original.shouldBlurField\n ),\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'left'\n } as StickyOptions\n },\n enableGlobalFilter: false,\n enableSorting: false,\n minSize: 200\n }),\n reportColumnHelper.accessor((row) => row.impressions, {\n id: MetricTypes.IMPRESSIONS,\n header: () =>\n createHeader(\n 'Impressions',\n primaryImpressionsIsLoading || compareImpressionsIsLoading\n ),\n enableColumnFilter: false,\n cell: (info) =>\n createImpressionsCell(\n info.getValue(),\n displayComparisonAttributionModelData\n ),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.clicks, {\n id: MetricTypes.CLICKS,\n header: () =>\n createHeader(\n 'Clicks',\n primaryClicksIsLoading || compareClicksIsLoading\n ),\n enableColumnFilter: false,\n cell: (info) =>\n createClicksCell(\n info.getValue(),\n displayComparisonAttributionModelData\n ),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.call, {\n id: MetricTypes.INBOUND_CALL,\n header: () =>\n createHeader('Calls', primaryCallsIsLoading || compareCallsIsLoading),\n enableColumnFilter: false,\n cell: (info) =>\n createCallCell(info.getValue(), displayComparisonAttributionModelData),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.web, {\n id: MetricTypes.WEB,\n header: () =>\n createHeader('Forms', primaryWebsIsLoading || compareWebsIsLoading),\n enableColumnFilter: false,\n cell: (info) =>\n createWebCell(info.getValue(), displayComparisonAttributionModelData),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.opportunity, {\n id: MetricTypes.OPPORTUNITIES,\n header: () =>\n createHeader('Opps', primaryOppsIsLoading || compareOppsIsLoading),\n enableColumnFilter: false,\n cell: (info) =>\n createOpportunityCell(\n info.getValue(),\n displayComparisonAttributionModelData\n ),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.opportunityValue, {\n id: MetricTypes.OPPORTUNITY_VALUES,\n header: () =>\n createHeader(\n 'Opps Value',\n primaryOppValuesIsLoading || compareOppValuesIsLoading\n ),\n enableColumnFilter: false,\n cell: (info) =>\n createOpportunityValueCell(\n info.getValue(),\n currencyCode,\n displayComparisonAttributionModelData\n ),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.sales, {\n id: MetricTypes.REVENUES,\n header: () =>\n createHeader('Sales', primarySalesIsLoading || compareSalesIsLoading),\n enableColumnFilter: false,\n cell: (info) =>\n createSaleCell(info.getValue(), displayComparisonAttributionModelData),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.revenue, {\n id: MetricTypes.REVENUE_VALUES,\n header: () =>\n createHeader(\n 'Revenue',\n primaryRevenuesIsLoading || compareRevenuesIsLoading\n ),\n enableColumnFilter: false,\n cell: (info) =>\n createRevenueCell(\n info.getValue(),\n currencyCode,\n displayComparisonAttributionModelData\n ),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.cost, {\n id: MetricTypes.COST,\n header: () =>\n createHeader('Cost', primaryCostsIsLoading || compareCostsIsLoading),\n enableColumnFilter: false,\n cell: (info) =>\n createCostCell(\n info.getValue(),\n currencyCode,\n displayComparisonAttributionModelData\n ),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.cpa, {\n id: MetricTypes.CPA,\n header: () =>\n createHeader(\n 'CPA',\n primaryCostsIsLoading ||\n primaryWebsIsLoading ||\n primaryCallsIsLoading ||\n compareCostsIsLoading ||\n compareWebsIsLoading ||\n compareCallsIsLoading\n ),\n enableColumnFilter: false,\n cell: (info) =>\n createCpaCell(\n info.getValue(),\n currencyCode,\n displayComparisonAttributionModelData\n ),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.cps, {\n id: MetricTypes.CPS,\n header: () =>\n createHeader(\n 'CPS',\n primaryCostsIsLoading ||\n primarySalesIsLoading ||\n compareCostsIsLoading ||\n compareSalesIsLoading\n ),\n enableColumnFilter: false,\n cell: (info) =>\n createCpsCell(\n info.getValue(),\n currencyCode,\n displayComparisonAttributionModelData\n ),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.roi, {\n id: MetricTypes.ROI,\n header: () =>\n createHeader(\n 'ROI',\n primaryCostsIsLoading ||\n primaryRevenuesIsLoading ||\n compareCostsIsLoading ||\n compareRevenuesIsLoading\n ),\n enableColumnFilter: false,\n cell: (info) =>\n createRoiCell(\n info.getValue(),\n currencyCode,\n displayComparisonAttributionModelData\n ),\n size: 100\n }),\n reportColumnHelper.accessor((row) => row.roas, {\n id: MetricTypes.ROAS,\n header: () =>\n createHeader(\n 'ROAS',\n primaryCostsIsLoading ||\n primaryRevenuesIsLoading ||\n compareCostsIsLoading ||\n compareRevenuesIsLoading\n ),\n enableColumnFilter: false,\n cell: (info) =>\n createRoasCell(info.getValue(), displayComparisonAttributionModelData),\n size: 100\n })\n ].filter((column) => column !== undefined) as any[];\n};\n\nfunction getFieldCell(cellContent: string) {\n return (\n
    \n \n {cellContent}\n
    \n );\n}\nexport const createFieldCell = (\n value: string,\n rowId: string,\n rowHasChildren: boolean,\n shouldBlurFieldColumn: boolean\n) => (\n
    \n
    \n \n
    \n\n {shouldBlurFieldColumn ? (\n {getFieldCell(value)}\n ) : (\n getFieldCell(value)\n )}\n
    \n);\n\nexport const createImpressionsCell = (\n cell: AdvancedReportTableCell,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n {setDashAsDefaultAfterFormat(\n Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.primaryValue)\n )}\n
    \n {displayComparisonAttributionModelData ? (\n
    \n {setDashAsDefaultAfterFormat(\n Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.compareValue)\n )}\n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createClicksCell = (\n cell: AdvancedReportTableCell,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n
    \n {displayComparisonAttributionModelData ? (\n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createCallCell = (\n cell: AdvancedReportTableCell,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n
    \n {displayComparisonAttributionModelData ? (\n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createWebCell = (\n cell: AdvancedReportTableCell,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n
    \n {displayComparisonAttributionModelData ? (\n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createOpportunityCell = (\n cell: AdvancedReportTableCell,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n
    \n {displayComparisonAttributionModelData ? (\n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createOpportunityValueCell = (\n cell: AdvancedReportTableCell,\n currencyCode: string,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n \n
    \n {displayComparisonAttributionModelData ? (\n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n \n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createSaleCell = (\n cell: AdvancedReportTableCell,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n
    \n {displayComparisonAttributionModelData ? (\n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createRevenueCell = (\n cell: AdvancedReportTableCell,\n currencyCode: string,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n \n
    \n {displayComparisonAttributionModelData ? (\n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n \n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createCostCell = (\n cell: AdvancedReportTableCell,\n currencyCode: string,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n \n
    \n {displayComparisonAttributionModelData ? (\n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n \n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createCpaCell = (\n cell: AdvancedReportTableCell,\n currencyCode: string,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n \n
    \n {displayComparisonAttributionModelData ? (\n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n \n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createCpsCell = (\n cell: AdvancedReportTableCell,\n currencyCode: string,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n \n
    \n {displayComparisonAttributionModelData ? (\n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n \n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createRoiCell = (\n cell: AdvancedReportTableCell,\n currencyCode: string,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n \n
    \n {displayComparisonAttributionModelData ? (\n
    \n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n \n
    \n ) : (\n <>\n )}\n
    \n);\n\nexport const createRoasCell = (\n cell: AdvancedReportTableCell,\n displayComparisonAttributionModelData: boolean\n) => (\n
    \n
    \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n
    \n {displayComparisonAttributionModelData ? (\n
    \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cell.compareValue)}\n
    \n ) : (\n <>\n )}\n
    \n);\n","export enum AdvancedReportsQueryCategories {\n CLICKS = 'Clicks',\n CONVERSION_WEB = 'ConversionWeb',\n CONVERSION_INBOUNDCALL = 'ConversionInboundCall',\n AD_COST = 'AdCost',\n IMPRESSIONS = 'Impressions',\n REVENUE = 'Revenue',\n SALES = 'Sales',\n OPPORTUNITY = 'Opportunity',\n OPPORTUNITY_VALUE = 'OpportunityValue'\n}\n","import Loading from 'common/components/loading/loading';\nimport { CustomTable } from 'common/components/table/customTable';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { FC, useEffect, useMemo, useState } from 'react';\nimport ReportsInteractionBar from './reportsInteractionBar';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport { ReportExport } from './types/report-export';\nimport { getMetricReportColumns } from './reports-column-definitions';\nimport {\n createTotalsMetricReport,\n metricAttributionsToMetricReports\n} from './metric-attribution-mapper';\nimport { MetricAttribution } from 'common/types/metric.models';\nimport {\n onNextPage,\n onPageSizeChanged,\n onPreviousPage,\n selectReportsTableState\n} from './reports-table.slice';\nimport { RootState } from 'app/store';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { createComponentId } from './functions/reports-functions';\nimport {\n ColumnResizeMode,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n SortingState,\n useReactTable\n} from '@tanstack/react-table';\nimport { getSearchTermsById } from './../search-bar/searchBarSlice';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { fuzzyFilter } from 'common/components/table/table-functions/filters';\nimport { Pagination } from 'common/components/pagination/pagination';\nimport { getSelectedAttributionModel } from 'features/attribute-model/availableAttributionModelsSlice';\nimport { CustomTablePaging } from 'common/components/table/tableTypes';\nimport {\n selectIsAttributionComparisonActive,\n getSelectedAttributionCompareModel\n} from 'features/attribute-compare-model/availableAttributionCompareModelsSlice';\nimport { UseReportQueriesResult } from './hooks/use-report-queries';\nimport {\n createRows,\n createTotalRow,\n createAllMetricAttributionsFromArMetricRows\n} from 'features/advanced-reports/table/factories/advanced-report-table-row-factory';\nimport { AdvancedReportMetricRowsResult } from 'features/advanced-reports/advanced-reports.types';\nimport { sortRows } from 'features/advanced-reports/table/factories/advanced-report-table-helpers';\nimport { fieldColumnId } from 'features/advanced-reports/table/advanced-reports-column-defs';\n\ninterface ReportsTableProps {\n reportQueryResults: UseReportQueriesResult;\n reportType?: string;\n}\n\nexport const ReportsTable: FC = ({\n reportQueryResults,\n reportType\n}) => {\n const dispatch = useDispatch();\n const [columnResizeMode] = useState('onChange');\n const [sorting, setSorting] = useState([]);\n const [textFilter, setTextFilter] = useState('');\n\n const reportsTableState = useSelector(selectReportsTableState);\n\n const { tableValueToSearch } = useSelector((state: RootState) =>\n getSearchTermsById(state, createComponentId(reportType))\n );\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const { isPocModeActive } = useSelector(\n (state: RootState) => state.pocToggle\n );\n\n const selectedAttributionModel = useSelector((state: RootState) =>\n getSelectedAttributionModel(state, isPocModeActive)\n );\n\n const displayComparisonAttributionModelData = useSelector(\n (state: RootState) => selectIsAttributionComparisonActive(state)\n );\n\n const selectedAttributionCompareModel = useSelector((state: RootState) =>\n getSelectedAttributionCompareModel(state, isPocModeActive)\n );\n\n const dates = useSelector(getDateRangeAsObjects);\n\n useEffect(() => {\n setTextFilter(tableValueToSearch);\n }, [tableValueToSearch]);\n\n const primaryRowsResult: AdvancedReportMetricRowsResult = useMemo(() => {\n return {\n calls: reportQueryResults.main.calls.data,\n impressions: reportQueryResults.main.impressions.data,\n clicks: reportQueryResults.main.clicks.data,\n costs: reportQueryResults.main.cost.data,\n opps: reportQueryResults.main.opps.data,\n oppValues: reportQueryResults.main.oppValues.data,\n revenues: reportQueryResults.main.revenues.data,\n sales: reportQueryResults.main.sales.data,\n webs: reportQueryResults.main.forms.data\n };\n }, [reportQueryResults]);\n\n const compareRowsResult: AdvancedReportMetricRowsResult = useMemo(() => {\n return {\n calls: reportQueryResults.compare.calls.data,\n impressions: reportQueryResults.compare.impressions.data,\n clicks: reportQueryResults.compare.clicks.data,\n costs: reportQueryResults.compare.cost.data,\n opps: reportQueryResults.compare.opps.data,\n oppValues: reportQueryResults.compare.oppValues.data,\n revenues: reportQueryResults.compare.revenues.data,\n sales: reportQueryResults.compare.sales.data,\n webs: reportQueryResults.compare.forms.data\n };\n }, [reportQueryResults]);\n\n const metricRows = useMemo(() => {\n const metricRows = createRows(primaryRowsResult, compareRowsResult);\n const totalRow = createTotalRow(metricRows);\n\n const allRows = [...metricRows, totalRow];\n\n const sortedRows =\n sorting.length > 0\n ? sortRows(allRows, sorting[0].id, sorting[0].desc)\n : sortRows(allRows, fieldColumnId, false);\n\n return sortedRows;\n }, [primaryRowsResult, compareRowsResult, sorting]);\n\n const totalRow = useMemo(() => {\n const totalRow = createTotalRow(metricRows);\n return totalRow;\n }, [metricRows]);\n\n const shouldBlurFieldColumn = useMemo(() => {\n return reportType?.toUpperCase() !== 'SOURCE';\n }, [reportType]);\n\n const columnDefs = useMemo(() => {\n return getMetricReportColumns(\n totalRow,\n shouldBlurFieldColumn,\n displayComparisonAttributionModelData,\n reportQueryResults,\n selectedCurrencyCode\n );\n }, [\n totalRow,\n selectedCurrencyCode,\n shouldBlurFieldColumn,\n displayComparisonAttributionModelData,\n reportQueryResults\n ]);\n\n const metricReports = useMemo(() => {\n const metricAttributions = createAllMetricAttributionsFromArMetricRows(\n selectedAttributionModel,\n reportQueryResults.main.impressions.data,\n reportQueryResults.main.clicks.data,\n reportQueryResults.main.calls.data,\n reportQueryResults.main.forms.data,\n reportQueryResults.main.opps.data,\n reportQueryResults.main.oppValues.data,\n reportQueryResults.main.sales.data,\n reportQueryResults.main.revenues.data,\n reportQueryResults.main.cost.data\n );\n\n return metricAttributionsToMetricReports(\n metricAttributions,\n selectedAttributionModel,\n selectedAttributionCompareModel.id\n );\n }, [\n reportQueryResults,\n selectedAttributionModel,\n selectedAttributionCompareModel\n ]);\n\n const reportExport = useMemo(() => {\n const reportExport: ReportExport = {\n orderedReportColumnIds: columnDefs.map((column) => column.id as string),\n metricReports,\n dates,\n currencyCode: selectedCurrencyCode,\n searchTerm: tableValueToSearch,\n attributionModel: selectedAttributionModel\n };\n return reportExport;\n }, [\n columnDefs,\n dates,\n selectedCurrencyCode,\n tableValueToSearch,\n selectedAttributionModel,\n metricReports\n ]);\n\n const reportTable = useReactTable({\n data: metricRows,\n columns: columnDefs,\n manualSorting: true,\n state: {\n sorting,\n globalFilter: textFilter,\n pagination: {\n pageIndex: reportsTableState.currentPage - 1, // TanStack uses a zero-based index for paging\n pageSize: reportsTableState.currentPageSize\n }\n },\n onSortingChange: setSorting,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onGlobalFilterChange: setTextFilter,\n getPaginationRowModel: getPaginationRowModel(),\n globalFilterFn: fuzzyFilter,\n enableColumnResizing: true,\n columnResizeMode,\n debugTable: false,\n debugHeaders: false,\n debugColumns: false\n });\n\n const numberOfTableRows = reportTable.getFilteredRowModel().rows.length;\n\n const paging = useMemo(() => {\n const paging: CustomTablePaging = {\n isSticky: true,\n currentPage: reportsTableState.currentPage,\n currentPageSize: reportsTableState.currentPageSize,\n pageSizes: reportsTableState.pageSizes.map(\n (pageSize) => {\n const pageSizeString = pageSize.toString();\n return {\n key: pageSizeString,\n label: pageSizeString,\n isActive: pageSize === reportsTableState.currentPageSize\n };\n }\n ),\n totalRecords: numberOfTableRows\n };\n\n return paging;\n }, [reportsTableState, numberOfTableRows]);\n\n return (\n <>\n
    \n \n
    \n {metricRows && totalRow ? (\n \n <>\n \n {/* \n // We do not have a solution for when the paging is sticky and the table is too wide for devices\n // There are solutions, see: https://stackoverflow.com/a/70772702/21681884\n // An alternative would be to create a flexible table which has no overflow-x on it (remove Detailed views) or move paging outside the table \n */}\n dispatch(onPreviousPage())}\n onNextPage={() => dispatch(onNextPage())}\n onPageSizeChanged={(pagesize) =>\n dispatch(onPageSizeChanged(pagesize))\n }\n >\n \n \n ) : (\n <>\n )}\n \n );\n};\nexport default ReportsTable;\n","import { CustomDataKeys } from 'common/constants/custom-data-keys';\n\nexport const getCustomDataKey = (reportType: string) => {\n switch (reportType) {\n case 'source':\n return CustomDataKeys.MARKETING_SOURCE;\n case 'keywords':\n return CustomDataKeys.KEYWORD;\n case 'landing-page':\n return CustomDataKeys.LANDING_PAGE;\n case 'referrer':\n return CustomDataKeys.REFERRER;\n case 'utm-campaign':\n return CustomDataKeys.UTM_CAMPAIGN;\n case 'utm-medium':\n return CustomDataKeys.UTM_MEDIUM;\n case 'utm-content':\n return CustomDataKeys.UTM_CONTENT;\n case 'browser':\n return CustomDataKeys.BROWSER;\n case 'os':\n return CustomDataKeys.OPERATOR_SYSTEM;\n case 'device':\n return CustomDataKeys.DEVICE;\n default:\n throw Error(\n `Could not find custom data key for report type ${reportType}`\n );\n }\n};\n","import { FC, useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { useParams } from 'react-router-dom';\nimport Loading from 'common/components/loading/loading';\nimport { getSearchTermsById } from '../features/search-bar/searchBarSlice';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport Tile from 'features/tiles/tile';\nimport ChartBridge from 'features/charts/strategies/chart-bridge';\nimport ReportsTable from 'features/reports/reports-table';\nimport { createComponentId } from 'features/reports/functions/reports-functions';\nimport { metricAttributionsToChartByString } from 'features/reports/metric-attribution-mapper';\nimport { getSelectedAttributionModel } from 'features/attribute-model/availableAttributionModelsSlice';\nimport { AttributionModelTypes } from 'common/constants/attribution-model-types';\nimport { selectIsAttributionComparisonActive } from 'features/attribute-compare-model/availableAttributionCompareModelsSlice';\nimport { useReportQueries } from 'features/reports/hooks/use-report-queries';\nimport {\n createMetricAttributions,\n createAllMetricAttributionsFromArMetricRows\n} from 'features/advanced-reports/table/factories/advanced-report-table-row-factory';\nimport { MetricTypes } from 'common/constants/metric-types';\n\nexport const Reports: FC = () => {\n const { reportType } = useParams();\n const dispatch = useDispatch();\n\n const { isPocModeActive } = useSelector(\n (state: RootState) => state.pocToggle\n );\n\n const selectedAttributionModel = useSelector((state: RootState) => {\n const selectedAttributionModel = getSelectedAttributionModel(\n state,\n isPocModeActive\n );\n return selectedAttributionModel;\n });\n\n const shouldDisplayAttributionComparison = useSelector((state: RootState) => {\n return selectIsAttributionComparisonActive(state);\n });\n\n const reportQueryResults = useReportQueries(reportType ?? '');\n\n const shouldDisplayChart =\n reportType === 'source' && !shouldDisplayAttributionComparison;\n\n const { tableValueToSearch } = useSelector((state: RootState) =>\n getSearchTermsById(state, createComponentId(reportType))\n );\n\n const isLoadingAll = useMemo(() => {\n return (\n reportQueryResults.main.impressions.isLoading ||\n reportQueryResults.main.calls.isLoading ||\n reportQueryResults.main.forms.isLoading ||\n reportQueryResults.main.clicks.isLoading ||\n reportQueryResults.main.cost.isLoading ||\n reportQueryResults.main.revenues.isLoading ||\n reportQueryResults.main.sales.isLoading ||\n reportQueryResults.main.opps.isLoading ||\n reportQueryResults.main.oppValues.isLoading ||\n reportQueryResults.compare.impressions.isLoading ||\n reportQueryResults.compare.calls.isLoading ||\n reportQueryResults.compare.forms.isLoading ||\n reportQueryResults.compare.clicks.isLoading ||\n reportQueryResults.compare.cost.isLoading ||\n reportQueryResults.compare.revenues.isLoading ||\n reportQueryResults.compare.sales.isLoading ||\n reportQueryResults.compare.opps.isLoading ||\n reportQueryResults.compare.oppValues.isLoading\n );\n }, [reportQueryResults]);\n\n const isFetchingAll = useMemo(() => {\n return (\n reportQueryResults.main.impressions.isFetching ||\n reportQueryResults.main.calls.isFetching ||\n reportQueryResults.main.forms.isFetching ||\n reportQueryResults.main.clicks.isFetching ||\n reportQueryResults.main.cost.isFetching ||\n reportQueryResults.main.revenues.isFetching ||\n reportQueryResults.main.sales.isFetching ||\n reportQueryResults.main.opps.isFetching ||\n reportQueryResults.main.oppValues.isFetching ||\n reportQueryResults.compare.impressions.isFetching ||\n reportQueryResults.compare.calls.isFetching ||\n reportQueryResults.compare.forms.isFetching ||\n reportQueryResults.compare.clicks.isFetching ||\n reportQueryResults.compare.cost.isFetching ||\n reportQueryResults.compare.revenues.isFetching ||\n reportQueryResults.compare.sales.isFetching ||\n reportQueryResults.compare.opps.isFetching ||\n reportQueryResults.compare.oppValues.isFetching\n );\n }, [reportQueryResults]);\n\n const allARMetricRows = useMemo(() => {\n return [\n ...reportQueryResults.main.impressions.data,\n ...reportQueryResults.main.calls.data,\n ...reportQueryResults.main.forms.data,\n ...reportQueryResults.main.clicks.data,\n ...reportQueryResults.main.cost.data,\n ...reportQueryResults.main.revenues.data,\n ...reportQueryResults.main.sales.data,\n ...reportQueryResults.main.opps.data,\n ...reportQueryResults.main.oppValues.data,\n ...reportQueryResults.compare.impressions.data,\n ...reportQueryResults.compare.calls.data,\n ...reportQueryResults.compare.forms.data,\n ...reportQueryResults.compare.clicks.data,\n ...reportQueryResults.compare.cost.data,\n ...reportQueryResults.compare.revenues.data,\n ...reportQueryResults.compare.sales.data,\n ...reportQueryResults.compare.opps.data,\n ...reportQueryResults.compare.oppValues.data\n ];\n }, [reportQueryResults]);\n\n const reportsChartData = useMemo(() => {\n if (allARMetricRows) {\n return metricAttributionsToChartByString(\n createAllMetricAttributionsFromArMetricRows(\n selectedAttributionModel,\n reportQueryResults.main.impressions.data,\n reportQueryResults.main.clicks.data,\n reportQueryResults.main.calls.data,\n reportQueryResults.main.forms.data,\n reportQueryResults.main.opps.data,\n reportQueryResults.main.oppValues.data,\n reportQueryResults.main.sales.data,\n reportQueryResults.main.revenues.data,\n reportQueryResults.main.cost.data\n ),\n selectedAttributionModel,\n tableValueToSearch\n );\n }\n }, [\n reportQueryResults,\n selectedAttributionModel,\n tableValueToSearch,\n allARMetricRows\n ]);\n\n return (\n <>\n \n {shouldDisplayChart ? (\n \n
    \n {!isLoadingAll && !isFetchingAll && reportsChartData ? (\n \n ) : (\n \n )}\n
    \n
    \n ) : (\n <>\n )}\n \n
    \n \n );\n};\n","import {\n useGetClicksReportQuery,\n useGetConversionReportQuery,\n useGetCostReportQuery,\n useGetOpportunityReportQuery,\n useGetRevenueReportQuery\n} from 'app/apis/advanced-reports/advanced-report-query-api';\nimport { AdvancedReportsQueryCategories } from 'features/advanced-reports/constants/advanced-reports-query-categories';\nimport { SegmentTypes } from 'features/segment-controls/constants/segment-types';\nimport { v4 as guid } from 'uuid';\nimport { getCustomDataKey } from 'features/reports/helpers/report-type-helper';\nimport { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { getSelectedAttributionModel } from 'features/attribute-model/availableAttributionModelsSlice';\nimport { AttributionModelTypes } from 'common/constants/attribution-model-types';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport {\n AdvancedReportMetricRow,\n GetAdvancedReportQuerySegment\n} from 'features/advanced-reports/advanced-reports.types';\nimport {\n getSelectedAttributionCompareModel,\n selectIsAttributionComparisonActive\n} from 'features/attribute-compare-model/availableAttributionCompareModelsSlice';\nimport { toLocalIso } from 'common/utils/date-helpers';\n\ninterface ReportQueryResult {\n isFetching: boolean;\n isLoading: boolean;\n data: AdvancedReportMetricRow[];\n}\n\nexport interface UseReportQueriesResult {\n main: {\n impressions: ReportQueryResult;\n clicks: ReportQueryResult;\n calls: ReportQueryResult;\n forms: ReportQueryResult;\n opps: ReportQueryResult;\n oppValues: ReportQueryResult;\n sales: ReportQueryResult;\n revenues: ReportQueryResult;\n cost: ReportQueryResult;\n };\n compare: {\n impressions: ReportQueryResult;\n clicks: ReportQueryResult;\n calls: ReportQueryResult;\n forms: ReportQueryResult;\n opps: ReportQueryResult;\n oppValues: ReportQueryResult;\n sales: ReportQueryResult;\n revenues: ReportQueryResult;\n cost: ReportQueryResult;\n };\n}\n\nexport const useReportQueries = (\n reportType: string\n): UseReportQueriesResult => {\n const dates = useSelector(getDateRangeAsObjects);\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const isCompareSelected = useSelector(selectIsAttributionComparisonActive);\n\n const { isPocModeActive } = useSelector(\n (state: RootState) => state.pocToggle\n );\n\n const selectedAttributionModel = useSelector((state: RootState) => {\n const selectedAttributionModel = getSelectedAttributionModel(\n state,\n isPocModeActive\n );\n\n return selectedAttributionModel;\n });\n\n const { id: selectedAttributionCompareModel } = useSelector(\n (state: RootState) =>\n getSelectedAttributionCompareModel(state, isPocModeActive)\n );\n\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const newGuid = useMemo(() => guid(), []);\n\n const getSegmentRequest = (\n reportType: string\n ): GetAdvancedReportQuerySegment[] => {\n return [\n {\n filters: [],\n order: 0,\n segmentCategory: getCustomDataKey(reportType),\n segmentId: newGuid,\n segmentType: SegmentTypes.CUSTOM_DATA_KEY\n }\n ];\n };\n\n const {\n data: impressionsCustomData,\n isLoading: isLoadingImpressions,\n isFetching: isFetchingImpressions\n } = useGetCostReportQuery({\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.IMPRESSIONS,\n attributionModelName: selectedAttributionModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n });\n\n const {\n data: webConversionsCustomData,\n isLoading: isLoadingWebConversions,\n isFetching: isFetchingWebConversions\n } = useGetConversionReportQuery({\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.CONVERSION_WEB,\n attributionModelName: selectedAttributionModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n });\n\n const {\n data: inboundCallConversionsCustomData,\n isLoading: isLoadingInboundCallConversions,\n isFetching: isFetchingInboundCallConversions\n } = useGetConversionReportQuery({\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.CONVERSION_INBOUNDCALL,\n attributionModelName: selectedAttributionModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n });\n\n const {\n data: clicksCustomData,\n isLoading: isLoadingClicks,\n isFetching: isFetchingClicks\n } = useGetClicksReportQuery({\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.CLICKS,\n attributionModelName: selectedAttributionModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n });\n\n const {\n data: costCustomData,\n isLoading: isLoadingCost,\n isFetching: isFetchingCost\n } = useGetCostReportQuery({\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.AD_COST,\n attributionModelName: selectedAttributionModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n });\n\n const {\n data: revenueCustomData,\n isLoading: isLoadingRevenue,\n isFetching: isFetchingRevenue\n } = useGetRevenueReportQuery({\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.REVENUE,\n attributionModelName: selectedAttributionModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n });\n\n const {\n data: salesCustomData,\n isLoading: isLoadingSales,\n isFetching: isFetchingSales\n } = useGetRevenueReportQuery({\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.SALES,\n attributionModelName: selectedAttributionModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n });\n\n const {\n data: opportunityCustomData,\n isLoading: isLoadingOpportunities,\n isFetching: isFetchingOpportunities\n } = useGetOpportunityReportQuery({\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.OPPORTUNITY,\n attributionModelName: selectedAttributionModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n });\n\n const {\n data: opportunityValuesCustomData,\n isLoading: isLoadingOpportunityValues,\n isFetching: isFetchingOpportunityValues\n } = useGetOpportunityReportQuery({\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.OPPORTUNITY_VALUE,\n attributionModelName: selectedAttributionModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n });\n\n const {\n data: impressionsCompareCustomData,\n isLoading: isLoadingCompareImpressions,\n isFetching: isFetchingCompareImpressions\n } = useGetCostReportQuery(\n {\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.IMPRESSIONS,\n attributionModelName: selectedAttributionCompareModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n },\n {\n skip: !isCompareSelected\n }\n );\n\n const {\n data: webConversionsCompareCustomData,\n isLoading: isLoadingCompareWebConversions,\n isFetching: isFetchingCompareWebConversions\n } = useGetConversionReportQuery(\n {\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.CONVERSION_WEB,\n attributionModelName: selectedAttributionCompareModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n },\n {\n skip: !isCompareSelected\n }\n );\n\n const {\n data: inboundCallConversionsCompareCustomData,\n isLoading: isLoadingCompareInboundCallConversions,\n isFetching: isFetchingCompareInboundCallConversions\n } = useGetConversionReportQuery(\n {\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.CONVERSION_INBOUNDCALL,\n attributionModelName: selectedAttributionCompareModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n },\n {\n skip: !isCompareSelected\n }\n );\n\n const {\n data: clicksCompareCustomData,\n isLoading: isLoadingCompareClicks,\n isFetching: isFetchingCompareClicks\n } = useGetClicksReportQuery(\n {\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.CLICKS,\n attributionModelName: selectedAttributionCompareModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n },\n {\n skip: !isCompareSelected\n }\n );\n\n const {\n data: costCompareCustomData,\n isLoading: isLoadingCompareCost,\n isFetching: isFetchingCompareCost\n } = useGetCostReportQuery(\n {\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.AD_COST,\n attributionModelName: selectedAttributionCompareModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n },\n {\n skip: !isCompareSelected\n }\n );\n\n const {\n data: revenueCompareCustomData,\n isLoading: isLoadingCompareRevenue,\n isFetching: isFetchingCompareRevenue\n } = useGetRevenueReportQuery(\n {\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.REVENUE,\n attributionModelName: selectedAttributionCompareModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n },\n {\n skip: !isCompareSelected\n }\n );\n\n const {\n data: salesCompareCustomData,\n isLoading: isLoadingCompareSales,\n isFetching: isFetchingCompareSales\n } = useGetRevenueReportQuery(\n {\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.SALES,\n attributionModelName: selectedAttributionCompareModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n },\n {\n skip: !isCompareSelected\n }\n );\n\n const {\n data: opportunityCompareCustomData,\n isLoading: isLoadingCompareOpportunities,\n isFetching: isFetchingCompareOpportunities\n } = useGetOpportunityReportQuery(\n {\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.OPPORTUNITY,\n attributionModelName: selectedAttributionCompareModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n },\n {\n skip: !isCompareSelected\n }\n );\n\n const {\n data: opportunityValuesCompareCustomData,\n isLoading: isLoadingCompareOpportunityValues,\n isFetching: isFetchingCompareOpportunityValues\n } = useGetOpportunityReportQuery(\n {\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n siteId,\n queryCategory: AdvancedReportsQueryCategories.OPPORTUNITY_VALUE,\n attributionModelName: selectedAttributionCompareModel,\n currencyCode: selectedCurrencyCode,\n segmentRequests: getSegmentRequest(reportType)\n },\n {\n skip: !isCompareSelected\n }\n );\n\n return {\n main: {\n impressions: {\n isFetching: isFetchingImpressions,\n isLoading: isLoadingImpressions,\n data: impressionsCustomData ?? []\n },\n clicks: {\n isFetching: isFetchingClicks,\n isLoading: isLoadingClicks,\n data: clicksCustomData ?? []\n },\n calls: {\n isFetching: isFetchingInboundCallConversions,\n isLoading: isLoadingInboundCallConversions,\n data: inboundCallConversionsCustomData ?? []\n },\n forms: {\n isFetching: isFetchingWebConversions,\n isLoading: isLoadingWebConversions,\n data: webConversionsCustomData ?? []\n },\n opps: {\n isFetching: isFetchingOpportunities,\n isLoading: isLoadingOpportunities,\n data: opportunityCustomData ?? []\n },\n oppValues: {\n isFetching: isFetchingOpportunityValues,\n isLoading: isLoadingOpportunityValues,\n data: opportunityValuesCustomData ?? []\n },\n sales: {\n isFetching: isFetchingSales,\n isLoading: isLoadingSales,\n data: salesCustomData ?? []\n },\n revenues: {\n isFetching: isFetchingRevenue,\n isLoading: isLoadingRevenue,\n data: revenueCustomData ?? []\n },\n cost: {\n isFetching: isFetchingCost,\n isLoading: isLoadingCost,\n data: costCustomData ?? []\n }\n },\n compare: {\n impressions: {\n isFetching: isFetchingCompareImpressions,\n isLoading: isLoadingCompareImpressions,\n data: impressionsCompareCustomData ?? []\n },\n clicks: {\n isFetching: isFetchingCompareClicks,\n isLoading: isLoadingCompareClicks,\n data: clicksCompareCustomData ?? []\n },\n calls: {\n isFetching: isFetchingCompareInboundCallConversions,\n isLoading: isLoadingCompareInboundCallConversions,\n data: inboundCallConversionsCompareCustomData ?? []\n },\n forms: {\n isFetching: isFetchingCompareWebConversions,\n isLoading: isLoadingCompareWebConversions,\n data: webConversionsCompareCustomData ?? []\n },\n opps: {\n isFetching: isFetchingCompareOpportunities,\n isLoading: isLoadingCompareOpportunities,\n data: opportunityCompareCustomData ?? []\n },\n oppValues: {\n isFetching: isFetchingCompareOpportunityValues,\n isLoading: isLoadingCompareOpportunityValues,\n data: opportunityValuesCompareCustomData ?? []\n },\n sales: {\n isFetching: isFetchingCompareSales,\n isLoading: isLoadingCompareSales,\n data: salesCompareCustomData ?? []\n },\n revenues: {\n isFetching: isFetchingCompareRevenue,\n isLoading: isLoadingCompareRevenue,\n data: revenueCompareCustomData ?? []\n },\n cost: {\n isFetching: isFetchingCompareCost,\n isLoading: isLoadingCompareCost,\n data: costCompareCustomData ?? []\n }\n }\n };\n};\n","import React, { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { LoginRequest, useLoginMutation } from 'app/apis/authApi';\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/dist/query';\nimport { SerializedError } from '@reduxjs/toolkit';\n\ninterface LoginErrorState {\n isUsernameEmpty: boolean | null;\n isPasswordEmpty: boolean | null;\n haveChangedInputValuesSinceLastError: boolean;\n}\n\nconst defaultErrorMessage =\n 'Something went wrong. Please try again later. If the problem persists, please contact Ruler Analytics support.';\n\nconst Login: React.FC = () => {\n const [formState, setFormState] = useState({\n password: '',\n username: ''\n });\n\n const [errorState, setErrorState] = useState({\n isUsernameEmpty: null,\n isPasswordEmpty: null,\n haveChangedInputValuesSinceLastError: false\n });\n\n const [login, { isError, error }] = useLoginMutation();\n const navigate = useNavigate();\n\n const handleLoginError = (\n error: FetchBaseQueryError | SerializedError | undefined\n ) => {\n if (error) {\n let errorMessage: string = defaultErrorMessage;\n if ('status' in error) {\n // you can access all properties of `FetchBaseQueryError` here\n errorMessage =\n 'originalStatus' in error && error.originalStatus === 401\n ? 'Incorrect email address and / or password.'\n : defaultErrorMessage;\n\n return (\n
    \n
    {errorMessage}
    \n
    \n );\n } else {\n return
    {errorMessage}
    ;\n }\n }\n };\n const handleChange = ({\n target: { name, value }\n }: React.ChangeEvent) => {\n setErrorState({\n isUsernameEmpty: false,\n isPasswordEmpty: false,\n haveChangedInputValuesSinceLastError: true\n });\n setFormState((prev) => ({ ...prev, [name]: value }));\n };\n\n return (\n <>\n
    \n
    \n \n {\n const handler = async () => {\n e.preventDefault();\n\n if (!formState.username && !formState.password) {\n setErrorState({\n isUsernameEmpty: true,\n isPasswordEmpty: true,\n haveChangedInputValuesSinceLastError: false\n });\n return;\n }\n\n if (!formState.username) {\n setErrorState({\n isUsernameEmpty: true,\n isPasswordEmpty: false,\n haveChangedInputValuesSinceLastError: false\n });\n return;\n }\n\n if (!formState.password) {\n setErrorState({\n isUsernameEmpty: false,\n isPasswordEmpty: true,\n haveChangedInputValuesSinceLastError: false\n });\n return;\n }\n\n const formData: FormData = new FormData();\n formData.append('username', formState.username);\n formData.append('password', formState.password);\n\n setErrorState({\n isUsernameEmpty: false,\n isPasswordEmpty: false,\n haveChangedInputValuesSinceLastError: false\n });\n\n const result: any = await login(formData);\n\n if (!result.error) {\n navigate('/dashboard');\n }\n };\n handler().catch((error) => console.log(error));\n }}\n className=\"sm:w-108 mt-6 p-5 border border-neutral-200 shadow-md bg-white\"\n >\n {isError && !errorState.haveChangedInputValuesSinceLastError && (\n
    \n
    \n {handleLoginError(error)}\n
    \n
    \n )}\n
    \n \n {errorState?.isUsernameEmpty && (\n

    \n Please enter your username.\n

    \n )}\n \n
    \n
    \n \n {errorState?.isPasswordEmpty && (\n

    \n Please enter your password.\n

    \n )}\n \n
    \n \n Login\n \n \n\n

    \n Don't have an account yet{'?'} \n \n Get Started\n \n

    \n
    \n
    \n \n \n \n
    \n
    \n \n );\n};\n\nexport default Login;\n","import { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport {\n selectIdToken,\n selectIsAuthenticated,\n selectIsSuperUser\n} from 'features/auth/authenticationSlice';\n\nexport const useAuth = (): {\n isAuthenticated: boolean;\n idToken: string | null;\n isSuperUser: boolean;\n} => {\n const isAuthenticated = useSelector(selectIsAuthenticated);\n const idToken = useSelector(selectIdToken);\n const isSuperUser = useSelector(selectIsSuperUser);\n\n return useMemo(\n () => ({ isAuthenticated, idToken, isSuperUser }),\n [isAuthenticated, idToken, isSuperUser]\n );\n};\n","import { Navigate, Outlet, useLocation } from 'react-router-dom';\nimport { useAuth } from 'features/auth/hooks/useAuth';\n\nexport function PrivateOutlet() {\n const auth = useAuth();\n const location = useLocation();\n\n return auth.isAuthenticated ? (\n \n ) : (\n \n );\n}\n","import { FC } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useAuth } from 'features/auth/hooks/useAuth';\nimport { logout } from 'features/auth/authenticationSlice';\nimport { queryApi } from 'app/apis/queryApi';\nimport { clearSites } from 'features/topbar/selectedSiteSlice';\nimport { persistor } from 'app/store';\nimport { authApi } from 'app/apis/authApi';\n\nconst LogoutButton: FC<{ buttonClasses: string; buttonLabel: string }> = ({\n buttonClasses,\n buttonLabel\n}) => {\n const dispatch = useDispatch();\n const { isAuthenticated } = useAuth();\n\n const logoutButton = () => {\n if (!isAuthenticated) {\n return;\n }\n\n return (\n {\n dispatch(logout());\n dispatch(clearSites());\n dispatch(queryApi.util.resetApiState());\n dispatch(authApi.util.resetApiState());\n persistor\n .purge()\n .then(() => {\n console.log('purged app state');\n })\n .catch(() => {\n console.log('app state purge failed');\n });\n }}\n className={`${buttonClasses}`}\n >\n \n \n {buttonLabel}\n \n \n );\n };\n\n return <>{logoutButton()};\n};\n\nexport default LogoutButton;\n","import { RootState } from 'app/store';\nimport { FC, MouseEvent, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { closeModal, confirmModal, selectModal } from './modalSlice';\nimport Spinner from 'common/components/loading/spinner';\n\n// TODO: Remove these from the slice as they are not needed anymore\nexport enum ModalConfirmTypes {\n ON_DELETE_MULTIPLE_REVENUES = 'onDeleteMultipleRevenues',\n ON_DELETE_MULTIPLE_OPPORTUNITIES = 'onDeleteMultipleOpportunities',\n ON_DELETE_WEB_PAGE_VIEW_SEGMENTATION_CONFIG = 'onDeleteWebPageViewSegmentationConfig'\n}\n\n/*\n This needs refactoring. The modal component shouldn't care about anything other than itself.\n Ticket here: https://ruleranalytics.atlassian.net/browse/OV-847\n*/\nexport const Modal: FC = () => {\n const dispatch = useDispatch();\n const {\n modalInfo: { modalProps },\n isOpen,\n isLoading\n } = useSelector((state: RootState) => selectModal(state));\n\n const title = modalProps?.title ?? 'Modal Title';\n const content = modalProps?.content ?? 'Modal Content';\n const buttonType = modalProps?.buttonType ?? 'Delete';\n\n const triggerClick = (event: MouseEvent) => {\n dispatch(confirmModal());\n };\n\n return (\n <>\n {isOpen ? (\n \n
    \n\n
    \n
    \n
    \n
    \n
    \n {/* icon here */}\n
    \n \n \n \n
    \n\n {/* content here */}\n
    \n \n {title}\n \n
    \n

    {content}

    \n
    \n
    \n
    \n
    \n
    \n \n {isLoading ? (\n
    \n \n
    \n ) : null}\n

    \n {buttonType}\n

    \n \n dispatch(closeModal())}\n >\n Cancel\n \n
    \n
    \n
    \n
    \n \n ) : null}\n \n );\n};\n","import { useTypedSelector } from 'common/hooks/store';\nimport { FC } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { toggleBlur } from './blurToggleSlice';\n\nconst BlurButton: FC<{ buttonClasses: string }> = ({ buttonClasses }) => {\n const { isBlurActive } = useTypedSelector((state) => state.blur);\n\n const dispatch = useDispatch();\n\n return (\n <>\n \n \n );\n};\n\nexport default BlurButton;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { selectSite } from 'features/topbar/selectedSiteSlice';\nimport { UserSite, useGetSitesQuery } from 'app/apis/queryApi';\nimport { FC, useMemo, useRef, useState } from 'react';\nimport { useClickAway } from 'react-use';\nimport Loading from 'common/components/loading/loading';\nimport { useFilteredValues } from 'common/hooks/filteredValues';\n\n/* TODO: Refactor\n See ticket: https://ruleranalytics.atlassian.net/browse/OV-837\n*/\n\nconst SitePicker: FC = () => {\n const dispatch = useDispatch();\n const { siteLabel } = useSelector((state: RootState) => state.selectedSite);\n const { isBlurActive } = useSelector((state: RootState) => state.blur);\n\n const [searchTerm, setSearchTerm] = useState('');\n const [valueForInput, setValueForInput] = useState(siteLabel);\n const [openDropDown, setOpenDropDown] = useState(false);\n const sitePickerRef = useRef(null);\n\n const { data: siteData, isLoading, isFetching } = useGetSitesQuery();\n\n const filteredSites = useFilteredValues(siteData, searchTerm, (site, term) =>\n site.label.toLowerCase().includes(term)\n );\n\n useClickAway(sitePickerRef, () => {\n setValueForInput(siteLabel);\n setOpenDropDown(false);\n });\n\n if (!siteLabel) {\n return <>;\n }\n\n if (siteData && siteData.length === 1) {\n return (\n
    \n {siteData[0].label.endsWith('/')\n ? siteData[0].label.slice(0, -1)\n : siteData[0].label}\n
    \n );\n }\n\n if (isBlurActive) {\n return <>;\n }\n\n if (!isLoading && !isFetching) {\n if (!siteData || siteData.length === 0) {\n return (\n
    \n
    \n

    No sites found

    \n
    \n
    \n );\n }\n\n return (\n
    \n <>\n {\n setOpenDropDown(!openDropDown);\n }}\n >\n
    \n {\n setValueForInput(e.target.value);\n setSearchTerm(e.target.value);\n if (!openDropDown) {\n setOpenDropDown(true);\n }\n }}\n onClick={(e) => {\n setValueForInput(searchTerm);\n if (!openDropDown) {\n setOpenDropDown(true);\n }\n }}\n />\n {searchTerm ? (\n {\n e.preventDefault();\n setSearchTerm('');\n }}\n >\n \n \n ) : null}\n
    \n \n
    \n {openDropDown ? (\n
    \n
    \n {filteredSites.map((site) => {\n return (\n {\n dispatch(selectSite(site));\n setValueForInput(site.label);\n }}\n >\n \n
    \n );\n })}\n
    \n \n ) : null}\n \n \n );\n } else {\n return (\n
    \n
    \n
    \n \n
    \n \n
    \n
    \n );\n }\n};\n\nexport default SitePicker;\n","import LogoutButton from 'features/auth/logoutButton';\nimport BlurButton from 'features/blur/blurButton';\nimport PocToggle from 'features/poc/poc-toggle/pocToggle';\nimport { FC, useState } from 'react';\nimport SitePicker from './sitePicker';\nimport { RootState } from 'app/store';\nimport { useTypedSelector } from 'common/hooks/store';\nimport { NavLink } from 'react-router-dom';\nimport DropdownMenu from 'common/components/drop-downs/drop-down-menu';\nimport { useSelector } from 'react-redux';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport { ToggleType } from 'features/internal/internal.models';\nimport { selectIsSidebarOpen } from 'features/sidebar/sidebarSlice';\nimport { useAuth } from 'features/auth/hooks/useAuth';\n\nconst TopBar: FC = () => {\n const { isPocModeActive } = useTypedSelector(\n (state: RootState) => state.pocToggle\n );\n\n const { isSuperUser } = useAuth();\n\n const isNewSideBarEnabledDebugToggle = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayNewSideBar)\n );\n\n const isSidebarOpenLegacy = useTypedSelector(\n (state: RootState) => state.sidebar.isSidebarOpen\n );\n\n const isSidebarOpen = useSelector(selectIsSidebarOpen);\n\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n return (\n <>\n \n
    \n \n
    \n
    \n setIsDropdownOpen(!isDropdownOpen)}\n onClickAway={() => setIsDropdownOpen(false)}\n >\n \n \n \n Site Setup\n \n \n \n \n \n Setup Call Tracking\n \n \n\n \n \n \n Webhooks\n \n \n\n {isPocModeActive ? (\n \n \n \n Exclusions\n \n \n ) : (\n <>\n )}\n\n {isPocModeActive ? (\n \n \n \n

    Segmentation

    \n
    \n \n ) : (\n <>\n )}\n\n {isPocModeActive ? (\n \n \n \n Data Science Tasks\n \n \n ) : (\n <>\n )}\n {isPocModeActive ? (\n \n \n \n Imports\n \n \n ) : (\n <>\n )}\n
    \n\n {isSuperUser ? (\n \n \n \n Internal Settings\n \n \n ) : (\n <>\n )}\n\n \n \n \n Settings\n \n \n
    \n \n \n
    \n \n \n \n Help\n \n \n \n
    \n
    \n
    \n \n \n );\n};\n\nexport default TopBar;\n","import { FC, HTMLAttributes, useCallback } from 'react';\nimport DropDownButtonLegacy from '../drop-downs/legacy/dropDownButtonLegacy';\nimport { DropDownItemType } from '../drop-downs/legacy/dropDownItemType';\nimport SimpleButtonContainerContent from '../drop-downs/legacy/simpleDropDownButtonContainerContent';\n\nexport interface ActionItems extends DropDownItemType {\n label: string;\n key: string;\n isActive: boolean;\n onAction: () => any;\n isLoading?: boolean;\n}\n\nconst ActionsButton: FC<\n {\n label: string;\n actions: ActionItems[];\n } & HTMLAttributes\n> = ({\n label,\n actions,\n ...rest\n}: {\n label: string;\n actions: ActionItems[];\n}) => {\n const anyLoadingAction = useCallback(() => {\n return actions.some((action) => action.isLoading);\n }, [actions]);\n\n return (\n <>\n \n actions.find((action) => action.key === key)?.onAction()\n }\n {...rest}\n >\n \n \n \n );\n};\n\nexport default ActionsButton;\n","import { FC } from 'react';\nimport Button from './button';\nimport { ButtonTheme } from './button-theme';\n\nconst ExportButton: FC<{\n isLoading?: boolean;\n onExport: () => void;\n}> = ({\n isLoading,\n onExport\n}: {\n isLoading?: boolean;\n onExport: () => void;\n}) => {\n return (\n <>\n \n
    \n \n Export\n
    \n \n \n );\n};\n\nexport default ExportButton;\n","import { useGetRevenueExportMutation } from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport ActionsButton from 'common/components/buttons/actionsButton';\nimport ExportButton from 'common/components/buttons/exportButton';\nimport { closeModal, confirmModal, openModal } from 'features/modal/modalSlice';\nimport { selectPaginationOptions } from 'features/pagination/paginationOptionsSlice';\nimport {\n BaseSelectedRow,\n selectRowsByComponentId,\n selectRowSelectionsByComponentId\n} from 'features/row-selection/rowSelectionSlice';\n\nimport SearchBar from 'features/search-bar/searchBar';\nimport {\n applySearchToTableAndGraph,\n clearSearch,\n getSearchTermsById\n} from 'features/search-bar/searchBarSlice';\nimport { FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { MappedRevenueExportRequest } from './types/MappedRevenueExportRequest';\nimport { ModalConfirmTypes } from 'features/modal/modal';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { ViewType } from 'features/data-view-selection/view-type';\nimport { toggleSelection } from 'features/data-view-selection/dataViewSelectionSlice';\nimport { selectDateRangeLocalIso } from 'features/date-range-selection/dateRangeSlice';\nimport {\n DeleteRevenueRequest,\n useDeleteMultipleRevenuesMutation\n} from 'app/apis/commandApi';\nimport { addListener } from '@reduxjs/toolkit';\n\nconst RevenueSearchInteractionBar: FC<{\n componentId: string;\n currentViewType: ViewType;\n}> = ({\n componentId,\n currentViewType\n}: {\n componentId: string;\n currentViewType: ViewType;\n}) => {\n const dispatch = useDispatch();\n\n const { tableValueToSearch } = useSelector((state: RootState) =>\n getSearchTermsById(state, componentId)\n );\n\n const rows = useSelector((state: RootState) =>\n selectRowsByComponentId(state, componentId)\n );\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { startDate, endDate } = useSelector(selectDateRangeLocalIso);\n\n const paginationOptions = useSelector((state: RootState) =>\n selectPaginationOptions(state, componentId)\n );\n\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const request: MappedRevenueExportRequest = {\n siteId,\n startDate,\n endDate,\n currencyCode: selectedCurrencyCode,\n searchTerm: paginationOptions?.searchTerm ?? '',\n viewType: currentViewType\n };\n\n const [triggerDownload, { isLoading: isDownloadingCsv }] =\n useGetRevenueExportMutation();\n\n const toggleViewType = (viewType: ViewType) => {\n dispatch(\n toggleSelection({\n newSelection: viewType,\n componentId\n })\n );\n };\n\n const [deleteMultipleRevenues] = useDeleteMultipleRevenuesMutation();\n\n const onDeleteMultipleRevenues = async (rowsToDelete: any) => {\n const deleteRevenueRequest = rowsToDelete.map(\n (row: BaseSelectedRow): DeleteRevenueRequest => {\n const request: DeleteRevenueRequest = {\n revenueId: row.rowId,\n revenueClosedDateTime: row.rowData\n };\n\n return request;\n }\n );\n\n try {\n await deleteMultipleRevenues({\n siteId,\n revenue: deleteRevenueRequest,\n componentId\n }).unwrap();\n } catch (error) {\n console.error('Failed to delete revenue:', error);\n }\n };\n\n return (\n <>\n
    \n {\n dispatch(\n applySearchToTableAndGraph({\n id: componentId,\n valueToSearch: searchTerm\n })\n );\n }}\n onClearFunction={() => {\n dispatch(\n clearSearch({\n id: componentId\n })\n );\n }}\n />\n
    \n \n isDownloadingCsv ? null : triggerDownload(request)\n }\n isLoading={isDownloadingCsv}\n />\n toggleViewType(ViewType.Simple)}\n >\n Simple\n \n\n toggleViewType(ViewType.Detailed)}\n >\n Detailed\n \n\n
    \n {\n if (rows.length === 0) {\n return;\n }\n\n dispatch(\n addListener({\n actionCreator: confirmModal,\n effect: async (action, listenerApi) => {\n listenerApi.cancelActiveListeners();\n\n // need to get the rows from the state here. So we can get the rows while the Listener Api is still active\n const state = listenerApi.getState() as RootState;\n\n const rowsToDelete = selectRowsByComponentId(\n state,\n componentId\n );\n\n await onDeleteMultipleRevenues(rowsToDelete);\n\n listenerApi.dispatch(closeModal());\n\n listenerApi.unsubscribe();\n }\n })\n );\n\n dispatch(\n openModal({\n modalType: 'deleteRevenue',\n modalProps: {\n title: 'Delete Revenue',\n content: `Are you sure you want to delete these records? Right now you are deleting ${rows.length} rows. This action cannot be undone.`,\n buttonType: 'Delete',\n componentId\n },\n modalConfirmType:\n ModalConfirmTypes.ON_DELETE_MULTIPLE_REVENUES\n })\n );\n },\n isLoading: false\n }\n ]}\n />\n
    \n
    \n
    \n \n );\n};\n\nexport default RevenueSearchInteractionBar;\n","import { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\n\nexport const paginationPageSizeDropDownSelections = [\n { key: '5', label: '5', isActive: false },\n { key: '10', label: '10', isActive: false },\n { key: '20', label: '20', isActive: false },\n { key: '50', label: '50', isActive: false },\n {\n key: '100',\n label: '100',\n isActive: false\n },\n { key: '500', label: '500', isActive: false },\n { key: '1000', label: '1000', isActive: false }\n] as DropDownItemType[];\n","import { RootState } from 'app/store';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n isActivityTriggerNeeded,\n setSelectedDropDownItemAsActive\n} from 'common/components/drop-downs/legacy/dropDownUtils';\nimport { FC, useEffect, useState } from 'react';\nimport { paginationPageSizeDropDownSelections } from './paginationPageSizeDropDownSelections';\nimport {\n nextPage,\n previousPage,\n selectPaginationOptions,\n setPageSize\n} from './paginationOptionsSlice';\nimport { Pagination } from '../../common/components/pagination/pagination';\n\nexport const PaginationBar: FC<{ componentId: string }> = ({ componentId }) => {\n const { currentPage, pageSize, totalPages, totalRecords } = useSelector(\n (state: RootState) => selectPaginationOptions(state, componentId)\n );\n\n const dispatch = useDispatch();\n\n const [pageSizes, setPageSizes] = useState(\n paginationPageSizeDropDownSelections\n );\n\n const setPageSizeSelectionForDropDown = (pageSize: number): void => {\n dispatch(setPageSize({ componentId, pageSize }));\n };\n\n useEffect(() => {\n if (\n pageSize !== undefined &&\n isActivityTriggerNeeded(pageSizes, pageSize.toString())\n ) {\n setPageSizes(\n setSelectedDropDownItemAsActive(pageSizes, pageSize.toString())\n );\n }\n }, [pageSizes, pageSize]);\n\n return (\n dispatch(previousPage({ componentId }))}\n onNextPage={() => dispatch(nextPage({ componentId }))}\n onPageSizeChanged={setPageSizeSelectionForDropDown}\n />\n );\n};\n","import { FC, Fragment, useMemo, useState } from 'react';\nimport { PaginationBar } from './paginationBar';\nimport { TableOptions } from 'common/components/table/tableTypes';\nimport Loading from 'common/components/loading/loading';\nimport {\n ColumnResizeMode,\n getCoreRowModel,\n SortingState,\n useReactTable\n} from '@tanstack/react-table';\nimport { CustomTable } from 'common/components/table/customTable';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport {\n selectPaginationOptions,\n setColumnSorting\n} from './paginationOptionsSlice';\n\nexport const PaginatedTable: FC> = ({\n columns,\n data,\n componentId,\n isFetching,\n isLoading,\n getRowId,\n getRowData\n}: TableOptions) => {\n const memoizedData = useMemo(() => data, [data]);\n const memoizedColumns = useMemo(() => columns, [columns]);\n const [columnResizeMode] = useState('onChange');\n const dispatch = useDispatch();\n\n const paginationOptions = useSelector((state: RootState) =>\n selectPaginationOptions(state, componentId)\n );\n\n const orderDirection = paginationOptions?.orderDirection;\n const seekColumnName = paginationOptions?.seekColumnName;\n\n const sorting = useMemo(() => {\n return [\n {\n id: seekColumnName ?? '',\n desc: orderDirection === 'DESC'\n }\n ];\n }, [orderDirection, seekColumnName]);\n\n const setSorting = (updaterOrValue: any) => {\n const updaterValue = updaterOrValue();\n const columnName = updaterValue[0].id;\n const orderDirection = updaterValue[0].desc ? 'DESC' : 'ASC';\n dispatch(\n setColumnSorting({\n componentId,\n columnName,\n orderDirection\n })\n );\n };\n\n const table = useReactTable({\n data: memoizedData,\n columns: memoizedColumns,\n getCoreRowModel: getCoreRowModel(),\n enableColumnResizing: true,\n columnResizeMode,\n state: { sorting },\n manualSorting: true,\n enableSortingRemoval: false,\n onSortingChange: setSorting,\n getRowId,\n debugTable: true,\n debugHeaders: true,\n debugColumns: true\n });\n\n return (\n \n \n {isLoading || isFetching ? (\n
    \n \n
    \n ) : (\n \n )}\n \n \n
    \n );\n};\n","import { RootState } from 'app/store';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { PaginationRequest } from '../types/paginationRequest';\nimport moment from 'moment';\nimport { PaginationResponse } from '../types/paginationResponse';\nimport {\n initializePaginationOptions,\n selectLastPaginationRequest,\n selectNullablePaginationOptions,\n setPreviousRequest\n} from '../paginationOptionsSlice';\nimport { PrefetchOptions } from '@reduxjs/toolkit/dist/query/core/module';\nimport {\n TypedUseQueryStateResult,\n UseQuery\n} from '@reduxjs/toolkit/dist/query/react/buildHooks';\n\nexport interface PaginationInitialOptions {\n initialColumnName: string;\n initialOrderDirection: string;\n}\n\nconst DEFAULT_PAGE_SIZE = 10;\n\nexport function usePaginatedQuery(\n paginatedQueryCallback: any,\n prefetchPageFn: (\n arg: PaginationRequest,\n options?: PrefetchOptions | undefined\n ) => void,\n componentId: string,\n initialRequestData: RequestType,\n initialRequestOptions: PaginationInitialOptions\n) {\n const isFirstRequest = useRef(true);\n const dispatch = useDispatch();\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const lastPaginationRequest = useSelector((state: RootState) =>\n selectLastPaginationRequest(state, componentId)\n );\n const paginationOptions = useSelector((state: RootState) =>\n selectNullablePaginationOptions(state, componentId)\n );\n\n if (!paginationOptions) {\n dispatch(\n initializePaginationOptions({\n componentId,\n defaultColumnName: initialRequestOptions.initialColumnName,\n orderDirection: initialRequestOptions.initialOrderDirection\n })\n );\n }\n\n const { startDate, endDate } = useSelector(\n (state: RootState) => state.dateRange\n );\n\n const nextRequest = useMemo>(() => {\n let seekValue: string | undefined = paginationOptions?.seekValue;\n let seekId: string | undefined = paginationOptions?.seekId;\n let seekDirection: string | undefined = paginationOptions?.seekDirection;\n\n if (\n seekValue &&\n seekId &&\n seekDirection &&\n (!paginationOptions?.currentPage || paginationOptions?.currentPage === 1)\n ) {\n seekValue = undefined;\n seekId = undefined;\n seekDirection = undefined;\n }\n\n return {\n pageSize: paginationOptions?.pageSize ?? DEFAULT_PAGE_SIZE,\n page: paginationOptions?.currentPage ?? 1,\n startDate: moment(startDate).format('DD/MM/YYYY'),\n endDate: moment(endDate).format('DD/MM/YYYY'),\n requestDetails: { ...initialRequestData, siteId },\n searchTerm: paginationOptions?.searchTerm,\n seekValue,\n seekId,\n seekDirection,\n seekColumnName:\n paginationOptions?.seekColumnName ??\n initialRequestOptions.initialColumnName,\n orderDirection:\n paginationOptions?.orderDirection ??\n initialRequestOptions.initialOrderDirection\n };\n }, [\n paginationOptions?.seekValue,\n paginationOptions?.seekId,\n paginationOptions?.seekDirection,\n paginationOptions?.currentPage,\n paginationOptions?.pageSize,\n paginationOptions?.searchTerm,\n paginationOptions?.seekColumnName,\n paginationOptions?.orderDirection,\n startDate,\n endDate,\n initialRequestData,\n siteId,\n initialRequestOptions.initialColumnName,\n initialRequestOptions.initialOrderDirection\n ]);\n\n const value: TypedUseQueryStateResult<\n PaginationResponse,\n any,\n any\n > = paginatedQueryCallback(nextRequest);\n\n const prefetchNext = useCallback(\n (request: PaginationRequest) => {\n prefetchPageFn(request);\n },\n [prefetchPageFn]\n );\n\n useEffect(() => {\n if (value.status === 'fulfilled') {\n const returnedPaginationInfo =\n value.data as PaginationResponse;\n if (\n isFirstRequest.current ||\n (IsReturnedPaginationInfoDefined(returnedPaginationInfo) &&\n IsPreviousRequestDifferent(\n returnedPaginationInfo,\n lastPaginationRequest\n ))\n ) {\n isFirstRequest.current = false;\n\n if (returnedPaginationInfo.totalPages > 1) {\n prefetchNext({\n page: returnedPaginationInfo.page + 1,\n pageSize: returnedPaginationInfo.pageSize,\n startDate: moment(startDate).format('DD/MM/YYYY'),\n endDate: moment(endDate).format('DD/MM/YYYY'),\n requestDetails: { ...initialRequestData, siteId },\n searchTerm: paginationOptions?.searchTerm,\n seekValue: returnedPaginationInfo.forwardSeekValue,\n seekId: returnedPaginationInfo.forwardSeekId,\n seekDirection: 'pageForward',\n seekColumnName: returnedPaginationInfo.seekColumnName.toLowerCase(),\n orderDirection: returnedPaginationInfo.orderDirection\n });\n }\n\n if (returnedPaginationInfo.page > 1) {\n prefetchNext({\n page: returnedPaginationInfo.page - 1,\n pageSize: returnedPaginationInfo.pageSize,\n startDate: moment(startDate).format('DD/MM/YYYY'),\n endDate: moment(endDate).format('DD/MM/YYYY'),\n requestDetails: { ...initialRequestData, siteId },\n searchTerm: paginationOptions?.searchTerm,\n seekValue: returnedPaginationInfo.backwardSeekValue,\n seekId: returnedPaginationInfo.backwardSeekId,\n seekDirection: 'pageBackward',\n seekColumnName: returnedPaginationInfo.seekColumnName.toLowerCase(),\n orderDirection: returnedPaginationInfo.orderDirection\n });\n }\n\n dispatch(\n setPreviousRequest({\n componentId,\n previousRequest: {\n currentPage: returnedPaginationInfo.page,\n pageSize: returnedPaginationInfo.pageSize,\n totalPages: returnedPaginationInfo.totalPages,\n totalRecords: returnedPaginationInfo.totalRecords,\n forwardSeekValue: returnedPaginationInfo.forwardSeekValue,\n forwardSeekId: returnedPaginationInfo.forwardSeekId,\n backwardSeekValue: returnedPaginationInfo.backwardSeekValue,\n backwardSeekId: returnedPaginationInfo.backwardSeekId,\n orderDirection: returnedPaginationInfo.orderDirection,\n seekColumnName: returnedPaginationInfo.seekColumnName\n }\n })\n );\n }\n }\n }, [\n componentId,\n dispatch,\n endDate,\n initialRequestData,\n lastPaginationRequest,\n paginationOptions?.searchTerm,\n prefetchNext,\n siteId,\n startDate,\n value.data,\n value.status\n ]);\n\n return value;\n}\n\nfunction IsReturnedPaginationInfoDefined({\n data,\n page,\n pageSize,\n totalPages,\n totalRecords,\n forwardSeekValue,\n forwardSeekId,\n backwardSeekValue,\n backwardSeekId,\n seekColumnName,\n orderDirection\n}: PaginationResponse) {\n return (\n page &&\n pageSize &&\n totalPages &&\n totalRecords &&\n forwardSeekValue &&\n forwardSeekId &&\n backwardSeekValue &&\n backwardSeekId &&\n seekColumnName &&\n orderDirection\n );\n}\n\nfunction IsPreviousRequestDifferent(\n {\n page: newPage,\n pageSize: newPageSize,\n totalPages: newTotalPages,\n totalRecords: newTotalRecords,\n forwardSeekValue: newForwardSeekValue,\n forwardSeekId: newForwardSeekId,\n backwardSeekValue: newBackwardSeekValue,\n backwardSeekId: newBackwardSeekId,\n seekColumnName: newSeekColumnName,\n orderDirection: newOrderDirection\n }: PaginationResponse,\n {\n currentPage: lastCurrentPage,\n pageSize: lastPageSize,\n totalPages: lastTotalPages,\n totalRecords: lastTotalRecords,\n forwardSeekValue: returnedForwardSeekValue,\n forwardSeekId: returnedForwardSeekId,\n backwardSeekValue: returnedBackwardSeekValue,\n backwardSeekId: returnedBackwardSeekId,\n seekColumnName: returnedSeekColumnName,\n orderDirection: returnedOrderDirection\n }: {\n currentPage?: number | undefined;\n pageSize?: number | undefined;\n totalPages?: number | undefined;\n totalRecords?: number | undefined;\n forwardSeekValue?: string | undefined;\n forwardSeekId?: string | undefined;\n backwardSeekValue?: string | undefined;\n backwardSeekId?: string | undefined;\n seekColumnName?: string | undefined;\n orderDirection?: string | undefined;\n }\n): boolean {\n return !(\n newPage === lastCurrentPage &&\n newPageSize === lastPageSize &&\n newTotalPages === lastTotalPages &&\n newTotalRecords === lastTotalRecords &&\n newForwardSeekValue === returnedForwardSeekValue &&\n newForwardSeekId === returnedForwardSeekId &&\n newBackwardSeekValue === returnedBackwardSeekValue &&\n newBackwardSeekId === returnedBackwardSeekId &&\n newSeekColumnName === returnedSeekColumnName &&\n newOrderDirection === returnedOrderDirection\n );\n}\n","export const filterOutNonViewableFields = (\n fields: [string, any][]\n): [string, any][] => {\n return fields.filter(([_, { key, value }]) => !key.startsWith('/__'));\n};\n\nexport const filterOutStandardQueryFields = (fields: [string, any][]) => {\n return fields.filter(\n ([_, { key, value }]) =>\n ![\n 'fullUrl',\n 'scheme',\n 'host',\n 'domain',\n 'localpath',\n 'autoupdater_nonce'\n ].includes(key)\n );\n};\n","import { FC } from 'react';\n\nexport const FieldCell: FC<{\n identifier: any;\n value: any;\n bgColor?: string;\n}> = ({ identifier, value, bgColor }) => {\n return (\n \n {identifier}: {value}\n \n );\n};\n","import MarketingSourceLogo from 'common/components/icons/marketingSourceLogo';\nimport { filterOutNonViewableFields } from 'common/components/table/cell-formatters/fieldHelpers';\nimport { FC, Fragment } from 'react';\nimport { FieldCell } from './fieldCell';\nimport Blur from 'features/blur/blur';\n\nexport interface PayloadFieldsCellFormatterProps {\n fieldObject: {\n header: string;\n subheader: string | undefined;\n fields: Map;\n };\n icon: string;\n additionalFieldsFilter: (fields: [string, any][]) => [string, any][];\n}\n\nexport const PayloadFieldsCellFormatter: FC<\n PayloadFieldsCellFormatterProps\n> = ({\n fieldObject: { header, subheader, fields },\n additionalFieldsFilter\n}) => {\n if (!fields) {\n return null;\n }\n const filteredFields = additionalFieldsFilter(\n filterOutNonViewableFields(Object.entries(fields))\n );\n\n return (\n
    \n
    \n \n
    {header}
    \n
    \n {subheader ? (\n \n {subheader}\n \n ) : (\n <>\n )}\n \n {filteredFields.map(([_, { key, value }], index) => {\n return (\n \n \n \n );\n })}\n \n
    \n );\n};\n","import moment from 'moment';\n\nexport const secondsToHms = (d: number) => {\n d = Number(d);\n const hour = Math.floor(d / 3600);\n const minute = Math.floor((d % 3600) / 60);\n const second = Math.floor((d % 3600) % 60);\n\n const hDisplay = hour > 0 ? `${hour} h ` : '';\n const mDisplay = minute > 0 ? `${minute} m ` : '';\n const sDisplay = second > 0 ? `${second} s` : '';\n\n return hDisplay || mDisplay || sDisplay\n ? hDisplay + mDisplay + sDisplay\n : '0 s';\n};\n\nexport const formatIsoDateTimeStringToDisplayDate = (\n date: string | null | undefined\n) => {\n // Check if the date is null, undefined, or an invalid date\n if (!date || !moment(date).isValid()) {\n return ''; // Return an empty string for invalid dates\n }\n\n return moment(date).format('DD/MM/YYYY HH:mm');\n};\n\nexport const formatIsoDateTimeStringToLongMonthDisplayDate = (date: string) => {\n return moment(date).format('DD MMMM YYYY');\n};\n\nexport const formatIsoDateStringToDisplayDate = (date: string) => {\n return moment(date).format('DD/MM/YYYY');\n};\n\nexport const formatIsoDateStringToDisplayTimeOnly = (date: string) => {\n return moment(date).format('HH:mm');\n};\n","import { FieldCell } from 'common/components/table/cell-formatters/fieldCell';\nimport Blur from 'features/blur/blur';\nimport { FC, Fragment } from 'react';\n\nconst MapFieldRenderer: FC<{\n fieldsMap: { [key: string]: string } | Map;\n contextKey: string;\n}> = ({ fieldsMap, contextKey }) => {\n if (!fieldsMap) {\n return null;\n }\n\n const entries =\n fieldsMap instanceof Map\n ? [...fieldsMap.entries()]\n : Object.entries(fieldsMap);\n\n return (\n
    \n {entries.map(([key, value], index) => {\n if (!value) {\n return null;\n }\n\n return (\n \n \n \n \n \n );\n })}\n
    \n );\n};\n\nexport default MapFieldRenderer;\n","import { RootState } from 'app/store';\nimport {\n selectRowsByComponentId,\n selectRows,\n BaseSelectedRow\n} from 'features/row-selection/rowSelectionSlice';\nimport { FC, HTMLProps, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nexport const PaginationTableSelectAllRowsCheckbox: FC<\n {\n componentId: string;\n tableRows: BaseSelectedRow[];\n } & HTMLProps\n> = ({\n componentId,\n tableRows,\n className = '',\n ...rest\n}: {\n componentId: string;\n tableRows: BaseSelectedRow[];\n} & HTMLProps) => {\n const dispatch = useDispatch();\n\n const allSelectedRows = useSelector((state: RootState) =>\n selectRowsByComponentId(state, componentId)\n );\n\n const isChecked = useMemo(() => {\n return tableRows.every((row) =>\n allSelectedRows.some((r) => r.rowId === row.rowId)\n );\n }, [allSelectedRows, tableRows]);\n\n return (\n {\n dispatch(selectRows({ componentId, selectedRows: tableRows }));\n }}\n {...rest}\n />\n );\n};\n","import { RootState } from 'app/store';\nimport {\n selectRow,\n selectRowByIdAndComponentId\n} from 'features/row-selection/rowSelectionSlice';\nimport { FC, HTMLProps } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n\nexport const PaginationTableRowSelectionCheckbox: FC<\n {\n componentId: string;\n rowId: string;\n rowData: any;\n } & HTMLProps\n> = ({\n componentId,\n rowId,\n rowData,\n className = '',\n ...rest\n}: {\n componentId: string;\n rowId: string;\n rowData: any;\n} & HTMLProps) => {\n const dispatch = useDispatch();\n\n const selectedRow = useSelector((state: RootState) =>\n selectRowByIdAndComponentId(state, componentId)(rowId)\n );\n\n return (\n {\n dispatch(\n selectRow({\n componentId,\n selectedRow: {\n rowId,\n rowData\n }\n })\n );\n }}\n {...rest}\n />\n );\n};\n","import { GetRevenueResponse } from '../types/get-revenue-response';\n\nexport const createLabelsCell = (row: GetRevenueResponse): JSX.Element => (\n <>\n
    \n
    {row.labels.join(' ')}
    \n
    \n {row.callLabel ? (\n <>\n
    \n Static:\n {row.callLabel}\n
    \n \n ) : (\n <>\n )}\n \n);\n","export const convertArrayToObject = (\n array: { name: string; value: string }[]\n): { [key: string]: string } => {\n return array.reduce<{ [key: string]: string }>((acc, { name, value }) => {\n acc[name] = value;\n return acc;\n }, {});\n};\n","import { ColumnDef, createColumnHelper } from '@tanstack/react-table';\nimport { filterOutStandardQueryFields } from 'common/components/table/cell-formatters/fieldHelpers';\nimport { PayloadFieldsCellFormatter } from 'common/components/table/cell-formatters/payloadFieldCellFormatter';\nimport { formatIsoDateTimeStringToDisplayDate } from 'common/utils/LEGACY_timeHelpers';\nimport RevenueFieldsRenderer from 'common/components/table/mapFieldRenderer';\nimport { NavLink } from 'react-router-dom';\nimport { PaginationTableSelectAllRowsCheckbox } from 'features/pagination/paginatedTableSelectAllRowsCheckbox';\nimport { PaginationTableRowSelectionCheckbox } from 'features/pagination/paginatedTableRowSelectionCheckbox';\nimport { BaseSelectedRow } from 'features/row-selection/rowSelectionSlice';\nimport { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\nimport { StickyOptions } from 'common/components/table/tableTypes';\nimport { createLabelsCell } from './revenue-table-helpers';\nimport { GetRevenueResponse } from '../types/get-revenue-response';\nimport { convertArrayToObject } from 'common/utils/array-helpers';\n\nconst revenueColumnHelper = createColumnHelper();\n\nfunction setZeroAsDefault(value: any): any {\n if (!value) {\n return 0;\n }\n\n return value;\n}\n\nexport const revenueSimpleColumnDefs = (\n componentId: string,\n showRevenueId: boolean,\n currencyCode?: string\n) => {\n const columnDefs = [\n revenueColumnHelper.accessor((row) => row.id, {\n id: 'select',\n enableSorting: false,\n header: (info) => {\n const tableRows = info.table\n .getRowModel()\n .rows.map((row) => ({\n rowId: row.getValue('select'),\n rowData: row.getValue('revenueClosedDateTime')\n }));\n\n return (\n \n );\n },\n cell: ({ row }) => (\n \n ),\n enableColumnFilter: false,\n size: 50\n }),\n revenueColumnHelper.accessor((row) => row.revenueClosedDateTime, {\n id: 'revenueClosedDateTime',\n header: () => Date/Time,\n enableColumnFilter: false,\n cell: (info) => (\n \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n \n )\n }),\n revenueColumnHelper.accessor((row) => row.value, {\n id: 'convertedvalue',\n header: () => Value,\n enableColumnFilter: false,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(setZeroAsDefault(info.getValue()))}\n \n )\n }),\n revenueColumnHelper.accessor((row) => row.visitorIdentifierOptions, {\n id: 'visitorIdentifiersOptions',\n header: () => Customer,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) =>\n RevenueFieldsRenderer({\n fieldsMap: info.getValue(),\n contextKey: 'payloadFields'\n })\n }),\n revenueColumnHelper.accessor((row) => row.labels, {\n id: 'labels',\n header: () => Labels,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => createLabelsCell(info.row.original)\n }),\n revenueColumnHelper.accessor(\n (row) => {\n return {\n header: row.firstClickSource,\n subheader:\n row.firstClickSource === 'Referral'\n ? row.firstClick?.referrerHost\n : undefined,\n fields: row.firstClickQueryStrings\n };\n },\n {\n id: 'firstClick',\n header: () => First Click,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => (\n \n filterOutStandardQueryFields(fields)\n }\n fieldObject={info.getValue()}\n icon=\"\"\n />\n )\n }\n ),\n revenueColumnHelper.accessor(\n (row) => {\n return {\n header: row.lastClickSource,\n subheader:\n row.lastClickSource === 'Referral'\n ? row.lastClick?.canonicalUrl\n : undefined,\n fields: row.lastClickQueryStrings\n };\n },\n {\n id: 'lastClick',\n header: () => Last Click,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => (\n \n filterOutStandardQueryFields(fields)\n }\n fieldObject={info.getValue()}\n icon=\"\"\n />\n )\n }\n ),\n revenueColumnHelper.accessor((row) => row.reference, {\n id: 'reference',\n header: () => Reference,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n revenueColumnHelper.accessor((row) => row.additionalDataProperties, {\n id: 'additionalDataProperties',\n header: () => Additional Data,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n const additionalDataProperties = info.getValue() as {\n name: string;\n value: string;\n }[];\n\n const fieldsMap = convertArrayToObject(additionalDataProperties);\n\n return RevenueFieldsRenderer({\n fieldsMap,\n contextKey: 'additionalDataProperties'\n });\n }\n }),\n revenueColumnHelper.accessor((row) => row.visitorId, {\n id: 'Visitor',\n header: () => Visitor,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n const visitorId = info.getValue();\n\n if (!visitorId) {\n return <>;\n }\n\n return (\n \n View\n \n );\n },\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n },\n enableResizing: false\n })\n ];\n\n if (showRevenueId) {\n columnDefs.unshift(\n revenueColumnHelper.accessor((row) => row.id, {\n id: 'id',\n header: () => Revenue ID,\n enableColumnFilter: false,\n size: 400,\n cell: (info) => {info.getValue()}\n }) as ColumnDef\n );\n }\n\n return columnDefs;\n};\n\nexport default revenueSimpleColumnDefs;\n","export const FilterNotApplicable = (value: string) => {\n return value === 'NotApplicable' ? '' : value;\n};\n","import { FieldCell } from 'common/components/table/cell-formatters/fieldCell';\nimport Blur from 'features/blur/blur';\nimport { FC, Fragment } from 'react';\nimport { filterOutNonViewableFields } from '../../../../../common/components/table/cell-formatters/fieldHelpers';\n\n// Explicitly using any as underlying table library is not typed\nconst FieldsRenderer: FC<{\n fieldsMap: Map;\n contextKey: string;\n}> = ({ fieldsMap, contextKey }) => {\n if (fieldsMap === null || fieldsMap === undefined) {\n return null;\n }\n\n const filteredFields = filterOutNonViewableFields(Object.entries(fieldsMap));\n return (\n
    \n {filteredFields.map(([_, { key, value }], index) => {\n return (\n \n \n \n \n \n );\n })}\n
    \n );\n};\n\nexport default FieldsRenderer;\n","export function getConversionTypeFriendlyName(conversionType: string) {\n switch (conversionType) {\n case 'Web':\n return 'Form';\n case 'InboundCall':\n return 'Phone Call';\n default:\n return conversionType;\n }\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport { ColumnDef, createColumnHelper } from '@tanstack/react-table';\nimport MarketingSourceLogo from 'common/components/icons/marketingSourceLogo';\nimport { FilterNotApplicable } from 'common/components/table/cell-formatters/filterNotApplicatable';\nimport {\n formatIsoDateStringToDisplayDate,\n formatIsoDateTimeStringToDisplayDate,\n secondsToHms\n} from 'common/utils/LEGACY_timeHelpers';\nimport Blur from 'features/blur/blur';\nimport FieldsRenderer from 'features/conversions/forms/views/shared/FieldsRenderer';\nimport { NavLink } from 'react-router-dom';\nimport { StickyOptions } from 'common/components/table/tableTypes';\nimport { BaseSelectedRow } from 'features/row-selection/rowSelectionSlice';\nimport { PaginationTableSelectAllRowsCheckbox } from 'features/pagination/paginatedTableSelectAllRowsCheckbox';\nimport { PaginationTableRowSelectionCheckbox } from 'features/pagination/paginatedTableRowSelectionCheckbox';\nimport { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\nimport RevenueFieldsRenderer from 'common/components/table/mapFieldRenderer';\nimport { getConversionTypeFriendlyName } from 'common/helpers/conversion-type.helper';\nimport { GetRevenueResponse } from '../types/get-revenue-response';\nimport { createLabelsCell } from './revenue-table-helpers';\nimport { convertArrayToObject } from 'common/utils/array-helpers';\n\nconst detailedColumnHelper = createColumnHelper();\n\nconst revenueDetailedColumnDefs = (\n componentId: string,\n data: GetRevenueResponse[],\n currencyCode: string,\n showRevenueId: boolean\n) => {\n const expandedFieldsColumnDefs = [\n detailedColumnHelper.accessor((row) => row.expandedFields?.type, {\n id: 'expandedFields.type',\n enableColumnFilter: false,\n header: () => Type,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.expandedFields?.source, {\n id: 'expandedFields.source',\n enableColumnFilter: false,\n header: () => Source,\n enableSorting: false,\n cell: (info) => info.getValue()\n })\n ];\n\n if (data?.some((response) => response.expandedFields?.customDataFields)) {\n expandedFieldsColumnDefs.push(\n ...data.reduce[]>(\n (acc, nextResponse, index) => {\n const customDataFields =\n nextResponse.expandedFields?.customDataFields;\n Object.entries(customDataFields ?? {}).forEach(([, value]) => {\n const { key } = value;\n\n if (acc.some((columnDef) => columnDef.id?.includes(key))) {\n return acc;\n }\n\n const newColDef = detailedColumnHelper.accessor(\n (row) => {\n const [, foundRow] =\n Object.entries(\n row.expandedFields?.customDataFields ?? {}\n ).find((field) => field[1].key === key) ?? [];\n return foundRow?.value;\n },\n {\n id: key,\n enableColumnFilter: false,\n header: () => {key},\n enableSorting: false,\n cell: (info) => (\n {info.getValue()}\n )\n }\n );\n\n acc.push(newColDef);\n });\n return acc;\n },\n []\n )\n );\n }\n\n const pocIdColumn = showRevenueId\n ? [\n detailedColumnHelper.accessor((row) => row.id, {\n id: 'id',\n enableColumnFilter: false,\n header: () => Revenue ID,\n cell: (info) => {info.getValue()}\n }) as ColumnDef\n ]\n : [];\n\n return [\n ...pocIdColumn,\n detailedColumnHelper.accessor((row) => row.id, {\n id: 'select',\n enableColumnFilter: false,\n enableSorting: false,\n header: (info) => {\n const tableRows = info.table\n .getRowModel()\n .rows.map((row) => ({\n rowId: row.getValue('select'),\n rowData: row.getValue('revenueClosedDateTime')\n }));\n\n return (\n \n );\n },\n cell: ({ row }) => (\n \n ),\n size: 50\n }),\n detailedColumnHelper.accessor((row) => row.revenueClosedDateTime, {\n id: 'revenueClosedDateTime',\n enableColumnFilter: false,\n header: () => Date,\n size: 100,\n cell: (info) => (\n \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n \n )\n }),\n detailedColumnHelper.accessor((row) => row.leadDate, {\n id: 'leaddate',\n enableColumnFilter: false,\n header: () => Lead Date,\n size: 100,\n cell: (info) => (\n \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n \n )\n }),\n detailedColumnHelper.accessor((row) => row.value, {\n id: 'convertedvalue',\n enableColumnFilter: false,\n header: () => Value,\n size: 100,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(info.getValue() ? info.getValue() : 0)}\n \n )\n }),\n detailedColumnHelper.accessor((row) => row.visitorIdentifierOptions, {\n id: 'visitorIdentifiersOptions',\n enableColumnFilter: false,\n header: () => Customer,\n enableSorting: false,\n size: 250,\n cell: (info) =>\n RevenueFieldsRenderer({\n fieldsMap: info.getValue(),\n contextKey: 'payloadFields'\n })\n }),\n detailedColumnHelper.accessor((row) => row.reference, {\n id: 'reference',\n header: () => Reference,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.labels, {\n id: 'labels',\n enableColumnFilter: false,\n header: () => Labels,\n enableSorting: false,\n cell: (info) => createLabelsCell(info.row.original)\n }),\n detailedColumnHelper.accessor((row) => row.additionalDataProperties, {\n id: 'additionalDataProperties',\n header: () => Additional Data,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n const additionalDataProperties = info.getValue() as {\n name: string;\n value: string;\n }[];\n\n const fieldsMap = convertArrayToObject(additionalDataProperties);\n\n return RevenueFieldsRenderer({\n fieldsMap,\n contextKey: 'additionalDataProperties'\n });\n }\n }),\n detailedColumnHelper.accessor((row) => row.conversionType, {\n id: 'conversionType',\n enableColumnFilter: false,\n header: () => Conversion Type,\n enableSorting: false,\n cell: (info) => getConversionTypeFriendlyName(info.getValue())\n }),\n detailedColumnHelper.accessor((row) => row.captureDateTime, {\n id: 'captureDateTime',\n enableColumnFilter: false,\n header: () => Conversion Date,\n enableSorting: false,\n cell: (info) => (\n \n {info.getValue() ? (\n formatIsoDateTimeStringToDisplayDate(info.getValue() as string)\n ) : (\n <>\n )}\n \n )\n }),\n detailedColumnHelper.accessor((row) => row.sources, {\n id: 'sources',\n enableColumnFilter: false,\n header: () => Sources,\n enableSorting: false,\n size: 400,\n cell: (info) =>\n info.getValue().map((value, index) => (\n
    \n \n {value}\n
    \n ))\n }),\n detailedColumnHelper.accessor((row) => row.conversionPayloadFields, {\n id: 'payloadFields',\n enableColumnFilter: false,\n header: () => 'Fields',\n enableSorting: false,\n size: 500,\n cell: (info) =>\n FieldsRenderer({\n fieldsMap: info.getValue(),\n contextKey: 'payloadFields'\n })\n }),\n detailedColumnHelper.accessor((row) => row.formUrl, {\n id: 'formUrl',\n enableColumnFilter: false,\n header: () => Form URL,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.webPageViewCount, {\n id: 'webPageViewCount',\n enableColumnFilter: false,\n header: () => Page Views,\n size: 100,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.sessions, {\n id: 'sessions',\n enableColumnFilter: false,\n header: () => Sessions,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor(\n (row) => row.averageWebTouchpointDurationInSeconds,\n {\n id: 'averageWebTouchpointDurationInSeconds',\n enableColumnFilter: false,\n header: () => Duration,\n size: 220,\n enableSorting: false,\n cell: (info) =>\n info.getValue() ? secondsToHms(info.getValue()!) : <>\n }\n ),\n detailedColumnHelper.group({\n header: 'First Click',\n columns: [\n detailedColumnHelper.accessor((row) => row.firstClick?.source, {\n id: 'firstClick.source',\n enableColumnFilter: false,\n header: () => Source,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.group, {\n id: 'firstClick.group',\n enableColumnFilter: false,\n header: () => Group,\n enableSorting: false,\n cell: (info) => FilterNotApplicable(info.getValue())\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.keywords, {\n id: 'firstClick.keywords',\n enableColumnFilter: false,\n header: () => Keywords,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.landingPage, {\n id: 'firstClick.landingPage',\n enableColumnFilter: false,\n header: () => Landing Page,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.referrerHost, {\n id: 'firstClick.referrerHost',\n enableColumnFilter: false,\n header: () => Referrer Host,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.referrerPath, {\n id: 'firstClick.referrerPath',\n enableColumnFilter: false,\n header: () => Referrer Path,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.canonicalUrl, {\n id: 'firstClick.canonicalUrl',\n enableColumnFilter: false,\n header: () => Canonical Url,\n enableSorting: false,\n size: 600,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmCampaign, {\n id: 'firstClick.utmCampaign',\n enableColumnFilter: false,\n header: () => Utm Campaign,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmContent, {\n id: 'firstClick.utmContent',\n enableColumnFilter: false,\n header: () => Utm Content,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmMedium, {\n id: 'firstClick.utmMedium',\n enableColumnFilter: false,\n header: () => Utm Medium,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmSource, {\n id: 'firstClick.utmSource',\n enableColumnFilter: false,\n header: () => Utm Source,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmTerm, {\n id: 'firstClick.utmTerm',\n enableColumnFilter: false,\n header: () => Utm Term,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmKeyword, {\n id: 'firstClick.utmKeyword',\n enableColumnFilter: false,\n header: () => Utm Keyword,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.device, {\n id: 'firstClick.device',\n enableColumnFilter: false,\n header: () => Device,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.placement, {\n id: 'firstClick.placement',\n enableColumnFilter: false,\n header: () => Placement,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.creative, {\n id: 'firstClick.creative',\n enableColumnFilter: false,\n header: () => Creative,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.campaignId, {\n id: 'firstClick.campaignId',\n enableColumnFilter: false,\n header: () => Campaign Id,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.adGroupId, {\n id: 'firstClick.adGroupId',\n enableColumnFilter: false,\n header: () => Adgroup Id,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.gclid, {\n id: 'firstClick.gclid',\n enableColumnFilter: false,\n header: () => Gclid,\n enableSorting: false,\n size: 600,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n })\n ]\n }),\n detailedColumnHelper.group({\n header: 'Last Click',\n columns: [\n detailedColumnHelper.accessor((row) => row.lastClick?.source, {\n id: 'lastClick.source',\n enableColumnFilter: false,\n header: () => Source,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.group, {\n id: 'lastClick.group',\n enableColumnFilter: false,\n header: () => Group,\n enableSorting: false,\n cell: (info) => FilterNotApplicable(info.getValue())\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.keywords, {\n id: 'lastClick.keywords',\n enableColumnFilter: false,\n header: () => Keywords,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.landingPage, {\n id: 'lastClick.landingPage',\n enableColumnFilter: false,\n header: () => Landing Page,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.referrerHost, {\n id: 'lastClick.referrerHost',\n enableColumnFilter: false,\n header: () => Referrer Host,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.referrerPath, {\n id: 'lastClick.referrerPath',\n enableColumnFilter: false,\n header: () => Referrer Path,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.canonicalUrl, {\n id: 'lastClick.canonicalUrl',\n enableColumnFilter: false,\n header: () => Canonical Url,\n enableSorting: false,\n size: 600,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmCampaign, {\n id: 'lastClick.utmCampaign',\n enableColumnFilter: false,\n header: () => Utm Campaign,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmContent, {\n id: 'lastClick.utmContent',\n enableColumnFilter: false,\n header: () => Utm Content,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmMedium, {\n id: 'lastClick.utmMedium',\n enableColumnFilter: false,\n header: () => Utm Medium,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmSource, {\n id: 'lastClick.utmSource',\n enableColumnFilter: false,\n header: () => Utm Source,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmTerm, {\n id: 'lastClick.utmTerm',\n enableColumnFilter: false,\n header: () => Utm Term,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmKeyword, {\n id: 'lastClick.utmKeyword',\n enableColumnFilter: false,\n header: () => Utm Keyword,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.device, {\n id: 'lastClick.device',\n enableColumnFilter: false,\n header: () => Device,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.placement, {\n id: 'lastClick.placement',\n enableColumnFilter: false,\n header: () => Placement,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.creative, {\n id: 'lastClick.creative',\n enableColumnFilter: false,\n header: () => Creative,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.campaignId, {\n id: 'lastClick.campaignId',\n enableColumnFilter: false,\n header: () => Campaign Id,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.adGroupId, {\n id: 'lastClick.adGroupId',\n enableColumnFilter: false,\n header: () => Adgroup Id,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.gclid, {\n id: 'lastClick.gclid',\n enableColumnFilter: false,\n header: () => Gclid,\n enableSorting: false,\n size: 600,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n })\n ]\n }),\n detailedColumnHelper.group({\n header: 'Device And Location',\n columns: [\n detailedColumnHelper.accessor(\n (row) => row.deviceAndLocation?.platform,\n {\n id: 'deviceAndLocation.platform',\n enableColumnFilter: false,\n header: () => Platform,\n enableSorting: false,\n cell: (info) => info.getValue()\n }\n ),\n detailedColumnHelper.accessor((row) => row.deviceAndLocation?.browser, {\n id: 'deviceAndLocation.browser',\n enableColumnFilter: false,\n header: () => Browser,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor(\n (row) => row.deviceAndLocation?.operatingSystem,\n {\n id: 'deviceAndLocation.operatingSystem',\n enableColumnFilter: false,\n header: () => OS,\n enableSorting: false,\n cell: (info) => info.getValue()\n }\n )\n ]\n }),\n detailedColumnHelper.group({\n header: 'Identity',\n columns: [\n detailedColumnHelper.accessor((row) => row.identity.email, {\n id: 'identity.emails',\n enableColumnFilter: false,\n header: () => Email,\n enableSorting: false,\n cell: (info) => info.getValue()\n })\n ]\n }),\n detailedColumnHelper.group({\n header: 'Expanded Fields',\n columns: expandedFieldsColumnDefs\n }),\n detailedColumnHelper.accessor((row) => row.visitorId, {\n id: 'Visitor',\n enableColumnFilter: false,\n header: () => Visitor,\n enableSorting: false,\n cell: (info) => {\n const visitorId = info.getValue();\n\n if (!visitorId) {\n return <>;\n }\n\n return (\n \n View\n \n );\n },\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n },\n enableResizing: false,\n size: 100\n })\n ];\n};\n\nexport default revenueDetailedColumnDefs;\n","export interface AlertProps {\n type: 'success' | 'info' | 'warning' | 'error';\n message?: string;\n title?: string;\n}\n\nconst getClasses = (type: 'success' | 'info' | 'warning' | 'error'): string => {\n switch (type) {\n case 'success':\n return 'bg-success-50 rounded text-success-400 pr-2 py-1 text-xs';\n case 'error':\n return 'bg-error-75 rounded text-error-300 pr-2 py-1 text-xs';\n case 'warning':\n return 'bg-primary-50 rounded text-primary-400 pr-2 py-1 text-xs';\n case 'info':\n return 'bg-secondary-50 rounded text-secondary-400 pr-2 py-1 text-xs';\n default:\n throw new Error(`Unable to implement alert with type: ${type}`);\n }\n};\n\nconst getIcons = (type: 'success' | 'info' | 'warning' | 'error'): string => {\n switch (type) {\n case 'success':\n return 'ra-icons-generic-checked';\n case 'error':\n return 'ra-icons-generic-error';\n case 'warning':\n return 'ra-icons-generic-warning';\n case 'info':\n return 'ra-icons-generic-information-1';\n default:\n throw new Error(`Unable to implement alert with type: ${type}`);\n }\n};\n\nconst alert = (props: AlertProps) => {\n const { type, message, title } = props;\n\n return (\n
    \n \n \n
    \n {title ?
    {title}
    : <>}\n {message}\n
    \n
    \n
    \n );\n};\n\nexport default alert;\n","import { FC, useMemo } from 'react';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport RevenueSearchInteractionBar from 'features/revenue/revenueSearchBar';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { PaginatedTable } from 'features/pagination/paginatedTable';\nimport { usePaginatedQuery } from 'features/pagination/hooks/usePaginatedQuery';\nimport { useGetPaginatedRevenueQuery, usePrefetch } from 'app/apis/queryApi';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { selectViewSelectionByComponentId } from 'features/data-view-selection/dataViewSelectionSlice';\nimport { ViewType } from 'features/data-view-selection/view-type';\nimport { GetRevenueRequest } from 'features/revenue/types/get-revenue-request';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport { ToggleType } from 'features/internal/internal.models';\nimport revenueSimpleColumnDefs from 'features/revenue/table/revenue-simple-column-defs';\nimport revenueDetailedColumnDefs from 'features/revenue/table/revenue-detailed-column-defs';\nimport { selectDoIHavePendingDeletesForComponent } from 'features/row-deletion/rowPendingDeletionSlice';\nimport Alert from 'common/components/alerts/alert';\nimport { GetRevenueResponse } from 'features/revenue/types/get-revenue-response';\n\nconst Revenue: FC = () => {\n const revenueComponentId = 'revenue-component';\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const revenueIdToggle = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayRevenueId)\n );\n\n const { selection: currentViewType } = useSelector((state: RootState) =>\n selectViewSelectionByComponentId(state, revenueComponentId)\n );\n\n const hasPendingDeletes = useSelector((state: RootState) =>\n selectDoIHavePendingDeletesForComponent(state, revenueComponentId)\n );\n\n const prefetchPage = usePrefetch('getPaginatedRevenue');\n const { data, isLoading, isFetching } = usePaginatedQuery<\n GetRevenueRequest,\n GetRevenueResponse\n >(\n useGetPaginatedRevenueQuery,\n prefetchPage,\n revenueComponentId,\n {\n currencyCode: selectedCurrencyCode\n },\n {\n initialColumnName: 'revenuecloseddatetime',\n initialOrderDirection: 'ASC'\n }\n );\n\n const columnDefs = useMemo(() => {\n return currentViewType === ViewType.Simple\n ? revenueSimpleColumnDefs(\n revenueComponentId,\n revenueIdToggle?.enabled ?? false,\n selectedCurrencyCode\n )\n : revenueDetailedColumnDefs(\n revenueComponentId,\n data?.data ?? [],\n selectedCurrencyCode,\n revenueIdToggle?.enabled ?? false\n );\n }, [revenueIdToggle, selectedCurrencyCode, currentViewType, data]);\n\n if (!isLoading && !isFetching && !data) {\n return <>;\n }\n\n return (\n \n <>\n \n {hasPendingDeletes && (\n \n )}\n\n \n {\n return row.revenueEntity ? row.revenueEntity.id : row.id;\n }}\n getRowData={() => null}\n />\n \n \n \n );\n};\n\nexport default Revenue;\n","import { useGetDataScienceMmmSegmentsQuery } from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport SimpleButtonContainerContent from 'common/components/drop-downs/legacy/simpleDropDownButtonContainerContent';\nimport { FC, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { onSegmentChanged } from './header-controls.slice';\n\nconst MmmHeaderControls: FC> = () => {\n const dispatch = useDispatch();\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { selectedSegmentKey } = useSelector(\n (state: RootState) => state.mmmHeaderControls\n );\n const isPocModeActive = useSelector(\n (state: RootState) => state.pocToggle.isPocModeActive\n );\n\n const { data: segments, isLoading: isLoadingSegments } =\n useGetDataScienceMmmSegmentsQuery({ siteId });\n\n const segmentDropdowns = useMemo(() => {\n if (segments && segments.length > 0) {\n const segmentsToMap = isPocModeActive\n ? segments\n : segments.filter(\n (segment) => !segment.toUpperCase().startsWith('TESTING')\n );\n\n return segmentsToMap.map((segment, index) => {\n return {\n key: segment,\n label: segment,\n isActive: selectedSegmentKey\n ? selectedSegmentKey === segment\n : index === 0\n };\n });\n }\n }, [segments, selectedSegmentKey, isPocModeActive]);\n\n const selectedDropdownItem = useMemo(() => {\n if (segmentDropdowns) {\n const segment = segmentDropdowns.find(\n (s) => s.key === selectedSegmentKey\n );\n return segment;\n }\n\n return undefined;\n }, [segmentDropdowns, selectedSegmentKey]);\n\n return (\n <>\n
    \n

    Marketing Mix Modelling

    \n
    \n
    \n
    \n {!isLoadingSegments &&\n segmentDropdowns &&\n selectedDropdownItem ? (\n \n dispatch(onSegmentChanged(selectedItem))\n }\n >\n \n \n ) : (\n <>\n )}\n
    \n
    \n
    \n
    \n \n );\n};\n\nexport default MmmHeaderControls;\n","import {\n MmmModelOutput,\n MarketingSourceCategoryForecast\n} from '../mmmModelOutput';\nimport {\n ChartByStringBarScatter,\n ChartDataType,\n ChartDisplayType,\n DataPointSetByString,\n DataPointSetByStringYAxis\n} from 'features/charts/chart.models';\nimport { v4 as guid } from 'uuid';\n\nexport const createmodelledRoiteByChannelChart = (\n ddaData: MmmModelOutput\n): ChartByStringBarScatter => {\n const dataPointStrings = ddaData.forecasts.map(\n (forecast) => forecast.sourceCategoryDisplayName\n );\n\n const spendDataSets = createSpendDataSets(\n ddaData.forecasts,\n dataPointStrings\n );\n\n const revenueDataSets = createRevenueDataSets(\n ddaData.forecasts,\n dataPointStrings\n );\n\n const barDataPointSets = [...spendDataSets, ...revenueDataSets];\n const yHighestValue = barDataPointSets.reduce(\n (highestValue, currentValue) =>\n currentValue.value > highestValue ? currentValue.value : highestValue,\n 0\n );\n\n const scatterDataPointSets = createRoiDataSets(\n ddaData.forecasts,\n dataPointStrings\n );\n const yScatterHighestValue = scatterDataPointSets.reduce(\n (highestValue, currentValue) =>\n currentValue.value > highestValue ? currentValue.value : highestValue,\n 0\n );\n\n return {\n id: guid(),\n type: ChartDataType.STRING_BAR_SCATTER,\n defaultChartDisplayType: ChartDisplayType.MIXED,\n shouldShowChartTypeDropdown: false,\n title: '',\n barDataPointSets,\n scatterDataPointSets,\n yAxisFormat: new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency: 'GBP',\n maximumSignificantDigits: 1,\n notation: 'compact'\n }),\n tooltipFormat: new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency: 'GBP',\n maximumSignificantDigits: 3,\n notation: 'compact'\n }),\n xAxisTitle: '',\n yAxisTitle: 'Spend',\n yHighestValue,\n yScatterHighestValue\n };\n\n function createSpendDataSets(\n forecasts: MarketingSourceCategoryForecast[],\n dataPointStrings: string[]\n ): DataPointSetByString[] {\n const dataSets = dataPointStrings.map((dataPointString) => {\n const spend =\n forecasts.find(\n (forecast) => forecast.sourceCategoryDisplayName === dataPointString\n )?.spend ?? 0;\n\n const dataPointSet: DataPointSetByString = {\n dataPointString,\n dataPointSetName: 'Spend',\n value: spend * ddaData.dayMultiplier\n };\n\n return dataPointSet;\n });\n\n return dataSets;\n }\n\n function createRevenueDataSets(\n forecasts: MarketingSourceCategoryForecast[],\n dataPointStrings: string[]\n ): DataPointSetByString[] {\n const dataSets = dataPointStrings.map((dataPointString) => {\n const revenue =\n forecasts.find(\n (forecast) => forecast.sourceCategoryDisplayName === dataPointString\n )?.revenue ?? 0;\n\n const dataPointSet: DataPointSetByString = {\n dataPointString,\n dataPointSetName: 'Revenue',\n value: revenue * ddaData.dayMultiplier\n };\n\n return dataPointSet;\n });\n\n return dataSets;\n }\n\n function createRoiDataSets(\n forecasts: MarketingSourceCategoryForecast[],\n dataPointStrings: string[]\n ): DataPointSetByStringYAxis[] {\n const roi = dataPointStrings.map((dataPointString) => {\n const forecast = forecasts.find(\n (forecast) => forecast.sourceCategoryDisplayName === dataPointString\n );\n\n if (!forecast) {\n throw Error(`Unable to find forecast with name ${dataPointString}`);\n }\n\n const set: DataPointSetByStringYAxis = {\n dataPointSetName: 'ROI',\n dataPointString,\n yAxisName: 'y1',\n yAxisFormat: new Intl.NumberFormat('en-GB', {\n style: 'percent',\n maximumFractionDigits: 1\n }),\n yAxisTooltipFormat: new Intl.NumberFormat('en-GB', {\n style: 'percent',\n maximumFractionDigits: 2\n }),\n yAxisTitle: '',\n value: forecast.revenue / forecast.spend\n };\n\n return set;\n });\n\n return roi;\n }\n};\n","export function sum(numbers: number[]): number {\n return numbers.reduce(\n (summedNumbers, currentNumber) => (summedNumbers += currentNumber),\n 0\n );\n}\n\nexport function toMillion(n: number): number {\n return n ? n * 1000 : 0;\n}\n","import {\n MmmModelOutput,\n MarketingSourceCategoryForecast\n} from '../mmmModelOutput';\nimport {\n AxisChartByString,\n ChartDataType,\n ChartDisplayType,\n DataPointSetByString\n} from 'features/charts/chart.models';\nimport { v4 as guid } from 'uuid';\nimport { toMillion } from '../charts/mmm-chart-helpers';\n\n// ALL THIS NEEDS CHANGING AS IT WAS COPY PASTA\nexport const createmodelledRoiGroupedChart = (\n ddaData: MmmModelOutput\n): AxisChartByString => {\n const dataPointStrings = ddaData.forecasts.map(\n (forecast) => forecast.sourceCategoryDisplayName\n );\n\n const spendDataSets = createSpendDataSets(\n ddaData.forecasts,\n dataPointStrings\n );\n\n const revenueDataSets = createRevenueDataSets(\n ddaData.forecasts,\n dataPointStrings\n );\n\n const barDataPointSets = [...spendDataSets, ...revenueDataSets];\n const yHighestValue = barDataPointSets.reduce(\n (highestValue, currentValue) =>\n currentValue.value > highestValue ? currentValue.value : highestValue,\n 0\n );\n\n const chart: AxisChartByString = {\n id: guid(),\n type: ChartDataType.STRING,\n title: '',\n dataPointSets: barDataPointSets,\n yAxisFormat: new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency: 'GBP',\n maximumSignificantDigits: 1,\n notation: 'compact'\n }),\n tooltipFormat: new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency: 'GBP',\n maximumSignificantDigits: 3,\n notation: 'compact'\n }),\n xAxisTitle: '',\n yAxisTitle: 'Spend',\n yHighestValue,\n defaultChartDisplayType: ChartDisplayType.DOUGHNUT,\n shouldAnimate: true,\n shouldShowChartTypeDropdown: false\n };\n\n return chart;\n};\n\nfunction createSpendDataSets(\n forecasts: MarketingSourceCategoryForecast[],\n dataPointStrings: string[]\n): DataPointSetByString[] {\n const dataSets = dataPointStrings.map((dataPointString) => {\n const spend =\n forecasts.find(\n (forecast) => forecast.sourceCategoryDisplayName === dataPointString\n )?.spend ?? 0;\n\n const dataPointSet: DataPointSetByString = {\n dataPointString,\n dataPointSetName: 'Spend',\n value: toMillion(spend)\n };\n\n return dataPointSet;\n });\n\n return dataSets;\n}\n\nfunction createRevenueDataSets(\n forecasts: MarketingSourceCategoryForecast[],\n dataPointStrings: string[]\n): DataPointSetByString[] {\n const dataSets = dataPointStrings.map((dataPointString) => {\n const revenue =\n forecasts.find(\n (forecast) => forecast.sourceCategoryDisplayName === dataPointString\n )?.revenue ?? 0;\n\n const dataPointSet: DataPointSetByString = {\n dataPointString,\n dataPointSetName: 'Revenue',\n value: toMillion(revenue)\n };\n\n return dataPointSet;\n });\n\n return dataSets;\n}\n","import { MmmModelOutput } from '../mmmModelOutput';\nimport {\n AxisChartByString,\n ChartByStringBarScatter\n} from 'features/charts/chart.models';\nimport { createmodelledRoiteByChannelChart } from './modelled-roi-by-channel-chart';\nimport { createmodelledRoiGroupedChart } from './modelled-roi-grouped-chart';\n\nexport const createModelledRoiCharts = (\n ddaResponse: MmmModelOutput\n): ModelledRoiCharts => {\n const chart: ModelledRoiCharts = {\n modelledRoiByChannel: createmodelledRoiteByChannelChart(ddaResponse),\n modelledRoiGrouped: createmodelledRoiGroupedChart(ddaResponse)\n };\n\n return chart;\n};\n\nexport interface ModelledRoiCharts {\n modelledRoiByChannel: ChartByStringBarScatter;\n modelledRoiGrouped: AxisChartByString;\n}\n","export enum AccordionTheme {\n DEFAULT,\n OPPORTUNITY,\n REVENUE,\n CONVERSIONS\n}\n\nexport interface AccordionThemeClasses {\n backgroundColourClass?: string;\n borderColourClass?: string;\n}\n","import Tile from 'features/tiles/tile';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC, useMemo } from 'react';\nimport MmmHeaderControls from '../header-controls/mmm-header-controls';\nimport ChartBridge from 'features/charts/strategies/chart-bridge';\nimport Loading from 'common/components/loading/loading';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { createModelledRoiCharts } from './modelled-roi-charts';\nimport { useGetDataScienceMmmSegmentDataQuery } from 'app/apis/queryApi';\n\nconst MmmModelledRoiPage: FC> = () => {\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { selectedSegmentKey } = useSelector(\n (state: RootState) => state.mmmHeaderControls\n );\n\n const { data: mmmModelOutput, isFetching: isFetchingModelOutput } =\n useGetDataScienceMmmSegmentDataQuery(\n {\n siteId,\n segment: selectedSegmentKey\n },\n {\n skip: selectedSegmentKey.length < 1\n }\n );\n\n const charts = useMemo(() => {\n if (!isFetchingModelOutput && mmmModelOutput) {\n return createModelledRoiCharts(mmmModelOutput);\n }\n }, [mmmModelOutput, isFetchingModelOutput]);\n\n return (\n
    \n \n \n
    \n

    Modelled ROI by Channel

    \n \n
    \n {charts && !isFetchingModelOutput ? (\n \n ) : (\n \n )}\n
    \n
    \n
    \n {/* \n
    \n

    Modelled ROI Combined

    \n \n
    \n {charts && !isLoading ? (\n \n ) : (\n \n )}\n
    \n
    \n
    */}\n
    \n
    \n );\n};\n\nexport default MmmModelledRoiPage;\n","import { AccordionTheme, AccordionThemeClasses } from './accordion-theme';\n\nexport const getThemeClasses = (\n theme: AccordionTheme\n): AccordionThemeClasses => {\n switch (theme) {\n case AccordionTheme.DEFAULT:\n return {\n backgroundColourClass: 'bg-neutral-150',\n borderColourClass: undefined\n };\n case AccordionTheme.CONVERSIONS:\n return {\n backgroundColourClass: 'bg-neutral-150',\n borderColourClass: undefined\n };\n case AccordionTheme.REVENUE:\n return {\n backgroundColourClass: 'bg-tertiary-100',\n borderColourClass: 'border-tertiary-400'\n };\n case AccordionTheme.OPPORTUNITY:\n return {\n backgroundColourClass: 'bg-primary-40',\n borderColourClass: 'border-primary-50'\n };\n default:\n return {} as AccordionThemeClasses;\n }\n};\n","import { RootState } from 'app/store';\nimport { FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectAccordion, triggerAccordion } from './accordionSlice';\nimport { AccordionTheme } from './accordion-theme';\nimport { getThemeClasses } from './accordion-functions';\n\nexport const AccordionItem: FC<{\n id: string;\n HeaderComponent: FC;\n headerContent: {\n [key: string]:\n | string\n | number\n | boolean\n | undefined\n | string[]\n | JSX.Element;\n };\n children: JSX.Element | JSX.Element[] | undefined;\n theme: AccordionTheme;\n}> = ({ id, HeaderComponent, headerContent, children, theme }) => {\n const { isOpen } = useSelector((state: RootState) =>\n selectAccordion(state, id)\n );\n const dispatch = useDispatch();\n const { backgroundColourClass, borderColourClass } = getThemeClasses(theme);\n return (\n \n
    \n {\n dispatch(triggerAccordion({ componentId: id }));\n }}\n >\n {HeaderComponent ? :

    }\n\n
    \n \n
    \n \n
    \n\n \n {children}\n \n \n );\n};\n\nexport default AccordionItem;\n","import { formatIsoDateTimeStringToLongMonthDisplayDate } from 'common/utils/LEGACY_timeHelpers';\nimport { FC } from 'react';\n\nexport const VisitorSessionHeader: FC<{\n startDate: string;\n itemCount: number;\n header: JSX.Element;\n tags: JSX.Element;\n}> = ({ startDate, itemCount, header, tags }) => {\n return (\n
    \n
    \n \n {formatIsoDateTimeStringToLongMonthDisplayDate(startDate)}\n
    \n
    \n
    {header}
    \n\n
    \n {tags}\n
    \n
    \n {itemCount > 0 ? (\n
    \n {itemCount === 1 ? `1 page` : `${itemCount} pages`}\n
    \n ) : (\n <>\n )}\n
    \n );\n};\nexport const GeneralHeader: FC<{\n title: string;\n}> = ({ title }) => {\n return (\n

    {title}

    \n );\n};\n","import Blur from 'features/blur/blur';\n\nexport interface VisitorTileData {\n label: string;\n count: number | string;\n metric: string | number;\n}\n\nexport const VisitorNumberTile = ({\n tileData: { label, count, metric }\n}: {\n tileData: VisitorTileData;\n}) => {\n let metricMessage = '';\n const shouldShowConvertedMetric = metric > 0 || metric < 0;\n const convertedMetric = metric.toLocaleString('en-GB', {\n maximumFractionDigits: 0,\n minimumFractionDigits: 0\n });\n\n if (metric > 0) {\n metricMessage = convertedMetric + '% higher than average';\n } else if (metric < 0) {\n metricMessage = convertedMetric.replace('-', '') + '% lower than average';\n }\n return (\n <>\n
    \n
    \n
    \n
    \n {label}\n
    \n \n

    {count}

    \n
    \n
    \n {shouldShowConvertedMetric ? (\n \n \n {convertedMetric.includes('-') ? '-' : '+'}\n  \n {convertedMetric.replace('-', '')}%\n
    \n \n ) : null}\n
    \n\n
    {metricMessage}
    \n \n \n );\n};\n","import { levenshteinDistanceInsertionsOnly } from './fuzzySearchHelpers';\n\nexport function hasMatchOnKeyUsingFuzzySearch(\n searchValue: string,\n targetKey: string,\n fuzzySearchThreshold: number\n): boolean {\n const distance = levenshteinDistanceInsertionsOnly(searchValue, targetKey);\n\n return distance !== -1 && distance <= fuzzySearchThreshold;\n}\n\nexport function fuzzySearchResults(\n matchTerm: string,\n data: T[],\n distanceThreshold: number\n): { distance: number; data: T }[] {\n const results =\n data\n ?.reduce<{ distance: number; data: T }[]>((acc, nextData) => {\n const distance = levenshteinDistanceInsertionsOnly(\n matchTerm,\n nextData.key.toLowerCase()\n );\n\n if (distance > distanceThreshold) {\n return acc;\n }\n\n const levenshteinObj = { distance, data: nextData };\n\n acc.push(levenshteinObj);\n return acc;\n }, [])\n .sort((a, b) => a.distance - b.distance) ?? [];\n\n return results;\n}\n","/**\n * Calculates the Levenshtein distance between two strings, which is the minimum number of\n * insertions, deletions, and updates required to transform one string into the other.\n * This function only considers insertions, and ignores deletions and updates.\n *\n * When A deletion does occur it can't match the next character in the string, so it will\n * be counted as an insertion in the next iteration. This will result in a higher distance (normally the count of the strings together)\n *\n * To simplify these cases we will return -1 when this happens.\n *\n * @param str1\n * @param str2\n * @returns\n */\nexport function levenshteinDistanceInsertionsOnly(\n str1: string,\n str2: string\n): number {\n const dp: number[][] = [];\n\n const m = str1.length;\n const n = str2.length;\n\n // Initialize the 2D dp array\n for (let i = 0; i <= m; i++) {\n dp[i] = [];\n for (let j = 0; j <= n; j++) {\n // If the first string is empty, the number of operations required\n // is equal to the number of characters in the second string.\n // Will set the value to the column number when in the first row\n if (i === 0) {\n dp[i][j] = j;\n }\n // If the second string is empty, the number of operations required\n // is equal to the number of characters in the first string.\n // Will set the value to the row number when in the first column\n else if (j === 0) {\n dp[i][j] = i * 150;\n }\n // If the characters at the current positions in both strings are the same,\n // the number of operations required is the same as the number of operations\n // required for the substrings without these characters.\n else if (str1[i - 1] === str2[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1];\n }\n // If the characters at the current positions in both strings are different,\n // the number of operations required is equal to 1 (for an insertion)\n // plus the number of operations required to transform the rest of the strings.\n else {\n dp[i][j] = Math.min(\n dp[i][j - 1] + 1,\n dp[i - 1][j] + 150,\n dp[i - 1][j - 1] + 150\n );\n }\n }\n }\n\n // Return the final value in the dp array, which represents the number of\n // insertions required to transform the first string into the second string.\n // return -1 if the distance is the sum of the lengths of the strings - this means a deletion or update was found\n return dp[m][n];\n}\n","import { fuzzySearchResults } from './closestMatchOnKeyFuzzySearchHelpers';\n\nfunction fullNameClosestMatchOnKeyName<\n T extends { key: string; value: string }\n>(data: T[]): string {\n const fullNameMatchTerm = 'fullname';\n const firstNameMatchTerm = 'firstname';\n const lastNameMatchTerm = 'lastname';\n const backupMatchTerms = ['name'];\n\n const nameObject: {\n firstName?: string;\n lastName?: string;\n } = {};\n\n let fullNameMatch = data?.find(\n (x) => x.key.toLowerCase() === fullNameMatchTerm\n );\n if (!fullNameMatch) {\n fullNameMatch =\n fuzzySearchResults(fullNameMatchTerm, data, 50)[0]?.data ?? null;\n }\n\n if (fullNameMatch) {\n return fullNameMatch.value.toLowerCase();\n }\n\n let firstNameMatch = data?.find(\n (x) => x.key.toLowerCase() === firstNameMatchTerm\n );\n if (!firstNameMatch) {\n firstNameMatch =\n fuzzySearchResults(firstNameMatchTerm, data, 50)[0]?.data ?? null;\n }\n\n if (firstNameMatch) {\n nameObject.firstName = firstNameMatch.value;\n }\n\n let lastNameMatch = data?.find(\n (x) => x.key.toLowerCase() === lastNameMatchTerm\n );\n\n if (!lastNameMatch) {\n lastNameMatch =\n fuzzySearchResults(lastNameMatchTerm, data, 50)[0]?.data ?? null;\n }\n\n if (lastNameMatch) {\n nameObject.lastName = lastNameMatch.value;\n }\n\n if (nameObject.firstName && nameObject.lastName) {\n return (\n nameObject.firstName.toLowerCase() +\n ' ' +\n nameObject.lastName.toLowerCase()\n );\n } else {\n let backupMatch: string | undefined;\n backupMatchTerms.forEach((term) => {\n let matchedTerm = data?.find((x) => x.key.toLowerCase() === term);\n\n if (!matchedTerm) {\n matchedTerm = fuzzySearchResults(term, data, 50)[0]?.data ?? null;\n }\n\n if (matchedTerm) {\n backupMatch = matchedTerm.value.toLowerCase();\n }\n });\n\n return (\n backupMatch ??\n nameObject.firstName ??\n nameObject.lastName ??\n 'Unknown Full Name'\n );\n }\n}\n\nexport default fullNameClosestMatchOnKeyName;\n","import { fuzzySearchResults } from './closestMatchOnKeyFuzzySearchHelpers';\n\nfunction emailClosestMatchOnKeyName(\n data: T[]\n): string {\n const emailMatchTerm = 'email';\n\n let emailMatch = data?.find((x) => x.key.toLowerCase() === emailMatchTerm);\n\n if (!emailMatch) {\n emailMatch = fuzzySearchResults(emailMatchTerm, data, 50)[0]?.data ?? null;\n }\n\n if (emailMatch) {\n return emailMatch.value.toLowerCase();\n }\n\n return 'Unknown Email Address';\n}\n\nexport default emailClosestMatchOnKeyName;\n","function getProfileImage(value: string): string {\n if (value.includes('@rooney.com')) {\n const currentMonth = new Date().getMonth();\n\n // Halloween!\n if (currentMonth === 9) {\n return 'media/misc/profile-halloween.png';\n }\n\n // Christmas!\n if (currentMonth === 11) {\n return 'media/misc/profile-santa-claus.png';\n }\n\n // Easter!\n if (currentMonth === 3) {\n return 'media/misc/profile-bunny.png';\n }\n\n return 'media/misc/profile-neo.png';\n }\n\n return 'media/misc/profile-place.jpg';\n}\n\nexport default getProfileImage;\n","import { fuzzySearchResults } from './closestMatchOnKeyFuzzySearchHelpers';\n\nfunction phoneClosestMatchOnKeyName(\n data: T[]\n): string | null {\n const phoneMatchTerm = 'phone';\n const backupMatchTerms = ['caller'];\n\n let phoneMatch = data?.find((x) => x.key.toLowerCase() === phoneMatchTerm);\n if (!phoneMatch) {\n phoneMatch = fuzzySearchResults(phoneMatchTerm, data, 50)[0]?.data ?? null;\n }\n if (phoneMatch) {\n return phoneMatch.value.toLowerCase();\n }\n\n let backupMatch: string | undefined;\n backupMatchTerms.forEach((term) => {\n let matchedTerm = data?.find((x) => x.key.toLowerCase() === term);\n if (!matchedTerm) {\n matchedTerm = fuzzySearchResults(term, data, 50)[0]?.data ?? null;\n }\n\n if (matchedTerm) {\n backupMatch = matchedTerm.value.toLowerCase();\n }\n });\n\n return backupMatch ?? null;\n}\n\nexport default phoneClosestMatchOnKeyName;\n","import { fuzzySearchResults } from './closestMatchOnKeyFuzzySearchHelpers';\n\nfunction jobTitleClosestMatchOnKeyName<\n T extends { key: string; value: string }\n>(data: T[]): string | null {\n const jobTitleMatchTerm = 'job';\n\n let jobMatch = data?.find((x) => x.key.toLowerCase() === jobTitleMatchTerm);\n\n if (!jobMatch) {\n jobMatch = fuzzySearchResults(jobTitleMatchTerm, data, 50)[0]?.data ?? null;\n }\n if (jobMatch) {\n return jobMatch.value.toLowerCase();\n }\n\n return null;\n}\n\nexport default jobTitleClosestMatchOnKeyName;\n","import { RootState } from 'app/store';\nimport {\n areAnyAccordionsOpen,\n openAccordion\n} from 'common/components/accordion/accordionSlice';\nimport { FC, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nconst AccordionGroup: FC<{\n accordionIds: string[];\n children: JSX.Element | JSX.Element[] | undefined;\n}> = ({ accordionIds, children }) => {\n const dispatch = useDispatch();\n const areAnyPageAccordionsOpen = useSelector((state: RootState) =>\n areAnyAccordionsOpen(state, accordionIds)\n );\n\n const useMountEffect = () =>\n useEffect(() => {\n if (!areAnyPageAccordionsOpen) {\n dispatch(openAccordion({ componentId: accordionIds[0] }));\n }\n }, []);\n\n useMountEffect();\n\n return
    {children}
    ;\n};\n\nexport default AccordionGroup;\n","import { useEffect } from 'react';\nimport useTimeoutFn from './useTimeoutFn';\nexport default function useDebounce(fn, ms, deps) {\n if (ms === void 0) { ms = 0; }\n if (deps === void 0) { deps = []; }\n var _a = useTimeoutFn(fn, ms), isReady = _a[0], cancel = _a[1], reset = _a[2];\n useEffect(reset, deps);\n return [isReady, cancel];\n}\n","import { useCallback, useEffect, useRef } from 'react';\nexport default function useTimeoutFn(fn, ms) {\n if (ms === void 0) { ms = 0; }\n var ready = useRef(false);\n var timeout = useRef();\n var callback = useRef(fn);\n var isReady = useCallback(function () { return ready.current; }, []);\n var set = useCallback(function () {\n ready.current = false;\n timeout.current && clearTimeout(timeout.current);\n timeout.current = setTimeout(function () {\n ready.current = true;\n callback.current();\n }, ms);\n }, [ms]);\n var clear = useCallback(function () {\n ready.current = null;\n timeout.current && clearTimeout(timeout.current);\n }, []);\n // update ref when function changes\n useEffect(function () {\n callback.current = fn;\n }, [fn]);\n // set on mount, clear on unmount\n useEffect(function () {\n set();\n return clear;\n }, [ms]);\n return [isReady, clear, set];\n}\n","import { RootState } from 'app/store';\nimport Button from 'common/components/buttons/button';\nimport { FC, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n selectMapStateByComponentId,\n setInitialMapState,\n zoomIn,\n zoomOut\n} from './googleStaticMapSlice';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\n\nexport interface Location {\n city: string;\n regionName: string;\n country: string;\n}\n\nexport const GoogleStaticMap: FC<{\n componentId: string;\n mapHeight: number;\n mapWidth: number;\n locations: Location[];\n}> = ({ componentId, mapHeight, mapWidth, locations }) => {\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(\n setInitialMapState({\n componentId,\n initialFocusLocation: `${locations[0].city}, ${locations[0].regionName}, ${locations[0].country}`,\n initialZoomLevel: 10\n })\n );\n }, []);\n\n const { isInGlobalFocusMode, currentFocusLocation, currentZoomLevel } =\n useSelector((state: RootState) =>\n selectMapStateByComponentId(state, componentId)\n );\n\n const createMapUrl = (): string => {\n if (isInGlobalFocusMode && locations.length > 1) {\n return `https://maps.googleapis.com/maps/api/staticmap?key=${\n process.env.REACT_APP_GOOGLE_API_KEY\n }&size=${mapWidth}x${mapHeight}&markers=${locations\n .map(\n (location) =>\n `${location.city}, ${location.regionName}, ${location.country}`\n )\n .join('%7C')}`;\n } else {\n return `https://maps.googleapis.com/maps/api/staticmap?key=${process.env.REACT_APP_GOOGLE_API_KEY}&size=${mapWidth}x${mapHeight}&markers=${currentFocusLocation}&zoom=${currentZoomLevel}`;\n }\n };\n return (\n <>\n
    \n
    \n dispatch(zoomIn(componentId))}\n identifier=\"zoom-in\"\n theme={ButtonTheme.MAPZOOM}\n classOverrides=\" text-center align-middle w-7 h-7\"\n >\n +\n \n
    \n\n
    \n dispatch(zoomOut(componentId))}\n identifier=\"zoom-out\"\n theme={ButtonTheme.MAPZOOM}\n classOverrides=\"absolute text-center align-middle w-7 h-7\"\n >\n -\n \n
    \n\n
    \n \n dispatch(\n setInitialMapState({\n componentId,\n initialFocusLocation: `${locations[0].city}, ${locations[0].regionName}, ${locations[0].country}`,\n initialZoomLevel: 10\n })\n )\n }\n identifier=\"reset\"\n theme={ButtonTheme.MAPRESET}\n classOverrides=\"text-center align-middle w-10 h-7\"\n >\n Reset\n \n
    \n\n

    \n \n
    \n \n );\n};\n","export enum IconType {\n FLATICON,\n IMAGE\n}\n","import { FC } from 'react';\nimport { IconType } from './icon-types';\n\ninterface OperatingSystemLogoDto {\n operatingSystems: string[];\n path: string;\n iconType: IconType;\n}\n\nconst operatingSystemLogos: OperatingSystemLogoDto[] = [\n {\n operatingSystems: ['ANDROID'],\n iconType: IconType.IMAGE,\n path: '/media/logos/android-logo.png'\n },\n {\n operatingSystems: ['APPLE', 'IOS'],\n iconType: IconType.IMAGE,\n path: '/media/logos/apple-logo.png'\n },\n {\n operatingSystems: ['CHROME'],\n iconType: IconType.IMAGE,\n path: '/media/logos/chrome-logo.png'\n },\n {\n operatingSystems: ['LINUX'],\n iconType: IconType.IMAGE,\n path: '/media/logos/linux-logo.png'\n },\n {\n operatingSystems: ['WINDOWS'],\n iconType: IconType.IMAGE,\n path: '/media/logos/microsoft-logo.png'\n }\n];\n\nconst OperatingSystemLogo: FC<{\n operatingSystem: string;\n imageClasses?: string;\n iconClasses?: string;\n}> = ({\n operatingSystem,\n imageClasses,\n iconClasses\n}: {\n operatingSystem: string;\n imageClasses?: string;\n iconClasses?: string;\n}) => {\n const operatingSystemUpper = operatingSystem.toUpperCase();\n\n const logoToUse = operatingSystemLogos.find((logo) =>\n logo.operatingSystems.some((os) => operatingSystemUpper.includes(os))\n );\n\n return logoToUse ? (\n <>\n {logoToUse.iconType === IconType.FLATICON ? (\n \n ) : (\n \n )}\n \n ) : (\n <>\n );\n};\n\nexport default OperatingSystemLogo;\n","import { FC } from 'react';\nimport { IconType } from './icon-types';\n\ninterface BrowserLogoDto {\n browser: string;\n path: string;\n iconType: IconType;\n}\n\nconst browserLogos: BrowserLogoDto[] = [\n {\n browser: 'Chrome',\n iconType: IconType.IMAGE,\n path: '/media/logos/chrome-logo.png'\n },\n {\n browser: 'Edge',\n iconType: IconType.IMAGE,\n path: '/media/logos/edge-logo.png'\n },\n {\n browser: 'Facebook',\n iconType: IconType.IMAGE,\n path: '/media/logos/facebook-logo.png'\n },\n {\n browser: 'Firefox',\n iconType: IconType.IMAGE,\n path: '/media/logos/firefox-logo.png'\n },\n {\n browser: 'Internet Explorer',\n iconType: IconType.IMAGE,\n path: '/media/logos/ie-logo.png'\n },\n {\n browser: 'Opera',\n iconType: IconType.IMAGE,\n path: '/media/logos/opera-logo.png'\n },\n {\n browser: 'Safari',\n iconType: IconType.IMAGE,\n path: '/media/logos/safari-logo.png'\n },\n {\n browser: 'Samsung',\n iconType: IconType.IMAGE,\n path: '/media/logos/samsung-logo.png'\n }\n];\n\nconst BrowserLogo: FC<{\n browser: string;\n imageClasses?: string;\n iconClasses?: string;\n}> = ({\n browser,\n imageClasses,\n iconClasses\n}: {\n browser: string;\n imageClasses?: string;\n iconClasses?: string;\n}) => {\n const logoToUse = browserLogos.find((logo) => browser.includes(logo.browser));\n\n return logoToUse ? (\n <>\n {logoToUse.iconType === IconType.FLATICON ? (\n \n ) : (\n \n )}\n \n ) : (\n <>\n );\n};\n\nexport default BrowserLogo;\n","import {\n useGetOpportunitiesByVisitorIdQuery,\n useGetRevenueByVisitorIdQuery,\n useGetTotalRevenueByVisitorIdQuery,\n useGetVisitorDetailQuery\n} from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport { FieldCell } from 'common/components/table/cell-formatters/fieldCell';\nimport { filterOutNonViewableFields } from 'common/components/table/cell-formatters/fieldHelpers';\nimport AccordionItem from 'common/components/accordion/accordion';\nimport { closeSideBarAccordion } from 'features/sidebar/sidebarTogglingSlice';\nimport { FC, useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport {\n GeneralHeader,\n VisitorSessionHeader\n} from 'features/visitors/components/accordionHeaderComponents';\nimport { formatIsoDateStringToDisplayTimeOnly } from 'common/utils/LEGACY_timeHelpers';\nimport Loading from 'common/components/loading/loading';\nimport {\n VisitorNumberTile,\n VisitorTileData\n} from 'features/visitors/components/visitorNumberTile';\nimport Tile from 'features/tiles/tile';\nimport fullNameClosestMatchOnKeyName from 'common/utils/fullNameClosestMatchOnKeyName';\nimport emailClosestMatchOnKeyName from 'common/utils/emailClosestMatchOnKeyName';\nimport getProfileImage from 'common/utils/getProfileImage';\nimport phoneClosestMatchOnKeyName from 'common/utils/phoneClosestMatchOnKeyName';\nimport jobTitleClosestMatchOnKeyName from 'common/utils/jobTitleClosestMatchOnKeyName';\nimport AccordionGroup from 'features/visitors/components/accordionGroupComponent';\nimport { useDebounce, useMeasure } from 'react-use';\nimport { GoogleStaticMap } from 'features/maps/google-static-maps/googleStaticMap';\nimport {\n focusLocation,\n selectMapStateByComponentId\n} from 'features/maps/google-static-maps/googleStaticMapSlice';\nimport OperatingSystemLogo from 'common/components/icons/operatingSystemLogo';\nimport BrowserLogo from 'common/components/icons/browserLogo';\nimport Blur from 'features/blur/blur';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport MarketingSourceLogo from 'common/components/icons/marketingSourceLogo';\nimport { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\nimport { AccordionTheme } from 'common/components/accordion/accordion-theme';\n\nconst componentId = 'visitor-component';\nconst sensitiveCallKeys = ['CallerNumber', 'CalledNumber'];\n\ninterface VisitorHeaderComponentContent {\n dateTime: string;\n itemCount: number;\n header: JSX.Element;\n tags: JSX.Element;\n id: string;\n action: string;\n touchpointTypes: string[];\n additionalInformation: JSX.Element[];\n theme: AccordionTheme;\n}\n\nconst fieldKeysWhichDoNotBlur = ['source'];\nfunction shouldBlurField(key: string): boolean {\n return !fieldKeysWhichDoNotBlur.includes(key);\n}\n\nconst Visitor: FC = () => {\n const { visitorId } = useParams();\n const dispatch = useDispatch();\n const isAccordionClosed = useSelector(\n (state: RootState) => state.sidebar.indexOfOpenAccordion\n );\n const { siteId, currency } = useSelector(\n (state: RootState) => state.selectedSite\n );\n\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const {\n data: visitorDetailData,\n isLoading: isVisitorDetailLoading,\n isSuccess: isVisitorDetailFinished\n } = useGetVisitorDetailQuery({\n siteId,\n visitorId,\n currencyCode: selectedCurrencyCode\n });\n\n const { data: visitorRevenueData, isLoading: isVisitorRevenueLoading } =\n useGetRevenueByVisitorIdQuery({\n siteId,\n visitorId,\n currency: selectedCurrencyCode\n });\n\n const {\n data: visitorOpportunitiesData,\n isLoading: isVisitorOpportunitiesLoading\n } = useGetOpportunitiesByVisitorIdQuery({\n siteId,\n visitorId,\n currency: selectedCurrencyCode\n });\n\n const { data: visitorDetailRevenueData, isLoading: isRevenueLoading } =\n useGetTotalRevenueByVisitorIdQuery({\n siteId,\n visitorId,\n currencyCode: selectedCurrencyCode\n });\n\n const {\n sessions,\n profileDetails,\n webData,\n inboundCallData,\n urlParameters,\n webCookies\n } = useMemo(() => {\n const web = visitorDetailData?.conversionDetails.filter(\n (conversionDetail) => conversionDetail.conversionType === 'Web'\n );\n const inboundCall = visitorDetailData?.conversionDetails.filter(\n (conversionDetail) => conversionDetail.conversionType === 'InboundCall'\n );\n const touchpointSessions = visitorDetailData?.sessions.map((session) => {\n return {\n ...session,\n dateTime: session.startDateTime,\n itemCount: session.webPageViews.length,\n additionalInformation: session.webPageViews.map((pageView, index) => {\n return (\n \n
    \n {formatIsoDateStringToDisplayTimeOnly(pageView.captureDateTime)}\n
    \n
    \n \n \n {pageView.localPath}\n \n \n {filterOutNonViewableFields(\n Object.entries(pageView.payloads)\n ).map(([_, { key, value }], index) => {\n if (shouldBlurField(key)) {\n return (\n \n \n \n );\n }\n return (\n \n );\n })}\n {filterOutNonViewableFields(\n Object.entries(pageView.queryStringParams)\n ).map(([_, { key, value }], index) => {\n return (\n \n \n \n );\n })}\n {pageView.relatedCalls.map((item, index) => {\n return (\n \n \n \n );\n })}\n
    \n \n );\n }),\n header: (\n <>\n \n
    \n {session.marketingSource}\n {session.referrerUrl ? (\n \n {session.referrerUrl}\n \n ) : (\n <>\n )}\n {session.offlineSource ? (\n \n {session.offlineSource}\n \n ) : (\n <>\n )}\n
    \n \n ),\n tags: (\n <>\n \n {session.touchpointTypes.includes('InboundCall') &&\n session.action === 'convert'\n ? 'Call'\n : null}\n \n \n {session.touchpointTypes.includes('Web') &&\n session.action === 'convert'\n ? 'Form'\n : null}\n \n \n ),\n theme: AccordionTheme.CONVERSIONS\n } as VisitorHeaderComponentContent;\n });\n\n const revenueSessions = visitorRevenueData?.map((session) => {\n return {\n ...session,\n dateTime: session.revenueClosedDateTimeIso,\n itemCount: 0,\n additionalInformation: [\n \n
    \n {formatIsoDateStringToDisplayTimeOnly(\n session.revenueClosedDateTimeIso\n )}\n
    \n
    \n {session.labels.map((item, index) => {\n return (\n \n \n \n );\n })}\n {session.emailAddress && (\n \n \n \n )}\n {session.phoneNumber && (\n \n \n \n )}\n {session.raid && (\n \n \n \n )}\n {session.payloadValue && (\n \n \n \n )}\n
    \n \n ],\n header: (\n <>\n
    \n \n <>\n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(session.value)}\n \n \n
    \n \n ),\n tags: (\n \n Revenue\n \n ),\n id: session.revenueId,\n touchpointTypes: [],\n action: 'track',\n theme: AccordionTheme.REVENUE\n } as VisitorHeaderComponentContent;\n });\n\n const opportunitySessions = visitorOpportunitiesData?.map((session) => {\n return {\n ...session,\n dateTime: session.opportunityDateTimeIso,\n itemCount: 0,\n additionalInformation: [\n \n
    \n {formatIsoDateStringToDisplayTimeOnly(\n session.opportunityDateTimeIso\n )}\n
    \n
    \n {session.labels.map((item, index) => {\n return (\n \n \n \n );\n })}\n {session.emailAddress && (\n \n \n \n )}\n {session.phoneNumber && (\n \n \n \n )}\n {session.raid && (\n \n \n \n )}\n {session.payloadValue && (\n \n \n \n )}\n
    \n \n ],\n header: (\n <>\n
    \n \n <>\n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(session.value)}\n \n \n
    \n
    {session.pipelineStage}
    \n \n ),\n tags: (\n \n Opportunity\n \n ),\n id: session.opportunityId,\n touchpointTypes: [],\n action: 'track',\n theme: AccordionTheme.OPPORTUNITY\n } as VisitorHeaderComponentContent;\n });\n\n return {\n ...visitorDetailData,\n webData:\n web\n ?.slice()\n .sort(\n (a, b) =>\n new Date(b.captureDateTime).valueOf() -\n new Date(a.captureDateTime).valueOf()\n ) ?? [],\n inboundCallData: inboundCall ?? [],\n sessions:\n touchpointSessions\n ?.concat(revenueSessions ?? [])\n ?.concat(opportunitySessions ?? [])\n ?.slice()\n .sort(\n (a, b) =>\n new Date(b.dateTime).valueOf() - new Date(a.dateTime).valueOf()\n ) ?? []\n };\n }, [\n visitorDetailData,\n visitorRevenueData,\n visitorOpportunitiesData,\n selectedCurrencyCode\n ]);\n\n const pageViews = sessions\n .flatMap((session) => session.itemCount)\n .reduce((all, currentNumber) => all + currentNumber, 0);\n\n const totalSessions = sessions.length;\n\n const latestConversionTouchpointTypes =\n sessions\n .find((x) => x.action === 'convert')\n ?.touchpointTypes.map(translateTouchpointType)\n .join(', ') ?? '';\n\n function translateTouchpointType(touchpointType: string): string {\n switch (touchpointType) {\n case 'Web':\n return 'Form';\n case 'InboundCall':\n return 'Call';\n default:\n return touchpointType;\n }\n }\n\n const [mapRef, { width, height }] = useMeasure();\n\n const [mapWidth, setMapWidth] = useState(width);\n const [mapHeight, setMapHeight] = useState(height);\n\n const { currentFocusLocation, isInGlobalFocusMode } = useSelector(\n (state: RootState) => selectMapStateByComponentId(state, componentId)\n );\n\n useDebounce(\n () => {\n const adjustedWidth = width < 640 ? width : 640;\n const adjustedHeight = height < 640 ? height : 640;\n\n setMapWidth(Math.round(adjustedWidth));\n setMapHeight(Math.round(adjustedHeight));\n },\n 500,\n [width, height]\n );\n\n const useMountEffect = () =>\n useEffect(() => {\n if (isAccordionClosed !== -1) {\n dispatch(closeSideBarAccordion());\n }\n }, []);\n\n useMountEffect();\n\n const getDataForTile = (\n tileTitle: string,\n count: number | string,\n metric: string | number\n ): VisitorTileData => {\n return {\n label: tileTitle,\n count,\n metric\n };\n };\n\n return (\n <>\n

    \n Visitor Journey\n

    \n {isVisitorDetailLoading ? (\n \n ) : (\n <>\n
    \n {/* page layout - grids */}\n
    \n {/* container for face card and tiles and session */}\n
    \n
    \n
    \n {isVisitorDetailFinished &&\n visitorDetailData?.locationDetails[0] ? (\n visitorDetailData?.locationDetails[0]?.latitude &&\n visitorDetailData?.locationDetails[0]?.longitude &&\n isVisitorDetailFinished &&\n mapWidth &&\n mapHeight ? (\n <>\n \n \n ) : (\n \n )\n ) : (\n

    \n )}\n
    \n
    \n
    \n
    \n \n

    \n {fullNameClosestMatchOnKeyName(webData)}\n

    \n

    \n {jobTitleClosestMatchOnKeyName(webData)}\n

    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n

    \n \n \n {emailClosestMatchOnKeyName(webData)}\n \n

    \n {visitorDetailData?.locationDetails.map(\n (locationDetail, index) => {\n const location = `${locationDetail.city}, ${locationDetail.regionName}, ${locationDetail.country}`;\n return (\n \n dispatch(\n focusLocation({\n componentId,\n focusLocation: location\n })\n )\n }\n key={index}\n className={`flex items-center text-xs mb-2 block hover:underline${\n !isInGlobalFocusMode &&\n visitorDetailData?.locationDetails.length > 1 &&\n currentFocusLocation === location\n ? ' underline'\n : ''\n }`}\n >\n \n \n \n {`${locationDetail.city}, ${locationDetail.country}`}\n \n \n \n );\n }\n )}\n\n

    \n \n \n \n {phoneClosestMatchOnKeyName(webData) ??\n phoneClosestMatchOnKeyName(inboundCallData) ??\n 'Unknown Phone Number'}\n \n \n

    \n
    \n
    \n
    \n
    \n {/* Foreach tile */}\n \n {!isRevenueLoading && visitorDetailRevenueData != null ? (\n \n ) : (\n \n )}\n \n \n \n \n \n \n \n \n \n \n
    \n
    \n\n
    \n {/* sessions area */}\n
    \n {!isVisitorRevenueLoading &&\n visitorRevenueData != null &&\n !isVisitorOpportunitiesLoading &&\n visitorOpportunitiesData != null ? (\n <>\n ) : (\n
    \n \n
    \n )}\n {visitorDetailData && !isVisitorDetailLoading ? (\n session.id)}\n >\n {sessions?.map((session) => {\n return (\n \n
    \n {session.additionalInformation}\n
    \n \n );\n })}\n \n ) : null}\n
    \n
    \n
    \n
    \n
    \n {profileDetails && profileDetails.length > 0 ? (\n \n
    \n {profileDetails?.map((profileDetail, index) => {\n return (\n \n
    \n {profileDetail.key}\n
    \n
    \n {profileDetail.key === 'operating system' ? (\n \n ) : (\n <>\n )}\n {profileDetail.key === 'browser' ? (\n \n ) : (\n <>\n )}\n \n {profileDetail.value}\n \n
    \n
    \n );\n })}\n
    \n \n ) : null}\n {webData && webData.length > 0 ? (\n \n {webData?.map((conversionData, index) => {\n return (\n \n
    \n {conversionData.key}\n
    \n
    \n \n {conversionData.value}\n \n
    \n
    \n );\n })}\n \n ) : null}\n {urlParameters && urlParameters.length > 0 ? (\n \n
    \n {urlParameters?.map((param, index) => {\n return (\n \n
    \n {param.key}\n
    \n
    \n \n {param.value}\n \n
    \n
    \n );\n })}\n
    \n \n ) : null}\n {inboundCallData && inboundCallData.length > 0 ? (\n \n {inboundCallData?.map((conversionData, index) => {\n return (\n \n
    \n {conversionData.key}\n
    \n
    \n {sensitiveCallKeys.includes(conversionData.key) ? (\n \n {conversionData.value}\n \n ) : (\n conversionData.value\n )}\n
    \n \n );\n })}\n \n ) : null}\n\n {webCookies && webCookies.length > 0 ? (\n \n {webCookies?.map((cookie, index) => {\n return (\n \n
    \n {cookie.cookieName}\n
    \n
    \n {cookie.cookieValue}\n
    \n \n );\n })}\n \n ) : null}\n \n \n \n \n )}\n \n );\n};\n\nexport default Visitor;\n","import { GetOpportunitiesResponse } from '../types/get-opportunities-response';\n\nexport const createLabelsCell = (\n row: GetOpportunitiesResponse\n): JSX.Element => (\n <>\n
    \n
    {row.labels.join(' ')}
    \n
    \n {row.callLabel ? (\n <>\n
    \n Static:\n {row.callLabel}\n
    \n \n ) : (\n <>\n )}\n \n);\n","import { createColumnHelper } from '@tanstack/react-table';\nimport { filterOutStandardQueryFields } from 'common/components/table/cell-formatters/fieldHelpers';\nimport { PayloadFieldsCellFormatter } from 'common/components/table/cell-formatters/payloadFieldCellFormatter';\nimport { formatIsoDateTimeStringToDisplayDate } from 'common/utils/LEGACY_timeHelpers';\nimport { NavLink } from 'react-router-dom';\nimport { PaginationTableRowSelectionCheckbox } from 'features/pagination/paginatedTableRowSelectionCheckbox';\nimport { PaginationTableSelectAllRowsCheckbox } from 'features/pagination/paginatedTableSelectAllRowsCheckbox';\nimport { BaseSelectedRow } from 'features/row-selection/rowSelectionSlice';\nimport { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\nimport { GetOpportunitiesResponse } from '../types/get-opportunities-response';\nimport MapFieldRenderer from 'common/components/table/mapFieldRenderer';\nimport { createLabelsCell } from './opportunity-table-helpers';\nimport { convertArrayToObject } from 'common/utils/array-helpers';\n\nconst columnHelper = createColumnHelper();\n\nexport const opportunitiesSimpleColumnDefs = (\n componentId: string,\n currencyCode: string\n) => [\n columnHelper.accessor((row) => row.id, {\n id: 'select',\n enableSorting: false,\n header: (info) => {\n const tableRows = info.table\n .getRowModel()\n .rows.map((row) => ({\n rowId: row.getValue('select'),\n rowData: row.getValue('opportunityDateTime')\n }));\n\n return (\n \n );\n },\n enableColumnFilter: false,\n cell: ({ row }) => (\n \n ),\n size: 50\n }),\n columnHelper.accessor((row) => row.opportunityDateTime, {\n id: 'opportunityDateTime',\n header: () => Date/Time,\n enableColumnFilter: false,\n cell: (info) => (\n \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n \n )\n }),\n columnHelper.accessor((row) => row.value, {\n id: 'opportunityValue',\n header: () => Value,\n enableColumnFilter: false,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }).format(info.getValue())}\n \n )\n }),\n columnHelper.accessor((row) => row.visitorIdentifierOptions, {\n id: 'visitorIdentifiersOptions',\n header: () => Customer,\n enableColumnFilter: false,\n enableSorting: false,\n size: 250,\n cell: (info) =>\n MapFieldRenderer({\n fieldsMap: info.getValue(),\n contextKey: 'visitoridentifieroptions'\n })\n }),\n columnHelper.accessor((row) => row.pipelineStage, {\n id: 'pipelineStage',\n header: () => Stage,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor(\n (row) => {\n return {\n header: row.firstClickSource,\n subheader:\n row.firstClickSource === 'Referral'\n ? row.firstClick?.referrerHost\n : undefined,\n fields: row.firstClickQueryStrings\n };\n },\n {\n id: 'firstClick',\n header: () => First Click,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => (\n \n filterOutStandardQueryFields(fields)\n }\n fieldObject={info.getValue()}\n icon=\"\"\n />\n )\n }\n ),\n columnHelper.accessor(\n (row) => {\n return {\n header: row.lastClickSource,\n subheader:\n row.lastClickSource === 'Referral'\n ? row.lastClick?.canonicalUrl\n : undefined,\n fields: row.lastClickQueryStrings\n };\n },\n {\n id: 'lastClick',\n header: () => Last Click,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => (\n \n filterOutStandardQueryFields(fields)\n }\n fieldObject={info.getValue()}\n icon=\"\"\n />\n )\n }\n ),\n columnHelper.accessor((row) => row.labels, {\n id: 'labels',\n header: () => Labels,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => createLabelsCell(info.row.original)\n }),\n columnHelper.accessor((row) => row.reference, {\n id: 'reference',\n header: () => Reference,\n enableColumnFilter: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.additionalDataProperties, {\n id: 'additionalDataProperties',\n header: () => Additional Data,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n const additionalDataProperties = info.getValue() as {\n name: string;\n value: string;\n }[];\n\n const fieldsMap = convertArrayToObject(additionalDataProperties);\n\n return MapFieldRenderer({\n fieldsMap,\n contextKey: 'additionalDataProperties'\n });\n }\n }),\n columnHelper.accessor((row) => row.visitorId, {\n id: 'visitor',\n header: () => Visitor,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n if (!info.getValue()) {\n return null;\n } else {\n return (\n \n View\n \n );\n }\n }\n })\n];\n\nexport default opportunitiesSimpleColumnDefs;\n","import { RootState } from 'app/store';\nimport ActionsButton from 'common/components/buttons/actionsButton';\nimport SearchBar from 'features/search-bar/searchBar';\nimport {\n applySearchToTableAndGraph,\n clearSearch,\n getSearchTermsById\n} from 'features/search-bar/searchBarSlice';\nimport { FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n BaseSelectedRow,\n selectRowsByComponentId\n} from 'features/row-selection/rowSelectionSlice';\nimport { closeModal, confirmModal, openModal } from 'features/modal/modalSlice';\nimport { ModalConfirmTypes } from 'features/modal/modal';\nimport ExportButton from 'common/components/buttons/exportButton';\nimport { useGetOpportunitiesExportMutation } from 'app/apis/queryApi';\nimport { selectPaginationOptions } from 'features/pagination/paginationOptionsSlice';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { ViewType } from 'features/data-view-selection/view-type';\nimport { toggleSelection } from 'features/data-view-selection/dataViewSelectionSlice';\nimport { OpportunityExportRequest } from './types/opportunities-export-request';\nimport { selectDateRangeLocalIso } from 'features/date-range-selection/dateRangeSlice';\nimport {\n DeleteOpportunityRequest,\n useDeleteMultipleOpportunitiesMutation\n} from 'app/apis/commandApi';\nimport { addListener } from '@reduxjs/toolkit';\n\nconst OpportunitiesSearchBar: FC<{\n componentId: string;\n currentViewType: ViewType;\n}> = ({\n componentId,\n currentViewType\n}: {\n componentId: string;\n currentViewType: ViewType;\n}) => {\n const dispatch = useDispatch();\n\n const { tableValueToSearch } = useSelector((state: RootState) =>\n getSearchTermsById(state, componentId)\n );\n\n const paginationOptions = useSelector((state: RootState) =>\n selectPaginationOptions(state, componentId)\n );\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { startDate, endDate } = useSelector(selectDateRangeLocalIso);\n\n const selectedCurrencyCode = useSelector(selectCurrencyCode);\n\n const request: OpportunityExportRequest = {\n siteId,\n startDate,\n endDate,\n currencyCode: selectedCurrencyCode,\n searchTerm: paginationOptions?.searchTerm ?? ''\n };\n\n const [triggerDownload, { isLoading: isDownloadingCsv }] =\n useGetOpportunitiesExportMutation();\n\n const toggleViewType = (viewType: ViewType) => {\n dispatch(\n toggleSelection({\n newSelection: viewType,\n componentId\n })\n );\n };\n\n const rows = useSelector((state: RootState) =>\n selectRowsByComponentId(state, componentId)\n );\n\n const [deleteMultipleOpportunities] =\n useDeleteMultipleOpportunitiesMutation();\n\n const onDeleteMultipleOpportunities = async (rowsToDelete: any) => {\n const opportunityRequests = rowsToDelete.map((row: BaseSelectedRow) => {\n const request: DeleteOpportunityRequest = {\n opportunityId: row.rowId,\n opportunityDateTime: row.rowData\n };\n\n return request;\n });\n\n try {\n await deleteMultipleOpportunities({\n opportunities: opportunityRequests,\n siteId,\n componentId\n }).unwrap();\n } catch (error) {\n console.error('Failed to delete opportunities:', error);\n }\n };\n\n return (\n <>\n
    \n {\n dispatch(\n applySearchToTableAndGraph({\n id: componentId,\n valueToSearch: searchTerm\n })\n );\n }}\n onClearFunction={() => {\n dispatch(\n clearSearch({\n id: componentId\n })\n );\n }}\n />\n
    \n \n isDownloadingCsv ? null : triggerDownload(request)\n }\n isLoading={isDownloadingCsv}\n />\n toggleViewType(ViewType.Simple)}\n >\n Simple\n \n\n toggleViewType(ViewType.Detailed)}\n >\n Detailed\n \n
    \n {\n dispatch(\n addListener({\n actionCreator: confirmModal,\n effect: async (action, listenerApi) => {\n listenerApi.cancelActiveListeners();\n\n // need to get the rows from the state here. So we can get the rows while the Listener Api is still active\n const state = listenerApi.getState() as RootState;\n\n const rowsToDelete = selectRowsByComponentId(\n state,\n componentId\n );\n\n await onDeleteMultipleOpportunities(rowsToDelete);\n\n listenerApi.dispatch(closeModal());\n\n listenerApi.unsubscribe();\n }\n })\n );\n\n dispatch(\n openModal({\n modalType: 'deleteOpportunities',\n modalProps: {\n title: 'Delete Opportunities',\n content: `Are you sure you want to delete these records? Right now you are deleting ${rows.length} rows. This action cannot be undone.`,\n buttonType: 'Delete',\n componentId\n },\n modalConfirmType:\n ModalConfirmTypes.ON_DELETE_MULTIPLE_OPPORTUNITIES\n })\n );\n },\n isLoading: false\n }\n ]}\n />\n
    \n
    \n
    \n \n );\n};\n\nexport default OpportunitiesSearchBar;\n","import { ColumnDef, createColumnHelper } from '@tanstack/react-table';\nimport {\n formatIsoDateTimeStringToDisplayDate,\n secondsToHms\n} from 'common/utils/LEGACY_timeHelpers';\nimport Blur from 'features/blur/blur';\nimport { NavLink } from 'react-router-dom';\nimport { PaginationTableRowSelectionCheckbox } from 'features/pagination/paginatedTableRowSelectionCheckbox';\nimport { PaginationTableSelectAllRowsCheckbox } from 'features/pagination/paginatedTableSelectAllRowsCheckbox';\nimport { BaseSelectedRow } from 'features/row-selection/rowSelectionSlice';\nimport { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\nimport { StickyOptions } from 'common/components/table/tableTypes';\nimport MarketingSourceLogo from 'common/components/icons/marketingSourceLogo';\nimport FieldsRenderer from 'features/conversions/forms/views/shared/FieldsRenderer';\nimport { FilterNotApplicable } from 'common/components/table/cell-formatters/filterNotApplicatable';\nimport MapFieldRenderer from 'common/components/table/mapFieldRenderer';\nimport { GetOpportunitiesResponse } from '../types/get-opportunities-response';\nimport { getConversionTypeFriendlyName } from 'common/helpers/conversion-type.helper';\nimport { createLabelsCell } from './opportunity-table-helpers';\nimport { convertArrayToObject } from 'common/utils/array-helpers';\n\nconst detailedColumnHelper = createColumnHelper();\n\nexport const opportunitiesDetailedColumnDefs = (\n componentId: string,\n data: GetOpportunitiesResponse[],\n currencyCode: string,\n showOpportunityId: boolean\n) => {\n const expandedFieldsColumnDefs = [\n detailedColumnHelper.accessor((row) => row.expandedFields?.type, {\n id: 'expandedFields.type',\n header: () => Type,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.expandedFields?.source, {\n id: 'expandedFields.source',\n header: () => Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n })\n ];\n\n if (data?.some((response) => response.expandedFields?.customDataFields)) {\n expandedFieldsColumnDefs.push(\n ...data.reduce[]>(\n (acc, nextResponse, index) => {\n const customDataFields =\n nextResponse.expandedFields?.customDataFields;\n Object.entries(customDataFields ?? {}).forEach(([, value]) => {\n const { key } = value;\n\n if (acc.some((columnDef) => columnDef.id?.includes(key))) {\n return acc;\n }\n\n const newColDef = detailedColumnHelper.accessor(\n (row) => {\n const [, foundRow] =\n Object.entries(\n row.expandedFields?.customDataFields ?? {}\n ).find((field) => field[1].key === key) ?? [];\n return foundRow?.value;\n },\n {\n id: key,\n header: () => {key},\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => (\n {info.getValue()}\n )\n }\n );\n\n acc.push(newColDef);\n });\n return acc;\n },\n []\n )\n );\n }\n\n const idColumn = showOpportunityId\n ? [\n detailedColumnHelper.accessor((row) => row.id, {\n id: 'id',\n header: () => Opportunity ID,\n enableColumnFilter: false,\n cell: (info) => {info.getValue()}\n }) as ColumnDef\n ]\n : [];\n\n return [\n ...idColumn,\n detailedColumnHelper.accessor((row) => row.id, {\n id: 'select',\n enableSorting: false,\n enableColumnFilter: false,\n header: (info) => {\n const tableRows = info.table\n .getRowModel()\n .rows.map((row) => ({\n rowId: row.getValue('select'),\n rowData: row.getValue('opportunityDateTime')\n }));\n\n return (\n \n );\n },\n cell: ({ row }) => (\n \n ),\n size: 50\n }),\n detailedColumnHelper.accessor((row) => row.opportunityDateTime, {\n id: 'opportunityDateTime',\n header: () => Date/Time,\n enableColumnFilter: false,\n size: 120,\n cell: (info) => (\n \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n \n )\n }),\n detailedColumnHelper.accessor((row) => row.value, {\n id: 'opportunityValue',\n header: () => Value,\n enableColumnFilter: false,\n size: 100,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(info.getValue() ? info.getValue() : 0)}\n \n )\n }),\n detailedColumnHelper.accessor((row) => row.visitorIdentifierOptions, {\n id: 'visitorIdentifiersOptions',\n header: () => Customer,\n enableColumnFilter: false,\n enableSorting: false,\n size: 250,\n cell: (info) =>\n MapFieldRenderer({\n fieldsMap: info.getValue(),\n contextKey: 'payloadFields'\n })\n }),\n detailedColumnHelper.accessor((row) => row.reference, {\n id: 'reference',\n header: () => Reference,\n enableColumnFilter: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.pipelineStage, {\n id: 'pipelineStage',\n header: () => Stage,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.labels, {\n id: 'labels',\n header: () => Labels,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => createLabelsCell(info.row.original)\n }),\n detailedColumnHelper.accessor((row) => row.additionalDataProperties, {\n id: 'additionalDataProperties',\n header: () => Additional Data,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n const additionalDataProperties = info.getValue() as {\n name: string;\n value: string;\n }[];\n\n const fieldsMap = convertArrayToObject(additionalDataProperties);\n\n return MapFieldRenderer({\n fieldsMap,\n contextKey: 'additionalDataProperties'\n });\n }\n }),\n detailedColumnHelper.accessor((row) => row.conversionType, {\n id: 'conversionType',\n header: () => Conversion Type,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => getConversionTypeFriendlyName(info.getValue())\n }),\n detailedColumnHelper.accessor((row) => row.captureDateTime, {\n id: 'captureDateTime',\n header: () => Conversion Date,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => (\n \n {info.getValue() ? (\n formatIsoDateTimeStringToDisplayDate(info.getValue() as string)\n ) : (\n <>\n )}\n \n )\n }),\n detailedColumnHelper.accessor((row) => row.sources, {\n id: 'sources',\n header: () => Sources,\n enableColumnFilter: false,\n enableSorting: false,\n size: 400,\n cell: (info) =>\n info.getValue().map((value, index) => (\n
    \n \n {value}\n
    \n ))\n }),\n detailedColumnHelper.accessor((row) => row.conversionPayloadFields, {\n id: 'payloadFields',\n header: () => 'Fields',\n enableColumnFilter: false,\n enableSorting: false,\n size: 500,\n cell: (info) =>\n FieldsRenderer({\n fieldsMap: info.getValue(),\n contextKey: 'payloadFields'\n })\n }),\n detailedColumnHelper.accessor((row) => row.webPageViewCount, {\n id: 'webPageViewCount',\n header: () => Page Views,\n enableColumnFilter: false,\n size: 100,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.sessions, {\n id: 'sessions',\n header: () => Sessions,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor(\n (row) => row.averageWebTouchpointDurationInSeconds,\n {\n id: 'averageWebTouchpointDurationInSeconds',\n header: () => Duration,\n enableColumnFilter: false,\n size: 220,\n enableSorting: false,\n cell: (info) =>\n info.getValue() ? secondsToHms(info.getValue()!) : <>\n }\n ),\n detailedColumnHelper.group({\n header: 'First Click',\n columns: [\n detailedColumnHelper.accessor((row) => row.firstClick?.source, {\n id: 'firstClick.source',\n header: () => Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.group, {\n id: 'firstClick.group',\n header: () => Group,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => FilterNotApplicable(info.getValue())\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.keywords, {\n id: 'firstClick.keywords',\n header: () => Keywords,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.landingPage, {\n id: 'firstClick.landingPage',\n header: () => Landing Page,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.referrerHost, {\n id: 'firstClick.referrerHost',\n header: () => Referrer Host,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.referrerPath, {\n id: 'firstClick.referrerPath',\n header: () => Referrer Path,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.canonicalUrl, {\n id: 'firstClick.canonicalUrl',\n header: () => Canonical Url,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmCampaign, {\n id: 'firstClick.utmCampaign',\n header: () => Utm Campaign,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmContent, {\n id: 'firstClick.utmContent',\n header: () => Utm Content,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmMedium, {\n id: 'firstClick.utmMedium',\n header: () => Utm Medium,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmSource, {\n id: 'firstClick.utmSource',\n header: () => Utm Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmTerm, {\n id: 'firstClick.utmTerm',\n header: () => Utm Term,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.utmKeyword, {\n id: 'firstClick.utmKeyword',\n header: () => Utm Keyword,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.device, {\n id: 'firstClick.device',\n header: () => Device,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.placement, {\n id: 'firstClick.placement',\n header: () => Placement,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.creative, {\n id: 'firstClick.creative',\n header: () => Creative,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.campaignId, {\n id: 'firstClick.campaignId',\n header: () => Campaign Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.adGroupId, {\n id: 'firstClick.adGroupId',\n header: () => Adgroup Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick?.gclid, {\n id: 'firstClick.gclid',\n header: () => Gclid,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n })\n ]\n }),\n detailedColumnHelper.group({\n header: 'Last Click',\n columns: [\n detailedColumnHelper.accessor((row) => row.lastClick?.source, {\n id: 'lastClick.source',\n header: () => Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.group, {\n id: 'lastClick.group',\n header: () => Group,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => FilterNotApplicable(info.getValue())\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.keywords, {\n id: 'lastClick.keywords',\n header: () => Keywords,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.landingPage, {\n id: 'lastClick.landingPage',\n header: () => Landing Page,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.referrerHost, {\n id: 'lastClick.referrerHost',\n header: () => Referrer Host,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.referrerPath, {\n id: 'lastClick.referrerPath',\n header: () => Referrer Path,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.canonicalUrl, {\n id: 'lastClick.canonicalUrl',\n header: () => Canonical Url,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmCampaign, {\n id: 'lastClick.utmCampaign',\n header: () => Utm Campaign,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmContent, {\n id: 'lastClick.utmContent',\n header: () => Utm Content,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmMedium, {\n id: 'lastClick.utmMedium',\n header: () => Utm Medium,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmSource, {\n id: 'lastClick.utmSource',\n header: () => Utm Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmTerm, {\n id: 'lastClick.utmTerm',\n header: () => Utm Term,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.utmKeyword, {\n id: 'lastClick.utmKeyword',\n header: () => Utm Keyword,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.device, {\n id: 'lastClick.device',\n header: () => Device,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.placement, {\n id: 'lastClick.placement',\n header: () => Placement,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.creative, {\n id: 'lastClick.creative',\n header: () => Creative,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.campaignId, {\n id: 'lastClick.campaignId',\n header: () => Campaign Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.adGroupId, {\n id: 'lastClick.adGroupId',\n header: () => Adgroup Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick?.gclid, {\n id: 'lastClick.gclid',\n header: () => Gclid,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n })\n ]\n }),\n detailedColumnHelper.group({\n header: 'Device And Location',\n columns: [\n detailedColumnHelper.accessor(\n (row) => row.deviceAndLocation?.platform,\n {\n id: 'deviceAndLocation.platform',\n header: () => Platform,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }\n ),\n detailedColumnHelper.accessor((row) => row.deviceAndLocation?.browser, {\n id: 'deviceAndLocation.browser',\n header: () => Browser,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor(\n (row) => row.deviceAndLocation?.operatingSystem,\n {\n id: 'deviceAndLocation.operatingSystem',\n header: () => OS,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }\n )\n ]\n }),\n detailedColumnHelper.group({\n header: 'Identity',\n columns: [\n detailedColumnHelper.accessor((row) => row.identity?.email, {\n id: 'identity.email',\n header: () => Email,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n })\n ]\n }),\n detailedColumnHelper.group({\n header: 'Expanded Fields',\n columns: expandedFieldsColumnDefs\n }),\n detailedColumnHelper.accessor((row) => row.visitorId, {\n id: 'Visitor',\n header: () => Visitor,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n const visitorId = info.getValue();\n\n if (!visitorId) {\n return <>;\n }\n\n return (\n \n View\n \n );\n },\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n },\n enableResizing: false,\n size: 100\n })\n ];\n};\n\nexport default opportunitiesDetailedColumnDefs;\n","import { FC, useMemo } from 'react';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { PaginatedTable } from 'features/pagination/paginatedTable';\nimport { usePaginatedQuery } from 'features/pagination/hooks/usePaginatedQuery';\nimport {\n useGetPaginatedOpportunitiesQuery,\n usePrefetch\n} from 'app/apis/queryApi';\nimport { opportunitiesSimpleColumnDefs } from 'features/opportunities/table/opportunity-simple-column-defs';\nimport OpportunitiesSearchBar from 'features/opportunities/opportunitiesSearchBar';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { useSelector } from 'react-redux';\nimport { useTypedSelector } from 'common/hooks/store';\nimport { selectViewSelectionByComponentId } from 'features/data-view-selection/dataViewSelectionSlice';\nimport { RootState } from 'app/store';\nimport { ViewType } from 'features/data-view-selection/view-type';\nimport opportunitiesDetailedColumnDefs from 'features/opportunities/table/opportunity-detailed-column-defs';\nimport { GetOpportunitiesRequest } from 'features/opportunities/types/get-opportunities-request';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport { ToggleType } from 'features/internal/internal.models';\nimport { selectDoIHavePendingDeletesForComponent } from 'features/row-deletion/rowPendingDeletionSlice';\nimport Alert from 'common/components/alerts/alert';\nimport { GetOpportunitiesResponse } from 'features/opportunities/types/get-opportunities-response';\n\nconst Opportunities: FC = () => {\n const opportunitiesComponentId = 'opportunities-component';\n\n const opportunityIdToggle = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayOpportunityId)\n );\n\n const hasPendingDeletes = useSelector((state: RootState) =>\n selectDoIHavePendingDeletesForComponent(state, opportunitiesComponentId)\n );\n\n const currencyCode = useSelector(selectCurrencyCode);\n const siteId = useTypedSelector((state) => state.selectedSite.siteId);\n\n const { selection: currentViewType } = useSelector((state: RootState) =>\n selectViewSelectionByComponentId(state, opportunitiesComponentId)\n );\n\n const opportunitiesViewRequest: GetOpportunitiesRequest = {\n siteId,\n currencyCode\n };\n\n const prefetchPage = usePrefetch('getPaginatedOpportunities');\n const { data, isLoading, isFetching } = usePaginatedQuery<\n GetOpportunitiesRequest,\n GetOpportunitiesResponse\n >(\n useGetPaginatedOpportunitiesQuery,\n prefetchPage,\n opportunitiesComponentId,\n opportunitiesViewRequest,\n {\n initialColumnName: 'opportunitydatetime',\n initialOrderDirection: 'ASC'\n }\n );\n\n const columnDefs = useMemo(() => {\n return currentViewType === ViewType.Simple\n ? opportunitiesSimpleColumnDefs(opportunitiesComponentId, currencyCode)\n : opportunitiesDetailedColumnDefs(\n opportunitiesComponentId,\n data?.data ?? [],\n currencyCode,\n opportunityIdToggle?.enabled ?? false\n );\n }, [currencyCode, currentViewType, data, opportunityIdToggle]);\n\n const getRowData = (data: any, opportunityId: string) =>\n data?.find((d: any) => d.opportunityId === opportunityId);\n\n if (!isLoading && !isFetching && !data) {\n return <>;\n }\n\n return (\n \n <>\n \n {hasPendingDeletes && (\n \n )}\n \n {\n return row.opportunity ? row.opportunity.id : row.id;\n }}\n getRowData={getRowData}\n />\n \n \n \n );\n};\n\nexport default Opportunities;\n","import { useTypedSelector } from 'common/hooks/store';\nimport { useDispatch } from 'react-redux';\nimport { onHideToast } from './toast.slice';\nimport { ToastType } from './toast.types';\n\nexport const Toast = () => {\n const dispatch = useDispatch();\n const toastItems = useTypedSelector((state) => state.toast.toasts);\n\n const getCssClasses = (toastType: ToastType) => {\n switch (toastType) {\n case ToastType.Success:\n return [\n 'border-success-400',\n 'text-success-400',\n 'ra-icons-generic-check'\n ];\n case ToastType.Error:\n return [\n 'border-error-300',\n 'text-error-300',\n 'ra-icons-generic-warning'\n ];\n default:\n throw Error(\n `Unexpected ToastType: ${toastType} has not been implemented`\n );\n }\n };\n\n return (\n <>\n {toastItems.map((toast) => {\n const [borderColourClass, textColourClass, iconClass] = getCssClasses(\n toast.type\n );\n\n return (\n \n
    \n \n
    \n {toast.title}\n

    {toast.description}

    \n
    \n dispatch(onHideToast(toast.id))}\n className=\"ml-auto\"\n >\n \n \n
    \n \n );\n })}\n \n );\n};\n\nexport default Toast;\n","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, d MMMM yyyy',\n long: 'd MMMM yyyy',\n medium: 'd MMM yyyy',\n short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United Kingdom).\n * @language English\n * @iso-639-2 eng\n * @author Alex [@glintik]{@link https://github.com/glintik}\n */\n\nvar locale = {\n code: 'en-GB',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1\n /* Monday */\n ,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;","import enGB from 'date-fns/locale/en-GB';\nimport { Range, DateRange } from 'react-date-range';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n changeDateRange,\n getDateRangeAsObjects,\n DateRangeState,\n DateRangeValue\n} from 'features/date-range-selection/dateRangeSlice';\nimport { toUtc } from 'common/utils/date-helpers';\nimport { useMemo, useRef, useState } from 'react';\nimport { useClickAway, useWindowSize } from 'react-use';\nimport theme from 'tailwind.theme';\nimport { DateTime } from 'luxon';\n\nconst DateRangePicker = () => {\n const ref = useRef(null);\n\n const { width } = useWindowSize();\n\n const isMobile = useMemo(() => {\n return width < 768;\n }, [width]);\n\n const dispatch = useDispatch();\n const [openDateRange, setOpenDateRange] = useState(false);\n\n const { startDate, endDate, key } = useSelector(getDateRangeAsObjects);\n\n useClickAway(ref, () => {\n setOpenDateRange(false);\n });\n\n const handleClick = () => {\n setOpenDateRange((prevState: boolean) => !prevState);\n };\n\n const formatDates = (item: Range): DateRangeValue => {\n return {\n startDate: toUtc(item.startDate ?? new Date()),\n endDate: toUtc(item.endDate ?? new Date()),\n key\n };\n };\n\n const mapDateRangeToSerializable = (item: DateRangeValue): DateRangeState => {\n return {\n startDate: item.startDate.toISOString(),\n endDate: item.endDate.toISOString(),\n key: item.key\n };\n };\n\n const handleSelect = (item: Range) => {\n const payload = mapDateRangeToSerializable(formatDates(item));\n dispatch(changeDateRange(payload));\n };\n\n return (\n <>\n
    \n \n \n \n \n
    \n\n {openDateRange ? (\n \n
    \n {/* the current day styling is controlled in our main as a css class override - thanks date range library! */}\n handleSelect(item.selection)}\n showMonthArrow={true}\n weekdayDisplayFormat=\"EEEEE\"\n preventSnapRefocus={true}\n moveRangeOnFirstSelection={false}\n locale={enGB}\n />\n
    \n \n ) : null}\n \n \n );\n};\n\nexport default DateRangePicker;\n","import DateRangePicker from 'features/date-range-selection/dateRangePicker';\nimport { FC, Fragment } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nconst routesWithoutBreadcrumbBar = [\n '/marketing-mix-modelling',\n '/visitors',\n '/settings/webhooks',\n '/webhooks',\n '/settings/data-science/tasks',\n '/internal',\n '/settings/segmentation-config'\n];\n\nconst PageBreadcrumbBar: FC = () => {\n let routes: string[] = ['Dashboard'];\n const location = useLocation();\n const pathname = location?.pathname ?? '';\n\n routes = pathname.trimEnd().replace('/', '').replace('/$', '').split('/');\n\n if (pathname === '/') {\n routes = ['Dashboard'];\n }\n\n const shouldShowBreadcrumbBar = !routesWithoutBreadcrumbBar.some((route) =>\n pathname.startsWith(route)\n );\n\n const Breadcrumb: FC = (route: string): any => {\n const index = routes.findIndex(\n (currentIndex: string) => currentIndex === route\n );\n\n return (\n \n

    \n {getPageLabel(route)}\n

    \n {index !== routes.length - 1 && (\n \n )}\n
    \n );\n };\n\n return shouldShowBreadcrumbBar ? (\n <>\n
    \n
    \n {routes.map((route: string) => Breadcrumb(route))}\n
    \n
    \n \n
    \n
    \n \n ) : (\n <>\n );\n};\n\nfunction getPageLabel(route: string) {\n if (route.startsWith('utm-')) {\n const pageNameSuffixStartingIndex = route.indexOf('-') + 1;\n const pageNameSuffix = route.substring(pageNameSuffixStartingIndex);\n return `UTM ${pageNameSuffix}`;\n }\n\n if (route === 'os') {\n return 'OS';\n }\n\n return route.replaceAll('-', ' ');\n}\n\nexport default PageBreadcrumbBar;\n","import { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport { RootState } from './store';\nimport { useTypedSelector } from 'common/hooks/store';\nimport PageBreadcrumbBar from 'features/topbar/breadcrumb-bar/breadcrumbBar';\nimport { useSelector } from 'react-redux';\nimport { Outlet } from 'react-router-dom';\nimport { ToggleType } from 'features/internal/internal.models';\nimport { selectIsSidebarOpen } from 'features/sidebar/sidebarSlice';\n\nconst PageContent: React.FC = () => {\n const isNewSideBarEnabledDebugToggle = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayNewSideBar)\n );\n\n const isSidebarOpenLegacy = useTypedSelector(\n (state: RootState) => state.sidebar.isSidebarOpen\n );\n\n const isSidebarOpen = useSelector(selectIsSidebarOpen);\n return (\n <>\n \n
    \n \n
    \n \n
    \n
    \n \n \n );\n};\n\nexport default PageContent;\n","import { FC } from 'react';\n\nconst Slider: FC<{\n value: number;\n max: number;\n className?: string;\n onChange: (value: number) => void;\n}> = ({\n value,\n max,\n className,\n onChange\n}: {\n value: number;\n max: number;\n className?: string;\n onChange: (value: number) => void;\n}) => {\n const handleChange = (event: any) => {\n const value = +event.target.value;\n onChange(value);\n };\n\n return (\n <>\n \n \n );\n};\n\nexport default Slider;\n","import { MmmModelOutput } from '../mmmModelOutput';\nimport {\n AxisChartByNumberPrediction,\n DataPointSetByNumberOptimisation,\n DataPointSetByNumberPrediction,\n DataPointSetStyle\n} from 'features/charts/chart.models';\n\nexport interface AxisChartByNumberPredictionCalculation {\n chart: AxisChartByNumberPrediction;\n}\n\nexport interface DataPointSetByNumberOptimsationResult {\n dataPointSet: DataPointSetByNumberOptimisation;\n spend: number;\n sourceCategoryName: string;\n}\n\nexport const createDataPointSetByNumberPredictions = (\n mmmResponse: MmmModelOutput\n): DataPointSetByNumberPrediction[] => {\n const dataPointSets: DataPointSetByNumberPrediction[] =\n mmmResponse.forecasts.flatMap((forecast) =>\n forecast.returnValues.map((value, index) => {\n const isPredictive = index >= forecast.maximumRealSpend;\n\n const style = isPredictive\n ? DataPointSetStyle.DASHED\n : DataPointSetStyle.SOLID;\n\n const dataPointSetName = isPredictive\n ? `Predictive ${forecast.sourceCategoryDisplayName}`\n : forecast.sourceCategoryDisplayName;\n\n const parentDataPointSetName = isPredictive\n ? forecast.sourceCategoryDisplayName\n : '';\n\n const dataPoint: DataPointSetByNumberPrediction = {\n xValue: index * mmmResponse.dayMultiplier,\n yValue: value * mmmResponse.dayMultiplier,\n dataPointSetName,\n actualParentDataPointSetName: parentDataPointSetName,\n style\n };\n\n return dataPoint;\n })\n );\n\n return dataPointSets;\n};\n\nexport const createDataPointSetsByNumberOptimsation = (\n mmmResponse: MmmModelOutput\n): DataPointSetByNumberOptimisation[] => {\n const dataPointSets: DataPointSetByNumberOptimisation[] = [];\n\n for (const forecast of mmmResponse.forecasts) {\n for (\n let spendIterable = 0;\n spendIterable < forecast.maximumForecastSpend + 1;\n spendIterable++\n ) {\n const dataPointSet: DataPointSetByNumberOptimisation = {\n xValue: spendIterable * mmmResponse.dayMultiplier,\n yValue:\n forecast.returnValues[spendIterable] * mmmResponse.dayMultiplier,\n dataPointSetName: forecast.sourceCategoryDisplayName\n };\n\n dataPointSets.push(dataPointSet);\n }\n }\n\n return dataPointSets;\n};\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { MmmModelOutput } from '../mmmModelOutput';\nimport { DataPointSetByString } from 'features/charts/chart.models';\nimport { sum } from '../charts/mmm-chart-helpers';\n\nexport const PRIOR_SPEND = 'Prior Spend';\n\nexport function createOptimisedSpendDataSets(\n mmmResponse: MmmModelOutput\n): Map {\n const dataPointSets: Map = new Map<\n string,\n DataPointSetByString[]\n >();\n\n for (const forecast of mmmResponse.forecasts) {\n let dataPointSetByMetricTypeName = dataPointSets.get(\n forecast.sourceCategoryDisplayName\n );\n\n if (!dataPointSetByMetricTypeName) {\n dataPointSets.set(forecast.sourceCategoryDisplayName, []);\n dataPointSetByMetricTypeName = dataPointSets.get(\n forecast.sourceCategoryDisplayName\n );\n }\n\n for (\n let spendIterable = 0;\n spendIterable < forecast.maximumForecastSpend;\n spendIterable++\n ) {\n const spend = forecast.returnValues[spendIterable] ?? 0;\n\n const dataPointSet: DataPointSetByString = {\n dataPointString: forecast.sourceCategoryDisplayName,\n dataPointSetName: 'Optimised Spend',\n value: spend ? spend / 10000 : 0\n };\n\n dataPointSetByMetricTypeName!.push(dataPointSet);\n }\n }\n\n return dataPointSets;\n}\n\nexport function createPriorSpendDataSets(\n mmmResponse: MmmModelOutput\n): DataPointSetByString[] {\n const dataPointSets: DataPointSetByString[] = [];\n\n for (const forecast of mmmResponse.forecasts) {\n const allMarketingSourceChannelSpendsSummed = sum(\n mmmResponse.forecasts.map((forecast) => forecast.spend)\n );\n\n const priorSpend = forecast.spend / allMarketingSourceChannelSpendsSummed;\n\n const dataPointSet: DataPointSetByString = {\n dataPointString: forecast.sourceCategoryDisplayName,\n dataPointSetName: PRIOR_SPEND,\n value: priorSpend\n };\n\n dataPointSets.push(dataPointSet);\n }\n\n return dataPointSets;\n}\n","import { MmmModelOutput } from '../mmmModelOutput';\nimport {\n AxisChartByNumberPrediction,\n AxisChartByString,\n ChartDataType,\n ChartDisplayType,\n DataPointSetByNumberOptimisation,\n DataPointSetByString\n} from 'features/charts/chart.models';\nimport {\n createDataPointSetsByNumberOptimsation,\n createDataPointSetByNumberPredictions\n} from './diminishing-returns-chart';\nimport { v4 as guid } from 'uuid';\nimport {\n createOptimisedSpendDataSets,\n createPriorSpendDataSets\n} from './budget-optimiser-chart';\n\nexport const createBudgetOptimiserCharts = (\n mmmResponse: MmmModelOutput\n): BudgetOptimiserCharts => {\n const dataPointSetByNumberPredictions =\n createDataPointSetByNumberPredictions(mmmResponse);\n\n const diminishingReturnsChart: AxisChartByNumberPrediction = {\n id: guid(),\n type: ChartDataType.NUMBER_PREDICTION,\n title: '',\n shouldShowChartTypeDropdown: false,\n dataPointSetWithPredictions: dataPointSetByNumberPredictions,\n defaultChartDisplayType: ChartDisplayType.LINE,\n xAxisTitle: 'Spend',\n yAxisTitle: 'Revenue',\n yAxisFormat: new Intl.NumberFormat('en-GB'),\n tooltipFormat: new Intl.NumberFormat('en-GB'),\n dataPointSetWithOptimisations: []\n };\n\n const priorDataPointSets = createPriorSpendDataSets(mmmResponse);\n const optimisedDataPointSets = createOptimisedSpendDataSets(mmmResponse);\n\n const allOptimisedDataPointSets = Array.from(\n optimisedDataPointSets.values()\n ).flatMap((dps) => dps);\n\n const allBudgetOptimiserDataSets = [\n ...priorDataPointSets,\n ...allOptimisedDataPointSets\n ];\n\n const budgetOptimiserChart: AxisChartByString = {\n id: guid(),\n type: ChartDataType.STRING,\n title: '',\n shouldShowChartTypeDropdown: false,\n dataPointSets: priorDataPointSets,\n yAxisFormat: new Intl.NumberFormat('en-GB', {\n style: 'percent'\n }),\n tooltipFormat: new Intl.NumberFormat('en-GB', {\n style: 'percent',\n maximumFractionDigits: 0\n }),\n xAxisTitle: '',\n yAxisTitle: 'Budget Share %',\n defaultChartDisplayType: ChartDisplayType.BAR,\n yHighestValue: Math.max(\n ...allBudgetOptimiserDataSets.map((dps) => dps.value)\n ),\n shouldAnimate: false\n };\n\n const charts: BudgetOptimiserCharts = {\n diminishingReturnsChart,\n diminishingReturnsChartOptimisationDataPointSets:\n createDataPointSetsByNumberOptimsation(mmmResponse),\n budgetOptimiserChart,\n budgetOptimiserChartOptimisationDataPointSets: optimisedDataPointSets\n };\n\n return charts;\n};\n\nexport interface BudgetOptimiserCharts {\n diminishingReturnsChart: AxisChartByNumberPrediction;\n diminishingReturnsChartOptimisationDataPointSets: DataPointSetByNumberOptimisation[];\n budgetOptimiserChart: AxisChartByString;\n budgetOptimiserChartOptimisationDataPointSets: Map<\n string,\n DataPointSetByString[]\n >;\n}\n","export enum PillTheme {\n SUCCESS = 'success',\n ERROR = 'error',\n DISABLED = 'disabled',\n PROCESSING = 'processing',\n SCHEDULED = 'scheduled'\n}\n","export enum WebhookStatus {\n VALID = 'Valid',\n INVALID = 'Invalid',\n DISABLED = 'Disabled',\n DELETED = 'Deleted'\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { createColumnHelper } from '@tanstack/react-table';\nimport { BudgetOptimiserTableRow, SpendAmount } from './budget-optimiser.types';\nimport { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\nimport { sum } from '../charts/mmm-chart-helpers';\nimport { MmmModelOutput } from '../mmmModelOutput';\n\nexport const createBudgetOptimiserTableRows = (\n mmmData: MmmModelOutput,\n spendAmounts: SpendAmount[]\n) => {\n const sourceCategoryRows = mmmData?.forecasts.map((forecast) => {\n const spendAmount = spendAmounts.find(\n (sa) => sa.sourceCategoryName === forecast.sourceCategoryDisplayName\n )!;\n\n const optimisedRevenue =\n (spendAmount.optimisedSpendAmount > 0\n ? forecast.returnValues[spendAmount.optimisedSpendAmount]\n : forecast.returnValues[0]) * mmmData.dayMultiplier;\n\n const optimisedRevenueWithDayMultiplier =\n optimisedRevenue < 1 ? 1 : optimisedRevenue / mmmData.dayMultiplier;\n\n const budgetOptimiserRow: BudgetOptimiserTableRow = {\n rowName: forecast.sourceCategoryDisplayName,\n currentSpend: forecast.spend * mmmData.dayMultiplier,\n currentRevenue: forecast.revenue * mmmData.dayMultiplier,\n optimisedSpend: spendAmount.optimisedSpendAmount * mmmData.dayMultiplier,\n optimisedRevenue,\n changeAmount:\n (spendAmount.optimisedSpendAmount - forecast.spend) *\n mmmData.dayMultiplier,\n roas:\n optimisedRevenueWithDayMultiplier === 1\n ? 0\n : optimisedRevenueWithDayMultiplier / spendAmount.optimisedSpendAmount\n };\n\n return budgetOptimiserRow;\n });\n\n const totalRow: BudgetOptimiserTableRow = {\n rowName: 'Total',\n currentSpend: sum(sourceCategoryRows.map((row) => row.currentSpend)),\n currentRevenue: sum(sourceCategoryRows.map((row) => row.currentRevenue)),\n optimisedSpend: sum(sourceCategoryRows.map((row) => row.optimisedSpend)),\n optimisedRevenue: sum(\n sourceCategoryRows.map((row) => row.optimisedRevenue)\n ),\n changeAmount: sum(sourceCategoryRows.map((row) => row.changeAmount)),\n roas:\n sum(sourceCategoryRows.map((row) => row.optimisedRevenue)) /\n sum(sourceCategoryRows.map((row) => row.optimisedSpend))\n };\n\n return [...sourceCategoryRows, totalRow];\n};\n\nconst budgetOptimiserHelper = createColumnHelper();\n\nexport const createBudgetOptimiserTableColumns = (currencyCode: string) => [\n budgetOptimiserHelper.accessor((row) => row.rowName, {\n id: 'source-category',\n header: () => Source,\n enableColumnFilter: false,\n cell: (info) => {info.getValue()},\n size: 80\n }),\n budgetOptimiserHelper.group({\n header: 'Current',\n enableSorting: false,\n enableColumnFilter: false,\n columns: [\n budgetOptimiserHelper.accessor((row) => row.currentSpend, {\n id: 'current-spend',\n header: () => Spend,\n enableSorting: false,\n enableColumnFilter: false,\n size: 110,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).format(info.getValue())}\n \n )\n }),\n budgetOptimiserHelper.accessor((row) => row.currentRevenue, {\n id: 'current-revenue',\n header: () => Revenue,\n enableSorting: false,\n enableColumnFilter: false,\n size: 110,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).format(info.getValue())}\n \n )\n })\n ]\n }),\n budgetOptimiserHelper.group({\n header: 'Optimised',\n enableSorting: false,\n enableColumnFilter: false,\n columns: [\n budgetOptimiserHelper.accessor((row) => row.optimisedSpend, {\n id: 'optimised-spend',\n header: () => Spend,\n enableSorting: false,\n enableColumnFilter: false,\n size: 110,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).format(info.getValue())}\n \n )\n }),\n budgetOptimiserHelper.accessor((row) => row.optimisedRevenue, {\n id: 'optimised-revenue',\n header: () => Revenue,\n enableSorting: false,\n enableColumnFilter: false,\n size: 110,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).format(info.getValue())}\n \n )\n })\n ]\n }),\n budgetOptimiserHelper.group({\n header: 'Change',\n enableSorting: false,\n enableColumnFilter: false,\n columns: [\n budgetOptimiserHelper.accessor((row) => row.changeAmount, {\n id: 'change-amount',\n header: () => Amount,\n enableSorting: false,\n enableColumnFilter: false,\n size: 110,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).format(info.getValue())}\n \n )\n }),\n budgetOptimiserHelper.accessor((row) => row.roas, {\n id: 'change-roas',\n header: () => ROAS,\n enableSorting: false,\n enableColumnFilter: false,\n size: 40,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 1\n }).format(info.getValue())}\n \n )\n })\n ]\n })\n];\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport Tile from 'features/tiles/tile';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC, useMemo } from 'react';\nimport { RootState } from 'app/store';\nimport { useDispatch, useSelector } from 'react-redux';\nimport ChartBridge from 'features/charts/strategies/chart-bridge';\nimport Loading from 'common/components/loading/loading';\nimport Slider from 'common/components/inputs/slider';\nimport { createBudgetOptimiserCharts } from './budget-optimiser-charts';\nimport {\n AxisChartByNumberPrediction,\n AxisChartByString\n} from 'features/charts/chart.models';\nimport { PRIOR_SPEND } from './budget-optimiser-chart';\nimport { CustomTable } from 'common/components/table/customTable';\nimport { getCoreRowModel, useReactTable } from '@tanstack/react-table';\nimport { SpendAmount } from './budget-optimiser.types';\nimport {\n createBudgetOptimiserTableColumns,\n createBudgetOptimiserTableRows\n} from './budget-optimiser-table';\nimport {\n getSpendAmounts,\n onSpendAmountChanged\n} from '../header-controls/header-controls.slice';\nimport { useGetDataScienceMmmSegmentDataQuery } from 'app/apis/queryApi';\nimport MmmHeaderControls from '../header-controls/mmm-header-controls';\n\nconst MmmBudgetOptimiserPage: FC> = () => {\n const dispatch = useDispatch();\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { selectedSegmentKey } = useSelector(\n (state: RootState) => state.mmmHeaderControls\n );\n const spendAmounts = useSelector(getSpendAmounts);\n\n const { data: mmmModelOutput, isFetching: isFetchingModelOutput } =\n useGetDataScienceMmmSegmentDataQuery(\n {\n siteId,\n segment: selectedSegmentKey\n },\n {\n skip: selectedSegmentKey.length < 1\n }\n );\n\n const charts = useMemo(() => {\n if (!isFetchingModelOutput && mmmModelOutput) {\n return createBudgetOptimiserCharts(mmmModelOutput);\n }\n }, [mmmModelOutput, isFetchingModelOutput]);\n\n const columnDefs = useMemo(() => {\n return createBudgetOptimiserTableColumns(\n mmmModelOutput !== undefined ? mmmModelOutput.forecastUnit : 'GBP'\n );\n }, [mmmModelOutput]);\n\n const budgetOptimiserTableData = useMemo(() => {\n if (mmmModelOutput && spendAmounts.length > 0) {\n return createBudgetOptimiserTableRows(mmmModelOutput, spendAmounts);\n }\n\n return [];\n }, [mmmModelOutput, spendAmounts]);\n\n const getDiminishingReturnsChart = (): AxisChartByNumberPrediction => {\n const dataPointSets = spendAmounts.flatMap((spendAmount) =>\n charts!.diminishingReturnsChartOptimisationDataPointSets.filter(\n (dps) =>\n dps.dataPointSetName === spendAmount.sourceCategoryName &&\n dps.xValue ===\n (mmmModelOutput !== undefined\n ? spendAmount.optimisedSpendAmount * mmmModelOutput.dayMultiplier\n : 0)\n )\n );\n\n return {\n ...charts!.diminishingReturnsChart,\n dataPointSetWithOptimisations: dataPointSets\n };\n };\n\n const getBudgetOptimiserChart = (): AxisChartByString => {\n const newDataPointSets = spendAmounts.flatMap((spendAmount) => {\n const spendamount =\n spendAmount.optimisedSpendAmount === spendAmount.maximumSpend\n ? spendAmount.optimisedSpendAmount - 1\n : spendAmount.optimisedSpendAmount;\n\n const dataPointSet =\n charts!.budgetOptimiserChartOptimisationDataPointSets.get(\n spendAmount.sourceCategoryName\n )![spendamount];\n\n return dataPointSet;\n });\n\n const priorSpends = charts!.budgetOptimiserChart.dataPointSets.filter(\n (dps) => dps.dataPointSetName === PRIOR_SPEND\n );\n\n return {\n ...charts!.budgetOptimiserChart,\n dataPointSets: [...priorSpends, ...newDataPointSets]\n };\n };\n\n const mmmTable = useReactTable({\n data: budgetOptimiserTableData,\n columns: columnDefs,\n getCoreRowModel: getCoreRowModel()\n });\n\n const onSliderChanged = (\n spendAmount: SpendAmount,\n newSpendAmountValue: number\n ): void => {\n const newSpendAmount: SpendAmount = {\n ...spendAmount,\n optimisedSpendAmount: newSpendAmountValue\n };\n\n dispatch(onSpendAmountChanged(newSpendAmount));\n };\n\n return (\n
    \n \n\n
    \n \n
    \n

    Diminishing Returns

    \n \n
    \n {charts && !isFetchingModelOutput ? (\n \n ) : (\n \n )}\n
    \n
    \n
    \n\n
    \n

    Budget Optimiser Table

    \n \n
    \n {charts && !isFetchingModelOutput ? (\n \n ) : (\n \n )}\n
    \n
    \n
    \n\n
    \n

    Budget Optimiser

    \n \n
    \n {charts && !isFetchingModelOutput ? (\n \n ) : (\n \n )}\n
    \n
    \n
    \n\n
    \n

    Optimised Spend Controls

    \n \n
    \n {charts && !isFetchingModelOutput ? (\n
    \n {spendAmounts.map((spendAmount, index) => (\n
    \n \n \n onSliderChanged(spendAmount, newSpendAmountValue)\n }\n />\n
    \n ))}\n
    \n ) : (\n \n )}\n
    \n
    \n
    \n
    \n
    \n
    \n );\n};\n\nexport default MmmBudgetOptimiserPage;\n","import { FC, useRef, useState } from 'react';\nimport { useClickAway } from 'react-use';\n\nexport interface DropDownItemType {\n label: string;\n item: any;\n}\n\nexport interface DropDownWithCurrentSelectionProps {\n currentSelectionLabel: string;\n dropDownItems: DropDownItemType[];\n selectDropDownItem: (key: string, dropDownItems: DropDownItemType[]) => void;\n}\n\nconst DropDownWithCurrentSelection: FC = ({\n currentSelectionLabel,\n dropDownItems,\n selectDropDownItem\n}) => {\n const ref = useRef(null);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n useClickAway(ref, () => setIsDropdownOpen(false));\n\n const currentSelectedItem = dropDownItems.find(\n (items) => items.item === currentSelectionLabel\n );\n\n return (\n <>\n
    \n setIsDropdownOpen(!isDropdownOpen)}\n className=\"px-2 py-2\"\n >\n \n {currentSelectedItem?.label ?? 'Not yet set'}\n \n \n \n\n {isDropdownOpen ? (\n \n
    \n {dropDownItems.map((item, index) => (\n {\n selectDropDownItem(item.item, dropDownItems);\n setIsDropdownOpen(false);\n }}\n >\n {item.label}\n
    \n ))}\n
    \n \n ) : null}\n \n \n );\n};\n\nexport default DropDownWithCurrentSelection;\n","import TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC } from 'react';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport DropDownWithCurrentSelection, {\n DropDownItemType\n} from 'common/components/drop-downs/legacy/dropDownWithCurrentSelection';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { setCurrencyCode } from 'features/settings/settingsSlice';\n\nexport const GeneralSettings: FC = () => {\n const dispatch = useDispatch();\n\n const selectedCurrencyCode = useSelector(\n (state: RootState) => state.settings.currencyCode\n );\n\n const supportedCurrencyCodes: DropDownItemType[] = [\n { label: 'British Pounds (GBP)', item: 'GBP' },\n { label: 'United States Dollars (USD)', item: 'USD' },\n { label: 'Euros (EUR)', item: 'EUR' },\n { label: 'Canadian Dollars (CAD)', item: 'CAD' },\n { label: 'New Zealand Dollars (NZD)', item: 'NZD' },\n { label: 'Singapore Dollars (SGD)', item: 'SGD' },\n { label: 'South African Rand (ZAR)', item: 'ZAR' },\n { label: 'Australian Dollars (AUD)', item: 'AUD' },\n { label: 'Indonesian Rupiah (IDR)', item: 'IDR' }\n ];\n\n return (\n \n \n
    \n

    \n Currency\n

    \n {\n dispatch(setCurrencyCode(key));\n }}\n />\n
    \n
    \n
    \n );\n};\n","import { ParseResult, parse } from 'papaparse';\nimport { ChangeEvent, useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { onError } from '../toast/toast.slice';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport Button from 'common/components/buttons/button';\n\ninterface CSVReaderProps {\n onCSVRead: (data: T[], fileName: string) => void;\n}\n\nconst CSVReader = ({ onCSVRead }: CSVReaderProps) => {\n const dispatch = useDispatch();\n const hiddenFileInput = useRef(null);\n\n const handleFileUpload = (event: ChangeEvent) => {\n const file = event.target.files?.[0];\n\n if (file) {\n parse(file, {\n header: true,\n complete: (results: ParseResult) => {\n const data = results.data;\n onCSVRead(data, file.name);\n event.target.value = '';\n },\n error: (error: Error, file: File) => {\n console.error('CSV parsing error:', error);\n dispatch(\n onError({\n title: 'A CSV Error Occurred',\n description:\n 'An error occurred reading the CSV file. Please try again.'\n })\n );\n }\n });\n }\n };\n\n const handleClick = () => {\n (hiddenFileInput.current as any).click();\n };\n\n return (\n
    \n \n \n Upload File\n \n
    \n );\n};\n\nexport default CSVReader;\n","import { FC } from 'react';\n\nconst getColourClasses = (hasError: boolean) => {\n return hasError\n ? ['bg-error-300', 'bg-error-100']\n : ['bg-secondary-300', 'bg-neutral-100'];\n};\n\nconst LoadingBar: FC<{\n percentage: number;\n hasError?: boolean;\n}> = ({\n percentage = 0,\n hasError = false\n}: {\n percentage: number;\n hasError?: boolean;\n}) => {\n const [barColourClass, backgroundColourClass] = getColourClasses(hasError);\n\n return (\n <>\n
    \n
    \n \n \n );\n};\n\nexport default LoadingBar;\n","export const parseAdditionalDataProps = (\n additionalDataPropsStr: string\n): { key: string; value: string }[] => {\n if (!additionalDataPropsStr) return [];\n\n return additionalDataPropsStr.split(';').map((prop) => {\n const [name, value] = prop\n .split(',')\n .map((part) => part.split('=').map((s) => s.trim()));\n return { key: name[1], value: value ? value[1] : '' };\n });\n};\n","import { FC, useRef, useState } from 'react';\nimport CSVReader from 'features/csv-reader/csv-reader';\nimport { RevenueDto } from 'features/revenue/types/revenueDto';\nimport Button from 'common/components/buttons/button';\nimport { RootState } from 'app/store';\nimport LoadingBar from 'common/components/loading/loading-bar';\nimport { useUploadRevenuesMutation } from 'app/apis/publicCommandApi';\nimport { useTypedSelector } from 'common/hooks/store';\nimport {\n onNumberOfRevenueItemsToUploadChanged,\n onNumberOfRevenueItemsUploadedChanged,\n resetSlice,\n uploadRevenuePercentageSelector,\n uploadStateSelector\n} from '../uploads.slice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { onError, onSuccess } from 'features/toast/toast.slice';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { parseAdditionalDataProps } from 'common/utils/additional-data-properties-helpers';\n\nexport interface RevenueCsvRow {\n RevenueClosedDate: string;\n LeadDate: string;\n CurrencyCode: string;\n Value: string;\n EmailAddress: string;\n PayloadValue: string;\n RaId: string;\n PhoneNumber: string;\n [LabelKey: string]: string;\n Reference: string;\n}\n\nexport interface DuplicateRevenueCsvRow {\n count: number;\n row: RevenueCsvRow;\n}\n\nconst createVisitorIdentifierOptions = (\n row: RevenueCsvRow\n): { key: string; value: string }[] => {\n const visitorIdentifierOptions = [];\n\n if (row.EmailAddress) {\n visitorIdentifierOptions.push({\n key: 'EmailAddress',\n value: row.EmailAddress\n });\n }\n\n if (row.PayloadValue) {\n visitorIdentifierOptions.push({\n key: 'PayloadValue',\n value: row.PayloadValue\n });\n }\n\n if (row.RaId) {\n visitorIdentifierOptions.push({ key: 'RaId', value: row.RaId });\n }\n\n if (row.PhoneNumber) {\n visitorIdentifierOptions.push({\n key: 'PhoneNumber',\n value: row.PhoneNumber\n });\n }\n\n return visitorIdentifierOptions;\n};\n\nconst handleDuplicates = (rows: RevenueCsvRow[]): DuplicateRevenueCsvRow[] => {\n const allDuplicatesInCSV = rows.reduce((dupes, row) => {\n const existingDuplicate = dupes.find(\n (d) =>\n d.RaId === row.RaId &&\n d.EmailAddress === row.EmailAddress &&\n d.PhoneNumber === row.PhoneNumber &&\n d.PayloadValue === row.PayloadValue &&\n d.RevenueClosedDate === row.RevenueClosedDate\n );\n\n return (dupes = existingDuplicate ? [...dupes, existingDuplicate] : dupes);\n }, []);\n\n const aggregatedDuplicates: DuplicateRevenueCsvRow[] = [];\n\n for (const duplicate of allDuplicatesInCSV) {\n const aggregateDuplicate = aggregatedDuplicates.find(\n (a) =>\n a.row.RaId === duplicate.RaId &&\n a.row.EmailAddress === duplicate.EmailAddress &&\n a.row.PhoneNumber === duplicate.PhoneNumber &&\n a.row.PayloadValue === duplicate.PayloadValue &&\n a.row.RevenueClosedDate === duplicate.RevenueClosedDate\n );\n\n if (aggregateDuplicate) {\n aggregateDuplicate.count = aggregateDuplicate.count + 1;\n } else {\n aggregatedDuplicates.push({\n count: 1,\n row: duplicate\n });\n }\n }\n\n return aggregatedDuplicates;\n};\n\nconst isRevenueType = (input: any): input is RevenueCsvRow => {\n const schema: Record = {\n RevenueClosedDate: 'string',\n CurrencyCode: 'string',\n Value: 'string'\n };\n\n const missingProperties = Object.keys(schema).filter(\n (key) => input[key] === undefined\n );\n\n return missingProperties.length === 0;\n};\n\nconst revenueIsValid = (revenue: RevenueDto): boolean =>\n !isNaN(revenue.value) &&\n revenue.revenueClosedDate.length > 0 &&\n revenue.currencyCode.length > 0;\n\nexport const UploadRevenues: FC = () => {\n const dispatch = useDispatch();\n const isFirstRender = useRef(true);\n\n if (isFirstRender.current) {\n dispatch(resetSlice());\n isFirstRender.current = false;\n }\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { numberOfRevenueItemsToUpload } =\n useTypedSelector(uploadStateSelector);\n\n const uploadPercentage = useTypedSelector(uploadRevenuePercentageSelector);\n\n const [revenueToUpload, setRevenueToUpload] = useState([]);\n const [fileInputName, setFileInputName] = useState('');\n const [isUploading, setIsUploading] = useState(false);\n const [hasUploadErrored, setHasUploadErrored] = useState(false);\n const [duplicateRows, setDuplicateRows] = useState(\n []\n );\n\n const handleCSVRead = (data: RevenueCsvRow[], fileName: string) => {\n const duplicates = handleDuplicates(data);\n\n const revenueToUpload: RevenueDto[] = data\n .map((revenueCsvRow) => {\n const labelkeys = Object.keys(revenueCsvRow).filter((propertyName) =>\n propertyName.startsWith('Label')\n );\n\n const additionalDataProperties = parseAdditionalDataProps(\n revenueCsvRow.AdditionalDataProperties\n ).map((prop) => ({ name: prop.key, value: prop.value }));\n\n if (!revenueCsvRow || !isRevenueType(revenueCsvRow)) {\n return null;\n }\n const revenue: RevenueDto = {\n value: revenueCsvRow.Value.length < 1 ? NaN : +revenueCsvRow.Value,\n revenueClosedDate: revenueCsvRow.RevenueClosedDate,\n leadDate: revenueCsvRow.LeadDate,\n labels: labelkeys\n .map((labelKey) => revenueCsvRow[labelKey])\n .filter((labelValue) => labelValue !== ''),\n currencyCode: revenueCsvRow.CurrencyCode,\n visitorIdentifierOptions:\n createVisitorIdentifierOptions(revenueCsvRow),\n additionalDataProperties,\n reference: revenueCsvRow.Reference\n };\n return revenue;\n })\n .filter(\n (revenueRow): revenueRow is RevenueDto =>\n revenueRow !== null && revenueRow !== undefined\n );\n\n const areRevenueRecordsValid = revenueToUpload.every(revenueIsValid);\n\n if (!areRevenueRecordsValid) {\n dispatch(\n onError({\n title: 'Invalid File',\n description:\n 'The selected file has invalid values. Please append the file and try again.'\n })\n );\n return;\n }\n\n setRevenueToUpload(revenueToUpload);\n setFileInputName(fileName);\n setHasUploadErrored(false);\n setDuplicateRows(duplicates);\n dispatch(onNumberOfRevenueItemsToUploadChanged(revenueToUpload.length));\n dispatch(onNumberOfRevenueItemsUploadedChanged(0));\n };\n\n const [uploadRevenueMutation] = useUploadRevenuesMutation();\n\n const uploadRevenue = () => {\n setIsUploading(true);\n\n void uploadRevenueMutation({\n siteId,\n revenues: revenueToUpload\n })\n .unwrap()\n .then((result: any) => {\n if (result.isUploadSuccessful) {\n setIsUploading(false);\n\n dispatch(\n onSuccess({\n title: 'Import Success',\n description:\n 'The import of revenue was successfully uploaded. You can now navigate away from this page.'\n })\n );\n } else {\n setHasUploadErrored(true);\n const rowNumber = result.itemNumberFailure;\n const description = result.errors\n ? `Error uploading row ${rowNumber}. ${Object.values(\n result.errors\n ).join('. ')}`\n : 'An error occurred when uploading revenue. If the issue persists then please contact support.';\n dispatch(\n onError({\n title: 'An Error Occurred Uploading Revenue',\n description\n })\n );\n }\n })\n .finally(() => {\n setRevenueToUpload([]);\n setFileInputName('');\n setIsUploading(false);\n setDuplicateRows([]);\n dispatch(onNumberOfRevenueItemsToUploadChanged(0));\n dispatch(onNumberOfRevenueItemsUploadedChanged(0));\n });\n };\n\n return (\n <>\n \n
    \n File to upload:\n {fileInputName}\n
    \n
    \n \n Number of revenue records to upload:\n \n {numberOfRevenueItemsToUpload}\n
    \n
    \n Duplicates\n {duplicateRows.length < 1 ? (\n <>\n
    No duplicates found
    \n \n ) : (\n duplicateRows.map((duplicate, index) => {\n return (\n
    \n {duplicate.count} instances of\n {duplicate.row.RevenueClosedDate}\n {duplicate.row.RaId ? (\n {duplicate.row.RaId}\n ) : (\n <>\n )}\n {duplicate.row.EmailAddress ? (\n {duplicate.row.EmailAddress}\n ) : (\n <>\n )}{' '}\n {duplicate.row.PhoneNumber ? (\n {duplicate.row.PhoneNumber}\n ) : (\n <>\n )}{' '}\n {duplicate.row.PayloadValue ? (\n {duplicate.row.PayloadValue}\n ) : (\n <>\n )}\n
    \n );\n })\n )}\n
    \n
    \n uploadRevenue()}\n >\n

    Upload Revenue

    \n \n
    \n\n
    \n {isUploading ? (\n \n ) : (\n <>\n )}\n
    \n \n );\n};\n","import { FC, useRef, useState } from 'react';\nimport CSVReader from 'features/csv-reader/csv-reader';\nimport Button from 'common/components/buttons/button';\nimport { RootState } from 'app/store';\nimport LoadingBar from 'common/components/loading/loading-bar';\nimport { useTypedSelector } from 'common/hooks/store';\nimport {\n onNumberOfOpportunityItemsToUploadChanged,\n onNumberOfOpportunityItemsUploadedChanged,\n resetSlice,\n uploadOpportunityPercentageSelector,\n uploadStateSelector\n} from '../uploads.slice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { onError, onSuccess } from 'features/toast/toast.slice';\nimport { OpportunityDto } from 'features/opportunities/types/opportunityDto';\nimport { useUploadOpportunitiesMutation } from 'app/apis/publicCommandApi';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { parseAdditionalDataProps } from 'common/utils/additional-data-properties-helpers';\n\nexport interface OpportunityCsvRow {\n OpportunityDateTime: string;\n CurrencyCode: string;\n OpportunityValue: string;\n PipelineStage: string;\n EmailAddress: string;\n PayloadValue: string;\n RaId: string;\n PhoneNumber: string;\n [LabelKey: string]: string;\n Reference: string;\n}\n\nexport interface DuplicateOpportunityCsvRow {\n count: number;\n row: OpportunityCsvRow;\n}\n\n// Move to common function\nconst createVisitorIdentifierOptions = (\n row: OpportunityCsvRow\n): { key: string; value: string }[] => {\n const visitorIdentifierOptions = [];\n\n if (row.EmailAddress) {\n visitorIdentifierOptions.push({\n key: 'EmailAddress',\n value: row.EmailAddress\n });\n }\n\n if (row.PayloadValue) {\n visitorIdentifierOptions.push({\n key: 'PayloadValue',\n value: row.PayloadValue\n });\n }\n\n if (row.RaId) {\n visitorIdentifierOptions.push({ key: 'RaId', value: row.RaId });\n }\n\n if (row.PhoneNumber) {\n visitorIdentifierOptions.push({\n key: 'PhoneNumber',\n value: row.PhoneNumber\n });\n }\n\n return visitorIdentifierOptions;\n};\n\nconst handleDuplicates = (\n rows: OpportunityCsvRow[]\n): DuplicateOpportunityCsvRow[] => {\n const allDuplicatesInCSV = rows.reduce((dupes, row) => {\n const existingDuplicate = dupes.find(\n (d) =>\n d.RaId === row.RaId &&\n d.EmailAddress === row.EmailAddress &&\n d.PhoneNumber === row.PhoneNumber &&\n d.PayloadValue === row.PayloadValue &&\n d.OpportunityDateTime === row.OpportunityDateTime &&\n d.PipelineStage === row.PipelineStage\n );\n\n return existingDuplicate ? [...dupes, existingDuplicate] : dupes;\n }, []);\n\n const aggregatedDuplicates: DuplicateOpportunityCsvRow[] = [];\n\n for (const duplicate of allDuplicatesInCSV) {\n const aggregateDuplicate = aggregatedDuplicates.find(\n (a) =>\n a.row.RaId === duplicate.RaId &&\n a.row.EmailAddress === duplicate.EmailAddress &&\n a.row.PhoneNumber === duplicate.PhoneNumber &&\n a.row.PayloadValue === duplicate.PayloadValue &&\n a.row.OpportunityDateTime === duplicate.OpportunityDateTime &&\n a.row.PipelineStage === duplicate.PipelineStage\n );\n\n if (aggregateDuplicate) {\n aggregateDuplicate.count = aggregateDuplicate.count + 1;\n } else {\n aggregatedDuplicates.push({\n count: 1,\n row: duplicate\n });\n }\n }\n\n return aggregatedDuplicates;\n};\n\nconst isOpportunityType = (input: any): input is OpportunityCsvRow => {\n const schema: Record = {\n OpportunityDateTime: 'string',\n CurrencyCode: 'string',\n OpportunityValue: 'string',\n PipelineStage: 'string',\n EmailAddress: 'string',\n PayloadValue: 'string',\n RaId: 'string',\n PhoneNumber: 'string'\n };\n\n const missingProperties = Object.keys(schema).filter(\n (key) => input[key] === undefined\n );\n\n return missingProperties.length === 0;\n};\n\nconst opportunityIsValid = (opportunity: OpportunityDto): boolean =>\n !isNaN(opportunity.opportunityValue) &&\n opportunity.opportunityDateTime.length > 0 &&\n opportunity.pipelineStage.length > 0 &&\n opportunity.currencyCode.length > 0;\n\nexport const UploadOpportunities: FC = () => {\n const dispatch = useDispatch();\n const isFirstRender = useRef(true);\n\n if (isFirstRender.current) {\n dispatch(resetSlice());\n isFirstRender.current = false;\n }\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { numberOfOpportunityItemsToUpload } =\n useTypedSelector(uploadStateSelector);\n\n const uploadPercentage = useTypedSelector(\n uploadOpportunityPercentageSelector\n );\n\n const [opportunitiesToUpload, setOpportunitiesToUpload] = useState<\n OpportunityDto[]\n >([]);\n const [fileInputName, setFileInputName] = useState('');\n const [isUploading, setIsUploading] = useState(false);\n const [hasUploadErrored, setHasUploadErrored] = useState(false);\n const [duplicateRows, setDuplicateRows] = useState<\n DuplicateOpportunityCsvRow[]\n >([]);\n\n const handleCSVRead = (data: OpportunityCsvRow[], fileName: string) => {\n const duplicates = handleDuplicates(data);\n const validOpportunities = data.filter(\n (opportunityCsvRow) =>\n opportunityCsvRow && isOpportunityType(opportunityCsvRow)\n );\n const opportunitiesToUpload: OpportunityDto[] = validOpportunities\n .map((opportunityCsvRow) => {\n const labelkeys = Object.keys(opportunityCsvRow).filter(\n (propertyName) => propertyName.startsWith('Label')\n );\n\n const additionalDataProperties = parseAdditionalDataProps(\n opportunityCsvRow.AdditionalDataProperties\n ).map((prop) => ({ name: prop.key, value: prop.value }));\n\n const opportunity: OpportunityDto = {\n opportunityValue:\n opportunityCsvRow.OpportunityValue.length < 1\n ? NaN\n : +opportunityCsvRow.OpportunityValue,\n opportunityDateTime: opportunityCsvRow.OpportunityDateTime,\n pipelineStage: opportunityCsvRow.PipelineStage,\n labels: labelkeys\n .map((labelKey) => opportunityCsvRow[labelKey])\n .filter((labelValue) => labelValue !== ''),\n currencyCode: opportunityCsvRow.CurrencyCode,\n visitorIdentifierOptions:\n createVisitorIdentifierOptions(opportunityCsvRow),\n additionalDataProperties,\n reference: opportunityCsvRow.Reference\n };\n return opportunity;\n })\n .filter(\n (opportunityRow): opportunityRow is OpportunityDto =>\n opportunityRow !== null && opportunityRow !== undefined\n );\n\n const areOpportunityRecordsValid =\n opportunitiesToUpload.every(opportunityIsValid);\n\n if (!areOpportunityRecordsValid) {\n dispatch(\n onError({\n title: 'Invalid File',\n description:\n 'The selected file has invalid values. Please append the file and try again.'\n })\n );\n return;\n }\n\n setOpportunitiesToUpload(opportunitiesToUpload);\n setFileInputName(fileName);\n setHasUploadErrored(false);\n setDuplicateRows(duplicates);\n dispatch(\n onNumberOfOpportunityItemsToUploadChanged(opportunitiesToUpload.length)\n );\n dispatch(onNumberOfOpportunityItemsUploadedChanged(0));\n };\n\n const [uploadOpportunitiesMutation] = useUploadOpportunitiesMutation();\n\n const UploadOpportunities = () => {\n setIsUploading(true);\n\n void uploadOpportunitiesMutation({\n siteId,\n opportunities: opportunitiesToUpload\n })\n .unwrap()\n .then((result: any) => {\n if (result.isUploadSuccessful) {\n setIsUploading(false);\n\n dispatch(\n onSuccess({\n title: 'Import Success',\n description:\n 'The import of opportunities were successfully uploaded. You can now navigate away from this page.'\n })\n );\n } else {\n setHasUploadErrored(true);\n const rowNumber = result.itemNumberFailure;\n const description = result.errors\n ? `Error uploading row ${rowNumber}. ${Object.values(\n result.errors\n ).join('. ')}`\n : 'An error occurred when uploading opportunities. If the issue persists then please contact support.';\n dispatch(\n onError({\n title: 'An Error Occurred Uploading Opportunities',\n description\n })\n );\n }\n })\n .finally(() => {\n setOpportunitiesToUpload([]);\n setFileInputName('');\n setIsUploading(false);\n setDuplicateRows([]);\n dispatch(onNumberOfOpportunityItemsToUploadChanged(0));\n dispatch(onNumberOfOpportunityItemsUploadedChanged(0));\n });\n };\n\n return (\n <>\n \n
    \n File to upload:\n {fileInputName}\n
    \n
    \n \n Number of opportunity records to upload:\n \n {numberOfOpportunityItemsToUpload}\n
    \n
    \n Duplicates\n {duplicateRows.length < 1 ? (\n <>\n
    No duplicates found
    \n \n ) : (\n duplicateRows.map((duplicate, index) => {\n return (\n
    \n {duplicate.count} instances of\n \n {duplicate.row.OpportunityDateTime}\n \n {duplicate.row.PipelineStage}\n {duplicate.row.RaId ? (\n {duplicate.row.RaId}\n ) : (\n <>\n )}\n {duplicate.row.EmailAddress ? (\n {duplicate.row.EmailAddress}\n ) : (\n <>\n )}{' '}\n {duplicate.row.PhoneNumber ? (\n {duplicate.row.PhoneNumber}\n ) : (\n <>\n )}{' '}\n {duplicate.row.PayloadValue ? (\n {duplicate.row.PayloadValue}\n ) : (\n <>\n )}\n
    \n );\n })\n )}\n
    \n
    \n UploadOpportunities()}\n >\n

    Upload Opportunities

    \n \n
    \n\n
    \n {isUploading ? (\n \n ) : (\n <>\n )}\n
    \n \n );\n};\n","import TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC } from 'react';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { UploadRevenues } from 'features/upload/revenue/upload-revenues';\nimport { UploadOpportunities } from 'features/upload/opportunity/upload-opportunities';\n\nexport const SettingsUploadPage: FC = () => {\n return (\n \n \n
    \n

    \n Revenue CSV\n

    \n \n
    \n
    \n\n \n
    \n

    \n Opportunity CSV\n

    \n \n
    \n
    \n
    \n );\n};\n","import { NavLink } from 'react-router-dom';\nimport { ButtonTheme } from '../buttons/button-theme';\nimport { getThemeClasses } from '../buttons/button-functions';\n\ninterface NavLinkButtonProps {\n theme: ButtonTheme;\n identifier: string;\n classOverrides?: string;\n to: string;\n children: JSX.Element | JSX.Element[];\n}\n\nexport default function NavLinkButton({\n theme,\n identifier,\n classOverrides,\n to,\n children\n}: NavLinkButtonProps) {\n const classes = classOverrides ?? 'px-4 py-2.5';\n const themeClasses = getThemeClasses(theme);\n\n return (\n <>\n \n {children}\n \n \n );\n}\n","import { PillTheme } from './pill-theme';\n\ninterface PillProps {\n children: JSX.Element | JSX.Element[];\n theme: PillTheme;\n classOverrides?: string;\n tooltipText?: string;\n}\n\nfunction getClasses(theme: PillTheme): string {\n switch (theme) {\n case PillTheme.SUCCESS:\n return 'bg-success-50 border border-success-400 text-success-400';\n case PillTheme.ERROR:\n return 'bg-error-75 border border-error-300 text-error-300';\n case PillTheme.DISABLED:\n return 'bg-neutral-150 border border-neutral-400 text-neutral-400';\n case PillTheme.PROCESSING:\n return 'bg-primary-50 border border-primary-400 text-primary-400';\n case PillTheme.SCHEDULED:\n return 'bg-secondary-50 border border-secondary-400 text-secondary-400';\n default:\n throw new Error(`Unable to implement pill with theme of type: ${theme}`);\n }\n}\n\nexport default function Pill({\n children,\n theme,\n classOverrides,\n tooltipText\n}: PillProps) {\n const classes = classOverrides ?? 'px-2 flex justify-center items-center';\n if (theme === PillTheme.ERROR) {\n return (\n \n {children}\n \n {tooltipText}\n \n \n );\n } else {\n return (\n
    \n {children}\n
    \n );\n }\n}\n","export const createUpdateCacheKey = (webhookId: string) =>\n `patch-webhook-${webhookId}`;\n\nexport const createValidationEndpointCacheKey = (url: string) =>\n `validating-url-${url}`;\n","import Pill from 'common/components/pills/pill';\nimport { WebhookStatus } from '../webhook-status';\nimport { PillTheme } from 'common/components/pills/pill-theme';\nimport { useUpdateWebhookMutation } from 'app/apis/commandApi';\nimport { QueryStatus } from '@reduxjs/toolkit/dist/query';\nimport Spinner, { SpinnerSize } from 'common/components/loading/spinner';\nimport {\n createUpdateCacheKey,\n createValidationEndpointCacheKey\n} from '../webhook-cache-keys';\n\nconst getStatusPillTheme = (status: WebhookStatus): PillTheme => {\n switch (status) {\n case WebhookStatus.VALID:\n return PillTheme.SUCCESS;\n case WebhookStatus.INVALID:\n return PillTheme.ERROR;\n case WebhookStatus.DISABLED:\n return PillTheme.DISABLED;\n default:\n throw new Error(\n `Unable to get pill theme from Webhook Status: ${status}`\n );\n }\n};\n\ninterface WebhookTableStatusProps {\n currentStatus: WebhookStatus;\n webhookId: string;\n}\n\nexport const WebhooksTableStatus = ({\n currentStatus,\n webhookId\n}: WebhookTableStatusProps) => {\n const theme = getStatusPillTheme(currentStatus);\n\n const [_, updateWebhookMetadata] = useUpdateWebhookMutation({\n fixedCacheKey: createUpdateCacheKey(webhookId)\n });\n\n const [__, validateWebhookMetadata] = useUpdateWebhookMutation({\n fixedCacheKey: createValidationEndpointCacheKey(webhookId)\n });\n\n const renderCell = () => {\n if (updateWebhookMetadata.status === QueryStatus.pending) {\n return (\n
    \n \n Updating...\n
    \n );\n } else if (validateWebhookMetadata.status === QueryStatus.pending) {\n return (\n
    \n \n Validating Webhook...\n
    \n );\n } else {\n return (\n
    \n \n {currentStatus} \n \n
    \n );\n }\n };\n\n return (\n
    \n {renderCell()}\n
    \n );\n};\n\nexport default WebhooksTableStatus;\n","import { NavLink } from 'react-router-dom';\n\ninterface DropdownMenuAnchorProps {\n identifier: string;\n to: string;\n anchorClasses?: string;\n iconClasses?: string;\n children: JSX.Element | JSX.Element[];\n}\n\nconst DropdownMenuAnchor = ({\n identifier,\n to,\n anchorClasses,\n iconClasses,\n children\n}: DropdownMenuAnchorProps) => {\n return (\n <>\n \n {iconClasses ? : <>}\n {children}\n \n \n );\n};\nexport default DropdownMenuAnchor;\n","import DropdownMenu from 'common/components/drop-downs/drop-down-menu';\nimport DropdownMenuButton from 'common/components/drop-downs/dropdown-menu-button';\nimport { useDispatch } from 'react-redux';\nimport { WebhookStatus } from '../webhook-status';\nimport {\n useUpdateWebhookMutation,\n useValidateWebhookEndpointMutation\n} from 'app/apis/commandApi';\nimport { onSuccess } from 'features/toast/toast.slice';\nimport { Webhook } from '../webhooks.models';\nimport {\n createUpdateCacheKey,\n createValidationEndpointCacheKey\n} from '../webhook-cache-keys';\nimport { useAuth } from 'features/auth/hooks/useAuth';\nimport { onWebhookToBeDeletedChanged } from './webhooks-table.slice';\nimport DropdownMenuAnchor from 'common/components/drop-downs/dropdown-menu-anchor';\nimport { useState } from 'react';\n\ninterface WebhookTableActionsProps {\n webhook: Webhook;\n}\n\nexport default function WebhooksTableActions({\n webhook\n}: WebhookTableActionsProps) {\n const dispatch = useDispatch();\n const { isSuperUser } = useAuth();\n const isDisabled = webhook.isInternalWebhook && !isSuperUser;\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const [updateWebhookMutation] = useUpdateWebhookMutation({\n fixedCacheKey: createUpdateCacheKey(webhook.id)\n });\n\n const onDisableWebhook = () => {\n const disabledWebhook: Webhook = {\n ...webhook,\n status: WebhookStatus.DISABLED\n };\n\n void updateWebhookMutation(disabledWebhook).then(() =>\n dispatch(\n onSuccess({\n title: 'Webhook Disabled',\n description: `The Webhook '${webhook.name}' has been disabled successfully.`\n })\n )\n );\n };\n\n const [validateWebhookEndpointMutation] = useValidateWebhookEndpointMutation({\n fixedCacheKey: createValidationEndpointCacheKey(webhook.id)\n });\n\n const onEnableWebhook = () => {\n void validateWebhookEndpointMutation({\n siteId: webhook.siteId,\n url: webhook.webhookUrl\n })\n .unwrap()\n .then(() => {\n const updatedWebhook: Webhook = {\n ...webhook,\n status: WebhookStatus.VALID\n };\n\n void updateWebhookMutation(updatedWebhook)\n .unwrap()\n .then(() =>\n dispatch(\n onSuccess({\n title: 'Webhook Enabled',\n description: `The Webhook '${webhook.name}' has been enabled successfully.`\n })\n )\n );\n })\n .catch(() => {\n const updatedWebhook: Webhook = {\n ...webhook,\n status: WebhookStatus.INVALID\n };\n\n void updateWebhookMutation(updatedWebhook);\n });\n };\n\n return (\n
    \n setIsDropdownOpen(!isDropdownOpen)}\n onClickAway={() => setIsDropdownOpen(false)}\n >\n {webhook.status === WebhookStatus.DISABLED ? (\n \n Enable\n \n ) : (\n \n Disable\n \n )}\n {isSuperUser ? (\n \n View History\n \n ) : (\n <> \n )}\n dispatch(onWebhookToBeDeletedChanged(webhook))}\n >\n Delete\n \n \n
    \n );\n}\n","import { createColumnHelper } from '@tanstack/table-core';\nimport WebhooksTableStatus from './webhooks-table-status';\nimport { StickyOptions } from 'common/components/table/tableTypes';\nimport WebhooksTableActions from './webhooks-table-actions';\nimport { Webhook } from '../webhooks.models';\n\nconst columnHelper = createColumnHelper();\n\nexport const getWebhooksColumnDefs = () => [\n columnHelper.accessor((row) => row.name, {\n id: 'Name',\n header: () => 'Name',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.webhookType, {\n id: 'WebhookType',\n header: () => 'Webhook Type',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.status, {\n id: 'WebhookStatus',\n header: () => 'Status',\n enableColumnFilter: false,\n cell: (info) => (\n \n )\n }),\n columnHelper.accessor((row) => row.webhookUrl, {\n id: 'WebhookUrl',\n header: () => 'Url',\n enableColumnFilter: false,\n cell: (info) => (\n
    \n {info.getValue()}\n
    \n )\n }),\n columnHelper.accessor((row) => row.description, {\n id: 'Description',\n header: () => 'Description',\n enableColumnFilter: false,\n cell: (info) => (\n
    \n {info.getValue()}\n
    \n )\n }),\n columnHelper.accessor((row) => row.lastUpdatedDate, {\n id: 'LastUpdatedDate',\n header: () => 'Last Updated Date',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.id, {\n id: 'actions',\n header: () => 'Actions',\n enableColumnFilter: false,\n cell: (info) => ,\n maxSize: 50,\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n }\n })\n];\n","import Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\n\nconst getIconClasses = (theme: ButtonTheme): string => {\n switch (theme) {\n case ButtonTheme.WARNING:\n return 'bg-warning-600';\n default: // Not implemented other colours yet\n return 'bg-error-300';\n }\n};\n\ninterface ModalSimpleProps {\n isOpen: boolean;\n theme: ButtonTheme;\n title: string;\n description: string;\n confirmButtonText: string;\n isLoading?: boolean;\n onConfirmModal: () => void;\n onCancelModal: () => void;\n}\n\nexport const ModalSimple = ({\n isOpen,\n theme,\n title,\n description,\n confirmButtonText,\n isLoading = false,\n onConfirmModal,\n onCancelModal\n}: ModalSimpleProps) => {\n return (\n <>\n \n
    \n\n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n\n
    \n \n {title}\n \n
    \n

    {description}

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Cancel\n \n
    \n
    \n \n {confirmButtonText}\n \n
    \n
    \n
    \n
    \n \n \n \n );\n};\n","import { CustomTable } from 'common/components/table/customTable';\nimport {\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\nimport { getWebhooksColumnDefs } from './webhooks-column-defs';\nimport { Webhook } from '../webhooks.models';\nimport { WebhookStatus } from '../webhook-status';\nimport { ModalSimple } from 'features/modal/modal-simple';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport {\n onWebhookToBeDeletedChanged,\n selectWebhookToBeDeleted\n} from './webhooks-table.slice';\nimport { useUpdateWebhookMutation } from 'app/apis/commandApi';\nimport { onSuccess } from 'features/toast/toast.slice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { QueryStatus } from '@reduxjs/toolkit/dist/query';\nimport { useMemo } from 'react';\n\ninterface WebhooksTableProps {\n webhooks: Webhook[];\n}\n\nexport default function WebhooksTable({ webhooks }: WebhooksTableProps) {\n const dispatch = useDispatch();\n\n const webhookToBeDeleted = useSelector(selectWebhookToBeDeleted);\n\n const [\n updateWebhookStatusToDeletedMutation,\n updateWebhookStatusToDeletedMetadata\n ] = useUpdateWebhookMutation();\n\n const onDeleteWebhookConfirmed = () => {\n const disabledWebhook: Webhook = {\n ...webhookToBeDeleted!,\n status: WebhookStatus.DELETED\n };\n\n void updateWebhookStatusToDeletedMutation(disabledWebhook)\n .unwrap()\n .then(() => {\n dispatch(\n onSuccess({\n title: 'Webhook Deleted',\n description: `The Webhook '${\n webhookToBeDeleted!.name\n }' has been deleted successfully.`\n })\n );\n\n dispatch(onWebhookToBeDeletedChanged());\n })\n .catch(() => dispatch(onWebhookToBeDeletedChanged()));\n };\n\n const columnDefs = getWebhooksColumnDefs();\n\n const enabledWebhooks = useMemo(\n () =>\n webhooks.filter((webhook) => webhook.status !== WebhookStatus.DELETED),\n [webhooks]\n );\n\n const webhooksTable = useReactTable({\n data: enabledWebhooks,\n columns: columnDefs,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n enableColumnResizing: true,\n debugTable: false,\n debugHeaders: false,\n debugColumns: false\n });\n\n return (\n <>\n onDeleteWebhookConfirmed()}\n onCancelModal={() => dispatch(onWebhookToBeDeletedChanged())}\n />\n\n \n \n );\n}\n","import TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC } from 'react';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { useGetWebhooksQuery } from 'app/apis/queryApi';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport Spinner from 'common/components/loading/spinner';\nimport NavLinkButton from 'common/components/anchors/navlink-button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport WebhooksTable from 'features/webhooks/webhooks-table/webhooks-table';\n\nexport const SettingsWebhooksPage: FC = () => {\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const { data: webhooksResult, isLoading: isFetchingWebhooks } =\n useGetWebhooksQuery({\n siteId\n });\n\n return (\n \n \n
    \n
    \n

    Your Webhooks

    \n\n \n Create Webhook\n \n
    \n\n {isFetchingWebhooks ? (\n
    \n \n
    \n ) : (\n <>\n {webhooksResult && webhooksResult.webhooks.length > 0 ? (\n \n ) : (\n
    \n \n

    No Webhooks

    \n

    \n You currently have no Webhooks configured.\n

    \n
    \n )}\n \n )}\n
    \n
    \n
    \n );\n};\n","export enum WebhookTypes {\n CONVERSION_WEB = 'ConversionWeb',\n CONVERSION_INBOUND_CALL = 'ConversionInboundCall',\n OPPORTUNITY = 'Opportunity',\n REVENUE = 'Revenue'\n}\n\nexport const getWebhookTypeFriendlyName = (\n webhookType: WebhookTypes\n): string => {\n switch (webhookType) {\n case WebhookTypes.CONVERSION_WEB:\n return 'Forms';\n case WebhookTypes.CONVERSION_INBOUND_CALL:\n return 'Calls';\n default:\n return webhookType;\n }\n};\n","/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\ninterface TextboxProps {\n identifier: string;\n errors: string[];\n maxCharacterLimit?: number;\n value: string;\n placeholder?: string;\n inputClassOverrides?: string;\n containerClass?: string;\n onChange: (value: string) => void;\n}\n\nexport default function Textbox({\n identifier,\n errors,\n maxCharacterLimit,\n value,\n placeholder,\n inputClassOverrides,\n containerClass,\n onChange\n}: TextboxProps) {\n const inputClasses =\n errors.length > 0\n ? 'border-error-300 text-error-300 bg-error-75'\n : 'border-neutral-200 focus:border-neutral-500';\n\n const textboxClasses =\n inputClassOverrides ?? 'block w-full border rounded px-4 py-2 text-sm';\n\n const characterCounterClasses =\n errors.length > 0 ? 'text-error-300' : 'text-neutral-400';\n\n return (\n
    \n {\n onChange(e.target.value);\n }}\n />\n
    \n
    \n {errors.map((error, index) => (\n

    \n {error}\n

    \n ))}\n
    \n
    \n {maxCharacterLimit ? (\n \n {value.length} / {maxCharacterLimit}\n
    \n ) : (\n <>\n )}\n
    \n
    \n \n );\n}\n","interface TextareaProps {\n identifier: string;\n errors: string[];\n maxCharacterLimit?: number;\n value: string;\n placeholder?: string;\n onChange: (value: string) => void;\n}\n\nexport default function Textarea({\n identifier,\n errors,\n maxCharacterLimit,\n value,\n placeholder,\n onChange\n}: TextareaProps) {\n const hasError = maxCharacterLimit && maxCharacterLimit < value.length;\n\n const inputClasses = hasError\n ? 'border-error-300 text-error-300 bg-error-75'\n : 'border-neutral-500';\n\n const characterCounterClasses = hasError\n ? 'text-error-300'\n : 'text-neutral-400';\n\n return (\n
    \n {\n onChange(e.target.value);\n }}\n />\n
    \n
    \n {errors.map((error, index) => (\n

    \n {error}\n

    \n ))}\n
    \n
    \n {maxCharacterLimit ? (\n \n {value.length} / {maxCharacterLimit}\n
    \n ) : (\n <>\n )}\n
    \n
    \n \n );\n}\n","import { FC } from 'react';\n\nexport enum ToggleSize {\n Large,\n Small\n}\n\nconst Toggle: FC<{\n checked: boolean;\n label: string;\n identifier: string;\n size: ToggleSize;\n onChange: () => void;\n}> = ({\n checked,\n label,\n identifier,\n size,\n onChange\n}: {\n checked: boolean;\n label: string;\n identifier: string;\n size: ToggleSize;\n onChange: () => void;\n}) => {\n let toggleSizeClasses = '';\n let toggleTextClasses = '';\n switch (size) {\n case ToggleSize.Large:\n toggleSizeClasses =\n \"absolute w-11 h-6 bg-neutral-400 rounded-full peer peer-checked:bg-success-400 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-white after:border after:rounded-full after:h-5 after:w-5 after:transition-all\";\n toggleTextClasses =\n 'ml-12 px-1 text-sm font-medium text-black dark:text-neutral-500';\n break;\n case ToggleSize.Small:\n toggleSizeClasses =\n \"absolute w-7 h-4 bg-neutral-400 rounded-full peer peer-checked:bg-success-400 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-white after:border after:rounded-full after:h-3 after:w-3 after:transition-all\";\n toggleTextClasses =\n 'ml-7.5 px-1 text-xs font-medium text-black dark:text-neutral-500';\n break;\n }\n\n return (\n <>\n \n \n
    \n {label}\n \n \n );\n};\n\nexport default Toggle;\n","import { useMemo, useRef, useState } from 'react';\nimport Button from '../buttons/button';\nimport { ButtonTheme } from '../buttons/button-theme';\nimport { Duration } from 'luxon';\nimport LoadingBar from '../loading/loading-bar';\n\nexport enum AudioSourceTypes {\n AudioMpeg = 'audio/mpeg'\n}\n\nconst formatToTime = (seconds: number) => {\n const duration = Duration.fromObject({ seconds });\n\n if (duration.hours === 0) {\n return duration.toFormat('mm:ss');\n }\n\n return duration.toFormat('hh:mm:ss');\n};\n\ninterface AudioNewProps {\n identifier: string;\n audioSource?: string;\n audioSourceType: AudioSourceTypes;\n isInitialising: boolean;\n onInitialise: () => void;\n}\n\nconst AudioExternal = ({\n identifier,\n audioSource,\n audioSourceType,\n isInitialising,\n onInitialise\n}: AudioNewProps) => {\n const audioRef = useRef(null);\n\n const [isPlaying, setIsPlaying] = useState(false);\n const [progress, setProgress] = useState(0);\n const [totalDuration, setTotalDuration] = useState(0);\n\n const togglePlayPause = () => {\n if (isPlaying) {\n audioRef.current?.pause();\n setIsPlaying(false);\n } else {\n void audioRef.current?.play();\n setIsPlaying(true);\n }\n };\n\n const onPlay = () => {\n if (!audioSource) {\n onInitialise();\n } else {\n togglePlayPause();\n }\n };\n\n const playbackProgressPercentage = useMemo(\n () =>\n totalDuration === 0 || progress === 0\n ? 0\n : (progress / totalDuration) * 100,\n [totalDuration, progress]\n );\n\n return (\n <>\n
    \n \n \n \n {formatToTime(progress)}\n
    \n \n
    \n {formatToTime(totalDuration)}\n
    \n {audioSource ? (\n setTotalDuration(e.currentTarget.duration)}\n onPlaying={() => setIsPlaying(true)}\n onPause={() => setIsPlaying(false)}\n onTimeUpdate={(e) => setProgress(e.currentTarget.currentTime)}\n >\n \n \n ) : (\n <>\n )}\n \n );\n};\n\nexport default AudioExternal;\n","import TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC, useMemo, useState } from 'react';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport Textbox from 'common/components/inputs/textbox';\nimport Textarea from 'common/components/inputs/textarea';\nimport Button from 'common/components/buttons/button';\nimport DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport SimpleButtonContainerContent from 'common/components/drop-downs/legacy/simpleDropDownButtonContainerContent';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport {\n useCreateWebhookMutation,\n useValidateWebhookEndpointMutation\n} from 'app/apis/commandApi';\nimport { RootState } from 'app/store';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { onSuccess } from 'features/toast/toast.slice';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport NavLinkButton from 'common/components/anchors/navlink-button';\nimport { useNavigate } from 'react-router-dom';\nimport { ValidationProblemDetail } from 'common/types/validation-problem-detail';\nimport {\n WebhookTypes,\n getWebhookTypeFriendlyName\n} from 'features/webhooks/webhook-types';\nimport { useAuth } from 'features/auth/hooks/useAuth';\nimport Toggle, { ToggleSize } from 'common/components/inputs/toggle';\nimport { useGetWebhookDataFieldsQuery } from 'app/apis/queryApi';\nimport { WebhookDataField } from 'features/webhooks/webhooks.models';\n\nconst webhookNameMinLength = 1;\nconst webhookNameMaxLength = 50;\nconst validateWebhookName = (webhookName: string): string[] => {\n if (webhookName.length < webhookNameMinLength) {\n return [`Webhook Name must be at least ${webhookNameMinLength} character`];\n }\n\n if (webhookName.length > webhookNameMaxLength) {\n return [\n `Webhook Name must be less than ${webhookNameMaxLength} characters`\n ];\n }\n\n return [];\n};\n\nconst webhookDescriptionMaxLength = 120;\nconst validateWebhookDescription = (webhookDescription: string): string[] => {\n if (webhookDescription.length > webhookDescriptionMaxLength) {\n return [\n `Webhook Description must be at less than ${webhookDescriptionMaxLength} characters`\n ];\n }\n\n return [];\n};\n\nconst webhookUrlMinLength = 1;\nconst validateWebhookUrl = (webhookUrl: string): string[] => {\n if (webhookUrl.length < webhookUrlMinLength) {\n return [`Webhook Url must be at least ${webhookUrlMinLength} character`];\n }\n\n return [];\n};\n\nexport const SettingsWebhooksCreatePage: FC = () => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { isSuperUser } = useAuth();\n const isPocModeActive = useSelector(\n (state: RootState) => state.pocToggle.isPocModeActive\n );\n\n const [webhookName, onWebhookNameChanged] = useState('');\n const [webhookNameErrors, setWebhookNameErrors] = useState(\n new Array()\n );\n\n const [webhookDescription, onWebhookDescriptionChanged] = useState('');\n const [webhookDescriptionErrors, setWebhookDescriptionErrors] = useState(\n new Array()\n );\n\n const [selectedWebhookType, onSelectedWebhookTypeChanged] = useState(\n WebhookTypes.CONVERSION_WEB\n );\n const allWebhookTypes = useMemo(\n () =>\n Object.values(WebhookTypes).map((webhookType) => {\n return {\n key: webhookType,\n label: getWebhookTypeFriendlyName(webhookType),\n isActive: selectedWebhookType === webhookType\n };\n }),\n [selectedWebhookType]\n );\n\n const [webhookUrl, onWebhookUrlChanged] = useState('');\n const [webhookUrlErrors, setWebhookUrlErrors] = useState(new Array());\n const [isWebhookValidating, onIsWebhookValidatingChanged] = useState(false);\n const [isWebhookUrlValid, onIsWebhookUrlValidChanged] = useState(false);\n const [validateWebhookEndpoint] = useValidateWebhookEndpointMutation();\n\n const onValidateWebhookEndpoint = () => {\n onIsWebhookValidatingChanged(true);\n\n void validateWebhookEndpoint({\n siteId,\n url: webhookUrl\n })\n .unwrap()\n .then(() => {\n onIsWebhookUrlValidChanged(true);\n onIsWebhookValidatingChanged(false);\n setWebhookUrlErrors([]);\n\n dispatch(\n onSuccess({\n title: 'URL is Valid',\n description:\n 'The URL you have entered is valid. If you change the URL then you will need to test it again.'\n })\n );\n })\n .catch(() => {\n onIsWebhookUrlValidChanged(false);\n onIsWebhookValidatingChanged(false);\n\n const errors = ['URL is not valid'];\n setWebhookUrlErrors(errors);\n });\n };\n\n const [isInternalWebhook, onIsInternalWebhookChanged] = useState(false);\n const [useCustomDataSchema, onUseCustomDataSchemaChanged] = useState(false);\n const [selectedCustomDataFields, onSelectedCustomDataFieldsChanged] =\n useState(new Array());\n\n const isFormValid =\n webhookNameErrors.length < 1 &&\n webhookUrlErrors.length < 1 &&\n isWebhookUrlValid;\n\n const {\n data: webhookDataFieldsResult,\n isLoading: isFetchingWebhookDataFields\n } = useGetWebhookDataFieldsQuery({\n siteId,\n webhookType: selectedWebhookType\n });\n\n const webhookDataFields = useMemo(() => {\n if (!useCustomDataSchema) {\n return [];\n }\n\n if (webhookDataFieldsResult && !isFetchingWebhookDataFields) {\n return webhookDataFieldsResult.webhookDataFields.map(\n (df) => {\n return {\n ...df,\n enabled: selectedCustomDataFields.some(\n (selectedCustomDataField) =>\n selectedCustomDataField.name === df.name\n )\n };\n }\n );\n }\n\n return [];\n }, [\n webhookDataFieldsResult,\n isFetchingWebhookDataFields,\n selectedCustomDataFields,\n useCustomDataSchema\n ]);\n\n const [createWebhook] = useCreateWebhookMutation();\n const [isSaving, onIsSavingChanged] = useState(false);\n\n const onCreateWebhook = () => {\n onIsSavingChanged(true);\n\n void createWebhook({\n siteId,\n webhookName,\n webhookDescription,\n webhookType: selectedWebhookType,\n webhookUrl,\n isInternalWebhook,\n useCustomDataSchema,\n dataFields: webhookDataFields\n })\n .unwrap()\n .then(() => {\n onIsSavingChanged(false);\n\n dispatch(\n onSuccess({\n title: 'Webhook Created',\n description:\n 'The webhook has successfully been created! Any new events will now be posted to it.'\n })\n );\n navigate('/settings/webhooks');\n })\n .catch(({ data }: { data: ValidationProblemDetail }) => {\n onIsSavingChanged(false);\n\n const propertyName = Object.keys(data.Errors)[0];\n const errorDescription = data.Errors[propertyName][0];\n\n switch (propertyName) {\n case 'WebhookName':\n setWebhookNameErrors([errorDescription]);\n break;\n case 'WebhookUrl':\n setWebhookUrlErrors([errorDescription]);\n break;\n default:\n break;\n }\n });\n };\n\n return (\n \n \n
    \n

    \n New Webhook\n

    \n

    \n When creating a new Webhook you must have a unique name, a Webhook\n Type and validated Webhook URL\n

    \n
    \n \n {\n const errors = validateWebhookName(value);\n setWebhookNameErrors(errors);\n onWebhookNameChanged(value);\n\n onIsWebhookUrlValidChanged(false);\n }}\n />\n
    \n\n
    \n \n {\n const errors = validateWebhookDescription(value);\n setWebhookDescriptionErrors(errors);\n onWebhookDescriptionChanged(value);\n }}\n />\n
    \n\n
    \n \n {\n onSelectedWebhookTypeChanged(webhookType as WebhookTypes);\n onSelectedCustomDataFieldsChanged([]);\n }}\n dropDirection={'left'}\n >\n \n \n
    \n\n {isPocModeActive ? (\n
    \n \n \n onUseCustomDataSchemaChanged(!useCustomDataSchema)\n }\n />\n
    \n ) : (\n <>\n )}\n\n {isPocModeActive && useCustomDataSchema ? (\n
    \n

    \n Please select the fields you would like to include:\n

    \n {webhookDataFields?.map((df) => (\n
    \n {\n const newWebhookDataFields = df.enabled\n ? selectedCustomDataFields.filter(\n (selectedDf) =>\n selectedDf.displayName !== df.displayName\n )\n : [...selectedCustomDataFields, df];\n onSelectedCustomDataFieldsChanged(newWebhookDataFields);\n }}\n />\n \n {df.displayName}\n \n
    \n ))}\n
    \n ) : (\n <>\n )}\n\n
    \n \n
    \n
    \n {\n const errors = validateWebhookUrl(value);\n setWebhookUrlErrors(errors);\n onWebhookUrlChanged(value);\n }}\n />\n
    \n\n
    \n \n Validate Webhook\n \n
    \n
    \n
    \n\n {isSuperUser ? (\n
    \n \n onIsInternalWebhookChanged(!isInternalWebhook)}\n />\n
    \n ) : (\n <>\n )}\n\n
    \n \n Create Webhook\n \n\n
    \n \n Cancel\n \n
    \n
    \n
    \n
    \n
    \n );\n};\n","export const createTriggerCacheKey = (\n machineLearningModel: string,\n siteId: string\n) => `trigger-task-data-science-${machineLearningModel}-${siteId}`;\n\nexport const createUpdateCacheKey = (\n machineLearningModel: string,\n siteId: string\n) => `update-data-science-${machineLearningModel}-${siteId}`;\n","import Pill from 'common/components/pills/pill';\nimport { PillTheme } from 'common/components/pills/pill-theme';\nimport { DataScienceTaskStatus } from '../tasks-status';\nimport {\n useTriggerTaskRunMutation,\n useUpdateDataScienceTaskMutation\n} from 'app/apis/commandApi';\nimport {\n createTriggerCacheKey,\n createUpdateCacheKey\n} from '../task-cache-keys';\nimport { RootState } from 'app/store';\nimport { useSelector } from 'react-redux';\nimport { QueryStatus } from '@reduxjs/toolkit/dist/query';\nimport Spinner, { SpinnerSize } from 'common/components/loading/spinner';\nimport { DataScienceTaskFailureInformation } from '../tasks.models';\n\nconst getStatusPillTheme = (status: DataScienceTaskStatus): PillTheme => {\n switch (status) {\n case DataScienceTaskStatus.COMPLETED:\n return PillTheme.SUCCESS;\n case DataScienceTaskStatus.PROCESSING:\n case DataScienceTaskStatus.MODELAPPROVED:\n return PillTheme.PROCESSING;\n case DataScienceTaskStatus.FAILED:\n return PillTheme.ERROR;\n case DataScienceTaskStatus.DISABLED:\n return PillTheme.DISABLED;\n case DataScienceTaskStatus.SCHEDULED:\n return PillTheme.SCHEDULED;\n default:\n throw new Error(\n `Unable to get pill theme from Data science task Status: ${status}`\n );\n }\n};\n\ninterface DataScienceTaskTableStatusProps {\n currentStatus: DataScienceTaskStatus;\n machineLearningModel: string;\n dataScienceTaskFailureInformation?: DataScienceTaskFailureInformation;\n}\n\nexport const DataScienceTasksTableStatus = ({\n currentStatus,\n machineLearningModel,\n dataScienceTaskFailureInformation\n}: DataScienceTaskTableStatusProps) => {\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const theme = getStatusPillTheme(currentStatus);\n\n const [_, triggerTaskRunMetaData] = useTriggerTaskRunMutation({\n fixedCacheKey: createTriggerCacheKey(machineLearningModel, siteId)\n });\n\n const [__, updateDataScienceTaskMetadata] = useUpdateDataScienceTaskMutation({\n fixedCacheKey: createUpdateCacheKey(machineLearningModel, siteId)\n });\n\n const renderCell = () => {\n if (triggerTaskRunMetaData.status === QueryStatus.pending) {\n return (\n
    \n \n Trigger Task...\n
    \n );\n } else if (updateDataScienceTaskMetadata.status === QueryStatus.pending) {\n return (\n
    \n \n Updating Task...\n
    \n );\n } else {\n return (\n
    \n \n {currentStatus} \n \n
    \n );\n }\n };\n return (\n
    \n {renderCell()}\n
    \n );\n};\n\nexport default DataScienceTasksTableStatus;\n","import DropdownMenu from 'common/components/drop-downs/drop-down-menu';\nimport DropdownMenuButton from 'common/components/drop-downs/dropdown-menu-button';\nimport { DataScienceTask } from '../tasks.models';\nimport { DataScienceTaskStatus } from '../tasks-status';\nimport {\n useTriggerTaskRunMutation,\n useUpdateDataScienceTaskMutation\n} from 'app/apis/commandApi';\nimport {\n createTriggerCacheKey,\n createUpdateCacheKey\n} from '../task-cache-keys';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { onSuccess } from 'features/toast/toast.slice';\nimport { getDisabledThemeClasses } from 'common/components/buttons/button-functions';\nimport { useState } from 'react';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\n\ninterface DataScienceTaskTableActionsProps {\n dataScienceTask: DataScienceTask;\n}\n\nconst DataScienceTaskTableActions = ({\n dataScienceTask\n}: DataScienceTaskTableActionsProps) => {\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const dispatch = useDispatch();\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const [triggerDataScienceEndpointMutation] = useTriggerTaskRunMutation({\n fixedCacheKey: createTriggerCacheKey(\n dataScienceTask.machineLearningModel,\n siteId\n )\n });\n\n const onTriggerDataScienceTask = () => {\n void triggerDataScienceEndpointMutation({\n siteId,\n machineLearningModel: dataScienceTask.machineLearningModel\n })\n .unwrap()\n .then(() =>\n dispatch(\n onSuccess({\n title: 'Data Science Task Triggered',\n description: `The Webhook '${dataScienceTask.machineLearningModel}' has been triggered successfully.`\n })\n )\n );\n };\n const isProcessing =\n dataScienceTask.status === DataScienceTaskStatus.PROCESSING;\n\n const [updateDataScienceTaskMutation] = useUpdateDataScienceTaskMutation({\n fixedCacheKey: createUpdateCacheKey(\n dataScienceTask.machineLearningModel,\n siteId\n )\n });\n\n const onDisableDataScienceTask = () => {\n const disabledDataScienceTask = {\n siteId,\n dataScienceTask: {\n ...dataScienceTask,\n status: DataScienceTaskStatus.DISABLED\n }\n };\n\n void updateDataScienceTaskMutation(disabledDataScienceTask).then(() =>\n dispatch(\n onSuccess({\n title: 'Data Science Task Disabled',\n description: `The Data Science Task '${dataScienceTask.machineLearningModel}' has been disabled successfully.`\n })\n )\n );\n };\n\n const onEnableDataScienceTask = () => {\n const enabledDataScienceTask = {\n siteId,\n dataScienceTask: {\n ...dataScienceTask,\n status: DataScienceTaskStatus.SCHEDULED\n }\n };\n\n void updateDataScienceTaskMutation(enabledDataScienceTask).then(() =>\n dispatch(\n onSuccess({\n title: 'Data Science Task Enabled',\n description: `The Data Science Task '${dataScienceTask.machineLearningModel}' has been enabled successfully.`\n })\n )\n );\n };\n\n const renderTriggerButton = () => {\n return (\n \n
    \n Trigger\n
    \n \n );\n };\n\n const renderEnableButton = () => {\n return (\n \n
    \n Enable\n
    \n \n );\n };\n\n const renderDisableButton = () => {\n return (\n \n
    \n Disable\n
    \n \n );\n };\n\n const renderActionButtons = () => {\n switch (dataScienceTask.status) {\n case DataScienceTaskStatus.DISABLED:\n return [renderEnableButton()];\n default:\n return [renderTriggerButton(), renderDisableButton()];\n }\n };\n return (\n
    \n setIsDropdownOpen(!isDropdownOpen)}\n onClickAway={() => setIsDropdownOpen(false)}\n >\n {renderActionButtons()}\n \n
    \n );\n};\n\nexport default DataScienceTaskTableActions;\n","import { createColumnHelper } from '@tanstack/table-core';\nimport { DataScienceTask } from '../tasks.models';\nimport { FieldCell } from 'common/components/table/cell-formatters/fieldCell';\nimport DataScienceTasksTableStatus from './tasks-table-status';\nimport DataScienceTaskTableActions from './tasks-table-actions';\nimport { StickyOptions } from 'common/components/table/tableTypes';\n\nconst columnHelper = createColumnHelper();\nexport const getDataScienceTasksColumnDefs = () => [\n columnHelper.accessor((row) => row.machineLearningModel, {\n id: 'MachineLearningModel',\n header: () => 'Machine Learning Model',\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.hasAvailableModel, {\n id: 'HasAvailableModel',\n header: () => 'Available Model',\n cell: (info) => {\n const hasAvailableModel = info.getValue();\n const displayText = hasAvailableModel ? 'Yes' : 'No';\n return {displayText};\n }\n }),\n columnHelper.accessor((row) => row.status, {\n id: 'DataScienceTaskStatus',\n header: () => 'Status',\n cell: (info) => (\n \n )\n }),\n columnHelper.accessor((row) => row.schedule, {\n id: 'CronSchedule',\n header: () => 'Cron Schedule',\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastProcessed, {\n id: 'LastProcessed',\n header: () => 'Last Processed',\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastTriggered, {\n id: 'LastTriggered',\n header: () => 'Last Triggered',\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.pipelineParameterOverrides, {\n id: 'PipelineParameterOverrides',\n header: () => 'Pipeline Parameter Overrides',\n cell: (info) => {\n if (Array.isArray(info.getValue())) {\n return (\n
    \n {info.getValue().map((param, index) => (\n
    \n \n
    \n ))}\n
    \n );\n }\n\n return null;\n }\n }),\n columnHelper.accessor((row) => row.machineLearningModel, {\n id: 'actions',\n header: () => 'Actions',\n cell: (info) => (\n \n ),\n maxSize: 50,\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n }\n })\n];\n","import { CustomTable } from 'common/components/table/customTable';\nimport {\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\nimport { getDataScienceTasksColumnDefs } from './tasks-column-defs';\nimport { FC } from 'react';\nimport { DataScienceTask } from '../tasks.models';\n\ninterface DataScienceTasksTableProps {\n dataScienceTasks: DataScienceTask[];\n}\n\nexport const DataScienceTasksTable: FC = ({\n dataScienceTasks\n}) => {\n const columnDefs = getDataScienceTasksColumnDefs();\n\n const dataScienceTasksTable = useReactTable({\n data: dataScienceTasks,\n columns: columnDefs,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n enableColumnResizing: true,\n debugTable: false,\n debugHeaders: false,\n debugColumns: false\n });\n\n return (\n <>\n \n \n );\n};\nexport default DataScienceTasksTable;\n","import TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC, useMemo, useState } from 'react';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { useGetDataScienceTasksQuery } from 'app/apis/queryApi';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport Spinner from 'common/components/loading/spinner';\nimport DataScienceTasksTable from 'features/data-science/tasks-table/tasks-table';\nimport { onError } from 'features/toast/toast.slice';\n\nexport const SettingsDataScienceTasksPage: FC = () => {\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const dispatch = useDispatch();\n const {\n data: dataScienceTasksData,\n isFetching: isFetchingDataScienceTasks,\n refetch\n } = useGetDataScienceTasksQuery({\n siteId\n });\n const dataScienceTasks = useMemo(() => {\n if (!isFetchingDataScienceTasks && dataScienceTasksData) {\n return dataScienceTasksData.dataScienceTasks;\n }\n return [];\n }, [dataScienceTasksData, isFetchingDataScienceTasks]);\n\n const refreshTasks = () => {\n void refetch();\n };\n\n return (\n \n \n
    \n
    \n \n

    Data Science Tasks

    \n \n
    \n
    \n\n {isFetchingDataScienceTasks ? (\n
    \n \n
    \n ) : (\n <>\n {dataScienceTasks.length > 0 ? (\n \n ) : (\n
    \n \n

    No Data Science Tasks

    \n

    \n You currently have no Data Science Tasks configured.\n

    \n
    \n )}\n \n )}\n
    \n
    \n
    \n );\n};\n","/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport { createColumnHelper } from '@tanstack/react-table';\nimport { filterOutStandardQueryFields } from 'common/components/table/cell-formatters/fieldHelpers';\nimport { PayloadFieldsCellFormatter } from 'common/components/table/cell-formatters/payloadFieldCellFormatter';\nimport {\n formatIsoDateTimeStringToDisplayDate,\n secondsToHms\n} from 'common/utils/LEGACY_timeHelpers';\nimport { NavLink } from 'react-router-dom';\nimport { ConversionSimpleViewResponse } from '../types/conversionSimpleViewResponse';\nimport FieldsRenderer from './shared/FieldsRenderer';\nimport { StickyOptions } from 'common/components/table/tableTypes';\n\nconst simpleColumnHelper = createColumnHelper();\n\nexport const simpleColumnDefs = () => [\n simpleColumnHelper.accessor((row) => row.captureDateTime, {\n id: 'captureDateTime',\n header: () => Date/Time,\n enableColumnFilter: false,\n cell: (info) => (\n \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n \n )\n }),\n simpleColumnHelper.accessor((row) => row.conversionPayloadFields, {\n id: 'payloadFields',\n header: () => 'Fields',\n enableColumnFilter: false,\n enableSorting: false,\n size: 300,\n cell: (info) =>\n FieldsRenderer({\n fieldsMap: info.getValue(),\n contextKey: 'payloadFields'\n })\n }),\n simpleColumnHelper.accessor(\n (row) => {\n return {\n header: row.firstClick.marketingSource,\n subheader:\n row.firstClick.marketingSource === 'Referral'\n ? row.firstClick.referrerUrl\n : undefined,\n enableColumnFilter: false,\n fields: row.firstClickLandingPageUrlAndQueryStringSegmentsFields\n };\n },\n {\n id: 'firstClick',\n header: () => First Click,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => (\n \n filterOutStandardQueryFields(fields)\n }\n fieldObject={info.getValue()}\n icon=\"\"\n />\n ),\n size: 200\n }\n ),\n simpleColumnHelper.accessor(\n (row) => {\n return {\n header: row.lastClick.marketingSource,\n subheader:\n row.lastClick.marketingSource === 'Referral'\n ? row.lastClick.referrerUrl\n : undefined,\n enableColumnFilter: false,\n fields: row.conversionLandingPageUrlAndQueryStringSegmentsFields\n };\n },\n {\n id: 'lastClick',\n header: () => Last Click,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => (\n \n filterOutStandardQueryFields(fields)\n }\n fieldObject={info.getValue()}\n icon=\"\"\n />\n ),\n size: 200\n }\n ),\n simpleColumnHelper.accessor((row) => row.webPageViewCount, {\n id: 'webPageViewCount',\n header: () => Page Views,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue(),\n size: 125\n }),\n simpleColumnHelper.accessor((row) => row.sessions, {\n id: 'sessions',\n header: () => Sessions,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue(),\n size: 125\n }),\n simpleColumnHelper.accessor(\n (row) => row.averageWebTouchpointDurationInSeconds,\n {\n id: 'averageWebTouchpointDurationInSeconds',\n header: () => Duration,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => secondsToHms(info.getValue()),\n size: 125\n }\n ),\n simpleColumnHelper.accessor((row) => row.visitorId, {\n id: 'Visitor',\n header: () => Visitor,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n return (\n \n View\n \n );\n },\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n },\n enableResizing: false,\n size: 100\n })\n];\n\nexport default simpleColumnDefs;\n","/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport { ColumnDef, createColumnHelper } from '@tanstack/react-table';\nimport MarketingSourceLogo from 'common/components/icons/marketingSourceLogo';\nimport { FilterNotApplicable } from 'common/components/table/cell-formatters/filterNotApplicatable';\nimport {\n formatIsoDateTimeStringToDisplayDate,\n secondsToHms\n} from 'common/utils/LEGACY_timeHelpers';\nimport Blur from 'features/blur/blur';\nimport FieldsRenderer from 'features/conversions/forms/views/shared/FieldsRenderer';\nimport { NavLink } from 'react-router-dom';\nimport { ConversionDetailedViewResponse } from '../types/converisonDetailedViewResponse';\nimport { StickyOptions } from 'common/components/table/tableTypes';\n\nconst detailedColumnHelper =\n createColumnHelper();\n\nconst getDetailedColumnDefs = (\n data: ConversionDetailedViewResponse[],\n showConversionId: boolean\n) => {\n const expandedFieldsColumnDefs = [\n detailedColumnHelper.accessor((row) => row.expandedFields?.caller, {\n id: 'expandedFields.caller',\n header: () => Caller,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.expandedFields?.type, {\n id: 'expandedFields.type',\n header: () => Type,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.expandedFields?.source, {\n id: 'expandedFields.source',\n header: () => Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.expandedFields?.number, {\n id: 'expandedFields.number',\n header: () => Number,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n })\n ];\n\n if (data.some((response) => response.expandedFields?.customDataFields)) {\n expandedFieldsColumnDefs.push(\n ...data.reduce[]>(\n (acc, nextResponse, index) => {\n const customDataFields =\n nextResponse.expandedFields?.customDataFields;\n Object.entries(customDataFields ?? {}).forEach(([, value]) => {\n const { key } = value;\n\n if (acc.some((columnDef) => columnDef.id?.includes(key))) {\n return acc;\n }\n\n const newColDef = detailedColumnHelper.accessor(\n (row) => {\n const [, foundRow] =\n Object.entries(\n row.expandedFields?.customDataFields ?? {}\n ).find((field) => field[1].key === key) ?? [];\n return foundRow?.value;\n },\n {\n id: key,\n header: () => {key},\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => (\n {info.getValue()}\n )\n }\n );\n\n acc.push(newColDef);\n });\n return acc;\n },\n []\n )\n );\n }\n\n const mainColumnDefs = [\n detailedColumnHelper.accessor((row) => row.captureDateTime, {\n id: 'captureDateTime',\n header: () => Date/Time,\n enableColumnFilter: false,\n size: 200,\n cell: (info) => (\n \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n \n )\n }),\n detailedColumnHelper.accessor((row) => row.sources, {\n id: 'sources',\n header: () => Sources,\n enableColumnFilter: false,\n enableSorting: false,\n size: 400,\n cell: (info) =>\n info.getValue().map((value, index) => (\n
    \n \n {value}\n
    \n ))\n }),\n detailedColumnHelper.accessor((row) => row.conversionPayloadFields, {\n id: 'payloadFields',\n header: () => 'Fields',\n enableColumnFilter: false,\n enableSorting: false,\n size: 500,\n cell: (info) =>\n FieldsRenderer({\n fieldsMap: info.getValue(),\n contextKey: 'payloadFields'\n })\n }),\n detailedColumnHelper.accessor((row) => row.webPageViewCount, {\n id: 'webPageViewCount',\n header: () => Page Views,\n enableColumnFilter: false,\n size: 100,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.sessions, {\n id: 'sessions',\n header: () => Sessions,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor(\n (row) => row.averageWebTouchpointDurationInSeconds,\n {\n id: 'averageWebTouchpointDurationInSeconds',\n header: () => Duration,\n enableColumnFilter: false,\n size: 220,\n enableSorting: false,\n cell: (info) => secondsToHms(info.getValue())\n }\n )\n ];\n\n if (showConversionId) {\n mainColumnDefs.unshift(\n detailedColumnHelper.accessor((row) => row.id, {\n id: 'id',\n header: () => Conversion ID,\n enableColumnFilter: false,\n size: 400,\n cell: (info) => {info.getValue()}\n }) as ColumnDef\n );\n }\n\n return [\n detailedColumnHelper.group({\n id: 'conversion',\n columns: mainColumnDefs\n }),\n detailedColumnHelper.group({\n header: 'First Click',\n enableColumnFilter: false,\n columns: [\n detailedColumnHelper.accessor((row) => row.firstClick.source, {\n id: 'firstClick.source',\n header: () => Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.group, {\n id: 'firstClick.group',\n header: () => Group,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => FilterNotApplicable(info.getValue())\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.keywords, {\n id: 'firstClick.keywords',\n header: () => Keywords,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.landingPage, {\n id: 'firstClick.landingPage',\n header: () => Landing Page,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.referrerHost, {\n id: 'firstClick.referrerHost',\n header: () => Referrer Host,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.referrerPath, {\n id: 'firstClick.referrerPath',\n header: () => Referrer Path,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.canonicalUrl, {\n id: 'firstClick.canonicalUrl',\n header: () => Canonical Url,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.utmCampaign, {\n id: 'firstClick.utmCampaign',\n header: () => Utm Campaign,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.utmContent, {\n id: 'firstClick.utmContent',\n header: () => Utm Content,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.utmMedium, {\n id: 'firstClick.utmMedium',\n header: () => Utm Medium,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.utmSource, {\n id: 'firstClick.utmSource',\n header: () => Utm Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.utmTerm, {\n id: 'firstClick.utmTerm',\n header: () => Utm Term,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.utmKeyword, {\n id: 'firstClick.utmKeyword',\n header: () => Utm Keyword,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.device, {\n id: 'firstClick.device',\n header: () => Device,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.placement, {\n id: 'firstClick.placement',\n header: () => Placement,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.creative, {\n id: 'firstClick.creative',\n header: () => Creative,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.campaignId, {\n id: 'firstClick.campaignId',\n header: () => Campaign Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.adGroupId, {\n id: 'firstClick.adGroupId',\n header: () => Adgroup Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.firstClick.gclid, {\n id: 'firstClick.gclid',\n header: () => Gclid,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n })\n ]\n }),\n detailedColumnHelper.group({\n header: 'Last Click',\n enableColumnFilter: false,\n columns: [\n detailedColumnHelper.accessor((row) => row.lastClick.source, {\n id: 'lastClick.source',\n header: () => Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.group, {\n id: 'lastClick.group',\n header: () => Group,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => FilterNotApplicable(info.getValue())\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.keywords, {\n id: 'lastClick.keywords',\n header: () => Keywords,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.landingPage, {\n id: 'lastClick.landingPage',\n header: () => Landing Page,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.referrerHost, {\n id: 'lastClick.referrerHost',\n header: () => Referrer Host,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.referrerPath, {\n id: 'lastClick.referrerPath',\n header: () => Referrer Path,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.canonicalUrl, {\n id: 'lastClick.canonicalUrl',\n header: () => Canonical Url,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.utmCampaign, {\n id: 'lastClick.utmCampaign',\n header: () => Utm Campaign,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.utmContent, {\n id: 'lastClick.utmContent',\n header: () => Utm Content,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.utmMedium, {\n id: 'lastClick.utmMedium',\n header: () => Utm Medium,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.utmSource, {\n id: 'lastClick.utmSource',\n header: () => Utm Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.utmTerm, {\n id: 'lastClick.utmTerm',\n header: () => Utm Term,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.utmKeyword, {\n id: 'lastClick.utmKeyword',\n header: () => Utm Keyword,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.device, {\n id: 'lastClick.device',\n header: () => Device,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.placement, {\n id: 'lastClick.placement',\n header: () => Placement,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.creative, {\n id: 'lastClick.creative',\n header: () => Creative,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.campaignId, {\n id: 'lastClick.campaignId',\n header: () => Campaign Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.adGroupId, {\n id: 'lastClick.adGroupId',\n header: () => Adgroup Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n detailedColumnHelper.accessor((row) => row.lastClick.gclid, {\n id: 'lastClick.gclid',\n header: () => Gclid,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n })\n ]\n }),\n detailedColumnHelper.group({\n header: 'Device And Location',\n enableColumnFilter: false,\n columns: [\n detailedColumnHelper.accessor(\n (row) => row.deviceAndLocation?.platform,\n {\n id: 'deviceAndLocation.platform',\n header: () => Platform,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }\n ),\n detailedColumnHelper.accessor((row) => row.deviceAndLocation?.browser, {\n id: 'deviceAndLocation.browser',\n header: () => Browser,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor(\n (row) => row.deviceAndLocation?.operatingSystem,\n {\n id: 'deviceAndLocation.operatingSystem',\n header: () => OS,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }\n ),\n detailedColumnHelper.accessor(\n (row) => row.deviceAndLocation?.operatingSystemVersion,\n {\n id: 'deviceAndLocation.operatingSystemVersion',\n header: () => OS Version,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }\n )\n ]\n }),\n detailedColumnHelper.group({\n header: 'Identity',\n enableColumnFilter: false,\n columns: [\n detailedColumnHelper.accessor((row) => row.identity?.email, {\n id: 'identity.email',\n header: () => Email,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n detailedColumnHelper.accessor((row) => row.identity?.name, {\n id: 'identity.name',\n header: () => Name,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n })\n ]\n }),\n detailedColumnHelper.group({\n header: 'Expanded Fields',\n enableColumnFilter: false,\n columns: expandedFieldsColumnDefs\n }),\n detailedColumnHelper.accessor((row) => row.visitorId, {\n id: 'Visitor',\n header: () => Visitor,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n return (\n \n View\n \n );\n },\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n },\n enableResizing: false,\n size: 100\n })\n ];\n};\n\nexport default getDetailedColumnDefs;\n","import { RootState } from 'app/store';\nimport ExportButton from 'common/components/buttons/exportButton';\nimport SearchBar from 'features/search-bar/searchBar';\nimport {\n applySearchToTableAndGraph,\n clearSearch,\n getSearchTermsById\n} from 'features/search-bar/searchBarSlice';\nimport { FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { ViewType } from 'features/data-view-selection/view-type';\n\nconst ConversionsInteractionBar: FC<{\n componentId: string;\n currentViewType: ViewType;\n isExporting: boolean;\n onChangeViewType: (viewType: ViewType) => void;\n onTriggerExport: () => void;\n}> = ({\n componentId,\n currentViewType,\n isExporting,\n onChangeViewType,\n onTriggerExport\n}) => {\n const dispatch = useDispatch();\n\n const { tableValueToSearch } = useSelector((state: RootState) =>\n getSearchTermsById(state, componentId)\n );\n\n const toggleViewType = (viewType: ViewType) => {\n onChangeViewType(viewType);\n };\n\n return (\n <>\n
    \n {\n dispatch(\n applySearchToTableAndGraph({\n id: componentId,\n valueToSearch: searchTerm\n })\n );\n }}\n onClearFunction={() => {\n dispatch(\n clearSearch({\n id: componentId\n })\n );\n }}\n />\n
    \n (isExporting ? null : onTriggerExport())}\n isLoading={isExporting}\n />\n toggleViewType(ViewType.Simple)}\n >\n Simple\n \n toggleViewType(ViewType.Detailed)}\n >\n Detailed\n \n
    \n
    \n \n );\n};\n\nexport default ConversionsInteractionBar;\n","import { FC, Fragment, useMemo } from 'react';\nimport simpleColumnDefs from 'features/conversions/forms/views/formsSimpleColumnDefs';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { PaginatedTable } from 'features/pagination/paginatedTable';\nimport { usePaginatedQuery } from 'features/pagination/hooks/usePaginatedQuery';\nimport {\n useGetConversionsExportMutation,\n useGetPaginatedConversionsQuery,\n usePrefetch\n} from 'app/apis/queryApi';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport {\n toggleSelection,\n selectViewSelectionByComponentId\n} from 'features/data-view-selection/dataViewSelectionSlice';\nimport { ViewType } from 'features/data-view-selection/view-type';\nimport { ConversionViewRequest } from 'features/conversions/forms/types/conversionSimpleViewRequest';\nimport getDetailedColumnDefs from 'features/conversions/forms/views/formsDetailColumnDefs';\nimport ConversionsInteractionBar from 'features/conversions/conversions-interaction-bar';\nimport { selectPaginationOptions } from 'features/pagination/paginationOptionsSlice';\nimport { ConversionWebExportRequest } from 'features/conversions/forms/types/conversion-web-export-request';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport { ToggleType } from 'features/internal/internal.models';\nimport { selectDateRangeLocalIso } from 'features/date-range-selection/dateRangeSlice';\nimport { ConversionDetailedViewResponse } from 'features/conversions/forms/types/converisonDetailedViewResponse';\n\nconst ConversionsForm: FC = () => {\n const dispatch = useDispatch();\n\n const { selection: viewType } = useSelector((state: RootState) =>\n selectViewSelectionByComponentId(state, 'forms-component')\n );\n\n const conversionIdToggle = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayConversionId)\n );\n\n const formComponentId = useMemo(() => {\n return `forms-component-${viewType ?? 'simple'}`;\n }, [viewType]);\n\n const prefetchPage = usePrefetch('getPaginatedConversions');\n const {\n data: conversionResponse,\n isLoading: conversionRequestIsLoading,\n isFetching: conversionRequestIsFetching\n } = usePaginatedQuery(\n useGetPaginatedConversionsQuery,\n prefetchPage,\n formComponentId,\n {\n conversionType: 'Web',\n viewType\n } as ConversionViewRequest,\n {\n initialColumnName: 'CaptureDateTime',\n initialOrderDirection: 'ASC'\n }\n );\n\n const columnDefs = useMemo(() => {\n if (\n conversionRequestIsLoading ||\n conversionRequestIsFetching ||\n !conversionResponse?.data\n ) {\n return [];\n }\n\n const columnDefs: any[] =\n viewType === ViewType.Simple\n ? simpleColumnDefs()\n : getDetailedColumnDefs(\n conversionResponse?.data ?? [],\n conversionIdToggle?.enabled ?? false\n );\n\n return columnDefs;\n }, [\n conversionRequestIsFetching,\n conversionRequestIsLoading,\n conversionResponse?.data,\n conversionIdToggle,\n viewType\n ]);\n\n const handleClick = (viewType: ViewType) => {\n dispatch(\n toggleSelection({\n newSelection: viewType,\n componentId: 'forms-component'\n })\n );\n };\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { startDate, endDate } = useSelector(selectDateRangeLocalIso);\n\n const paginationOptions = useSelector((state: RootState) =>\n selectPaginationOptions(state, siteId)\n );\n\n const exportRequest: ConversionWebExportRequest = {\n siteId,\n conversionType: 'Web',\n viewType,\n startDate,\n endDate,\n searchTerm: paginationOptions?.searchTerm ?? ''\n };\n\n const [triggerExport, { isLoading: isExporting }] =\n useGetConversionsExportMutation();\n\n const onTriggerExport = () => {\n void triggerExport(exportRequest);\n };\n\n return (\n <>\n \n {viewType === 'detailed' ? (\n \n \n \n row.id}\n getRowData={() => null}\n />\n \n \n ) : (\n \n \n \n {\n return row.id;\n }}\n getRowData={() => null}\n />\n \n \n )}\n \n \n );\n};\n\nexport default ConversionsForm;\n","import { useGetConversionInboundCallRecordingUrlQuery } from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport AudioExternal, {\n AudioSourceTypes\n} from 'common/components/audio/audio-external';\nimport { useState } from 'react';\nimport { useSelector } from 'react-redux';\n\ninterface CallRecordingDownloadProps {\n eventId: string;\n}\n\nconst CallRecording = ({ eventId }: CallRecordingDownloadProps) => {\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const [hasInitialisedRecording, setHasInitialisedRecording] = useState(false);\n\n const { data, isLoading } = useGetConversionInboundCallRecordingUrlQuery(\n {\n siteId,\n eventId\n },\n { skip: !hasInitialisedRecording }\n );\n\n return (\n <>\n
    \n setHasInitialisedRecording(true)}\n />\n
    \n \n );\n};\n\nexport default CallRecording;\n","import { createColumnHelper } from '@tanstack/react-table';\nimport MarketingSourceLogo from 'common/components/icons/marketingSourceLogo';\nimport { FilterNotApplicable } from 'common/components/table/cell-formatters/filterNotApplicatable';\nimport { formatIsoDateTimeStringToDisplayDate } from 'common/utils/LEGACY_timeHelpers';\nimport Blur from 'features/blur/blur';\nimport { StickyOptions } from 'common/components/table/tableTypes';\nimport { ConversionInboundCallViewResponse } from '../conversion-inboundcalls.types';\nimport NavLinkButton from 'common/components/anchors/navlink-button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport MarketingSourceCell from 'common/components/table/cell-formatters/marketing-source-cell';\nimport CallRecording from '../call-recording/call-recording';\nimport { PayloadFieldsCellFormatter } from 'common/components/table/cell-formatters/payloadFieldCellFormatter';\nimport { filterOutStandardQueryFields } from 'common/components/table/cell-formatters/fieldHelpers';\nimport { KeyValuePair } from 'common/types/key-value-pair';\n\nfunction createFields(queryStrings: KeyValuePair[]): any {\n const fields = queryStrings\n .flatMap((qs, index) => [index, qs])\n .filter((qs) => qs instanceof Object) as any;\n\n return fields;\n}\n\nconst columnHelper = createColumnHelper();\n\nconst getCoreColumns = (showConversionId: boolean) => {\n const columns = [\n columnHelper.accessor((row) => row.callStartDate, {\n id: 'callStartDate',\n header: () => Call Start Date,\n enableColumnFilter: false,\n cell: (info) => (\n \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n \n )\n }),\n columnHelper.accessor((row) => row.callerNumber, {\n id: 'callerNumber',\n header: () => Caller Number,\n enableColumnFilter: false,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n }),\n columnHelper.accessor((row) => row, {\n id: 'firstclicksource',\n header: () => First Click Source,\n enableColumnFilter: false,\n cell: (info) => {\n const sources = info.getValue().sources;\n if (sources.length < 1) {\n return '';\n }\n const marketingSource = sources[0];\n const queryStrings =\n info.getValue().firstClick?.firstClickUrlQueryStrings ?? [];\n\n const fields = createFields(queryStrings);\n\n return (\n \n filterOutStandardQueryFields(fields)\n }\n fieldObject={{\n header: marketingSource,\n fields,\n subheader: undefined\n }}\n icon=\"\"\n />\n );\n }\n }),\n columnHelper.accessor((row) => row, {\n id: 'lastclicksource',\n header: () => Last Click Source,\n enableColumnFilter: false,\n cell: (info) => {\n const sources = info.getValue().sources;\n if (sources.length < 1) {\n return <>;\n }\n\n const marketingSource = sources[sources.length - 1];\n\n const queryStrings =\n info.getValue().lastClick?.lastClickUrlQueryStrings ?? [];\n\n const fields = createFields(queryStrings);\n\n return (\n \n filterOutStandardQueryFields(fields)\n }\n fieldObject={{\n header: marketingSource,\n fields,\n subheader: undefined\n }}\n icon=\"\"\n />\n );\n }\n }),\n columnHelper.accessor((row) => row.callResult, {\n id: 'callResult',\n header: () => Call Result,\n enableColumnFilter: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.callDuration, {\n id: 'callDuration',\n header: () => Call Duration,\n enableColumnFilter: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.callLabel, {\n id: 'callLabel',\n header: () => Call Label,\n enableColumnFilter: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.calledNumber, {\n id: 'calledNumber',\n header: () => Called Number,\n enableColumnFilter: false,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n }),\n columnHelper.accessor((row) => row.callEndDate, {\n id: 'callEndDate',\n header: () => Call End Date,\n enableColumnFilter: false,\n cell: (info) => (\n \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n \n )\n })\n ];\n\n const idColumn = [\n columnHelper.accessor((row) => row.id, {\n id: 'id',\n header: () => Conversion ID,\n enableColumnFilter: false,\n cell: (info) => {info.getValue()}\n })\n ];\n\n return showConversionId ? [...idColumn, ...columns] : columns;\n};\n\nconst visitorColumn = columnHelper.accessor((row) => row.visitorId, {\n id: 'Visitor',\n header: () => Visitor,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {\n return (\n \n View\n \n );\n },\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n },\n enableResizing: false,\n size: 100\n});\n\nconst callRecordingColumn = columnHelper.accessor(\n (row) => row.hasCallRecording,\n {\n id: 'CallRecording',\n header: () => Recording,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) =>\n info.getValue() ? (\n \n ) : (\n <>\n ),\n enableResizing: false,\n size: 400\n }\n);\n\nexport const getConversionInboundCallsColumnDefs = (\n conversionIdToggle: boolean\n) => {\n const coreColumns = getCoreColumns(conversionIdToggle);\n\n const simpleColumns = [...coreColumns, callRecordingColumn, visitorColumn];\n\n return simpleColumns;\n};\n\nexport const getConversionInboundCallsDetailedColumnDefs = (\n conversionIdToggle: boolean\n) => {\n const coreColumns = getCoreColumns(conversionIdToggle);\n\n return [\n columnHelper.group({\n id: 'conversion',\n columns: coreColumns\n }),\n columnHelper.group({\n header: 'Web',\n enableColumnFilter: false,\n columns: [\n columnHelper.accessor((row) => row.sources, {\n id: 'sources',\n header: () => Sources,\n enableColumnFilter: false,\n enableSorting: false,\n size: 400,\n cell: (info) =>\n info.getValue().map((value: string, index: number) => (\n
    \n \n {value}\n
    \n ))\n })\n ]\n }),\n columnHelper.group({\n header: 'First Click',\n enableColumnFilter: false,\n columns: [\n columnHelper.accessor((row) => row.firstClick?.source, {\n id: 'firstClick.source',\n header: () => Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.firstClick?.group, {\n id: 'firstClick.group',\n header: () => Group,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => FilterNotApplicable(info.getValue())\n }),\n columnHelper.accessor((row) => row.firstClick?.keywords, {\n id: 'firstClick.keywords',\n header: () => Keywords,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.firstClick?.landingPage, {\n id: 'firstClick.landingPage',\n header: () => Landing Page,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.firstClick?.referrerHost, {\n id: 'firstClick.referrerHost',\n header: () => Referrer Host,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.firstClick?.referrerPath, {\n id: 'firstClick.referrerPath',\n header: () => Referrer Path,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.firstClick?.canonicalUrl, {\n id: 'firstClick.canonicalUrl',\n header: () => Canonical Url,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.firstClick?.utmCampaign, {\n id: 'firstClick.utmCampaign',\n header: () => Utm Campaign,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.firstClick?.utmContent, {\n id: 'firstClick.utmContent',\n header: () => Utm Content,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.firstClick?.utmMedium, {\n id: 'firstClick.utmMedium',\n header: () => Utm Medium,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.firstClick?.utmSource, {\n id: 'firstClick.utmSource',\n header: () => Utm Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.firstClick?.utmTerm, {\n id: 'firstClick.utmTerm',\n header: () => Utm Term,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.firstClick?.utmKeyword, {\n id: 'firstClick.utmKeyword',\n header: () => Utm Keyword,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.firstClick?.device, {\n id: 'firstClick.device',\n header: () => Device,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.firstClick?.placement, {\n id: 'firstClick.placement',\n header: () => Placement,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.firstClick?.creative, {\n id: 'firstClick.creative',\n header: () => Creative,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.firstClick?.campaignId, {\n id: 'firstClick.campaignId',\n header: () => Campaign Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.firstClick?.adGroupId, {\n id: 'firstClick.adGroupId',\n header: () => Adgroup Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.firstClick?.gclid, {\n id: 'firstClick.gclid',\n header: () => Gclid,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n })\n ]\n }),\n columnHelper.group({\n header: 'Last Click',\n enableColumnFilter: false,\n columns: [\n columnHelper.accessor((row) => row.lastClick?.source, {\n id: 'lastClick.source',\n header: () => Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.lastClick?.group, {\n id: 'lastClick.group',\n header: () => Group,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => FilterNotApplicable(info.getValue())\n }),\n columnHelper.accessor((row) => row.lastClick?.keywords, {\n id: 'lastClick.keywords',\n header: () => Keywords,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.lastClick?.landingPage, {\n id: 'lastClick.landingPage',\n header: () => Landing Page,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.lastClick?.referrerHost, {\n id: 'lastClick.referrerHost',\n header: () => Referrer Host,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.lastClick?.referrerPath, {\n id: 'lastClick.referrerPath',\n header: () => Referrer Path,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.lastClick?.canonicalUrl, {\n id: 'lastClick.canonicalUrl',\n header: () => Canonical Url,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastClick?.utmCampaign, {\n id: 'lastClick.utmCampaign',\n header: () => Utm Campaign,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastClick?.utmContent, {\n id: 'lastClick.utmContent',\n header: () => Utm Content,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastClick?.utmMedium, {\n id: 'lastClick.utmMedium',\n header: () => Utm Medium,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastClick?.utmSource, {\n id: 'lastClick.utmSource',\n header: () => Utm Source,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.lastClick?.utmTerm, {\n id: 'lastClick.utmTerm',\n header: () => Utm Term,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastClick?.utmKeyword, {\n id: 'lastClick.utmKeyword',\n header: () => Utm Keyword,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastClick?.device, {\n id: 'lastClick.device',\n header: () => Device,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.lastClick?.placement, {\n id: 'lastClick.placement',\n header: () => Placement,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.lastClick?.creative, {\n id: 'lastClick.creative',\n header: () => Creative,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => info.getValue()\n }),\n columnHelper.accessor((row) => row.lastClick?.campaignId, {\n id: 'lastClick.campaignId',\n header: () => Campaign Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastClick?.adGroupId, {\n id: 'lastClick.adGroupId',\n header: () => Adgroup Id,\n enableColumnFilter: false,\n enableSorting: false,\n cell: (info) => {info.getValue()}\n }),\n columnHelper.accessor((row) => row.lastClick?.gclid, {\n id: 'lastClick.gclid',\n header: () => Gclid,\n enableColumnFilter: false,\n enableSorting: false,\n size: 600,\n cell: (info) => (\n \n {info.getValue()}\n \n )\n })\n ]\n }),\n callRecordingColumn,\n visitorColumn\n ];\n};\n\nexport default getConversionInboundCallsColumnDefs;\n","import { FC, Fragment, useMemo } from 'react';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { PaginatedTable } from 'features/pagination/paginatedTable';\nimport { usePaginatedQuery } from 'features/pagination/hooks/usePaginatedQuery';\nimport {\n useGetConversionInboundCallExportMutation,\n useGetPaginatedConversionInboundCallsQuery,\n usePrefetch\n} from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport getConversionInboundCallsColumnDefs, {\n getConversionInboundCallsDetailedColumnDefs\n} from 'features/conversions/calls/table/get-conversion-inboundcalls-column-defs';\nimport { ConversionViewRequest } from 'features/conversions/forms/types/conversionSimpleViewRequest';\nimport { ViewType } from 'features/data-view-selection/view-type';\nimport ConversionsInteractionBar from 'features/conversions/conversions-interaction-bar';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n selectViewSelectionByComponentId,\n toggleSelection\n} from 'features/data-view-selection/dataViewSelectionSlice';\nimport { ConversionInboundCallExportRequest } from 'features/conversions/calls/conversion-inboundcalls.types';\nimport { selectPaginationOptions } from 'features/pagination/paginationOptionsSlice';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport { ToggleType } from 'features/internal/internal.models';\nimport { selectDateRangeLocalIso } from 'features/date-range-selection/dateRangeSlice';\nimport { ConversionViewResponse } from 'features/conversions/forms/types/conversionViewResponse';\n\nconst ConversionsCall: FC = () => {\n const dispatch = useDispatch();\n\n const defaultComponentId = 'calls-component';\n const { selection: viewType } = useSelector((state: RootState) =>\n selectViewSelectionByComponentId(state, defaultComponentId)\n );\n\n const conversionIdToggle = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayConversionId)\n );\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { startDate, endDate } = useSelector(selectDateRangeLocalIso);\n const paginationOptions = useSelector((state: RootState) =>\n selectPaginationOptions(state, siteId)\n );\n\n const callComponentId = useMemo(() => {\n return `${defaultComponentId}-${viewType ?? ViewType.Simple}`;\n }, [viewType]);\n\n const prefetchPage = usePrefetch('getPaginatedConversionInboundCalls');\n const {\n data: conversionResponse,\n isLoading: conversionRequestIsLoading,\n isFetching: conversionRequestIsFetching\n } = usePaginatedQuery(\n useGetPaginatedConversionInboundCallsQuery,\n prefetchPage,\n callComponentId,\n {\n conversionType: 'Calls'\n } as ConversionViewRequest,\n {\n initialColumnName: 'CallStartDate',\n initialOrderDirection: 'ASC'\n }\n );\n\n const columnDefs = useMemo(() => {\n if (\n !conversionRequestIsLoading &&\n !conversionRequestIsFetching &&\n conversionResponse?.data\n ) {\n const columnDefs =\n viewType === ViewType.Simple\n ? getConversionInboundCallsColumnDefs(\n conversionIdToggle?.enabled ?? false\n )\n : getConversionInboundCallsDetailedColumnDefs(\n conversionIdToggle?.enabled ?? false\n );\n\n return columnDefs;\n }\n return [];\n }, [\n conversionRequestIsFetching,\n conversionRequestIsLoading,\n conversionResponse?.data,\n conversionIdToggle,\n viewType\n ]);\n\n const handleClick = (viewType: ViewType) => {\n dispatch(\n toggleSelection({\n newSelection: viewType,\n componentId: defaultComponentId\n })\n );\n };\n\n const exportRequest: ConversionInboundCallExportRequest = {\n siteId,\n startDate,\n endDate,\n searchTerm: paginationOptions?.searchTerm ?? ''\n };\n\n const [triggerExport, { isLoading: isExporting }] =\n useGetConversionInboundCallExportMutation();\n\n const onTriggerExport = () => {\n void triggerExport(exportRequest);\n };\n\n return (\n <>\n \n \n \n \n row.id}\n getRowData={() => null}\n />\n \n \n \n \n );\n};\n\nexport default ConversionsCall;\n","import { FC, useState } from 'react';\n\nconst CopyToClipboard: FC<{ code: string }> = ({ code }) => {\n const [isCopied, setIsCopied] = useState(false);\n\n const handleCopyClick = () => {\n navigator.clipboard\n .writeText(code)\n .then(() => {\n setIsCopied(true);\n setTimeout(() => {\n setIsCopied(false);\n }, 6000);\n })\n .catch((error) => console.error('Unable to copy to clipboard', error));\n };\n\n return (\n
    \n \n {isCopied ? (\n \n ) : (\n \n )}\n \n
    \n );\n};\n\nexport default CopyToClipboard;\n","import TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC } from 'react';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { useDispatch, useSelector } from 'react-redux';\nimport CopyToClipboard from 'common/components/copy-to-clipboard/copy-to-clipboard';\nimport { selectSiteId } from 'features/topbar/selectedSiteSlice';\n\nexport const SiteSetup: FC = () => {\n const dispatch = useDispatch();\n const siteId = useSelector(selectSiteId);\n\n return (\n \n \n
    \n

    \n Integrating Tracking Tag\n

    \n
    \n
    \n
    \n
    \n

    \n To get started, just drop our tracking tag on your website, and\n within minutes we will collect data about Visitors, Companies,\n Sources, Keywords, Referrals, and Pages.\n

    \n

    \n Simply copy and paste the following code onto each page just\n before the {''} tag:\n

    \n
    \n \n {''}\n \n
    \n \\n var __raconfig = __raconfig || {};\\n __raconfig.uid = \"${siteId}\";\\n __raconfig.action = \"track\";\\n (function () {\\n var ra = document.createElement(\"script\");\\n ra.type = \"text/javascript\";\\n ra.src = \"https://ruler.nyltx.com/lib/1.0/ra-bootstrap.min.js\";\\n var s = document.getElementsByTagName(\"script\")[0];\\n s.parentNode.insertBefore(ra, s);\\n }());\\n`}\n />\n
    \n
    \n
    \n
    \n
    \n \n
    \n

    \n Form Tracking\n

    \n
    \n
    \n
    \n
    \n

    \n For manual form tracking please visit our\n \n {' '}\n documentation.\n \n

    \n
    \n
    \n
    \n
    \n );\n};\n","import TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC } from 'react';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { useDispatch, useSelector } from 'react-redux';\nimport CopyToClipboard from 'common/components/copy-to-clipboard/copy-to-clipboard';\n\nexport const SetupCallTrackingSettings: FC = () => {\n const dispatch = useDispatch();\n\n return (\n \n \n
    \n

    \n Configuring your site\n

    \n
    \n
    \n
    \n
    \n

    \n In order to use phone tracking you must have the tracking tag\n installed.\n

    \n

    \n Then you will need your phone numbers enclosed in a HTML tag.\n Usually a {'

    '} or {''} with a specific\n class name.\n

    \n
    \n \n {'\\n'}\n {\"0800 000 0000\\n\"}\n {'\\n'}\n {\"
    0800 111 11111
    \\n\"}\n {'\\n'}\n {'\\n'}\n {\n \"0800 222 2222\\n\"\n }\n {'\\n'}\n {''}\n
    \n
    \n \n 0800 000 0000\n \n
    0800 111 11111
    \n \n \n 0800 222 2222\n \n `}\n />\n
    \n
    \n
    \n
    \n
    \n \n
    \n

    \n New or additional static and dynamic numbers\n

    \n
    \n
    \n
    \n
    \n

    \n Please email{' '}\n \n support@ruleranalytics.com{' '}\n \n to request phone call tracking or additional numbers\n

    \n

    \n \n Refer to the{' '}\n \n integration guide\n {' '}\n for site configuration details.\n

    \n
    \n
    \n
    \n
    \n );\n};\n","import TileGridContainer from 'features/tiles/tileGridContainer';\nimport { FC } from 'react';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { useDispatch, useSelector } from 'react-redux';\nimport CopyToClipboard from 'common/components/copy-to-clipboard/copy-to-clipboard';\n\nexport const HelpPage: FC = () => {\n const dispatch = useDispatch();\n\n return (\n \n \n
    \n

    \n Documentation\n

    \n
    \n
    \n
    \n
    \n

    \n To get started please follow the set-up instructions in our\n documentation guide:\n

    \n

    \n {' '}\n \n {' '}\n https://ruler-documentation.readme.io/docs\n \n

    \n
    \n
    \n
    \n \n
    \n

    \n Readme\n

    \n
    \n
    \n
    \n
    \n

    \n You can find more information about how to use Ruler in our Help\n Centre:\n

    \n

    \n {' '}\n \n {' '}\n https://help.ruleranalytics.com/en/\n \n

    \n
    \n
    \n
    \n \n
    \n

    \n Support\n

    \n
    \n
    \n
    \n
    \n

    \n If you need any help please\n \n {' '}\n contact us\n \n

    \n
    \n
    \n
    \n
    \n );\n};\n","import DropdownMenu from 'common/components/drop-downs/drop-down-menu';\nimport { Exclusion } from '../exclusions.models';\nimport { useAuth } from 'features/auth/hooks/useAuth';\nimport DropdownMenuButton from 'common/components/drop-downs/dropdown-menu-button';\nimport { useDispatch } from 'react-redux';\nimport { onExclusionToBeDeletedChanged } from './exclusions-table.slice';\nimport { ExclusionLevel } from '../exclusions.enums';\nimport { useState } from 'react';\n\nexport interface ExclusionTableActionsProps {\n exclusion: Exclusion;\n}\n\nexport default function ExclusionsTableActions({\n exclusion\n}: ExclusionTableActionsProps) {\n const dispatch = useDispatch();\n const { isSuperUser } = useAuth();\n const isDisabled = !isSuperUser;\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n return (\n
    \n setIsDropdownOpen(!isDropdownOpen)}\n onClickAway={() => setIsDropdownOpen(false)}\n >\n {exclusion.exclusionLevel === ExclusionLevel.SiteSpecificManual ? (\n dispatch(onExclusionToBeDeletedChanged(exclusion))}\n >\n Delete\n \n ) : (\n <>\n )}\n \n
    \n );\n}\n","import { ColumnDef, createColumnHelper } from '@tanstack/react-table';\nimport { Exclusion } from '../exclusions.models';\nimport { StickyOptions } from 'common/components/table/tableTypes';\nimport ExclusionsTableActions from './exclusions-table-actions';\n\nconst columnHelper = createColumnHelper();\n\nexport const getExclusionsColumnDefs = (isSuperUser: boolean) => {\n const columnDefs = [\n columnHelper.accessor((row) => row.additionalInformation, {\n id: 'AdditionalInformation',\n header: () => 'Additional Information',\n enableColumnFilter: false,\n cell: (info) => (\n
    \n {info.getValue()}\n
    \n ),\n size: 150\n }),\n columnHelper.accessor((row) => row.exclusionCategory, {\n id: 'Category',\n header: () => 'Category',\n cell: (info) =>
    {info.getValue()}
    ,\n size: 20\n }),\n columnHelper.accessor((row) => row.exclusionType, {\n id: 'Type',\n header: () => 'Type',\n cell: (info) =>
    {info.getValue()}
    ,\n size: 60\n })\n ];\n\n if (isSuperUser) {\n columnDefs.push(\n columnHelper.accessor((row) => row.exclusionMatchTarget, {\n id: 'MatchTarget',\n header: () => 'Match Target',\n cell: (info) => (\n
    {info.getValue()}
    \n ),\n size: 45\n }) as ColumnDef\n );\n }\n\n return columnDefs.concat([\n columnHelper.accessor((row) => row.ruleMatchType, {\n id: 'RuleMatchType',\n header: () => 'Rule Match Type',\n cell: (info) =>
    {info.getValue()}
    ,\n size: 45\n }),\n columnHelper.accessor((row) => row.value, {\n id: 'Value',\n header: () => 'Match Value',\n cell: (info) =>
    {info.getValue()}
    ,\n size: 50\n }),\n\n columnHelper.accessor((row) => row.createdDateTime, {\n id: 'Created Date',\n header: () => 'Created Date',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    ,\n size: 50\n }),\n columnHelper.accessor((row) => row.exclusionLevel, {\n id: 'Level',\n header: () => 'Level',\n cell: (info) =>
    {info.getValue()}
    ,\n size: 20\n }),\n columnHelper.accessor(\n (row) =>\n `${row.exclusionLevel}-${row.exclusionCategory}-${row.exclusionType}-${row.exclusionMatchTarget}-${row.ruleMatchType}-${row.additionalInformation}-${row.createdDateTime}-${row.value}`,\n {\n id: 'actions',\n header: () => 'Actions',\n enableColumnFilter: false,\n cell: (info) => (\n \n ),\n size: 5,\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n }\n }\n )\n ] as ColumnDef[]);\n};\n","import {\n ColumnFiltersState,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\nimport { Exclusion } from '../exclusions.models';\nimport { getExclusionsColumnDefs } from './exclusions-column-def';\nimport { CustomTable } from 'common/components/table/customTable';\nimport { useState } from 'react';\nimport { fuzzyFilter } from 'common/components/table/table-functions/filters';\nimport Button from 'common/components/buttons/button';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n onExclusionToBeDeletedChanged,\n selectExclusionToBeDeleted\n} from './exclusions-table.slice';\nimport { onSuccess } from 'features/toast/toast.slice';\nimport { ModalSimple } from 'features/modal/modal-simple';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { useDeleteExclusionMutation } from 'app/apis/commandApi';\n\nexport interface ExclusionsTableProps {\n exclusions: Exclusion[];\n isSuperUser: boolean;\n}\n\nexport const ExclusionsTable = ({\n exclusions,\n isSuperUser\n}: ExclusionsTableProps) => {\n const dispatch = useDispatch();\n const exclusionToBeDeleted = useSelector(selectExclusionToBeDeleted);\n\n const [exclusionToBeDeletedMutation, { isLoading }] =\n useDeleteExclusionMutation();\n\n const onDeleteExclusionConfirmed = () => {\n const exclusionToDelete: Exclusion = {\n ...exclusionToBeDeleted!\n };\n\n void exclusionToBeDeletedMutation(exclusionToDelete)\n .unwrap()\n .then(() => {\n dispatch(\n onSuccess({\n title: 'Exclusion Deleted',\n description: `The Exclusion '${\n exclusionToBeDeleted!.additionalInformation\n }' has been deleted successfully.`\n })\n );\n\n dispatch(onExclusionToBeDeletedChanged());\n })\n .catch(() => dispatch(onExclusionToBeDeletedChanged()));\n };\n\n const columnDefs = getExclusionsColumnDefs(isSuperUser);\n\n // start filtering system\n const [columnFilters, setColumnFilters] = useState([]);\n\n const exclusionsTable = useReactTable({\n data: exclusions,\n columns: columnDefs,\n filterFns: {\n fuzzy: fuzzyFilter\n },\n state: {\n columnFilters\n },\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n enableColumnResizing: true,\n debugTable: false,\n debugHeaders: false,\n debugColumns: false\n });\n\n return (\n <>\n {\n setColumnFilters([]);\n }}\n >\n
    \n \n Reset Filters\n
    \n \n onDeleteExclusionConfirmed()}\n onCancelModal={() => dispatch(onExclusionToBeDeletedChanged())}\n />\n\n \n \n );\n};\n\nexport default ExclusionsTable;\n","import { useGetExclusionsQuery } from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport NavLinkButton from 'common/components/anchors/navlink-button';\nimport Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport Spinner from 'common/components/loading/spinner';\nimport { selectIsSuperUser } from 'features/auth/authenticationSlice';\nimport ExclusionsTable from 'features/exclusions/exclusions-table/exclusions-table';\nimport {\n ExclusionCategory,\n ExclusionLevel\n} from 'features/exclusions/exclusions.enums';\nimport { Exclusion } from 'features/exclusions/exclusions.models';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { FC, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nexport const SettingsExclusionsPage: FC = () => {\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const { data: exclusionsResult, isLoading: isFetchingExclusions } =\n useGetExclusionsQuery({\n siteId\n });\n\n const isSuperUser = useSelector(selectIsSuperUser);\n\n const filteredExclusions =\n useMemo(() => {\n if (isSuperUser) {\n return exclusionsResult;\n }\n\n return exclusionsResult?.filter(\n (exclusion: Exclusion) =>\n exclusion.exclusionLevel === ExclusionLevel.SiteSpecificManual &&\n exclusion.exclusionCategory !== ExclusionCategory.Ignore\n );\n }, [exclusionsResult, isSuperUser]) ?? [];\n\n return (\n \n \n
    \n
    \n

    Your Exclusions

    \n\n \n Create Exclusion\n \n
    \n\n {isFetchingExclusions ? (\n
    \n \n
    \n ) : (\n <>\n {exclusionsResult && exclusionsResult.length > 0 ? (\n <>\n \n \n ) : (\n
    \n \n

    No Exclusions

    \n

    \n You currently have no Exclusions configured.\n

    \n
    \n )}\n \n )}\n
    \n
    \n
    \n );\n};\n","import { useCreateExclusionMutation } from 'app/apis/commandApi';\nimport NavLinkButton from 'common/components/anchors/navlink-button';\nimport Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport SimpleButtonContainerContent from 'common/components/drop-downs/legacy/simpleDropDownButtonContainerContent';\nimport Textbox from 'common/components/inputs/textbox';\nimport {\n ExclusionCategory,\n ExclusionLevel,\n ExclusionMatchTarget,\n ExclusionTypeLabel,\n RuleMatchType,\n typeMatchTargetMap\n} from 'features/exclusions/exclusions.enums';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { onSuccess } from 'features/toast/toast.slice';\nimport { FC, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport { RootState } from 'app/store';\n\nconst matchValueMinLength = 1;\nconst matchValueMaxLength = 1000;\nconst validateMatchValue = (matchValue: string): string[] => {\n if (matchValue.length < matchValueMinLength) {\n return [`Match value must be at least ${matchValueMinLength} character`];\n }\n\n if (matchValue.length > matchValueMaxLength) {\n return [`Match value must be less than ${matchValueMaxLength} characters`];\n }\n\n return [];\n};\n\nconst additionalInformationMinLength = 1;\nconst additionalInformationMaxLength = 1000;\nconst validateAdditionalInformation = (\n additionalInformation: string\n): string[] => {\n if (additionalInformation.length < additionalInformationMinLength) {\n return [\n `Additional Information must be at least ${additionalInformationMinLength} character`\n ];\n }\n\n if (additionalInformation.length > additionalInformationMaxLength) {\n return [\n `Additional Information must be less than ${additionalInformationMaxLength} characters`\n ];\n }\n\n return [];\n};\n\nexport const SettingsExclusionsCreatePage: FC = () => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const [matchValue, onMatchValueChanged] = useState('');\n const [matchValueErrors, setMatchValueErrors] = useState(new Array());\n const [additionalInformation, onAdditionalInformationChanged] = useState('');\n const [additionalInformationErrors, setAdditionalInformationErrors] =\n useState(new Array());\n const [selectedExclusionCategory, onSelectedExclusionCategoryChanged] =\n useState(ExclusionCategory.Block);\n const allExclusionCategories = useMemo(\n () =>\n Object.values(ExclusionCategory).map(\n (exclusionCategory) => {\n return {\n key: exclusionCategory,\n label: exclusionCategory,\n isActive: selectedExclusionCategory === exclusionCategory\n };\n }\n ),\n [selectedExclusionCategory]\n );\n\n const [selectedExclusionType, onSelectedExclusionTypeChanged] = useState(\n ExclusionTypeLabel.IpAddress\n );\n const allExclusionTypes = useMemo(\n () =>\n Object.values(ExclusionTypeLabel).map(\n (exclusionType) => {\n return {\n key: exclusionType,\n label: exclusionType,\n isActive: selectedExclusionType === exclusionType\n };\n }\n ),\n [selectedExclusionType]\n );\n\n const [selectedExclusionMatchTarget, onSelectedExclusionMatchTargetChanged] =\n useState(ExclusionMatchTarget.RemoteAddress);\n const allExclusionMatchTargets = useMemo(\n () =>\n Object.values(ExclusionMatchTarget).map(\n (exclusionMatchTarget) => {\n return {\n key: exclusionMatchTarget,\n label: exclusionMatchTarget,\n isActive: selectedExclusionMatchTarget === exclusionMatchTarget\n };\n }\n ),\n [selectedExclusionMatchTarget]\n );\n\n const [selectedRuleMatchType, onSelectedRuleMatchTypeChanged] = useState(\n RuleMatchType.Equals\n );\n const allRuleMatchTypes = useMemo(\n () =>\n Object.values(RuleMatchType).map((ruleMatchType) => {\n return {\n key: ruleMatchType,\n label: ruleMatchType,\n isActive: selectedRuleMatchType === ruleMatchType\n };\n }),\n [selectedRuleMatchType]\n );\n\n const [createExclusion, { isLoading }] = useCreateExclusionMutation();\n\n const onCreateExclusion = () => {\n void createExclusion({\n siteId,\n exclusionLevel: ExclusionLevel.SiteSpecificManual,\n exclusionCategory: selectedExclusionCategory,\n exclusionType: selectedExclusionType,\n exclusionMatchTarget:\n selectedExclusionCategory === ExclusionCategory.Block\n ? typeMatchTargetMap[selectedExclusionType]\n : selectedExclusionMatchTarget,\n additionalInformation,\n ruleMatchType: selectedRuleMatchType,\n value: matchValue\n })\n .unwrap()\n .then(() => {\n dispatch(\n onSuccess({\n title: 'Exclusion Created',\n description: 'The exclusion has successfully been created!'\n })\n );\n navigate('/settings/exclusions');\n })\n .catch();\n };\n\n return (\n <>\n \n \n
    \n

    \n New Exclusion\n

    \n\n
    \n
    \n \n {\n onSelectedExclusionCategoryChanged(\n exclusionCategory as ExclusionCategory\n );\n }}\n dropDirection={'left'}\n >\n \n \n
    \n\n {selectedExclusionCategory === ExclusionCategory.Ignore ? (\n
    \n \n {\n onSelectedExclusionMatchTargetChanged(\n exclusionMatchTarget as ExclusionMatchTarget\n );\n }}\n dropDirection={'left'}\n >\n \n \n
    \n ) : (\n <>\n )}\n\n
    \n \n {\n onSelectedExclusionTypeChanged(\n exclusionType as ExclusionTypeLabel\n );\n }}\n dropDirection={'left'}\n >\n \n \n
    \n\n
    \n \n {\n onSelectedRuleMatchTypeChanged(\n ruleMatchType as RuleMatchType\n );\n }}\n dropDirection={'left'}\n >\n \n \n
    \n\n
    \n \n Match Value\n \n {\n const errors = validateMatchValue(value);\n setMatchValueErrors(errors);\n onMatchValueChanged(value);\n }}\n errors={matchValueErrors}\n maxCharacterLimit={matchValueMaxLength}\n />\n
    \n\n
    \n \n Additional Information\n \n {\n const errors = validateAdditionalInformation(value);\n setAdditionalInformationErrors(errors);\n onAdditionalInformationChanged(value);\n }}\n errors={additionalInformationErrors}\n maxCharacterLimit={additionalInformationMaxLength}\n />\n
    \n
    \n
    \n \n Create Exclusion\n \n\n
    \n \n Cancel\n \n
    \n
    \n
    \n
    \n
    \n \n );\n};\n","import { createColumnHelper } from '@tanstack/table-core';\nimport { WebhookHistory } from '../webhooks.models';\n\nconst columnHelper = createColumnHelper();\n\nexport const getWebhookHistoryColumnDefs = () => [\n columnHelper.accessor((row) => row.webhookId, {\n id: 'WebhookId',\n header: () => 'Name',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.webhookType, {\n id: 'WebhookType',\n header: () => 'Webhook Type',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.responseHttpStatusCode, {\n id: 'responseHttpStatusCode',\n header: () => 'Response Status Code',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.responseDescription, {\n id: 'responseDescription',\n header: () => 'Response Description',\n enableColumnFilter: false,\n cell: (info) => (\n
    \n {info.getValue()}\n
    \n )\n }),\n columnHelper.accessor((row) => row.lastProcessedDateTimeISO, {\n id: 'lastProcessedDateTimeISO',\n header: () => 'Last Processed Date',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.payloadId, {\n id: 'payloadId',\n header: () => 'Payload Id',\n enableColumnFilter: false,\n cell: (info) => (\n
    {info.getValue()}
    \n )\n })\n];\n","import { CustomTable } from 'common/components/table/customTable';\nimport {\n getCoreRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\nimport { WebhookHistory } from '../webhooks.models';\nimport { getWebhookHistoryColumnDefs } from './webhook-history-column-defs';\n\ninterface WebhooksTableProps {\n webhookHistories: WebhookHistory[];\n}\n\nconst WebhookHistoryTable = ({ webhookHistories }: WebhooksTableProps) => {\n const columnDefs = getWebhookHistoryColumnDefs();\n\n const webhookHistoryTable = useReactTable({\n data: webhookHistories,\n columns: columnDefs,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n enableColumnResizing: true,\n debugTable: false,\n debugHeaders: false,\n debugColumns: false\n });\n\n return (\n \n );\n};\n\nexport default WebhookHistoryTable;\n","import TileGridContainer from 'features/tiles/tileGridContainer';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { RootState } from 'app/store';\nimport { useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport Spinner from 'common/components/loading/spinner';\nimport { useGetWebhookHistoriesQuery } from 'app/apis/queryApi';\nimport { useMemo } from 'react';\nimport WebhookHistoryTable from 'features/webhooks/webhook-history-table/webhook-history-table';\n\nconst SettingsWebhookHistoryPage = () => {\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const { webhookId } = useParams();\n\n const webhookIdNotNull = useMemo(() => webhookId ?? '', [webhookId]);\n\n const { data: webhookHistoryResult, isLoading: isFetchingWebhookHistories } =\n useGetWebhookHistoriesQuery({\n siteId,\n webhookId: webhookIdNotNull\n });\n\n return (\n \n \n
    \n
    \n

    Webhook History

    \n
    \n\n {isFetchingWebhookHistories ? (\n
    \n \n
    \n ) : (\n <>\n {webhookHistoryResult &&\n webhookHistoryResult.webhookHistories.length > 0 ? (\n \n ) : (\n
    \n \n

    No Webhook History

    \n

    \n This webhook has no event history.\n

    \n
    \n )}\n \n )}\n
    \n
    \n
    \n );\n};\n\nexport default SettingsWebhookHistoryPage;\n","import MarketingSourceLogo from 'common/components/icons/marketingSourceLogo';\nimport Pill from 'common/components/pills/pill';\nimport { PillTheme } from 'common/components/pills/pill-theme';\nimport { useSelector } from 'react-redux';\nimport { selectIsIconOnly } from '../paths.slice';\n\ninterface PathPillsProps {\n sources: string[];\n}\n\ninterface PathPill {\n label: string;\n count: number;\n}\n\nconst createPills = (sources: string[]): PathPill[] => {\n return sources.reduce((acc: PathPill[], source: string) => {\n const existingPill = acc.find((pill) => pill.label === source);\n\n if (existingPill) {\n existingPill.count += 1;\n } else {\n acc.push({ label: source, count: 1 });\n }\n return acc;\n }, []);\n};\n\nexport const PathPills = ({ sources }: PathPillsProps) => {\n const isIconOnly = useSelector(selectIsIconOnly);\n const pills = createPills(sources);\n\n return (\n
    \n {pills.map((pill, index) => (\n
    \n {index > 0 ? (\n
    \n

    \n \n \n

    \n
    \n ) : (\n <>\n )}\n \n \n {isIconOnly ? <> :
    {pill.label}
    }\n {pill.count > 1 ? (\n x{pill.count}\n ) : (\n <>\n )}\n \n
    \n ))}\n
    \n );\n};\n","import { KeyValuePair } from 'common/types/key-value-pair';\nimport { selectPathCalculationType } from '../paths.slice';\nimport { useSelector } from 'react-redux';\nimport { PathTimeCalculationTypes } from '../paths.models';\nimport { Duration } from 'luxon';\n\ninterface PathTimeProps {\n timeCalculationsInSeconds: KeyValuePair[];\n}\n\nconst getCalculationsForSelectedCalculation = (\n timeCalculation: KeyValuePair\n) => {\n const seconds = Duration.fromObject({ seconds: timeCalculation.value });\n const days = seconds.as('days');\n const hours = seconds.as('hours');\n const minutes = seconds.as('minutes');\n\n if (days >= 1) {\n return `${Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(\n days\n )} Days`;\n }\n if (hours >= 1) {\n return `${Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(\n hours\n )} Hours`;\n }\n if (minutes >= 1) {\n return `${Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(\n minutes\n )} Minutes`;\n }\n return `${Intl.NumberFormat('en-GB', { maximumFractionDigits: 2 }).format(\n seconds.seconds\n )} Seconds`;\n};\n\nexport const PathTime = ({ timeCalculationsInSeconds }: PathTimeProps) => {\n const selectedCalculationType = useSelector(selectPathCalculationType);\n\n const timeCalculation = timeCalculationsInSeconds.find(\n (tc) => tc.key === selectedCalculationType\n )!;\n const calculatedTime = getCalculationsForSelectedCalculation(timeCalculation);\n return <>{calculatedTime} ;\n};\n","import { createColumnHelper } from '@tanstack/table-core';\nimport { ConversionPath } from '../paths.models';\nimport { PathPills } from './path-pills';\nimport { StickyOptions } from 'common/components/table/tableTypes';\nimport { CurrencyDisplayWrapper } from 'features/currency/currencyDisplayWrapper';\nimport { PathTime } from './path-time';\n\nconst columnHelper = createColumnHelper();\nexport const getPathsColumnDefs = (currencyCode: string) => [\n columnHelper.accessor((row) => row.chronologicalSources, {\n id: 'ChronologicalSources',\n header: () => 'Path',\n enableColumnFilter: false,\n cell: (info) => (\n \n \n \n ),\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'left'\n } as StickyOptions\n },\n size: 350\n }),\n columnHelper.accessor((row) => row.conversionCount, {\n id: 'Conversions',\n header: () => 'Conversions',\n enableColumnFilter: false,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(info.getValue())}\n \n ),\n size: 100\n }),\n columnHelper.accessor((row) => row.totalSales, {\n id: 'TotalSales',\n header: () => 'Sales',\n enableColumnFilter: false,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(info.getValue())}\n \n ),\n size: 100\n }),\n columnHelper.accessor((row) => row.totalRevenue, {\n id: 'TotalRevenue',\n header: () => 'Revenue',\n enableColumnFilter: false,\n cell: (info) => (\n \n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(info.getValue())}\n \n \n ),\n size: 100\n }),\n columnHelper.accessor((row) => row.averageRevenue, {\n id: 'AverageRevnue',\n header: () => 'Avg Revenue',\n enableColumnFilter: false,\n cell: (info) => (\n \n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(info.getValue())}\n \n \n ),\n size: 100\n }),\n columnHelper.accessor((row) => row.timeToConversionInSecondsValues, {\n id: 'AverageTimeToConversion',\n header: () => 'Time To Conversion',\n enableColumnFilter: false,\n cell: (info) => {\n return (\n \n \n \n );\n }\n }),\n columnHelper.accessor((row) => row.averageTouchpointsToConversion, {\n id: 'TouchpointsToConversion',\n header: () => 'Touchpoints To Conversion',\n enableColumnFilter: false,\n cell: (info) => (\n \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(info.getValue())}\n \n ),\n size: 175\n })\n];\n","import { CustomTable } from 'common/components/table/customTable';\nimport {\n SortingState,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\nimport { getPathsColumnDefs } from './paths-column-defs';\nimport { FC, useMemo, useState } from 'react';\nimport { ConversionPath } from '../paths.models';\nimport { CustomTablePaging } from 'common/components/table/tableTypes';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n onNextPage,\n onPageSizeChanged,\n onPreviousPage,\n selectPathsTableState\n} from '../paths.slice';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport { Pagination } from 'common/components/pagination/pagination';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\n\ninterface ConversionPathsTableProps {\n conversionPaths: ConversionPath[];\n}\n\nexport const PathsTable: FC = ({\n conversionPaths\n}) => {\n const dispatch = useDispatch();\n const currencyCode = useSelector(selectCurrencyCode);\n const [sorting, setSorting] = useState([]);\n const columnDefs = getPathsColumnDefs(currencyCode);\n\n const pathsTableState = useSelector(selectPathsTableState);\n\n const pathsTable = useReactTable({\n data: conversionPaths,\n columns: columnDefs,\n state: {\n sorting,\n pagination: {\n pageIndex: pathsTableState.currentPage - 1, // TanStack uses a zero-based index for paging\n pageSize: pathsTableState.currentPageSize\n }\n },\n onSortingChange: setSorting,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n enableColumnResizing: true,\n debugTable: false,\n debugHeaders: false,\n debugColumns: false\n });\n const numberOfTableRows = pathsTable.getFilteredRowModel().rows.length;\n\n const paging = useMemo(() => {\n const paging: CustomTablePaging = {\n isSticky: true,\n currentPage: pathsTableState.currentPage,\n currentPageSize: pathsTableState.currentPageSize,\n pageSizes: pathsTableState.pageSizes.map((pageSize) => {\n const pageSizeString = pageSize.toString();\n return {\n key: pageSizeString,\n label: pageSizeString,\n isActive: pageSize === pathsTableState.currentPageSize\n };\n }),\n totalRecords: numberOfTableRows\n };\n\n return paging;\n }, [pathsTableState, numberOfTableRows]);\n return (\n <>\n \n dispatch(onPreviousPage())}\n onNextPage={() => dispatch(onNextPage())}\n onPageSizeChanged={(pagesize) => dispatch(onPageSizeChanged(pagesize))}\n >\n \n );\n};\nexport default PathsTable;\n","import { FC, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport { useGetConversionPathsQuery } from 'app/apis/queryApi';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { PathsTable } from 'features/conversions/paths/paths-table/paths-table';\nimport {\n onCalculationTypeChanged,\n onIsIconOnlyToggled,\n selectIsIconOnly,\n selectPathCalculationType\n} from 'features/conversions/paths/paths.slice';\nimport Toggle, { ToggleSize } from 'common/components/inputs/toggle';\nimport Loading from 'common/components/loading/loading';\nimport DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport { PathTimeCalculationTypes } from 'features/conversions/paths/paths.models';\nimport SimpleButtonContainerContent from 'common/components/drop-downs/legacy/simpleDropDownButtonContainerContent';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport { ToggleType } from 'features/internal/internal.models';\n\nexport const Paths: FC = () => {\n const dispatch = useDispatch();\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const currentPathCalculationType = useSelector(selectPathCalculationType);\n const currencyCode = useSelector(selectCurrencyCode);\n const dates = useSelector(getDateRangeAsObjects);\n const startDate = dates.startDate.toISOString();\n const endDate = dates.endDate.toISOString();\n const isIconOnly = useSelector(selectIsIconOnly);\n\n const timeToConversionToggle = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayPathsTimeToConversion)\n );\n\n const showTimeToConversion = timeToConversionToggle?.enabled ?? false;\n\n const { data: conversionPathsData, isFetching: isFetchingConversionPaths } =\n useGetConversionPathsQuery({\n siteId,\n startDate,\n endDate,\n currencyCode\n });\n\n const conversionPaths = useMemo(() => {\n if (!isFetchingConversionPaths && conversionPathsData) {\n return conversionPathsData;\n }\n return [];\n }, [conversionPathsData, isFetchingConversionPaths]);\n\n const calculationTypes: DropDownItemType[] = [\n {\n key: PathTimeCalculationTypes.Mean,\n label: PathTimeCalculationTypes.Mean,\n isActive: false\n },\n {\n key: PathTimeCalculationTypes.Median,\n label: PathTimeCalculationTypes.Median,\n isActive: false\n },\n {\n key: PathTimeCalculationTypes.Mode,\n label: PathTimeCalculationTypes.Mode,\n isActive: false\n }\n ];\n\n return (\n <>\n
    \n dispatch(onIsIconOnlyToggled())}\n checked={isIconOnly}\n />\n\n {\n dispatch(\n onCalculationTypeChanged(\n calculationType as PathTimeCalculationTypes\n )\n );\n }}\n dropDirection={'right'}\n >\n {/* Hiding this for now as could be confusing */}\n \n \n
    \n
    \n {isFetchingConversionPaths ? (\n
    \n \n
    \n ) : (\n <>\n {conversionPaths.length > 0 ? (\n
    \n \n
    \n ) : (\n
    \n \n

    \n Paths to Conversions cannot be generated\n

    \n

    \n Please review your\n \n {' '}\n Conversion Tracking Setup\n \n

    \n
    \n )}\n \n )}\n
    \n \n );\n};\n","import { Navigate, Outlet, useLocation } from 'react-router-dom';\nimport { useTypedSelector } from 'common/hooks/store';\nimport { RootState } from 'app/store';\n\nexport function PocOutlet() {\n const { isPocModeActive } = useTypedSelector(\n (state: RootState) => state.pocToggle\n );\n const location = useLocation();\n\n return isPocModeActive ? (\n \n ) : (\n \n );\n}\n","import { useDispatch } from 'react-redux';\nimport { DebugToggle } from '../internal.models';\nimport Toggle, { ToggleSize } from 'common/components/inputs/toggle';\nimport { onDebugToggleChanged } from '../internal-settings.slice';\n\nexport interface DebugToggleActionProps {\n debugToggle: DebugToggle;\n}\n\nexport default function DebugToggleAction({\n debugToggle\n}: DebugToggleActionProps) {\n const dispatch = useDispatch();\n\n return (\n <>\n dispatch(onDebugToggleChanged(debugToggle))}\n >\n \n );\n}\n","import Toggle, { ToggleSize } from 'common/components/inputs/toggle';\nimport { useTypedSelector } from 'common/hooks/store';\nimport { FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { togglePoc } from './pocToggleSlice';\nimport { useAuth } from 'features/auth/hooks/useAuth';\nimport { selectIsSandboxUser } from 'features/auth/authenticationSlice';\n\nconst PocToggle: FC = () => {\n const { isPocModeActive } = useTypedSelector((state) => state.pocToggle);\n const { isSuperUser } = useAuth();\n const isSandboxUser = useSelector(selectIsSandboxUser);\n\n const dispatch = useDispatch();\n\n return (\n <>\n {(isSuperUser || isSandboxUser) && (\n dispatch(togglePoc())}\n />\n )}\n \n );\n};\n\nexport default PocToggle;\n","import { createColumnHelper } from '@tanstack/react-table';\nimport { DebugToggle, ToggleType } from '../internal.models';\nimport DebugToggleAction from './debug-toggle-action';\nimport PocToggle from 'features/poc/poc-toggle/pocToggle';\n\nconst columnHelper = createColumnHelper();\n\nexport const getDebugToggleColumnDefs = () => {\n const columnDefs = [\n columnHelper.accessor((row) => row.name, {\n id: 'Name',\n header: () => 'Toggle Name',\n enableColumnFilter: false,\n cell: (info) => (\n
    \n {info.getValue()}\n
    \n ),\n size: 150\n }),\n columnHelper.accessor((row) => row.enabled, {\n id: 'Enabled',\n header: () => 'Enabled',\n enableColumnFilter: false,\n cell: (info) => {\n if (info.row.original.type === ToggleType.POCToggle) {\n return ;\n } else {\n return ;\n }\n },\n size: 20\n })\n ];\n\n return columnDefs;\n};\n","import {\n ColumnFiltersState,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\nimport { DebugToggle } from '../internal.models';\nimport { getDebugToggleColumnDefs } from './debug-toggle-column-defs';\nimport { CustomTable } from 'common/components/table/customTable';\nimport { useState } from 'react';\nimport { fuzzyFilter } from 'common/components/table/table-functions/filters';\n\nexport interface DebugToggleTableProps {\n debugToggles: DebugToggle[];\n}\n\nexport const DebugToggleTable = ({ debugToggles }: DebugToggleTableProps) => {\n const columnDefs = getDebugToggleColumnDefs();\n\n const [columnFilters, setColumnFilters] = useState([]);\n\n const internalTable = useReactTable({\n data: debugToggles,\n columns: columnDefs,\n filterFns: {\n fuzzy: fuzzyFilter\n },\n state: {\n columnFilters\n },\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n enableColumnResizing: false,\n debugTable: false,\n debugHeaders: false,\n debugColumns: false\n });\n\n return (\n \n );\n};\n\nexport default DebugToggleTable;\n","import { RootState } from 'app/store';\nimport DebugToggleTable from 'features/internal/debug-toggle/debug-toggle-table';\nimport { allDebugToggles } from 'features/internal/internal-settings.slice';\nimport { FC } from 'react';\nimport { useSelector } from 'react-redux';\n\nexport const InternalPage: FC = () => {\n const debugToggles = useSelector((state: RootState) =>\n allDebugToggles(state)\n );\n\n return (\n <>\n \n \n );\n};\n","import { Table, RowData, flexRender, Header, Row } from '@tanstack/react-table';\nimport { Fragment, useEffect, useRef } from 'react';\nimport { useMeasure } from 'react-use';\nimport { TableSortAscButton, TableSortDescButton } from '../tableSortButtons';\nimport { StickyOptions } from '../tableTypes';\nimport { DrillthroughTableInjectableRow } from './drillthrough-table.types';\nimport Blur from 'features/blur/blur';\n\ninterface DrillthroughTableProps {\n table: Table;\n componentId: string;\n heightClass?: string;\n cellClasses?: string;\n totalRow?: DrillthroughTableInjectableRow;\n injectableRows: DrillthroughTableInjectableRow[];\n}\n\nconst tryGetStickyOptions = (meta: any): string => {\n const stickyOptions: StickyOptions | undefined = meta?.stickyOptions;\n\n return stickyOptions?.isEnabled ? `sticky ${stickyOptions.side}-0 z-20` : '';\n};\n\nconst moveStickyRow = (scrollPosition: number, threshold: number, ref: any) => {\n if (scrollPosition >= threshold) {\n ref!.current.style.transform = `translate3d(0, ${scrollPosition - 5}px, 0)`;\n } else {\n ref!.current.style.transform = 'translate3d(0, 0, 0)';\n }\n};\n\nexport function DrillthroughTable({\n table,\n componentId,\n heightClass,\n cellClasses,\n totalRow,\n injectableRows\n}: DrillthroughTableProps) {\n const [ref, { width }] = useMeasure();\n const hasResized = useRef(false);\n\n const getCustomHandlerResizer = (header: Header) => {\n if (!hasResized.current) {\n hasResized.current = true;\n }\n return header.getResizeHandler();\n };\n\n const headerRef = useRef(null);\n const totalRef = useRef(null);\n const scrollRef = useRef(null);\n useEffect(() => {\n const handleScroll = () => {\n const content = scrollRef.current;\n const scrollPosition = +content.scrollTop;\n const headerThreshold = 45;\n moveStickyRow(scrollPosition, headerThreshold, headerRef);\n if (totalRow) {\n const totalThreshold = headerThreshold * 2;\n moveStickyRow(scrollPosition, totalThreshold, totalRef);\n }\n };\n\n scrollRef.current.addEventListener('scroll', handleScroll);\n return () => window.removeEventListener('scroll', handleScroll);\n }, [totalRow]);\n\n return (\n \n
    \n width\n ? table.getCenterTotalSize()\n : width\n }\n }}\n >\n \n {table.getHeaderGroups().map((headerGroup) => (\n \n {headerGroup.headers.map((header) => (\n \n {header.isPlaceholder ? null : (\n <>\n {}\n }\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n
    \n {{\n asc: ,\n desc: \n }[header.column.getIsSorted() as string] ?? null}\n
    \n
    \n {header.column.getCanResize() && (\n \n \n \n )}\n \n )}\n \n ))}\n \n ))}\n \n \n {totalRow ? (\n renderDrillthroughRow(\n 'total',\n 'bg-white relative z-30',\n cellClasses!,\n totalRow,\n totalRef\n )\n ) : (\n <>\n )}\n {table.getRowModel()?.rows?.map((row, rowIndex) => {\n const backgroundColour = getRowColour(rowIndex);\n\n return (\n \n \n {row.getVisibleCells().map((cell) => (\n \n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n \n ))}\n \n {renderDrillthroughRows(\n row,\n injectableRows,\n rowIndex,\n cellClasses\n )}\n \n );\n })}\n \n \n \n \n );\n}\n\nconst renderDrillthroughRows = (\n row: Row,\n allInjectableRows: DrillthroughTableInjectableRow[],\n rowIndex: number,\n cellClasses?: string\n) => {\n const drillthroughRows: DrillthroughTableInjectableRow[] = [];\n addRowChildren(allInjectableRows, row.original.id, drillthroughRows);\n\n return drillthroughRows.map((drillthroughRow, drillthroughRowIndex) => {\n const rowColourIndex = rowIndex + drillthroughRowIndex + 1;\n const rowColour = getRowColour(rowColourIndex);\n\n const previousDrillthroughHasChildren =\n drillthroughRowIndex === 0\n ? !drillthroughRow.hasChildren\n : drillthroughRows[drillthroughRowIndex - 1].hasChildren;\n\n const nextDrillthroughHasChildren =\n drillthroughRowIndex === drillthroughRows.length - 1\n ? !drillthroughRow.hasChildren\n : drillthroughRows[drillthroughRowIndex + 1].hasChildren;\n\n const borderTop =\n !drillthroughRow.hasChildren && previousDrillthroughHasChildren\n ? `border-t border-t-tertiary-600 ${drillthroughRowIndex}`\n : '';\n const borderBottom =\n !drillthroughRow.hasChildren && nextDrillthroughHasChildren\n ? `border-b border-b-tertiary-600 ${drillthroughRowIndex}`\n : '';\n\n const rowClasses = `${rowColour} ${borderTop} ${borderBottom}`;\n\n return renderDrillthroughRow(\n row.id,\n rowClasses,\n cellClasses!,\n drillthroughRow,\n null\n );\n });\n};\n\nfunction renderDrillthroughRow(\n rowId: string,\n rowClasses: string,\n cellClasses: string,\n drillthroughRow: DrillthroughTableInjectableRow,\n ref: any\n): JSX.Element {\n return (\n \n {drillthroughRow.cells.map((cell, cellIndex) => (\n \n {cell.isBlurred ? (\n \n
    \n {cell.element}\n
    \n
    \n ) : (\n
    {cell.element}
    \n )}\n \n ))}\n \n );\n}\n\nconst addRowChildren = (\n allInjectableRows: DrillthroughTableInjectableRow[],\n parentId: string,\n drillthroughRows: DrillthroughTableInjectableRow[]\n): void => {\n const children = allInjectableRows.filter((r) => r.parentId === parentId);\n\n for (const child of children) {\n drillthroughRows.push(child);\n\n addRowChildren(allInjectableRows, child.rowId, drillthroughRows);\n }\n};\n\nfunction getRowColour(rowIndex: number): string {\n return rowIndex % 2 === 0 ? 'bg-neutral-100' : 'bg-white';\n}\n","import { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/store';\nimport {\n onRowToggled,\n selectIsRowOpen\n} from './conversion-influence/conversion-influence-table.slice';\nimport { RowToggledPayload } from './types/insights-table.types';\n\ninterface InsightsTableAccordionProps {\n rowId: string;\n isHidden: boolean;\n}\n\nconst InsightsTableAccordion = ({\n rowId,\n isHidden\n}: InsightsTableAccordionProps) => {\n const dispatch = useDispatch();\n const isOpen = useSelector((state: RootState) =>\n selectIsRowOpen(state, rowId)\n );\n\n const onToggleRow = () => {\n if (isHidden) {\n return;\n }\n\n const payload: RowToggledPayload = {\n rowId\n };\n\n dispatch(onRowToggled(payload));\n };\n\n return (\n <>\n \n \n \n \n );\n};\nexport default InsightsTableAccordion;\n","import { createColumnHelper } from '@tanstack/react-table';\nimport {\n InsightsTableCell,\n InsightsTableRow\n} from '../types/insights-table.types';\nimport InsightsTableAccordion from '../insights-table-accordion';\nimport { AdvancedReportMetricRow } from 'features/advanced-reports/advanced-reports.types';\n\nfunction toPercentage(value: number, total: number): string {\n const percentageValue = (value / total) * 100;\n\n if (isNaN(percentageValue)) {\n return '';\n }\n return `${Math.round(percentageValue)}%`;\n}\n\nconst calculateTotalValue = (\n tableData?: AdvancedReportMetricRow[],\n dataIsLoading?: boolean\n): number => {\n let total = 0;\n if (!dataIsLoading && tableData) {\n total = tableData!\n .filter((row) => row.metricParentId === '')\n .reduce((accumulator, currentObject) => {\n return accumulator + currentObject.metricValue;\n }, 0);\n }\n return total;\n};\n\nconst columnHelper = createColumnHelper();\n\nexport const getConversionInfluenceInsightColumnDefs = (\n allRows?: AdvancedReportMetricRow[],\n isDataLoading?: boolean\n) => {\n return [\n columnHelper.accessor('field', {\n id: 'Field',\n cell: (info) =>\n createInsightsFieldCell(\n info.getValue(),\n info.row.original.id,\n info.row.original.hasChildren\n ),\n header: 'Field',\n enableColumnFilter: false,\n enableSorting: false\n }),\n columnHelper.accessor('occurrences', {\n id: 'Occurrences',\n cell: (info) => info.getValue().primaryValue,\n enableColumnFilter: false,\n enableSorting: false\n }),\n columnHelper.accessor('occurrences', {\n id: 'Percentage',\n cell: (info) =>\n toPercentage(\n +info.getValue().primaryValue,\n +calculateTotalValue(allRows, isDataLoading)\n ),\n header: 'Percentage',\n enableColumnFilter: false,\n enableSorting: false\n })\n ];\n};\n\nexport const createInsightsFieldCell = (\n value: string,\n rowId: string,\n rowHasChildren: boolean\n) => (\n
    \n
    \n \n
    \n {value}\n
    \n);\n\nexport const createOccurrencesCell = (cell: InsightsTableCell) => (\n
    \n
    \n {Intl.NumberFormat('en-GB', {\n maximumFractionDigits: 2\n }).format(cell.primaryValue)}\n
    \n
    \n);\n","import { DrillthroughTableInjectableRow } from 'common/components/table/drillthrough-table/drillthrough-table.types';\nimport { AdvancedReportTableRow } from '../advanced-reports-table.types';\nimport {\n createCallCell,\n createClicksCell,\n createCostCell,\n createCpaCell,\n createCpsCell,\n createFieldCell,\n createImpressionsCell,\n createOpportunityCell,\n createOpportunityValueCell,\n createRevenueCell,\n createRoasCell,\n createRoiCell,\n createSaleCell,\n createWebCell,\n fieldColumnId\n} from '../advanced-reports-column-defs';\nimport { MetricTypes } from 'common/constants/metric-types';\nimport {\n createInsightsFieldCell,\n createOccurrencesCell\n} from 'features/insights/conversion-influence/conversion-influence-column-defs';\nimport { InsightsTableRow } from 'features/insights/types/insights-table.types';\n\nexport const createDrillthroughTableInjectableRow = (\n row: AdvancedReportTableRow,\n currencyCode: string,\n columnIds: string[],\n displayComparisonAttributionModelData: boolean\n): DrillthroughTableInjectableRow => {\n const visibleCells = [\n {\n columnId: fieldColumnId,\n cellId: `${row.id}_${fieldColumnId}`,\n element: createFieldCell(\n row.field,\n row.id,\n row.hasChildren,\n row.shouldBlurField\n ),\n isBlurred: row.shouldBlurField\n },\n {\n columnId: MetricTypes.IMPRESSIONS,\n cellId: `${row.id}_${MetricTypes.IMPRESSIONS}`,\n element: createImpressionsCell(\n row.impressions,\n displayComparisonAttributionModelData\n ),\n isBlurred: false\n },\n {\n columnId: MetricTypes.CLICKS,\n cellId: `${row.id}_${MetricTypes.CLICKS}`,\n element: createClicksCell(\n row.clicks,\n displayComparisonAttributionModelData\n ),\n isBlurred: false\n },\n {\n columnId: MetricTypes.INBOUND_CALL,\n cellId: `${row.id}_${MetricTypes.INBOUND_CALL}`,\n element: createCallCell(row.call, displayComparisonAttributionModelData),\n isBlurred: false\n },\n {\n columnId: MetricTypes.WEB,\n cellId: `${row.id}_${MetricTypes.WEB}`,\n element: createWebCell(row.web, displayComparisonAttributionModelData),\n isBlurred: false\n },\n {\n columnId: MetricTypes.OPPORTUNITIES,\n cellId: `${row.id}_${MetricTypes.OPPORTUNITIES}`,\n element: createOpportunityCell(\n row.opportunity,\n displayComparisonAttributionModelData\n ),\n isBlurred: false\n },\n {\n columnId: MetricTypes.OPPORTUNITY_VALUES,\n cellId: `${row.id}_${MetricTypes.OPPORTUNITY_VALUES}`,\n element: createOpportunityValueCell(\n row.opportunityValue,\n currencyCode,\n displayComparisonAttributionModelData\n ),\n isBlurred: false\n },\n {\n columnId: MetricTypes.REVENUES,\n cellId: `${row.id}_${MetricTypes.REVENUES}`,\n element: createSaleCell(row.sales, displayComparisonAttributionModelData),\n isBlurred: false\n },\n {\n columnId: MetricTypes.REVENUE_VALUES,\n cellId: `${row.id}_${MetricTypes.REVENUE_VALUES}`,\n element: createRevenueCell(\n row.revenue,\n currencyCode,\n displayComparisonAttributionModelData\n ),\n isBlurred: false\n },\n {\n columnId: MetricTypes.COST,\n cellId: `${row.id}_${MetricTypes.COST}`,\n element: createCostCell(\n row.cost,\n currencyCode,\n displayComparisonAttributionModelData\n ),\n isBlurred: false\n },\n {\n columnId: MetricTypes.CPA,\n cellId: `${row.id}_${MetricTypes.CPA}`,\n element: createCpaCell(\n row.cpa,\n currencyCode,\n displayComparisonAttributionModelData\n ),\n isBlurred: false\n },\n {\n columnId: MetricTypes.CPS,\n cellId: `${row.id}_${MetricTypes.CPS}`,\n element: createCpsCell(\n row.cps,\n currencyCode,\n displayComparisonAttributionModelData\n ),\n isBlurred: false\n },\n {\n columnId: MetricTypes.ROI,\n cellId: `${row.id}_${MetricTypes.ROI}`,\n element: createRoiCell(\n row.roi,\n currencyCode,\n displayComparisonAttributionModelData\n ),\n isBlurred: false\n },\n {\n columnId: MetricTypes.ROAS,\n cellId: `${row.id}_${MetricTypes.ROAS}`,\n element: createRoasCell(row.roas, displayComparisonAttributionModelData),\n isBlurred: false\n }\n ].filter((cell) => columnIds.includes(cell.columnId));\n\n const drillthroughRow: DrillthroughTableInjectableRow = {\n rowId: row.id,\n parentId: row.parentId,\n hasChildren: row.hasChildren,\n depth: row.depth,\n cells: visibleCells\n };\n\n return drillthroughRow;\n};\n\nexport const createDrillthroughInsightsTableInjectableRow = (\n row: InsightsTableRow,\n columnIds: string[]\n): DrillthroughTableInjectableRow => {\n const visibleCells = [\n {\n columnId: fieldColumnId,\n cellId: `${row.id}_${fieldColumnId}`,\n element: createInsightsFieldCell(row.field, row.id, row.hasChildren),\n isBlurred: false\n },\n {\n columnId: 'Occurrences',\n cellId: `${row.id}_occurrences`,\n element: createOccurrencesCell(row.occurrences),\n isBlurred: false\n }\n ].filter((cell) => columnIds.includes(cell.columnId));\n\n const drillthroughRow: DrillthroughTableInjectableRow = {\n rowId: row.id,\n parentId: row.parentId,\n hasChildren: row.hasChildren,\n depth: row.depth,\n cells: visibleCells\n };\n\n return drillthroughRow;\n};\n","import { getMetricTypeFriendlyName } from 'features/reports/functions/metric-type-functions';\nimport { DateTime } from 'luxon';\nimport { getSymbolFromCurrency } from 'features/currency/currencySymbolMapHelper';\nimport { MetricTypes } from 'common/constants/metric-types';\nimport { AdvancedReportExport } from '../advanced-reports-table.types';\nimport { KeyValuePair } from 'common/types/key-value-pair';\nimport Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { useRef, useState } from 'react';\nimport { CSVLink } from 'react-csv';\n\nfunction formatDate(date: Date): string {\n return DateTime.fromJSDate(date).toFormat('yyyy-MM-DD');\n}\n\nfunction formatNumberCount(count: number): string {\n return Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }).format(count);\n}\n\nfunction formatNumberToCurrency(cost: number, currency: string): string {\n const formattedCost = Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(cost);\n\n return `${currency}${formattedCost}`;\n}\n\ninterface AdvancedReportsCsvExportButtonProps {\n exportRequest: AdvancedReportExport;\n isDisabled: boolean;\n}\n\nconst AdvancedReportCsvExportButton = ({\n exportRequest,\n isDisabled\n}: AdvancedReportsCsvExportButtonProps) => {\n const [csvData, setCsvData] = useState([]);\n\n const startDateShortIso = formatDate(exportRequest.startDate);\n const endDateShortIso = formatDate(exportRequest.endDate);\n\n const filename = `AdvancedReport_${startDateShortIso}_${endDateShortIso}_${exportRequest.attributionModel}.csv`;\n\n const currencySymbol = getSymbolFromCurrency(exportRequest.currencyCode);\n\n const triggerDownload = () => {\n const rowsAsKeyValues = exportRequest.rows.map<\n KeyValuePair[]\n >((row) => [\n {\n key: 'Field',\n value: row.id\n },\n {\n key: MetricTypes.IMPRESSIONS,\n value: formatNumberCount(row.impressions.primaryValue)\n },\n {\n key: MetricTypes.CLICKS,\n value: formatNumberCount(row.clicks.primaryValue)\n },\n {\n key: MetricTypes.INBOUND_CALL,\n value: formatNumberCount(row.call.primaryValue)\n },\n {\n key: MetricTypes.WEB,\n value: formatNumberCount(row.web.primaryValue)\n },\n {\n key: MetricTypes.OPPORTUNITIES,\n value: formatNumberCount(row.opportunity.primaryValue)\n },\n {\n key: MetricTypes.OPPORTUNITY_VALUES,\n value: formatNumberToCurrency(\n row.opportunityValue.primaryValue,\n currencySymbol\n )\n },\n {\n key: MetricTypes.REVENUES,\n value: formatNumberCount(row.sales.primaryValue)\n },\n {\n key: MetricTypes.REVENUE_VALUES,\n value: formatNumberToCurrency(row.revenue.primaryValue, currencySymbol)\n },\n {\n key: MetricTypes.COST,\n value: formatNumberToCurrency(row.cost.primaryValue, currencySymbol)\n },\n {\n key: MetricTypes.CPA,\n value: formatNumberToCurrency(row.cpa.primaryValue, currencySymbol)\n },\n {\n key: MetricTypes.CPS,\n value: formatNumberToCurrency(row.cps.primaryValue, currencySymbol)\n },\n {\n key: MetricTypes.ROI,\n value: formatNumberToCurrency(row.roi.primaryValue, currencySymbol)\n },\n {\n key: MetricTypes.ROAS,\n value: Intl.NumberFormat('en-GB', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }).format(row.roas.primaryValue)\n }\n ]);\n\n const rowsInColumnDefOrder = rowsAsKeyValues.map((rawRow) =>\n exportRequest.orderedColumnIds.map(\n (columnId) => rawRow.find((cell) => cell.key === columnId)!.value\n )\n );\n\n const friendlyOrderedHeaders = exportRequest.orderedColumnIds.map(\n (header) => getMetricTypeFriendlyName(header)\n );\n\n const newCsvData = [friendlyOrderedHeaders, ...rowsInColumnDefOrder];\n\n setCsvData(newCsvData);\n\n csvDownloadRef.current?.click();\n };\n\n const csvDownloadRef = useRef(null);\n\n return (\n <>\n \n
    \n \n Export\n
    \n \n {csvData.length > 0 ? (\n \n \n \n ) : (\n <>\n )}\n \n );\n};\n\nexport default AdvancedReportCsvExportButton;\n","import { AdvancedReportsQueryCategories } from '../constants/advanced-reports-query-categories';\n\nexport const createCompareCacheKey = (\n queryCategory: AdvancedReportsQueryCategories\n): string => `${queryCategory}_Compare`;\n","import { QueryStatus } from '@reduxjs/toolkit/dist/query';\nimport { AdvancedReportQueryStatus } from '../advanced-reports.types';\n\nexport const areSomeRequestsStillPending = (\n advancedReportQueryStatus: AdvancedReportQueryStatus\n): boolean =>\n advancedReportQueryStatus.impressions === QueryStatus.pending ||\n advancedReportQueryStatus.clicks === QueryStatus.pending ||\n advancedReportQueryStatus.calls === QueryStatus.pending ||\n advancedReportQueryStatus.webs === QueryStatus.pending ||\n advancedReportQueryStatus.opps === QueryStatus.pending ||\n advancedReportQueryStatus.oppValues === QueryStatus.pending ||\n advancedReportQueryStatus.sales === QueryStatus.pending ||\n advancedReportQueryStatus.revenues === QueryStatus.pending ||\n advancedReportQueryStatus.costs === QueryStatus.pending;\n","import { useMemo, useState } from 'react';\nimport {\n fieldColumnId,\n getAdvancedReportColumnDefs\n} from './advanced-reports-column-defs';\nimport {\n ColumnResizeMode,\n SortingState,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\nimport { useSelector } from 'react-redux';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport { selectOpenRowIds } from './advanced-reports-table.slice';\nimport { DrillthroughTable } from 'common/components/table/drillthrough-table/drillthrough-table';\nimport { DrillthroughTableInjectableRow } from 'common/components/table/drillthrough-table/drillthrough-table.types';\nimport {\n createRows,\n createTotalRow\n} from './factories/advanced-report-table-row-factory';\nimport { createDrillthroughTableInjectableRow } from './factories/advanced-report-drillthrough-table-injectable-row-factory';\nimport Tile from 'features/tiles/tile';\nimport { AdvancedReportExport } from './advanced-reports-table.types';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { getSelectedAttributionModel } from 'features/attribute-model/availableAttributionModelsSlice';\nimport AdvancedReportCsvExportButton from './export/advanced-report-csv-export-button';\nimport { sortRows } from './factories/advanced-report-table-helpers';\nimport { useGetAdvancedReportResults } from './hooks/use-get-advanced-report-results';\nimport { QueryStatus } from '@reduxjs/toolkit/dist/query';\nimport { areSomeRequestsStillPending } from '../helpers/query-helpers';\nimport { RootState } from 'app/store';\nimport { selectIsAttributionComparisonActive } from 'features/attribute-compare-model/availableAttributionCompareModelsSlice';\nimport {\n selectHasSegmentFilters,\n selectIsDirty\n} from 'features/segment-controls/segment-controls.slice';\n\ninterface AdvancedReportsTableProps {\n componentId: string;\n}\n\nconst AdvancedReportsTable = (props: AdvancedReportsTableProps) => {\n const { componentId } = props;\n const currencyCode = useSelector(selectCurrencyCode);\n const openRowIds = useSelector(selectOpenRowIds);\n const isDirty = useSelector((state: RootState) =>\n selectIsDirty(state, componentId)\n );\n\n const { startDate, endDate } = useSelector(getDateRangeAsObjects);\n\n const { isPocModeActive } = useSelector(\n (state: RootState) => state.pocToggle\n );\n const attributionModel = useSelector((state: RootState) =>\n getSelectedAttributionModel(state, isPocModeActive)\n );\n\n const [columnResizeMode] = useState('onChange');\n const [sorting, setSorting] = useState([]);\n\n const displayComparisonAttributionModelData = useSelector(\n (state: RootState) => selectIsAttributionComparisonActive(state)\n );\n\n const doesAdvancedReportHaveAFilter = useSelector((state: RootState) =>\n selectHasSegmentFilters(state, componentId)\n );\n\n const {\n primaryRowsResult,\n primaryQueryStatus,\n compareRowsResult,\n compareQueryStatus\n } = useGetAdvancedReportResults(displayComparisonAttributionModelData);\n\n const metricRows = useMemo(() => {\n const metricRows = createRows(primaryRowsResult, compareRowsResult);\n\n const sortedRows =\n sorting.length > 0\n ? sortRows(metricRows, sorting[0].id, sorting[0].desc)\n : sortRows(metricRows, fieldColumnId, false);\n\n return sortedRows;\n }, [primaryRowsResult, compareRowsResult, sorting]);\n\n const columnDefs = getAdvancedReportColumnDefs(\n currencyCode,\n primaryQueryStatus,\n compareQueryStatus,\n displayComparisonAttributionModelData\n );\n\n const areQueriesFinished =\n !areSomeRequestsStillPending(primaryQueryStatus) &&\n !areSomeRequestsStillPending(compareQueryStatus);\n\n const exportRequest = useMemo(() => {\n const reportExport: AdvancedReportExport = {\n orderedColumnIds: columnDefs.map((column) => column.id!),\n rows: metricRows,\n startDate,\n endDate,\n currencyCode,\n attributionModel\n };\n return reportExport;\n }, [\n columnDefs,\n metricRows,\n startDate,\n endDate,\n currencyCode,\n attributionModel\n ]);\n\n const rootRows = useMemo(\n () => metricRows.filter((row) => row.parentId === ''),\n [metricRows]\n );\n\n const drillthroughRows = useMemo(() => {\n const rows = metricRows\n .filter((row) => openRowIds.includes(row.parentId))\n .filter(\n (row) => !(doesAdvancedReportHaveAFilter && row.field === '(not set)')\n )\n .map((row) =>\n createDrillthroughTableInjectableRow(\n row,\n currencyCode,\n columnDefs.map((column) => column.id!),\n displayComparisonAttributionModelData\n )\n );\n\n return rows;\n }, [\n metricRows,\n openRowIds,\n doesAdvancedReportHaveAFilter,\n currencyCode,\n columnDefs,\n displayComparisonAttributionModelData\n ]);\n\n const totalRow = useMemo(() => {\n const totalRow = createTotalRow(rootRows);\n return createDrillthroughTableInjectableRow(\n totalRow,\n currencyCode,\n columnDefs.map((column) => column.id!),\n displayComparisonAttributionModelData\n );\n }, [\n rootRows,\n currencyCode,\n columnDefs,\n displayComparisonAttributionModelData\n ]);\n\n const advancedReportsTable = useReactTable({\n data: rootRows,\n columns: columnDefs,\n manualSorting: true,\n state: {\n sorting\n },\n onSortingChange: setSorting,\n getCoreRowModel: getCoreRowModel(),\n enableColumnResizing: true,\n columnResizeMode\n });\n\n const hasQueryRun =\n primaryQueryStatus.impressions !== QueryStatus.uninitialized &&\n primaryQueryStatus.clicks !== QueryStatus.uninitialized &&\n primaryQueryStatus.calls !== QueryStatus.uninitialized &&\n primaryQueryStatus.webs !== QueryStatus.uninitialized &&\n primaryQueryStatus.opps !== QueryStatus.uninitialized &&\n primaryQueryStatus.oppValues !== QueryStatus.uninitialized &&\n primaryQueryStatus.sales !== QueryStatus.uninitialized &&\n primaryQueryStatus.revenues !== QueryStatus.uninitialized &&\n primaryQueryStatus.costs !== QueryStatus.uninitialized;\n\n return (\n
    \n {metricRows?.length > 0 ? (\n <>\n
    \n \n
    \n \n {isDirty && hasQueryRun ? (\n
    \n \n
    \n

    \n These table results no longer reflect the segment controls.\n Re-run the query to see the results.\n

    \n
    \n
    \n ) : (\n <>\n )}\n
    \n \n
    \n
    \n \n ) : (\n <>\n {isDirty && hasQueryRun && areQueriesFinished ? (\n
    \n \n
    \n

    \n No data found for the selected segments, date range and\n filters.\n

    \n

    \n If you are unable to retrieve any data for this segment.\n Please{' '}\n \n contact support\n {' '}\n to discuss further.\n

    \n
    \n
    \n ) : (\n <>\n )}\n \n )}\n
    \n );\n};\n\nexport default AdvancedReportsTable;\n","import {\n useGetClicksAdvancedReportMutation,\n useGetConversionAdvancedReportMutation,\n useGetCostAdvancedReportMutation,\n useGetOpportunityAdvancedReportMutation,\n useGetRevenueAdvancedReportMutation\n} from 'app/apis/advanced-reports/advanced-report-query-api';\nimport {\n AdvancedReportMetricRowsResult,\n AdvancedReportQueryStatus\n} from 'features/advanced-reports/advanced-reports.types';\nimport { AdvancedReportsQueryCategories } from 'features/advanced-reports/constants/advanced-reports-query-categories';\nimport { createCompareCacheKey } from 'features/advanced-reports/helpers/cache-helpers';\nimport { useMemo } from 'react';\n\nexport function useGetAdvancedReportResults(\n displayComparisonAttributionModelData: boolean\n) {\n const [_getImpressions, primaryImpressionsResult] =\n useGetCostAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.IMPRESSIONS\n });\n const [_getClicks, primaryClicksResult] = useGetClicksAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.CLICKS\n });\n const [_getCalls, primaryCallResult] = useGetConversionAdvancedReportMutation(\n {\n fixedCacheKey: AdvancedReportsQueryCategories.CONVERSION_INBOUNDCALL\n }\n );\n const [_getWebs, primaryWebResult] = useGetConversionAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.CONVERSION_WEB\n });\n const [_getOpps, primaryOppResult] = useGetOpportunityAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.OPPORTUNITY\n });\n const [_getOppValues, primaryOppValueResult] =\n useGetOpportunityAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.OPPORTUNITY_VALUE\n });\n const [_getSales, primarySalesResult] = useGetRevenueAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.SALES\n });\n const [_getRevenues, primaryRevenueResult] =\n useGetRevenueAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.REVENUE\n });\n const [_getAdCosts, primaryCostResult] = useGetCostAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.AD_COST\n });\n\n const [_getImpressionsCompare, compareImpressionsResult] =\n useGetCostAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.IMPRESSIONS\n )\n });\n const [_getClicksCompare, compareClicksResult] =\n useGetClicksAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.CLICKS\n )\n });\n const [_getCallsCompare, compareCallResult] =\n useGetConversionAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.CONVERSION_INBOUNDCALL\n )\n });\n const [_getWebsCompare, compareWebResult] =\n useGetConversionAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.CONVERSION_WEB\n )\n });\n const [_getOppsCompare, compareOppResult] =\n useGetOpportunityAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.OPPORTUNITY\n )\n });\n const [_getOppValuesCompare, compareOppValueResult] =\n useGetOpportunityAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.OPPORTUNITY_VALUE\n )\n });\n const [_getSalesCompare, compareSalesResult] =\n useGetRevenueAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(AdvancedReportsQueryCategories.SALES)\n });\n const [_getRevenuesCompare, compareRevenueResult] =\n useGetRevenueAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.REVENUE\n )\n });\n const [_getAdCostsCompare, compareCostResult] =\n useGetCostAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.AD_COST\n )\n });\n\n return useMemo(() => {\n const primaryRowsResult: AdvancedReportMetricRowsResult = {\n impressions: primaryImpressionsResult.data ?? [],\n clicks: primaryClicksResult.data ?? [],\n calls: primaryCallResult.data ?? [],\n webs: primaryWebResult.data ?? [],\n opps: primaryOppResult.data ?? [],\n oppValues: primaryOppValueResult.data ?? [],\n sales: primarySalesResult.data ?? [],\n revenues: primaryRevenueResult.data ?? [],\n costs: primaryCostResult.data ?? []\n };\n const primaryQueryStatus: AdvancedReportQueryStatus = {\n impressions: primaryImpressionsResult.status,\n clicks: primaryClicksResult.status,\n calls: primaryCallResult.status,\n webs: primaryWebResult.status,\n opps: primaryOppResult.status,\n oppValues: primaryOppValueResult.status,\n sales: primarySalesResult.status,\n revenues: primaryRevenueResult.status,\n costs: primaryCostResult.status\n };\n\n const compareRowsResult: AdvancedReportMetricRowsResult = {\n impressions:\n compareImpressionsResult.data && displayComparisonAttributionModelData\n ? compareImpressionsResult.data\n : [],\n clicks:\n compareClicksResult.data && displayComparisonAttributionModelData\n ? compareClicksResult.data\n : [],\n calls:\n compareCallResult.data && displayComparisonAttributionModelData\n ? compareCallResult.data\n : [],\n webs:\n compareWebResult.data && displayComparisonAttributionModelData\n ? compareWebResult.data\n : [],\n opps:\n compareOppResult.data && displayComparisonAttributionModelData\n ? compareOppResult.data\n : [],\n oppValues:\n compareOppValueResult.data && displayComparisonAttributionModelData\n ? compareOppValueResult.data\n : [],\n sales:\n compareSalesResult.data && displayComparisonAttributionModelData\n ? compareSalesResult.data\n : [],\n revenues:\n compareRevenueResult.data && displayComparisonAttributionModelData\n ? compareRevenueResult.data\n : [],\n costs:\n compareCostResult.data && displayComparisonAttributionModelData\n ? compareCostResult.data\n : []\n };\n const compareQueryStatus: AdvancedReportQueryStatus = {\n impressions: compareImpressionsResult.status,\n clicks: compareClicksResult.status,\n calls: compareCallResult.status,\n webs: compareWebResult.status,\n opps: compareOppResult.status,\n oppValues: compareOppValueResult.status,\n sales: compareSalesResult.status,\n revenues: compareRevenueResult.status,\n costs: compareCostResult.status\n };\n\n return {\n primaryRowsResult,\n primaryQueryStatus,\n compareRowsResult,\n compareQueryStatus\n };\n }, [\n primaryImpressionsResult,\n primaryClicksResult,\n primaryCallResult,\n primaryWebResult,\n primaryOppResult,\n primaryOppValueResult,\n primarySalesResult,\n primaryRevenueResult,\n primaryCostResult,\n compareImpressionsResult,\n compareClicksResult,\n compareCallResult,\n compareWebResult,\n compareOppResult,\n compareOppValueResult,\n compareSalesResult,\n compareRevenueResult,\n compareCostResult,\n displayComparisonAttributionModelData\n ]);\n}\n","import Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\n\ninterface QuerySegmentsButtonProps {\n enabled?: boolean;\n isLoading: boolean;\n onClick: () => void;\n}\n\nconst QuerySegmentsButton = (props: QuerySegmentsButtonProps) => {\n const { enabled, isLoading, onClick } = props;\n\n return (\n \n Query\n \n );\n};\n\nexport default QuerySegmentsButton;\n","import Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { ModalSimple } from 'features/modal/modal-simple';\nimport { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { areSegmentsInitialState } from '../segment-controls.slice';\nimport { RootState } from 'app/store';\n\ninterface ResetSegmentsButtonProps {\n componentId: string;\n onConfirmModal: () => void;\n}\n\nconst ResetSegmentsButton = (props: ResetSegmentsButtonProps) => {\n const { componentId, onConfirmModal } = props;\n const [isModalOpen, setIsModalOpen] = useState(false);\n const isInitialState = useSelector((state: RootState) =>\n areSegmentsInitialState(state, componentId)\n );\n\n const onConfirmResetSegments = () => {\n onConfirmModal();\n setIsModalOpen(false);\n };\n\n return (\n <>\n setIsModalOpen(true)}\n >\n Reset\n \n setIsModalOpen(false)}\n confirmButtonText=\"Reset\"\n onConfirmModal={onConfirmResetSegments}\n />\n \n );\n};\n\nexport default ResetSegmentsButton;\n","import { SegmentItem } from 'features/segment-controls/segment-controls.types';\nimport { queryApi } from '../queryApi';\nimport { GetAllSegmentsDto } from './segmentation-api.types';\n\nfunction isInsightRequest(componentId: string) {\n return componentId === 'ConversionInfluence';\n}\n\nconst segmentsEndpoints = queryApi.injectEndpoints({\n endpoints: (builder) => ({\n getAdvancedReportsSegments: builder.query<\n GetAllSegmentsDto[],\n { siteId: string; componentId: string }\n >({\n query: (request) => `${request.siteId}/segmentation/segments`,\n transformResponse: (response: GetAllSegmentsDto[]) =>\n response.map((r) => ({\n segmentTypeName: r.segmentTypeName,\n segmentTypeDisplayName: r.segmentTypeDisplayName,\n customDataKey: r.customDataKey,\n customDataKeyDisplayName: r.customDataKeyDisplayName,\n isPocOnly: r.isPocOnly\n }))\n }),\n getInsightsSegments: builder.query<\n GetAllSegmentsDto[],\n { siteId: string; componentId: string; insightType: string }\n >({\n query: (request) => {\n return {\n url: `${request.siteId}/insights/segments`,\n params: {\n insightType: request.insightType\n }\n };\n },\n transformResponse: (response: GetAllSegmentsDto[]) =>\n response.map((r) => ({\n segmentTypeName: r.segmentTypeName,\n segmentTypeDisplayName: r.segmentTypeDisplayName,\n customDataKey: r.customDataKey,\n customDataKeyDisplayName: r.customDataKeyDisplayName,\n isPocOnly: r.isPocOnly\n }))\n })\n }),\n overrideExisting: false\n});\n\nexport const segmentationQueryApi = queryApi.injectEndpoints({\n endpoints: (builder) => ({\n getSegments: builder.query<\n GetAllSegmentsDto[],\n {\n siteId: string;\n componentId: string;\n }\n >({\n queryFn: async (request, api) => {\n let resultData;\n if (isInsightRequest(request.componentId)) {\n resultData = await api.dispatch(\n segmentsEndpoints.endpoints.getInsightsSegments.initiate({\n siteId: request.siteId,\n componentId: request.componentId,\n insightType: request.componentId\n })\n );\n } else {\n try {\n resultData = await api.dispatch(\n segmentsEndpoints.endpoints.getAdvancedReportsSegments.initiate({\n siteId: request.siteId,\n componentId: request.componentId\n })\n );\n } catch (ex) {\n console.error(ex);\n }\n }\n return { data: resultData?.data ?? [] };\n }\n })\n }),\n overrideExisting: false\n});\n\nexport const { useGetSegmentsQuery } = segmentationQueryApi;\n","import DropdownMenu from 'common/components/drop-downs/drop-down-menu';\nimport { useMemo, useState } from 'react';\nimport { Segment, SegmentChangedPayload } from '../../segment-controls.types';\nimport DropdownMenuButton from 'common/components/drop-downs/dropdown-menu-button';\nimport { useGetSegmentsQuery } from 'app/apis/segmentation/segmentation-api';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { selectSiteId } from 'features/topbar/selectedSiteSlice';\nimport {\n onSegmentChanged,\n selectSegmentCategories\n} from '../../segment-controls.slice';\nimport { RootState } from 'app/store';\nimport { GetAllSegmentsDto } from 'app/apis/segmentation/segmentation-api.types';\n\ninterface SegmentControlSegmentDropdownProps {\n segment: Segment;\n componentId: string;\n}\n\nfunction getSegmentButtonLabel(\n segment: Segment,\n isFetching: boolean,\n allSegments: GetAllSegmentsDto[]\n): string {\n if (isFetching) {\n return 'Getting Segments';\n }\n\n const label = segment.segmentCategory\n ? allSegments.find((s) => s.customDataKey === segment.segmentCategory)!\n .customDataKeyDisplayName\n : 'Select a segment';\n\n return label;\n}\n\nconst SegmentDropdown = ({\n segment,\n componentId\n}: SegmentControlSegmentDropdownProps) => {\n const dispatch = useDispatch();\n const siteId = useSelector(selectSiteId);\n const segmentCategories = useSelector((state: RootState) =>\n selectSegmentCategories(state, componentId)\n );\n const { isPocModeActive } = useSelector(\n (state: RootState) => state.pocToggle\n );\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const { data: segmentsFromApi, isFetching } = useGetSegmentsQuery({\n siteId,\n componentId\n });\n\n const allowedSegments = useMemo(() => {\n if (!segmentsFromApi) {\n return [];\n }\n\n return isPocModeActive\n ? segmentsFromApi\n : segmentsFromApi.filter((segment) => !segment.isPocOnly);\n }, [segmentsFromApi, isPocModeActive]);\n\n const segmentItems = useMemo(() => {\n const segmentsWhichHaveNotBeenSelected = allowedSegments.filter(\n (d) => !segmentCategories.some((category) => d.customDataKey === category)\n );\n\n const groupedSegments = segmentsWhichHaveNotBeenSelected.reduce<\n { key: string; values: GetAllSegmentsDto[] }[]\n >((groups, segment) => {\n const existingItem = groups.find(\n (group) => group.key === segment.segmentTypeDisplayName\n );\n\n if (existingItem) {\n existingItem.values = [...existingItem.values, segment];\n return groups;\n } else {\n return [\n ...groups,\n {\n key: segment.segmentTypeDisplayName,\n values: [segment]\n }\n ];\n }\n }, []);\n\n return groupedSegments;\n }, [allowedSegments, segmentCategories]);\n\n const dispatchSegmentCategoryChanged = (\n segment: Segment,\n newSegmentCategory: string\n ) => {\n const payload: SegmentChangedPayload = {\n componentId,\n segment: {\n ...segment,\n segmentCategory: newSegmentCategory\n }\n };\n dispatch(onSegmentChanged(payload));\n };\n\n const isSegmentMoneyPenny = (customDataKey: string) =>\n siteId === '5c0036e5e1af8' && customDataKey === 'Moneypenny';\n\n return (\n setIsDropdownOpen(!isDropdownOpen)}\n onClickAway={() => setIsDropdownOpen(false)}\n >\n {segmentItems.map((group, groupIndex) => (\n
    \n
    \n {group.key}\n
    \n {group.values.map((segmentDto, customDataKeyIndex) => (\n {\n dispatchSegmentCategoryChanged(\n segment,\n segmentDto.customDataKey\n );\n setIsDropdownOpen(false);\n }}\n >\n {isSegmentMoneyPenny(segmentDto.customDataKey) ? (\n \n ) : (\n <>\n )}\n \n {segmentDto.customDataKeyDisplayName}\n \n \n ))}\n
    \n ))}\n \n );\n};\nexport default SegmentDropdown;\n","import { createPortal } from 'react-dom';\n\ninterface TooltipProps {\n children: JSX.Element | JSX.Element[];\n widthClass?: string;\n positionClasses: string;\n}\n\n/**\n * For a tooltip to be visible there must be a parent/ancestor element with the classes \"relative\" and \"group\"\n */\nconst TooltipLegacy = ({\n children,\n widthClass,\n positionClasses\n}: TooltipProps) => {\n return (\n
    \n \n
    \n
    {children}
    \n
    \n \n );\n};\n\nexport default TooltipLegacy;\n","import Pill from 'common/components/pills/pill';\nimport {\n SegmentFilter,\n SegmentFilterBeingEditedChangedPayload,\n SegmentFilterDeletedPayload\n} from '../../segment-controls.types';\nimport TooltipLegacy from 'common/components/tooltip/tooltip-legacy';\nimport { PillTheme } from 'common/components/pills/pill-theme';\nimport { useDispatch } from 'react-redux';\nimport {\n onSegmentFilterBeingEditedChanged,\n onSegmentFilterDeleted\n} from '../../segment-controls.slice';\nimport { SegmentControlsFilterValueOperators } from 'features/segment-controls/constants/segment-controls-filter-value-operators';\n\ninterface SegmentControlFilterPillProps {\n componentId: string;\n filter: SegmentFilter;\n}\n\nconst SegmentFilterPill = ({\n filter,\n componentId\n}: SegmentControlFilterPillProps) => {\n const dispatch = useDispatch();\n\n const onEditFilter = () => {\n const payload: SegmentFilterBeingEditedChangedPayload = {\n componentId,\n segmentFilter: filter\n };\n dispatch(onSegmentFilterBeingEditedChanged(payload));\n };\n\n const onDeleteFilter = () => {\n const payload: SegmentFilterDeletedPayload = {\n segmentFilterId: filter.id,\n componentId\n };\n\n dispatch(onSegmentFilterDeleted(payload));\n };\n\n const containsValues = filter.values\n .filter(\n (filter) =>\n filter.valueOperator === SegmentControlsFilterValueOperators.CONTAINS\n )\n .map((filter) => filter.value);\n\n const equalsValues = filter.values\n .filter(\n (filter) =>\n filter.valueOperator === SegmentControlsFilterValueOperators.EQUALS\n )\n .map((filter) => filter.value);\n\n return (\n \n
    \n {containsValues.length > 0 && (\n
    \n Contains: (\n {containsValues.map((value, index) => (\n \n {value}\n {index < containsValues.length - 1 && (\n OR\n )}\n \n ))}\n )\n
    \n )}\n {equalsValues.length > 0 && (\n
    \n {containsValues.length > 0 && (\n OR\n )}\n Equals: (\n {equalsValues.map((value, index) => (\n \n {value}\n {index < equalsValues.length - 1 && (\n OR\n )}\n \n ))}\n )\n
    \n )}\n \n \n
    Edit filter
    \n
    \n \n \n \n \n
    Delete filter
    \n
    \n \n \n
    \n
    \n );\n};\n\nexport default SegmentFilterPill;\n","import { Segment, SegmentFilter } from '../../segment-controls.types';\nimport Pill from 'common/components/pills/pill';\nimport { PillTheme } from 'common/components/pills/pill-theme';\nimport SegmentFilterPill from './segment-filter-pill';\n\nfunction getFiltersBySegment(\n segmentId: string,\n segmentFilters: SegmentFilter[]\n): SegmentFilter[] {\n const currentSegmentFilters = segmentFilters.filter(\n (filter) => filter.segmentId === segmentId\n );\n\n return currentSegmentFilters;\n}\n\ninterface SegmentControlFiltersProps {\n componentId: string;\n segment: Segment;\n segmentFilters: SegmentFilter[];\n}\n\nconst SegmentFilters = ({\n componentId,\n segment,\n segmentFilters\n}: SegmentControlFiltersProps) => {\n return (\n
    \n {getFiltersBySegment(segment.id, segmentFilters).map(\n (filter, filterIndex) => (\n \n {filterIndex !== 0 ? (\n
    \n \n AND\n \n
    \n ) : (\n <>\n )}\n \n
    \n )\n )}\n \n );\n};\n\nexport default SegmentFilters;\n","import DropdownMenu from 'common/components/drop-downs/drop-down-menu';\nimport DropdownMenuButton from 'common/components/drop-downs/dropdown-menu-button';\nimport Textbox from 'common/components/inputs/textbox';\nimport { SegmentControlsFilterValueOperators } from 'features/segment-controls/constants/segment-controls-filter-value-operators';\nimport { useState } from 'react';\nimport { SegmentFilterValue } from '../../segment-controls.types';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport Button from 'common/components/buttons/button';\n\ninterface SegmentControlFilterValueProps {\n filterValue: SegmentFilterValue;\n isFirstFilterValue: boolean;\n onFilterValueChanged: (newFilterValue: SegmentFilterValue) => void;\n onDeleteFilterValue: (filterValue: SegmentFilterValue) => void;\n}\n\nconst SegmentFilterValueDropdown = ({\n filterValue,\n isFirstFilterValue,\n onFilterValueChanged,\n onDeleteFilterValue\n}: SegmentControlFilterValueProps) => {\n const valueOperators = Object.entries(SegmentControlsFilterValueOperators);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const onOperatorChanged = (\n newOperator: SegmentControlsFilterValueOperators\n ) => {\n const newFilterValue: SegmentFilterValue = {\n ...filterValue,\n valueOperator: newOperator\n };\n onFilterValueChanged(newFilterValue);\n };\n\n const onValueChanged = (newValue: string) => {\n const newFilterValue: SegmentFilterValue = {\n ...filterValue,\n value: newValue\n };\n onFilterValueChanged(newFilterValue);\n };\n\n const handleDeleteFilterValue = () => {\n onDeleteFilterValue(filterValue);\n };\n\n return (\n
    \n setIsDropdownOpen(!isDropdownOpen)}\n onClickAway={() => setIsDropdownOpen(false)}\n >\n {valueOperators.map(([_, valueOperator], valueOperatorIndex) => (\n {\n onOperatorChanged(valueOperator);\n setIsDropdownOpen(false);\n }}\n >\n {valueOperator}\n \n ))}\n \n \n {!isFirstFilterValue ? (\n \n \n \n ) : (\n <>\n )}\n
    \n );\n};\n\nexport default SegmentFilterValueDropdown;\n","import DropdownMenu from 'common/components/drop-downs/drop-down-menu';\nimport Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport {\n SegmentFilter,\n SegmentFilterBeingEdited,\n SegmentFilterValue\n} from '../../segment-controls.types';\nimport { SegmentControlsFilterValueOperators } from 'features/segment-controls/constants/segment-controls-filter-value-operators';\nimport SegmentFilterValueDropdown from './segment-filter-value-dropdown';\n\ninterface SegmentControlFilterDropdownProps {\n filter?: SegmentFilterBeingEdited;\n onFilterAdded: () => void;\n onFilterBeingEditedChanged: (filter?: SegmentFilter) => void;\n onFilterSaved: () => void;\n}\n\nconst SegmentFilterDropdown = ({\n filter,\n onFilterAdded,\n onFilterBeingEditedChanged,\n onFilterSaved\n}: SegmentControlFilterDropdownProps) => {\n const onDropdownClicked = () => {\n onFilterAdded();\n };\n\n const onCloseDropdown = () => {\n if (filter) {\n onFilterBeingEditedChanged(undefined);\n }\n };\n\n const onFilterValueChanged = (\n newFilterValue: SegmentFilterValue,\n newFilterValueIndex: number\n ) => {\n const filterWithChanges: SegmentFilter = {\n ...filter!,\n values: filter!.values.map((value, valueIndex) =>\n valueIndex === newFilterValueIndex ? newFilterValue : value\n )\n };\n onFilterBeingEditedChanged(filterWithChanges);\n };\n\n const onFilterValueAdded = () => {\n const filterWithChanges: SegmentFilter = {\n ...filter!,\n values: [\n ...filter!.values,\n { value: '', valueOperator: SegmentControlsFilterValueOperators.EQUALS }\n ]\n };\n onFilterBeingEditedChanged(filterWithChanges);\n };\n\n const deleteFilterValue = (valueToDelete: SegmentFilterValue) => {\n const updatedValues = filter!.values.filter(\n (value) => value !== valueToDelete\n );\n const filterWithChanges: SegmentFilter = {\n ...filter!,\n values: updatedValues\n };\n onFilterBeingEditedChanged(filterWithChanges);\n };\n\n return (\n
    \n \n {filter ? (\n
    \n
    {filter.title}
    \n {filter.values.map((value, index) => (\n
    \n \n onFilterValueChanged(newFilterValue, index)\n }\n onDeleteFilterValue={() => deleteFilterValue(value)}\n />\n
    \n ))}\n
    \n
    \n \n OR\n \n
    \n \n Done\n \n
    \n
    \n ) : (\n <>\n )}\n \n
    \n );\n};\n\nexport default SegmentFilterDropdown;\n","import { useDispatch, useSelector } from 'react-redux';\nimport {\n onSegmentAdded,\n selectAreSegmentsValid,\n selectHighestSegmentOrder\n} from '../../segment-controls.slice';\nimport { SegmentChangedPayload } from '../../segment-controls.types';\nimport { createSegment } from '../../factories/segment-factory';\nimport TooltipLegacy from 'common/components/tooltip/tooltip-legacy';\nimport { RootState } from 'app/store';\n\ninterface AddSegmentButtonProps {\n componentId: string;\n}\n\nconst AddSegmentButton = (props: AddSegmentButtonProps) => {\n const { componentId } = props;\n const dispatch = useDispatch();\n const highestExistingSegmentOrder = useSelector((state: RootState) =>\n selectHighestSegmentOrder(state, componentId)\n );\n const isEnabled = useSelector((state: RootState) =>\n selectAreSegmentsValid(state, componentId)\n );\n\n const onAddSegment = () => {\n const payload: SegmentChangedPayload = {\n componentId,\n segment: createSegment(highestExistingSegmentOrder + 1)\n };\n\n dispatch(onSegmentAdded(payload));\n };\n\n const styleClasses = isEnabled\n ? 'text-primary-300 hover:text-primary-500'\n : 'text-neutral-400';\n\n return (\n \n {!isEnabled ? (\n \n
    \n Please select a segment\n
    \n
    \n ) : (\n <>\n )}\n Add Segment\n \n );\n};\nexport default AddSegmentButton;\n","import Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { ModalSimple } from 'features/modal/modal-simple';\nimport {\n Segment,\n SegmentFilter,\n SegmentFilterBeingEdited\n} from '../segment-controls.types';\nimport { useState } from 'react';\nimport SegmentDropdown from './segments/segment-dropdown';\nimport SegmentFilters from './filters/segment-filters';\nimport SegmentFilterDropdown from './filters/segment-filter-dropdown';\nimport AddSegmentButton from './segments/add-segment-button';\n\ninterface SegmentControlProps {\n componentId: string;\n segment: Segment;\n isFirstSegment: boolean;\n filterBeingEdited?: SegmentFilterBeingEdited;\n filters: SegmentFilter[];\n isLastSegment: boolean;\n hideAddBtn: boolean;\n onDeleteSegment: (segment: Segment) => void;\n onFilterAdded: (segment: Segment) => void;\n onFilterBeingEditedChanged: (filter: SegmentFilter | undefined) => void;\n onFilterSaved: () => void;\n}\n\nconst SegmentControl = ({\n componentId,\n segment,\n isFirstSegment,\n filterBeingEdited,\n filters,\n isLastSegment,\n hideAddBtn,\n onDeleteSegment,\n onFilterAdded,\n onFilterBeingEditedChanged,\n onFilterSaved\n}: SegmentControlProps) => {\n const [segmentToDelete, setSegmentToDelete] = useState();\n\n const onSetDeleteSegment = (segment?: Segment) => {\n setSegmentToDelete(segment);\n };\n\n const handleOnDeleteSegment = () => {\n onDeleteSegment(segmentToDelete!);\n onSetDeleteSegment();\n };\n\n return (\n
    \n
    \n
    \n \n
    \n\n
    \n {!isFirstSegment ? (\n onSetDeleteSegment(segment)}\n >\n \n \n ) : (\n <>\n )}\n onSetDeleteSegment()}\n onConfirmModal={handleOnDeleteSegment}\n confirmButtonText=\"Delete Segment\"\n description={`Are you sure you want to delete segment ${segment.segmentCategory}`}\n >\n
    \n
    \n \n
    \n
    \n onFilterAdded(segment)}\n onFilterBeingEditedChanged={onFilterBeingEditedChanged}\n onFilterSaved={onFilterSaved}\n />\n
    \n
    \n {isLastSegment && !hideAddBtn ? (\n
    \n \n
    \n ) : (\n <>\n )}\n
    \n );\n};\n\nexport default SegmentControl;\n","import { useDispatch, useSelector } from 'react-redux';\nimport {\n onSegmentDeleted,\n onSegmentFilterAdded,\n onSegmentFilterBeingEditedChanged,\n onSegmentFilterChanged,\n selectFilterBeingEdited,\n selectSegmentFilters,\n selectSegmentsOrdered\n} from '../segment-controls.slice';\nimport {\n Segment,\n SegmentChangedPayload,\n SegmentFilter,\n SegmentFilterBeingEdited,\n SegmentFilterBeingEditedChangedPayload,\n SegmentFilterChangedPayload\n} from '../segment-controls.types';\nimport SegmentControl from './segment-control';\nimport { RootState } from 'app/store';\n\nfunction getFilterBeingEditedBySegmentId(\n segmentId: string,\n filterBeingEdited?: SegmentFilterBeingEdited\n): SegmentFilterBeingEdited | undefined {\n if (filterBeingEdited?.segmentId === segmentId) {\n return filterBeingEdited;\n }\n\n return undefined;\n}\n\ninterface SegmentControlsProps {\n componentId: string;\n limit?: number;\n}\n\nconst SegmentControls = (props: SegmentControlsProps) => {\n const { componentId, limit } = props;\n const dispatch = useDispatch();\n const segments = useSelector((state: RootState) =>\n selectSegmentsOrdered(state, componentId)\n );\n const segmentFilters = useSelector((state: RootState) =>\n selectSegmentFilters(state, componentId)\n );\n const filterBeingEdited = useSelector((state: RootState) =>\n selectFilterBeingEdited(state, componentId)\n );\n\n const dispatchOnFilterAdded = (segment: Segment) => {\n const payload: SegmentFilterChangedPayload = {\n componentId,\n segment\n };\n\n dispatch(onSegmentFilterAdded(payload));\n };\n\n const dispatchOnSegmentFilterBeingEditedChanged = (\n segmentFilter?: SegmentFilter\n ) => {\n const payload: SegmentFilterBeingEditedChangedPayload = {\n componentId,\n segmentFilter\n };\n\n dispatch(onSegmentFilterBeingEditedChanged(payload));\n };\n\n const dispatchOnSegmentDeleted = (segmentToDelete: Segment) => {\n const payload: SegmentChangedPayload = {\n componentId,\n segment: segmentToDelete\n };\n dispatch(onSegmentDeleted(payload));\n };\n\n const dispatchOnSaveSegmentFilter = () => {\n const payload: SegmentFilterChangedPayload = {\n componentId\n };\n dispatch(onSegmentFilterChanged(payload));\n };\n\n return (\n
    \n {segments.map((segment, segmentIndex) => (\n \n \n
    \n ))}\n \n );\n};\n\nexport default SegmentControls;\n","import {\n useGetClicksAdvancedReportMutation,\n useGetConversionAdvancedReportMutation,\n useGetCostAdvancedReportMutation,\n useGetOpportunityAdvancedReportMutation,\n useGetRevenueAdvancedReportMutation\n} from 'app/apis/advanced-reports/advanced-report-query-api';\nimport AdvancedReportsTable from 'features/advanced-reports/table/advanced-reports-table';\nimport AttributionCompareButton from 'features/attribute-compare-model/attributeCompareButton';\nimport AttributionButton from 'features/attribute-model/attributeButton';\nimport QuerySegmentsButton from 'features/segment-controls/query-segments/query-segments-button';\nimport ResetSegmentsButton from 'features/segment-controls/reset-segments/reset-segments-button';\nimport SegmentControls from 'features/segment-controls/segment-controls/segment-controls';\nimport Tile from 'features/tiles/tile';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { AdvancedReportsQueryCategories } from 'features/advanced-reports/constants/advanced-reports-query-categories';\nimport { createCompareCacheKey } from 'features/advanced-reports/helpers/cache-helpers';\nimport { resetAdvancedReports } from 'features/advanced-reports/advanced-reports.middleware';\nimport { AdvancedReportQueryRequestDto } from 'features/advanced-reports/advanced-reports.types';\nimport { createAdvancedReportRequest } from 'features/segment-controls/factories/query-segments-request-factory';\nimport { selectSiteId } from 'features/topbar/selectedSiteSlice';\nimport { selectCurrencyCode } from 'features/settings/settingsSlice';\nimport {\n getSelectedAttributionCompareModelString,\n selectIsAttributionComparisonActive\n} from 'features/attribute-compare-model/availableAttributionCompareModelsSlice';\nimport { RootState } from 'app/store';\nimport {\n selectCanRunQuery,\n selectSegmentFilters,\n selectValidSegments\n} from 'features/segment-controls/segment-controls.slice';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { getSelectedAttributionModel } from 'features/attribute-model/availableAttributionModelsSlice';\nimport { QueryStatus } from '@reduxjs/toolkit/query';\n\nconst AdvancedReportsPage = () => {\n const componentId: string = 'AdvancedReports';\n const canRunQuery = useSelector((state: RootState) =>\n selectCanRunQuery(state, componentId)\n );\n const dispatch = useDispatch();\n const siteId = useSelector(selectSiteId);\n const { isPocModeActive } = useSelector(\n (state: RootState) => state.pocToggle\n );\n const currencyCode = useSelector(selectCurrencyCode);\n const primaryAttributionModel = useSelector((state: RootState) =>\n getSelectedAttributionModel(state, isPocModeActive)\n );\n\n const isCompareSelected = useSelector(selectIsAttributionComparisonActive);\n const compareAttributionModel = useSelector((state: RootState) =>\n getSelectedAttributionCompareModelString(state, isPocModeActive)\n );\n\n const segments = useSelector((state: RootState) =>\n selectValidSegments(state, componentId)\n );\n const segmentFilters = useSelector((state: RootState) =>\n selectSegmentFilters(state, componentId)\n );\n const dates = useSelector(getDateRangeAsObjects);\n\n const createRequest = (\n queryCategory: AdvancedReportsQueryCategories,\n attributionModel: string\n ): AdvancedReportQueryRequestDto => {\n return createAdvancedReportRequest(\n siteId,\n queryCategory,\n currencyCode,\n attributionModel,\n segments,\n segmentFilters ?? [],\n dates\n );\n };\n\n const [getClicks, clicksResult] = useGetClicksAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.CLICKS\n });\n const [getConversionInboundCalls, callResult] =\n useGetConversionAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.CONVERSION_INBOUNDCALL\n });\n const [getConversionWebs, webResult] = useGetConversionAdvancedReportMutation(\n {\n fixedCacheKey: AdvancedReportsQueryCategories.CONVERSION_WEB\n }\n );\n const [getOpportunities, oppResult] = useGetOpportunityAdvancedReportMutation(\n {\n fixedCacheKey: AdvancedReportsQueryCategories.OPPORTUNITY\n }\n );\n const [getOpportunityValues, oppValueResult] =\n useGetOpportunityAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.OPPORTUNITY_VALUE\n });\n const [getSales, salesResult] = useGetRevenueAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.SALES\n });\n const [getRevenues, revenueResult] = useGetRevenueAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.REVENUE\n });\n const [getCosts, costResult] = useGetCostAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.AD_COST\n });\n const [getImpressions, impressionsResult] = useGetCostAdvancedReportMutation({\n fixedCacheKey: AdvancedReportsQueryCategories.IMPRESSIONS\n });\n const [compareGetImpressions, compareImpressionsResult] =\n useGetCostAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.IMPRESSIONS\n )\n });\n\n const [compareGetClicks, compareClicksResult] =\n useGetClicksAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.CLICKS\n )\n });\n const [compareGetCalls, compareCallResult] =\n useGetConversionAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.CONVERSION_INBOUNDCALL\n )\n });\n const [compareGetWebs, compareWebResult] =\n useGetConversionAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.CONVERSION_WEB\n )\n });\n const [compareGetOpps, compareOppResult] =\n useGetOpportunityAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.OPPORTUNITY\n )\n });\n const [compareGetOppalues, compareOppValueResult] =\n useGetOpportunityAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.OPPORTUNITY_VALUE\n )\n });\n const [compareGetSales, compareSalesResult] =\n useGetRevenueAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(AdvancedReportsQueryCategories.SALES)\n });\n const [compareGetRevenues, compareRevenueResult] =\n useGetRevenueAdvancedReportMutation({\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.REVENUE\n )\n });\n const [compareGetCosts, compareCostResult] = useGetCostAdvancedReportMutation(\n {\n fixedCacheKey: createCompareCacheKey(\n AdvancedReportsQueryCategories.AD_COST\n )\n }\n );\n\n const onConfirmResetSegments = () => {\n clicksResult.reset();\n callResult.reset();\n webResult.reset();\n oppResult.reset();\n oppValueResult.reset();\n salesResult.reset();\n revenueResult.reset();\n costResult.reset();\n impressionsResult.reset();\n compareImpressionsResult.reset();\n compareClicksResult.reset();\n compareCallResult.reset();\n compareWebResult.reset();\n compareOppResult.reset();\n compareOppValueResult.reset();\n compareSalesResult.reset();\n compareRevenueResult.reset();\n compareCostResult.reset();\n dispatch(resetAdvancedReports());\n };\n\n const runQuerySegmentsMutation = () => {\n const impressionsRequest = createRequest(\n AdvancedReportsQueryCategories.IMPRESSIONS,\n primaryAttributionModel\n );\n const clicksRequest = createRequest(\n AdvancedReportsQueryCategories.CLICKS,\n primaryAttributionModel\n );\n const conversionInboundCallRequest = createRequest(\n AdvancedReportsQueryCategories.CONVERSION_INBOUNDCALL,\n primaryAttributionModel\n );\n const conversionWebRequest = createRequest(\n AdvancedReportsQueryCategories.CONVERSION_WEB,\n primaryAttributionModel\n );\n const opportunityRequest = createRequest(\n AdvancedReportsQueryCategories.OPPORTUNITY,\n primaryAttributionModel\n );\n const opportunityValueRequest = createRequest(\n AdvancedReportsQueryCategories.OPPORTUNITY_VALUE,\n primaryAttributionModel\n );\n const salesRequest = createRequest(\n AdvancedReportsQueryCategories.SALES,\n primaryAttributionModel\n );\n const revenueRequest = createRequest(\n AdvancedReportsQueryCategories.REVENUE,\n primaryAttributionModel\n );\n const adCostRequest = createRequest(\n AdvancedReportsQueryCategories.AD_COST,\n primaryAttributionModel\n );\n void getImpressions(impressionsRequest);\n void getClicks(clicksRequest);\n void getConversionInboundCalls(conversionInboundCallRequest);\n void getConversionWebs(conversionWebRequest);\n void getOpportunities(opportunityRequest);\n void getOpportunityValues(opportunityValueRequest);\n void getSales(salesRequest);\n void getRevenues(revenueRequest);\n void getCosts(adCostRequest);\n\n if (isCompareSelected) {\n void compareGetImpressions(\n createRequest(\n AdvancedReportsQueryCategories.IMPRESSIONS,\n compareAttributionModel\n )\n );\n void compareGetClicks(\n createRequest(\n AdvancedReportsQueryCategories.CLICKS,\n compareAttributionModel\n )\n );\n void compareGetCalls(\n createRequest(\n AdvancedReportsQueryCategories.CONVERSION_INBOUNDCALL,\n compareAttributionModel\n )\n );\n void compareGetWebs(\n createRequest(\n AdvancedReportsQueryCategories.CONVERSION_WEB,\n compareAttributionModel\n )\n );\n void compareGetOpps(\n createRequest(\n AdvancedReportsQueryCategories.OPPORTUNITY,\n compareAttributionModel\n )\n );\n void compareGetOppalues(\n createRequest(\n AdvancedReportsQueryCategories.OPPORTUNITY_VALUE,\n compareAttributionModel\n )\n );\n void compareGetSales(\n createRequest(\n AdvancedReportsQueryCategories.SALES,\n compareAttributionModel\n )\n );\n void compareGetRevenues(\n createRequest(\n AdvancedReportsQueryCategories.REVENUE,\n compareAttributionModel\n )\n );\n void compareGetCosts(\n createRequest(\n AdvancedReportsQueryCategories.AD_COST,\n compareAttributionModel\n )\n );\n }\n };\n\n const isGettingQuery =\n clicksResult.status === QueryStatus.pending ||\n impressionsResult.status === QueryStatus.pending ||\n callResult.status === QueryStatus.pending ||\n webResult.status === QueryStatus.pending ||\n oppResult.status === QueryStatus.pending ||\n oppValueResult.status === QueryStatus.pending ||\n salesResult.status === QueryStatus.pending ||\n revenueResult.status === QueryStatus.pending ||\n costResult.status === QueryStatus.pending ||\n compareClicksResult.status === QueryStatus.pending ||\n compareImpressionsResult.status === QueryStatus.pending ||\n compareCallResult.status === QueryStatus.pending ||\n compareWebResult.status === QueryStatus.pending ||\n compareOppResult.status === QueryStatus.pending ||\n compareOppValueResult.status === QueryStatus.pending ||\n compareSalesResult.status === QueryStatus.pending ||\n compareRevenueResult.status === QueryStatus.pending ||\n compareCostResult.status === QueryStatus.pending;\n\n const isButtonEnabled =\n canRunQuery &&\n !impressionsResult.isLoading &&\n !clicksResult.isLoading &&\n !callResult.isLoading &&\n !webResult.isLoading &&\n !oppResult.isLoading &&\n !oppValueResult.isLoading &&\n !salesResult.isLoading &&\n !revenueResult.isLoading &&\n !costResult.isLoading &&\n !compareImpressionsResult.isLoading &&\n !compareClicksResult.isLoading &&\n !compareCallResult.isLoading &&\n !compareWebResult.isLoading &&\n !compareOppResult.isLoading &&\n !compareOppValueResult.isLoading &&\n !compareSalesResult.isLoading &&\n !compareRevenueResult.isLoading &&\n !compareCostResult.isLoading;\n\n return (\n <>\n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n\n
    \n \n
    \n \n );\n};\n\nexport default AdvancedReportsPage;\n","export enum InsightTypes {\n CONVERSION_INFLUENCE = 'ConversionInfluence'\n}\n","import { DateRangeValue } from 'features/date-range-selection/dateRangeSlice';\nimport { Segment, SegmentFilter } from '../segment-controls.types';\nimport { AdvancedReportsQueryCategories } from 'features/advanced-reports/constants/advanced-reports-query-categories';\nimport {\n AdvancedReportQueryRequestDto,\n GetAdvancedReportQuerySegment,\n GetAdvancedReportQuerySegmentFilter,\n GetAdvancedReportQuerySegmentFilterValue\n} from 'features/advanced-reports/advanced-reports.types';\nimport { toLocalIso } from 'common/utils/date-helpers';\nimport { InsightTypes } from 'features/insights/constants/insight-types';\nimport {\n GetInsightQuerySegmentFilter,\n GetInsightsQuerySegment,\n GetInsightsQuerySegmentFilterValue,\n InsightQueryRequestDto\n} from 'features/insights/types/insights.types';\n\nexport const createAdvancedReportRequest = (\n siteId: string,\n queryCategory: AdvancedReportsQueryCategories,\n currencyCode: string,\n attributionModelName: string,\n segments: Segment[],\n segmentFilters: SegmentFilter[],\n dates: DateRangeValue\n): AdvancedReportQueryRequestDto => {\n const segmentRequests = segments.map((segment) =>\n createAdvancedReportSegmentRequest(segment, segmentFilters)\n );\n\n const result: AdvancedReportQueryRequestDto = {\n siteId,\n queryCategory,\n currencyCode,\n attributionModelName,\n segmentRequests,\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate)\n };\n\n return result;\n};\n\nexport const createInsightsReportRequest = (\n siteId: string,\n insightType: InsightTypes,\n segments: Segment[],\n segmentFilters: SegmentFilter[],\n dates: DateRangeValue\n): InsightQueryRequestDto => {\n const segmentRequests = segments.map((segment) =>\n createInsightSegmentRequest(segment, segmentFilters)\n );\n\n const result: InsightQueryRequestDto = {\n siteId,\n insightType,\n startDate: toLocalIso(dates.startDate),\n endDate: toLocalIso(dates.endDate),\n segmentRequests\n };\n\n return result;\n};\n\nfunction createAdvancedReportSegmentRequest(\n segment: Segment,\n segmentFilters: SegmentFilter[]\n): GetAdvancedReportQuerySegment {\n const currentSegmentFilters = segmentFilters\n .filter((filter) => filter.segmentId === segment.id)\n .map((filter) => ({\n values: filter.values.map(\n (filterValue) => ({\n value: filterValue.value,\n valueOperator: filterValue.valueOperator\n })\n )\n }));\n\n const request: GetAdvancedReportQuerySegment = {\n segmentId: segment.id,\n order: segment.order,\n segmentType: segment.segmentType,\n segmentCategory: segment.segmentCategory,\n filters: currentSegmentFilters\n };\n\n return request;\n}\n\nfunction createInsightSegmentRequest(\n segment: Segment,\n segmentFilters: SegmentFilter[]\n): GetInsightsQuerySegment {\n const currentSegmentFilters = segmentFilters\n .filter((filter) => filter.segmentId === segment.id)\n .map((filter) => ({\n values: filter.values.map(\n (filterValue) => ({\n value: filterValue.value,\n valueOperator: filterValue.valueOperator\n })\n )\n }));\n\n const request: GetInsightsQuerySegment = {\n segmentId: segment.id,\n order: segment.order,\n segmentType: segment.segmentType,\n segmentCategory: segment.segmentCategory,\n filters: currentSegmentFilters\n };\n\n return request;\n}\n","import { FC, useState } from 'react';\nimport AudioExternal, {\n AudioSourceTypes\n} from 'common/components/audio/audio-external';\nimport { useGetInboundCallRecordingUrlByHashQuery } from 'app/apis/queryApi';\n\ninterface PublicCallRecordingProps {\n siteId: string;\n hash: string;\n}\n\nconst PublicCallRecording = ({ siteId, hash }: PublicCallRecordingProps) => {\n const [hasInitialisedRecording, setHasInitialisedRecording] = useState(false);\n\n const { data, isLoading, isUninitialized } =\n useGetInboundCallRecordingUrlByHashQuery(\n {\n siteId,\n hash\n },\n { skip: !hasInitialisedRecording }\n );\n\n const isRecordingInvalid = !data && !isUninitialized && !isLoading;\n\n return (\n <>\n
    \n \n {isRecordingInvalid ? (\n <>An error occurred when attempting to listen to the recording.\n ) : (\n <>Click play to listen to the call recording.\n )}\n \n setHasInitialisedRecording(true)}\n />\n
    \n \n );\n};\n\nexport default PublicCallRecording;\n","import { FC } from 'react';\nimport { useParams } from 'react-router-dom';\nimport NotFound from './notFound';\nimport PublicCallRecording from 'features/public-call-recordings/public-call-recording';\n\nexport const CallRecordingPage: FC = () => {\n const { siteId, hash } = useParams();\n const isPageValid = siteId !== undefined && hash !== undefined;\n\n return isPageValid ? (\n
    \n
    \n \n
    \n
    \n ) : (\n \n );\n};\n","import { useDispatch, useSelector } from 'react-redux';\nimport {\n closeAllSideBarAccordions,\n onToggleAccordion,\n selectIsRouteActive,\n selectIsSidebarOpen,\n SideBarMenuItem,\n SideBarSubMenuItem\n} from './sidebarSlice';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { RootState } from 'app/store';\nimport { Fragment } from 'react';\n\nconst menuItemStyle = 'h-14 cursor-pointer flex items-center px-8 mx-2';\nconst memuItemStyleMinimal =\n 'h-14 cursor-pointer flex items-center justify-center px-8 mx-5 md:px-2.5 md:m-2.5';\n\nconst SideBarMenuItemComponent = ({\n menuItem\n}: {\n menuItem: SideBarMenuItem;\n}) => {\n const dispatch = useDispatch();\n\n const location = useLocation();\n const currentPathName = location.pathname.substring(\n location.pathname.indexOf('/') + 1\n );\n\n const isSidebarOpen = useSelector(selectIsSidebarOpen);\n\n const isRouteActive = useSelector((state: RootState) =>\n selectIsRouteActive(state, currentPathName, menuItem)\n );\n\n const getIconColour = (\n currentPathName: string,\n sidebarItem: SideBarMenuItem\n ): string => (isRouteActive ? 'text-tertiary-600' : '');\n\n const getButtonColour = (\n currentPathName: string,\n sidebarItem: SideBarMenuItem\n ): string => (isRouteActive ? 'bg-navy-dark' : '');\n\n return (\n <>\n {menuItem.subMenuItems.length < 1 ? (\n dispatch(closeAllSideBarAccordions())}\n title={menuItem.title}\n to={menuItem.path ?? '*'}\n className=\" text-off-gray mb-2 block\"\n >\n \n \n \n {menuItem.title}\n \n \n \n ) : (\n <>\n \n dispatch(onToggleAccordion({ menuItemId: menuItem.id }))\n }\n >\n \n \n \n {isSidebarOpen ? menuItem.title : ''}\n \n \n \n {isSidebarOpen ? (\n \n ) : null}\n \n \n \n
    \n {menuItem.subMenuItems.map(\n (childItem: SideBarSubMenuItem, childIndex: number) => {\n return (\n \n \n \n {isSidebarOpen ? childItem.title : ''}\n
    \n \n \n );\n }\n )}\n \n \n \n )}\n \n );\n};\n\nexport default SideBarMenuItemComponent;\n","import { useDispatch, useSelector } from 'react-redux';\nimport {\n selectSideBarMenuItems,\n SideBarMenuItem,\n toggleSidebar,\n selectIsSidebarOpen\n} from './sidebarSlice';\nimport Icon from './sidebarIcon';\nimport ResponsiveBurgerButton from './responsive-burger-button/responsiveBurgerButton';\nimport { useWindowSize } from 'react-use';\nimport { selectIsPOCModeActive } from 'features/poc/poc-toggle/pocToggleSlice';\nimport { RootState } from 'app/store';\nimport SideBarMenuItemComponent from './sidebarMenuItem';\nimport { selectSiteId } from 'features/topbar/selectedSiteSlice';\n\nconst screenWidthTriggerAmount = 768;\n\nconst SideBar = () => {\n const dispatch = useDispatch();\n const siteId = useSelector(selectSiteId);\n\n const isSidebarOpen = useSelector(selectIsSidebarOpen);\n\n const isPocModeActive = useSelector(selectIsPOCModeActive);\n\n const sidebarMenuItems = useSelector((state: RootState) =>\n selectSideBarMenuItems(state, isPocModeActive, siteId)\n );\n\n const { width } = useWindowSize();\n\n return (\n <>\n
    \n dispatch(toggleSidebar())}\n className={`hidden md:flex fixed top-19 z-20 items-center justify-center w-6 h-6 rounded-full shadow-sm border border-neutral-500 transition-all bg-white text-black hover:bg-secondary-400 hover:border-secondary-400 hover:text-white group-hover:opacity-100 ${\n isSidebarOpen ? 'left-69 opacity-0' : 'left-15 opacity-1'\n }`}\n >\n \n \n \n {width < screenWidthTriggerAmount ||\n width > screenWidthTriggerAmount ? (\n <>\n \n \n
    \n \n
    \n {width < screenWidthTriggerAmount ? (\n
    \n \n
    \n ) : null}\n
    \n \n
    \n {width > screenWidthTriggerAmount ||\n width < screenWidthTriggerAmount\n ? sidebarMenuItems.map((item: SideBarMenuItem) => {\n return (\n \n );\n })\n : null}\n
    \n \n \n \n ) : null}\n \n \n \n );\n};\n\nexport default SideBar;\n","import { AdvancedReportMetricRow } from 'features/advanced-reports/advanced-reports.types';\nimport {\n InsightsTableCell,\n InsightsTableRow\n} from './types/insights-table.types';\nimport { InsightsMetricRowsResult } from './types/insights.types';\n\nexport const createInsightRows = (\n primaryMetrics: InsightsMetricRowsResult\n): InsightsTableRow[] => {\n const allMetrics = [...primaryMetrics.insights];\n\n const unqiueMetricIdsSet = new Set([\n ...allMetrics.map((metric) => metric.metricId)\n ]);\n\n const unqiqueMetricIds = [...unqiueMetricIdsSet];\n const metricRows = unqiqueMetricIds.map((metricId) => {\n const metric = allMetrics.find((m) => m.metricId === metricId)!;\n\n const row: InsightsTableRow = {\n id: metricId,\n parentId: metric.metricParentId,\n hasChildren: allMetrics.some((m) => m.metricParentId === metricId),\n depth: metric.depth,\n field: metric.metricTypeName,\n occurrences: createCellByMetricId(primaryMetrics.insights, metricId)\n };\n\n return row;\n });\n\n return metricRows;\n};\n\nconst createCellByMetricId = (\n primaryMetrics: AdvancedReportMetricRow[],\n metricId: string\n): InsightsTableCell => {\n const cell: InsightsTableCell = {\n primaryValue: getSummedMetricValuesById(primaryMetrics, metricId)\n };\n\n return cell;\n};\n\nfunction getSummedMetricValuesById(\n metrics: AdvancedReportMetricRow[],\n metricId: string\n): number {\n const summedMetrics = metrics\n .filter((metric) => metric.metricId === metricId)\n .map((metric) => metric.metricValue)\n .reduce((total, metricValue) => (total += metricValue), 0);\n\n return summedMetrics;\n}\n","import { getCoreRowModel, useReactTable } from '@tanstack/react-table';\nimport { useGetConversionInfluenceInsightsMutation } from 'app/apis/queryApi';\nimport { getDateRangeAsObjects } from 'features/date-range-selection/dateRangeSlice';\nimport { selectSiteId } from 'features/topbar/selectedSiteSlice';\nimport { useDispatch, useSelector } from 'react-redux';\nimport SegmentControls from 'features/segment-controls/segment-controls/segment-controls';\nimport { RootState } from 'app/store';\nimport {\n selectCanRunQuery,\n selectIsDirty,\n selectSegmentFilters,\n selectSegmentsOrdered\n} from 'features/segment-controls/segment-controls.slice';\nimport {\n InsightQueryRequestDto,\n InsightsMetricRowsResult\n} from 'features/insights/types/insights.types';\nimport { createInsightsReportRequest } from 'features/segment-controls/factories/query-segments-request-factory';\nimport { InsightTypes } from 'features/insights/constants/insight-types';\nimport QuerySegmentsButton from 'features/segment-controls/query-segments/query-segments-button';\nimport ResetSegmentsButton from 'features/segment-controls/reset-segments/reset-segments-button';\nimport Tile from 'features/tiles/tile';\nimport { QueryStatus } from '@reduxjs/toolkit/query';\nimport { useMemo } from 'react';\nimport { resetInsights } from 'features/insights/insights.middleware';\nimport { DrillthroughTable } from 'common/components/table/drillthrough-table/drillthrough-table';\nimport { DrillthroughTableInjectableRow } from 'common/components/table/drillthrough-table/drillthrough-table.types';\nimport { createDrillthroughInsightsTableInjectableRow } from 'features/advanced-reports/table/factories/advanced-report-drillthrough-table-injectable-row-factory';\nimport { selectOpenRowIds } from 'features/insights/conversion-influence/conversion-influence-table.slice';\nimport { getConversionInfluenceInsightColumnDefs } from 'features/insights/conversion-influence/conversion-influence-column-defs';\nimport { createInsightRows } from 'features/insights/insights-table-row-factory';\n\nconst ConversionInfluenceInsightPage = () => {\n const componentId = 'ConversionInfluence';\n const dispatch = useDispatch();\n const dates = useSelector(getDateRangeAsObjects);\n const siteId = useSelector(selectSiteId);\n const maxInsightSegments = 2;\n const canRunQuery = useSelector((state: RootState) =>\n selectCanRunQuery(state, componentId)\n );\n const openRowIds = useSelector(selectOpenRowIds);\n const isDirty = useSelector((state: RootState) =>\n selectIsDirty(state, componentId)\n );\n\n const activeSegments = useSelector((state: RootState) =>\n selectSegmentsOrdered(state, componentId)\n );\n\n const activeSegmentFilters = useSelector((state: RootState) =>\n selectSegmentFilters(state, componentId)\n );\n\n const createRequest = (): InsightQueryRequestDto => {\n return createInsightsReportRequest(\n siteId,\n InsightTypes.CONVERSION_INFLUENCE,\n activeSegments,\n activeSegmentFilters ?? [],\n dates\n );\n };\n\n const [getConversionInfluenceInsightData, conversionInfluenceInsightResult] =\n useGetConversionInfluenceInsightsMutation();\n\n const columnDefs = getConversionInfluenceInsightColumnDefs(\n conversionInfluenceInsightResult.data,\n conversionInfluenceInsightResult.isLoading\n );\n\n const runGetConversionInfluenceInsightMutation = () => {\n void getConversionInfluenceInsightData(createRequest());\n };\n\n const isButtonEnabled =\n canRunQuery && !conversionInfluenceInsightResult.isLoading;\n\n const isGettingQuery =\n conversionInfluenceInsightResult.status === QueryStatus.pending;\n\n const tableData: InsightsMetricRowsResult = useMemo(() => {\n const data: InsightsMetricRowsResult = {\n insights: conversionInfluenceInsightResult.data ?? []\n };\n\n return data;\n }, [conversionInfluenceInsightResult]);\n\n const metricRows = useMemo(\n () =>\n createInsightRows(tableData).sort(\n (a, b) => b.occurrences.primaryValue - a.occurrences.primaryValue\n ),\n [tableData]\n );\n\n const rootRows = useMemo(\n () => metricRows.filter((row) => row.parentId === ''),\n [metricRows]\n );\n\n const drillthroughRows = useMemo(() => {\n const rows = metricRows\n .filter((row) => openRowIds.includes(row.parentId))\n .map((row) =>\n createDrillthroughInsightsTableInjectableRow(\n row,\n columnDefs.map((column) => column.id!)\n )\n );\n return rows;\n }, [metricRows, openRowIds, columnDefs]);\n\n const table = useReactTable({\n data: rootRows,\n columns: columnDefs,\n getCoreRowModel: getCoreRowModel()\n });\n\n const onConfirmResetSegments = () => {\n conversionInfluenceInsightResult.reset();\n dispatch(resetInsights());\n };\n\n const hasQueryRun =\n conversionInfluenceInsightResult.status !== QueryStatus.uninitialized;\n\n return (\n <>\n \n \n
    \n \n
    \n \n
    \n
    \n
    \n\n \n {isDirty && hasQueryRun ? (\n
    \n \n
    \n

    \n These table results no longer reflect the segment controls.\n Re-run the query to see the results.\n

    \n
    \n
    \n ) : (\n <>\n )}\n
    \n \n
    \n
    \n \n );\n};\n\nexport default ConversionInfluenceInsightPage;\n","import { useAuth } from 'features/auth/hooks/useAuth';\nimport { Navigate, Outlet } from 'react-router-dom';\n\nconst SuperUserOutlet = () => {\n const { isSuperUser } = useAuth();\n\n return isSuperUser ? (\n \n ) : (\n \n );\n};\nexport default SuperUserOutlet;\n","import { useState, useCallback, ReactNode } from 'react';\nimport ReactDOM from 'react-dom';\n\nexport interface TooltipProps {\n children: ReactNode;\n tooltipContent: ReactNode;\n position?: 'top' | 'bottom';\n}\n\nconst Tooltip: React.FC = ({\n children,\n tooltipContent,\n position = 'bottom'\n}: TooltipProps) => {\n const [tooltipPosition, setTooltipPosition] = useState<{\n top: number;\n left: number;\n } | null>(null);\n\n const handleMouseEnter = useCallback(\n (event: React.MouseEvent) => {\n const rect = event.currentTarget.getBoundingClientRect();\n setTooltipPosition({\n top:\n position === 'top'\n ? rect.top + window.scrollY - 8\n : rect.bottom + window.scrollY + 8,\n left: rect.left + window.scrollX\n });\n },\n [position]\n );\n\n const handleMouseLeave = useCallback(() => {\n setTooltipPosition(null);\n }, []);\n\n return (\n \n {children}\n {tooltipPosition &&\n ReactDOM.createPortal(\n \n
    \n {tooltipContent}\n {/* Arrow */}\n \n
    \n ,\n document.body\n )}\n \n );\n};\n\nexport default Tooltip;\n","import { SegmentationConfig } from '../segmentationConfig.model';\nimport Tooltip from 'common/components/tooltip/tooltip-v2';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { closeModal, confirmModal, openModal } from 'features/modal/modalSlice';\nimport { ModalConfirmTypes } from 'features/modal/modal';\nimport { useUpdateSegmentationConfigStatusMutation } from 'app/apis/commandApi';\nimport { RootState } from 'app/store';\nimport { addListener } from '@reduxjs/toolkit';\nimport { useNavigate } from 'react-router-dom';\nimport {\n resetSegmentationConfig,\n selectSegmentationCategory,\n setSegmentationCategory\n} from '../segmentation-config.slice';\nimport { TabKey } from '../segmentation-config-tab-keys';\n\nexport interface SegmentationRuleConfigTableActionsProps {\n segmentationConfig: SegmentationConfig;\n}\n\nconst SegmentationRuleConfigTableActions = ({\n segmentationConfig\n}: SegmentationRuleConfigTableActionsProps) => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const [deleteWebPageViewSegmentationConfig] =\n useUpdateSegmentationConfigStatusMutation();\n\n const segmentationCategory = useSelector(selectSegmentationCategory);\n\n const onDeleteWebPageViewSegmentationConfig = async () => {\n try {\n await deleteWebPageViewSegmentationConfig({\n siteId,\n configId: segmentationConfig.id,\n updatedConfigStatus: 1,\n category: segmentationCategory\n }).unwrap();\n } catch (error) {\n console.error('Failed to delete segmentation config:', error);\n }\n };\n\n const handleDelete = () => {\n dispatch(\n addListener({\n actionCreator: confirmModal,\n effect: async (action, listenerApi) => {\n listenerApi.cancelActiveListeners();\n\n await onDeleteWebPageViewSegmentationConfig();\n\n listenerApi.dispatch(closeModal());\n\n listenerApi.unsubscribe();\n }\n })\n );\n\n dispatch(\n openModal({\n modalProps: {\n title: 'Are you sure you want to delete this configuration?',\n content: 'This action cannot be undone.',\n buttonType: 'Delete'\n },\n modalConfirmType:\n ModalConfirmTypes.ON_DELETE_WEB_PAGE_VIEW_SEGMENTATION_CONFIG,\n modalType: 'deleteWebPageViewSegmentationConfig'\n })\n );\n };\n\n const activeTab = useSelector(selectSegmentationCategory) ?? TabKey.Forms;\n\n const handleEdit = () => {\n dispatch(resetSegmentationConfig());\n dispatch(setSegmentationCategory(activeTab));\n navigate(`/settings/segmentation-config/edit/${segmentationConfig.id}`);\n };\n\n return (\n <>\n
    \n Edit
    }>\n \n \n\n {/* History}\n >\n \n */}\n\n Delete}\n >\n \n \n \n \n );\n};\n\nexport default SegmentationRuleConfigTableActions;\n","import { createColumnHelper } from '@tanstack/react-table';\nimport { SegmentationConfig } from '../segmentationConfig.model';\nimport {\n SearchFilterOptions,\n StickyOptions\n} from 'common/components/table/tableTypes';\nimport SegmentationRuleConfigTableActions from './segmentation-config-table-actions';\nimport { formatIsoDateTimeStringToDisplayDate } from 'common/utils/LEGACY_timeHelpers';\nimport { multiSelectFilter } from 'common/components/table/table-functions/filters';\n\nconst columnHelper = createColumnHelper();\n\nexport const getSegmentationRulesColumnDefs = () => [\n columnHelper.accessor((row) => row.name, {\n id: 'Name',\n header: () => 'Name',\n enableColumnFilter: true,\n filterFn: multiSelectFilter,\n meta: {\n searchFilterOptions: {\n isEnabled: true\n } as SearchFilterOptions\n },\n cell: (info) => (\n
    {info.getValue()}
    \n )\n }),\n columnHelper.accessor((row) => row.segmentName, {\n id: 'Segment',\n header: () => 'Segment',\n enableColumnFilter: true,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.segmentationTypeName, {\n id: 'SegmentType',\n header: () => 'Segmentation Type',\n enableColumnFilter: true,\n filterFn: multiSelectFilter,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.ruleAccessTypeName, {\n id: 'ConfigType',\n header: () => 'Config Type',\n enableColumnFilter: true,\n filterFn: multiSelectFilter,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.statusName, {\n id: 'ConfigStatus',\n header: () => 'Config Status',\n enableColumnFilter: true,\n filterFn: multiSelectFilter,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.createdDateTime, {\n id: 'CreatedDate',\n header: () => 'Created Date',\n enableColumnFilter: false,\n cell: (info) => (\n
    \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n
    \n )\n }),\n columnHelper.accessor((row) => row.createdBy, {\n id: 'CreatedBy',\n header: () => 'Created By',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.updatedDate, {\n id: 'UpdatedDate',\n header: () => 'Updated Date',\n enableColumnFilter: false,\n cell: (info) => (\n
    \n {formatIsoDateTimeStringToDisplayDate(info.getValue())}\n
    \n )\n }),\n columnHelper.accessor((row) => row.updatedBy, {\n id: 'UpdatedBy',\n header: () => 'Updated By',\n enableColumnFilter: false,\n cell: (info) =>
    {info.getValue()}
    \n }),\n columnHelper.accessor((row) => row.id, {\n id: 'Options',\n header: () => 'Options',\n enableColumnFilter: false,\n cell: (info) => (\n \n ),\n minSize: 75,\n maxSize: 75,\n meta: {\n stickyOptions: {\n isEnabled: true,\n side: 'right'\n } as StickyOptions\n }\n })\n];\n","import {\n ColumnFiltersState,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable\n} from '@tanstack/react-table';\nimport { getSegmentationRulesColumnDefs } from './segmentation-config-column-defs';\nimport { SegmentationConfig } from '../segmentationConfig.model';\nimport { CustomTable } from 'common/components/table/customTable';\nimport { useState } from 'react';\nimport {\n fuzzyFilter,\n multiSelectFilter\n} from 'common/components/table/table-functions/filters';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport Button from 'common/components/buttons/button';\n\nconst SegmentationRulesTable = ({\n segmentationRules\n}: {\n segmentationRules: SegmentationConfig[];\n}) => {\n const columnDefs = getSegmentationRulesColumnDefs();\n\n const [columnFilters, setColumnFilters] = useState([]);\n\n const segmentationConfigTable = useReactTable({\n data: segmentationRules,\n columns: columnDefs,\n filterFns: {\n fuzzy: fuzzyFilter,\n multiSelectFilter\n },\n state: {\n columnFilters\n },\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n enableColumnResizing: true,\n debugTable: false,\n debugHeaders: false,\n debugColumns: false\n });\n\n const handleResetFilters = () => {\n setColumnFilters([]); // Reset column filters\n };\n\n return (\n <>\n \n
    \n \n Reset Filters\n
    \n {' '}\n \n \n );\n};\n\nexport default SegmentationRulesTable;\n","import { FC } from 'react';\n\ninterface Tab {\n key: string;\n label: string;\n icon: string;\n}\n\ninterface TabsProps {\n tabs: Tab[];\n activeTab?: string;\n onTabChange?: (key: string) => void;\n textColor?: string;\n textSize?: string;\n hoverBorderColor?: string;\n iconSize?: string;\n}\n\nconst Tabs: FC = ({\n tabs,\n activeTab,\n onTabChange,\n textColor = 'text-neutral-500',\n textSize = 'text-sm',\n hoverBorderColor = 'border-neutral-400',\n iconSize = ''\n}) => {\n const handleTabClick = (key: string) => {\n if (onTabChange) onTabChange(key);\n };\n\n return (\n
    \n {tabs.map((tab) => (\n handleTabClick(tab.key)}\n >\n \n {tab.label}\n \n ))}\n
    \n );\n};\n\nexport default Tabs;\n","import {\n useGetAdCostSegmentationConfigsQuery,\n useGetWebPageViewSegmentationConfigsQuery\n} from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport Spinner from 'common/components/loading/spinner';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport SegmentationRulesTable from 'features/segmentation-config/segmentation-config-table/segmentationConfigTable';\nimport Button from 'common/components/buttons/button';\nimport {\n resetSegmentationConfig,\n selectSegmentationCategory,\n setSegmentationCategory\n} from 'features/segmentation-config/segmentation-config.slice';\nimport { useNavigate } from 'react-router-dom';\nimport { useState } from 'react';\nimport Tabs from 'common/components/tabs/tabs';\nimport { TabKey } from 'features/segmentation-config/segmentation-config-tab-keys';\n\nconst SettingsSegmentationConfigPage = () => {\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n\n const { data: webPageViewConfigData, isLoading: isWebPageViewLoading } =\n useGetWebPageViewSegmentationConfigsQuery({ siteId });\n const { data: adCostConfigData, isLoading: isAdCostLoading } =\n useGetAdCostSegmentationConfigsQuery({ siteId });\n\n const dispatch = useDispatch();\n const navigate = useNavigate();\n\n const tabConfig = [\n { key: TabKey.Forms, label: 'Web', icon: 'ra-icons-marketing-www-2' },\n {\n key: TabKey.Cost,\n label: 'Ad Platform',\n icon: 'ra-icons-marketing-dollar'\n }\n ];\n\n const onCreateNew = () => {\n dispatch(resetSegmentationConfig());\n dispatch(setSegmentationCategory(activeTab));\n navigate('/settings/segmentation-config/create');\n };\n\n const activeTab = useSelector(selectSegmentationCategory) ?? TabKey.Forms;\n\n return (\n \n \n
    \n
    \n

    Your Segments

    \n \n New Segment\n \n
    \n\n \n dispatch(setSegmentationCategory(key as TabKey))\n }\n textSize=\"text-sm\"\n hoverBorderColor=\"border-neutral-400\"\n iconSize=\"text-sm\"\n />\n\n {activeTab === TabKey.Forms &&\n (isWebPageViewLoading ? (\n
    \n \n
    \n ) : webPageViewConfigData && webPageViewConfigData.length > 0 ? (\n \n ) : (\n
    \n \n

    No Segments Found

    \n

    \n You currently have no segments configured.\n

    \n
    \n ))}\n\n {activeTab === TabKey.Cost &&\n (isAdCostLoading ? (\n
    \n \n
    \n ) : adCostConfigData && adCostConfigData.length > 0 ? (\n \n ) : (\n
    \n \n

    No Segments Found

    \n

    \n You currently have no segments configured.\n

    \n
    \n ))}\n
    \n
    \n
    \n );\n};\n\nexport default SettingsSegmentationConfigPage;\n","import DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport SimpleButtonContainerContent from 'common/components/drop-downs/legacy/simpleDropDownButtonContainerContent';\nimport Textbox from 'common/components/inputs/textbox';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n onTargetRemoved,\n selectRuleTargetsByRuleId,\n updateRuleTarget\n} from '../segmentation-config.slice';\nimport { RuleTarget, TargetType } from '../segmentation-config.types';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { RootState } from 'app/store';\n\ninterface SegmentationConfigRuleTargetProps {\n target: RuleTarget;\n targetTypeDropDownItems: DropDownItemType[];\n operatorDropDownItems: DropDownItemType[];\n}\n\nexport default function SegmentationConfigRuleTarget({\n target,\n targetTypeDropDownItems,\n operatorDropDownItems\n}: SegmentationConfigRuleTargetProps) {\n const dispatch = useDispatch();\n const targets = useSelector((state: RootState) =>\n selectRuleTargetsByRuleId(state, target.rule_id)\n );\n\n const updateTarget = (ruleKey: number, targetKey: number, props: any) => {\n dispatch(updateRuleTarget({ ruleKey, targetKey, props }));\n };\n\n const removeTarget = (targetKey: number, ruleKey: number) => {\n dispatch(onTargetRemoved({ ruleKey, targetKey }));\n };\n\n const canRemoveTarget = (ruleKey: number) => {\n return targets.filter((item) => item.rule_id === ruleKey).length > 1;\n };\n\n const isRuleTargetKeyValue = (target: RuleTarget): boolean => {\n return (\n target.type === TargetType.PAYLOAD_KEY_AND_VALUE ||\n target.type ===\n TargetType.LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEY_AND_VALUE\n );\n };\n\n return (\n
    \n {/* Three-column layout with proper alignment */}\n
    \n {/* Target Type Dropdown */}\n
    \n {\n updateTarget(target.rule_id, target.target_id, { type: value });\n }}\n >\n item.key === target.type)\n ?.label ?? targetTypeDropDownItems[0].label\n }\n />\n \n
    \n\n {/* Operator Dropdown */}\n
    \n {\n updateTarget(target.rule_id, target.target_id, {\n conditional_operator: value\n });\n }}\n >\n target.conditional_operator === operator.key\n )?.label ?? operatorDropDownItems[0].label\n }\n />\n \n
    \n\n {/* Target Key (if applicable) */}\n {isRuleTargetKeyValue(target) && (\n
    \n \n updateTarget(target.rule_id, target.target_id, { key })\n }\n identifier={`targetkey-textbox-targetid-${target.target_id}-ruleid-${target.rule_id}`}\n />\n
    \n )}\n\n {/* Target Value */}\n \n \n updateTarget(target.rule_id, target.target_id, { value })\n }\n />\n
    \n {/* Remove Button */}\n
    \n removeTarget(target.target_id, target.rule_id)}\n isDisabled={!canRemoveTarget(target.rule_id)}\n theme={ButtonTheme.MINIMAL}\n identifier={`targetdelete-btn-targetid-${target.target_id}-ruleid-${target.rule_id}`}\n classOverrides={`text-xl block ${\n targets.length === 1 ? '' : 'hover:text-error-300'\n }`}\n >\n \n \n
    \n
    \n \n );\n}\n","import Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n onRuleRemoved,\n onTargetAdded,\n selectRules,\n selectRuleTargets\n} from '../segmentation-config.slice';\nimport { RootState } from 'app/store';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport SegmentationConfigRuleTarget from './segmentation-config-rule-target';\nimport { Rule } from '../segmentation-config.types';\n\ninterface SegmentationConfigRuleProps {\n rule: Rule;\n operatorDropDownItems: DropDownItemType[];\n targetTypeDropDownItems: DropDownItemType[];\n}\n\nexport default function SegmentationConfigRule({\n rule,\n operatorDropDownItems,\n targetTypeDropDownItems\n}: SegmentationConfigRuleProps) {\n const dispatch = useDispatch();\n\n const rules = useSelector((state: RootState) => selectRules(state));\n const targets = useSelector((state: RootState) => selectRuleTargets(state));\n\n const removeRule = (ruleKey: number) => {\n dispatch(onRuleRemoved({ ruleKey }));\n };\n\n const addTarget = (ruleKey: number) => {\n dispatch(onTargetAdded({ ruleKey }));\n };\n\n return (\n
    \n
    \n
    \n removeRule(rule.id)}\n isDisabled={rules.length === 1}\n theme={ButtonTheme.MINIMAL}\n identifier={''}\n classOverrides={`pl-0 text-xl pb-0.5 ${\n rules.length === 1 ? '' : 'hover:text-error-300'\n }`}\n >\n \n \n
    \n
    \n
    \n \n {targets\n .filter((target) => target.rule_id === rule.id)\n .map((target) => {\n return (\n \n );\n })}\n
    \n
    \n );\n}\n","import { RootState } from 'app/store';\nimport DropDownButtonLegacy from 'common/components/drop-downs/legacy/dropDownButtonLegacy';\nimport SimpleButtonContainerContent from 'common/components/drop-downs/legacy/simpleDropDownButtonContainerContent';\nimport Textbox from 'common/components/inputs/textbox';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n selectConfigName,\n selectSegmentName,\n selectSegmentValue,\n selectSegmentationType,\n selectRuleAccessType,\n selectConfigNameErrors,\n selectSegmentNameErrors,\n onSegmentationConfigNameChanged,\n onSegmentNameChanged,\n onSegmentValueChanged,\n onSegmentationTypeChanged,\n onRuleAccessTypeChanged,\n onSegmentationConfigNameErrorsChanged,\n onSegmentNameErrorsChanged\n} from '../segmentation-config.slice';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport {\n getRuleAccessType,\n getSegmentationType,\n RuleAccessType,\n SegmentationType\n} from '../segmentation-config.types';\n\nconst configNameMinLength = 1;\nconst configNameMaxLength = 50;\nconst validateConfigName = (configName: string): string[] => {\n if (configName.length < configNameMinLength) {\n const errorMsg = `Config Name must be at least ${configNameMinLength} character`;\n return [errorMsg];\n }\n\n if (configName.length > configNameMaxLength) {\n return [`Config Name must be less than ${configNameMaxLength} characters`];\n }\n\n return [];\n};\n\nconst segmentNameMinLength = 1;\nconst segmentNameMaxLength = 50;\nconst validateSegmentName = (segmentName: string): string[] => {\n if (segmentName.length < configNameMinLength) {\n return [`Segment Name must be at least ${segmentNameMinLength} character`];\n }\n\n if (segmentName.length > configNameMaxLength) {\n return [\n `Segment Name must be less than ${segmentNameMaxLength} characters`\n ];\n }\n\n return [];\n};\n\ninterface SegmentationRuleConfigFormProps {\n segmentTypeDropDownItems: DropDownItemType[];\n ruleAccessTypeDropDownItems: DropDownItemType[];\n}\n\nconst SegmentationRuleConfigForm = ({\n segmentTypeDropDownItems,\n ruleAccessTypeDropDownItems\n}: SegmentationRuleConfigFormProps) => {\n const dispatch = useDispatch();\n\n const configName = useSelector((state: RootState) => selectConfigName(state));\n const segmentName = useSelector((state: RootState) =>\n selectSegmentName(state)\n );\n const segmentValue = useSelector((state: RootState) =>\n selectSegmentValue(state)\n );\n const selectedSegmentationType = useSelector((state: RootState) =>\n selectSegmentationType(state)\n );\n const selectedRuleAccessType = useSelector((state: RootState) =>\n selectRuleAccessType(state)\n );\n const configNameErrors = useSelector((state: RootState) =>\n selectConfigNameErrors(state)\n );\n const segmentNameErrors = useSelector((state: RootState) =>\n selectSegmentNameErrors(state)\n );\n\n const setConfigName = (newSegmentationConfigName: string) => {\n dispatch(onSegmentationConfigNameChanged({ newSegmentationConfigName }));\n };\n\n const setSegmentName = (newSegmentName: string) => {\n dispatch(onSegmentNameChanged({ newSegmentName }));\n };\n\n const setSegmentValue = (newSegmentValue: string) => {\n dispatch(onSegmentValueChanged({ newSegmentValue }));\n };\n\n const setSegmentationType = (newSegmentationType: SegmentationType) => {\n dispatch(onSegmentationTypeChanged({ newSegmentationType }));\n };\n\n const setRuleAccessType = (newRuleAccessType: RuleAccessType) => {\n dispatch(onRuleAccessTypeChanged({ newRuleAccessType }));\n };\n\n const setConfigNameErrors = (newSegmentationConfigNameErrors: string[]) => {\n dispatch(\n onSegmentationConfigNameErrorsChanged({ newSegmentationConfigNameErrors })\n );\n };\n\n const setSegmentNameErrors = (newSegmentNameErrors: string[]) => {\n dispatch(onSegmentNameErrorsChanged({ newSegmentNameErrors }));\n };\n\n return (\n <>\n
    \n \n {\n const errors = validateConfigName(value);\n setConfigNameErrors(errors);\n setConfigName(value);\n }}\n />\n
    \n
    \n \n {\n const errors = validateSegmentName(value);\n setSegmentNameErrors(errors);\n setSegmentName(value);\n }}\n />\n
    \n
    \n \n {\n setSegmentValue(value);\n }}\n />\n
    \n
    \n \n {\n const segmentationType = getSegmentationType(value);\n setSegmentationType(segmentationType);\n }}\n >\n \n \n
    \n
    \n \n {\n const ruleAccessType = getRuleAccessType(value);\n setRuleAccessType(ruleAccessType);\n }}\n >\n \n \n
    \n \n );\n};\n\nexport default SegmentationRuleConfigForm;\n","import { useCreateSegmentationConfigMutation } from 'app/apis/commandApi';\nimport { RootState } from 'app/store';\nimport NavLinkButton from 'common/components/anchors/navlink-button';\nimport Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport {\n ConditionalOperator,\n RuleAccessType,\n RuleTarget,\n SegmentationRuleDto,\n SegmentationType,\n TargetType\n} from 'features/segmentation-config/segmentation-config.types';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { onError, onSuccess } from 'features/toast/toast.slice';\nimport { useState, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport {\n onRuleAdded,\n selectConfigName,\n selectConfigNameErrors,\n selectRuleAccessType,\n selectRules,\n selectRuleTargets,\n selectSegmentationCategory,\n selectSegmentationType,\n selectSegmentName,\n selectSegmentNameErrors,\n selectSegmentValue,\n selectTargetTypeOptions\n} from 'features/segmentation-config/segmentation-config.slice';\nimport { selectUserDetails } from 'features/auth/authenticationSlice';\nimport SegmentationConfigRule from 'features/segmentation-config/segmentation-config-rule/segmentation-config-rule';\nimport SegmentationRuleConfigForm from 'features/segmentation-config/segmentation-config-form/segmentation-config-form';\nimport { TabKey } from 'features/segmentation-config/segmentation-config-tab-keys';\n\nconst configNameMinLength = 1;\nconst configNameMaxLength = 50;\nconst validateConfigName = (configName: string): string[] => {\n if (configName.length < configNameMinLength) {\n const errorMsg = `Config Name must be at least ${configNameMinLength} character`;\n return [errorMsg];\n }\n\n if (configName.length > configNameMaxLength) {\n return [`Config Name must be less than ${configNameMaxLength} characters`];\n }\n\n return [];\n};\n\nconst segmentNameMinLength = 1;\nconst segmentNameMaxLength = 50;\nconst validateSegmentName = (segmentName: string): string[] => {\n if (segmentName.length < configNameMinLength) {\n return [`Segment Name must be at least ${segmentNameMinLength} character`];\n }\n\n if (segmentName.length > configNameMaxLength) {\n return [\n `Segment Name must be less than ${segmentNameMaxLength} characters`\n ];\n }\n\n return [];\n};\n\nexport const SettingsSegmentationConfigCreatePage = () => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const userDetails = useSelector(selectUserDetails);\n\n const configName = useSelector((state: RootState) => selectConfigName(state));\n const segmentName = useSelector((state: RootState) =>\n selectSegmentName(state)\n );\n const segmentValue = useSelector((state: RootState) =>\n selectSegmentValue(state)\n );\n const selectedSegmentationType = useSelector((state: RootState) =>\n selectSegmentationType(state)\n );\n const selectedRuleAccessType = useSelector((state: RootState) =>\n selectRuleAccessType(state)\n );\n const configNameErrors = useSelector((state: RootState) =>\n selectConfigNameErrors(state)\n );\n const segmentNameErrors = useSelector((state: RootState) =>\n selectSegmentNameErrors(state)\n );\n\n const isFormValid =\n configNameErrors.length < 1 && segmentNameErrors.length < 1;\n\n const segmentTypeDropDownItems = useMemo(\n () =>\n Object.values(SegmentationType).map(\n (segmentationType) => {\n return {\n key: segmentationType,\n label: segmentationType,\n isActive: selectedSegmentationType === segmentationType\n };\n }\n ),\n [selectedSegmentationType]\n );\n\n const ruleAccessTypeDropDownItems = useMemo(\n () =>\n Object.values(RuleAccessType).map((ruleAccessType) => {\n return {\n key: ruleAccessType,\n label: ruleAccessType,\n isActive: selectedRuleAccessType === ruleAccessType\n };\n }),\n [selectedRuleAccessType]\n );\n\n const operatorDropDownItems: DropDownItemType[] = [\n {\n isActive: true,\n key: ConditionalOperator.EQUALS,\n label: 'Equals',\n pocOnly: false\n },\n {\n isActive: false,\n key: ConditionalOperator.EQUALS_CASE_INSENSITIVE,\n label: 'Equals (Case insenstive)',\n pocOnly: false\n },\n {\n isActive: false,\n key: ConditionalOperator.CONTAINS,\n label: 'Contains',\n pocOnly: false\n },\n {\n isActive: false,\n key: ConditionalOperator.DOES_NOT_CONTAIN,\n label: 'Does not contain',\n pocOnly: false\n }\n ];\n\n const targetTypeOptions = useSelector(selectTargetTypeOptions);\n\n const targetTypeDropDownItems: DropDownItemType[] = useMemo(() => {\n return targetTypeOptions.map((type) => ({\n key: type,\n label: type,\n isActive: false\n }));\n }, [targetTypeOptions]);\n\n const segmentationCategoryTitles: Record = {\n [TabKey.Forms]: 'Web',\n [TabKey.Cost]: 'Ad Platform'\n };\n\n const segmentationCategory = useSelector(selectSegmentationCategory);\n\n const segmentationConfigTitle = segmentationCategory\n ? segmentationCategoryTitles[segmentationCategory]\n : '';\n\n const allRules = useSelector((state: RootState) => selectRules(state));\n const allTargets = useSelector((state: RootState) =>\n selectRuleTargets(state)\n );\n\n const addRule = () => {\n dispatch(onRuleAdded());\n };\n\n const createRules = (): SegmentationRuleDto[] => {\n const groupByKey = (array: any[], key: string) => {\n return array.reduce((result, item) => {\n const groupKey = item[key];\n\n if (!result[groupKey]) {\n result[groupKey] = [];\n }\n\n result[groupKey].push(item);\n\n return result;\n }, {});\n };\n\n const rules: SegmentationRuleDto[] = [];\n\n const groupedData = groupByKey(allTargets, 'rule_id');\n\n Object.values(groupedData).forEach((group: any) => {\n rules.push({\n priority: parseInt(group[0].rule_id),\n targets: group.map((item: RuleTarget) => {\n return {\n key: item.key ?? null,\n value: item.value,\n type: item.type,\n conditionalOperator: item.conditional_operator\n };\n })\n } as SegmentationRuleDto);\n });\n\n return rules;\n };\n\n const [createSegmentationConfig] = useCreateSegmentationConfigMutation();\n const [isSaving, onIsSavingChanged] = useState(false);\n\n const isRuleTargetKeyValue = (target: RuleTarget): boolean => {\n return (\n target.type === TargetType.PAYLOAD_KEY_AND_VALUE ||\n target.type ===\n TargetType.LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEY_AND_VALUE\n );\n };\n\n const onCreateSegmentationConfig = async () => {\n const rules = createRules();\n onIsSavingChanged(true);\n\n try {\n await createSegmentationConfig({\n category: segmentationCategory,\n siteId,\n ruleAccessType: selectedRuleAccessType,\n name: configName,\n createdDateTime: new Date().toISOString(),\n createdBy: userDetails.Email,\n segmentationType: selectedSegmentationType,\n segmentName,\n segmentValue,\n rules\n }).unwrap();\n\n dispatch(\n onSuccess({\n title: 'Segmentation Config Created',\n description: 'The segmentation config has successfully been created!'\n })\n );\n\n navigate('/settings/segmentation-config');\n } catch (error) {\n const errorMessages = error.data\n .map((item: any) => item.ErrorMessage)\n .join(', ');\n\n dispatch(\n onError({\n title: 'Segmentation Config could not be created',\n description: errorMessages\n })\n );\n } finally {\n onIsSavingChanged(false);\n }\n };\n\n validateConfigName(configName);\n validateSegmentName(segmentName);\n\n return (\n \n \n
    \n

    \n New {segmentationConfigTitle} Segment\n

    \n
    \n
    \n \n
    \n
    \n \n
    \n {allRules.map((rule) => {\n return (\n \n );\n })}\n
    \n \n <>Add Rule\n \n
    \n
    \n
    \n
    \n
    \n \n Create\n \n\n \n Cancel\n \n
    \n
    \n
    \n
    \n );\n};\n","import { useUpdateSegmentationConfigMutation } from 'app/apis/commandApi';\nimport { useGetSegmentationConfigQuery } from 'app/apis/queryApi';\nimport { RootState } from 'app/store';\nimport NavLinkButton from 'common/components/anchors/navlink-button';\nimport Button from 'common/components/buttons/button';\nimport { ButtonTheme } from 'common/components/buttons/button-theme';\nimport { DropDownItemType } from 'common/components/drop-downs/legacy/dropDownItemType';\nimport Spinner from 'common/components/loading/spinner';\nimport { selectUserDetails } from 'features/auth/authenticationSlice';\nimport SegmentationRuleConfigForm from 'features/segmentation-config/segmentation-config-form/segmentation-config-form';\nimport SegmentationConfigRule from 'features/segmentation-config/segmentation-config-rule/segmentation-config-rule';\nimport { TabKey } from 'features/segmentation-config/segmentation-config-tab-keys';\nimport {\n onRuleAccessTypeChanged,\n onRuleAdded,\n onRulesChanged,\n onRuleTargetsChanged,\n onSegmentationConfigNameChanged,\n onSegmentationTypeChanged,\n onSegmentNameChanged,\n onSegmentValueChanged,\n selectConfigName,\n selectConfigNameErrors,\n selectRuleAccessType,\n selectRules,\n selectRuleTargets,\n selectSegmentationCategory,\n selectSegmentationType,\n selectSegmentName,\n selectSegmentNameErrors,\n selectSegmentValue,\n selectTargetTypeOptions\n} from 'features/segmentation-config/segmentation-config.slice';\nimport {\n ConditionalOperator,\n getConditionalOperator,\n getTargetType,\n RuleAccessType,\n RuleTarget,\n SegmentationRuleDto,\n SegmentationType,\n TargetType\n} from 'features/segmentation-config/segmentation-config.types';\nimport TileGridContainer from 'features/tiles/tileGridContainer';\nimport TileWithoutDefaultStyling from 'features/tiles/tileWithoutDefaultStyling';\nimport { onError, onSuccess } from 'features/toast/toast.slice';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate, useParams } from 'react-router-dom';\n\nexport const SettingsSegmentationConfigEditPage = () => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const { segmentationConfigId } = useParams();\n\n const { siteId } = useSelector((state: RootState) => state.selectedSite);\n const userDetails = useSelector(selectUserDetails);\n\n const segmentationCategory = useSelector(selectSegmentationCategory);\n\n const { data: segmentationConfigResult, isLoading } =\n useGetSegmentationConfigQuery({\n siteId,\n configId: segmentationConfigId ?? '',\n category: segmentationCategory\n });\n\n useEffect(() => {\n if (segmentationConfigResult && !isLoading) {\n const rules = JSON.parse(segmentationConfigResult.rules!);\n\n dispatch(\n onSegmentationConfigNameChanged({\n newSegmentationConfigName: segmentationConfigResult.name\n })\n );\n dispatch(\n onSegmentNameChanged({\n newSegmentName: segmentationConfigResult.segmentName\n })\n );\n dispatch(\n onSegmentValueChanged({\n newSegmentValue: segmentationConfigResult.segmentValue\n })\n );\n dispatch(\n onSegmentationTypeChanged({\n newSegmentationType: segmentationConfigResult.segmentationTypeName\n })\n );\n dispatch(\n onRuleAccessTypeChanged({\n newRuleAccessType: segmentationConfigResult.ruleAccessTypeName\n })\n );\n dispatch(\n onRulesChanged({\n rules: rules.map((_: any, ruleIndex: number) => {\n return { id: ruleIndex + 1 };\n })\n })\n );\n const ruleTargets = rules.flatMap((rule: any, ruleIndex: number) =>\n rule.Targets.map((target: any, targetIndex: number) => {\n console.log(target);\n let key = '';\n let value = '';\n const targetType = getTargetType(target.Type);\n\n if (isRuleTargetKeyValue(targetType)) {\n key = target.Key;\n value = target.Value;\n } else {\n value = target.Value;\n }\n\n return {\n rule_id: ruleIndex + 1,\n target_id: targetIndex + 1,\n type: targetType,\n key,\n value,\n conditional_operator: getConditionalOperator(\n target.ConditionalOperator\n )\n };\n })\n );\n dispatch(onRuleTargetsChanged({ ruleTargets }));\n }\n }, [segmentationConfigResult, isLoading, dispatch]);\n\n const allRules = useSelector((state: RootState) => selectRules(state));\n const allTargets = useSelector((state: RootState) =>\n selectRuleTargets(state)\n );\n\n const addRule = () => {\n dispatch(onRuleAdded());\n };\n\n const configName = useSelector((state: RootState) => selectConfigName(state));\n const segmentName = useSelector((state: RootState) =>\n selectSegmentName(state)\n );\n const segmentValue = useSelector((state: RootState) =>\n selectSegmentValue(state)\n );\n const selectedSegmentationType = useSelector((state: RootState) =>\n selectSegmentationType(state)\n );\n const selectedRuleAccessType = useSelector((state: RootState) =>\n selectRuleAccessType(state)\n );\n const configNameErrors = useSelector((state: RootState) =>\n selectConfigNameErrors(state)\n );\n const segmentNameErrors = useSelector((state: RootState) =>\n selectSegmentNameErrors(state)\n );\n\n const segmentTypeDropDownItems = useMemo(\n () =>\n Object.values(SegmentationType).map(\n (segmentationType) => {\n return {\n key: segmentationType,\n label: segmentationType,\n isActive: selectedSegmentationType === segmentationType\n };\n }\n ),\n [selectedSegmentationType]\n );\n\n const ruleAccessTypeDropDownItems = useMemo(\n () =>\n Object.values(RuleAccessType).map((ruleAccessType) => {\n return {\n key: ruleAccessType,\n label: ruleAccessType,\n isActive: selectedRuleAccessType === ruleAccessType\n };\n }),\n [selectedRuleAccessType]\n );\n\n const operatorDropDownItems: DropDownItemType[] = [\n {\n isActive: true,\n key: ConditionalOperator.EQUALS,\n label: 'Equals',\n pocOnly: false\n },\n {\n isActive: false,\n key: ConditionalOperator.EQUALS_CASE_INSENSITIVE,\n label: 'Equals (Case insenstive)',\n pocOnly: false\n },\n {\n isActive: false,\n key: ConditionalOperator.CONTAINS,\n label: 'Contains',\n pocOnly: false\n },\n {\n isActive: false,\n key: ConditionalOperator.DOES_NOT_CONTAIN,\n label: 'Does not contain',\n pocOnly: false\n }\n ];\n\n const targetTypeOptions = useSelector(selectTargetTypeOptions);\n\n const targetTypeDropDownItems: DropDownItemType[] = useMemo(() => {\n return targetTypeOptions.map((type) => ({\n key: type,\n label: type,\n isActive: false\n }));\n }, [targetTypeOptions]);\n\n const isFormValid =\n configNameErrors.length < 1 && segmentNameErrors.length < 1;\n\n const isRuleTargetKeyValue = (targetType: TargetType): boolean => {\n return (\n targetType === TargetType.PAYLOAD_KEY_AND_VALUE ||\n targetType ===\n TargetType.LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEY_AND_VALUE\n );\n };\n\n const createRules = (): SegmentationRuleDto[] => {\n const groupByKey = (array: any[], key: string) => {\n return array.reduce((result, item) => {\n const groupKey = item[key];\n\n if (!result[groupKey]) {\n result[groupKey] = [];\n }\n\n result[groupKey].push(item);\n\n return result;\n }, {});\n };\n\n const rules: SegmentationRuleDto[] = [];\n\n const groupedData = groupByKey(allTargets, 'rule_id');\n\n Object.values(groupedData).forEach((group: any) => {\n rules.push({\n priority: parseInt(group[0].rule_id),\n targets: group.map((item: RuleTarget) => {\n return {\n key: item.key ?? null,\n value: item.value,\n type: item.type,\n conditionalOperator: item.conditional_operator\n };\n })\n } as SegmentationRuleDto);\n });\n\n return rules;\n };\n\n const segmentationCategoryTitles: Record = {\n [TabKey.Forms]: 'Web',\n [TabKey.Cost]: 'Ad Platform'\n };\n\n const segmentationConfigTitle = segmentationCategory\n ? segmentationCategoryTitles[segmentationCategory]\n : '';\n\n const [updateSegmentationConfig] = useUpdateSegmentationConfigMutation();\n const [isSaving, onIsSavingChanged] = useState(false);\n\n const onUpdateSegmentationConfig = async () => {\n const rules = createRules();\n\n if (!segmentationConfigId) {\n return;\n }\n\n onIsSavingChanged(true);\n\n try {\n await updateSegmentationConfig({\n category: segmentationCategory,\n id: segmentationConfigId,\n siteId,\n ruleAccessType: selectedRuleAccessType,\n name: configName,\n updatedDateTime: new Date().toISOString(),\n updatedBy: userDetails.Email,\n segmentationType: selectedSegmentationType,\n segmentName,\n segmentValue,\n rules\n }).unwrap();\n\n onIsSavingChanged(false);\n\n dispatch(\n onSuccess({\n title: 'Segmentation Config Updated',\n description: 'The segmentation config has successfully been updated!'\n })\n );\n\n navigate('/settings/segmentation-config');\n } catch (error) {\n onIsSavingChanged(false);\n\n const errorMessages = error.data\n .map((item: any) => item.ErrorMessage)\n .join(', ');\n\n dispatch(\n onError({\n title: 'Segmentation Config could not be updated',\n description: errorMessages\n })\n );\n }\n };\n\n return (\n \n \n
    \n

    \n Edit {segmentationConfigTitle} Segment\n

    \n\n {isLoading ? (\n
    \n \n
    \n ) : (\n <>\n
    \n
    \n \n
    \n
    \n \n
    \n {allRules && allTargets ? (\n allRules.map((rule) => (\n \n ))\n ) : (\n <>Loading\n )}\n
    \n \n <>Add Rule\n \n
    \n
    \n
    \n
    \n
    \n \n Update\n \n\n
    \n \n Cancel\n \n
    \n
    \n \n )}\n
    \n
    \n
    \n );\n};\n","import '../common/prototypes/array.prototypes';\nimport React, { FC } from 'react';\nimport { Route, BrowserRouter, Routes } from 'react-router-dom';\nimport Dashboard from 'pages/dashboard';\nimport SidebarLegacy from 'features/sidebar/sidebarlegacy';\nimport NotFound from 'pages/notFound';\nimport { Reports } from 'pages/reports';\nimport './app.css';\nimport Login from 'pages/login';\nimport { PrivateOutlet } from 'pages/privateOutlet';\nimport TopBar from 'features/topbar/topBar';\nimport Revenue from 'pages/revenue';\nimport { registerChartJs } from 'features/charts/chartjs';\nimport MmmModelledRoiPage from 'features/marketing-mix-modelling/modelled-roi/mmm-modelled-roi-page';\nimport { Modal } from 'features/modal/modal';\nimport Visitor from 'pages/visitor';\nimport Opportunities from 'pages/opportunities';\nimport Toast from 'features/toast/toast';\nimport { useSelector } from 'react-redux';\nimport { RootState } from './store';\nimport PageContent from './page-content';\nimport MmmBudgetOptimiserPage from 'features/marketing-mix-modelling/budget-optimiser/mmm-budget-optimiser-page';\nimport { GeneralSettings } from 'pages/settings-general';\nimport { SettingsUploadPage } from 'pages/settings-upload';\nimport { SettingsWebhooksPage } from 'pages/settings-webhooks';\nimport { SettingsWebhooksCreatePage } from 'pages/settings-webhooks-create';\nimport { SettingsDataScienceTasksPage } from 'pages/settings-data-science-tasks';\nimport ConversionsForm from 'pages/conversions-form';\nimport ConversionsCall from 'pages/conversions-call';\nimport { SiteSetup } from 'pages/site-setup';\nimport { SetupCallTrackingSettings } from 'pages/setup-call-tracking';\nimport { HelpPage } from 'pages/help';\nimport { SettingsExclusionsPage } from 'pages/settings-exclusions';\nimport { SettingsExclusionsCreatePage } from 'pages/settings-exclusions-create';\nimport SettingsWebhookHistoryPage from 'pages/settings-webhooks-history';\nimport { Paths } from 'pages/paths';\nimport { PocOutlet } from 'pages/poc-outlet';\nimport { InternalPage } from 'pages/internal';\nimport AdvancedReportsPage from 'pages/advanced-reports-page';\nimport { CallRecordingPage } from 'pages/call-recording';\nimport { ToggleType } from 'features/internal/internal.models';\nimport { debugToggleByType } from 'features/internal/internal-settings.slice';\nimport SideBar from 'features/sidebar/sidebar';\nimport ConversionInfluenceInsightPage from 'pages/insights-conversion-influence';\nimport SuperUserOutlet from 'pages/super-user-outlet';\nimport SettingsWebPageViewSegmentationConfigPage from 'pages/settings-segmentation-config';\nimport { SettingsSegmentationConfigCreatePage } from 'pages/settings-segmentation-config-create';\nimport { SettingsSegmentationConfigEditPage } from 'pages/settings-segmentation-config-edit';\n\nconst App: React.FC = () => {\n const { siteLabel } = useSelector((state: RootState) => state.selectedSite);\n const isNewSideBarEnabledDebugToggle = useSelector((state: RootState) =>\n debugToggleByType(state, ToggleType.DisplayNewSideBar)\n );\n\n const MainAppContainer: FC> = () => {\n return (\n
    \n {isNewSideBarEnabledDebugToggle?.enabled ? (\n \n ) : (\n \n )}\n \n\n {siteLabel !== '' ? (\n <>\n \n \n
    \n \n ) : (\n
    \n )}\n
    \n \n
    \n
    \n );\n };\n\n registerChartJs();\n\n return (\n \n \n } />\n }\n />\n }>\n }>\n } />\n } />\n } />\n } />\n\n \n } />\n } />\n } />\n } />\n \n\n } />\n } />\n } />\n } />\n \n }\n />\n \n } />\n }\n />\n } />\n \n } />\n } />\n } />\n }\n />\n }\n />\n } />\n }\n />\n }\n />\n }>\n }\n />\n }\n />\n }\n />\n \n }>\n } />\n \n \n }>\n } />\n }\n />\n \n\n } />\n \n \n \n \n );\n};\n\nexport default App;\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n LineElement,\n PointElement,\n Title,\n Tooltip,\n Legend,\n Filler,\n LogarithmicScale,\n ScatterController,\n DoughnutController,\n ArcElement\n} from 'chart.js';\n\nexport const registerChartJs = (): void => {\n ChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LineElement,\n PointElement,\n Filler,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n ScatterController,\n DoughnutController,\n ArcElement\n );\n};\n","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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; }\n\nimport React, { PureComponent } from 'react'; // eslint-disable-line import/no-unresolved\n\nexport var PersistGate =\n/*#__PURE__*/\nfunction (_PureComponent) {\n _inherits(PersistGate, _PureComponent);\n\n function PersistGate() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, PersistGate);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(PersistGate)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n bootstrapped: false\n });\n\n _defineProperty(_assertThisInitialized(_this), \"_unsubscribe\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"handlePersistorState\", function () {\n var persistor = _this.props.persistor;\n\n var _persistor$getState = persistor.getState(),\n bootstrapped = _persistor$getState.bootstrapped;\n\n if (bootstrapped) {\n if (_this.props.onBeforeLift) {\n Promise.resolve(_this.props.onBeforeLift()).finally(function () {\n return _this.setState({\n bootstrapped: true\n });\n });\n } else {\n _this.setState({\n bootstrapped: true\n });\n }\n\n _this._unsubscribe && _this._unsubscribe();\n }\n });\n\n return _this;\n }\n\n _createClass(PersistGate, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this._unsubscribe = this.props.persistor.subscribe(this.handlePersistorState);\n this.handlePersistorState();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this._unsubscribe && this._unsubscribe();\n }\n }, {\n key: \"render\",\n value: function render() {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof this.props.children === 'function' && this.props.loading) console.error('redux-persist: PersistGate expects either a function child or loading prop, but not both. The loading prop will be ignored.');\n }\n\n if (typeof this.props.children === 'function') {\n return this.props.children(this.state.bootstrapped);\n }\n\n return this.state.bootstrapped ? this.props.children : this.props.loading;\n }\n }]);\n\n return PersistGate;\n}(PureComponent);\n\n_defineProperty(PersistGate, \"defaultProps\", {\n children: null,\n loading: null\n});","import * as ReactDOMClient from 'react-dom/client';\nimport { Provider } from 'react-redux';\nimport { store, persistor } from 'app/store';\nimport App from 'app/app';\nimport { PersistGate } from 'redux-persist/integration/react';\n\ndocument.head\n .appendChild(document.createElement('base'))\n .setAttribute('href', '/');\n\nconst root = ReactDOMClient.createRoot(\n document.getElementById('root') as HTMLElement\n);\n\nroot.render(\n \n \n \n \n \n);\n\nconst environments = ['production', 'staging'];\nif (environments.includes(process.env.NODE_ENV)) {\n console.log = () => {};\n console.error = () => {};\n console.debug = () => {};\n}\n"],"names":["module","exports","arr","len","length","i","arr2","Array","__esModule","isArray","arrayLikeToArray","unsupportedIterableToArray","o","allowArrayLike","it","Symbol","iterator","F","s","n","done","value","e","_e","f","TypeError","err","normalCompletion","didErr","call","step","next","_e2","obj","key","Object","defineProperty","enumerable","configurable","writable","iter","from","_i","_s","_arr","_n","_d","push","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","apply","target","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","objectWithoutPropertiesLoose","excluded","sourceSymbolKeys","indexOf","prototype","propertyIsEnumerable","sourceKeys","_typeof","_regeneratorRuntime","Op","hasOwn","hasOwnProperty","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","method","arg","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","fn","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","resolve","reject","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","undefined","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","arrayWithHoles","iterableToArrayLimit","nonIterableRest","iterableToArray","arrayWithoutHoles","nonIterableSpread","minLen","toString","test","colors","require","content","safelist","theme","screens","sm","md","lg","xl","transparent","current","white","black","gray","navy","blue","neutral","primary","secondary","tertiary","success","warning","fontFamily","sans","fontSize","xxxs","xxs","xs","base","extend","keyframes","loading","left","transform","to","animation","spacing","height","minHeight","maxHeight","maxWidth","borderRadius","DEFAULT","full","zIndex","scale","QueryStatus","QueryStatus2","__markAsModule","__export","buildCreateApi","copyWithStructuralSharing","coreModule","createApi","fakeBaseQuery","fetchBaseQuery","retry","setupListeners","skipSelector","skipToken","uninitialized","flatten","concat","isPlainObject","__toModule","oldObj","newObj","newKeys","oldKeys","isSameObject","mergeObj","newKeys_1","defaultFetchFn","args","fetch","defaultValidateStatus","response","status","handleResponse","responseHandler","text","JSON","parse","copy","__spreadValues","entries","_f","_a","baseUrl","prepareHeaders","x","fetchFn","paramsSerializer","baseFetchOptions","__objRest","console","warn","api","signal","getState","extra","endpoint","forced","url","_a2","headers","Headers","body","_g","params","_h","_j","validateStatus","_k","rest","config","_l","stripUndefined","_m","isJsonifiable","body2","toJSON","has","set","get","trim","startsWith","stringify","divider","query","URLSearchParams","RegExp","replace","request","Request","requestClone","clone","meta","String","e_1","responseClone","responseText","all","r","handleResponseError_1","originalStatus","data","e_2","resultData","attempt","maxRetries","attempts","Math","min","timeout","random","setTimeout","res","assign","baseQuery","defaultOptions","extraOptions","options","backoff","defaultBackoff","retry2","HandledError","e_3","throwImmediately","fail","import_toolkit3","onFocus","createAction","onFocusLost","onOnline","onOffline","initialized","dispatch","customHandler","handleFocus","handleOnline","handleOffline","handleVisibilityChange","window","document","visibilityState","addEventListener","removeEventListener","DefinitionType","DefinitionType2","description","queryArg","assertTagTypes","map","expandTagDescription","import_toolkit4","import_immer","import_toolkit5","baseQueryReturnValue","action","endpointDefinitions","assertTagType","calculateProvidedBy","endpointName","isFulfilled","payload","isRejectedWithValue","originalArgs","baseQueryMeta","queryCacheKey","update","substate","id","fixedCacheKey","requestId","getMutationCacheKey","initialState","for","initialSubState","defaultQuerySubState","createNextState","defaultMutationSubState","import_toolkit8","defaultSerializeQueryArgs","sort","reduce","acc","key2","import_toolkit9","import_reselect","modules","extractRehydrationInfo","defaultMemoize","reducerPath","optionsWithDefaults","__spreadProps","serializeQueryArgs","keepUnusedDataFor","refetchOnMountOrArgChange","refetchOnFocus","refetchOnReconnect","tagTypes","batch","apiUid","nanoid","hasRehydrationInfo","injectEndpoints","inject","evaluatedEndpoints","endpoints","mutation","definition","overrideExisting","initializedModules_1","injectEndpoint","enhanceEndpoints","addTagTypes","eT","includes","partialDefinition","initializedModules","m","init","import_toolkit13","build","internalActions","removeQueryResult","unsubscribeQueryResult","mwApi","currentRemovalTimeouts","match","handleUnsubscribe","queries","util","resetApiState","clearTimeout","queryState","api2","endpointDefinition","currentTimeout","subscriptions","import_toolkit10","build2","mutationThunk","refetchQuery","isAnyOf","invalidateTags","calculateProvidedByThunk","tags","rootState","toInvalidate","selectInvalidatedBy","valuesArray_1","querySubState","subscriptionSubState","build3","queryThunk","currentPolls","updateSubscriptionOptions","updatePollingInterval","pending","rejected","condition","fulfilled","startNextPoll","cleanupPollForKey","lowestPollingInterval","findLowestPollingInterval","Number","isFinite","currentPoll","nextPollTimestamp","Date","now","currentInterval","pollingInterval","existingPoll","subscribers","POSITIVE_INFINITY","subscription","build4","refetchValidQueries","some","sub","every","import_toolkit11","neverResolvedError","build5","isQueryThunk","isAsyncThunkAction","isMutationThunk","isFullfilledThunk","lifecycleMap","stateBefore","cacheKey","removeMutationResult","oldState","handleNewKey","mutations","lifecycle","valueResolved","cacheEntryRemoved","mwApi2","onCacheEntryAdded","cacheDataLoaded","race","catch","selector","select","_","__","extra2","lifecycleApi","getCacheEntry","updateCachedData","updateRecipe","updateQueryData","runningHandler","import_toolkit12","build6","isPendingThunk","isPending","isRejectedThunk","isRejected","endpointName_1","originalArgs_1","onQueryStarted","lifecycle_1","queryFulfilled","selector_1","isUnhandledError","build7","initialized2","middlewareRegistered","coreModuleName","enablePatches","tag","executeEndpoint","_0","_1","rejectWithValue","fulfillWithValue","transformResponse","defaultTransformResponse","baseQueryApi_1","isForcedQuery","queryFn","arg2","fulfilledTimeStamp","error_1","requestState","baseFetchOnMountOrArgChange","fulfilledVal","refetchVal","forceRefetch","subscribe","createAsyncThunk","getPendingMeta","startedTimeStamp","_b","dispatchConditionRejection","prefetch","force","maxAge","ifOlderThan","queryAction","force2","initiate","latestStateValue","lastFulfilledTs","currentState","ret","patches","inversePatches","undo","patchQueryData","isDraftable","produceWithPatches","op","path","queryResultPatched","queryArgs","buildMatchThunkActions","thunk","matchPending","isAllOf","matchesEndpoint","matchFulfilled","matchRejected","definitions","querySlice","createSlice","reducers","draft","updateQuerySubstateIfExists","applyPatches","extraReducers","builder","addCase","structuralSharing","addMatcher","mutationSlice","track","updateMutationSubstateIfExists","invalidationSlice","actions","idSubscriptions","foundAt","splice","provided","cacheKeys","subscribedQueries","d","cacheKeys_1","providedTags","providedTags_1","subscriptionSlice","_c","a","subscriptionOptions","configSlice","online","navigator","onLine","focused","combinedReducer","combineReducers","reducer","unsubscribeMutationResult","sliceActions","safeAssign","input","middlewares","build8","middleware","applied","import_redux","middleware2","override","buildQuerySelector","selectQuerySubState","createSelector","selectInternalState","internalState","withRequestFlags","buildMutationSelector","mutationId","selectMutationSubstate","apiState","Set","invalidateSubscriptions_1","add","isUninitialized","isLoading","isSuccess","isError","runningQueries","runningMutations","buildInitiateQuery","thunkResult","abort","statePromise","unwrap","refetch","unsubscribe","buildInitiateMutation","returnValuePromise","getRunningOperationPromises","__spreadArray","t","getRunningOperationPromise","argOrRequestId","anyApi","createThunkMiddleware","extraArgument","_ref","withExtraArgument","createDraftSafeSelector","wrappedSelector","isDraft","composeWithDevTools","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","__REDUX_DEVTOOLS_EXTENSION__","proto","baseProto","_this","MiddlewareArray","__extends","species","_super","freezeDraftable","val","isImmutableDefault","isFrozen","createImmutableStateInvariantMiddleware","isPlain","findNonSerializableValue","isSerializable","getEntries","ignoredPaths","foundNestedSerializable","keyPath","hasIgnoredPaths","nestedValue","nestedPath","createSerializableStateInvariantMiddleware","getDefaultMiddleware","middlewareArray","thunkMiddleware","configureStore","rootReducer","curriedGetDefaultMiddleware","devTools","preloadedState","enhancers","finalMiddleware","middlewareEnhancer","applyMiddleware","finalCompose","compose2","trace","storeEnhancers","composedEnhancer","createStore","prepareAction","actionCreator","prepared","isValidKey","getType","executeReducerBuilderCallback","builderCallback","defaultCaseReducer","actionsMap","actionMatchers","typeOrActionCreator","matcher","addDefaultCase","createReducer","mapOrBuilderCallback","getInitialState","finalActionMatchers","finalDefaultCaseReducer","frozenInitialState_1","caseReducers","reducer2","cr","previousState","caseReducer","isDraft2","isDraftable2","createNextState2","_reducer","reducerNames","sliceCaseReducersByName","sliceCaseReducersByType","actionCreators","buildReducer","finalCaseReducers","reducerName","prepareCallback","maybeReducerWithPrepare","prepare","createSingleArgumentStateOperator","mutator","operator","createStateOperator","isPayloadActionArgument","runMutator","isDraft3","createNextState3","selectIdValue","entity","selectId","ensureEntitiesArray","entities","splitAddedUpdatedEntities","newEntities","added","updated","changes","createUnsortedStateAdapter","addOneMutably","ids","addManyMutably","setOneMutably","removeManyMutably","didMutate","updateManyMutably","updates","updatesPerEntity","didMutateIds","original2","newKey","hasNewKey","takeNewKey","upsertManyMutably","removeAll","addOne","addMany","setOne","setMany","setAll","updateOne","updateMany","upsertOne","upsertMany","removeOne","removeMany","createEntityAdapter","sortComparer","instance","stateFactory","additionalState","selectorsFactory","getSelectors","selectState","selectIds","selectEntities","selectAll","selectById","selectTotal","selectGlobalizedEntities","stateAdapter","models","model","merge","setManyMutably","appliedUpdates","newId","resortEntities","allEntities","newSortedIds","b","areArraysEqual","createSortedStateAdapter","size","commonProperties","miniSerializeError","simpleError","property","message","typePrefix","payloadCreator","requestStatus","serializeError","rejectedWithValue","aborted","AC","AbortController","dispatchEvent","onabort","reason","throwIfAborted","class_1","process","abortReason","idGenerator","abortController","abortedPromise","started","promise","conditionResult","RejectWithValue","FulfillWithMeta","finalAction","err_1","unwrapResult","matches","v","matchers","hasExpectedRequestMetadata","validStatus","hasValidRequestId","hasValidRequestStatus","isAsyncThunkArray","asyncThunks","asyncThunk","combinedMatcher","hasFlag","assertFunction","func","expected","noop","catchRejection","onError","addAbortSignalListener","abortSignal","callback","once","abortControllerWithReason","listenerCancelled","listener","code","task","validateActive","TaskAbortError","promisifyAbortSignal","notifyRejection","createPause","output","createDelay","pause","timeoutMs","INTERNAL_NIL_TOKEN","alm","createFork","parentAbortSignal","taskExecutor","controller","childAbortController","task2","cleanUp","delay","result2","cancel","createTakePattern","startListening","predicate","tuplePromise","effect","listenerApi","getOriginalState","promises","take","getListenerEntryPropsFrom","safelyNotifyError","errorHandler","errorToNotify","errorInfo","errorHandlerError","addListener","clearAllListeners","removeListener","defaultErrorHandler","cancelActiveListeners","createListenerMiddleware","middlewareOptions","listenerMap","Map","findListenerEntry","comparator","existingEntry","createListenerEntry","delete","cancelOptions","cancelActive","insertEntry","stopListening","entry2","notifyListener","internalTaskController","Boolean","fork","listenerError_1","raisedBy","clearListenerMiddleware","clear","createClearListenerMiddleware","originalState","listenerEntries","runListener","predicateError","clearListeners","enableES5","classNames","classes","argType","inner","join","default","regexAnySingleEscape","regexSingleEscape","regexExcessiveSpaces","cssesc","string","defaults","quotes","quote","isIdentifier","firstChar","counter","character","codePoint","charCodeAt","toUpperCase","escapeEverything","$0","$1","$2","version","dateLongFormatter","pattern","formatLong","date","width","timeLongFormatter","time","longFormatters","p","P","dateTimeFormat","matchResult","datePattern","timePattern","dateTime","getTimezoneOffsetInMilliseconds","utcDate","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","setUTCFullYear","getTime","startOfUTCISOWeekYear","dirtyDate","requiredArgs","year","getUTCISOWeekYear","fourthOfJanuary","setUTCHours","startOfUTCISOWeek","MILLISECONDS_IN_WEEK","getUTCISOWeek","toDate","diff","round","getUTCFullYear","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfUTCWeekYear","dirtyOptions","locale","localeFirstWeekContainsDate","firstWeekContainsDate","defaultFirstWeekContainsDate","toInteger","getUTCWeekYear","firstWeek","startOfUTCWeek","getUTCWeek","RangeError","firstWeekOfNextYear","firstWeekOfThisYear","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","token","isProtectedWeekYearToken","throwProtectedError","format","required","weekStartsOn","day","getUTCDay","setUTCDate","getUTCDate","localeWeekStartsOn","defaultWeekStartsOn","dirtyNumber","NaN","number","ceil","floor","addDays","dirtyAmount","amount","setDate","addMonths","dayOfMonth","endOfDesiredMonth","setMonth","daysInMonth","setFullYear","addYears","MILLISECONDS_IN_DAY","differenceInCalendarDays","dirtyDateLeft","dirtyDateRight","startOfDayLeft","startOfDay","startOfDayRight","timestampLeft","timestampRight","differenceInCalendarMonths","dateLeft","dateRight","yearDiff","monthDiff","compareLocalAsc","differenceInDays","sign","difference","abs","isLastDayNotFull","eachDayOfInterval","dirtyInterval","interval","startDate","start","endDate","end","endTime","dates","currentDate","setHours","endOfDay","endOfMonth","month","endOfWeek","getDay","addLeadingZeros","targetLength","y","signedYear","M","getUTCMonth","dayPeriodEnumValue","getUTCHours","h","H","getUTCMinutes","getUTCSeconds","S","numberOfDigits","milliseconds","getUTCMilliseconds","pow","dayPeriodEnum","formatters","G","localize","era","ordinalNumber","unit","lightFormatters","Y","signedWeekYear","weekYear","R","u","Q","quarter","q","L","w","week","I","isoWeek","D","dayOfYear","timestamp","setUTCMonth","startOfYearTimestamp","getUTCDayOfYear","E","dayOfWeek","localDayOfWeek","c","isoDayOfWeek","dayPeriod","toLowerCase","hours","B","K","k","X","_localize","timezoneOffset","_originalDate","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","O","formatTimezoneShort","z","originalDate","T","offset","dirtyDelimiter","absOffset","minutes","delimiter","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","dirtyFormatStr","formatStr","defaultLocale","isValid","subMilliseconds","formatterOptions","substring","firstCharacter","longFormatter","cleanEscapedString","formatter","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","isAfter","dirtyDateToCompare","dateToCompare","isBefore","isEqual","dirtyLeftDate","dirtyRightDate","isSameDay","dateLeftStartOfDay","dateRightStartOfDay","isSameMonth","isDate","isWeekend","isWithinInterval","startTime","buildFormatLongFn","defaultWidth","formats","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","count","tokenValue","addSuffix","comparison","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","_date","_baseDate","_options","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","argumentCallback","rem100","narrow","abbreviated","wide","short","am","pm","midnight","noon","morning","afternoon","evening","night","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchedString","parsePatterns","defaultParseWidth","findIndex","findKey","valueCallback","array","parsePattern","parseInt","parseResult","any","index","long","medium","formatDistance","formatRelative","max","dirtyDatesArray","datesArray","dirtyObject","setUTCDay","dirtyDay","currentDay","remainder","dayIndex","numericPatterns","timezonePatterns","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","twoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","parsers","priority","flags","incompatibleTokens","isTwoDigitYear","validate","normalizedTwoDigitYear","_match","_flags","firstWeekOfYear","dirtyWeek","setUTCWeek","dirtyISOWeek","setUTCISOWeek","subPriority","isLeapYear","wholeWeekDays","setUTCISODay","isPM","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","timestampIsSet","_token","notWhitespaceRegExp","dirtyDateString","dirtyFormatString","dirtyReferenceDate","dateString","formatString","subFnOptions","setters","dateToSystemTimezone","tokens","usedTokens","parser","incompatibleToken","usedToken","fullToken","uniquePrioritySetters","setter","setterArray","convertedDate","getDaysInMonth","monthIndex","lastDayOfMonth","dirtyMonth","dateWithDesiredMonth","setYear","dirtyYear","startOfMonth","startOfWeek","addMilliseconds","subMonths","argument","argStr","stack","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","getOwnPropertyNames","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","descriptor","g","l","$$typeof","A","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","die","DRAFT_STATE","Ctor","Function","objectCtorString","DRAFTABLE","isMap","isSet","each","getArchtype","thing","type_","prop","propOrOldValue","is","hasMap","hasSet","latest","copy_","base_","shallowCopy","descriptors","desc","freeze","deep","dontMutateFrozenCollections","getPlugin","pluginKey","plugin","plugins","loadPlugin","implementation","getCurrentScope","currentScope","usePatchesInScope","scope","patchListener","patches_","inversePatches_","patchListener_","revokeScope","leaveScope","drafts_","revokeDraft","parent_","enterScope","immer","immer_","canAutoFreeze_","unfinalizedDrafts_","revoke_","revoked_","processResult","baseDraft","isReplaced","useProxies_","willFinalizeES5_","modified_","finalize","maybeFreeze","generateReplacementPatches_","NOTHING","rootScope","childValue","finalizeProperty","scope_","finalized_","draft_","generatePatches_","parentState","targetObject","rootPath","assigned_","autoFreeze_","peek","getDescriptorFromProto","markChanged","prepareCopy","createProxy","parent","proxyMap_","proxySet_","isManual_","traps","objectTraps","arrayTraps","Proxy","revocable","revoke","proxy","createES5Proxy_","currentImpl","archType","hasChanges_","copyHelper","proxyProperty","markChangesSweep","drafts","hasArrayChanges","hasObjectChanges","baseValue","baseIsDraft","markChangesRecursively","deepClonePatchValue","cloned","immerable","clonePatchValueIfNeeded","ADD","applyPatches_","patch","parentType","basePath","assignedValue","origValue","unshift","replacement","enableMapSet","extendStatics","prepareMapCopy","prepareSetCopy","assertUnrevoked","DraftMap","cb","thisArg","_value","_this2","_this3","DraftSet","hasSymbol","hasProxies","Reflect","_desc$get","deleteProperty","owner","Immer","recipe","defaultBase","produce","hasError","ip","arg1","nextState","useProxies","setUseProxies","autoFreeze","setAutoFreeze","createDraft","finishDraft","applyPatchesImpl","bind","_dereq_","global","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","nextTick","element","createTextNode","observe","characterData","setImmediate","MessageChannel","createElement","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","appendChild","channel","port1","onmessage","port2","postMessage","queue","oldQueue","immediate","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","outcome","safelyResolveThenable","QueueItem","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","returnValue","getThen","thenable","onSuccess","tryToUnwrap","out","resolved","allResolver","resolveFromAll","outValue","_classCallCheck","Constructor","getIDB","indexedDB","webkitIndexedDB","mozIndexedDB","OIndexedDB","msIndexedDB","idb","isIndexedDBValid","open","isSafari","openDatabase","userAgent","platform","hasFetch","IDBKeyRange","createBlob","parts","properties","Blob","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","append","getBlob","Promise$1","executeCallback","executeTwoCallbacks","errorCallback","normalizeKey","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","buf","ArrayBuffer","Uint8Array","_checkBlobSupportWithoutCaching","txn","transaction","blob","objectStore","put","preventDefault","stopPropagation","oncomplete","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","deferredOperations","dbReady","_advanceReadiness","_rejectReadiness","_getConnection","upgradeNeeded","createDbContext","db","close","dbArgs","openreq","onupgradeneeded","createObjectStore","storeName","oldVersion","ex","newVersion","onerror","onsuccess","onversionchange","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","objectStoreNames","contains","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","FileReader","onloadend","base64","btoa","__local_forage_encoded_blob","readAsBinaryString","_decodeBlob","encodedBlob","atob","_isEncodedBlob","_fullyReady","_initReady","_dbInfo","_tryReconnect","forages","forage","createTransaction","mode","retries","tx","_initStorage","ready","initPromises","ignoreErrors","j","_defaultConfig","getItem","req","iterate","openCursor","iterationNumber","cursor","setItem","blobSupport","store","removeItem","advanced","openKeyCursor","advance","dropInstance","currentConfig","dbPromise","dropObjectPromise","deleteObjectStore","_forage2","dropDBPromise","deleteDatabase","onblocked","asyncStorage","_driver","_support","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","encoded1","encoded2","encoded3","encoded4","bufferLength","buffer","bytes","bufferToString","base64String","serialize","valueType","marker","fileReader","onload","str","readAsArrayBuffer","deserialize","blobType","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","localforageSerializer","createDbTable","executeSql","_initStorage$1","dbInfoPromise","serializer","tryExecuteSql","sqlStatement","SYNTAX_ERR","results","rows","getItem$1","item","iterate$1","_setItem","retriesLeft","originalValue","sqlError","QUOTA_ERR","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","operations","webSQLStorage","isLocalStorageValid","localStorage","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","searchElement","DefinedDrivers","DriverSupport","DefaultDrivers","INDEXEDDB","WEBSQL","LOCALSTORAGE","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","driver","callWhenReady","localForageInstance","libraryMethod","_args","_key","LocalForage","driverTypeKey","driverName","defineDriver","_config","_driverSet","_initDriver","_ready","_wrapLibraryMethodsWithReady","setDriver","driverObject","complianceError","driverMethods","driverMethodName","configureMissingMethods","methodNotImplementedFactory","methodName","_len","optionalDriverMethod","setDriverSupport","support","getDriver","getDriverPromise","getSerializer","serializerPromise","drivers","supportedDrivers","_getSupportedDrivers","setDriverToConfig","extendSelfWithDriver","_extend","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","supports","libraryMethodsAndProperties","createInstance","localforage_js","hookCallback","hooks","setHookCallback","isObject","hasOwnProp","isObjectEmpty","isUndefined","isNumber","arrLen","valueOf","createUTC","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","_isValid","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","createInvalid","fun","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","argLen","deprecations","deprecateSimple","isFunction","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","lastDay","sameElse","calendar","mom","_calendar","zeroFill","forceSign","absNumber","zerosToFill","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","defaultLongDateFormat","LTS","LT","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","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","getPrioritizedUnits","unitsObj","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","getSetMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","createUTCDate","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","weekday","resYear","resDayOfYear","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","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","seconds","kInput","_isPm","_meridiem","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","minl","normalizeLocale","chooseLocale","names","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","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","configFromArray","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","temp","weekdayOverflow","curWeek","GG","W","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","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","weeks","days","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","separator","utcOffset","offsetFromString","chunkOffset","cloneWithOffset","setTime","local","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","createAdder","direction","period","tmp","isAdding","invalid","isString","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","wholeMonthDiff","anchor","toISOString","keepOffset","inspect","prefix","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","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","localeErasConvertYear","dir","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","isDSTShifted","proto$1","get$1","field","listMonthsImpl","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","limit","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","IS_PAPA_WORKER","dynamicTyping","J","dynamicTypingFunction","worker","WORKERS_SUPPORTED","URL","webkitURL","BLOB_URL","createObjectURL","Worker","userStep","userChunk","chunk","userComplete","userError","workerId","NODE_STREAM_INPUT","download","readable","read","on","File","stream","unparse","BAD_DELIMITERS","skipEmptyLines","newline","quoteChar","header","columns","escapeChar","escapeFormulae","fields","RECORD_SEP","fromCharCode","UNIT_SEP","BYTE_ORDER_MARK","LocalChunkSize","RemoteChunkSize","DefaultDelimiter","Parser","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","attr","files","file","inputElem","instanceConfig","before","_handle","_finished","_completed","_halted","_input","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","errors","chunkSize","streamer","parseChunk","beforeFirstChunk","paused","preview","WORKER_ID","finished","_sendError","_readChunk","_chunkLoaded","XMLHttpRequest","withCredentials","_chunkError","downloadRequestBody","downloadRequestHeaders","setRequestHeader","send","readyState","getResponseHeader","lastIndexOf","statusText","webkitSlice","mozSlice","FileReaderSync","readAsText","encoding","resume","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","transformHeader","row","comments","successful","bestDelimiter","delimitersToGuess","getCharIndex","U","N","fastMode","C","linebreak","truncated","terminate","isColorSupported","bold","dim","italic","underline","inverse","hidden","strikethrough","red","green","yellow","magenta","cyan","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","createColors","_processor","selectors","cache","_getRequireWildcardCache","hasPropertyDescriptor","_interopRequireWildcard","WeakMap","processor","_default","_WHITESPACE_TOKENS","_Object$assign","_root","_interopRequireDefault","_selector","_className","_comment","_id","_tag","_string","_pseudo","_attribute","_universal","_combinator","_nesting","_sortAscending","_tokenize","types","_util","_defineProperties","props","WHITESPACE_TOKENS","space","feed","tab","WHITESPACE_EQUIV_TOKENS","comment","tokenStart","line","FIELDS","START_LINE","column","START_COL","tokenEnd","END_LINE","END_COL","getSource","startLine","startColumn","endLine","endColumn","getTokenSource","getTokenSourceSpan","startToken","endToken","unescapeProp","node","ensureObject","unesc","raws","indexesOf","indexes","rule","lossy","safe","position","css","_errorGenerator","rootSource","root","errorGenerator","loop","protoProps","staticProps","_proto","errorOptions","attribute","startingToken","currToken","TYPE","closeSquare","START_POS","sourceIndex","word","spaceBefore","commentBefore","lastAdded","spaceAfterMeaningfulToken","prevContent","spaces","after","existingComment","getProp","asterisk","equals","namespace","dollar","oldRawValue","caret","combinator","_unescaped","_oldRawValue","oldValue","quoteMark","insensitive","insensitiveFlag","_unescapeValue","unescapeValue","unescaped","lastComment","rawLastComment","lastValue","rawLastValue","newNode","parseWhitespaceEquivalentTokens","stopPosition","startPosition","nodes","firstToken","lastToken","convertWhitespaceNodesToSpace","requiredSpace","rawSpace","lossySpace","rawSpaceBefore","rawSpaceAfter","isNamedCombinator","slash","namedCombinator","nameRaw","unexpected","nextSigTokenPos","locateNextMeaningfulToken","comma","spaceOrDescendantSelectorNodes","_this$convertWhitespa2","_space","_rawSpace","_this$convertWhitespa3","_space2","_rawSpace2","endsWith","optionalSpace","last","_this$convertWhitespa","trailingComma","_inferEndPosition","opts","missingBackslash","missingParenthesis","missingSquareBracket","prevToken","nextToken","universal","nesting","parentheses","unbalanced","PSEUDO","openParenthesis","closeParenthesis","parenEnd","parenStart","parenValue","parseParenthesisToken","appendToPropertyAndEscape","pseudo","_this4","pseudoStr","colon","splitWord","first","firstCallback","_this5","hasClass","escapedDot","isKeyframesPercent","hasId","interpolations","hashIndex","indices","list","uniqs","ind","classNameOpts","idOpts","tagOpts","throwOnParenthesis","openSquare","ampersand","semicolon","found","an","END_POS","searchPosition","_parser","Processor","funcRes","_shouldUpdateSelector","updateSelector","_isLossy","lossless","_parseOptions","_run","_runSync","ast","astSync","transformSync","processSync","_CSSESC_QUOTE_OPTIONS","_cssesc","_unesc","_namespace","_types","_setPrototypeOf","WRAPPED_IN_QUOTES","warnOfDeprecatedValueAssignment","warnOfDeprecatedQuotedAssignment","warnOfDeprecatedConstructor","deprecatedUsage","Attribute","_Namespace","subClass","superClass","handleDeprecatedContructorOpts","ATTRIBUTE","_constructed","getQuotedValue","_determineQuoteMark","cssescopts","CSSESC_QUOTE_OPTIONS","smart","smartQuoteMark","preferredQuoteMark","setValue","_quoteMark","_syncRawValue","numSingleQuotes","numDoubleQuotes","escaped","NO_QUOTE","pref","DOUBLE_QUOTE","SINGLE_QUOTE","preferCurrentQuoteMark","rawValue","_handleEscapes","_spacesFor","rawSpaces","_stringFor","spaceName","defaultAttrConcat","attrSpaces","stringifyProperty","offsetOf","attributeSpaces","namespaceString","operatorSpaces","valueSpaces","attrValue","quoted","qm","qualifiedName","_unescapeValue2","_node","ClassName","_Node","CLASS","valueToString","Combinator","COMBINATOR","Comment","COMMENT","className","_createForOfIteratorHelperLoose","_arrayLikeToArray","_unsupportedIterableToArray","Container","prepend","at","child","_step","_iterator","insertAfter","oldNode","oldIndex","insertBefore","_findChildAtPosition","col","atPosition","foundChild","isAtPosition","lastEach","walk","walkAttributes","walkClasses","walkCombinators","walkComments","walkIds","_this6","ID","walkNesting","_this7","NESTING","walkPseudos","_this8","walkTags","_this9","TAG","walkUniversals","_this10","UNIVERSAL","_this11","memo","isNode","isPseudoElement","isPseudoClass","isPseudo","isContainer","isNamespace","isAttribute","isTag","isUniversal","isSelector","isRoot","isNesting","isComment","isCombinator","isClassName","_IS_TYPE","IS_TYPE","ROOT","SELECTOR","STRING","isNodeType","_constructors","_guards","Namespace","ns","Nesting","cloneNode","Node","remove","replaceWith","overrides","valueEscaped","originalEscaped","setPropertyAndEscape","setPropertyWithoutEscape","raw","_container","Pseudo","_Container","Root","_error","handler","Selector","Tag","Universal","backslash","bang","doubleQuote","singleQuote","greaterThan","pipe","plus","tilde","escapePos","lines","nextLine","nextOffset","tokenType","unclosed","what","fix","consumeWord","_unescapable","_wordDelimiters","unescapable","wordDelimiters","hex","hexChars","consumeEscape","hexDigits","stripComments","_getProp","_ensureObject","_stripComments","commentStart","lastEnd","commentEnd","gobbleHex","lower","spaceTerminated","fromCodePoint","CONTAINS_ESCAPE","gobbled","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","symbol","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","_createClass","_react","_react2","_core","_metaProps","CSVDownload","_React$Component","ReferenceError","_possibleConstructorReturn","_inherits","buildURI","_props","enclosingCharacter","uFEFF","specs","page","Component","_extends","CSVLink","event","isAsync","msSaveOrOpenBlob","filename","csvData","toCSV","msSaveBlob","onClick","proceed","handleLegacy","asyncOnClick","handleAsyncClick","handleSyncClick","_props2","children","_objectWithoutProperties","href","ref","link","handleClick","_toConsumableArray","isJsons","isArrays","jsonsHeaders","json","jsons2arrays","jsons","headerLabels","headerKeys","label","getHeaderValue","foundValue","elementOrEmpty","joiner","arrays2csv","jsons2csv","string2csv","csv","dataURI","_Download2","_Link2","PropsNotForwarded","_propTypes","ariaLabelsShape","dateInput","monthPicker","yearPicker","prevButton","nextButton","nodeInterop","_DayCell","_Month","_DateInput","_utils","_classnames3","_reactList","_shallowEqual","_max","_min","_differenceInDays","_isSameMonth","_addDays","_endOfMonth","_startOfMonth","_differenceInCalendarMonths","_setMonth2","_setYear2","_addYears","_isSameDay","_endOfWeek","_startOfWeek","_eachDayOfInterval","_format","_subMonths","_addMonths","_enUS","_styles","_accessibility","cacheBabelInterop","cacheNodeInterop","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_objectSpread","_defineProperty","_createSuper","Derived","hasNativeReflectConstruct","construct","sham","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_assertThisInitialized","Calendar","_PureComponent","preventUnnecessary","scroll","enabled","targetMonthIndex","minDate","dateOptions","visibleMonths","getVisibleRange","isFirstRender","scrollTo","setState","focusedDate","preventSnapRefocus","focusedDateDiff","isAllowedForward","calendarFocus","isAllowedBackward","newProps","newFocus","calcFocusDate","focusToDate","color","_this$props","onShownDateChange","maxDate","modeMapper","monthOffset","_setMonth","_setYear","newDate","rangesIndex","rangeItemIndex","onRangeFocusChange","_this$props2","visibleMonth","changeShownDate","showMonthArrow","showMonthAndYearPickers","ariaLabels","upperYearLimit","lowerYearLimit","styles","onMouseUp","monthAndYearWrapper","nextPrevButton","monthAndYearPickers","onChange","monthNames","monthAndYearDivider","fill","_this$props3","focusedRange","ranges","rangeColors","dateDisplayFormat","editableDateInputs","startDatePlaceholder","endDatePlaceholder","defaultColor","dateDisplayWrapper","range","showDateDisplay","disabled","dateDisplay","style","dateDisplayItem","dateDisplayItemActive","readOnly","placeholder","ariaLabel","onDragSelectionEnd","handleRangeFocusChange","_this$props4","dragSelectionEnabled","drag","disablePreview","_this$props5","updateRange","displayMode","newRange","_this$props6","scrollArea","listSizeCache","monthWidth","monthStep","_getMonthDisplayRange","getMonthDisplayRange","longMonthHeight","monthHeight","generateStyles","getMonthNames","calcScrollArea","calendarWidth","calendarHeight","prevProps","targetProp","dateRange","updateShownDate","shallowEqualObjects","weekDays","weekDay","weekdayDisplayFormat","_this$props7","onPreviewChange","disabledDates","disabledDay","navigatorRenderer","_this$state","isVertical","monthAndYearRenderer","renderMonthAndYear","calendarWrapper","onMouseLeave","renderDateDisplay","renderWeekdays","infiniteMonths","monthsVertical","monthsHorizontal","onScroll","handleScroll","treshold","itemSizeEstimator","estimateMonthSize","axis","itemRenderer","updatePreview","onDragSelectionStart","onDragSelectionMove","showMonthName","showWeekDays","PureComponent","monthDisplayFormat","dayDisplayFormat","showPreview","fixedHeight","shownDate","rangeShape","initialFocusedRange","_classnames","_isEqual","_parse","DateInput","changed","formatDate","parsed","_this$state2","onKeyDown","onBlur","_Calendar","_isWithinInterval","_differenceInCalendarDays","_isBefore","DateRange","_Component","isSingleValue","moveRangeOnFirstSelection","retainEndDateOnFirstSelection","focusedRangeIndex","selectedRange","nextFocusRange","dayOffset","calculateEndDate","isStartDateSelected","inValidDatesWithinRange","disabledDate","nextFocusRangeIndex","findNextRangeIndex","wasValid","newSelection","calcNewSelection","_ranges$focusedRange$","dateRangeWrapper","setSelection","_DateRange","_DefinedRange","DateRangePicker","dateRangePickerWrapper","_classnames4","_endOfDay","_isAfter","_startOfDay","DayCell","onMouseDown","keyCode","onMouseEnter","stateChanges","hover","active","isPassive","isToday","isStartOfWeek","isEndOfWeek","isStartOfMonth","isEndOfMonth","dayPassive","dayDisabled","dayToday","dayWeekend","dayStartOfWeek","dayEndOfWeek","dayStartOfMonth","dayEndOfMonth","dayHovered","dayActive","_classnames2","isInRange","isStartEdge","isEndEdge","dayStartPreview","dayInPreview","dayEndPreview","selected","startEdge","endEdge","inRange","dayContentRenderer","handleMouseEvent","onPauseCapture","handleKeyEvent","onKeyUp","getClassNames","tabIndex","renderSelectionPlaceholders","renderPreviewPlaceholder","dayNumber","autoFocus","previewColor","_defaultRanges","_InputRangeField","DefinedRange","rangeOffset","focusedInput","option","_this$props2$ranges","_this$props2$focusedR","getCurrentValue","staticRange","isSelected","headerContent","footerContent","inputRanges","staticRanges","renderStaticRangeLabel","definedRangesWrapper","labelContent","_this2$getSelectedRan","getSelectedRange","hasCustomRendering","staticRangeSelected","handleRangeChange","onMouseOver","staticRangeLabel","rangeOption","getRangeOptionValue","defaultInputRanges","defaultStaticRanges","InputRangeField","nextProps","inputRange","inputRangeInput","inputRangeLabel","_isWeekend","Month","monthDisplay","_drag$range","startDateOfMonth","endDateOfMonth","isOutsideMinMax","isDisabledSpecifically","isDisabledDay","dragRange","createStaticRanges","defineds","startOfLastWeek","endOfLastWeek","startOfToday","endOfToday","startOfYesterday","endOfYesterday","startOfLastMonth","endOfLastMonth","staticRangeHandler","definedRange","_DateRangePicker","daySelected","currentFocusedDate","targetInterval","targetDate","currentRangeIndex","nextIndex","startDateOfCalendar","endDateOfCalendar","sources","styleSource","aa","ba","encodeURIComponent","da","ea","fa","ha","ia","ja","ka","la","ma","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","qa","ra","sa","oa","pa","na","removeAttribute","setAttribute","setAttributeNS","xlinkHref","ta","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ua","va","wa","xa","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","prepareStackTrace","Oa","Pa","_context","_payload","_init","Qa","Ra","Sa","nodeName","Ua","_valueTracker","getValue","stopTracking","Ta","Va","checked","Wa","activeElement","Xa","defaultChecked","defaultValue","_wrapperState","initialChecked","Ya","initialValue","controlled","Za","$a","bb","ownerDocument","eb","defaultSelected","fb","dangerouslySetInnerHTML","gb","hb","ib","textContent","jb","kb","lb","mb","namespaceURI","innerHTML","firstChild","MSApp","execUnsafeLocalFunction","nb","lastChild","nodeType","nodeValue","ob","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","pb","qb","rb","setProperty","sb","menuitem","area","br","embed","hr","img","keygen","param","wbr","tb","ub","vb","wb","srcElement","correspondingUseElement","xb","yb","zb","Ab","Bb","stateNode","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","Rb","Sb","Ub","alternate","return","Vb","memoizedState","dehydrated","Wb","Yb","sibling","Xb","Zb","$b","unstable_scheduleCallback","ac","unstable_cancelCallback","bc","unstable_shouldYield","cc","unstable_requestPaint","unstable_now","dc","unstable_getCurrentPriorityLevel","ec","unstable_ImmediatePriority","fc","unstable_UserBlockingPriority","gc","unstable_NormalPriority","hc","unstable_LowPriority","ic","unstable_IdlePriority","jc","kc","nc","clz32","oc","pc","log","LN2","qc","rc","sc","tc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","uc","wc","xc","yc","zc","eventTimes","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","pointerId","Sc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Uc","Vc","isDehydrated","containerInfo","Wc","Xc","Yc","Zc","$c","ad","bd","ReactCurrentBatchConfig","cd","transition","ed","fd","gd","hd","Tc","jd","kd","ld","nd","charCode","od","pd","qd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","cancelBubble","persist","isPersistent","vd","wd","xd","rd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","sd","td","view","detail","ud","zd","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","yd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Ad","Cd","dataTransfer","Ed","Gd","animationName","elapsedTime","pseudoElement","Hd","clipboardData","Id","Kd","Ld","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Md","Nd","Alt","Control","Meta","Shift","Od","Pd","repeat","which","Qd","Sd","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Ud","touches","targetTouches","changedTouches","Wd","Xd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Yd","Zd","$d","ae","documentMode","be","ce","de","ee","fe","ge","he","ke","email","password","search","tel","le","me","ne","listeners","oe","pe","qe","re","se","te","ue","ve","we","xe","ye","oninput","ze","detachEvent","Ae","Be","attachEvent","Ce","De","Ee","Ge","He","Ie","Je","nextSibling","Ke","compareDocumentPosition","Le","HTMLIFrameElement","contentWindow","Me","contentEditable","Ne","focusedElem","selectionRange","selectionStart","selectionEnd","defaultView","getSelection","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","top","scrollTop","focus","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","animationend","animationiteration","animationstart","transitionend","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","gf","kf","lf","mf","Tb","nf","of","pf","qf","rf","capture","passive","sf","tf","parentWindow","uf","vf","Z","ya","ab","ca","ie","char","je","wf","xf","yf","zf","Af","Bf","Cf","Df","__html","Ef","Ff","Gf","If","queueMicrotask","Hf","Jf","Kf","Lf","previousSibling","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Yf","Zf","$f","ag","getChildContext","bg","__reactInternalMemoizedMergedChildContext","cg","dg","eg","fg","ig","jg","kg","mg","ng","og","pg","qg","_currentValue","rg","childLanes","sg","dependencies","firstContext","lanes","tg","ug","memoizedValue","vg","wg","xg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","interleaved","effects","yg","zg","eventTime","lane","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Hg","refs","Ig","Mg","isMounted","_reactInternals","enqueueSetState","Jg","Kg","Lg","enqueueReplaceState","enqueueForceUpdate","Ng","shouldComponentUpdate","isPureReactComponent","Og","updater","Pg","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Qg","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","deletions","ih","pendingProps","treeContext","retryLane","jh","kh","lh","mh","memoizedProps","nh","oh","ph","_owner","_stringRef","qh","rh","sh","uh","vh","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","tagName","Gh","Hh","Ih","Jh","revealOrder","Kh","Lh","_workInProgressVersionPrimary","Mh","ReactCurrentDispatcher","Nh","Oh","Ph","Qh","Rh","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","baseQueue","ai","bi","ci","lastRenderedReducer","hasEagerState","eagerState","lastRenderedState","di","ei","fi","gi","hi","getSnapshot","ji","ki","lastEffect","stores","li","mi","ni","destroy","deps","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Hi","Ii","Ti","Vi","Wi","Ji","Ki","Li","Mi","Ni","componentDidCatch","Oi","componentStack","Pi","pingCache","Qi","Ri","Si","Xi","tailMode","tail","subtreeFlags","Yi","pendingContext","Zi","wasMultiple","multiple","suppressHydrationWarning","onclick","createElementNS","$i","rendering","aj","renderingStartTime","isBackwards","bj","cj","dj","ReactCurrentOwner","ej","fj","gj","hj","ij","jj","kj","lj","baseLanes","cachePool","transitions","mj","nj","oj","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","pj","qj","rj","sj","tj","uj","vj","fallback","wj","xj","yj","zj","_reactRetry","Aj","Bj","Cj","Dj","Ej","Gj","Hj","Ij","WeakSet","Jj","Kj","Lj","Nj","Oj","Pj","Qj","Rj","Sj","Tj","_reactRootContainer","Uj","V","Vj","Wj","Xj","onCommitFiberUnmount","componentWillUnmount","Yj","Zj","ak","bk","ck","dk","display","ek","fk","gk","hk","ik","__reactInternalSnapshotBeforeUpdate","src","Uk","jk","kk","lk","mk","nk","ok","pk","qk","rk","Infinity","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","callbackNode","expirationTimes","expiredLanes","vc","callbackPriority","hg","Dk","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","finishedWork","finishedLanes","Ok","timeoutHandle","Pk","Qk","Rk","Sk","Tk","mutableReadLanes","Ac","Mj","onCommitFiberRoot","lc","onRecoverableError","Vk","onPostCommitFiberRoot","Wk","Xk","Zk","isReactComponent","pendingChildren","$k","mutableSourceEagerHydrationData","al","pendingSuspenseBoundaries","bl","cl","dl","el","fl","gl","hl","Fj","Yk","jl","reportError","kl","_internalRoot","ll","ml","nl","ol","ql","pl","unmount","unstable_scheduleHydration","querySelectorAll","form","rl","usingClientEntryPoint","Events","sl","findFiberByHostInstance","bundleType","rendererPackageName","tl","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","ul","isDisabled","supportsFiber","createPortal","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","sortIndex","performance","expirationTime","priorityLevel","scheduling","isInputPending","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","unstable_wrapCallback","globalThis","_class","_temp","CLIENT_SIZE_KEYS","CLIENT_START_KEYS","INNER_SIZE_KEYS","OFFSET_SIZE_KEYS","OFFSET_START_KEYS","OVERFLOW_KEYS","SCROLL_SIZE_KEYS","SCROLL_START_KEYS","SIZE_KEYS","NOOP","PASSIVE","hasSupport","UNSTABLE_MESSAGE","MAX_SYNC_UPDATES","isEqualSubset","defaultScrollParentGetter","getEl","overflowKey","parentElement","getComputedStyle","defaultScrollParentViewportSizeGetter","scrollParent","constrain","minSize","itemsPerRow","ReactList","initialIndex","cachedScrollPosition","prevPrevState","unstable","updateCounter","newState","updateFrameAndClearCache","updateFrame","clearSizeCache","updateCounterTimeoutId","offsetKey","offsetParent","items","scrollKey","actual","getScrollSize","scrollParentViewportSizeGetter","getOffset","_document","itemSizeGetter","getScrollPosition","hasDeterminateSize","getSpaceBefore","useStaticSize","itemSize","itemEls","firstEl","firstElSize","delta","startKey","firstStart","updateScrollParent","updateSimpleFrame","updateVariableFrame","updateUniformFrame","scrollParentGetter","getStartAndEnd","elEnd","firstItemEl","lastItemEl","pageSize","maybeSetState","cacheSizes","_this$getStartAndEnd2","maxFrom","getSizeOfItem","maxSize","_itemSize","_this$getItemSizeAndI","getItemSizeAndItemsPerRow","_this$getStartAndEnd3","_constrain","_itemSize2","sizeKey","_this$state3","itemEl","setScroll","bottom","_this$state4","_this$getStartAndEnd4","itemStart","itemEnd","itemsRenderer","_this$state5","useTranslate3d","_this$state6","renderItems","overflowX","listStyle","msTransform","WebkitTransform","__self","__source","jsx","jsxs","forceUpdate","escape","_status","_result","Children","only","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","startTransition","unstable_act","_localforage","formatProdErrorMessage","$$observable","observable","randomString","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","enhancer","_ref2","currentReducer","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","isSubscribed","replaceReducer","nextReducer","outerSubscribe","observeState","legacy_createStore","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","hasChanged","previousStateForKey","nextStateForKey","bindActionCreator","bindActionCreators","boundActionCreators","funcs","_dispatch","middlewareAPI","chain","NOT_FOUND","defaultEqualityCheck","equalityCheckOrOptions","providedOptions","equalityCheck","_providedOptions$equa","_providedOptions$maxS","resultEqualityCheck","createCacheKeyComparator","createSingletonCache","cacheIndex","createLruCache","memoized","matchingEntry","find","clearCache","getDependencies","dep","dependencyTypes","createSelectorCreator","memoize","memoizeOptionsFromArgs","_len2","_key2","_lastResult","_recomputations","directlyPassedOptions","memoizeOptions","resultFunc","_directlyPassedOption","_directlyPassedOption2","finalMemoizeOptions","memoizedResultFunc","lastResult","recomputations","resetRecomputations","createStructuredSelector","selectorCreator","objectKeys","resultSelector","_len3","_key3","composition","objA","objB","aKeys","bKeys","shallowEqualArrays","arrA","arrB","_export","flagEnabled","issueFlagNotices","_picocolors","_log","optimizeUniversalDefaults","featureFlags","experimental","flag","ref1","ref2","ref3","ref4","ref5","experimentalFlagsEnabled","JEST_WORKER_ID","withoutCapturing","optional","zeroOrMore","nestedBrackets","REGEX_SPECIAL","REGEX_HAS_SPECIAL","toSource","depth","inherit","slate","zinc","stone","orange","amber","lime","emerald","teal","sky","indigo","violet","purple","fuchsia","pink","rose","lightBlue","warmGray","trueGray","coolGray","blueGray","resolveConfig","_resolveConfig","_getAllConfigs","configs","defaultConfigs","cloneDeep","fromEntries","parseColor","formatColor","_colorName","HEX","SHORT_HEX","VALUE","SEP","ALPHA_SEP","CUSTOM_PROPERTY","RGB","HSL","loose","alpha","part","hasAlpha","pluginConfig","pluginName","normalize","percentage","lineWidth","shadow","image","gradient","familyName","genericName","absoluteSize","relativeSize","_color","_parseBoxShadowValue","cssFunctions","COMMA","UNDERSCORE","fullMatch","characterBefore","lengthUnitsPattern","lineWidths","parsedShadows","parseBoxShadowValue","valid","images","gradientTypes","validPositions","positions","fonts","genericNames","absoluteSizes","relativeSizes","k1","escapeCommas","getAllConfigs","_defaultConfigStubJs","_featureFlags","presets","flatMap","preset","features","respectDefaultRingColorOpacity","ringColor","experimentals","feature","alreadyShown","messages","risk","normalizeConfig","_prefix","purge","extension","extract","ref6","ref7","ref8","ref9","extractors","defaultExtractor","extensions","extractor","transformers","formatBoxShadowValue","_splitAtTopLevelOnly","KEYWORDS","SPACE","LENGTH","splitAtTopLevelOnly","seen","keyword","spread","blur","unknown","shadows","updateAllClasses","asValue","parseColorFormat","asColor","asLookupValue","coerceValue","_postcssSelectorParser","_escapeCommas","_withAlphaVariable","_dataTypes","_negateValue","updateClass","sel","updatedClass","resolveArbitraryValue","modifier","isArbitraryValue","asNegativeValue","lookup","positiveValue","supportsNegativeValues","splitAlpha","slashIdx","opacityValue","tailwindConfig","normalizedColor","withAlphaValue","guess","typeMap","supportedTypes","arbitraryValue","delim","idx","splitAtFirst","explicitType","toPaths","_corePluginList","_configurePlugins","_defaultConfigStub","_colors","_defaults","_toPath","_normalizeConfig","_isPlainObject","_cloneDeep","_pluginUtils","_toColorValue","mergeWith","customizer","merged","configUtils","negative","negativeScale","negativeValue","breakpoints","mergeThemes","themes","mergedValue","extendValue","mergeExtensionCustomizer","mergeExtensions","themeValue","resolveThemePath","utils","valueToResolve","toPath","newPath","resolveFunctionKeys","resolvePath","normalized","extractPluginConfigs","allConfigs","__isOptionsFunction","pluginLists","corePluginConfigs","important","variantOrder","corePlugins","reduceRight","corePluginConfig","pluginList","_regex","SPECIALS","separatorIndex","separatorStart","separatorLength","matchAll","matchesSeparator","atEndOfSeparator","matchesFullSeparator","toColorValue","maybeFunction","withAlphaVariable","alphaValue","variable","opacityVariable","darkMode","auto","px","none","spin","ping","pulse","bounce","square","video","backdropBlur","backdropBrightness","backdropContrast","backdropGrayscale","backdropHueRotate","backdropInvert","backdropOpacity","backdropSaturate","backdropSepia","backgroundColor","backgroundImage","backgroundOpacity","backgroundPosition","center","right","backgroundSize","cover","contain","brightness","borderColor","borderOpacity","borderSpacing","borderWidth","boxShadow","boxShadowColor","caretColor","accentColor","contrast","container","pointer","wait","move","help","progress","cell","crosshair","grab","grabbing","divideColor","divideOpacity","divideWidth","dropShadow","grayscale","hueRotate","invert","initial","flexBasis","serif","mono","thin","extralight","light","normal","semibold","extrabold","gap","gradientColorStops","gridAutoColumns","fr","gridAutoRows","gridTemplateColumns","gridTemplateRows","screen","fit","inset","animationTimingFunction","letterSpacing","tighter","tight","wider","widest","snug","relaxed","listStyleType","disc","decimal","margin","prose","minWidth","objectPosition","padding","placeholderColor","placeholderOpacity","outlineColor","outlineOffset","outlineWidth","ringOffsetColor","ringOffsetWidth","ringOpacity","ringWidth","rotate","saturate","scrollMargin","scrollPadding","sepia","skew","stroke","textColor","textDecorationColor","textDecorationThickness","textUnderlineOffset","textIndent","textOpacity","transformOrigin","transitionDelay","transitionDuration","transitionProperty","transitionTimingFunction","linear","in","translate","willChange","contents","inst","useSyncExternalStoreWithSelector","hasValue","warned","_objectSpread2","original","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","nmd","paths","getBatch","ReactReduxContext","useReduxContext","notInitialized","refEquality","createSelectorHook","useDefaultReduxContext","equalityFn","getServerState","selectedState","addNestedSub","useSelector","nullListeners","notify","createSubscription","parentSub","handleChangeWrapper","onStateChange","trySubscribe","createListenerCollection","notifyNestedSubs","tryUnsubscribe","getListeners","useIsomorphicLayoutEffect","serverState","contextValue","React","createStoreHook","useStore","createDispatchHook","useDefaultStore","newBatch","useDispatch","shallowEqual","keysA","keysB","initializeConnect","KEY_PREFIX","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","autoMergeLevel1","inboundState","reducedState","debug","createPersistoid","whitelist","transforms","throttle","storageKey","storage","defaultSerialize","writeFailHandler","lastState","stagedState","keysToProcess","timeIterator","writePromise","processNextKey","clearInterval","endState","subState","transformer","onWriteFail","passWhitelistBlacklist","setInterval","flush","getStoredState","defaultDeserialize","serialized","rawState","serial","warnIfRemoveError","_objectWithoutPropertiesLoose","registry","bootstrapped","persistorReducer","firstIndex","isLoadingSlice","setIsLoading","AttributionModelTypes","attributeModelDropDownRoutes","FirstClick","isActive","LastClick","Linear","PositionBased","TimeDecay","Impressions","pocOnly","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","joinUrls","isAbsoluteUrl","withoutTrailingSlash","withoutLeadingSlash","_iPO","isPlainObject2","isJsonContentType","retryWithBackoff","buildSlice","createAction2","tagTypeSubscriptions","incomingTags","isFulfilled2","isRejectedWithValue2","buildSelectors","invalidateSubscriptions","invalidate","isAnyOf2","isFulfilled3","isRejectedWithValue3","clearPolls","isFulfilled4","getCacheKey","cacheKey2","isPending2","isRejected2","isFulfilled5","hasTheForce","hasMaxAge","buildThunks","createAction3","buildMiddleware","middlewareActions","middlewareWarning","buildInitiate","isQueryDefinition","isMutationDefinition","useStableQueryArgs","incoming","UNINITIALIZED_VALUE","useShallowStableValue","useRef2","useEffect2","useEffect3","defaultQueryStateSelector","defaultMutationStateSelector","noPendingQueryStateSelector","isFetching","capitalize","reactHooksModuleName","rrBatch","rrUseDispatch","rrUseSelector","rrUseStore","unstable__sideEffectsInRender","usePossiblyImmediateEffect","buildQueryHooks","useQuerySubscription","skip","stableArg","stableSubscriptionOptions","promiseRef","useRef3","subscriptionRemoved","lastPromise","lastSubscriptionOptions","useMemo2","useLazyQuerySubscription","setArg","subscriptionOptionsRef","trigger","preferCacheValue","useQueryState","selectFromResult","selectDefaultResult","queryStatePreSelector","querySelector","shallowEqual2","newLastValue","useLazyQuery","queryStateResults","lastArg","useQuery","querySubscriptionResults","buildMutationHook","setPromise","triggerMutation","promise2","mutationSelector","finalState","usePrefetch","stableDefaultOptions","hasData","currentData","buildHooks","moduleOptions","useMutation","reactHooksModule","ExclusionLevel","ExclusionCategory","ExclusionTypeLabel","ExclusionType","ExclusionMatchTarget","RuleMatchType","getGenerateIdForQuery","targetPropNames","argumentWithProperties","cacher","searchTerm","seekValue","seekId","getFileName","contentDisposition","contentDispositionFileName","startOfSubstring","endOfSubstring","downloadFile","fileName","htmlDownloadTag","click","revokeObjectURL","exclusionTypeLabelMap","IpAddress","ServerSideRaId","RaId","EmailAddress","PhoneNumber","LandingPageURL","ReferrerURL","exclusionTypeLabelToTypeMap","typeMatchTargetMap","RemoteAddress","InvalidCharacterError","bs","decodeURIComponent","InvalidTokenError","CustomDataKeys","base64_url_decode","isSandboxUser","jwtToken","jwt_decode","IsSandboxUser","authApi","auth","accessToken","login","invalidatesTags","loginPromise","loginResult","loginError","authResponse","access_token","authenticate","isUserSandbox","isUrlSandbox","host","accessTokenOverride","authenticateRequest","authorization","providesTags","useLoginMutation","LoggedOutState","useAuthenticateQuery","expiresIn","refreshToken","isAuthenticated","idToken","authSlice","logout","expires_in","refresh_token","selectSelf","selectIdToken","selectIsSuperUser","IsSuperUser","selectIsSandboxUser","selectIsAuthenticated","selectUserDetails","FirstName","LastName","Email","UserName","claims","getUserDetails","MetricIdSeperator","TabKey","sensitiveMetricTypeNames","KEYWORD","LANDING_PAGE","REFERRER","UTM_CAMPAIGN","UTM_MEDIUM","UTM_CONTENT","handleTransformResponse","metrics","metric","metricTypeNames","segmentRequests","metricRows","metricTypeName","metricIndex","metricId","metricParentId","rootAncestorId","isMetricTypeNameSensitive","segmentCategory","metricValue","createInsightMetrics","staggeredBaseQuery","queryApi","baseQueryArgs","refetchErroredQueries","getSites","site","siteId","fullURL","currency","getVisitorCount","getMetrics","conversionFilter","getVisitorDetail","visitorId","getConversionCount","conversionType","getTotalAdCosts","currencyCode","getTotalRevenue","getTotalRevenueByVisitorId","getAverageRevenueBetweenDates","getAverageVisitorLifetimeValue","startDateTimeIso","endDateTimeIso","getCountRevenue","getConversionsExport","viewType","getConversionInboundCallExport","getConversionInboundCallRecordingUrl","eventId","getRevenueExport","getOpportunitiesExport","getPaginatedConversions","paginationRequest","requestDetails","seekColumnName","seekDirection","orderDirection","typedResponse","getPaginatedRevenue","getPaginatedOpportunities","getPaginatedConversionInboundCalls","orderedData","getDataScienceMmmSegments","getDataScienceMmmSegmentData","segment","dayMultiplier","demo","getWebhooks","getWebhookDataFields","webhookType","getWebhookHistories","webhookId","getDataScienceTasks","getConversionPaths","getExclusions","exclusion","exclusionType","getRevenueByVisitorId","getOpportunitiesByVisitorId","getInboundCallRecordingUrlByHash","hash","getConversionInfluenceInsights","getWebPageViewSegmentationConfigs","getAdCostSegmentationConfigs","getSegmentationConfig","configId","domain","category","Forms","useGetSitesQuery","useGetVisitorCountQuery","useGetVisitorDetailQuery","useGetTotalRevenueByVisitorIdQuery","useGetConversionCountQuery","useGetTotalAdCostsQuery","useGetTotalRevenueQuery","useGetCountRevenueQuery","useGetAverageRevenueBetweenDatesQuery","useGetAverageVisitorLifetimeValueQuery","useGetMetricsQuery","useGetConversionsExportMutation","useGetConversionInboundCallExportMutation","useGetRevenueExportMutation","useGetOpportunitiesExportMutation","useGetPaginatedConversionsQuery","useGetPaginatedRevenueQuery","useGetPaginatedOpportunitiesQuery","useGetPaginatedConversionInboundCallsQuery","useGetConversionInboundCallRecordingUrlQuery","useGetDataScienceMmmSegmentsQuery","useGetDataScienceMmmSegmentDataQuery","useGetWebhooksQuery","useGetWebhookDataFieldsQuery","useGetWebhookHistoriesQuery","useGetExclusionsQuery","useGetDataScienceTasksQuery","useGetConversionPathsQuery","useGetOpportunitiesByVisitorIdQuery","useGetRevenueByVisitorIdQuery","useGetInboundCallRecordingUrlByHashQuery","useGetConversionInfluenceInsightsMutation","useGetWebPageViewSegmentationConfigsQuery","useGetSegmentationConfigQuery","useGetAdCostSegmentationConfigsQuery","defaultSite","siteLabel","selectedSiteSlice","selectSite","clearSites","selectedSite","selectSiteId","doRoutesNeedToBeUpdated","dropDownRoutes","keyToSetActive","route","isActivityTriggerNeeded","setSelectedDropDownItemAsActive","defaultState","isPocModeActive","pocToggleSlice","togglePoc","selectIsPOCModeActive","pocToggle","availableAttributionModels","availableAttributionModelsSlice","selectAttributionModel","enableImpressionsAttributionModelDefault","attributeModelRoute","DataDriven","selectAttributionModelsWithPocState","pocEnabled","getAvailableAttributionModels","attributionModels","getSelectedAttributionModel","attributeCompareModels","modelName","isPocOnly","createMetrics","advancedReportQueryApi","getClicksAdvancedReport","getConversionAdvancedReport","getOpportunityAdvancedReport","getRevenueAdvancedReport","getCostAdvancedReport","getClicksReport","getCostReport","getConversionReport","getRevenueReport","getOpportunityReport","useGetClicksAdvancedReportMutation","useGetConversionAdvancedReportMutation","useGetOpportunityAdvancedReportMutation","useGetRevenueAdvancedReportMutation","useGetCostAdvancedReportMutation","useGetClicksReportQuery","useGetCostReportQuery","useGetConversionReportQuery","useGetRevenueReportQuery","useGetOpportunityReportQuery","advancerReportsSiteIdChangedHandler","resetAdvancedReports","availableAttributionCompareModels","activeAttributionCompareModel","isAttributionComparisonActive","defaultAttributionCompareModel","availableAttributionCompareModelsSlice","selectAttributionCompareModel","setDisplayAttributionComparisonData","getAvailableAttributionCompareModels","selectIsAttributionComparisonActive","getSelectedAttributionCompareModel","getSelectedAttributionCompareModelString","_construct","Parent","Class","_wrapNativeSuper","_cache","Wrapper","LuxonError","InvalidDateTimeError","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","InvalidArgumentError","ZoneIsAbstractError","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","ts","otherZone","singleton","SystemZone","Intl","DateTimeFormat","resolvedOptions","timeZone","parseZoneInfo","formatOffset","dtfCache","typeToPos","ianaZoneCache","IANAZone","isValidZone","dtf","hour12","formatToParts","formatted","filled","partsOffset","fMonth","fDay","hackyOffset","adOrBc","asTS","over","objToLocalTS","intlLFCache","getCachedLF","locString","ListFormat","intlDTCache","getCachedDTF","intlNumCache","intlRelCache","sysLocaleCache","systemLocale","mapMonths","dt","DateTime","mapWeekdays","listStuff","englishFn","intlFn","listingMode","PolyNumberFormatter","intl","forceSimple","padTo","otherOpts","intlOpts","useGrouping","minimumIntegerDigits","inf","NumberFormat","getCachedINF","fixed","padStart","roundTo","PolyDateFormatter","originalZone","gmtOffset","offsetZ","setZone","toJSDate","offsetName","PolyRelFormatter","isEnglish","hasRelative","rtf","cacheKeyOpts","RelativeTimeFormat","getCachedRTF","numeric","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","English","numbering","outputCalendar","specifiedLocale","localeStr","xIndex","selectedStr","uIndex","smaller","numberingSystem","parseLocaleString","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","intlConfigString","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","isActuallyEn","hasNoWeirdness","alts","defaultToEN","matching","dtFormatter","fastNumbers","Settings","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","FixedOffsetZone","utcInstance","signedOffset","InvalidZone","normalizeZone","defaultZone","lowered","parseSpecifier","throwOnInvalid","twoDigitCutoffYear","cutoffYear","resetCache","isInteger","maybeArray","bestBy","by","best","pair","integerBetween","isNeg","parseInteger","parseFloating","parseMillis","fraction","digits","towardZero","factor","rounder","trunc","floorMod","offsetFormat","modified","offHourStr","offMinuteStr","offHour","offMin","asNumber","numericValue","normalizeObject","normalizer","timeObject","pick","monthsLong","monthsNarrow","weekdaysLong","weekdaysNarrow","meridiems","erasLong","erasShort","erasNarrow","stringifyTokens","splits","tokenToString","literal","macroTokenToFormatOpts","Formats","DD","DDD","DDDD","tt","ttt","tttt","TT","TTT","TTTT","fff","ffff","FF","FFF","FFFF","Formatter","formatOpts","systemLoc","redefaultToSystem","formatRange","numberFormatter","fmt","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","parseFormat","num","weekNumber","formatWithSystemDefault","maybeMacro","dur","lildur","tokenToField","realTokens","collapsed","shiftTo","mapped","currentFull","bracketed","Invalid","explanation","ianaRegex","combineRegexes","combineExtractors","mergedVals","mergedZone","patterns","simpleParse","offsetRegex","isoExtendedZone","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","int","extractISOTime","extractISOOffset","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","weekStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","fromStrings","extractRFC2822","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","conf","conversionAccuracy","matrix","durationToMillis","vals","sum","normalizeValues","previous","previousVal","conv","rollUp","accurate","isLuxonDuration","fmtOpts","formatDurationFromString","unitDisplay","listFormatter","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","fromMillis","toISOTime","toISO","fromDurationLike","negate","normalizeUnit","newVals","removeZeroes","shiftToAll","lastUnit","built","accumulated","own","negated","v1","v2","fromObject","durationLike","parseISODuration","parseISOTimeOnly","validateStartEnd","Interval","isLuxonInterval","invalidReason","toDuration","isEmpty","minus","hasSame","fromDateTimes","dateTimes","sorted","friendlyDateTime","mapUnits","numberOfParts","splitBy","intervals","xor","intersection","formatInterval","toISODate","toFormat","mapFn","builtStart","builtEnd","validateError","startIsValid","endIsValid","fromISO","sofar","overlaps","abutsStart","union","final","currentCount","ends","Info","locObj","relative","dayDiff","earlier","later","utcDayStart","toUTC","lowestOrder","highWater","differ","highOrderDiffs","remainingMillis","lowerOrderUnits","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","parseDigits","digitRegex","intUnit","post","deser","NBSP","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","strings","startIndex","groups","simple","partTypeStyleToTokenVal","dayperiod","hour24","dummyDateTimeCache","expandMacroTokens","formatOptsToTokens","maybeExpandMacroToken","explainFromTokens","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","unitForToken","disqualifyingUnit","buildRegex","regexString","matchIndex","rawMatches","specificOffset","toField","dateTimeFromMatches","parseFromTokens","resolvedOpts","isSpace","actualType","tokenForPart","nonLeapLadder","leapLadder","unitOutOfRange","js","computeOrdinal","uncomputeOrdinal","table","month0","gregorianToWeek","gregObj","weekToGregorian","weekData","weekdayOfJan4","yearInDays","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","hasInvalidWeekData","validYear","validWeek","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","MAX_DATE","unsupportedZone","possiblyCachedWeekData","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","formatDateTimeFromString","extended","longFormat","extendedZone","ianaName","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","diffRelative","calendary","relFormatter","lastOpts","argList","ot","_zone","isLuxonDateTime","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","c1","c2","keepCalendarTime","newTS","offsetGuess","asObj","reconfigure","mixed","settingWeekStuff","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","normalizedUnit","redefaultToEN","formatDateTime","formatDateTimeParts","ext","includeZone","includeOffsetSpace","toSQLDate","toSQLTime","includeConfig","otherDateTime","durOpts","otherIsLater","diffed","adjustedToZone","zoneToUse","offsetProvis","defaultValues","useWeekData","objNow","foundFirst","higherOrderInvalid","gregorian","tsFinal","offsetFinal","localeToUse","fromOpts","fromFormat","localeOpts","tokenList","expanded","isDateTime","fromFormatExplain","dateTimeish","fromJSDate","DateRangeTypes","toUtc","toLocalIso","START_DATE","END_DATE","dateRangeSlice","changeDateRange","getDateRangeAsObjects","selectDateRangeLocalIso","RangeRoutes","RangeRouteWeek","DataScienceTaskStatus","defaultChartOptions","cachedChartOptions","chartOptionsArray","chartOptionsSlice","toggleChartLegendFilter","chartId","filterLegendKey","chartOptions","filterLegendKeys","selectedChartType","selectedChartRange","selectChartType","chartToUpdate","chart","selectChartRange","selectChartId","getChartOptions","chartFilerKeys","filteredLegendKeys","getChartType","getChartTypeAndRange","chartType","reports","tableValueToSearch","graphValueToSearch","searchBarSlice","applySearchToTable","valueToSearch","applySearchToGraph","applySearchToTableAndGraph","clearSearch","getSearchTermsById","searchBar","defaultPaginationOptions","currentPage","defaultColumnName","previousRequest","paginationOptionsSlice","paginationOptions","resetToFirstPage","componentId","applyResetToFirstPage","initializePaginationOptions","initializedPaginationOptions","setPaginationOptions","targetPaginationOptions","setPreviousRequest","setPageSize","setColumnSorting","columnName","nextPage","totalPages","forwardSeekValue","forwardSeekId","previousPage","backwardSeekValue","backwardSeekId","updateSearchTermState","selectPaginationOptionsByComponentIdId","selectPaginationOptions","totalRecords","selectNullablePaginationOptions","selectLastPaginationRequest","isSidebarOpen","indexOfOpenAccordion","sidebarTogglingSlice","toggleSidebar","onToggleAccordion","closeSideBarAccordion","whiteListedFeatures","activatedProtectedFeatureIds","sidebarSlice","sideBarMenuItems","title","icon","subMenuItems","IsSubMenuOpen","isSiteProtectedFeature","menuItem","isSubMenuOpen","menuItemId","menuItemToToggle","closeAllSideBarAccordions","sidebarv2","selectIsSidebarOpen","selectSideBarMenuItems","accumulator","currentValue","whiteListedFeatureList","filteredSubMenuItems","subMenuItem","selectIsRouteActive","currentPathName","currentMenuItem","helpTileHasClosed","helpTileSlice","closeHelpTile","ViewType","defaultSuccessResult","commandApi","deleteMultipleRevenues","revenue","deleteMultipleOpportunities","opportunities","validateWebhookEndpoint","createWebhook","webhookName","webhookDescription","webhookUrl","isInternalWebhook","useCustomDataSchema","dataFields","updateWebhook","webhookBeingUpdated","existingWebhooks","webhooks","webhookIndex","webhook","triggerTaskRun","taskBeingTriggered","existingDataScienceTasks","dataScienceTasks","dataScienceTaskIndex","machineLearningModel","PROCESSING","updateDataScienceTask","dataScienceTaskBeingUpdated","dataScienceTask","createExclusion","exclusionLevel","exclusionCategory","exclusionMatchTarget","additionalInformation","ruleMatchType","deleteExclusion","updateSegmentationConfigStatus","cacheTag","updatedConfigStatus","SiteId","ConfigId","ConfigStatus","UpdatedConfigStatus","createSegmentationConfig","ruleAccessType","createdDateTime","createdBy","segmentationType","segmentName","segmentValue","rules","updateSegmentationConfig","updatedDateTime","updatedBy","useDeleteMultipleRevenuesMutation","useDeleteMultipleOpportunitiesMutation","useValidateWebhookEndpointMutation","useCreateWebhookMutation","useUpdateWebhookMutation","useTriggerTaskRunMutation","useUpdateDataScienceTaskMutation","useCreateExclusionMutation","useDeleteExclusionMutation","useUpdateSegmentationConfigStatusMutation","useCreateSegmentationConfigMutation","useUpdateSegmentationConfigMutation","rowSelections","rowSelectionSlice","selectRow","selectedRow","rowSelectionState","rowSelection","rowShouldBeAdded","rowId","newRowSelectionState","selectRows","selectedRows","shouldRemoveRows","rowsToAdd","clearRowSelections","filteredRows","rev","revenueId","selectRowSelectionByComponentId","selectRowsByComponentId","selectRowByIdAndComponentId","modalInfo","isOpen","modalSlice","openModal","modalProps","modalType","modalConfirmType","confirmModal","closeModal","selectModal","modal","accordions","accordionSlice","triggerAccordion","accordion","openAccordion","selectAccordion","areAnyAccordionsOpen","accordionIds","getRandomValues","selections","selection","Simple","dataViewSelectionSlice","toggleSelection","selectionToToggle","selectViewSelectionByComponentId","dataViewSelections","viewSelection","mapStates","googleStaticMapSlice","setInitialMapState","initialFocusLocation","initialZoomLevel","mapState","isInGlobalFocusMode","currentZoomLevel","currentFocusLocation","focusLocation","zoomIn","zoomOut","selectMapStateByComponentId","googleStaticMap","settingsSlice","setCurrencyCode","selectCurrencyCode","settings","isBlurActive","blurSlice","toggleBlur","numberOfRevenueItemsToUpload","numberOfRevenueItemsUploaded","numberOfOpportunityItemsToUpload","numberOfOpportunityItemsUploaded","uploadSlice","resetSlice","onNumberOfRevenueItemsToUploadChanged","onNumberOfRevenueItemsUploadedChanged","onNumberOfOpportunityItemsToUploadChanged","onNumberOfOpportunityItemsUploadedChanged","uploadStateSelector","upload","uploadRevenuePercentageSelector","uploadOpportunityPercentageSelector","publicCommandApi","uploadRevenues","revenues","itemNumber","uploadPromise","errorData","isUploadSuccessful","Errors","itemNumberFailure","uploadOpportunities","opportunity","useUploadRevenuesMutation","useUploadOpportunitiesMutation","rnds8","rng","crypto","msCrypto","uuid","REGEX","byteToHex","ToastType","rnds","PathTimeCalculationTypes","toastSlice","toasts","toast","guid","Success","onHideToast","onHideToastByTitle","spendAmounts","selectedSegmentKey","mmmHeaderControlsSlice","onSpendAmountChanged","newSpendAmount","newSpendAmounts","segmentKey","spendAmount","sourceCategoryName","otherSpendAmounts","onSegmentChanged","newSegmentKey","mmmModelOutput","forecasts","forecast","sourceCategoryDisplayName","optimisedSpendAmount","optimisedSpend","maximumRealSpend","maximumSpend","maximumForecastSpend","segments","getSpendAmounts","mmmHeaderControls","currentPageSize","pageSizes","reportsTableSlice","onPreviousPage","onNextPage","onPageSizeChanged","selectReportsTableState","reportsTable","webhooksTableSlice","onWebhookToBeDeletedChanged","webhookToBeDeleted","selectWebhookToBeDeleted","webhooksTable","ToggleType","isIconOnly","selectedCalculationType","Mean","pathsTableSlice","onIsIconOnlyToggled","onCalculationTypeChanged","selectPathsTableState","pathsTable","selectIsIconOnly","selectPathCalculationType","exclusionsTableSlice","onExclusionToBeDeletedChanged","exclusionToBeDeleted","selectExclusionToBeDeleted","exclusionsTable","SegmentTypes","debugToggles","POCToggle","DisplayConversionId","DisplayRevenueId","DisplayOpportunityId","DisplayPathsTimeToConversion","DisplayPOCDashboardTiles","DisplayNewSideBar","internalSettingsSlice","onDebugToggleChanged","allDebugToggles","internalSettings","toggle","AdvancedReports","debugToggleByType","debugToggle","createSegment","importance","segmentType","CUSTOM_DATA_KEY","SegmentControlsFilterValueOperators","resetInsights","pageSegmentControls","selectedSegmentControls","segmentFilters","isDirty","segmentControlsSlice","appendedSegments","onSegmentAdded","onSegmentDeleted","segmentId","onSegmentFilterAdded","highestExistingOrder","newSegmentFilter","EQUALS","valueOperator","segmentFilterBeingEdited","onSegmentFilterChanged","newFilters","onSegmentFilterDeleted","segmentFilterId","onSegmentFilterBeingEditedChanged","segmentFilter","advancedReportsSegmentControls","pageSegmentControl","selectSegmentControlsStateByComponentId","segmentControls","selectSegments","areSegmentsInitialState","selectSegmentsOrdered","selectHighestSegmentOrder","selectAreSegmentsValid","selectIsDirty","selectCanRunQuery","areSegmentsValid","selectValidSegments","selectSegmentCategories","selectSegmentFilters","selectHasSegmentFilters","selectFilterBeingEdited","existingFilterIndex","titlePrefix","openRowIds","advancedReportsTableSlice","onRowToggled","selectOpenRowIds","advancedReportsTable","selectIsRowOpen","rowsPendingDelete","rowsPendingDeleteSlice","clearPendingDeletes","currentRowSelection","revenueRows","opp","opportunityId","opportunityRows","selectRowsPendingDeleteByComponentId","selectRowsPendingDeleteForComponent","pendingRows","selectDoIHavePendingDeletesForComponent","conversionInfluenceInsightsTableSlice","conversionInfluenceInsightsTable","toastMiddleware","ConditionalOperator","TargetType","SegmentationType","RuleAccessType","timeInMilliSecondsToWaitForDataToBeDeleted","revenueRowPendingDeletionListenerMiddleware","opportunityRowPendingDeletionListenerMiddleware","getConditionalOperator","CONTAINS","DOES_NOT_CONTAIN","EQUALS_CASE_INSENSITIVE","MULTI_TYPE_EQUALITY","NOT_EMPTY","targetTypeOptionsByCategory","UTM_SOURCE","REFERRER_HOST_NAME","PAYLOAD_KEY","LANDING_PAGE_FULL_URL","LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEY_AND_VALUE","PAYLOAD_KEY_AND_VALUE","Cost","AD_PLATFORM","CAMPAIGN_NAME","LABEL_NAME","LABEL_TYPE","CAMPAIGN_ADVERTISING_CHANNEL_TYPE","segmentationConfigName","FILTER","ADMIN","ruleTargets","rule_id","target_id","conditional_operator","segmentNameErrors","segmentationConfigNameErrors","segmentationCategory","segmentationConfigSlice","setSegmentationCategory","onSegmentationConfigNameChanged","newSegmentationConfigName","onSegmentNameChanged","newSegmentName","onSegmentValueChanged","newSegmentValue","onSegmentationTypeChanged","newSegmentationType","onRuleAccessTypeChanged","newRuleAccessType","onSegmentationConfigNameErrorsChanged","newSegmentationConfigNameErrors","onSegmentNameErrorsChanged","newSegmentNameErrors","onRuleAdded","newRuleId","onRulesChanged","onRuleRemoved","ruleKey","onTargetAdded","newTargetKey","onTargetsChanged","targets","onTargetRemoved","targetKey","updateRuleTarget","onRuleTargetsChanged","resetSegmentationConfig","selectSegmentationConfigState","segmentationConfig","selectSegmentationCategory","selectTargetTypeOptions","selectRules","selectRuleTargets","selectConfigName","selectSegmentName","selectSegmentValue","selectSegmentationType","selectRuleAccessType","selectConfigNameErrors","selectSegmentNameErrors","selectRuleTargetsByRuleId","ruleId","blurReducer","dateRangeReducer","isLoadingReducer","selectedSiteReducer","authReducer","chartOptionsReducer","paginationOptionsReducer","searchBarReducer","sidebarTogglingReducer","sidebarReducer","pocToggleReducer","helpTileReducer","rowSelectionReducer","modalSliceReducer","accordionSliceReducer","dataViewSelectionReducer","googleStaticMapReducer","settingsReducer","toastReducer","uploadReducer","mmmHeaderControlsReducer","reportsTableReducer","availableAttributionModelsReducer","availableAttributionCompareModelsReducer","webhooksTableReducer","exclusionsTableReducer","pathsTableReducer","internalSettingsReducer","segmentControlsReducer","advancedReportsTableReducer","conversionInfluenceInsightsReducer","rowPendingDeleteSliceReducer","segmentationConfigReducer","persistConfig","stateReconciler","isPlainEnoughObject","persistedReducer","baseReducer","defaultGetStoredState","_persistoid","_purge","_paused","conditionalUpdate","_persist","rehydrated","restState","_sealed","_rehydrate","rehydrate","register","restoredState","migrate","migratedState","migrateErr","purgeStoredState","_newState","persistReducer","genericListenerMiddleware","serializableCheck","ignoredActions","persistor","boostrappedCb","_pStore","rehydrateAction","purgeResult","flushResult","manualPersist","persistStore","NavigationContext","LocationContext","RouteContext","outlet","invariant","cond","matchRoutes","routes","locationArg","basename","pathname","stripBasename","parsePath","branches","flattenRoutes","siblings","compareIndexes","routesMeta","childrenIndex","rankRouteBranches","matchRouteBranch","parentsMeta","parentPath","relativePath","caseSensitive","joinPaths","computeScore","paramRe","isSplat","initialScore","branch","matchedParams","matchedPathname","remainingPathname","matchPath","pathnameBase","normalizePathname","paramNames","regexpSource","paramName","compilePath","captureGroups","splatValue","safelyDecodeURIComponent","resolveTo","toArg","routePathnames","locationPathname","toPathname","routePathnameIndex","toSegments","fromPathname","resolvePathname","normalizeSearch","normalizeHash","nextChar","useHref","useInRouterContext","useResolvedPath","joinedPathname","getToPathname","endsWithSlash","createHref","useLocation","useNavigate","routePathnamesJson","activeRef","navigate","go","OutletContext","useParams","routeMatch","_renderMatches","parentMatches","React.createElement","Navigate","Outlet","useOutlet","Route","Router","_ref3","basenameProp","locationProp","navigationType","NavigationType","static","staticProp","navigationContext","trailingPathname","Routes","_ref4","parentParams","parentPathnameBase","locationFromContext","parsedLocationArg","_parsedLocationArg$pa","useRoutes","createRoutesFromChildren","BrowserRouter","historyRef","createBrowserHistory","history","listen","Link","reloadDocument","internalOnClick","replaceProp","isModifiedEvent","createPath","useLinkClickHandler","NavLink","ariaCurrentProp","classNameProp","styleProp","ariaCurrent","ChartDisplayType","ChartDataType","DataPointSetStyle","linkParams","buttonTitle","rel","helpTile","linkDetails","closeHelp","alt","currencySymbolMap","AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTC","BTN","BWP","BYN","BYR","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNH","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EEK","EGP","ERN","ETB","ETH","EUR","FJD","FKP","GBP","GEL","GGP","GHC","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","IMP","INR","IQD","IRR","ISK","JEP","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTC","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RMB","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","SSP","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRL","TRY","TTD","TVD","TWD","TZS","UAH","UGX","USD","UYI","UYU","UYW","UZS","VEF","VES","VND","VUV","WST","XAF","XBT","XCD","XOF","XPF","XSU","XUA","YER","ZAR","ZMW","ZWD","ZWL","getSymbolFromCurrency","CurrencyDisplayWrapper","NumberTile","tileData","percentageDiff","shouldShowPercentageDiff","selectedCurrencyCode","moment","adCostData","adCostIsLoading","adCostIsFetching","revenueData","revenueIsLoading","revenueIsFetching","salesData","salesIsLoading","salesIsFetching","sumTileDataForDateRange","tileTitle","formatOptions","totalRevenue","totalCost","roas","toLocaleString","minimumFractionDigits","maximumFractionDigits","getDataForTile","revenueAverage","revenueAverageIsLoading","revenueAverageIsFetching","currencySymbol","costPerSale","webConversionData","webConversionIsLoading","webConversionIsFetching","inboundCallsConversionData","inboundCallsConversionIsLoading","inboundCallsConversionIsFetching","totalFormsAndConversions","visitorData","visitorIsLoading","visitorIsFetching","averageTileDataForDateRange","combinedData","dailyAverageCalls","dailyAverageForms","inboundCallsMetricData","inboundCallsMetricDataIsLoading","inboundCallsMetricDataIsFetching","metricData","visitorTotal","metricTotal","webOnlyMetricsData","webOnlyMetricsDataIsLoading","webOnlyMetricsDataIsFetching","allMetricsData","allMetricsDataIsLoading","allMetricsDataIsFetching","off","SpinnerSize","isBrowser","defaultEvents","onClickAway","events","savedCallback","events_1","eventName","events_2","additionalChildProps","dropDownItems","dropDirection","dropdownYPositionClass","disableRelative","disablePositionRelative","selectDropDownItem","isDropdownOpen","setIsDropdownOpen","useClickAway","childrenWithAdditionalChildProps","relativeClass","role","ChartRoutes","STACKED_BAR","LINE","dropdownLabel","additionalContainerStyling","widthClass","defaultParentStyling","defaultType","chartRoutes","setChartRoutes","_superPropBase","_get","receiver","lim","p2b","n2b","b2n","n2p","map$1","h1","h2","eq","hexString","isShort","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","hwb2rgb","hsv2rgb","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","blanKedOmond","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","nameParse","unpacked","tkeys","unpack","RGB_RE","modHSL","ratio","functionParse","rgbParse","Color","hexParse","_rgb","_valid","hslString","weight","w2","w1","rgb1","rgb2","interpolate","deg","uid","isNullOrUndef","isNumberFinite","finiteOrDefault","valueOrDefault","toDimension","dimension","loopable","_elementsEqual","a0","a1","ilen","v0","datasetIndex","klen","_merger","tval","sval","merger","mergeIf","_mergerIf","keyResolvers","_getKeyResolver","_splitKey","resolveObjectKey","_capitalize","defined","setsEqual","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","almostEquals","epsilon","niceNum","roundedRange","niceRange","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","isFiniteNumber","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","sqrt","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","cmp","mid","lo","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","_arrayUnique","requestAnimFrame","requestAnimationFrame","throttled","argsToUse","ticking","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","_sorted","iScale","_parsed","getUserBounds","minDefined","maxDefined","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","atEdge","elasticIn","sin","elasticOut","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","darken","numbers","intlCache","formatNumber","getNumberFormat","tickValue","ticks","notation","maxTick","calculateDelta","logDelta","numDecimal","logarithmic","remain","significand","getScope","Defaults","_descriptors","_appliers","datasets","devicePixelRatio","getDevicePixelRatio","elements","font","family","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","includeInvisible","maintainAspectRatio","onHover","parsing","responsive","scales","showLine","drawActiveElementsOnTop","describe","targetScope","targetName","scopeObject","targetScopeObject","privateName","appliers","_scriptable","_indexable","_fallback","easing","resize","show","animations","visible","hide","autoPadding","beginAtZero","bounds","grace","grid","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dash","dashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","Ticks","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","save","jlen","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","_isPointInArea","point","clipArea","clip","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","strokeColor","setRenderOpts","backdrop","drawBackdrop","strokeStyle","strokeText","fillText","decorateText","translation","fillStyle","textAlign","textBaseline","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","oldColor","fillRect","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","_readValueToProps","objProps","toTRBL","toTRBLCorners","toPadding","toFont","toFontString","inputs","cacheable","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","_keys","_cached","_resolveWithPrefixes","_scopes","getKeysFromAllScopes","_storage","_attachContext","subProxy","descriptorDefaults","_cacheable","_proxy","_subProxy","_stack","setContext","isScriptable","needsSubResolver","createSubResolver","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","readKey","resolveFallback","addScopes","parentScopes","parentFallback","_rootScopes","allScopes","addScopesFromKey","_getTarget","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","EPSILON","getPoint","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","monotoneAdjust","deltaK","mK","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointsLen","pointAfter","monotoneCompute","pointBefore","valueAxis","iPixel","vPixel","capControlPoint","pt","_updateBezierControlPoints","controlPoints","spanGaps","cubicInterpolationMode","slopeDelta","splineCurveMonotone","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getPositionedStyle","getRelativePosition","borderBox","boxSizing","paddings","borders","offsetX","offsetY","box","shadowRoot","useOffsetPos","getBoundingClientRect","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","margins","containerSize","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","getPropertyPriority","prevTextDirection","restoreTextDirection","propertyFn","between","normalizeSegment","_boundSegment","prevValue","startBound","endBound","getSegment","inside","subStart","shouldStart","shouldStop","_boundSegments","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","styleChanged","p0","p0DataIndex","p1DataIndex","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","Animator","_request","_charts","_running","_lastDate","_notify","anims","callbacks","numSteps","currentStep","_refresh","_update","remaining","running","draw","_active","_total","tick","_getAnims","charts","cur","_duration","interpolators","boolean","c0","helpersColor","mix","Animation","cfg","_fn","_easing","_loop","_target","_prop","_from","_to","_promises","elapsed","rej","Animations","_properties","configure","animationOptions","animatedProps","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","animator","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","otherValue","singleMode","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","DatasetController","_cachedDataOpts","getMeta","_type","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","parseArrayData","parseObjectData","parsePrimitiveData","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","sharing","datasetElementScopeKeys","resolveNamedOptions","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","numMeta","numData","_insertElements","_removeElements","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","curr","$bar","visibleMetas","getAllScaleValues","_length","updateMinAndPrev","getPixelForTick","parseValue","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","startEnd","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","grouped","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","minBarLength","actualBase","floating","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","percent","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","_index_","_value_","BubbleController","DoughnutController","innerRadius","outerRadius","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","cutout","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","fontColor","legendItem","toggleDataVisibility","LineController","_dataset","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","getElement","abstract","DateAdapterBase","members","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","getNearestCartesianItems","distanceMetric","useX","useY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","layout","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","getMargins","marginForPositions","fitBoxes","boxes","refit","refitBoxes","setBoxDims","placeBoxes","userPadding","_layers","layoutItem","minPadding","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","nodeListContains","nodeList","createAttachObserver","addedNodes","removedNodes","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","DomPlatform","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","isConnected","tooltipPosition","tickOpts","determinedMaxTicks","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","getMajorIndices","numMajorIndices","newTicks","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","ticksLength","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","lineCount","textOffset","tickAndPadding","hTickAndPadding","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","lineDashOffset","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","gz","bz","axisID","_maxDigits","TypedRegistry","isForType","isPrototypeOf","parentScope","isIChartComponent","itemDefaults","defaultRoutes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","camelMethod","PluginService","hook","_createDescriptors","callCallback","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","initConfig","_scopeCache","_resolverCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","keyLists","chartOptionScopes","getResolver","subPrefixes","needContext","subResolver","resolverCache","hasFunction","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","Chart","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getDatasetArea","getElementsAtEventForMode","Interaction","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","detached","_remove","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","invalidatePlugins","parseBorderRadius","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","fullCircles","lineJoin","angleMargin","clipArc","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","findStartAndEnd","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","outer","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","addRectPath","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","above","clipVertical","doFill","clipY","lineLoop","tpoints","tgt","subBounds","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","halfFontSize","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","handleEvent","onLeave","isListened","hoveredItem","sameItem","_element","afterEvent","useBorderRadius","Title","_padding","textSize","_drawArgs","fontOpts","titleBlock","createTitle","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","afterInit","afterDraw","findOrAddLabel","addedLabels","addIfString","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","generateTicks","generationOptions","dataRange","niceMin","niceMax","numSpaces","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","rounded","almostWhole","decimalPlaces","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","minExp","exp","startExp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","buildPointLabelItems","hLimits","vLimits","pathRadiusLine","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","gridLineOpts","drawRadiusLine","animate","INTERVALS","common","UNITS","sorter","adapter","_adapter","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","MAX_SAFE_INTEGER","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","adapters","displayFormats","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","defaultDatasetIdKey","reforwardRef","setLabels","nextLabels","setDatasets","nextDatasets","datasetIdKey","addedDatasets","nextDataset","currentDataset","cloneData","nextData","getDatasetAtEvent","ChartComponent","redraw","fallbackContent","updateMode","canvasProps","canvasRef","chartRef","renderChart","ChartJS","destroyChart","nextOptions","setOptions","createTypedChart","registerables","Line","Bar","Doughnut","calculateGrace","createTooltipLabel","dataSetPrefix","ChartBar","isStackedX","isStackedY","yAxisFormat","xAxisTitle","yAxisTitle","yHighestValue","shouldAnimate","xTitle","valueAsNumber","yTitle","ChartLine","isLinearX","legendKeysToIgnore","decimation","algorithm","samples","chartColours","ChartStrategyDate","groupByDate","dataPointSets","dateRangeType","DAY","dp","dataPointDate","dataPointSetNames","dataPointSetName","chartData","dps","toChartDataSet","groupByDay","dataPointsByWeeks","dataPointSet","currentWeekStart","currentWeekEnd","dataPointsByWeeksAndCount","aggregateOnCountByDate","groupByWeek","dataPointSetsByMonths","toDataPointSetWithDateFormat","dataPointsByMonthsAndCount","groupByMonth","dataPointSetsByYears","dataPointsByYearsAndCount","groupByYear","groupedChartData","tryRenderChart","existingDataSetDateAggregate","countByDate","dataPointsByDateAndCount","datePointsByDate","ChartDoughnut","ChartStrategyString","defaultChartDisplayType","groupByString","dataPointString","dataPointsByStringAndCount","dataPointsByStringAndCountWithZeroValues","dataPoint","BAR","barChart","lineChart","DOUGHNUT","defaultRange","rangeRoutes","setChartRangeRoutes","ChartStrategyNumberPrediction","dataPointSetWithPredictions","dataPointSetWithOptimisations","actualDataPointSetNames","actualParentDataPointSetName","actualDataPointSetNamesDistinct","actualChartDataSets","dataPointSetNameIndex","createPredictiveChartDataSet","predictionDataPointSetNames","childChartDataSets","actualIndex","actualDataPointSetName","dpsn","getActualDataPointSetNameIndex","optimisationDataSet","pointRadius","pointHoverRadius","xValue","yValue","createOptimisationChartDataSet","createChartData","chartDataSetStyle","SOLID","ChartBarScatter","scatterDataPointSets","yScatterHighestValue","matchingTooltipFormat","yAxisName","yAxisTooltipFormat","ChartStrategyStringBarScatter","barDataPointSets","dataPointSetsOnCustomAxis","dataPointSetLabels","dataPointSetOnCustomAxisLabels","barDataSets","dpsName","dataPointSetValues","scatterDataSets","createScatterDataSets","barChartDataSets","scatterChartDataSets","allDataSetNames","allDataSetNamesDistinct","dataSet","colourIndex","appendColours","defaultDateRange","shouldShowChartTypeDropdown","shouldShowDateRangeDropdown","STRING_BAR_SCATTER","NUMBER_PREDICTION","chartStrategy","isChartDataLoaded","summaryChartData","visitors","web","inboundCall","cost","sales","dataPointDateCounts","dataSetName","dateCount","dateStrings","dataPointDateCount","getDateStrings","dataPointSetCount","toDataPointSetByDate","getDataPointSets","toChartByDate","useAverageVisitorLifetimeValue","averageVisitorLifetimeValueData","averageVisitorLifetimeValueIsLoading","averageVisitorLifetimeValueIsFetching","averageVisitorLifetimeValueYearlyData","averageVisitorLifetimeValueYearlyIsLoading","averageVisitorLifetimeValueYearlyIsFetching","shouldRenderTile","comparisonValue","percentageDifference","averageValue","averageValueDifference","dashboardPOCToggles","showDashboardPOCToggles","visitorQueryIsFinished","isDataLoading","shouldDisplayHelp","useTypedSelector","menuItemStyle","memuItemStyleMinimal","sidebar","isRouteActive","sidebarItem","getIconColour","getButtonColour","getFlatIcon","shouldShowPocLinks","isLinkPocType","shouldShowWhiteListedSiteLinks","whiteListedSites","RenderSingleMenuItem","SingleMenuItem","poc","CreateMultipleLevel","childItem","childIndex","MultiMenuItem","MenuItem","sidebarRoutes","fnRef","useEffectOnce","frame","setRafState","cancelAnimationFrame","useUnmount","initialWidth","initialHeight","useRafState","innerWidth","innerHeight","handler_1","isNewSideBarEnabledDebugToggle","isSidebarOpenLegacy","logoUrl","screenWidthTriggerAmount","useWindowSize","_toPropertyKey","hint","prim","toPrimitive","functionalUpdate","makeStateUpdater","flattenBy","getChildren","flat","subArr","recurse","getDeps","depTime","resultTime","newDeps","depsChanged","depEndTime","resultEndTime","resultFpsPercentage","pad","createHeader","isPlaceholder","placeholderId","subHeaders","colSpan","rowSpan","headerGroup","getLeafHeaders","leafHeaders","recurseHeader","_features","createTable","getHeaderGroups","getAllColumns","getVisibleLeafColumns","columnPinning","allColumns","leafColumns","leftColumns","columnId","_left$map$filter","rightColumns","_right$map$filter","centerColumns","buildHeaderGroups","debugAll","_table$options$debugA","debugHeaders","getCenterHeaderGroups","_table$options$debugA2","getLeftHeaderGroups","_left$map$filter2","_table$options$debugA3","getRightHeaderGroups","_right$map$filter2","_table$options$debugA4","getFooterGroups","headerGroups","_table$options$debugA5","getLeftFooterGroups","_table$options$debugA6","getCenterFooterGroups","_table$options$debugA7","getRightFooterGroups","_table$options$debugA8","getFlatHeaders","_table$options$debugA9","getLeftFlatHeaders","_table$options$debugA10","getCenterFlatHeaders","_table$options$debugA11","getRightFlatHeaders","_table$options$debugA12","getCenterLeafHeaders","flatHeaders","_header$subHeaders","_table$options$debugA13","getLeftLeafHeaders","_header$subHeaders2","_table$options$debugA14","getRightLeafHeaders","_header$subHeaders3","_table$options$debugA15","_left$0$headers","_center$","_center$0$headers","_right$","_right$0$headers","_table$options$debugA16","columnsToGroup","headerFamily","maxDepth","findMaxDepth","getIsVisible","_column$columns","bottomHeaders","createHeaderGroup","headersToGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","recurseHeadersForSpans","childRowSpans","childColSpan","childRowSpan","_headerGroups$","_headerGroups$0$heade","defaultColumnSizing","ColumnSizing","getDefaultColumnDef","columnSizing","columnSizingInfo","startOffset","startSize","deltaOffset","deltaPercentage","isResizingColumn","columnSizingStart","getDefaultOptions","columnResizeMode","onColumnSizingChange","onColumnSizingInfoChange","createColumn","getSize","columnSize","columnDef","_column$columnDef$max","getStart","getLeftVisibleLeafColumns","getRightVisibleLeafColumns","prevSiblingColumn","resetSize","setColumnSizing","getCanResize","enableResizing","_column$columnDef$ena","enableColumnResizing","_table$options$enable","getIsResizing","_header$column$getSiz","prevSiblingHeader","getResizeHandler","getColumn","canResize","isTouchStartEvent","eventType","clientXPos","newColumnSizing","setColumnSizingInfo","_old$startOffset","_old$startSize","headerSize","onMove","onEnd","mouseEvents","moveHandler","upHandler","touchEvents","_e$touches$","passiveIfSupported","supported","passiveEventSupported","resetColumnSizing","_table$initialState$c","resetHeaderSizeInfo","getDefaultColumnSizingInfoState","getTotalSize","_table$getHeaderGroup2","_table$getHeaderGroup","getLeftTotalSize","_table$getLeftHeaderG2","_table$getLeftHeaderG","getCenterTotalSize","_table$getCenterHeade2","_table$getCenterHeade","getRightTotalSize","_table$getRightHeader2","_table$getRightHeader","Expanding","onExpandedChange","paginateExpandedRows","registered","queued","_autoResetExpanded","autoResetAll","_table$options$autoRe","autoResetExpanded","manualExpanding","_queue","resetExpanded","setExpanded","toggleAllRowsExpanded","getIsAllRowsExpanded","_table$initialState","_table$initialState$e","getCanSomeRowsExpand","getRowModel","flatRows","getCanExpand","getToggleAllRowsExpandedHandler","getIsSomeRowsExpanded","getIsExpanded","getExpandedDepth","rowsById","splitId","getPreExpandedRowModel","getSortedRowModel","getExpandedRowModel","_getExpandedRowModel","createRow","toggleExpanded","exists","oldExpanded","_expanded","getIsRowExpanded","getRowCanExpand","_table$options$getRow","enableExpanding","subRows","_row$subRows","getToggleExpandedHandler","canExpand","includesString","filterValue","autoRemove","testFalsey","includesStringSensitive","_row$getValue2","equalsString","arrIncludes","arrIncludesAll","arrIncludesSome","weakEquals","inNumberRange","rowValue","resolveFilterValue","unsafeMin","unsafeMax","parsedMin","parsedMax","filterFns","Filters","filterFn","columnFilters","globalFilter","onColumnFiltersChange","onGlobalFilterChange","filterFromLeafRows","maxLeafRowFilterDepth","globalFilterFn","getColumnCanGlobalFilter","getCoreRowModel","_table$getCoreRowMode","_getAllCellsByColumnId","_table$getCoreRowMode2","getAutoFilterFn","firstRow","getFilterFn","_table$options$filter","getCanFilter","enableColumnFilter","enableColumnFilters","enableFilters","_table$options$enable2","accessorFn","getCanGlobalFilter","enableGlobalFilter","_column$columnDef$ena2","_table$options$enable3","_table$options$enable4","_table$options$getCol","getIsFiltered","getFilterIndex","getFilterValue","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","setFilterValue","setColumnFilters","previousfilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_getFacetedRowModel","getFacetedRowModel","getPreFilteredRowModel","_getFacetedUniqueValues","getFacetedUniqueValues","_getFacetedMinMaxValues","getFacetedMinMaxValues","columnFiltersMeta","getGlobalAutoFilterFn","getGlobalFilterFn","_table$options$filter4","_table$options$filter3","getAllLeafColumns","setGlobalFilter","resetGlobalFilter","resetColumnFilters","getFilteredRowModel","_getFilteredRowModel","manualFiltering","_getGlobalFacetedRowModel","getGlobalFacetedRowModel","_getGlobalFacetedUniqueValues","getGlobalFacetedUniqueValues","_getGlobalFacetedMinMaxValues","getGlobalFacetedMinMaxValues","aggregationFns","_leafRows","childRows","nextValue","extent","mean","leafRows","median","unique","uniqueCount","_columnId","Grouping","aggregatedCell","_props$getValue","_toString","aggregationFn","grouping","onGroupingChange","groupedColumnMode","toggleGrouping","setGrouping","getCanGroup","enableGrouping","getIsGrouped","_table$getState$group","getGroupedIndex","_table$getState$group2","getToggleGroupingHandler","canGroup","getAutoAggregationFn","getAggregationFn","_table$options$aggreg2","_table$options$aggreg","resetGrouping","_table$initialState$g","getPreGroupedRowModel","getGroupedRowModel","_getGroupedRowModel","manualGrouping","groupingColumnId","_groupingValuesCache","createCell","getIsPlaceholder","getIsAggregated","Ordering","columnOrder","onColumnOrderChange","setColumnOrder","resetColumnOrder","_getOrderColumnsFn","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","foundIndex","nonGroupingColumns","groupingColumns","orderColumns","Pagination","pagination","pageIndex","onPaginationChange","_autoResetPageIndex","autoResetPageIndex","manualPagination","resetPageIndex","setPagination","resetPagination","getDefaultPaginationState","setPageIndex","maxPageIndex","pageCount","_table$initialState$p3","_table$initialState$p2","resetPageSize","_table$initialState2","_table$initialState2$","_table$initialState$p4","topRowIndex","setPageCount","newPageCount","_table$options$pageCo","getPageOptions","getPageCount","pageOptions","debugTable","getCanPreviousPage","getCanNextPage","getPrePaginationRowModel","getPaginationRowModel","_getPaginationRowModel","Pinning","onColumnPinningChange","pin","columnIds","getLeafColumns","setColumnPinning","_old$left","_old$right","_old$left2","_old$right2","_old$left3","_old$right3","getCanPin","enablePinning","_d$columnDef$enablePi","getIsPinned","leafColumnIds","isLeft","isRight","getPinnedIndex","getCenterVisibleCells","_getAllVisibleCells","allCells","leftAndRight","debugRows","getLeftVisibleCells","getRightVisibleCells","resetColumnPinning","getDefaultPinningState","getIsSomeColumnsPinned","pinningState","_pinningState$positio","_pinningState$right","getLeftLeafColumns","debugColumns","getRightLeafColumns","getCenterLeafColumns","RowSelection","onRowSelectionChange","enableRowSelection","enableMultiRowSelection","enableSubRowSelection","setRowSelection","resetRowSelection","_table$initialState$r","toggleAllRowsSelected","getIsAllRowsSelected","preGroupedFlatRows","getCanSelect","toggleAllPageRowsSelected","resolvedValue","getIsAllPageRowsSelected","mutateRowIsSelected","getPreSelectedRowModel","getSelectedRowModel","rowModel","selectRowsFn","getFilteredSelectedRowModel","getGroupedSelectedRowModel","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","getIsSomeRowsSelected","totalSelected","_table$getState$rowSe","getIsSomePageRowsSelected","getIsSelected","getIsSomeSelected","getToggleAllRowsSelectedHandler","getToggleAllPageRowsSelectedHandler","toggleSelected","selectedRowIds","isRowSelected","isSubRowSelected","getIsAllSubRowsSelected","getCanSelectSubRows","getCanMultiSelect","getToggleSelectedHandler","canSelect","getRow","newSelectedFlatRows","newSelectedRowsById","recurseRows","_row$subRows2","_selection$row$id","allChildrenSelected","someSelected","subRow","reSplitAlphaNumeric","compareBasic","compareAlphanumeric","aStr","bStr","bn","combo","sortingFns","alphanumeric","rowA","rowB","alphanumericCaseSensitive","textCaseSensitive","basic","Sorting","sorting","sortingFn","onSortingChange","isMultiSortEvent","getAutoSortingFn","getAutoSortDir","getSortingFn","_table$options$sortin2","_table$options$sortin","toggleSorting","multi","nextSortingOrder","getNextSortingOrder","hasManualValue","setSorting","sortAction","existingSorting","existingIndex","newSorting","nextDesc","getCanMultiSort","maxMultiSortColCount","_table$options$maxMul","getFirstSortDir","sortDescFirst","firstSortDirection","isSorted","getIsSorted","enableSortingRemoval","enableMultiRemove","getCanSort","enableSorting","enableMultiSort","columnSort","_table$getState$sorti","getSortIndex","_table$getState$sorti2","clearSorting","getToggleSortingHandler","canSort","resetSorting","_table$initialState$s","getPreSortedRowModel","_getSortedRowModel","manualSorting","Visibility","columnVisibility","onColumnVisibilityChange","toggleVisibility","getCanHide","setColumnVisibility","enableHiding","getToggleVisibilityHandler","getAllCells","cells","getVisibleCells","makeVisibleColumnsMethod","getColumns","getVisibleFlatColumns","getAllFlatColumns","getCenterVisibleLeafColumns","resetColumnVisibility","toggleAllColumnsVisible","getIsAllColumnsVisible","getIsSomeColumnsVisible","getToggleAllColumnsVisibilityHandler","_options$initialState","_feature$getInitialSt","queuedTimeout","coreInstance","mergeOptions","_getRowId","getRowId","_getCoreRowModel","_getDefaultColumnDef","defaultColumn","_defaultColumn","resolvedColumnDef","accessorKey","renderValue","_props$renderValue","_props$renderValue$to","_getColumnDefs","columnDefs","recurseColumns","_resolvedColumnDef$id","originalRow","getFlatColumns","_column$columns2","groupingColumnDef","_getAllFlatColumnsById","flatColumns","rowIndex","_valuesCache","_uniqueValuesCache","getUniqueValues","_row$getValue","renderFallbackValue","getLeafRows","_cell$getValue","createColumnHelper","accessor","group","accessRows","originalRows","getSubRows","originalSubRows","_row$originalSubRows","filterRows","filterRowImpl","rowsToFilter","filterRow","newFilteredFlatRows","newFilteredRowsById","_table$options$maxLea","recurseFilterRows","newRow","filterRowModelFromLeafs","_table$options$maxLea2","filterRowModelFromRoot","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","currentColumnFilter","currentGlobalFilter","filterableIds","globallyFilterableColumns","filterMeta","__global__","preRowModel","facetedRowModel","facetedUniqueValues","_facetedUniqueValues$","sortingState","sortedFlatRows","availableSorting","columnInfoById","sortEntry","sortUndefined","invertSorting","sortData","sortedData","columnInfo","isDesc","_sortEntry$desc","aUndefined","bUndefined","sortInt","expandRows","expandedRows","handleRow","paginatedRowModel","pageStart","pageEnd","flexRender","Comp","isClassComponent","isExoticComponent","useReactTable","tableRef","setRect","top_1","TableSortAscButton","TableSortDescButton","identifier","buttonClasses","iconClasses","characterMap","À","Á","Â","Ã","Ä","Å","Ấ","Ắ","Ẳ","Ẵ","Ặ","Æ","Ầ","Ằ","Ȃ","Ç","Ḉ","È","É","Ê","Ë","Ế","Ḗ","Ề","Ḕ","Ḝ","Ȇ","Ì","Í","Î","Ï","Ḯ","Ȋ","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","Ø","Ố","Ṍ","Ṓ","Ȏ","Ù","Ú","Û","Ü","Ý","à","á","â","ã","ä","å","ấ","ắ","ẳ","ẵ","ặ","æ","ầ","ằ","ȃ","ç","ḉ","è","é","ê","ë","ế","ḗ","ề","ḕ","ḝ","ȇ","ì","í","î","ï","ḯ","ȋ","ð","ñ","ò","ó","ô","õ","ö","ø","ố","ṍ","ṓ","ȏ","ù","ú","û","ü","ý","ÿ","Ā","ā","Ă","ă","Ą","ą","Ć","ć","Ĉ","ĉ","Ċ","ċ","Č","č","C̆","c̆","Ď","ď","Đ","đ","Ē","ē","Ĕ","ĕ","Ė","ė","Ę","ę","Ě","ě","Ĝ","Ǵ","ĝ","ǵ","Ğ","ğ","Ġ","ġ","Ģ","ģ","Ĥ","ĥ","Ħ","ħ","Ḫ","ḫ","Ĩ","ĩ","Ī","ī","Ĭ","ĭ","Į","į","İ","ı","IJ","ij","Ĵ","ĵ","Ķ","ķ","Ḱ","ḱ","K̆","k̆","Ĺ","ĺ","Ļ","ļ","Ľ","ľ","Ŀ","ŀ","Ł","ł","Ḿ","ḿ","M̆","m̆","Ń","ń","Ņ","ņ","Ň","ň","ʼn","N̆","n̆","Ō","ō","Ŏ","ŏ","Ő","ő","Œ","œ","P̆","p̆","Ŕ","ŕ","Ŗ","ŗ","Ř","ř","R̆","r̆","Ȓ","ȓ","Ś","ś","Ŝ","ŝ","Ş","Ș","ș","ş","Š","š","Ţ","ţ","ț","Ț","Ť","ť","Ŧ","ŧ","T̆","t̆","Ũ","ũ","Ū","ū","Ŭ","ŭ","Ů","ů","Ű","ű","Ų","ų","Ȗ","ȗ","V̆","v̆","Ŵ","ŵ","Ẃ","ẃ","X̆","x̆","Ŷ","ŷ","Ÿ","Y̆","y̆","Ź","ź","Ż","ż","Ž","ž","ſ","ƒ","Ơ","ơ","Ư","ư","Ǎ","ǎ","Ǐ","ǐ","Ǒ","ǒ","Ǔ","ǔ","Ǖ","ǖ","Ǘ","ǘ","Ǚ","ǚ","Ǜ","ǜ","Ứ","ứ","Ṹ","ṹ","Ǻ","ǻ","Ǽ","ǽ","Ǿ","ǿ","Þ","þ","Ṕ","ṕ","Ṥ","ṥ","X́","x́","Ѓ","ѓ","Ќ","ќ","A̋","a̋","E̋","e̋","I̋","i̋","Ǹ","ǹ","Ồ","ồ","Ṑ","ṑ","Ừ","ừ","Ẁ","ẁ","Ỳ","ỳ","Ȁ","ȁ","Ȅ","ȅ","Ȉ","ȉ","Ȍ","ȍ","Ȑ","ȑ","Ȕ","ȕ","B̌","b̌","Č̣","č̣","Ê̌","ê̌","F̌","f̌","Ǧ","ǧ","Ȟ","ȟ","J̌","ǰ","Ǩ","ǩ","M̌","m̌","P̌","p̌","Q̌","q̌","Ř̩","ř̩","Ṧ","ṧ","V̌","v̌","W̌","w̌","X̌","x̌","Y̌","y̌","A̧","a̧","B̧","b̧","Ḑ","ḑ","Ȩ","ȩ","Ɛ̧","ɛ̧","Ḩ","ḩ","I̧","i̧","Ɨ̧","ɨ̧","M̧","m̧","O̧","o̧","Q̧","q̧","U̧","u̧","X̧","x̧","Z̧","z̧","chars","allAccents","rankings","rankItem","_options$threshold","accessors","rank","getMatchRanking","rankedValue","accessorIndex","accessorThreshold","passed","valuesToRank","allValues","attributes","getAccessorAttributes","itemValues","getItemValues","itemValue","getAllValuesToRank","rankingInfo","rankValue","newRank","minRanking","maxRanking","testString","stringToRank","prepareValueForComparison","acronym","wordInString","splitByHyphenWord","getAcronym","matchingInOrderCharCount","charNumber","findMatchingCharacter","matchChar","getRanking","spreadPercentage","inOrderPercentage","getClosenessRanking","keepDiacritics","defaultKeyAttributes","fuzzyFilter","addMeta","itemRank","multiSelectFilter","rowStringValue","useFilteredValues","buttonIconClasses","buttonLabel","buttonLabelClasses","hasExtraButtonIconClasses","extraButtonIconClasses","dropdownMenuClasses","containerClasses","onDropdownClicked","buttonRef","dropdownRef","setPosition","buttonLabelClassesToUse","dropdownContent","buttonRect","scrollY","scrollX","SMALL","ReactDOM","isLastColumn","preFilteredValue","isMultiSelectFilter","sortedUniqueValues","localeCompare","setSearchTerm","filteredUniqueValues","term","typedColumnFilterValue","getHeaderName","searchFilterOptions","isEnabled","isSearchFilterEnabled","isFiltered","filterValues","isValueFiltered","multiSelectedColumns","updatedFilter","triggerFilter","tryGetStickyOptions","stickyOptions","side","isTableHeaderSticky","CustomTable","heightClass","fontsizeClass","cellClasses","overflowClass","useMeasure","hasResized","getCustomHandlerResizer","maxHeightClasses","fontsizeClasses","tableContainerClasses","selectRowsPendingDelete","getBackgroundColour","pendingRow","asc","onTouchStart","backgroundColour","MetricTypes","ButtonTheme","attributeModelRoutes","selectedAttributionModel","getSelectedAttributionDropdownLabel","searchValue","onClickFunction","onClearFunction","onSubmit","getMetricTypeFriendlyName","metricType","getThemeClasses","PRIMARY","SECONDARY","CANCEL","SUCCESS","WARNING","ERROR","MAPZOOM","MAPRESET","MINIMAL","getDisabledThemeClasses","classOverrides","themeClasses","allRowsForCsv","formatToEnGbNumberWithDecimalPlaces","minimumDecimalPlaces","maximumDecimalPlaces","IconType","reportExport","startDateShortIso","endDateShortIso","searchTermFileNameSuffix","attributionModel","orderedHeaders","orderedReportColumnIds","orderedRows","metricReports","Field","main","formatToCurrencyCode","friendlyOrderedHeaders","disabledIconClasses","displayDropDown","displayComparisonAttributionModelData","marketingSourceLogos","marketingSource","iconType","FLATICON","IMAGE","imageClasses","logoToUse","setZeroAsDefault","setDashAsDefaultAfterFormat","getFieldCell","cellContent","reportColumnHelper","headerName","defaultColumnWidth","toPercentage","percentageValue","calculateRoasBase","revenueValue","calculateRoiBase","calculateCpaBase","forms","calls","totalFormsAndCalls","calculateCpsBase","sale","metricAttributionsToMetricReports","primaryAttributionModel","compareAttributionModel","attributionModelName","allReports","existingReport","attributionValue","newReport","compareMetric","existingMetricReportIndex","report","existingMetricReport","existingMetricValue","newMetric","setMetricTypesToZeroWhichHaveNoValue","mainCostValue","mainFormsValue","mainCallsValue","mainRevenueValue","mainRevenueValuesValue","compareCostValue","compareFormsValue","compareCallsValue","compareRevenueValue","compareRevenueValuesValue","createComponentId","reportType","selectedItem","onRenderSelectedItem","mainContainerDivStyles","angleDownIconStyles","isSticky","pageSizeKey","selectedPageSize","getSummedMetricValuesById","createCellByMetricId","primaryMetrics","compareMetrics","primaryValue","compareValue","createRows","allMetrics","impressions","clicks","webs","opps","oppValues","costs","unqiueMetricIdsSet","parentId","hasChildren","shouldBlurField","opportunityValue","cpa","cps","roi","createTotalRow","primaryValues","compareValues","createAllMetricAttributionsFromArMetricRows","impressionAttributions","imp","clickAttributions","callAttributions","formsAttributions","oppsAttributions","oppValuesAttributions","oppValue","salesAttributions","revenuesAttributions","costsAttributions","sortRows","idToSort","sortDesc","sortAsc","isHidden","fieldColumnId","AdvancedReportsQueryCategories","createFieldCell","rowHasChildren","shouldBlurFieldColumn","createImpressionsCell","createClicksCell","createCallCell","createWebCell","createOpportunityCell","createOpportunityValueCell","createSaleCell","createRevenueCell","createCostCell","createCpaCell","createCpsCell","createRoiCell","createRoasCell","reportQueryResults","textFilter","setTextFilter","reportsTableState","selectedAttributionCompareModel","primaryRowsResult","compareRowsResult","totalRow","allRows","totalsMetricReport","isMainImpressionsDataFetching","isMainClicksDataFetching","isMainCallsDataFetching","isMainFormsDataFetching","isMainOppsDataFetching","isMainOppsValueDataFetching","isMainSalesDataFetching","isMainRevenueDataFetching","isMainCostDataFetching","isCompareImpressionsDataFetching","isCompareClicksDataFetching","isCompareCallsDataFetching","isCompareFormsDataFetching","isCompareOppsDataFetching","isCompareOppsValueDataFetching","isCompareSalesDataFetching","isCompareRevenueDataFetching","isCompareCostDataFetching","getMetricReportColumns","metricAttributions","reportTable","numberOfTableRows","paging","pageSizeString","pagesize","getCustomDataKey","MARKETING_SOURCE","BROWSER","OPERATOR_SYSTEM","DEVICE","Reports","shouldDisplayAttributionComparison","isCompareSelected","newGuid","getSegmentRequest","filters","queryCategory","IMPRESSIONS","impressionsCustomData","isLoadingImpressions","isFetchingImpressions","CONVERSION_WEB","webConversionsCustomData","isLoadingWebConversions","isFetchingWebConversions","CONVERSION_INBOUNDCALL","inboundCallConversionsCustomData","isLoadingInboundCallConversions","isFetchingInboundCallConversions","CLICKS","clicksCustomData","isLoadingClicks","isFetchingClicks","AD_COST","costCustomData","isLoadingCost","isFetchingCost","REVENUE","revenueCustomData","isLoadingRevenue","isFetchingRevenue","SALES","salesCustomData","isLoadingSales","isFetchingSales","OPPORTUNITY","opportunityCustomData","isLoadingOpportunities","isFetchingOpportunities","OPPORTUNITY_VALUE","opportunityValuesCustomData","isLoadingOpportunityValues","isFetchingOpportunityValues","impressionsCompareCustomData","isLoadingCompareImpressions","isFetchingCompareImpressions","webConversionsCompareCustomData","isLoadingCompareWebConversions","isFetchingCompareWebConversions","inboundCallConversionsCompareCustomData","isLoadingCompareInboundCallConversions","isFetchingCompareInboundCallConversions","clicksCompareCustomData","isLoadingCompareClicks","isFetchingCompareClicks","costCompareCustomData","isLoadingCompareCost","isFetchingCompareCost","revenueCompareCustomData","isLoadingCompareRevenue","isFetchingCompareRevenue","salesCompareCustomData","isLoadingCompareSales","isFetchingCompareSales","opportunityCompareCustomData","isLoadingCompareOpportunities","isFetchingCompareOpportunities","opportunityValuesCompareCustomData","isLoadingCompareOpportunityValues","useReportQueries","shouldDisplayChart","isLoadingAll","isFetchingAll","allARMetricRows","reportsChartData","searchedTerm","searchedTermUpper","metricAttributionsToChartByString","defaultErrorMessage","username","formState","setFormState","isUsernameEmpty","isPasswordEmpty","haveChangedInputValuesSinceLastError","errorState","setErrorState","handleChange","formData","FormData","errorMessage","handleLoginError","htmlFor","autoComplete","useAuth","isSuperUser","PrivateOutlet","ModalConfirmTypes","logoutButton","valueForInput","setValueForInput","openDropDown","setOpenDropDown","sitePickerRef","siteData","filteredSites","anyLoadingAction","onAction","onExport","Modal","buttonType","xmlns","viewBox","strokeLinecap","strokeLinejoin","currentViewType","triggerDownload","isDownloadingCsv","toggleViewType","onDeleteMultipleRevenues","rowsToDelete","deleteRevenueRequest","revenueClosedDateTime","rowData","Detailed","ON_DELETE_MULTIPLE_REVENUES","paginationPageSizeDropDownSelections","PaginationBar","setPageSizes","PaginatedTable","memoizedData","getRowData","memoizedColumns","updaterOrValue","updaterValue","usePaginatedQuery","paginatedQueryCallback","prefetchPageFn","initialRequestData","initialRequestOptions","isFirstRequest","lastPaginationRequest","initialColumnName","initialOrderDirection","prefetchNext","returnedPaginationInfo","IsReturnedPaginationInfoDefined","newPage","newPageSize","newTotalPages","newTotalRecords","newForwardSeekValue","newForwardSeekId","newBackwardSeekValue","newBackwardSeekId","newSeekColumnName","newOrderDirection","lastCurrentPage","lastPageSize","lastTotalPages","lastTotalRecords","returnedForwardSeekValue","returnedForwardSeekId","returnedBackwardSeekValue","returnedBackwardSeekId","returnedSeekColumnName","returnedOrderDirection","IsPreviousRequestDifferent","filterOutNonViewableFields","filterOutStandardQueryFields","FieldCell","bgColor","PayloadFieldsCellFormatter","fieldObject","subheader","additionalFieldsFilter","filteredFields","secondsToHms","hDisplay","mDisplay","sDisplay","formatIsoDateTimeStringToDisplayDate","formatIsoDateStringToDisplayTimeOnly","fieldsMap","contextKey","PaginationTableSelectAllRowsCheckbox","tableRows","allSelectedRows","isChecked","PaginationTableRowSelectionCheckbox","createLabelsCell","callLabel","convertArrayToObject","revenueColumnHelper","showRevenueId","visitorIdentifierOptions","RevenueFieldsRenderer","firstClickSource","firstClick","referrerHost","firstClickQueryStrings","lastClickSource","lastClick","canonicalUrl","lastClickQueryStrings","reference","additionalDataProperties","FilterNotApplicable","getConversionTypeFriendlyName","detailedColumnHelper","expandedFieldsColumnDefs","expandedFields","customDataFields","nextResponse","newColDef","foundRow","pocIdColumn","leadDate","captureDateTime","conversionPayloadFields","FieldsRenderer","formUrl","webPageViewCount","sessions","averageWebTouchpointDurationInSeconds","keywords","landingPage","referrerPath","utmCampaign","utmContent","utmMedium","utmSource","utmTerm","utmKeyword","device","placement","creative","campaignId","adGroupId","gclid","deviceAndLocation","browser","operatingSystem","identity","getClasses","getIcons","revenueComponentId","revenueIdToggle","hasPendingDeletes","prefetchPage","revenueSimpleColumnDefs","revenueDetailedColumnDefs","relativeIndex","revenueEntity","isLoadingSegments","segmentDropdowns","selectedDropdownItem","createmodelledRoiteByChannelChart","ddaData","dataPointStrings","spendDataSets","spend","createSpendDataSets","revenueDataSets","dataSets","createRevenueDataSets","highestValue","createRoiDataSets","MIXED","maximumSignificantDigits","summedNumbers","currentNumber","toMillion","createmodelledRoiGroupedChart","AccordionTheme","isFetchingModelOutput","modelledRoiByChannel","ddaResponse","modelledRoiGrouped","HeaderComponent","CONVERSIONS","backgroundColourClass","borderColourClass","VisitorSessionHeader","itemCount","GeneralHeader","VisitorNumberTile","metricMessage","shouldShowConvertedMetric","convertedMetric","fuzzySearchResults","matchTerm","distanceThreshold","str1","str2","levenshteinDistanceInsertionsOnly","levenshteinObj","fullNameMatchTerm","firstNameMatchTerm","lastNameMatchTerm","nameObject","fullNameMatch","firstNameMatch","firstName","backupMatch","lastNameMatch","lastName","matchedTerm","emailMatchTerm","emailMatch","currentMonth","phoneMatchTerm","phoneMatch","jobMatch","areAnyPageAccordionsOpen","useDebounce","isReady","useTimeoutFn","GoogleStaticMap","mapHeight","mapWidth","locations","city","regionName","country","operatingSystemLogos","operatingSystems","operatingSystemUpper","logo","os","browserLogos","sensitiveCallKeys","fieldKeysWhichDoNotBlur","isAccordionClosed","visitorDetailData","isVisitorDetailLoading","isVisitorDetailFinished","visitorRevenueData","isVisitorRevenueLoading","visitorOpportunitiesData","isVisitorOpportunitiesLoading","visitorDetailRevenueData","isRevenueLoading","conversionDetails","conversionDetail","touchpointSessions","session","startDateTime","webPageViews","pageView","fullUrl","localPath","payloads","queryStringParams","relatedCalls","referrerUrl","offlineSource","touchpointTypes","revenueSessions","revenueClosedDateTimeIso","emailAddress","phoneNumber","raid","payloadValue","opportunitySessions","opportunityDateTimeIso","pipelineStage","webData","inboundCallData","profileDetails","urlParameters","webCookies","pageViews","totalSessions","latestConversionTouchpointTypes","touchpointType","mapRef","setMapWidth","setMapHeight","adjustedWidth","adjustedHeight","locationDetails","latitude","longitude","fullNameClosestMatchOnKeyName","jobTitleClosestMatchOnKeyName","getProfileImage","emailClosestMatchOnKeyName","locationDetail","phoneClosestMatchOnKeyName","visitorRevenueTotal","profileDetail","conversionData","cookie","cookieName","cookieValue","columnHelper","opportunitiesSimpleColumnDefs","opportunityDateTime","MapFieldRenderer","onDeleteMultipleOpportunities","opportunityRequests","ON_DELETE_MULTIPLE_OPPORTUNITIES","showOpportunityId","idColumn","opportunitiesComponentId","opportunityIdToggle","opportunitiesViewRequest","opportunitiesDetailedColumnDefs","toastItems","toastType","getCssClasses","textColourClass","iconClass","isMobile","openDateRange","setOpenDateRange","handleSelect","mapDateRangeToSerializable","formatDates","prevState","enGB","routesWithoutBreadcrumbBar","getPageLabel","pageNameSuffixStartingIndex","pageNameSuffix","replaceAll","trimEnd","shouldShowBreadcrumbBar","currentIndex","Breadcrumb","createDataPointSetsByNumberOptimsation","mmmResponse","spendIterable","returnValues","PRIOR_SPEND","PillTheme","WebhookStatus","createBudgetOptimiserCharts","dataPointSetByNumberPredictions","isPredictive","DASHED","parentDataPointSetName","createDataPointSetByNumberPredictions","diminishingReturnsChart","priorDataPointSets","allMarketingSourceChannelSpendsSummed","priorSpend","createPriorSpendDataSets","optimisedDataPointSets","dataPointSetByMetricTypeName","createOptimisedSpendDataSets","allOptimisedDataPointSets","allBudgetOptimiserDataSets","budgetOptimiserChart","diminishingReturnsChartOptimisationDataPointSets","budgetOptimiserChartOptimisationDataPointSets","budgetOptimiserHelper","forecastUnit","rowName","currentSpend","currentRevenue","optimisedRevenue","changeAmount","budgetOptimiserTableData","mmmData","sourceCategoryRows","optimisedRevenueWithDayMultiplier","createBudgetOptimiserTableRows","mmmTable","getDiminishingReturnsChart","newDataPointSets","spendamount","priorSpends","getBudgetOptimiserChart","newSpendAmountValue","onSliderChanged","currentSelectionLabel","currentSelectedItem","GeneralSettings","onCSVRead","hiddenFileInput","accept","getColourClasses","barColourClass","parseAdditionalDataProps","additionalDataPropsStr","createVisitorIdentifierOptions","PayloadValue","revenueIsValid","revenueClosedDate","UploadRevenues","uploadPercentage","revenueToUpload","setRevenueToUpload","fileInputName","setFileInputName","isUploading","setIsUploading","hasUploadErrored","setHasUploadErrored","duplicateRows","setDuplicateRows","uploadRevenueMutation","duplicates","allDuplicatesInCSV","dupes","existingDuplicate","RevenueClosedDate","aggregatedDuplicates","duplicate","aggregateDuplicate","handleDuplicates","revenueCsvRow","labelkeys","AdditionalDataProperties","CurrencyCode","Value","LeadDate","labelKey","labelValue","Reference","revenueRow","rowNumber","finally","opportunityIsValid","UploadOpportunities","opportunitiesToUpload","setOpportunitiesToUpload","uploadOpportunitiesMutation","OpportunityDateTime","PipelineStage","opportunityCsvRow","OpportunityValue","opportunityRow","SettingsUploadPage","NavLinkButton","DISABLED","SCHEDULED","Pill","tooltipText","createUpdateCacheKey","createValidationEndpointCacheKey","currentStatus","VALID","getStatusPillTheme","updateWebhookMetadata","validateWebhookMetadata","anchorClasses","WebhooksTableActions","updateWebhookMutation","validateWebhookEndpointMutation","updatedWebhook","disabledWebhook","getIconClasses","ModalSimple","confirmButtonText","onConfirmModal","onCancelModal","WebhooksTable","updateWebhookStatusToDeletedMutation","updateWebhookStatusToDeletedMetadata","lastUpdatedDate","DELETED","onDeleteWebhookConfirmed","WebhookTypes","SettingsWebhooksPage","webhooksResult","isFetchingWebhooks","Textbox","maxCharacterLimit","inputClassOverrides","containerClass","inputClasses","textboxClasses","characterCounterClasses","Textarea","ToggleSize","getWebhookTypeFriendlyName","CONVERSION_INBOUND_CALL","AudioSourceTypes","toggleSizeClasses","toggleTextClasses","Large","Small","SettingsWebhooksCreatePage","onWebhookNameChanged","webhookNameErrors","setWebhookNameErrors","onWebhookDescriptionChanged","webhookDescriptionErrors","setWebhookDescriptionErrors","selectedWebhookType","onSelectedWebhookTypeChanged","allWebhookTypes","onWebhookUrlChanged","webhookUrlErrors","setWebhookUrlErrors","isWebhookValidating","onIsWebhookValidatingChanged","isWebhookUrlValid","onIsWebhookUrlValidChanged","onIsInternalWebhookChanged","onUseCustomDataSchemaChanged","selectedCustomDataFields","onSelectedCustomDataFieldsChanged","isFormValid","webhookDataFieldsResult","isFetchingWebhookDataFields","webhookDataFields","selectedCustomDataField","isSaving","onIsSavingChanged","validateWebhookName","validateWebhookDescription","newWebhookDataFields","selectedDf","validateWebhookUrl","errorDescription","createTriggerCacheKey","dataScienceTaskFailureInformation","COMPLETED","MODELAPPROVED","FAILED","triggerTaskRunMetaData","updateDataScienceTaskMetadata","stepName","failureReason","triggerDataScienceEndpointMutation","onTriggerDataScienceTask","isProcessing","updateDataScienceTaskMutation","onDisableDataScienceTask","disabledDataScienceTask","onEnableDataScienceTask","enabledDataScienceTask","NONE","hasAvailableModel","displayText","schedule","lastProcessed","lastTriggered","pipelineParameterOverrides","dataScienceTasksTable","SettingsDataScienceTasksPage","dataScienceTasksData","isFetchingDataScienceTasks","simpleColumnHelper","firstClickLandingPageUrlAndQueryStringSegmentsFields","conversionLandingPageUrlAndQueryStringSegmentsFields","showConversionId","mainColumnDefs","operatingSystemVersion","isExporting","onChangeViewType","onTriggerExport","conversionIdToggle","formComponentId","conversionResponse","conversionRequestIsLoading","conversionRequestIsFetching","simpleColumnDefs","getDetailedColumnDefs","exportRequest","triggerExport","formatToTime","audioSource","audioSourceType","isInitialising","onInitialise","audioRef","isPlaying","setIsPlaying","setProgress","totalDuration","setTotalDuration","playbackProgressPercentage","play","togglePlayPause","controls","autoPlay","onDurationChange","onPlaying","onPause","onTimeUpdate","currentTime","hasInitialisedRecording","setHasInitialisedRecording","AudioMpeg","createFields","queryStrings","qs","getCoreColumns","callStartDate","callerNumber","firstClickUrlQueryStrings","lastClickUrlQueryStrings","callResult","callDuration","calledNumber","callEndDate","visitorColumn","callRecordingColumn","hasCallRecording","coreColumns","defaultComponentId","callComponentId","getConversionInboundCallsColumnDefs","getConversionInboundCallsDetailedColumnDefs","isCopied","setIsCopied","clipboard","writeText","SiteSetup","SetupCallTrackingSettings","HelpPage","ExclusionsTableActions","SiteSpecificManual","exclusions","exclusionToBeDeletedMutation","getExclusionsColumnDefs","fuzzy","exclusionToDelete","onDeleteExclusionConfirmed","SettingsExclusionsPage","exclusionsResult","isFetchingExclusions","filteredExclusions","Ignore","matchValueMaxLength","additionalInformationMaxLength","SettingsExclusionsCreatePage","matchValue","onMatchValueChanged","matchValueErrors","setMatchValueErrors","onAdditionalInformationChanged","additionalInformationErrors","setAdditionalInformationErrors","Block","selectedExclusionCategory","onSelectedExclusionCategoryChanged","allExclusionCategories","selectedExclusionType","onSelectedExclusionTypeChanged","allExclusionTypes","selectedExclusionMatchTarget","onSelectedExclusionMatchTargetChanged","allExclusionMatchTargets","Equals","selectedRuleMatchType","onSelectedRuleMatchTypeChanged","allRuleMatchTypes","validateMatchValue","validateAdditionalInformation","webhookHistoryTable","webhookHistories","responseHttpStatusCode","responseDescription","lastProcessedDateTimeISO","payloadId","webhookIdNotNull","webhookHistoryResult","isFetchingWebhookHistories","PathPills","pills","existingPill","pill","createPills","PathTime","timeCalculationsInSeconds","calculatedTime","timeCalculation","getCalculationsForSelectedCalculation","PathsTable","conversionPaths","chronologicalSources","conversionCount","totalSales","averageRevenue","timeToConversionInSecondsValues","averageTouchpointsToConversion","getPathsColumnDefs","pathsTableState","Paths","currentPathCalculationType","timeToConversionToggle","showTimeToConversion","conversionPathsData","isFetchingConversionPaths","calculationTypes","Median","Mode","calculationType","PocOutlet","DebugToggleAction","internalTable","InternalPage","moveStickyRow","scrollPosition","DrillthroughTable","injectableRows","headerRef","totalRef","scrollRef","headerThreshold","renderDrillthroughRow","getRowColour","renderDrillthroughRows","allInjectableRows","drillthroughRows","addRowChildren","drillthroughRow","drillthroughRowIndex","rowColour","previousDrillthroughHasChildren","nextDrillthroughHasChildren","borderTop","borderBottom","rowClasses","cellIndex","isBlurred","cellId","getConversionInfluenceInsightColumnDefs","createInsightsFieldCell","tableData","dataIsLoading","currentObject","calculateTotalValue","createDrillthroughTableInjectableRow","visibleCells","formatNumberCount","formatNumberToCurrency","formattedCost","setCsvData","csvDownloadRef","rowsInColumnDefOrder","rawRow","orderedColumnIds","newCsvData","createCompareCacheKey","areSomeRequestsStillPending","advancedReportQueryStatus","doesAdvancedReportHaveAFilter","primaryImpressionsResult","primaryClicksResult","primaryCallResult","primaryWebResult","primaryOppResult","primaryOppValueResult","primarySalesResult","primaryRevenueResult","primaryCostResult","compareImpressionsResult","compareClicksResult","compareCallResult","compareWebResult","compareOppResult","compareOppValueResult","compareSalesResult","compareRevenueResult","compareCostResult","primaryQueryStatus","compareQueryStatus","useGetAdvancedReportResults","primaryImpressionsIsLoading","primaryClicksIsLoading","primaryCallsIsLoading","primaryWebsIsLoading","primaryOppsIsLoading","primaryOppValuesIsLoading","primarySalesIsLoading","primaryRevenuesIsLoading","primaryCostsIsLoading","compareImpressionsIsLoading","compareClicksIsLoading","compareCallsIsLoading","compareWebsIsLoading","compareOppsIsLoading","compareOppValuesIsLoading","compareSalesIsLoading","compareRevenuesIsLoading","compareCostsIsLoading","getAdvancedReportColumnDefs","areQueriesFinished","rootRows","hasQueryRun","isModalOpen","setIsModalOpen","isInitialState","isInsightRequest","segmentsEndpoints","getAdvancedReportsSegments","segmentTypeName","segmentTypeDisplayName","customDataKey","customDataKeyDisplayName","getInsightsSegments","insightType","segmentationQueryApi","getSegments","useGetSegmentsQuery","getSegmentButtonLabel","allSegments","segmentCategories","segmentsFromApi","allowedSegments","segmentItems","groupedSegments","existingItem","groupIndex","segmentDto","customDataKeyIndex","newSegmentCategory","dispatchSegmentCategoryChanged","positionClasses","containsValues","equalsValues","getFiltersBySegment","filterIndex","isFirstFilterValue","onFilterValueChanged","onDeleteFilterValue","valueOperators","valueOperatorIndex","newOperator","newFilterValue","onOperatorChanged","newValue","onFilterAdded","onFilterBeingEditedChanged","onFilterSaved","newFilterValueIndex","filterWithChanges","valueIndex","valueToDelete","updatedValues","deleteFilterValue","highestExistingSegmentOrder","styleClasses","isFirstSegment","filterBeingEdited","isLastSegment","hideAddBtn","onDeleteSegment","segmentToDelete","setSegmentToDelete","onSetDeleteSegment","getFilterBeingEditedBySegmentId","dispatchOnFilterAdded","dispatchOnSegmentFilterBeingEditedChanged","dispatchOnSegmentDeleted","dispatchOnSaveSegmentFilter","segmentIndex","InsightTypes","canRunQuery","createRequest","currentSegmentFilters","createAdvancedReportSegmentRequest","createAdvancedReportRequest","getClicks","clicksResult","getConversionInboundCalls","getConversionWebs","webResult","getOpportunities","oppResult","getOpportunityValues","oppValueResult","getSales","salesResult","getRevenues","revenueResult","getCosts","costResult","getImpressions","impressionsResult","compareGetImpressions","compareGetClicks","compareGetCalls","compareGetWebs","compareGetOpps","compareGetOppalues","compareGetSales","compareGetRevenues","compareGetCosts","isGettingQuery","isButtonEnabled","impressionsRequest","clicksRequest","conversionInboundCallRequest","conversionWebRequest","opportunityRequest","opportunityValueRequest","salesRequest","revenueRequest","adCostRequest","isRecordingInvalid","CallRecordingPage","sidebarMenuItems","activeSegments","activeSegmentFilters","createInsightSegmentRequest","createInsightsReportRequest","CONVERSION_INFLUENCE","getConversionInfluenceInsightData","conversionInfluenceInsightResult","insights","occurrences","createInsightRows","createDrillthroughInsightsTableInjectableRow","tooltipContent","setTooltipPosition","handleMouseEnter","handleMouseLeave","deleteWebPageViewSegmentationConfig","onDeleteWebPageViewSegmentationConfig","activeTab","ON_DELETE_WEB_PAGE_VIEW_SEGMENTATION_CONFIG","segmentationRules","segmentationTypeName","ruleAccessTypeName","statusName","updatedDate","segmentationConfigTable","tabs","onTabChange","iconSize","webPageViewConfigData","isWebPageViewLoading","adCostConfigData","isAdCostLoading","tabConfig","SegmentationConfigRuleTarget","targetTypeDropDownItems","operatorDropDownItems","updateTarget","isRuleTargetKeyValue","SegmentationConfigRule","segmentTypeDropDownItems","ruleAccessTypeDropDownItems","configName","selectedSegmentationType","selectedRuleAccessType","configNameErrors","validateConfigName","validateSegmentName","SESSION","getSegmentationType","MANUAL","getRuleAccessType","SettingsSegmentationConfigCreatePage","userDetails","targetTypeOptions","segmentationCategoryTitles","segmentationConfigTitle","allRules","allTargets","createRules","groupedData","groupKey","conditionalOperator","onCreateSegmentationConfig","errorMessages","ErrorMessage","SettingsSegmentationConfigEditPage","segmentationConfigId","segmentationConfigResult","ruleIndex","Targets","targetIndex","targetType","PAYLOAD_VALUE","LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_KEYS","LANDING_PAGE_URL_AND_QUERY_STRING_SEGMENTS_VALUES","getTargetType","Type","Key","onUpdateSegmentationConfig","MainAppContainer","Filler","PersistGate","_getPrototypeOf2","onBeforeLift","_unsubscribe","handlePersistorState","ReactDOMClient"],"sourceRoot":""}