{"version":3,"mappings":"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CAEb,EC9CaghG,IAAqB,sBCJrBC,IAAY,CACvB,aACA,UACA,UACA,kBACA,WACA,WACA,aACA,kBACA,mBACA,kBACA,kBACA,kBACA,kBACA,YACA,mBACA,SACA,aACA,WACA,UACA,aACA,YACA,YACA,mBACA,WACA,iBACA,aACA,mBACA,aACA,kBACA,WACA,WACA,WACA,eACA,eACA,eACA,WACA,WACA,mBACA,iBACA,iBACA,iBACA,SACA,WACA,WACA,WACA,WACA,WACA,gBACA,gBACA,gBACA,qBACA,WACA,WACA,YACA,WACA,WACA,WACA,gBACA,WACA,UACA,WACA,SACA,eACA,gBACA,cACA,cACA,gBACA,gBACA,WACA,eACA,SACA,cACA,eACA,YACA,eACA,YACA,sBACA,gBACA,eACA,cACA,eACA,gBACA,eACA,eACA,cACA,cACA,cACA,WACA,YACA,iBACA,aACA,eACA,UACA,kBACA,gBACA,eACA,iBACA,iBACA,gBACA,eACA,oBACA,cACA,cACA,UACA,aACA,gBACA,iBACA,eACA,qBACA,qBACA,YACA,mBACA,gBACA,eACA,gBACA,UACA,eACA,mBACA,iBACA,0BACA,QACA,eACA,eACA,YACA,mBACA,cACA,iBACA,iBACA,cACA,eACA,eACA,kBACA,iBACA,iBACA,iBACA,cACA,YACA,YACA,YACA,iBACA,mBACA,aACA,oBACA,eACA,iBACA,yBACA,eACA,iBACA,mBACA,gBACA,gBACA,UACA,WACA,gBACA,cACA,iBACA,aACA,cACA,cACA,kBACA,mBACA,cACA,cACA,cACA,cACA,eACA,aACA,aACA,YACA,gBACA,kBACA,WACA,gBACA,uBACA,eACA,aACA,gBACA,aACA,aACA,aACA,aACA,kBACA,iBACA,sBACA,gBACA,gBACA,gBACA,wBACA,+BACA,0CACA,sBACA,aACA,mBACA,kBACA,kBACA,gBACA,sBACA,cACA,aACA,aACA,YACA,gBACA,cACA,cACA,oBACA,aACA,YACA,YACA,cACA,cACA,WACA,cACA,kBACA,kBACA,cACA,iBACA,eACA,aACA,aACA,aACA,oBACA,cACA,aACA,YACA,gBACA,gBACA,gBACA,gBACA,gBACA,cACA,cACA,cACA,cACA,cACA,cACA,iBACA,aACA,eACA,cACA,kBACA,mBACA,gBACA,iBACA,kBACA,YACA,kBACA,eACA,eACA,eACA,eACA,eACA,mBACA,yBACA,eACA,eACA,aACA,kBACA,eACA,gBACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,cACA,eACA,gBACA,gBACA,gBACA,YACA,kBACA,eACA,oBACA,oBACA,oBACA,kBACA,kBACA,eACA,eACA,eACA,eACA,gBACA,eACA,eACA,eACA,sBACA,cACA,wBACA,gBACA,aACA,mBACA,iBACA,gBACA,gBACA,mBACA,mBACA,gBACA,qBACA,iBACA,iBACA,iBACA,iBACA,iBACA,cACA,eACA,mBACA,eACA,aACA,cACA,cACA,cACA,cACA,cACA,iBACA,YACA,gBACA,eACA,gBACA,gBACA,cACA,eACA,eACA,eACA,cACA,qBACA,cACA,iBACA,eACA,kBACA,iBACA,YACA,aACA,cACA,cACA,cACA,cACA,eACA,cACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,cACA,iBACA,iBACA,iBACA,6BACA,gBACA,gBACA,+BACA,cACA,cACA,cACA,uBACA,kBACA,mBACA,iBACA,kBACA,kBACA,kBACA,oBACA,mBACA,eACA,kBACA,mBACA,gBACA,iBACA,SACA,aACA,mBACA,mBACA,mBACA,mBACA,oBACA,oBACA,mBACA,oBACA,oBACA,yBACA,YACA,kBACA,UACA,aACA,gBACA,mBACA,aACA,eACA,kBACA,UACA,cACA,YACA,cACA,gBACA,eACA,cACA,cACA,cACA,cACA,cACA,aACA,aACA,aACA,cACA,gBACA,cACA,oBACA,iBACA,cACA,YACA,iBACA,WACA,WACA,iBACA,iBACA,iBACA,iBACA,oBACA,oBACA,oBACA,mBACA,kBACA,0BACA,WACA,eACA,YACA,UACA,cACA,gBACA,cACA,cACA,YACA,iBACA,mBACA,aACA,cACA,cACA,cACA,aACA,iBACA,eACA,eACA,eACA,YACA,YACA,kBACA,kBACA,YACA,UACA,cACA,qBACA,eACA,UACA,eACA,UACA,cACA,cACA,eACA,gBACA,qBACA,YACA,iBACA,gBACA,eACA,YACA,iBACA,iBACA,iBACA,iBACA,cACA,eACA,aACA,eACA,oBACA,SACA,WACA,YACA,UACA,eACA,cACA,kBACA,qBACA,UACA,qBACA,cACA,eACA,cACA,iBACA,gBACA,iBACA,iBACA,cACA,gBACA,cACA,cACA,cACA,cACA,cACA,aACA,gBACA,iBACA,YACA,kBACA,cACA,cACA,cACA,qBACA,aACA,eACA,gBACA,eACA,iBACA,iBACA,gBACA,iBACA,iBACA,gBACA,kBACA,oBACA,kBACA,cACA,cACA,cACA,cACA,cACA,eACA,YACA,YACA,YACA,eACA,kBACA,eACA,gBACA,gBACA,eACA,eACA,iBACA,gBACA,eACA,cACA,gBACA,cACA,gBACA,iBACA,mBACA,gBACA,gBACA,iBACA,gBACA,gBACA,sBACA,oBACA,wBACA,gBACA,SACA,YACA,cACA,oBACA,eACA,mBACA,gBACA,UACA,iBACA,eACA,gBACA,eACA,YACA,cACA,oBACA,aACA,aACA,oBACA,iBACA,gBACA,mBACA,oBACA,mBACA,aACA,aACA,gBACA,qBACA,mBACA,kBACA,gBACA,kBACA,gBACA,cACA,iBACA,qBACA,iBACA,iBACA,iBACA,sBACA,iBACA,eACA,kBACA,kBACA,iBACA,YACA,eACA,gBACA,eACA,eACA,eACA,eACA,cACA,WACA,aACA,aACA,mBACA,mBACA,eACA,gBACA,uBACA,aACA,gBACA,WACA,qBACA,eACA,aACA,eACA,oBACA,oBACA,oBACA,cACA,gBACA,cACA,iBACA,aACA,YACA,iBACA,aACA,eACA,iBACA,kBACA,iBACA,iBACA,YACA,WACA,YACA,uBACA,iBACA,eACA,iBACA,UACA,aACA,kBACA,eACA,yBACA,aACA,UACA,sBACA,YACA,cACA,iBACA,mBACA,YACA,eACA,eACA,cACA,iBACA,eACA,eACA,YACA,UACA,cACA,gCACA,YACA,YACA,YACA,YACA,iBACA,eACA,eACA,UACA,mBACA,8BACA,gBACA,YACA,gBACA,eACA,iBACA,gBACA,6BACA,iBACA,YACA,YACA,YACA,wBACA,aACA,YACA,YACA,YACA,YACA,cACA,WACA,gBACA,iBACA,kBACA,gBACA,aACA,mBACA,eACA,eACA,0BACA,0BACA,mBACA,mBACA,oBACA,kBACA,mBACA,gBACA,cACA,eACA,cACA,gBACA,cACA,kBACA,iBACA,gBACA,eACA,qBACA,eACA,gBACA,eACA,gBACA,gBACA,gBACA,iBACA,cACA,eACA,iBACA,eACA,gBACA,WACA,YACA,iBACA,gBACA,gBACA,mBACA,UACA,UACA,WACA,gBACA,cACA,cACA,cACA,cACA,aACA,cACA,aACA,iBACA,eACA,gCACA,aACA,iBACA,iBACA,eACA,cACA,qBACA,iBACA,iBACA,iBACA,cACA,gBACA,aACA,iBACA,iBACA,iBACA,iBACA,iBACA,cACA,iBACA,gBACA,gBACA,kBACA,iBACA,iBACA,cACA,kBACA,kBACA,kBACA,mBACA,mBACA,qBACA,qBACA,eACA,cACA,gBACA,gBACA,YACA,WACA,gBACA,eACA,aACA,eACA,iBACA,eACA,gBACA,iBACA,qBACA,gBACA,gBACA,cACA,aACA,eACA,aACA,YACA,gBACA,mBACA,kBACA,mBACA,kBACA,kBACA,kBACA,qBACA,eACA,qBACA,iBACA,gBACA,kBACA,gBACA,SACA,cACA,cACA,kBACA,iBACA,oBACA,cACA,eACA,cACA,0BACA,qBACA,gBACA,iBACA,gBACA,kBACA,gBACA,gBACA,gBACA,kBACA,gBACA,cACA,gBACA,mBACA,iBACA,eACA,iBACA,yBACA,qBACA,oBACA,0BACA,qBACA,cACA,cACA,gBACA,oBACA,mBACA,oBACA,2BACA,aACA,4BACA,oBACA,aACA,aACA,WACA,kBACA,YACA,cACA,kBACA,iBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,eACA,gBACA,eACA,eACA,gBACA,gBACA,eACA,kBACA,iBACA,iBACA,aACA,YACA,gBACA,kBACA,eACA,aACA,cACA,qBACA,YACA,eACA,eACA,YACA,YACA,gBACA,cACA,YACA,sBACA,eACA,eACA,oBACA,eACA,cACA,oBACA,oBACA,oBACA,aACA,YACA,aACA,eACA,cACA,eACA,aACA,SACA,oBACA,6BACA,oBACA,oBACA,kBACA,iBACA,mBACA,kBACA,kBACA,qBACA,qBACA,WACA,eACA,eACA,eACA,YACA,qBACA,aACA,eACA,eACA,uBACA,iBACA,WACA,cACA,gBACA,YACA,gBACA,iBACA,oBACA,qBACA,YACA,aACA,aACA,YACA,aACA,WACA,WACA,cACA,aACA,WACA,SACA,aACA,gBACA,cACA,cACA,aACA,aACA,cACA,aACA,4BACA,aACA,SACA,qBACA,cACA,iBACA,YACA,cACA,cACA,cACA,YACA,WACA,cACA,SACF,ECt+BMC,IAAe,uJAERC,IAAev7F,GAAS,CAInC,GAHI,CAACA,GAGD,CAACs7F,IAAa,KAAKt7F,CAAK,EAC1B,MAAO,GAGT,MAAMqoB,EAAUroB,EAAM,MAAM,QAAQ,EACpC,GAAI,CAACqoB,GAAW,CAACA,EAAQ,CAAC,EACxB,MAAO,GAET,MAAMg7B,EAASh7B,EAAQ,CAAC,GAAK,KAK7B,MAJI,GAACg7B,GAIDg4C,IAAU,QAAQh4C,CAAM,IAAM,GAKpC,ECzBam4C,GAAe,CAC1B,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,sBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,0CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,yBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,iCACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,oBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,2BACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,0BACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,8CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,qBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,oBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,8BACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gCACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,yCACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,+CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iCACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,yBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,6CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,2BACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,kCACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,+CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,wBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,4BACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mCACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,wBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,kBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,+CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,yBACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,uBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,wCACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,sBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,2BACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,uBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iBACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,8CACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,0BACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,uBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,oBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,KAEV,ECjqCMC,GAAwB,EAEjBC,GAA6B,CAAClhF,EAAS,KAAMmhF,EAAM,OAAS,CACvE,GAAInhF,IAAW,KACb,OAAO,KAGT,MAAMohF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ACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,OACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,OACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,OACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,OACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,OACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,M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AAe,m+DCAfC,IAAe,8pDCAfC,IAAe,2XCAfC,IAAe,6tBCAfC,IAAe,uXCAfC,IAAe,0BCAfC,IAAe,mTCAfC,IAAe,unBCAfC,IAAe,qWCAfC,IAAe,0SCAfC,IAAe,0BCAfC,IAAe,y8BCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,2gCCAfC,IAAe,0mBCAfC,IAAe,62BCAfC,IAAe,wjDCAfC,IAAe,00CCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,sZCAfC,IAAe,iWCAfC,IAAe,4OCAfC,IAAe,4ZCAfC,IAAe,s9BCAfC,IAAe,0BCAfC,IAAe,usCCAfC,IAAe,0BCAfC,IAAe,gyDCAfC,IAAe,0BCAfC,IAAe,0oBCAfC,IAAe,wZCAfC,IAAe,0BCAfC,IAAe,2fCAfC,IAAe,6zBCAfC,IAAe,qiBCAfC,IAAe,0tDCAfC,IAAe,wiICAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,6uCCAfC,IAAe,g6BCAfC,IAAe,u6BCAfC,IAAe,2rCCAfC,IAAe,0lBCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,0iBCAfC,IAAe,gzGCAfC,IAAe,sbCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,mzBCAfC,IAAe,i3CCAfC,IAAe,smBCAfC,IAAe,oUCAfC,IAAe,iVCAfC,IAAe,opBCAfC,IAAe,2TCAfC,IAAe,oUCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,0SCAfC,IAAe,8WCAfC,IAAe,o4BCAfC,IAAe,qgBCAfC,IAAe,gVCAfC,IAAe,g1BCAfC,IAAe,+xDCAfC,IAAe,4/DCAfC,IAAe,0BCAfC,IAAe,6SCAfC,IAAe,ukBCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,oYCAfC,IAAe,8WCAfC,IAAe,kqJCAfC,IAAe,0BCAfC,IAAe,woDCAfC,IAAe,o/FCAfC,IAAe,uqCCAfC,IAAe,snDCAfC,IAAe,+VCAfC,IAAe,0BCAfC,IAAe,+TCAfC,IAAe,0BCAfC,IAAe,8dCAfC,IAAe,mbCAfC,IAAe,orCCAfC,IAAe,8vBCAfC,IAAe,giCCAfC,IAAe,0+ECAfC,IAAe,0BCAfC,IAAe,02BCAfC,IAAe,ijJCAfC,IAAe,oPCAfC,IAAe,0BCAfC,IAAe,ijECAfC,IAAe,m1DCAfC,IAAe,s3BCAfC,IAAe,uTCAfC,IAAe,0SCAfC,IAAe,0BCAfC,IAAe,guBCAfC,IAAe,qoBCAfC,IAAe,0BCAfC,IAAe,ijBCAfC,IAAe,0BCAfC,IAAe,8aCAfC,IAAe,wYCAfC,IAAe,2ZCAfC,IAAe,0BCAfC,IAAe,oYCAfC,IAAe,s4BCAfC,IAAe,0BCAfC,IAAe,6lCCAfC,IAAe,oZCAfC,IAAe,4kBCAfC,IAAe,q2BCAfC,IAAe,kkCCAfC,IAAe,6BCAfC,IAAe,6BCAfC,IAAe,6BCAfC,IAAe,6nBCAfC,IAAe,kxGCAfC,IAAe,mZCAfC,IAAe,g4DCAfC,IAAe,iVCAfC,IAAe,0BCAfC,IAAe,2fCAfC,IAAe,0jBCAfC,IAAe,0YCAfC,IAAe,0fCAfC,IAAe,omCCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,yZCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,gVCAfC,IAAe,0yCCAfC,IAAe,y0BCAfC,IAAe,+VCAfC,IAAe,ywECAfC,IAAe,g7BCAfC,IAAe,kuBCAfC,IAAe,0BCAfC,IAAe,2cCAfC,IAAe,gaCAfC,IAAe,qqBCAfC,IAAe,iYCAfC,IAAe,4pDCAfC,IAAe,i3FCAfC,IAAe,qpBCAfC,IAAe,qUCAfC,IAAe,gkJCAfC,IAAe,60BCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,ggECAfC,IAAe,wqDCAfC,IAAe,0BCAfC,IAAe,ihBCAfC,IAAe,o0CCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,mkBCAfC,IAAe,8+ECAfC,IAAe,0SCAfC,IAAe,s1BCAfC,IAAe,0BCAfC,IAAe,mWCAfC,IAAe,kWCAfC,IAAe,0SCAfC,IAAe,y8BCAfC,IAAe,0BCAfC,IAAe,0BCMTC,IAAc,gCAAAnjI,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,mBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAsyH,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,oBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,kBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,oBAAAC,IAAA,oBAAAC,IAAA,oBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,qBAAAC,IAAA,qBAAAC,IAAA,qBAAAC,IAAA,qBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,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","names":["f","require$$0","g","reactJsxRuntime_production_min","h","m","n","p","q","c","a","k","b","d","e","l","jsxRuntimeModule","global","factory","module","this","SLICE$0","createClass","ctor","superClass","Iterable","value","isIterable","Seq","KeyedIterable","isKeyed","KeyedSeq","IndexedIterable","isIndexed","IndexedSeq","SetIterable","isAssociative","SetSeq","maybeIterable","IS_ITERABLE_SENTINEL","maybeKeyed","IS_KEYED_SENTINEL","maybeIndexed","IS_INDEXED_SENTINEL","maybeAssociative","isOrdered","maybeOrdered","IS_ORDERED_SENTINEL","DELETE","SHIFT","SIZE","MASK","NOT_SET","CHANGE_LENGTH","DID_ALTER","MakeRef","ref","SetRef","OwnerID","arrCopy","arr","offset","len","newArr","ii","ensureSize","iter","returnTrue","wrapIndex","index","uint32Index","wholeSlice","begin","end","size","resolveBegin","resolveIndex","resolveEnd","defaultIndex","ITERATE_KEYS","ITERATE_VALUES","ITERATE_ENTRIES","REAL_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","ITERATOR_SYMBOL","Iterator","next","iteratorValue","type","v","iteratorResult","iteratorDone","hasIterator","getIteratorFn","isIterator","maybeIterator","getIterator","iterable","iteratorFn","isArrayLike","emptySequence","seqFromValue","fn","reverse","seqIterate","seqIterator","keyedSeqFromValue","indexedSeqFromValue","isSeq","IS_SEQ_SENTINEL","ArraySeq","array","notSetValue","maxIndex","ObjectSeq","object","keys","key","IterableSeq","iterator","iterations","step","IteratorSeq","cache","val","maybeSeq","EMPTY_SEQ","seq","maybeIndexedSeqFromValue","useKeys","entry","fromJS","json","converter","fromJSWith","fromJSDefault","parentJSON","isPlainObj","is","valueA","valueB","deepEqual","notAssociative","entries","flipped","_","allEqual","bSize","Repeat","times","EMPTY_REPEAT","searchValue","this$0","other","invariant","condition","error","Range","start","EMPTY_RANGE","possibleIndex","offsetValue","Collection","KeyedCollection","IndexedCollection","SetCollection","imul","smi","i32","hash","o","STRING_HASH_CACHE_MIN_STRLEN","cachedHashString","hashString","hashJSObj","string","stringHashCache","STRING_HASH_CACHE_SIZE","STRING_HASH_CACHE_MAX_SIZE","obj","usingWeakMap","weakMap","UID_HASH_KEY","canDefineProperty","getIENodeHash","objHashUID","isExtensible","node","assertNotInfinite","Map","emptyMap","isMap","map","keyValues","i","updateMap","keyPath","updater","updatedValue","updateInDeepMap","forceIterator","mergeIntoMapWith","merger","iters","deepMerger","deepMergerWith","comparator","OrderedMap","sortFactory","mapper","mutable","MapIterator","ownerID","makeMap","maybeMap","IS_MAP_SENTINEL","MapPrototype","ArrayMapNode","shift","keyHash","didChangeSize","didAlter","removed","idx","exists","MAX_ARRAY_MAP_SIZE","createNodes","isEditable","newEntries","BitmapIndexedNode","bitmap","nodes","bit","popCount","keyHashFrag","newNode","updateNode","MAX_BITMAP_INDEXED_SIZE","expandNodes","isLeafNode","newBitmap","newNodes","setIn","spliceOut","spliceIn","HashArrayMapNode","count","newCount","MIN_HASH_ARRAY_MAP_SIZE","packNodes","HashCollisionNode","mergeIntoNode","ValueNode","keyMatch","mapIteratorFrame","stack","mapIteratorValue","subNode","prev","root","EMPTY_MAP","newRoot","newSize","idx1","idx2","excluding","packedII","packedNodes","including","expandedNodes","iterables","mergeIntoCollectionWith","existing","nextValue","collection","x","mergeIntoMap","keyPathIter","isNotSet","existingValue","newValue","nextExisting","nextUpdated","canEdit","newArray","newLen","after","List","empty","emptyList","isList","makeList","VNode","list","listNodeFor","updateList","values","oldSize","setListBounds","mergeIntoListWith","iterateList","DONE","maybeList","IS_LIST_SENTINEL","ListPrototype","level","originIndex","removingFirst","newChild","oldChild","editable","editableVNode","sizeIndex","left","right","tailPos","getTailOffset","tail","iterateNodeOrLeaf","iterateLeaf","iterateNode","from","to","origin","capacity","EMPTY_LIST","newTail","updateVNode","nodeHas","lowerNode","newLowerNode","rawIndex","owner","oldOrigin","oldCapacity","newOrigin","newCapacity","newLevel","offsetShift","oldTailOffset","newTailOffset","oldTail","beginIndex","maxSize","emptyOrderedMap","isOrderedMap","updateOrderedMap","newMap","newList","makeOrderedMap","maybeOrderedMap","omap","EMPTY_ORDERED_MAP","has","ToKeyedSequence","indexed","reversedSequence","reverseFactory","context","mappedSequence","mapFactory","resolveSize","ToIndexedSequence","ToSetSequence","FromEntriesSequence","validateEntry","indexedIterable","cacheResultThrough","flipFactory","flipSequence","makeSequence","filterFactory","predicate","filterSequence","countByFactory","grouper","groups","groupByFactory","isKeyedIter","coerce","iterableClass","reify","sliceFactory","originalSize","resolvedBegin","resolvedEnd","resolvedSize","sliceSize","sliceSeq","skipped","isSkipping","takeWhileFactory","takeSequence","iterating","skipWhileFactory","skipSequence","skipping","concatFactory","isKeyedIterable","singleton","concatSeq","sum","flattenFactory","depth","flatSequence","stopped","flatDeep","currentDepth","flatMapFactory","interposeFactory","separator","interposedSequence","defaultComparator","maxFactory","maxCompare","comp","zipWithFactory","keyIter","zipper","zipSequence","iterators","isDone","steps","s","Record","defaultValues","name","hasInitialized","RecordType","setProps","RecordTypePrototype","RecordPrototype","recordName","defaultVal","makeRecord","likeRecord","record","prototype","names","setProp","Set","emptySet","isSet","set","updateSet","originalSet","OrderedSet","maybeSet","IS_SET_SENTINEL","SetPrototype","makeSet","EMPTY_SET","emptyOrderedSet","isOrderedSet","maybeOrderedSet","OrderedSetPrototype","makeOrderedSet","EMPTY_ORDERED_SET","Stack","emptyStack","isStack","head","makeStack","maybeStack","IS_STACK_SENTINEL","StackPrototype","EMPTY_STACK","mixin","methods","keyCopier","isProtoKey","returnValue","sideEffect","joined","isFirst","reducer","initialReduction","reduction","useFirst","reversed","not","entriesSequence","entryMapper","found","searchKey","searchKeyPath","nested","keyMapper","neg","defaultNegComparator","amount","hashIterable","IterablePrototype","quoteString","KeyedIterablePrototype","removeNum","numArgs","spliced","zipped","interleaved","defaultZipper","ordered","keyed","hashMerge","murmurHashOfSize","Immutable","format","args","argIndex","browser","freeGlobal","_freeGlobal","freeSelf","_root","Symbol","_Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","_getRawTag","objectToString","_objectToString","require$$1","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObject","isObject_1","asyncTag","funcTag","genTag","proxyTag","isFunction","isFunction_1","isNil","isNil_1","warning","isAbsolute","pathname","spliceOne","resolvePathname","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","hasTrailingSlash","last","up","part","_typeof","valueEqual","item","aType","bType","aValue","bValue","aKeys","bKeys","PathUtils","path","hasBasename","prefix","search","hashIndex","searchIndex","location","LocationUtils","_extends","target","source","_resolvePathname","_resolvePathname2","_interopRequireDefault","_valueEqual","_valueEqual2","_PathUtils","state","currentLocation","createTransitionManager_1","_warning","_warning2","createTransitionManager","prompt","setPrompt","nextPrompt","confirmTransitionTo","action","getUserConfirmation","callback","listeners","appendListener","isActive","listener","notifyListeners","_len","_key","DOMUtils","event","message","ua","createBrowserHistory_1","_invariant","_invariant2","_LocationUtils","require$$3","_createTransitionManager","require$$4","_createTransitionManager2","_DOMUtils","require$$5","PopStateEvent","HashChangeEvent","getHistoryState","createBrowserHistory","props","globalHistory","canUseHistory","needsHashChangeListener","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","basename","getDOMLocation","historyState","_ref","_window$location","createKey","transitionManager","setState","nextState","history","handlePopState","handlePop","handleHashChange","forceNextPop","ok","revertPop","fromLocation","toLocation","toIndex","allKeys","fromIndex","delta","go","initialLocation","createHref","push","href","prevIndex","nextKeys","replace","goBack","goForward","listenerCount","checkDOMListeners","isBlocked","block","unblock","listen","unlisten","API_CALL","TYPES","REQUEST","DATA","DAYS","createUserLightBasic","email","createIncognitoBasic","userId","isActionApiCall","createApiCallAction","typeEnum","request","data","createApiEnumAction","listCacheClear","_listCacheClear","eq","eq_1","assocIndexOf","length","_assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","_listCacheDelete","listCacheGet","_listCacheGet","listCacheHas","_listCacheHas","listCacheSet","_listCacheSet","ListCache","_ListCache","stackClear","_stackClear","stackDelete","_stackDelete","stackGet","_stackGet","stackHas","_stackHas","coreJsData","_coreJsData","maskSrcKey","uid","isMasked","func","_isMasked","funcProto","funcToString","toSource","_toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","_baseIsNative","getValue","_getValue","getNative","_getNative","_Map","nativeCreate","_nativeCreate","hashClear","_hashClear","hashDelete","_hashDelete","HASH_UNDEFINED","hashGet","_hashGet","hashHas","_hashHas","hashSet","_hashSet","Hash","_Hash","mapCacheClear","_mapCacheClear","isKeyable","_isKeyable","getMapData","_getMapData","mapCacheDelete","_mapCacheDelete","mapCacheGet","_mapCacheGet","mapCacheHas","_mapCacheHas","mapCacheSet","_mapCacheSet","MapCache","_MapCache","LARGE_ARRAY_SIZE","stackSet","pairs","_stackSet","_Stack","defineProperty","_defineProperty","baseAssignValue","_baseAssignValue","assignMergeValue","_assignMergeValue","createBaseFor","fromRight","iteratee","keysFunc","_createBaseFor","baseFor","_baseFor","freeExports","exports","freeModule","moduleExports","Buffer","allocUnsafe","cloneBuffer","buffer","isDeep","Uint8Array","_Uint8Array","cloneArrayBuffer","arrayBuffer","_cloneArrayBuffer","cloneTypedArray","typedArray","_cloneTypedArray","copyArray","_copyArray","objectCreate","baseCreate","proto","_baseCreate","overArg","transform","arg","_overArg","getPrototype","_getPrototype","isPrototype","Ctor","_isPrototype","initCloneObject","_initCloneObject","isObjectLike","isObjectLike_1","argsTag","baseIsArguments","_baseIsArguments","propertyIsEnumerable","isArguments","isArguments_1","isArray","isArray_1","MAX_SAFE_INTEGER","isLength","isLength_1","isArrayLike_1","isArrayLikeObject","isArrayLikeObject_1","stubFalse","stubFalse_1","nativeIsBuffer","isBuffer","objectTag","objectCtorString","isPlainObject","isPlainObject_1","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","_baseIsTypedArray","baseUnary","_baseUnary","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","isTypedArray_1","safeGet","_safeGet","assignValue","objValue","_assignValue","copyObject","customizer","isNew","_copyObject","baseTimes","_baseTimes","reIsUint","isIndex","_isIndex","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","_arrayLikeKeys","nativeKeysIn","_nativeKeysIn","baseKeysIn","isProto","_baseKeysIn","keysIn","keysIn_1","toPlainObject","toPlainObject_1","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","baseMergeDeep","srcIndex","mergeFunc","srcValue","stacked","isCommon","isTyped","_baseMergeDeep","baseMerge","_baseMerge","identity","identity_1","apply","thisArg","_apply","nativeMax","overRest","otherArgs","_overRest","constant","constant_1","baseSetToString","_baseSetToString","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","remaining","_shortOut","setToString","_setToString","baseRest","_baseRest","isIterateeCall","_isIterateeCall","createAssigner","assigner","sources","guard","_createAssigner","merge","merge_1","defaultEnv","_currentEnv","setCurrentEnv","currentEnv","getEnv","nativeKeys","_nativeKeys","baseKeys","_baseKeys","DataView","_DataView","Promise","_Promise","_Set","WeakMap","_WeakMap","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","_getTag","isEmpty","isEmpty_1","isNumber","isNumber_1","isNaN","_isNaN","isString","isString_1","baseFindIndex","_baseFindIndex","setCacheAdd","_setCacheAdd","setCacheHas","_setCacheHas","SetCache","_SetCache","arraySome","_arraySome","cacheHas","_cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","bitmask","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","_equalArrays","mapToArray","_mapToArray","setToArray","_setToArray","symbolTag","symbolProto","symbolValueOf","equalByTag","convert","_equalByTag","arrayPush","_arrayPush","baseGetAllKeys","symbolsFunc","_baseGetAllKeys","arrayFilter","resIndex","_arrayFilter","stubArray","stubArray_1","nativeGetSymbols","getSymbols","symbol","_getSymbols","keys_1","getAllKeys","_getAllKeys","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","_equalObjects","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","_baseIsEqualDeep","baseIsEqual","_baseIsEqual","baseIsMatch","matchData","noCustomizer","_baseIsMatch","isStrictComparable","_isStrictComparable","getMatchData","_getMatchData","matchesStrictComparable","_matchesStrictComparable","baseMatches","_baseMatches","isSymbol","isSymbol_1","reIsDeepProp","reIsPlainProp","isKey","_isKey","FUNC_ERROR_TEXT","memoize","resolver","memoized","memoize_1","MAX_MEMOIZE_SIZE","memoizeCapped","_memoizeCapped","rePropName","reEscapeChar","stringToPath","match","number","quote","subString","_stringToPath","arrayMap","_arrayMap","symbolToString","baseToString","_baseToString","toString","toString_1","castPath","_castPath","toKey","_toKey","baseGet","_baseGet","get","defaultValue","get_1","baseHasIn","_baseHasIn","hasPath","hasFunc","_hasPath","hasIn","hasIn_1","baseMatchesProperty","_baseMatchesProperty","baseProperty","_baseProperty","basePropertyDeep","_basePropertyDeep","property","property_1","baseIteratee","_baseIteratee","reWhitespace","trimmedEndIndex","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isBinary","toNumber_1","INFINITY","MAX_INTEGER","toFinite","sign","toFinite_1","toInteger","remainder","toInteger_1","findIndex","findIndex_1","baseIsNaN","_baseIsNaN","strictIndexOf","_strictIndexOf","baseIndexOf","_baseIndexOf","indexOf","indexOf_1","createFind","findIndexFunc","_createFind","find","find_1","arrayEach","_arrayEach","baseForOwn","_baseForOwn","createBaseEach","eachFunc","_createBaseEach","baseEach","_baseEach","castFunction","_castFunction","forEach","forEach_1","isUndefined","isUndefined_1","isNull","isNull_1","baseMap","_baseMap","map_1","baseAssign","_baseAssign","baseAssignIn","_baseAssignIn","copySymbols","_copySymbols","getSymbolsIn","_getSymbolsIn","copySymbolsIn","_copySymbolsIn","getAllKeysIn","_getAllKeysIn","initCloneArray","_initCloneArray","cloneDataView","dataView","_cloneDataView","reFlags","cloneRegExp","regexp","_cloneRegExp","cloneSymbol","_cloneSymbol","initCloneByTag","_initCloneByTag","baseIsMap","_baseIsMap","nodeIsMap","isMap_1","baseIsSet","_baseIsSet","nodeIsSet","isSet_1","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","isFlat","isFull","isFunc","subValue","_baseClone","clone","clone_1","arrayIncludes","_arrayIncludes","arrayIncludesWith","_arrayIncludesWith","noop","noop_1","createSet","_createSet","baseUniq","includes","outer","computed","seenIndex","_baseUniq","uniqBy","uniqBy_1","baseValues","_baseValues","values_1","spreadableSymbol","isFlattenable","_isFlattenable","baseFlatten","isStrict","_baseFlatten","baseSortBy","comparer","_baseSortBy","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","_compareAscending","compareMultiple","orders","objCriteria","othCriteria","ordersLength","order","_compareMultiple","baseOrderBy","iteratees","criteria","_baseOrderBy","sortBy","sortBy_1","compare","toCompare","getOrderedArray","keysOrder","arrayToSort","comparatorFunc","current","orderedArray","findOnArray","existsOnArray","updateArrayObject","arrayParam","toggleArrayValue","asArray","param","addToArray","targetLength","sourceLength","filterDuplicates","getId","objects","id","getHostname","uri","matches","getRelativePath","getQueryFromUri","uriBase","curr","getQueryParam","formatQueryParams","parameters","qs","url","regex","results","component","CALLBACK_EVENTS","getCallbackUri","callbackUri","removeUrlParameter","queryToRemoveParam","queryToRemove","queries","baseUrl","query","getAbsolutePath","queryParams","base","apiConsumerQueryParam","apiVersionQueryParam","QUERY_PARAM_API_CONSUMER","QUERY_PARAM_API_CONSUMER_DEPRECATED","getQueryApiConsumer","getApiConsumer","getApiUrl","apiUrl","isDev","isProd","isWebCustomer","isKiosk","isBo","isOrderPlugin","isWebGlobal","isEmbeddedFront","getGoogleMapApiUrl","getGoogleMapApiVersion","getGoogleMapApiKey","hasAuthEnabled","shouldUseAppConfig","isLocalhostOrPrivateIp","hostname","secondOctet","__VERSION__","__SDK_GIT_COMMIT__","__APP_GIT_COMMIT__","__SDK_GIT_BRANCH__","__APP_GIT_BRANCH__","getPublicUrl","_store","registerStore","store","getStore","createAction","dispatch","createReducer","initialState","fnMap","handler","defaultEqualityCheck","areArgumentsShallowlyEqual","equalityCheck","defaultMemoize","lastArgs","lastResult","getDependencies","funcs","dependencies","dep","dependencyTypes","createSelectorCreator","memoizeOptions","_len2","_key2","recomputations","resultFunc","memoizedResultFunc","selector","params","createSelector","concat","concat_1","uniqWith","uniqWith_1","isError","wat","isInstanceOf","isBuiltin","className","isErrorEvent","isDOMError","isDOMException","isParameterizedString","isPrimitive","isEvent","isElement","isRegExp","isThenable","isSyntheticEvent","isVueViewModel","truncate","str","max","safeJoin","input","delimiter","output","isMatchingPattern","requireExactStringMatch","stringMatchesSomePattern","testString","patterns","applyAggregateErrorsToEvent","exceptionFromErrorImplementation","parser","maxValueLimit","limit","hint","originalException","truncateAggregateExceptions","aggregateExceptionsFromError","prevExceptions","exception","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","parentId","exceptions","maxValueLength","isGlobalObj","GLOBAL_OBJ","getGlobalObject","getGlobalSingleton","creator","gbl","__SENTRY__","WINDOW","DEFAULT_MAX_STRING_LENGTH","htmlTreeAsString","elem","options","currentElem","MAX_TRAVERSE_HEIGHT","out","height","sepLength","nextStr","keyAttrs","maxStringLength","_htmlElementAsString","el","classes","attr","keyAttrPairs","keyAttr","keyAttrPair","allowedAttrs","getLocationHref","getComponentName","DEBUG_BUILD","PREFIX","CONSOLE_LEVELS","originalConsoleMethods","consoleSandbox","console","wrappedFuncs","wrappedLevels","originalConsoleMethod","makeLogger","enabled","logger","DSN_REGEX","isValidProtocol","protocol","dsnToString","dsn","withPassword","host","pass","port","projectId","publicKey","dsnFromString","lastPath","split","projectMatch","dsnFromComponents","components","validateDsn","makeDsn","SentryError","logLevel","fill","replacementFactory","original","wrapped","markFunctionWrapped","addNonEnumerableProperty","getOriginalFunction","urlEncode","convertToPlainObject","getOwnProperties","newObj","serializeEventTarget","extractedProps","extractExceptionKeysForMessage","maxLength","includedKeys","serialized","dropUndefinedKeys","inputValue","_dropUndefinedKeys","memoizationMap","isPojo","memoVal","STACKTRACE_FRAME_LIMIT","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","skipFirst","frames","lines","line","cleanedLine","frame","stripSentryFramesAndReverse","stackParserFromStackParserOptions","stackParser","localStack","defaultFunctionName","getFunctionName","handlers","instrumented","addHandler","maybeInstrument","instrumentFn","triggerHandlers","typeHandlers","addConsoleInstrumentationHandler","instrumentConsole","log","uuid4","crypto","getRandomByte","getFirstException","getEventDescription","eventId","firstException","addExceptionTypeValue","addExceptionMechanism","newMechanism","defaultMechanism","currentMechanism","mergedData","checkOrSetAlreadyCaught","arrayify","maybeArray","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","addClickKeypressInstrumentationHandler","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","handlerForType","originalRemoveEventListener","isSimilarToLastCapturedEvent","shouldSkipDOMEvent","eventType","globalListener","getEventTarget","supportsFetch","isNativeFetch","supportsNativeFetch","doc","sandbox","err","addFetchInstrumentationHandler","instrumentFetch","originalFetch","method","parseFetchArgs","handlerData","response","finishedHandlerData","erroredHandlerData","hasProp","prop","getUrlFromResource","resource","fetchArgs","_oldOnErrorHandler","addGlobalErrorInstrumentationHandler","instrumentError","msg","column","_oldOnUnhandledRejectionHandler","addGlobalUnhandledRejectionInstrumentationHandler","instrumentUnhandledRejection","supportsHistory","chromeVar","isChromePackagedApp","hasHistoryApi","lastHref","addHistoryInstrumentationHandler","instrumentHistory","oldOnPopState","historyReplacementFunction","originalHistoryFunction","SENTRY_XHR_DATA_KEY","addXhrInstrumentationHandler","instrumentXHR","xhrproto","originalOpen","startTimestamp","parseUrl","onreadystatechangeHandler","xhrInfo","readyStateArgs","setRequestHeaderArgs","header","originalSend","sentryXhrData","getSDKSource","memoBuilder","hasWeakSet","inner","unmemoize","normalize","maxProperties","visit","normalizeToSize","normalized","jsonSize","memo","stringified","stringifyValue","remainingDepth","valueWithToJSON","jsonValue","numAdded","visitable","visitKey","visitValue","objName","getConstructorName","utf8Length","States","RESOLVED","REJECTED","resolvedSyncPromise","SyncPromise","resolve","rejectedSyncPromise","reason","reject","executor","onfulfilled","onrejected","onfinally","isRejected","cachedHandlers","makePromiseBuffer","isReady","remove","task","add","taskProducer","drain","timeout","counter","capturedSetTimeout","fragment","validSeverityLevels","severityLevelFromString","ONE_SECOND_IN_MS","dateTimestampInSeconds","createUnixTimestampInSecondsFunc","performance","approxStartingTimeOrigin","timeOrigin","timestampInSeconds","threshold","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","navigationStartDelta","navigationStartIsReliable","createEnvelope","headers","items","addItemToEnvelope","envelope","newItem","forEachEnvelopeItem","envelopeItems","envelopeItem","envelopeItemType","encodeUTF8","textEncoder","serializeEnvelope","envHeaders","parts","append","itemHeaders","payload","stringifiedPayload","concatBuffers","buffers","totalLength","acc","buf","merged","createAttachmentEnvelopeItem","attachment","ITEM_TYPE_TO_DATA_CATEGORY_MAP","envelopeItemTypeToDataCategory","getSdkMetadataForEnvelopeHeader","metadataOrEvent","version","createEventEnvelopeHeaders","sdkInfo","tunnel","dynamicSamplingContext","createClientReportEnvelope","discarded_events","timestamp","clientReportItem","DEFAULT_RETRY_AFTER","parseRetryAfterHeader","now","headerDelay","headerDate","disabledUntil","limits","dataCategory","isRateLimited","updateRateLimits","statusCode","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","namespaces","delay","category","DEFAULT_ENVIRONMENT","getGlobalEventProcessors","addGlobalEventProcessor","notifyEventProcessors","processors","processor","final","makeSession","startingTime","session","sessionToJSON","updateSession","duration","closeSession","status","TRACE_FLAG_SAMPLED","spanToTraceContext","span","span_id","trace_id","op","parent_span_id","tags","spanToJSON","spanIsSpanClass","spanIsSampled","traceFlags","prepareEvent","scope","client","isolationScope","normalizeDepth","normalizeMaxBreadth","prepared","integrations","applyClientOptions","applyIntegrationsMetadata","applyDebugIds","finalScope","getFinalScope","clientEventProcessors","getGlobalScope","isolationData","mergeScopeData","finalScopeData","attachments","applyScopeDataToEvent","eventProcessors","evt","applyDebugMeta","normalizeEvent","environment","release","dist","debugIdStackParserCache","debugIdMap","debugIdStackFramesCache","cachedDebugIdStackFrameCache","filenameDebugIdMap","debugIdStackTrace","parsedStack","cachedParsedStack","stackFrame","images","filename","integrationNames","maxBreadth","captureContext","Scope","captureException","getCurrentHub","captureMessage","captureEvent","configureScope","addBreadcrumb","breadcrumb","withScope","rest","hub","lastEventId","getClient","getCurrentScope","startSession","getIsolationScope","currentScope","userAgent","currentSession","endSession","_sendSessionUpdate","captureSession","getRootSpan","getDynamicSamplingContextFromClient","public_key","user_segment","dsc","getDynamicSamplingContextFromSpan","txn","v7FrozenDsc","maybeSampleRate","jsonSpan","fingerprint","breadcrumbs","sdkProcessingMetadata","applyDataToEvent","applySpanToEvent","applyFingerprintToEvent","applyBreadcrumbsToEvent","applySdkMetadataToEvent","mergeData","extra","user","contexts","propagationContext","transactionName","mergeAndOverwriteScopeData","mergeVal","cleanedExtra","cleanedTags","cleanedUser","cleanedContexts","mergedBreadcrumbs","rootSpan","DEFAULT_MAX_BREADCRUMBS","globalScope","generatePropagationContext","newScope","requestSession","extras","scopeToMerge","scopeData","scopeContext","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","_breadcrumbs","_attachments","_contexts","_tags","_extra","_user","_level","_fingerprint","_eventProcessors","_propagationContext","_sdkProcessingMetadata","_transactionName","_span","additionalEventProcessors","newData","syntheticException","SDK_VERSION","API_VERSION","DEFAULT_BREADCRUMBS","Hub","_version","assignedScope","assignedIsolationScope","top","maybePromiseResult","res","beforeBreadcrumb","finalBreadcrumb","oldHub","makeMain","integration","customSamplingContext","sentry","getMainCarrier","registry","getHubFromCarrier","setHubOnCarrier","getGlobalHub","hasHubOnCarrier","carrier","enhanceEventWithSdkInfo","createSessionEnvelope","metadata","envelopeHeaders","createEventEnvelope","SENTRY_API_VERSION","getBaseApiEndpoint","_getIngestEndpoint","_encodedAuth","getEnvelopeEndpointWithUrlEncodedAuth","tunnelOrOptions","getReportDialogEndpoint","dsnLike","dialogOptions","endpoint","encodedOptions","installedIntegrations","integrationsByName","currentInstance","existingInstance","getIntegrationsToSetup","defaultIntegrations","userIntegrations","finalIntegrations","debugIndex","debugInstance","setupIntegrations","integrationIndex","setupIntegration","afterSetupIntegrations","serializeMetricBuckets","metricBucketItems","tagEntries","maybeTags","createMetricEnvelope","createMetricEnvelopeItem","ALREADY_SEEN_ERROR","BaseClient","eventMessage","promisedEvent","capturedSpanScope","transport","clientFinished","transportFlushed","eventProcessor","forceInitialize","integrationId","integrationName","isAlreadyInstalled","env","promise","sendResponse","eventOrCount","metricsEnvelope","hook","crashed","errored","ex","mechanism","sessionNonTerminal","ticked","tick","interval","spanId","parentSpanId","finalEvent","sentryError","sampleRate","isTransaction","isTransactionEvent","beforeSendLabel","capturedSpanIsolationScope","processBeforeSend","_validateBeforeSendResult","processedEvent","spanCount","spanCountBefore","spanCountAfter","droppedSpanCount","transactionInfo","outcomes","beforeSendResult","invalidValueError","beforeSend","beforeSendTransaction","initAndBind","clientClass","setCurrentClient","initializeClient","DEFAULT_TRANSPORT_BUFFER_SIZE","createTransport","makeRequest","rateLimits","flush","send","filteredEnvelopeItems","getEventForEnvelopeItem","filteredEnvelope","recordEnvelopeLoss","requestTask","applySdkMetadata","DEFAULT_IGNORE_ERRORS","DEFAULT_IGNORE_TRANSACTIONS","INTEGRATION_NAME","_inboundFiltersIntegration","_hint","clientOptions","mergedOptions","_mergeOptions","_shouldDropEvent","inboundFiltersIntegration","internalOptions","_isSentryError","_isIgnoredError","_isIgnoredTransaction","_isDeniedUrl","_getEventFilterUrl","_isAllowedUrl","ignoreErrors","_getPossibleEventMessages","ignoreTransactions","denyUrls","allowUrls","possibleMessages","lastException","_getLastValidUrl","originalFunctionToString","SETUP_CLIENTS","_functionToStringIntegration","originalFunction","functionToStringIntegration","ignoreOnError","shouldIgnoreOnError","ignoreNextOnError","wrap","before","wrapper","sentryWrapped","wrappedArguments","exceptionFromError","parseStackFrames","extractMessage","eventFromPlainObject","isUnhandledRejection","getNonErrorObjectExceptionValue","eventFromError","stacktrace","popSize","getPopSize","reactMinifiedRegexp","eventFromException","attachStacktrace","eventFromUnknownInput","eventFromMessage","eventFromString","domException","__sentry_template_string__","__sentry_template_values__","captureType","getObjectClassName","createUserFeedbackEnvelope","feedback","createUserFeedbackEnvelopeItem","BrowserClient","sdkSource","cachedFetchImpl","getNativeFetchImplementation","document","fetchImpl","contentWindow","clearCachedFetchImplementation","makeFetchTransport","nativeFetch","pendingBodySize","pendingCount","requestSize","requestOptions","XHR_READYSTATE_DONE","makeXHRTransport","xhr","UNKNOWN_FUNCTION","CHROME_PRIORITY","WINJS_PRIORITY","GECKO_PRIORITY","createFrame","lineno","colno","chromeRegex","chromeEvalRegex","chromeStackParserFn","subMatch","extractSafariExtensionDetails","chromeStackLineParser","geckoREgex","geckoEvalRegex","gecko","geckoStackLineParser","winjsRegex","winjs","winjsStackLineParser","defaultStackLineParsers","defaultStackParser","isSafariExtension","isSafariWebExtension","MAX_ALLOWED_STRING_LENGTH","_breadcrumbsIntegration","_options","_getConsoleBreadcrumbHandler","_getDomBreadcrumbHandler","_getXhrBreadcrumbHandler","_getFetchBreadcrumbHandler","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","breadcrumbsIntegration","dom","componentName","element","_isEvent","endTimestamp","status_code","body","parsedLoc","parsedFrom","parsedTo","_dedupeIntegration","previousEvent","currentEvent","dedupeIntegration","_isSameMessageEvent","_isSameExceptionEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","previousException","_getExceptionFromEvent","currentException","currentFrames","_getFramesFromEvent","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","_globalHandlersIntegration","_installGlobalOnErrorHandler","globalHandlerLog","_installGlobalOnUnhandledRejectionHandler","globalHandlersIntegration","getOptions","_eventFromIncompleteOnError","_enhanceEventWithInitialFrame","_getUnhandledRejectionError","_eventFromRejectionWithPrimitive","ERROR_TYPES_RE","ev","ev0","ev0s","ev0sf","_httpContextIntegration","referrer","httpContextIntegration","DEFAULT_KEY","DEFAULT_LIMIT","_linkedErrorsIntegration","linkedErrorsIntegration","DEFAULT_EVENT_TARGET","_browserApiErrorsIntegration","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","browserApiErrorsIntegration","originalCallback","wrapOptions","globalObject","eventName","wrappedEventHandler","originalEventHandler","getDefaultIntegrations","init","startSessionTracking","showReportDialog","script","onClose","reportDialogClosedMessageHandler","injectionPoint","byteToHex","unsafeStringify","rnds8","rng","v4","_v4","rnds","generateUUID","uuidv4","getObjectFromStorage","saveToStorage","getFromStorage","getObjectFromSession","saveToSession","getFromSession","removeFromSession","setCookie","expTime","domain","expires","getCookie","ca","deleteCookie","storageAvailable","storage","_frontSessionId","SessionStorageKey","FRONT_SESSION_ID_HEADER","initFrontSessionId","getFrontSessionId","_userData","_loggerConfig","_Logger","Sentry.getCurrentHub","config","Sentry.init","Sentry.setTag","detail","Sentry.withScope","Sentry.captureMessage","Sentry.showReportDialog","Sentry.captureException","info","prefillReportDialogData","shouldRetryIfNotLoadedYet","nameElem","emailElem","idElem","userContext","userData","Sentry.configureScope","proContext","proData","restaurantContext","restaurantData","Sentry.lastEventId","__publicField","Logger","createSimpleSelector","getState","formatData","dataState","dataJs","actionData","DEFAULT_STATE","createSimpleReducer","actionType","STOP_PROPAGATION","createMiddleware","actionsToHandleParam","actionsToHandle","toHandle","actionToHandle","createSelectorsPerObject","getProp","listObject","symbolObservablePonyfill","ponyfill","randomString","ActionTypes","createStore","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","subscribe","isSubscribed","replaceReducer","nextReducer","observable","outerSubscribe","observer","observeState","unsubscribe","$$observable","getUndefinedStateErrorMessage","actionDescription","assertReducerShape","reducers","combineReducers","reducerKeys","finalReducers","finalReducerKeys","shapeAssertionError","hasChanged","_i","previousStateForKey","nextStateForKey","errorMessage","bindActionCreator","actionCreator","bindActionCreators","actionCreators","boundActionCreators","_objectSpread","ownKeys","sym","compose","applyMiddleware","middlewares","_dispatch","middlewareAPI","chain","middleware","I18nFetchingLocale","translationsContext","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","__vite_glob_0_4","__vite_glob_0_5","__vite_glob_0_6","__vite_glob_0_7","__vite_glob_0_8","__vite_glob_0_9","__vite_glob_0_10","__vite_glob_0_11","__vite_glob_0_12","__vite_glob_0_13","__vite_glob_0_14","__vite_glob_0_15","__vite_glob_0_16","__vite_glob_0_17","__vite_glob_0_18","__vite_glob_0_19","loadTranslationFile","locale","appName","loadTranslationFileForApp","fileKey","retrieveMessages","languageParam","labels","CHOOSE_LOCALE","RETRIEVE_MESSAGES_LIMIT","baseSlice","_baseSlice","castSlice","_castSlice","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","reHasUnicode","hasUnicode","_hasUnicode","asciiToArray","_asciiToArray","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","unicodeToArray","_unicodeToArray","stringToArray","_stringToArray","createCaseFirst","methodName","strSymbols","chr","trailing","_createCaseFirst","upperFirst","upperFirst_1","capitalize","capitalize_1","localeEquals","localeA","localeB","getForLocale","localesData","localeData","StorageItem","saveLocaleToStorage","language","getLocaleFromStorage","pad","int","bool","debounce","wait","immediate","do_nothing","monthToStr","monthNumber","shorthand","revFormat","dateObj","monthName","hour","day","amPM","shortMonth","seconds","unixSeconds","weekNum","weekNumber","year","ISODate","minutes","month","tokenRegex","formats","date","english","nth","createDateFormatter","_ref$config","defaults","_ref$l10n","l10n","frmt","overrideLocale","createDateParser","_ref2$config","_ref2$l10n","givenFormat","timeless","customLocale","parsedDate","date_orig","datestr","matched","ops","matchIndex","regexStr","token","isBackSlash","escaped","_ref3","compareDates","date1","date2","getWeek","givenDate","week1","isBetween","ts","ts1","ts2","HOOKS","toggleClass","createElement","content","clearNode","findParent","createNumberInput","inputClassName","opts","numInput","arrowUp","arrowDown","_loop","DEBOUNCED_CHANGE_MS","FlatpickrInstance","instanceConfig","self","flatpickr","bind","setHoursFromDate","positionCalendar","changeMonth","changeYear","clear","close","destroy","isEnabled","jumpToDate","open","redraw","setDate","toggle","setupHelperFunctions","yr","parseConfig","setupLocale","setupInputs","setupDates","build","bindEvents","updateValue","setCalendarWidth","isSafari","triggerEvent","bindToInstance","daysWidth","updateTime","timeWrapper","prevValue","setHoursFromInputs","ampm2military","military2ampm","hours","limitMinHours","limitMaxHours","maxTime","minTime","setHours","setDefaultHours","min_hr","min_minutes","max_hr","max_minutes","onYearInput","onClick","triggerChange","setupMobile","debouncedResize","onResize","onMouseOver","onKeyDown","documentClick","onMonthNavClick","selectDate","selText","timeIncrement","jumpDate","jumpTo","incrementNumInput","inputElem","createEvent","buildMonthNav","_buildWeeks","buildWeeks","weekWrapper","weekNumbers","buildWeekdays","buildDays","buildTime","customAppend","createDay","dayNumber","dateIsEnabled","dayElement","isDateSelected","isDateInRange","focusOnDayElem","targetNode","getFirstAvailableDay","startMonth","endMonth","startIndex","endIndex","getNextAvailableDay","givenMonth","loopDelta","numMonthDays","focusOnDay","dayFocused","isInView","startElem","buildMonthDays","firstOfMonth","prevMonthDays","daysInMonth","days","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayIndex","dayNum","dayContainer","frag","buildMonth","container","monthNavFragment","monthElement","yearInput","yearElement","currentMonth","buildMonths","updateNavigationCurrentMonth","hourInput","minuteInput","secondInput","updateWeekdays","firstDayOfWeek","weekdays","is_offset","triggerChangeEvent","isCalendarElem","isCalendarElement","isInput","lostFocus","isIgnored","newYear","newYearNum","isNewYear","dateToCheck","parsed","allowInput","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","_delta","elems","hoverDate","initialDate","rangeStartDate","rangeEndDate","lastDate","containsDisabled","minRange","maxRange","t","prevMonth","dayElem","outOfRange","_ret","positionElement","wasOpen","minMaxDateSetter","inverseDateObj","boolOpts","userConfig","formats$$1","dates","parseDateRules","timeMode","minMaxTimeSetter","pluginConf","customPositionElement","calendarHeight","child","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","showOnTop","rightMost","isSelectable","selectedDate","shouldChangeMonth","selectedIndex","single","range","CALLBACKS","option","setSelectedDate","inputDate","rule","preloadedDate","inputType","hooks","getDateStr","dObj","isPrevMonth","isNextMonth","isKeyDown","min","curValue","isHourElem","isMinuteElem","_flatpickr","nodeList","instances","QUERY_PARAM_LOCALE","getDefaultBrowserLocale","DEFAULT_OPTIONS","_locale","_texts","_polyglot","Polyglot","getPolyglot","setPolyglot","polyglot","getLanguageWithoutRegionCode","getCurrentLanguageWithoutRegionCode","isSupportedLocale","supportedLocale","getCurrentSupportedLanguage","getDefaultLocale","queryLocale","storageLocale","configureI18n","setLocale","setTexts","apiConsumerTexts","restaurantCustomTexts","optionsFR","moment","optionsDE","getLocale","getCountryForLocale","getCountryCodeForLocale","countryCode","trWithLocale","useKeyIfNotFound","text","smartCount","singular","plural","paramKey","placeholder","tr","trOptional","isFetchingI18nPhrases","getI18nPhrases","phrases","baseClamp","lower","upper","_baseClamp","startsWith","position","startsWith_1","getForCurrentLocale","locales","currentLanguage","defaultLanguage","DEFAULT","i18nReducer","retrieveCount","negate","negate_1","baseSet","_baseSet","basePickBy","paths","_basePickBy","pickBy","pickBy_1","omitBy","omitBy_1","GlobalErrors","Error","mergeHeaders","headersBase","headersToMerge","headersToMergeKey","headerKey","ApiError","code","formatEndpoint","formattedEnpoint","template","ApiManager","headersParam","optionsHeadersMiddleware","previousRequestOptions","success","failure","fetchRequestData","timeouts","contentType","apiError","newRequestOptions","localizedMessage","errorHandler","foundLocalizedMessage","globalLocalizedMessage","errorHandlerFuncResult","defaultUrl","retry","isExtern","otherOptions","finalUrl","defaultHeaders","simulateHeader","defaultOptions","finalOptions","formData","_apiManagerInstance","Events","EventManager","events","EventManagerInstance","SendEventContainer","React","nextProps","PropTypes","gtag","_window","_default","smallWords","toTitleCase","title","mightBeEmail","redacted","redactEmail","titleCase","redactingEmail","_str","_gtag","_format","_excluded","_excluded2","_excluded3","_excluded4","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","enumerableOnly","symbols","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","minLen","arr2","_arr","_n","_d","_s","_e","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_createClass","protoProps","staticProps","GA4","_this","GA_MEASUREMENT_ID","nonce","gaOptions","mapFields","gtagOptions","initConfigs","_options$legacyDimens","legacyDimensionMetric","_options$testMode","testMode","mergedGtagOptions","queues","queue","fieldsObject","eventCategory","eventAction","eventLabel","eventValue","_args$","timingCategory","timingVar","timingValue","timingLabel","page","_this$_toGtagOptions","_len3","_key3","_args$2","_len4","_key4","hitType","_len5","_key5","command","_len6","_key6","_len7","_key7","readyCallback","clientId","optionsOrName","label","nonInteraction","fieldObject","pathTrim","hitCallback","safetyCallbackCalled","safetyCallback","clearableCallbackForGA","_ga","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","cacheBabelInterop","cacheNodeInterop","hasPropertyDescriptor","desc","ReactGAImplementation","CONSENT_KEY","ConsentChoice","SIX_MONTHS_MS","getConsent","setConsent","choice","cleanUrls","_isInitialized","hasConsented","sendCheckoutProgress","stepNumber","ReactGA","sendCheckoutOption","optionName","optionValue","sendViewItem","formattedItem","sendAddToCart","sendRemoveFromCart","sendViewCart","formattedItems","sendCartSubmitted","sendLogin","sendAddDeliveryInfo","sendAddPaymentInfo","paymentMode","sendPaymentSucceeded","transactionId","monetaryValue","currency","sendPaymentSubmitted","sendEvent","sendPageView","handleInit","override","indicateDefaultConsentForGA","indicateConsentForGA","consentChoice","ga4ConsentValue","deleteExistingGACookies","getRootDomain","gaCookies","cookie","cookieName","initializeAnalytics","appOptions","appConfig","consent","KEY_PREFIX","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","DEFAULT_VERSION","autoMergeLevel1","inboundState","originalState","reducedState","newState","createPersistoid","blacklist","whitelist","transforms","throttle","storageKey","serialize","defaultSerialize","lastState","stagedState","keysToProcess","timeIterator","writePromise","update","passWhitelistBlacklist","processNextKey","endState","subState","transformer","writeStagedState","onWriteFail","getStoredState","deserialize","defaultDeserialize","rawState","serial","purgeStoredState","warnIfRemoveError","DEFAULT_TIMEOUT","persistReducer","baseReducer","stateReconciler","defaultGetStoredState","_persistoid","_purge","_paused","conditionalUpdate","_persist","restState","_sealed","_rehydrate","restoredState","migrate","migratedState","migrateErr","reconciledRest","_newState","persistorReducer","firstIndex","persistStore","cb","_pStore","register","rehydrate","rehydrateAction","persistor","purgeResult","flushResult","createTransform","inbound","outbound","whitelistBlacklistCheck","fullState","getStorage_1","getStorage","noopStorage","hasStorage","storageType","testKey","createWebStorage_1","createWebStorage","_getStorage","_getStorage2","_createWebStorage","_createWebStorage2","hardSet_1","hardSet","pathGetter_1","pathGetter","getPaths","pathString","jsan","utils","flags","customToString","comma","WMap","cycle","decycle","replacer","noCircularOption","withRefs","derez","_value","nu","symbolKey","keyString","foundPath","parentPath","nextPath","$","rez","lib","space","decycled","reviver","needsRetrocycle","mark","transformMethod","extract","refer","refs","r","immutable","customReplacer","customReviver","immutableValue","stringify","parse","immutableTransform","outboundState","ReactReduxContext","defaultNoopBatch","batch","setBatch","newBatch","getBatch","CLEARED","nullListeners","createListenerCollection","Subscription","parentSub","_proto","Provider","children","contextValue","useMemo","subscription","previousState","useEffect","Context","isHopefullyDomEnvironment","useIsomorphicLayoutEffect","useLayoutEffect","EMPTY_ARRAY","NO_SUBSCRIPTION_ARRAY","storeStateUpdatesReducer","updateCount","initStateUpdates","connectAdvanced","selectorFactory","_ref2$getDisplayName","getDisplayName","_ref2$methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","shouldHandleStateChanges","_ref2$storeKey","storeKey","_ref2$withRef","withRef","_ref2$forwardRef","forwardRef","_ref2$context","connectOptions","customStoreWarningMessage","WrappedComponent","wrappedComponentName","displayName","selectorFactoryOptions","pure","createChildSelector","usePureOnlyMemo","ConnectFunction","_useMemo","forwardedRef","wrapperProps","propsContext","ContextToUse","isContextConsumer","useContext","didStoreComeFromProps","didStoreComeFromContext","childPropsSelector","_useMemo2","notifyNestedSubs","overriddenContextValue","_useReducer","useReducer","_useReducer$","previousStateUpdateResult","forceComponentUpdateDispatch","lastChildProps","useRef","lastWrapperProps","childPropsFromStoreUpdate","renderIsScheduled","actualChildProps","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","newChildProps","unsubscribeWrapper","renderedWrappedComponent","renderedChild","Connect","forwarded","hoistStatics","hasOwn","y","shallowEqual","objA","objB","keysA","keysB","wrapMapToPropsConstant","getConstant","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","proxy","stateOrDispatch","ownProps","whenMapDispatchToPropsIsFunction","mapDispatchToProps","whenMapDispatchToPropsIsMissing","whenMapDispatchToPropsIsObject","defaultMapDispatchToPropsFactories","whenMapStateToPropsIsFunction","mapStateToProps","whenMapStateToPropsIsMissing","defaultMapStateToPropsFactories","defaultMergeProps","stateProps","dispatchProps","wrapMergePropsFunc","mergeProps","areMergedPropsEqual","hasRunOnce","mergedProps","nextMergedProps","whenMergePropsIsFunction","whenMergePropsIsOmitted","defaultMergePropsFactories","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleFirstCall","firstState","firstOwnProps","handleNewPropsAndNewState","handleNewProps","handleNewState","nextStateProps","statePropsChanged","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","factories","strictEqual","createConnect","_temp","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","_ref$selectorFactory","defaultSelectorFactory","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","connect","useReduxContext","createStoreHook","useDefaultReduxContext","_useReduxContext","useStore","createDispatchHook","useDefaultStore","useDispatch","refEquality","useSelectorWithStoreAndSubscription","equalityFn","contextSub","forceRender","latestSubscriptionCallbackError","latestSelector","latestSelectedState","selectedState","newSelectedState","createSelectorHook","useSelector","MAX_SIGNED_31_BIT_INT","commonjsGlobal","getUniqueId","objectIs","createEventEmitter","changedBits","onlyChild","createReactContext","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","_Component","_inheritsLoose","oldValue","Component","Consumer","_Component2","_this2","observedBits","_proto2","addLeadingSlash","stripLeadingSlash","stripBasename","stripTrailingSlash","parsePath","createPath","createLocation","canUseDOM","getConfirmation","supportsPopStateOnHashChange","supportsGoWithoutReloadUsingHash","isExtraneousPopstateEvent","_props","HashChangeEvent$1","HashPathCoders","stripHash","getHashPath","pushHashPath","replaceHashPath","createHashHistory","_props$hashType","hashType","_HashPathCoders$hashT","encodePath","decodePath","ignorePath","locationsAreEqual$$1","encodedPath","prevLocation","allPaths","baseTag","hashChanged","nextPaths","clamp","lowerBound","upperBound","createMemoryHistory","_props$initialEntries","initialEntries","_props$initialIndex","initialIndex","nextIndex","nextEntries","canGo","isarray","pathToRegexpModule","pathToRegexp","compile","tokensToFunction","tokensToRegExp","PATH_REGEXP","tokens","defaultDelimiter","capture","group","modifier","asterisk","partial","repeat","optional","prevText","escapeGroup","restrictBacktrack","escapeString","encodeURIComponentPretty","encodeAsterisk","encode","segment","j","attachKeys","re","regexpToRegexp","arrayToRegexp","stringToRegexp","strict","route","endsWithDelimiter","createNamedContext","createContext","Router","_React$Component","cache$1","cacheLimit$1","cacheCount$1","compilePath$1","cacheKey","pathCache","matchPath","_options$exact","exact","_options$strict","_options$sensitive","sensitive","_compilePath","isExact","isEmptyChildren","Route","context$$1","_this$props","render","addBasename","createURL","staticHandler","Switch","LOCATION_CHANGE","onLocationChanged","isFirstRendering","CALL_HISTORY_METHOD","updateLocation","routerActions","createSelectors","structure","getIn","toJS","isRouter","getRouter","router","getLocation","getAction","getSearch","getHash","createMatchSelector","lastPathname","lastMatch","_possibleConstructorReturn","call","_assertThisInitialized","_getPrototypeOf","_inherits","subClass","_setPrototypeOf","createConnectedRouter","_createSelectors","ConnectedRouter","_PureComponent","_getLocation","pathnameInStore","searchInStore","hashInStore","_history$location","pathnameInHistory","searchInHistory","hashInHistory","handleLocationChange","PureComponent","_onLocationChanged","ConnectedRouterWithContext","createConnectRouter","createRouterReducer","initialRouterState","routerMiddleware","_action$payload","plainStructure","connectRouter","UiAction","updateUI","getUi","generateKeyForComponent","UiContainer","ui","uiState","otherProps","jsx","UiContainer$1","uiReducer","createMuiTheme","muiCreateTheme","CHANGE_CURRENT_THEME","changeCurrentTheme","newCurrentTheme","currentTheme","theme","getThemeOnState","getCurrentThemeOnState","getCurrentTheme","_theme","registerTheme","getRegisteredTheme","getRegisteredMuiTheme","last_1","parent","_parent","baseUnset","_baseUnset","basePullAt","indexes","previous","_basePullAt","remove_1","ModalType","DialogAction","createShowDialogAction","dialogType","dialogProps","createHideDialogAction","hideDialogAction","displayDeleteCartDialog","displayLimitedStockItemsDialog","limitedStockItems","limitedStockMessageFallback","hideLimitedStockItemsDialog","displayCartDiffItemsDialog","hideCartModifierDialog","displayInvalidVouchersDialog","_dialogs","registerDialogs","dialogs","getDialogViewForType","dialog","getDialogState","getDialog","dialogState","DialogRoot","SpecificModal","generateDialog","dialogContent","Dialog","DialogWithStyles","withStyles","DialogRoot$1","isEqual","isEqual_1","Query","forIn","forIn_1","authRequired","disable","pair","SdkRoutingEnum","_routes","registerRoutes","routes","getRoutes","getConfigForRoute","getRoute","routeDefinition","_history","registerHistory","getHistory","_routingEnum","registerRoutingEnum","routingEnum","getRoutingEnum","routeName","generatePathWithParams","finalQueries","queryParamsToKeep","currentUrlQueries","queryParam","currentValueOnUrl","alreadySet","handleStringRoute","redirectToExternal","relativePath","redirectTo","createRedirectToAction","replaceWith","reloadTo","openExternalLink","isRedirectingToExternal","setIsRedirectingToExternal","getIsRedirectingToExternal","updatePageQueries","currentQuery","finalValue","goBackAction","isModifiedEvent","Link","innerRef","__RouterContext","newTab","anchor","ReactRouterLink","MuiLink","RoutingContainer","RoutingContainer$1","dialogMiddleware","dialogMiddlewares","ux","DEFAULT_FORM_OPTIONS","_forms","registerForms","forms","getFormsDefaultState","defaultState","form","getForm","formType","getFormOptions","getFormCustomActions","customActions","getFormReducer","getFormModifier","getValidator","FormAction","initForm","updateForm","resetForm","updateFormOptions","DataCatcherType","_dataCatcherSettings","setDataCatcherSettings","dataCatcherSettings","getDataCatcherSettings","getDataCatcherSettingForType","setting","dataCatcherType","isDataCatcherEnabledForType","FormType","DataCatcherAction","dataCatcherFormReducer","FORM_CUSTOM_ACTION","blackList","EMAIL_REGEXP","isValidEmail","countryCodes","MIN_LENGHT_FOR_NUMBER","formatPhoneNumberAsYouType","iso","asYouType","AsYouType","parsePhoneNumberFromString","ParseError","formatPhoneNumber","phoneNumber","isValidPhoneNumber","isPhoneNotEmpty","phoneAsStringWithPrefix","getCountryDialCodeFromNumber","cleanForApi","cleanPhoneNumber","getCountryCodes","getCountryFromCountryCode","country","getCountryDialCodeFromCountryCode","notEmpty","isTrue","isGreaterThan","orEqual","isValidEmailUtils","isValidPhone","phone","isPhoneNotEmptyUtils","_isPlaceholder","_curry1","f1","_identity","_curry2","f2","_b","_a","_isArray","_isTransformer","_dispatchable","methodNames","xf","transducer","_map","functor","_isString","_isArrayLike","_xwrap","XWrap","_arity","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","thisObj","_reduce","_arrayReduce","_iterableReduce","_methodReduce","symIterator","_xfBase","_xmap","XMap","_curryN","received","combined","argsIdx","combinedIdx","curryN","_has","_isArguments","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","contains","nIdx","ks","checkArgsLength","_curry3","f3","_c","reduce","curry","_filter","_isObject","_xfilter","XFilter","filter","pred","filterable","_arrayFromIterator","_functionName","identical","_equals","stackA","stackB","equals","_reduced","_xall","XAll","all","_identity2","_map2","_reduce2","_curry","_filter2","_equals2","_all","_all2","sliceIterator","successFn","failFn","valid","runPredicate","inputs","field","errorMsg","validate","spec","inputFn","inputObj","predicates","rules","spected","each","trMessage","validateValue","isValid","childValue","childName","newChildValue","formatValidator","validation","validator","DEFAULT_VALIDATE","getFormState","getFormTypeData","getFormType","getValidatorSelector","makeGetFormDataNotFormatted","formState","makeGetFormData","getFormsDataArray","makeGetFormsData","formsData","formattedFormsData","makeGetFormOptions","formTypeData","makeGetFormErrors","formOptions","errors","fieldName","formErrors","makeGetFormsErrors","clsx","styles","ButtonFlat","inactive","raised","contained","classNames","Button","LoadingBlock","show","loadingLabel","CircularProgress","LoadingBlock$1","LoadingBlockWrapper","jsxs","LoadingBlockWrapper$1","FormButtons","submit","cancel","onSubmit","onReset","displayErrorDialog","setPrototypeOf","setStatic_1","setStatic","BaseComponent","setDisplayName_1","_setStatic","setDisplayName","getDisplayName_1","wrapDisplayName_1","_getDisplayName","wrapDisplayName","hocName","shouldUpdate_1","_inheritsLoose2","_react","shouldUpdate","test","ShouldUpdate","shallowEqual_1","_shallowEqual","pure_1","_shouldUpdate","hoc","NavigationClose","SvgIcon","CloseIcon","SnackbarContainer","autoHideDuration","withCloseAction","actions","IconButton","Snackbar","SnackbarError","DisplayMode","ErrorBlock$2","newMessage","mode","customElement","ErrorBlock","ErrorBlockComponent","isEqualWith","isEqualWith_1","union","arrays","union_1","formDataComparator","value1","value2","areFormDataLooselyEqual","obj1","obj2","cloneDeep","cloneDeep_1","FormContainer","defaultData","prevProps","propsToPass","makeMapStateToProps","getFormData","getFormErrors","formCustomActions","FormContainer$1","FormsContainer","formsErrors","getFormsData","getFormsErrors","FormsContainer$1","withForm","withForms","formTypes","DISABLE_FORM_DEV_DATA_QUERY_PARAM","createForm","validationRules","devData","finalDefaultData","finalDevData","disableDevData","dataModifier","formReducer","_searches","registerSearches","searches","searchType","getFormatter","formatter","getSearchApiCallFunc","apiCallFunc","SearchAction","initSearch","updateSearch","resetSearch","GetSearchListAction","getSearchAction","getSearchState","getSearchTypeData","getSearchType","makeGetSearchList","searchData","makeIsFetchingSearchList","makeGetSearchError","customOmitClone","_customOmitClone","flatten","flatten_1","flatRest","_flatRest","omit","omit_1","Search","searchError","TextField","InputAdornment","SearchIcon","Search$1","timeOutSearch","_SearchContainer","searchList","isFetchingSearchList","hideInput","SearchContainer","getSearchList","getSearchError","searchReducer","_statistics","registerStatisticsConfig","statistics","getGroupStatistics","statisticsGroupType","getStatistics","statisticsType","groupStatistics","getStatisticsApiCallFunc","GetStatisticsAction","getStatisticsAction","StatisticsAction","updateStatisticsOptions","initStatisticsConfig","TrendingUp","TrendingUp$1","capitalizeFirstLetter","stylesObject","TypographyCustom","align","skipColor","html","alignDefault","classNameCombined","dangerouslySetInnerHTML","TypographyCustom$1","withTheme","Graph","changeFilter","datasets","icon","filters","filtersState","isFetching","hasData","Paper","Typography","Tabs","Tab","getStatisticsState","getStatisticsGroupType","getStatisticsType","makeGetStatisticsGroupTypeData","statisticsState","groupType","makeGetStatisticsOptions","statisticsData","makeGetStatisticsConfig","makeGetStatisticsItems","groupStatisticsState","itemsState","makeIsFetchingStatistics","makeGetStatisticsError","StatisticsContainer","reload","hideTimeRange","isFetchingStatistics","errorStatistics","getStatisticsItems","getIsFetching","getError","getConfig","QueryParamType","StatisticsPeriod","statisticsOptionsAreEqual","optionsToCompare","getQueryParamsConfig","queryParamConfig","optionValueToCompare","getDefaultCustomValue","getPeriodDates","period","defaultCustomValue","StatisticsGroupContainer","dateRange","keysThatRunApiReload","periodDates","queryParamsConfig","urlOptions","MS_FORMAT","DATE_FORMAT_MS","MINUTE_AS_MS","HOUR_AS_MS","DAY_AS_MS","DELAY_TO_WARN_CLOSING_HOUR","fromMs","ms","anyToDate","getMs","millisecondsToMinutes","millisecondsToDays","getDayKey","dateParam","getDayIndexForKey","getI18nDayNameForKey","getI18nDayShortNameForKey","isSameDay","date1Param","date2Param","getHourFromMs","getMinuteFromMs","getMsFromHour","getMsFromMinute","minute","getHourAndMinuteFromMs","isToday","formatHour","shouldUseUtc","formatDate","todayWithHour","hourTimestamp","getDateWithHoursAndMinutes","diff","dateParam1","dateParam2","d1","getPmtDayIndex","hourMinuteTimestamp","CalendarMode","hooksToHandle","Calendar","selectedDates","dateStr","isUpdate","optionsKeys","defaultDate","nativeCeil","baseRange","_baseRange","createRange","_createRange","range_1","PopoverView","anchorEl","Popover","PopoverView$1","DialogView","DialogTitle","DialogContent","DialogView$1","ListChooserType","ViewType","Pagination","paging","onLoadMore","Pagination$1","convertColorToString","color","colorString","uintColorToHexadecimal","convertHexToRGB","extendedColor","decomposeColor","marker","fade","darken","coefficient","lighten","OptionSingle","viewType","selected","Radio","Option","optionRenderer","multiple","ListItem","Checkbox","Body","hasOptions","filteredOptions","onSelect","handleQueryChange","disableSearch","Body$1","Header","modules","installedModules","__webpack_require__","moduleId","getter","defineProperties","bitapRegexSearch","bitapSearch","patternAlphabet","Bitap","_ref$location","_ref$distance","distance","_ref$threshold","_ref$maxPatternLength","maxPatternLength","_ref$isCaseSensitive","isCaseSensitive","_ref$tokenSeparator","tokenSeparator","_ref$findAllMatches","findAllMatches","_ref$minMatchCharLeng","minMatchCharLength","_options2","deepValue","dotIndex","firstSegment","matchmask","matchedIndices","mask","SPECIAL_CHARS_REGEX","isMatch","matchesLen","_ref$errors","_ref$currentLocation","_ref$expectedLocation","expectedLocation","accuracy","proximity","bitapScore","textLen","currentThreshold","bestLocation","patternLen","matchMask","score","_score","lastBitArr","finalScore","binMax","binMin","binMid","_score3","finish","bitArr","charMatch","_score2","Fuse","_ref$caseSensitive","caseSensitive","_ref$id","_ref$keys","_ref$shouldSort","shouldSort","_ref$getFn","getFn","_ref$sortFn","sortFn","_ref$tokenize","tokenize","_ref$matchAllTokens","matchAllTokens","_ref$includeMatches","includeMatches","_ref$includeScore","includeScore","_ref$verbose","verbose","_prepareSearchers2","tokenSearchers","fullSearcher","_search2","weights","resultMap","keysLen","_ref2$arrayIndex","arrayIndex","_ref3$tokenSearchers","_ref3$fullSearcher","_ref3$resultMap","_ref3$results","averageScore","numTextMatches","mainSearchResult","words","scores","tokenSearcher","hasMatchInText","word","tokenSearchResult","scoresLen","_i2","checkTextMatches","existingResult","_i3","scoreLen","currScore","bestScore","weight","nScore","finalOutput","transformers","_console","showAsPopoverBreakpoints","Content$1","viewProps","Content","Content$2","withWidth","ContentClear","ContentClear$1","TextFieldSuffixType","TextFieldCustom","focus","suffixType","ClearIcon","prefixStyles","TextFieldCustomWithHOC","MultipleView","helperText","disabled","required","valueIconFormatter","valueFormatter","onDeleteValue","onOpen","emptyRender","alwaysDisplayAddButton","FormControl","InputLabel","Chip","ValueView","clearable","valueFormatterHandleNullValue","formattedValue","ValueView$1","EmptyValue","onClickOpen","ListChooser","valueToDelete","newValues","labelButton","disableFiltering","filteringWithContains","Day","onChange","Month","Year","minYear","maxYear","InlineDate","InlineDate$1","propDatesAreSame","getDateChangedErrorMsg","varName","_DateField","defaultDateIsSame","minDateIsSame","maxDateIsSame","renderValue","DateField","DateField$1","StatisticsOptionsModifierContainer","optionsChanged","optionsAreDefault","checkRequestId","reduceFunc","statisticsReducer","_reducers","registerEntities","entities","getEntities","PERSIST_EXPIRE_DEFAULT_KEY","PERSIST_EXPIRE_DELAY_DEFAULT_KEY","immutableStringify","createExpirationTransform","dateToUnix","getExpiredState","entity","absoluteExpiresAt","expiresAt","jsonState","expiredDate","isExpired","expiredAt","expireDate","loggingStorage","keySizes","stateKey","serializedState","persistConfig","configureRootReducer","reducerName","uxReducer","createStoreCustom","creators","createThunkMiddleware","extraArgument","thunk","crashReporter","UnauthorizedAction","unauthorized","callApi","schema","responseJsonContent","apiMiddleware","apiCall","actionWith","finalAction","requestType","successType","failureType","AuthMode","ACCESS_TOKEN_DELAY_REFRESH","ACCESS_TOKEN_DELAY_REFRESH_SOON","REFRESH_TOKEN_LIFETIME","INCOGNITO_TOKEN_LIFETIME","_clientId","getCookieKey","setClientId","saveAccessToken","removeAccessToken","getAuthCookie","getAuthorization","hasTokenExpired","expirationMoment","willTokenExpireSoon","_restaurantsGroupId","setRestaurantsGroupId","restaurantsGroupId","getUserLightCookieKey","getIncognitoCookieKey","saveUserLightCookie","saveIncognitoCookie","removeUserLight","removeIncognitoCookie","getUserLightCookie","getIncognitoCookie","asciiSize","_asciiSize","unicodeSize","_unicodeSize","stringSize","_stringSize","size_1","stopIterationValues","AppConfigPresets","containsStopIteration","_return","_obj","reduceAppConfigTexts","texts","recursiveCall","finalObject","formatTexts","_appConfig","setDefaultAppConfig","getDefaultAppConfig","mergeWith","mergeWith_1","mergeConfigObject","currentData","mergeAppConfigWithDefault","appConfigDefaultKeys","updatedConfig","_currency","setCurrency","getCurrencySymbol","getRoundAmountNumber","isValidCurrency","formatPriceWithCurrency","price","multipleOrUnknownCurrency","formatPrice","formatPercent","truncatePrice","createDeepFormatter","itemFormatter","getChildren","updateChildren","deepFormatter","formattedChildren","createFormatter","functions","funcRes","createListFormatter","listResult","createMapFormatter","mapObject","includes_1","createSubObjectFormatter","parentObject","CatalogItemType","CartModifierActionType","CartModifierTargetType","removeComplexCartModifier","cartModifiers","newCartModifiers","cartModifier","formatItemsCartModifiers","recursiveFormatSubcategoriesCartModifiers","formatCartModifier","formatCartModifiers","formatModifier","formatModifiers","FeeSettingStatus","FeeType","formatOrderFee","orderFee","formatOrderFees","formatOrderSettingsFee","feeSetting","formatOrderSettingsFees","generateFeesFromSettings","orderSettingsFees","orderMode","totalCartPrice","orderSettingsFee","filterModes","shouldBeApplied","fee","formatEntryPrice","formatEntry","formatEntries","formatTableNumber","check","formatTotal","formatCheck","getAsyncPaymentBrowserInfo","formatQuantity","quantityFormatted","formatItemPrice","formatItemsMap","payment","formatAmount","formatBrowserInfo","formatPayment","formatPaymentMade","paymentMade","getDistanceFromLatLon","lat1","lon1","lat2","lon2","R","dLat","deg2rad","dLon","deg","RestaurantStatus","getRestaurantStatusLabel","PspType","formatOpeningHours","openingHours","manufactureDelay","openingHour","formatOpeningHoursList","openingHoursArray","today","currentDayName","dayKeyName","getNextOpening","openingHoursList","maxNumberToCheck","formatRestaurantOpeningHours","delayAsHours","currentDay","nowToCompare","nextDay","formatOrderSettings","restaurant","Feature","PaymentType","isBitSet","flag","formatFeatures","getCountryNameForCode","getPspBoUrl","psp","formatPspShopUrl","pspRestaurantId","formatPspUserUrl","pspUserId","formatLegalRepresentative","legal","representative","address","formatBank","bank","formatLegal","formatAddress","formatDistance","latitude","longitude","sortByName","formatLogo","formatPicture","formatPsp","formatRestaurant","formatRestaurantsMap","formatRestaurantList","formatRestaurantsListData","Type","ThirdParty","getElement","address_components","propertyToReturn","firstOccurence","getAddressElementsFromGooglePlace","place","preciseStreetAddress","streetNumber","streetConcatenation","street","postCode","city","getAddressElementsFromFormattedAddress","formatted_address","mainComponents","getGoogleMapsUrl","zoom","useStyles","makeStyles","StatusChip","OrderMode","OrderStatus","PaymentFlowEnum","getOrderStatusLabel","getOrderStatusType","getOrderModeLabel","ORDER_MINIMUM_AMOUNT","OrderErrorCode","OrderPaymentStatus","getOrderPaymentStatusLabel","getOrderPaymentStatusType","CancellingParty","getCancellingPartyFormatted","cancellingParty","OrderItemTrackingType","formatAdmissionFee","admissionFee","formatAdmissionFeesData","admissionFees","formatAdmissionFees","formatSubsidy","subsidy","formatSubsidiesData","subsidies","formatSubsidies","formatUserAccountPaymentData","userAccountPayment","formatUserAccountPayment","formatThirdParty","formatOrderNumber","formatDates","dayText","dueDate","formatOrderMode","formatStatus","formatOrderRestaurant","formatPrices","ON_SITE_PAYMENT_ID","irlPayment","calculateIsFullyPaid","formatAmountFromAccount","formatGrantAmount","formatSource","formatOrderUser","formatItems","formatOptionValue","formatOption","formatProduct","product","formatPart","formatMenu","menu","formatDeliveryAddress","formatOrder","formatOrders","PagerCaptureModes","formatOrderModes","formattedDatas","formatOrderAppConfig","formatAppConfig","formatAppConfigPreset","getAppConfigState","appConfigState","isFetchingAppConfig","getAppConfigError","getAppConfigData","appConfigData","getAppConfig","getOauthClient","auth","oauth","getMergedConfig","typeConfig","getAppTexts","getUserSettings","getFrontSettings","getOrderSettings","getSecuritySettings","getAppConfigPreset","ApiEndpoints","AuthErrors","AuthApi","username","password","client_id","client_secret","refresh_token","UserErrors","transformUserFormDataToBody","UserApi","rGroupId","nextCursor","loadAccounts","AuthUserAction","authenticateUser","clientSecret","LOGOUT_ACTION","logout","SAVE_RAW_ACCESS_TOKEN_ACTION","saveRawAccessToken","CLEAN_AUTH_DATA","cleanAuthData","RefreshTokenFlowAction","retryApiCallAction","actionToRetry","RefreshAction","refreshAction","refreshToken","oauthClient","refreshActionDone","getAuthData","getAuthError","authData","isFetchingAuth","isRefreshingOauthToken","getAuth","haveAuthCredentials","getRefreshToken","authCookie","AppConfigApi","GetAppConfigAction","fetchAppConfig","compose_1","SET_API_GENERIC_INVALID","setApiGenericInvalid","API_INVALID_APP_TOKEN_ERROR_CODE","API_INVALID_GEOLOCATION_ERROR_CODE","API_INVALID_ON_SITE_SECURITY","APP_TOKEN_QUERY_PARAM","isAppSecurityError","getAppTokenCodeOnUrl","catchApiGenericError","apiGenericMiddleware","appSecurityMiddlewares","handleSetGenericInvalid","appSecurityReducer","IconError","Loading","AppConfigContainer","AppConfigWrappedComponent","AppConfigContainer$1","withAppConfig","createMuiColor","palette","createMuiTextColor","currentConfig","newConfig","createMuiValueForPalette","createMuiPalette","defaultPalette","paletteValue","paletteKey","createMuiThemeWithPmtRestaurantColors","colors","newPalette","createMuiThemeWithPmtRGroupColors","textsForCurrentLocale","textForLocale","formatCustomTexts","customTextsSelectors","getCustomTextsData","customTexts","getAppConfigSuccess","frontSettings","newTheme","appConfigMiddlewares","appConfigReducer","retryApiCallMiddleware","refreshTokenMiddlewares","notifyTokenChanged","authMiddleware","redirectToParam","refreshMiddlewareSuccess","refreshMiddlewareFailure","logoutMiddleware","saveRawAccessTokenMiddleware","getAppConfigSuccessMiddleware","settings","authMiddlewares","getDefaultState","authReducer","unauthorizedMiddleware","currentUrl","authenticationMode","getAuthProData","authProData","authProState","getAuthRestaurantData","authRestaurantData","authRestaurantState","apiConsumer","restaurantId","_isRefreshingToken","_actions","clearAttemptRefresh","defaultIsRefreshCall","requestNewAccessToken","postRefreshToken","queueActionForRefreshToken","_refreshPromise","refreshActionCreator","refreshPromise","requestNewAccessTokenResponse","attemptRefresh","failureAction","isRefreshCall","defaultRefreshActionCreator","accessToken","handleAccessToken","handleExpiredToken","expiration","getFinalApiUrl","requestUrl","authenticationSettings","getAuthorizationFromModeAndCookies","getOauthToken","getOauthBearerToken","requestConfigurationMiddleware","authorization","chooseLocaleMiddleware","u","N","w","S","F","P","D","E","A","O","C","L","T","M","generateMiddlewares","appMiddlewares","configureStore","reduxDevtoolsExtension","configureStoreProd","CHUNK_ERROR_RELOAD_KEY","isChunkLoadError","handleChunkError","unregisterServiceWorker","registration","PersistGate","_persistor$getState","bootstrapped","spacing","unit","ErrorOccurredView","sentryId","Divider","Grid","ErrorOccurredView$1","ErrorBoundary","errorView","Layout","ThemeDefault","DevThemePage","CardBasicActionType","EditorModeEdit","EditorModeEdit$1","getCardBasicActionType","EditorModeEditIcon","Actions","CardBasic","Card","CardHeader","CardContent","CardBasic$1","CardPostIt","CardPostIt$1","CardSection","ariaLabel","animationDelay","CardSection$1","CardItem","SocialPerson","SocialPerson$1","LogoGrey","LogoGrey$1","getComponents","calendarPart","Allergen","CountryChooser","Diet","Gender","Celery","Celery$1","Cheese","Cheese$1","Crab","Crab$1","Egg","Egg$1","Fish","Fish$1","Lupine","Lupine$1","Milk","Milk$1","Mustard","Mustard$1","Nut","Nut$1","Peanut","Peanut$1","Shellfish","Shellfish$1","Sesame","Sesame$1","Soy","Soy$1","Sulphites","Sulphites$1","Wheat","WheatIcon","Tartrazine","Tartrazine$1","Rice","Rice$1","RedMeat","RedMeat$1","PoultryMeat","PoultryMeat$1","Fruit","Fruit$1","Corn","Corn$1","Garlic","Garlic$1","Balsam","Balsam$1","Buckwheat","Buckwheat$1","DEFAULT_BIRTHDATE","getGenderLabel","gender","getDietLabel","diet","getAllergenLabel","allergen","getAllergenIcon","getAllergensOptions","DEFAULT_DIETARY_PREFERENCES","AllergenChooser","limitTags","allergensOptions","Autocomplete","Fragment","getTagProps","allergens","listChooserPart","NavigationCheck","CheckIcon","StepIcon","EditIcon","StepAvatar","isCurrent","Avatar","Step","isLast","Step$2","StepContent","Stepper","Stepper$1","AccountCardDetails","AccountCardDetails$1","stepperPart","RENDER_TYPE","Resizer","renderType","FormGroup","FormControlLabel","Resizer$1","ComponentList","componentList","ComponentList$1","SectionList","sectionList","section","SectionList$1","StyleGuidePage","colorComponents","StyleguidePage","Test","devRoutes","createRouteContent","locationFinal","generateRoute","configureRoutes","routesToGenerate","lazy","__vitePreload","index$1","App","Suspense","RoutingEnum","HomePage","HomePage$1","OrderPluginAction","selectDay","selectSlot","slot","resetDueDate","setDueDateAsap","resetDayAndSlot","setTableNumber","tableNumber","disableTableNumberModification","setPosCheckId","posCheckId","setFrom","setDeliveryAddress","complement","resetDeliveryAddress","setDeliveryAddressError","setSelectedCategory","setFirstSelectedCategory","firstSelectedCategory","resetSelectedCategory","setParentCategories","parentCategories","setConfigurationError","configurationError","goBackToStoreLocator","redirectToCatalogPage","redirectToCart","resetOrderPlugin","showProductDialog","hideProductDialog","showUnavailableDueDateDialog","hideUnavailableDueDateDialog","showOrderModeDisabledDialog","hideOrderModeDisabledDialog","showRestaurantDisabledDialog","hideRestaurantDisabledDialog","showRestaurantClosedDialog","orderContext","hideRestaurantClosedDialog","showTableNotFoundDialog","hideTableNotFoundDialog","postOrderPreviewAndPostOrderIfSucceeded","saveAlcoholApproval","forgetAlcoholApproval","showExpiredSessionDialog","hideExpiredSessionDialog","UserAddressApi","addressId","FetchUserAddressListAction","fetchUserAddressList","PostUserAddressAction","postUserAddress","EditUserAddressAction","editUserAddress","DeleteUserAddressAction","deleteUserAddress","formatInRangeFlag","formatUserAddress","formatUserAddressList","getUserAddress","getUserAddressListOnProps","getOriginOnProps","getRangeOnProps","isFetchingUserAddressList","userAddress","getUserAddressList","userAddressList","makeGetUserAddressListInRange","makeGetUserAddressListOutOfRange","isFetchingUserAddressPost","getCreatedUserAddress","isFetchingUserAddressEdit","isFetchingUserAddressDelete","UserAddressListContainer","getUserAddressListInRange","getUserAddressListOutOfRange","UserAddressListContainer$1","AUTHORIZED_ADDRESS_TYPES","isAddressTypeValid","userAddressReducer","stateDataWhenAdd","stateDataWhenEdit","userAddressListEdited","userAddressListCleaned","CheckErrors","CheckApi","checkId","checkIdTarget","posCodeToMerge","GetCheckWithTableNumberAction","fetchCheckWithTableNumber","CheckAction","GetCheckWithPosCheckIdAction","fetchCheckWithPosCheckId","GetCheckAction","GetRefreshCheckAction","fetchCheck","GetCheckWithCodeAction","fetchCheckWithCode","MergeCheckWithCodeAction","getCheckData","getEntries","getCheckError","checkData","isFetchingCheck","getCheck","getIdOnProps","CHECK_DATA","checkReducer","DEFAULT_GEOLOCATION_ID","GeolocationType","getGeolocation","getGeolocationIdOnProps","getGeolocationIsFetching","geolocationData","geolocationIdOnProps","geolocation","getGeolocationOrigin","getGeolocationAddress","getGeolocationComputeAddress","computeAdress","getGeolocationComputeAddressExtra","computeAddressExtra","getGeolocationCoordinates","geolocationForReal","getGeolocationError","getRestaurantState","getRestaurantIdOnProps","getRestaurantListData","restaurantState","restaurantsListData","getRestaurantList","restaurantListData","restaurantList","restaurants","getAllRestaurants","makeIsFetchingRestaurant","makeGetRestaurantError","restaurantError","makeGetRestaurant","makeGetRestaurantFromRestaurantList","restaurantsData","restaurantsDataMap","restaurantsMap","restaurantPost","isFetchingRestaurantList","getRestaurantListError","OrderSettingsAction","setOrderSettings","orderSettings","resetOrderSettings","PaymentStatus","TipsValueType","PaymentMethodsAllowed","DeliveryTimeType","formatPaymentMethodsAllowed","orderModeSettings","formatSlots","slots","selectedSlot","getModeOnProps","getOrderSettingsData","makeGetCurrentOrderSettings","orderSettingsData","currentOrderSettings","getOpeningHours","getOrderSettingsForMode","onSiteSettings","takeAwaySettings","deliverySettings","getMaxTimeAheadAsDaysOnMode","getMaxTimeAheadAsDays","modeSettings","getDeliveryTime","deliveryDistanceTime","uniq","uniq_1","getForDay","daysOfWeek","generateHoursForDay","deliveryTime","openingHoursForDay","intervals","generateIntervals","finalHours","getNextInterval","time","minutesFromTime","nextInterval","minuteInterval","intervalAsMs","isSlotInOpeningHours","isInOpeningHours","getNextClosingHour","hoursInMs","closingHour","generateSlotsForDate","isOpen","finalSlots","getSlotsForDay","dateWithSlot","generateSlotsForNextDays","startDay","numberOfDays","slotsDates","slotDate","getRestaurantAvailabilities","manufactureDelayAsDays","availabilities","filterObject","valueToExclude","filteredObject","RestaurantErrors","RestaurantApi","loadOrderSettings","restaurantIds","restaurantRequest","previousOptions","filteredQuery","GetRestaurantAction","fetchRestaurant","RefreshRestaurantAction","PostRestaurantAction","GetRestaurantListAction","fetchRestaurantList","useIP","resetRestaurantList","GetRestaurantListByGeoPtAction","fetchRestaurantListByGeoPt","RestaurantAction","setRestaurant","setOrderSettingsWhenHavingARestaurant","orderSettingsMiddlewares","orderSettingsReducer","formatVoucher","formatVouchers","formatOrderProperties","cartData","orderAppConfig","orderPreview","orderPreviewVerifications","total","voucher","formatPaymentProperties","formatOrderFrontProperties","formatOrderData","orderFrontProperties","itemListForApi","userMe","comment","formatOrderFrontData","GetUserMeAction","fetchUserMe","PutUserMeAction","updateProfile","UserMeActions","setUserMe","userAccount","formatExpirationDateAsHour","formatUserAccount","formatUserAccounts","formatUserUserAccounts","formatDiet","dietaryPreferences","formatAllergens","formatDietaryPreferences","formatAllowContact","marketing","formatMarketing","formatEmail","formatGender","formatBirthdate","formatUserDates","formatPhone","formatName","formatLocales","createDietaryIfNull","formatUser","getUserMeData","isFetchingUserMe","userMeData","getUserMe","putUserMe","isFetchingPutUserMe","getErrorputUserMe","UserMeContainer","UserMeWrappedComponent","isFetchingMe","me","UserMeContainer$1","withUserMe","AuthStateContainer","AuthWrappedComponent","meReducer","putUserMeReducer","pureFunction","newArgs","transformOrderItemForApi","transformOrderProductOptionValueForApi","baseAdditionalPrice","additionalPrice","dietaryInfo","orderId","transformOrderProductOptionValuesForApi","transformOrderProductOptionForApi","transformOrderProductOptionsForApi","optionsToReturn","optionTransformed","transformOrderProductForApi","orderProduct","transformOrderProductsForApi","products","transformOrderMenuPartForApi","transformOrderMenuPartsForApi","transformOrderMenuForApi","orderMenu","explodeItem","itemList","duplicateItem","explodeItems","devidedProducts","transformProducts","transformMenus","menus","transformCartItemsForApi","itemsListParam","itemsList","transformCartForApi","cart","newCart","totalPriceFormatter","selectedOptions","selectedOption","optionValues","orderProductFormatter","orderProductsFormatter","arrayReduce","accumulator","initAccum","basePropertyOf","_basePropertyOf","deburredLetters","deburrLetter","_deburrLetter","reLatin","reComboMark","deburr","deburr_1","reAsciiWord","asciiWords","_asciiWords","reHasUnicodeWord","hasUnicodeWord","_hasUnicodeWord","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsBreakRange","rsApos","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsOrdLower","rsOrdUpper","rsEmoji","reUnicodeWord","unicodeWords","_unicodeWords","words_1","reApos","createCompounder","_createCompounder","kebabCase","kebabCase_1","baseFilter","_baseFilter","filter_1","getChosenOptionValues","areProductOptionValuesEqual","optionToCheck","optionToCompare","toCheckValues","toCompareValues","optionValuesToCheck","optionValuesToCompare","optionValueToCheck","areProductOptionsEqual","productToCheck","productToCompare","haveSameOptions","optionFound","areProductModifiersEqual","areSameProduct","checkOptions","head_1","getFirstSelectableCategory","catalog","recursiveGetParentCategory","parentsCategories","parentsCategoriesClone","parentCategory","parentCategoryFound","recursiveGetCategoryWithId","categoryId","foundCategory","subCategory","getCategoryFromCatalog","parentCategoryOfCategorySelected","recursiveFindItemFromCategory","arrayItem","foundFromSubcategories","findItemFromSuggestion","suggestion","suggestedItem","getProductFromCatalog","upsellingData","productId","productFromCategory","productFromSuggestion","productFromUpselling","getMenuFromCatalog","menuId","menuFromCategory","menuFromSuggestion","menuFromUpselling","removeItemsFromUpsellings","upsellingCategory","itemsToRemove","itemToRemove","getCardModifierIdsFromCartModifierList","cartModifierList","cartModifierIds","getOptionsTotalAdditionalPrice","formatValuesQuantity","nb","isValidModifier","hasMandatoryOptions","totalPriceModifierForModifiedObject","optionsTotalAdditionalPrice","totalPriceModifier","optionModifier","optionsModifier","orderProductModifier","orderProductsModifier","createOrderProductFromProduct","getProductFromCart","itemCartList","itemFromList","getProductFromCartWithOrderId","getParentCategoriesLeft","parentCategoriesLeft","recursivePartNbChosenValues","nbChosenValues","getNbChosenValuesValuesFromPart","recursiveFindPartProduct","partProduct","partProductFound","partCategoryRoot","getProductFromPart","recursiveFindPartCategory","partCategory","partCategoryFound","getCategoryFromPart","recursivePartCategorySelectedProducts","selectedProducts","recursivePartSelectedProducts","getPartSelectedProducts","areMenuModifiersEqual","menuToCheck","menuToCompare","areMenuPartProductsEqual","partToCheck","partToCompare","productsToCheck","productsToCompare","areMenuPartsEqual","haveSameParts","areSameMenu","getMenuFromCart","getMenuFromCartWithOrderId","recursiveCheckPartIsAutofillable","hasFoundProduct","isAutofillable","isMenuAutofillable","recursiveGetFilledPart","getFilledMenu","recursiveGetPartsTotalPrice","partPrice","getPartsTotalPrice","partsTotalAdditionalPrice","partsTotalPrice","recursiveOrderProductsModifier","partModifier","partsModifier","orderMenuModifier","recursiveCreateOrderProductFromProductInPart","createOrderMenuFromMenu","formatAnchor","formatSelectedItemsString","itemsNames","recursiveOrderProductsFormatter","formatOrderMenuPart","formatOrderMenuParts","formatOrderMenuSelectedProducts","formatNextPart","nextPart","lastPart","partFilter","indexFilter","orderMenuFormatter","formatItem","formatItemList","formatItemForOrderPreview","formatItemListForOrderPreview","getCart","getItemListFromCart","forceGetItemListFromCart","getItemListFromCartForOrderPreview","getItemListForApi","containsAlcohol","productContainsAlcohol","getCartData","totalPrice","getSuspendedDatas","suspendedItem","suspendedActionType","OrderMenuAction","selectMenu","editMenu","openMenu","selectMenuProduct","unselectMenuProduct","editMenuProduct","addProductItemToMenu","addOrderProductToMenu","partId","partCategoryId","updateOrderProductToMenu","setCurrentPart","setPartSelectedCategory","resetPartSelectedCategory","setPartParentCategories","resetPartParentCategories","transformOrderMenuForStore","cartMenu","OrderProductAction","openProduct","selectOptionValue","unselectOptionValue","updateOrderProductComment","setReclaimLater","isChecked","getCatalogDataOnProps","makeGetSelectedProduct","orderProductState","catalogData","selectedProduct","selectedProductId","getOrderProduct","getViewOptions","viewOptionsState","updateOrderProduct","orderProductUpdaterFunc","updateOptionValue","valueUpdaterFunc","selectProduct","updateComment","orderProductReducer","openMenuProductMiddleware","openEditMenuProductMiddleware","orderMenuMiddlewares","makeGetSelectedMenu","orderMenuState","selectedMenu","getOrderMenu","getPartSelectedCategory","selectedCategoryState","getPartParentCategories","parentCategoriesState","getPartParentCategory","recursiveUpdatePart","updateOrderMenu","orderMenuUpdaterFunc","addProduct","addProductItem","updateProduct","unselectProduct","setSelectedCategoryInPart","setParentCategoriesInPart","orderMenuReducer","CartAction","CartActionsToResetIdEmpotency","cartModifierActions","displayCart","addToCartFromShortcut","addOrderProductToCart","updateOrderProductOnCart","addOrderMenuToCart","updateOrderMenuOnCart","duplicateItemOnCart","removeFromCart","deleteFromCart","setModificationDate","setMinimumPrice","minimumPrice","setSuspendedDatas","setCart","editItem","hideDeleteCartDialog","resetCart","doOrderPreview","updateItem","itemToUpdate","itemFromCart","deleteItemFromCart","itemCartListCleaned","SuggestionActions","createSuggestionFromItem","orderItem","showSuggestionDialog","hideSuggestionDialog","addToCartMiddleware","openEditItemMiddleware","cartMiddlewares","decreaseQuantity","increaseQuantity","addToCart","itemListFromCart","productFormatted","productFromCart","menuFromCart","cartReducer","isLastPreview","sendDate","modificationDate","PaymentAsyncErrors","PaymentErrorsList","PaymentPdfErrorsList","OrderErrors","OrderPreviewApi","applyCartModifiers","getAdmissionFeesAmount","getMaxGrantableAmount","verifyUserAccount","postOrderIfSucceeded","PostOrderPreviewAction","postOrderPreview","sentOrderPreview","setOrderPreviewModificationDate","resetOrderPreview","resetOrderPreviewError","ModifiersVerificationsReason","getVerificationsModifiersReasonLabel","formatVerifications","getSendDate","getModificationDate","isFetchingOrderPreview","getOrderPreview","getOrderPreviewError","getOrderPreviewVerifications","verifications","baseDifference","valuesLength","valuesIndex","_baseDifference","differenceWith","differenceWith_1","areSameApiProduct","partFound","areSameApiMenu","reconciliateOrderProductFromApi","apiOrderProduct","catalogProduct","apiOption","valueCopy","apiOptionValue","recursiveRetrievePart","apiPart","foundProducts","recursive","productToReturn","apiProductFound","apiProduct","foundProduct","productFromPart","reconciliatedProduct","reconciliateOrderMenuFromApi","apiOrderMenu","reconciliateOrderFromApi","apiCart","currentCart","sentCart","apiMenu","newItems","sentItems","sentItem","baseOrderId","itemForBaseId","apiItemForBaseOrderId","hasBeenModifiedByApi","sentOrderIdsInOrder","cartOrderIds","itemListIds","orderIdsInOrder","cartOrderId","newItemList","postOrderPreviewSuccess","postOrderPreviewFailure","orderPreviewMiddlewares","setIsFetching","setReset","resetError","setRequest","setSuccess","setFailure","getCartActionReducer","orderPreviewReducer","getOrderFrontState","getOrderFront","getRestaurant","orderFront","getMode","getOrderProperties","getAppConfigOrderSettings","getOrderFrontDatas","getOrderIsDeliveryOnProps","makeGetOrderRestaurantListData","geolocationCoordinates","orderIsDelivery","restaurantListFormatted","formatRedirectUri","formatAppConfigFrontSettings","nativeFloor","baseRepeat","_baseRepeat","createPadding","chars","charsLength","_createPadding","padStart","strLength","padStart_1","orderParamsForMode","finalDueDate","dueDateOpeningHours","nowAndDelaysCumulated","lastTimeToOrder","hasAPaymentMethodSelected","paymentMethod","creditCardPaymentMethodIsSelectedAndValid","hasPaymentWithCardPrint","userAccountPaymentMethodIsSelectedAndValid","trdPaymentMethodIsSelectedAndValid","paymentMethodIsSelectedAndValid","generateCreditCardPayment","tips","asyncPaymentSecureCallbackUrlQueryParams","apiVersion","simulate","generateUserAccountPayment","generateTRDPayment","generateOrderData","orderProperties","orderFrontDatas","getOrderPlugin","getOrderFrontProperties","orderPluginData","getOrderData","getAppConfigFrontSettings","OrderPropertiesContainer","OrderPropertiesWrappedComponent","OrderPropertiesContainer$1","withOrderProperties","baseFindKey","_baseFindKey","findKey","findKey_1","generateIdempotencyKey","idempotencyKey","GetHistoryAction","restaurantReducer","OrderFrontAction","setIdempotencyKey","setDueDate","selectMode","selectTips","setRestaurantId","setPaymentMethod","resetOrderFront","resetOrderFrontFull","displayUpselling","savePostedOrderData","addModifierCode","addVoucher","setVouchers","vouchers","deleteVoucher","DueDateMode","CatalogErrors","CatalogSource","CatalogApi","GetCatalogAction","fetchCatalog","resetCatalog","CatalogAction","showUpsellingDialog","hideUpsellingDialog","RefreshCatalogAction","refreshCatalog","showDietaryInfoDialog","hideDietaryInfoDialog","AsyncPaymentApi","paymentId","GetAsyncPaymentAction","getAsyncPayment","AsyncPaymentCanceledResponseStatus","AsyncPaymentRedirectToPspResponseStatus","AsyncPaymentPendingStatus","getTimeout","asyncPaymentRetry","getAsyncPaymentSuccess","statusFailed","defaultError","errorWithoutRefundData","getAsyncPaymentFailure","AsyncPaymentMiddlewares","isAsyncPaymentRedirectToPspResponse","OrderApi","fromDate","toDate","PostOrderAction","postOrder","orderData","resetPostOrder","getOrderPost","orderPostSelectors","isFetchingOrderPost","getDataOrderPost","getErrorOrderPost","handlePostOrderRequest","handleFinalizeAsyncPaymentOrderRequest","handlePostOrderSuccess","handlePostOrderAsyncPaymentSuccess","handlePostOrderFailure","handlePostOrderReset","orderPostReducer","UserAccountErrors","UserAccountApi","userAccountId","UserAccountAction","resetUserAccount","FetchUserUserAccountsAction","fetchUserUserAccounts","FetchUserUserAccountAction","fetchUserUserAccount","accountId","UpdateUserAccountAction","getUserAccounts","getUserIdOnProps","getUserAccountIdOnProps","makeIsFetchingUserUserAccount","userAccountsState","userAccountsData","userAccounts","makeIsFetchingUserUserAccounts","makeGetUserUserAccounts","makeGetUserUserAccount","makeGetDefaultUserUserAccount","UserAccountsContainer","isFetchingUserAccounts","getDefaultUserUserAccount","defaultUserAccount","UserAccountsContainer$1","UserAccountContainer","isFetchingUserAccount","getUserAccount","RestaurantsGroupApi","groupId","storesIds","childrenIds","__extends","extendStatics","__","_hasOwnProperty","_objectKeys","_deepClone","isInteger","charCode","escapePathComponent","unescapePathComponent","hasUndefined","i_1","objKeys","objKeysLength","patchErrorMessageFormatter","messageParts","PatchError","_super","operation","tree","_newTarget","JsonPatchError","deepClone","objOps","getValueByPointer","originalValue","applyOperation","valueToCopy","_areEquals","arrOps","removedList","pointer","getOriginalDestination","validateOperation","mutateDocument","banPrototypeModifications","existingPathFragment","validateFunction","applyPatch","patch","length_1","applyReducer","operationResult","pathLen","existingPathLen","sequence","externalValidator","arrA","arrB","beforeDict","Mirror","ObserverInfo","getMirror","getObserverFromMirror","mirror","removeObserverFromMirror","unobserve","observe","patches","observerInfo","dirtyCheck","generate","fastCheck","invertible","_generate","temp","newKeys","oldKeys","deleted","oldVal","newVal","tree1","tree2","core","duplex","GetRestaurantsGroupAction","fetchRestaurantsGroup","PutGroupStoreListAction","PutGroupGroupListAction","PatchGroupAction","FrontCateringHistoryType","GroupType","formatLevel","rGroup","formatType","formatFrontSettings","sortSubRestaurantsGroups","formatForgottenPasswordLink","formatChildrenRestaurants","formatRestaurantsGroup","formatRestaurantsGroupWithChildren","getRestaurantsGroupIdOnProps","getRestaurantsGroupListState","restaurantsGroups","groupsMap","restaurantsGroupData","makeIsFetchingRestaurantsGroup","restaurantsGroupListState","makeGetRestaurantsGroup","restaurantsGroup","makeGetRawRestaurantsGroup","makeGetRestaurantsGroupError","RestaurantsGroupContainer","forceReload","loadChildren","notLoadedYet","RestaurantsGroupWrappedComponent","isFetchingRestaurantsGroup","rawRestaurantsGroup","restaurantsGroupError","getRawRestaurantsGroup","getRestaurantsGroup","getRestaurantsGroupError","RestaurantsGroupContainer$1","withRestaurantsGroupMine","LinkToPopUp","onRedirectToTopUp","View","dislayLinkToTopUp","balanceLabel","defaultBalanceLabel","UserAccountRemainingView","forceUpdate","CreateUserPostUserAction","userReducer","userUserAccountsReducer","postOrderMiddleware","displayUpsellingMiddleware","cartItems","postOrderSuccessMiddleware","postOrderFailureMiddleware","setLocaleMiddleware","resetOrderFrontMiddleware","orderFrontMiddlewares","handleCartAction","orderFrontReducer","existingData","formatValueAdditionalPrice","formatOptionValues","formatValues","formatOptions","formatProductData","formatProductOptions","formatDietaryInfo","formattedAllergens","recursiveFormatProduct","mergeProductsAndMenus","itemsAvailable","itemsUnavailable","productsAvailable","productsUnavailable","orderFromAvailable","categoryFirst","categorySecond","recursiveFormatSubcategoriesProductsAndMenus","categoryTemp","itemsLength","subcategoriesLength","formatCategory","formatCategories","formatPartProducts","formatPartCategory","partFormatted","formatParts","formatMenuData","categoryHasAvailableItem","hasAvailableItem","hasAvailableSubcategory","isPartAvailable","hasAvailableProduct","hasAvailableCategory","computeMenuAvailabilityFromParts","formatDietaryInfoForPartCategory","mergeSuggestedProductsAndMenus","suggestedProducts","suggestedMenus","suggestedItems","recursiveFlattenSuggestions","formatSuggestion","formatSuggestions","formatCatalog","formattedCatalog","getCatalogEntity","getCategoryIdOnProps","getParentCategoriesOnProps","getCatalogForMode","getCatalogData","catalogForMode","getErrorCatalog","isFetchingCatalog","getCatalogFormatted","makeGetCategory","makeGetFirstSelectableCategory","getSelectedCategory","selectedCategory","getParentCategories","getCatalogLocale","CategoryContainer$1","orderPluginProperties","newParentCategories","CategoryWrappedComponent","CategoryContainer","getCategory","CategoryContainer$2","withCategory","SelectedCategoryContainer","firstSelectableCategory","selectedCategoryFound","SelectedCategoryContainer$1","GeolocationAction","initGeolocation","successGeolocation","failureGeolocation","failureCallback","setGeolocationAddress","setGeolocationComputeAddress","computeAddress","setGeolocationComputeAddressExtra","resetGeolocation","resetFullGeolocation","setGeolocationCoordinates","resetGeolocationCoordinates","resetGeolocationError","geolocationReducer","fromApp","OrderPluginUrlCheckerContainer","modeInQuery","latInQuery","lngInQuery","addressInQuery","formattedAddress","queryIsAsap","makeRedirect","tableNumberInQuery","posCheckIdInQuery","verifyRestaurantId","verifyMode","verifyLatLng","verifyAddress","verifyIsAsap","verifyTableNumber","verifyFrom","OrderPluginUrlCheckerContainer$1","ORDER_PREVIEW_DELAY","CartDiffAction","setCartDiffItemList","deleteCartDiffItemList","hideCartDiffDialog","getCartDiff","getItemList","cartDiffData","getUnavailableItemsFromCart","cartItemList","unavailableItems","itemFromCatalog","removeUnavailableItemsFromList","unavailableItemList","unavailableItem","formatUpsellingData","getUpsellingDataEntity","getUpsellingDataForMode","getUpsellingData","upsellingDataForMode","isFetchingUpsells","getUpsellingDataFormatted","TemplateApi","customTextsContainerId","customTextsContainer","GetCustomTextsAction","getCustomTexts","UserType","RegisterApi","newUser","RegisterUserAction","RegisterIncognitoUserAction","RegisterUserLightAction","registerUser","registerAsIncognito","registerUserLight","registeredSuccessMiddleware","registeredIncognitoSuccessMiddleware","redirectToRedirectToParamIfExists","DID_REDIRECT_TO_PARAM","registeredUserLightSuccessMiddleware","registrationMiddlewares","later","AuthAppErrors","bodyProps","GetAppDataAction","getAppDataState","authDataState","PostAuthorizeAppAction","postAuthorizeApp","AuthAppApi","DEFAULT_APP_DATA","appDataReducer","getAuthorizeState","getAuthorizeAppData","authorizeState","DEFAULT_AUTHORIZE_DATA","authorizeAppReducer","authAppReducer","ActionVisibility","Visibility","ActionVisibilityOff","VisibilityOff","now_1","nativeMin","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","debounced","isInvoking","debounce_1","unfetch_module","BAD_REQUEST","fetchFromApi","_ref$baseUrl","_ref$userAgent","fetch","pwnedPasswordRange","row","Sha1","utf8encode","Utf8","K","H0","H1","H2","H3","H4","W","z","strUni","strUtf","cc","HibpPasswordRangeContainer","shaValue","sha1","suffix","pwdData","isPwned","minLength","ActionInfoOutline","ActionInfoOutline$1","ErrorOutline","ErrorOutlineIcon","MessageBlock","variant","toExport","MessageBlockSdk","InfoOutline","MessageBlockComponent","HibpPasswordView","pwnedText","displayIsSecureMessage","displayCheckSecure","minPasswordLength","isTooSmall","securityStyles","PasswordField","helperTextClassName","outlineClassName","fullWidth","startAdornment","_rawHelperText","_classes","_checkSecurity","_variant","_minPasswordLength","visibilityToggle","checkSecurity","hibpState","Input","FormHelperText","PasswordField$1","MenuView","button","Menu","MenuItem","__vite_glob_0_20","__vite_glob_0_21","__vite_glob_0_22","__vite_glob_0_23","__vite_glob_0_24","__vite_glob_0_25","__vite_glob_0_26","__vite_glob_0_27","__vite_glob_0_28","__vite_glob_0_29","__vite_glob_0_30","__vite_glob_0_31","__vite_glob_0_32","__vite_glob_0_33","__vite_glob_0_34","__vite_glob_0_35","__vite_glob_0_36","__vite_glob_0_37","__vite_glob_0_38","__vite_glob_0_39","__vite_glob_0_40","__vite_glob_0_41","__vite_glob_0_42","__vite_glob_0_43","__vite_glob_0_44","__vite_glob_0_45","__vite_glob_0_46","__vite_glob_0_47","__vite_glob_0_48","__vite_glob_0_49","__vite_glob_0_50","__vite_glob_0_51","__vite_glob_0_52","__vite_glob_0_53","__vite_glob_0_54","__vite_glob_0_55","__vite_glob_0_56","__vite_glob_0_57","__vite_glob_0_58","__vite_glob_0_59","__vite_glob_0_60","__vite_glob_0_61","__vite_glob_0_62","__vite_glob_0_63","__vite_glob_0_64","__vite_glob_0_65","__vite_glob_0_66","__vite_glob_0_67","__vite_glob_0_68","__vite_glob_0_69","__vite_glob_0_70","__vite_glob_0_71","__vite_glob_0_72","__vite_glob_0_73","__vite_glob_0_74","__vite_glob_0_75","__vite_glob_0_76","__vite_glob_0_77","__vite_glob_0_78","__vite_glob_0_79","__vite_glob_0_80","__vite_glob_0_81","__vite_glob_0_82","__vite_glob_0_83","__vite_glob_0_84","__vite_glob_0_85","__vite_glob_0_86","__vite_glob_0_87","__vite_glob_0_88","__vite_glob_0_89","__vite_glob_0_90","__vite_glob_0_91","__vite_glob_0_92","__vite_glob_0_93","__vite_glob_0_94","__vite_glob_0_95","__vite_glob_0_96","__vite_glob_0_97","__vite_glob_0_98","__vite_glob_0_99","__vite_glob_0_100","__vite_glob_0_101","__vite_glob_0_102","__vite_glob_0_103","__vite_glob_0_104","__vite_glob_0_105","__vite_glob_0_106","__vite_glob_0_107","__vite_glob_0_108","__vite_glob_0_109","__vite_glob_0_110","__vite_glob_0_111","__vite_glob_0_112","__vite_glob_0_113","__vite_glob_0_114","__vite_glob_0_115","__vite_glob_0_116","__vite_glob_0_117","__vite_glob_0_118","__vite_glob_0_119","__vite_glob_0_120","__vite_glob_0_121","__vite_glob_0_122","__vite_glob_0_123","__vite_glob_0_124","__vite_glob_0_125","__vite_glob_0_126","__vite_glob_0_127","__vite_glob_0_128","__vite_glob_0_129","__vite_glob_0_130","__vite_glob_0_131","__vite_glob_0_132","__vite_glob_0_133","__vite_glob_0_134","__vite_glob_0_135","__vite_glob_0_136","__vite_glob_0_137","__vite_glob_0_138","__vite_glob_0_139","__vite_glob_0_140","__vite_glob_0_141","__vite_glob_0_142","__vite_glob_0_143","__vite_glob_0_144","__vite_glob_0_145","__vite_glob_0_146","__vite_glob_0_147","__vite_glob_0_148","__vite_glob_0_149","__vite_glob_0_150","__vite_glob_0_151","__vite_glob_0_152","__vite_glob_0_153","__vite_glob_0_154","__vite_glob_0_155","__vite_glob_0_156","__vite_glob_0_157","__vite_glob_0_158","__vite_glob_0_159","__vite_glob_0_160","__vite_glob_0_161","__vite_glob_0_162","__vite_glob_0_163","__vite_glob_0_164","__vite_glob_0_165","__vite_glob_0_166","__vite_glob_0_167","__vite_glob_0_168","__vite_glob_0_169","__vite_glob_0_170","__vite_glob_0_171","__vite_glob_0_172","__vite_glob_0_173","__vite_glob_0_174","__vite_glob_0_175","__vite_glob_0_176","__vite_glob_0_177","__vite_glob_0_178","__vite_glob_0_179","__vite_glob_0_180","__vite_glob_0_181","__vite_glob_0_182","__vite_glob_0_183","__vite_glob_0_184","__vite_glob_0_185","__vite_glob_0_186","__vite_glob_0_187","__vite_glob_0_188","__vite_glob_0_189","__vite_glob_0_190","__vite_glob_0_191","__vite_glob_0_192","__vite_glob_0_193","__vite_glob_0_194","__vite_glob_0_195","__vite_glob_0_196","__vite_glob_0_197","__vite_glob_0_198","__vite_glob_0_199","__vite_glob_0_200","__vite_glob_0_201","__vite_glob_0_202","__vite_glob_0_203","__vite_glob_0_204","__vite_glob_0_205","__vite_glob_0_206","__vite_glob_0_207","__vite_glob_0_208","__vite_glob_0_209","__vite_glob_0_210","__vite_glob_0_211","__vite_glob_0_212","__vite_glob_0_213","__vite_glob_0_214","__vite_glob_0_215","__vite_glob_0_216","__vite_glob_0_217","__vite_glob_0_218","__vite_glob_0_219","__vite_glob_0_220","__vite_glob_0_221","__vite_glob_0_222","__vite_glob_0_223","__vite_glob_0_224","__vite_glob_0_225","__vite_glob_0_226","__vite_glob_0_227","__vite_glob_0_228","__vite_glob_0_229","__vite_glob_0_230","__vite_glob_0_231","__vite_glob_0_232","__vite_glob_0_233","__vite_glob_0_234","__vite_glob_0_235","__vite_glob_0_236","__vite_glob_0_237","__vite_glob_0_238","__vite_glob_0_239","__vite_glob_0_240","__vite_glob_0_241","__vite_glob_0_242","__vite_glob_0_243","__vite_glob_0_244","__vite_glob_0_245","__vite_glob_0_246","__vite_glob_0_247","__vite_glob_0_248","__vite_glob_0_249","__vite_glob_0_250","__vite_glob_0_251","__vite_glob_0_252","__vite_glob_0_253","__vite_glob_0_254","__vite_glob_0_255","__vite_glob_0_256","__vite_glob_0_257","__vite_glob_0_258","__vite_glob_0_259","__vite_glob_0_260","__vite_glob_0_261","__vite_glob_0_262","__vite_glob_0_263","__vite_glob_0_264","__vite_glob_0_265","__vite_glob_0_266","__vite_glob_0_267","__vite_glob_0_268","__vite_glob_0_269","flagModules","Flag","alt","flagSvg","fullPath","Flag$1","getInitialState","countryDialCode","makeSureStartWithPlusOrEmpty","PhoneField","asYouTypeResults","dialCode","extractedNationalNumber","newFormattedNumber","inputFormatted","nationalNumber","displayAsError","selectElement","Select","dial_code","nextPropsValue","libPhoneNumber","cursorPosition","PhoneField$1","fieldIconStyles","FieldIcon","Icon","FirstName","PersonOutlineIcon","LastName","PhoneNumber","PhoneOutlinedIcon","BadgeId","CardMembershipOutlinedIcon","Tooltip","Email","MailOutlineIcon","Password","LockOutlinedIcon","MarketingOptim","isInputChecked","fieldsType","getFieldsMap","getField","registrationCodeErrors","redirectAfterUserAction","postOrderOrRedirect","authSuccess","fromOrderWorkflow","getUserMeSuccess","userAppConfig","hasPhoneRequired","oauth2","updateProfileSuccess","isFromProfile","userOrderPluginMiddlewares","VoucherDiffAction","setInvalidVouchers","invalidVouchers","deleteInvalidVouchers","hideInvalidVouchersDialog","getVoucherDiff","getInvalidVouchers","voucherDiffData","postOrderPreviewSuccessMiddleware","voucherMiddlewares","voucherDiffReducer","dispatchPostOrderPreview","dueDateMode","fees","modifierCode","modifiers","areOnlineVouchersAllowed","formattedUpsellingData","dispatchPostOrderPreviewWithDebounce","catchCartActionMiddleware","setCartDetailsFromRestaurantMiddleware","setRestaurantIdOnRestaurantSet","fetchCheckOnPosCheckIdSet","setTableNumberOnFetchCheckSuccess","selectModeMiddleware","setFrontOrderDueDateMiddleware","dueDateMs","resetFrontOrderDueDateMiddleware","redirectToStoreLocatorWithRedirection","resetOrderSettingsWhenResetingRestaurant","setRestaurantAndDueDateWhenIsAsap","isAsap","canOrderUsingAsap","restaurantAvailabilities","slotsForToday","setRestaurantNullIfGetRestaurantFails","setRestaurantWhenGetRestaurantSuccess","setCurrencyWhenRestauranSet","setRestaurantMiddleware","openProductMiddleware","openMenuMiddleware","redirectToPaymentWhileAddingANewAddressHasSucceeded","orderPostSuccessMiddleware","handleLimitedStockError","limitedStockList","enrichedLimitedStockList","idToNameMap","collectFromOptions","redirectToExternalWithPOST","asyncPaymentData","orderPostFailureMiddleware","deleteCartItemMiddleware","cartDiffItemList","getItemListCartDiff","cleanCartItemList","deleteInvalidVouchersMiddleware","invalidVoucher","finalizeAsyncPaymentSuccess","finalizeAsyncPaymentFailure","getCatalogFromDueDateMiddleware","resetCategoryWhileGoBackToStoreLocator","resetOrderPluginMiddleware","registeredUserLightOrIncognitoSuccessOrderPluginMiddleware","postOrderPreviewAndPostOrderIfSucceededMiddleware","postOrderPreviewSucceededAndPostOrderIfSucceededMiddleware","isBuffaloGrill","isOrderPreviewSuccess","orderPluginMiddlewares","orderPluginReducer","ScrollToTop","withScrollToTop","getAppSecurityError","AppSecurityContainer","appSecurityError","AppSecurityContainer$1","analytics","Env","HardwareKeyboardArrowRight","slideCount","currentSlide","svgProps","HardwareKeyboardArrowRight$1","ButtonSquare","ButtonBase","Hidden","ButtonSquare$1","ButtonLink","ButtonLink$1","ButtonCustom","registerVersion","PMTFirebaseAuth","FirebaseDataSubscription","_firebaseApp","initializeFirebase","initializeApp","getFirebaseApp","firebaseAuthReducer","firebaseDataReducer","pushConsentToFirebase","plugin","dbPath","db","getDatabase","serverTimestamp","CookieConsentBanner","analyticsConfig","setOpen","currentConsent","setCurrentConsent","useState","setUid","firebaseApp","signInAnonymously","userCredential","selectionIsNecessaryCookiesOnly","saveSelection","handleAccept","handleDeny","Slide","Box","Footer","Footer$1","NavigationArrowBack","NavigationArrowBack$1","objectWithoutProperties","_defined","it","defined","_toObject","_coreModule","_globalModule","_library","SHARED","_sharedModule","px","_uid","shared","_sharedKey","toObject","IE_PROTO","ObjectProto","_objectGpo","_aFunction","aFunction","_ctx","that","_anObject","_fails","exec","_descriptors","_domCreate","_ie8DomDefine","_toPrimitive","anObject","IE8_DOM_DEFINE","toPrimitive","dP","_objectDp","Attributes","_propertyDesc","createDesc","_hide","ctx","hide","PROTOTYPE","$export","IS_FORCED","IS_GLOBAL","IS_STATIC","IS_PROTO","IS_BIND","IS_WRAP","expProto","own","_export","fails","_objectSap","KEY","exp","$getPrototypeOf","getPrototypeOf","classCallCheck","$Object","_defineProperty2","ceil","floor","_toInteger","_stringAt","TO_STRING","pos","_redefine","_iterators","_cof","cof","_iobject","IObject","_toIobject","_toLength","_toAbsoluteIndex","toIObject","toLength","toAbsoluteIndex","IS_INCLUDES","$this","arrayIndexOf","_objectKeysInternal","_enumBugKeys","$keys","enumBugKeys","getKeys","_objectDps","Properties","_html","dPs","Empty","createDict","iframe","lt","gt","iframeDocument","_objectCreate","USE_SYMBOL","$exports","_wksModule","def","TAG","_setToStringTag","stat","create","setToStringTag","IteratorPrototype","_iterCreate","NAME","LIBRARY","redefine","Iterators","$iterCreate","ITERATOR","BUGGY","FF_ITERATOR","KEYS","VALUES","returnThis","_iterDefine","Base","IS_SET","FORCED","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","$at","iterated","point","_addToUnscopables","_iterStep","done","addToUnscopables","es6_array_iterator","TO_STRING_TAG","DOMIterables","_wksExt","META","setDesc","FREEZE","setMeta","fastKey","getWeak","onFreeze","meta","_metaModule","wksExt","_wksDefine","$Symbol","_objectGops","_objectPie","gOPS","pIE","_enumKeys","isEnum","hiddenKeys","_objectGopn","gOPN","windowNames","getWindowNames","_objectGopnExt","gOPD","_objectGopd","DESCRIPTORS","$fails","wks","wksDefine","enumKeys","_create","gOPNExt","require$$22","$GOPD","require$$23","$GOPS","require$$24","$DP","require$$25","require$$26","$JSON","_stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","setter","setSymbolDesc","protoDesc","$defineProperty","$defineProperties","$create","$propertyIsEnumerable","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","require$$27","require$$28","require$$29","es6Symbols","wellKnownSymbols","FAILS_ON_PRIMITIVES","$replacer","require$$30","_typeof_1","_iterator","_iterator2","_symbol","_symbol2","possibleConstructorReturn","_typeof2","_typeof3","_setProto","buggy","inherits","_setPrototypeOf2","_create2","metaMap","_metaMap","baseSetData","_baseSetData","createCtor","thisBinding","_createCtor","WRAP_BIND_FLAG","createBind","isBind","_createBind","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","_composeArgs","composeArgsRight","holdersIndex","rightIndex","rightLength","_composeArgsRight","countHolders","_countHolders","baseLodash","_baseLodash","MAX_ARRAY_LENGTH","LazyWrapper","_LazyWrapper","getData","_getData","realNames","_realNames","getFuncName","otherFunc","_getFuncName","LodashWrapper","chainAll","_LodashWrapper","wrapperClone","_wrapperClone","lodash","wrapperLodash","isLaziable","funcName","_isLaziable","setData","_setData","reWrapDetails","reSplitDetails","getWrapDetails","_getWrapDetails","reWrapComment","insertWrapDetails","details","_insertWrapDetails","WRAP_BIND_KEY_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","wrapFlags","updateWrapDetails","_updateWrapDetails","setWrapToString","reference","_setWrapToString","WRAP_CURRY_BOUND_FLAG","createRecurry","wrapFunc","argPos","ary","arity","isCurry","newHolders","newHoldersRight","newPartials","newPartialsRight","_createRecurry","getHolder","_getHolder","reorder","oldArray","_reorder","PLACEHOLDER","replaceHolders","_replaceHolders","createHybrid","partialsRight","holdersRight","isAry","isBindKey","isFlip","holdersCount","_createHybrid","createCurry","_createCurry","createPartial","_createPartial","srcBitmask","newBitmask","isCombo","_mergeData","createWrap","_createWrap","bind_1","canUseDom","REACT_STATICS","KNOWN_STATICS","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","inheritedComponent","hoistNonReactStatics_cjs","emit","Component$$1","mapProps","propsMapper","createFactory","MapProps","withProps","pick","withPropsOnChange","shouldMapOrKeys","shouldMap","WithPropsOnChange","mapValues","withHandlers","WithHandlers","_initialiseProps","createHandler","handlerName","cachedHandler","defaultProps","DefaultProps","ownerProps","renameProp","oldName","newName","_babelHelpers$extends","mapKeys","renameProps","nameMap","flattenProp","propName","FlattenProp","withState","stateName","stateUpdaterName","WithState","updateFn","stateValue","withStateHandlers","stateUpdaters","WithStateHandlers","mayBeEvent","withReducer","dispatchName","WithReducer","branch","leftFactory","rightFactory","Branch","renderComponent","RenderComponent","Nothing","renderNothing","onlyUpdateForKeys","propKeys","onlyUpdateForPropTypes","propTypes","OnlyUpdateForPropTypes","withContext","childContextTypes","getChildContext","WithContext","getContext","contextTypes","GetContext","lifecycle","Lifecycle","isClassComponent","toClass","baseComponent","ToClass","setPropTypes","createSink","Sink","componentFromProp","nest","Components","Nest","higherOrderComponent","NewComponent","_config","configureObservable","stream","componentFromStreamWithConfig","config$$1","propsToVdom","ComponentFromStream","_config$fromESObserva","createChangeEmitter","vdom","componentFromStream","identity$1","mapPropsStreamWithConfig","fromESObservable","toESObservable","props$","childProps","mapPropsStream","createEventHandlerWithConfig","emitter","createEventHandler","definition","readyState","onreadystatechange","scripts","scriptpath","urlArgs","every","ar","$script","idOrDone","optDone","idOrDoneIsDone","loopFn","dset","loading","force","loaded","deps","ready","req","missing","withScriptjs_1","_objectWithoutProperties2","_objectWithoutProperties3","_getPrototypeOf2","_classCallCheck2","_classCallCheck3","_createClass2","_createClass3","_possibleConstructorReturn2","_possibleConstructorReturn3","_inherits2","_inherits3","_bind2","_bind3","withScriptjs","_canUseDom","_canUseDom2","_recompose","_propTypes","_propTypes2","_react2","LOADING_STATE_NONE","LOADING_STATE_BEGIN","LOADING_STATE_LOADED","Container","_React$PureComponent","loadingElement","googleMapURL","loadingState","scriptjs","_props2","restProps","constants","withGoogleMap_1","_defineProperty3","withGoogleMap","_constants","containerElement","mapElement","_iterCall","ret","ArrayProto","_isArrayIter","_createProperty","ARG","tryGet","_classof","B","classof","core_getIteratorMethod","SAFE_CLOSING","riter","_iterDetect","skipClosing","safe","isArrayIter","createProperty","getIterFn","arrayLike","aLen","mapfn","mapping","iterFn","toConsumableArray","_from","_from2","baseReduce","_baseReduce","reduce_1","lowerFirst","lowerFirst_1","baseHas","_baseHas","has_1","MapChildHelper","_isFunction2","_isFunction3","_reduce3","_reduce4","_forEach2","_forEach3","_lowerFirst2","_lowerFirst3","_has2","_has3","construct","componentDidMount","componentDidUpdate","componentWillUnmount","rdcUncontrolledAndControlledProps","unprefixedKey","applyUpdaterToNextProps","updaterMap","eventMap","registerEvents","registeredList","googleEventName","onEventName","unregisterEvent","registered","GoogleMap_1","_toConsumableArray2","_toConsumableArray3","_MapChildHelper","_context$MAP","_context$MAP2","_context$MAP3","_context$MAP4","GoogleMap","_instance$mapTypes","_center","_clickableIcons","_heading","_mapTypeId","_streetView","_tilt","_zoom","Circle_1","Circle","circle","_draggable","_editable","_radius","_visible","Marker_1","_Marker$contextTypes","Marker","markerClusterer","_animation","_clickable","_cursor","_icon","_label","_opacity","_place","_position","_shape","_title","_zIndex","Polyline_1","Polyline","polyline","_path","Polygon_1","Polygon","polygon","_paths","Rectangle_1","Rectangle","rectangle","_bounds","InfoWindow_1","_InfoWindow$contextTy","_reactDom","_reactDom2","InfoWindow","infoWindow","$assign","_objectAssign","assign","_assign","_assign2","baseDelay","_baseDelay","delay_1","assign_1","OverlayViewHelper","getOffsetOverride","getLayoutStyles","getPixelPositionOffset","createLatLng","inst","createLatLngBounds","ensureOfType","getLayoutStylesByBounds","mapCanvasProjection","bounds","ne","sw","getLayoutStylesByPosition","OverlayView_1","_extends2","_extends3","_delay2","_delay3","_assign3","_OverlayView$contextT","_OverlayViewHelper","OverlayView","overlayView","mapPaneName","mapPanes","layoutStyles","GroundOverlay_1","GroundOverlay","groundOverlay","DirectionsRenderer_1","DirectionsRenderer","directionsRenderer","_directions","_panel","_routeIndex","FusionTablesLayer_1","FusionTablesLayer","fusionTablesLayer","KmlLayer_1","KmlLayer","kmlLayer","_url","TrafficLayer_1","TrafficLayer","trafficLayer","StreetViewPanorama_1","StreetViewPanorama","streetViewPanorama","_links","_motionTracking","_pano","_pov","BicyclingLayer_1","BicyclingLayer","bicyclingLayer","_withScriptjs","_withGoogleMap","_GoogleMap","_Circle","_Marker","_Polyline","_Polygon","_Rectangle","_InfoWindow","_OverlayView","_GroundOverlay","_DirectionsRenderer","_FusionTablesLayer","_KmlLayer","_TrafficLayer","_StreetViewPanorama","_BicyclingLayer","GoogleMapsScriptJS","GoogleMapsScriptJS$1","GoogleApi","apiKey","libraries","URL","googleVersion","channel","region","paramStr","GoogleMapsApiContainer","GeolocationContainer","geolocationId","geolocationOrigin","geolocationError","geolocationAddress","geolocationComputeAddress","GeolocationContainer$1","Address","width","isWidthUp","Address$2","BlockContainer","mobileType","padding","mobilePadding","disablePadding","disableMobilePadding","isMobile","isWidthDown","typeToUse","classBackground","style","BlockContainerToExport","AvReplay","AvReplay$1","ChangeButton","ChangeButton$1","TableNumber","TableNumber$1","Delivery","Delivery$2","OnSite","OnSite$1","TakeAway","Icons","IconOrderMode","OrderModeSelect","OrderModeSelect$1","OrderModeText","OrderModeText$1","AccountCircle","AccountCircle$1","NavigationArrowDropDown","ArrowDropDown","User","User$1","UserLight","userLight","UserLight$1","getAuthenticatedUser","authenticatedUser","Incognito","incognito","Incognito$1","HardwareKeyboardArrowDown","HardwareKeyboardArrowDown$1","HardwareKeyboardArrowUp","ArrowUpIcon","ARROW_KEYS","handleRadioGroupArrowKeyDown","radios","groupName","currentIndex","direction","nextRadio","Slots","hourData","slotValue","isSelectedDay","hideSubmit","dateLabel","weekdayIndex","openingHoursForNow","dueDateClassnameColor","modificationEnabled","isSelected","SlotsContainer","ConditionalUserBlock","HeaderView$1","frontAppConfig","backLink","displayAddress","changeButton","displayDueDate","displayTableNumber","displayOrderMode","displayOrderModeSelect","displayRestaurantLogo","displayUser","displayTitle","HeaderViewWithHOCs","HeaderView","displayHeader","appConfigPreset","shouldHideHeader","Header$4","PageContent","PageContent$1","ErrorLayout","buttonLabel","buttonAction","ErrorLayout$1","OrderPage","headerProps","isWhiteBackground","OrderPage$1","onSelectMode","View$t","OrderModePage","ModePage","CatalogContainer","catalogLocale","catalogError","CatalogWrappedComponent","CatalogContainer$1","withCatalog","catalogReducer","RestaurantContainer","RestaurantWrappedComponent","isFetchingRestaurant","getRestaurantError","getRestaurantFromRestaurantList","RestaurantContainer$1","OrderRestaurantListContainer","isDelivery","deliveryMaxRange","getOrderRestaurantListData","OrderRestaurantListContainer$1","GOOGLE_PLACE_CHANGED_EVENT","GoogleMapsAutocomplete","autocomplete","GoogleMapsReverseGeocoding","lat","lng","GoogleMapsReverseGeocoding$1","MapsMyLocation","MapsMyLocation$1","SearchAddress","resetAddressCallback","selectLocationCallback","reverseGeocoding","reverseGeocodingSuccessCallback","geolocationLatitude","geolocationLongitude","countryRestriction","onChangeCallback","errorText","onGeolocate","isGeolocating","geolocateDisabled","shouldDisplayError","showClearButton","showGeolocateButton","hasAdornment","SearchAddress$1","getWithAvailabilitiesOnProps","makeGetOrderContext","withAvailabilities","maxTimeAheadAsDaysForMode","daysBeforePreOrder","orderIsCurrentlyOpen","hasAsapFlow","hasChooseSlotFlow","hasPreOrderFlow","canAsap","canPreOrder","canOnlyAsap","willOpenLaterToday","nextOpening","canOrder","canPreOrderOnNextDaysButNotToday","nextPreOrderOpening","canPreOrderForLaterToday","addressIsInRestaurantDeliveryAddressRange","OrderRestaurantContextContainer","makeMapStateToProp","getOrderContext","OrderRestaurantContextContainer$1","ActionDone","ActionDone$1","TestChip","tooltipText","chip","toRender","RestaurantRow","RestaurantRow$1","RestaurantList","restaurantSelected","RestaurantList$1","WhereSection","loadRestaurantList","restaurantListError","shouldReverseGeocoding","setShouldReverseGeocoding","geolocateUser","isFetchingGeolocation","calculateIsAddressValid","addressElements","handleSelectLocation","isAddressValid","handleReverseGeocodingSuccess","WhereSection$1","NumberField","withFixedDecimals","autoComplete","NumberField$1","handleSetTableNumber","TableNumberInput","handleCloseInput","displayError","tableNumberInputButtonLabel","localTableNumber","setLocalTableNumber","TableNumberInputContainer","TableNumberForm","TableNumberForm$1","AvailabilitySlots","handleMenuRedirection","SlotsView","AvailabilitySlots$1","WhenContent","PhoneIcon","WhenContent$1","WhenSection","isSubmitDisabled","WhenSection$1","View$r","StoreLocatorPage","StoreLocatorPage$1","getDefaultBasicToken","getDefaultApiConsumer","getDefaultRestaurantId","withRestaurant","SuggestionActionType","flattenDeep","flattenDeep_1","replaceProductWithProduct","baseItem","itemToReplace","itemOption","baseItemOption","recursiveReplaceProductInSubCategory","productsReplaced","quantity","productReplaced","replaceProductWithMenu","recursiveReplaceProductFromMenuInSubCategory","baseItemProducts","maxQuantity","productsAdded","baseItemPartProduct","replaceMenuWithMenu","baseItemPart","formatItemSuggetions","getSuggestionState","getSuggestion","suggestionState","suggestionReducer","UpsellApi","GetUpsellsAction","fetchUpsells","prepareForFetchingUpsells","buildOrderPreview","buildOrderPreviewAndFetchUpsells","prepareForFetchingUpsellsMiddleware","fetchingUpsellsSuccessMiddleware","upsellingMiddlewares","upsellsReducer","toPropertyKey","assertThisInitialized","reactEventListener_cjs","_interopDefault","passiveOption","supportsPassiveOption","defaultEventOptions","mergeDefaultEventOptions","getEventListenerArgs","on","off","forEachListener","eventProps","withOptions","EventListener","onOrOff","HardwareKeyboardArrowLeft","HardwareKeyboardArrowLeft$1","Carousel","indexElement","elementWidth","elementFromProps","selectedElementIndex","elementsWidth","totalWidth","elementMeta","negative","leftTemp","showLeft","showRight","containerMeta","widthToSelectedElement","applyLeft","restToScroll","containerWidth","multiplier","containerElementLength","leftPart","centerPart","metaContainerWidth","leftValue","maxLeftValue","touch","prevState","elements","selectedElement","getLabel","leftScrollLabel","rightScrollLabel","ArrowLeftIcon","ArrowRightIcon","Carousel$1","Categories","Categories$1","Price","hasCartModifier","rowReverse","columnReverse","baseValue","Price$1","MapsRestaurant","PlaceholderLogo","CardItemOrder","image","description","basePrice","cartModifierTag","isCategory","isSelectableAndDisabled","onClickCard","displayAddButtonIcon","buttonAdd","buttonElement","restaurantLogo","isAvailable","tagsContent","disableAdd","isPlaceholderHidden","handleCardKeyDown","ItemExtraDisplay","hasPlaceholder","CardMedia","CardItemOrderToExport","ContentAdd","ContentAdd$1","StateMachine","transitions","transition","Transition","AlertDialog","cancelLabel","okLabel","cancelBtnVariant","DialogActions","AlertButton","onAgree","onDisagree","alertTitle","alertContent","buttonOtherProps","openAlertDialog","noBorder","Chip$1","CartModifierTag","chipElement","tooltipMsg","MAX_TAGS","ProductTagList","visibleTags","ProductTagList$1","State","Item","alreadySelectedQuantity","displaySelectedQuantity","transitionTo","addBtnLabel","addBtnIcon","addBtnAccessibleLabel","processAddSimpleProductToCart","Item$2","ItemList","prevCategoryId","currentCategoryId","firstFocusableCard","subCategories","ItemList$1","BlockContainerGroup","BlockContainerGroup$1","ContentRemove","ContentRemove$1","Trash","Trash$1","CartIcon","CartIcon$1","IconLabel","IconLabel$1","CommentOutline","CommentOutlineIcon","ProductContent","fromMenu","ProductContent$1","ItemQuantity","enabledQuantityChange","alcoholApprovalAnswer","ItemNameAndOptions","onEditItem","enabledClickableItems","modifiersFromCart","hasComplexModifier","modifierId","isComplex","LoyaltyIcon","ItemPrice","CartItemListView","fromRoute","orderModifiers","shouldDisplayPrices","CartItemList","ToggleContainer","CommunicationMessage","CommunicationMessage$1","CartFooterView","errorPostOrder","enabledSubmitCart","minimumPriceFormatted","totalCartPriceAndFeesFormatted","totalTaxAmount","totalTaxAmountFormatted","totalCartPriceFormatted","displayMinimumPricesForFree","onSubmitAction","shouldDisplayComment","totalSubsidiesGrantAmount","totalAdmissionFeesAmountIncludingTax","targetTypeTotalModifiers","shouldDisplayCartTotal","shouldDisplayTaxAmount","CartFooter","TipWithIcon","TipWithIcon$1","SideInformation","onRedirectToCart","enableModifyTableNumber","InfoOutlineIcon","SideInformation$1","SimpleCategory","SelectedCategory","otherCategories","otherCategory","CategoryBreadcrumb","CategoryBreadcrumb$1","CategoriesBreadcrumb","parents","CategoriesBreadcrumb$1","MobileHeader","withBack","onBack","hiddenMobile","backLabel","MobileHeader$1","CategoryMobileHeader","CategoryMobileHeader$1","MobileCartButton","MobileCartButton$1","MobileCatalogTableNumberForm","isSubCategory","handleRedirectToStoreLocator","View$p","CatalogPageWrapper","CatalogPageInner","cartSuspendedDatas","CatalogPage$1","newCategoryIsChildrenOfPreviousOne","SelectedMenuContainer","getSelectedMenu","SelectedMenuContainer$1","affectHistory","easeInOutQuad","jumper","stop","easing","a11y","timeStart","timeElapsed","loop","timeCurrent","jump","_arguments","callNow","scroll","getScrollTop","getElementOffset","scrollTop","_element$getBoundingC","bottom","doesElementContainScrollTop","extraOffset","offsetTop","checkLocationRelevance","el1","el2","_getElementOffset","top1","bottom1","_getElementOffset2","top2","bottom2","checkElementRelevance","anchors","bestId","bestElement","Manager_1","_jump","_jump2","_func","_scroll","_hash","defaultConfig","Manager","keepLastAnchorHash","bestAnchorId","ScrollableAnchor_1","_Manager","_Manager2","ScrollableAnchor","_ScrollableAnchor","_t","Sticky","distanceFromTop","eventSource","preventingStickyStateChanges","placeholderClientRect","contentClientRect","calculatedHeight","bottomDifference","wasSticky","isSticky","getNanoSeconds","hrtime","loadTime","moduleLoadTime","nodeLoadTime","upTime","performanceNowModule","hr","vendors","raf","caf","frameDuration","_now","cp","handle","rafModule","_raf","currentTarget","_this$node$getBoundin","_this3","_this4","_Sticky","_Container","isEditMode","Header$2","CategoryCard","CategoryCard$1","NavigationChevronLeft","NavigationChevronLeft$1","ParentCategoryCard","ParentCategoryCard$1","PartQuantity","displaySelectedItems","typographyType","PartQuantity$1","onBtnClick","onUnselectOrderProduct","onSelectOrderProduct","onAddToCartFromShortcut","ProductItem","onEditOrderProduct","btnLabel","DoneIcon","ProductItem$1","partHasReachedMaxQuantity","PartView","configureAnchors","goToAnchor","partParentCategory","partSelectedCategory","onSelectCategory","onReturnToPreviousPartCategory","categoryFromPart","isMobileSmall","StickyContainer","shouldStick","ArrowDownIcon","PartView$1","PartsView","productSelected","toggleAnchor","PartsView$1","SideMenu","MuiStepper","MuiStep","MuiStepLabel","MuiStepIcon","removeHash","SideMenu$1","forMobile","containerRef","wasValidRef","becameValid","Add","Actions$3","LeftArea","LeftArea$1","BannerView","isFromCart","returnLabel","onBeforeRedirect","BannerView$1","previousPageRoute","onBeforeRedirectToPreviousPage","View$n","MenuPage","productItem","partParentCategories","viewOptions","MenuPage$1","SelectedProductContainerById","getSelectedProduct","SelectedProductContainerById$1","SubmitBtnText","isMenuMode","wording","fromDialog","btnDisabled","Actions$1","Comment","Comment$1","Header$1","CheckboxCustom","ButtonType","getButton","checked","OptionValue","buttonType","OptionValue$1","OptionView","onSelectOptionValue","onUnselectOptionValue","optionDisabled","OptionView$1","OptionsView","OptionsView$1","ReclaimLater","rootStyle","View$l","ViewProduct","View$j","CatalogPage","ProductPage","getRegisterData","getRegisterError","isFetchingRegister","registrationReducer","RestaurantInformation","dueDateModificationEnabled","modeInformationTooltipEnabled","modeInformationText","CartResume","UserInformations","userProfileModificationEnabled","SideSummary","cartResumeEnabled","userInformationsEnabled","SideSummary$1","BackToBlock","BackToBlock$1","Cart","handleCartSubmission","shouldEnableSubmitCart","Cart$1","shouldDisplaySummary","View$h","CartPage","redirectParams","CartPage$1","getFormattedAddressFromAddressComponents","addressFormatted","withFormattedAddress","ImageEdit","ImageEdit$1","Delete","Delete$1","EditUserAddressFormView","placeholders","EditUserAddressFormView$1","GeolocationAddress","addressLocationNotGood","AddressEditForm","addressData","formIsValid","geoLocationProps","AddressEditForm$1","AddressElement","labelEdit","handleEditAction","handleDeleteAction","showEditAddressForm","RegisteredAddresses","selectedDeliveryAddress","userAddressListOutOfRange","onSelectDeliveryAddress","onResetDeliveryAddress","userAddressListInRange","onEditAddress","onCloseEditAddress","addressToEdit","RegisteredAddresses$1","AddUserAddressFormView","AddUserAddressFormView$1","NewAddress","addressComponents","NewAddress$1","DeliveryBlock","isFetchingUser","DeliveryBlock$1","View$f","DeliveryAddressPage","DeliveryAddressPage$1","CustomTip","customValueSelected","isPercentage","Tip","round","exactValue","roundingValue","TipBar","onChoseTip","tipsOptions","amountWithoutTips","roundValue","setCustomValueSelected","initialized","setInitialized","onTipSelection","tipAmount","customValue","calculateAmountFromPercentage","percentage","exactAmount","matchingPossibleValue","possibleValue","currentValue","TipSlider","defaultSelectedPercentage","defaultTipsValue","maxValue","tipValueAsPercentage","Slider","Tips","tipsSettings","useMountEffect","fun","getPath","ActionResetRequestDataAction","actionResetRequestData","requestName","where","ActionSetDataAction","actionSetData","RequestApiAction","actionRequestApi","apiRequest","requestApiReducer","currentList","getSelectors","selectors","useApi","manualRunParam","onSuccess","onFailure","resetDataOnMount","paginate","autoReset","keepDataOnRequest","formatterProps","useDebugValue","getDataSelector","isFetchingSelector","getErrorSelector","applyFormatter","useCallback","allData","resetRequestData","runRequest","newQuery","newParams","onSuccessCallback","onFailureCallback","loadMore","newBody","VoucherCodes","storeId","showField","setShowField","setCode","fieldError","setFieldError","checkVoucherCode","isCheckingVoucher","checkingVoucherError","existingVouchers","isAlreadyApplied","VoucherCodes$1","CreditCardPayment","CreditCardPayment$1","IrlPayment","hasVoucherFeatureEnabled","UserAccountPayment","orderPreviewError","UserAccountPayment$1","TRDPayment","PaymentMethods","totalCartPriceAndFees","amountToPay","amountToPayFormatted","paymentBlocks","PaymentMethods$1","PromoCode","PromoCode$1","PaymentDetails","PaymentDetails$1","PaymentBlock","heading","onResetUserCard","PaymentBlock$1","View$d","PaymentPage","noOrderData","hasOrderPropertiesRestaurant","noCredentials","noRestaurantId","noRestaurant","PaymentPage$1","onConfirm","ErrorBlock$1","View$b","PaymentVerificationPage","hasError","PaymentVerificationPage$1","PaymentApi","card","FetchPaymentPdfLinkAction","fetchPaymentPdfLink","ResetPaymentPdfLinkAction","resetPaymentPdfLink","fetchPaymentPdfLinkSelectors","isFetchingPaymentPdfLink","getDataPaymentPdfLink","getErrorPaymentPdfLink","resetData","fetchPaymentPdfLinkReducer","GetOrderStatusPollAction","fetchOrderStatus","orderStatusPollSelectors","isFetchingOrderStatus","getOrderStatusData","getOrderStatusError","orderStatusPollReducer","STATUS_MAP","SendIcon","InboxIcon","HourglassEmptyIcon","DoneAllIcon","LocalShippingIcon","CheckCircleIcon","BlockIcon","TERMINAL_STATUSES","POLL_INTERVAL_MS","POLL_MAX_DURATION_MS","OrderStatusDisplay","initialStatus","orderStatusData","orderStatusError","pollingExpired","statusConfig","labelKey","RefreshIcon","OrderStatusDisplay$1","GeneralDatasCard","orderApiId","initialOrderStatus","LocalDiningIcon","PlaceIcon","ScheduleIcon","GeneralDatasCard$1","ActionCheckCircle","ActionCheckCircle$1","PaymentDatasCard","ExpandMoreIcon","PaymentDatasCard$1","isIncognito","paymentPdfLink","errorPaymentPdfLink","postedOrderData","onRedirect","isFromWebApp","tmpStrReplace","instructionsText","bannerRef","PictureAsPdfIcon","View$9","ConfirmPage","redirectUriWithReplaceVariables","ConfirmPage$1","LoginViews","LoginFormView","forgottenPasswordLink","LoginFormView$1","login","LoginForm","authError","orderPostError","LoginForm$1","AuthTabs","view","onToggleView","AuthTabs$1","set_1","Cgu","CguLabel","linkClass","_RegisterFormView","formFields","registerError","cguLabel","restaurantCountry","restaurantsGroupDefaultLocale","userLightCookie","fieldInfo","fieldProps","acceptCgu","RegisterFormView","RegisterFormView$1","optionField","RegisterForm","allowIncognito","RegisterForm$1","UserLightFormView","UserLightFormView$1","Ask","Ask$1","UserLightForm","isFetchingOrder","captionTitle","captionText","UserLightForm$1","IncognitoFormView","IncognitoFormView$1","IncognitoForm","authMode","withCaption","IncognitoForm$1","displaySummary","View$7","LoginPage","errorOrderPost","newView","LoginPage$1","ForgotPasswordAction","forgotPassword","resetForgotPasswordData","getForgotPasswordError","getForgotPasswordData","getForgotPasswordIsFetching","DEFAULT_FORGOT_PASSWORD","forgotPasswordReducer","ForgotPasswordForm","LockOutline","LockOutline$1","forgotPasswordData","forgotPasswordError","ForgotPasswordFormView","View$5","ForgotPasswordPage","credentials","ForgotPasswordPage$1","ProfileFormView","fieldType","lastName","firstName","allowContact","ProfileFormView$1","userProfile","View$3","UserProfilePage","updateUserError","UserProfilePage$1","LeftBlock","blockType","handleLogout","LeftBlock$1","FlexBlock","opened","handleOnClick","FlexBlock$1","ProfileForm","handleOnClickBlock","submittedForm","ProfileForm$1","DeliveryAddresses","DeliveryAddresses$1","BlockType","goBackRoute","View$1","UserAccountPage","UserAccountPage$1","globalQueries","getQueries","configRoutes","initApp","getApiManagerOptions","loggerConfig","ApplicationView","Application","rootElement","ReactDOM","StrictMode","devMiddlewares","DeleteCart","EnhancedDeleteCartDialog","SelectedProductContainer","SelectedProductContainer$1","ProductDialog","EnhancedProductDialog","CustomTableCell","TableCell","DietaryInfoDialog","renderItem","renderRow","TableRow","renderPartCategory","Table","TableHead","TableBody","ListItemText","DesktopView","MobileView","EnhancedDietaryInfoDialog","SuggestionDialog","filledMenu","suggestions","EnhancedSuggestionDialog","UpsellingDialog","upsellingDialogContentGeneratedByAI","EnhancedUpsellingDialog","isItemUnavailable","errorList","errorItem","isOptionValueUnavailable","availability","cartItem","isMenuUnavailable","cartDiffMiddlewares","cartDiffReducer","CartDiffItemsDialog","productHasUnavailableValue","EnhancedCartDiffItemsDialog","LocalOffer","LocalOffer$1","CartModifierDialog","EnhancedCartModifierDialog","LoadingContainerView","errorData","manualRunView","shouldShow","shouldShowManualRunView","delegateErrorHandlingToChildrenResult","withWrapper","LoadingContainer","onUpdate","dontUpdateOnMount","delegateErrorHandlingToChildren","errorName","UnavailableDueDateDialog","DialogContentText","EnhancedUnavailableDueDateDialog","OrderModeDisabledDialog","EnhancedOrderModeDisabledDialog","RestaurantDisabledDialog","EnhancedRestaurantDisabledDialog","TableNotFoundDialog","EnhancedTableNotFoundDialog","Clock","Clock$1","ClosedStoreDialog","EnhancedClosedStoreDialog","ExpiredSessionDialog","EnhancedExpiredSessionDialog","VoucherFailedReasonEnum","getVoucherFailedReasonLabel","InvalidVouchersDialog","EnhancedInvalidVouchersDialog","LimitedStockItemsDialog","EnhancedLimitedStockItemsDialog","DeleteCartDialog","authenticatedUserReducer","AuthProAction","authProReducer","getCustomTextsSuccess","customTextsMiddlewares","customTextsReducer","getRestaurantsGroupIdOnAction","onRequest","onPatchRequest","onPatchFailure","onRequestPutGroupStoreList","onSuccessPutGroupStoreList","onFailurePutGroupStoreList","onRequestPutGroupGroupList","onSuccessPutGroupGroupList","onFailurePutGroupGroupList","restaurantsGroupReducer","FetchUserOrdersListAction","fetchUserOrdersList","cursor","getUserOrders","getUserOrderList","userOrders","getUserOrdersList","userOrdersList","userOrdersListData","makeGetUserOrdersListPagination","pagination","isFetchingUserOrdersList","UserOrderListContainer","userOrdersListPagination","getUserOrdersListPagination","userOrdersReducer","getPostPaymentData","getPaymentData","getPaymentMadeData","getItems","getPayment","paymentData","getPostPayment","postPaymentData","paymentMadeData","postPayment","CheckContainer","CheckWrappedComponent","checkError","childrenProps","forOwn","forOwn_1","CHECK","getDefaultShare","PAYMENT","persistExpireDelay","persistOptions","ACTION","makeEvent","catPrefix","getLabelForMode","EventsConfig","userProfileDietary","addUserAddress","appTokenCode","i18n","WCAG_AA_NORMAL_TEXT_RATIO","getAccessibleTextColor","background","minRatio","ratio","getContrastRatio","PMTColors","grey","blue","green","yellow","red","getPMTColor","getPMTColors","rawPrimaryColor","rawSecondaryColor","accessiblePrimaryColor","accessibleSecondaryColor","muiTheme","getLuminance","dark","light","rrfConfig","uploadRes","firebase"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,318,319,320,323,324,325,326,327,328,329,330,331,334,337,338,341,342,343,344,345,351,352,353,354,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,424,425,426,427,428,434,436,441,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,504,510,511,512,513,514,515,516,517,518,519,524,525,527,537,538,539,540,558,559,560,569,585,591,592,593,594,598,605,652,679,682,686,775,801,802,803,804,805,806,807,808,809,810,811,812,814,856,857,867,868,869,875,876,901,902,903,904,959,960,961,962,963,964,965,1265,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1500,1508,1509,1510,1511,1512,1513,1514,1515,1516,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1655,1734],"sources":["../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../node_modules/immutable/dist/immutable.js","../../node_modules/invariant/browser.js","../../node_modules/lodash/_freeGlobal.js","../../node_modules/lodash/_root.js","../../node_modules/lodash/_Symbol.js","../../node_modules/lodash/_getRawTag.js","../../node_modules/lodash/_objectToString.js","../../node_modules/lodash/_baseGetTag.js","../../node_modules/lodash/isObject.js","../../node_modules/lodash/isFunction.js","../../node_modules/lodash/isNil.js","../../pmt-react-sdk/node_modules/history/node_modules/warning/browser.js","../../pmt-react-sdk/node_modules/resolve-pathname/index.js","../../pmt-react-sdk/node_modules/value-equal/index.js","../../pmt-react-sdk/node_modules/history/PathUtils.js","../../pmt-react-sdk/node_modules/history/LocationUtils.js","../../pmt-react-sdk/node_modules/history/createTransitionManager.js","../../pmt-react-sdk/node_modules/history/DOMUtils.js","../../pmt-react-sdk/node_modules/history/createBrowserHistory.js","../../pmt-react-sdk/packages/modules/src/api/constants.js","../../pmt-react-sdk/packages/modules/src/api/utils.js","../../node_modules/lodash/_listCacheClear.js","../../node_modules/lodash/eq.js","../../node_modules/lodash/_assocIndexOf.js","../../node_modules/lodash/_listCacheDelete.js","../../node_modules/lodash/_listCacheGet.js","../../node_modules/lodash/_listCacheHas.js","../../node_modules/lodash/_listCacheSet.js","../../node_modules/lodash/_ListCache.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.js","../../node_modules/lodash/_coreJsData.js","../../node_modules/lodash/_isMasked.js","../../node_modules/lodash/_toSource.js","../../node_modules/lodash/_baseIsNative.js","../../node_modules/lodash/_getValue.js","../../node_modules/lodash/_getNative.js","../../node_modules/lodash/_Map.js","../../node_modules/lodash/_nativeCreate.js","../../node_modules/lodash/_hashClear.js","../../node_modules/lodash/_hashDelete.js","../../node_modules/lodash/_hashGet.js","../../node_modules/lodash/_hashHas.js","../../node_modules/lodash/_hashSet.js","../../node_modules/lodash/_Hash.js","../../node_modules/lodash/_mapCacheClear.js","../../node_modules/lodash/_isKeyable.js","../../node_modules/lodash/_getMapData.js","../../node_modules/lodash/_mapCacheDelete.js","../../node_modules/lodash/_mapCacheGet.js","../../node_modules/lodash/_mapCacheHas.js","../../node_modules/lodash/_mapCacheSet.js","../../node_modules/lodash/_MapCache.js","../../node_modules/lodash/_stackSet.js","../../node_modules/lodash/_Stack.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseAssignValue.js","../../node_modules/lodash/_assignMergeValue.js","../../node_modules/lodash/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_cloneBuffer.js","../../node_modules/lodash/_Uint8Array.js","../../node_modules/lodash/_cloneArrayBuffer.js","../../node_modules/lodash/_cloneTypedArray.js","../../node_modules/lodash/_copyArray.js","../../node_modules/lodash/_baseCreate.js","../../node_modules/lodash/_overArg.js","../../node_modules/lodash/_getPrototype.js","../../node_modules/lodash/_isPrototype.js","../../node_modules/lodash/_initCloneObject.js","../../node_modules/lodash/isObjectLike.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.js","../../node_modules/lodash/isArray.js","../../node_modules/lodash/isLength.js","../../node_modules/lodash/isArrayLike.js","../../node_modules/lodash/isArrayLikeObject.js","../../node_modules/lodash/stubFalse.js","../../node_modules/lodash/isBuffer.js","../../node_modules/lodash/isPlainObject.js","../../node_modules/lodash/_baseIsTypedArray.js","../../node_modules/lodash/_baseUnary.js","../../node_modules/lodash/_nodeUtil.js","../../node_modules/lodash/isTypedArray.js","../../node_modules/lodash/_safeGet.js","../../node_modules/lodash/_assignValue.js","../../node_modules/lodash/_copyObject.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/_isIndex.js","../../node_modules/lodash/_arrayLikeKeys.js","../../node_modules/lodash/_nativeKeysIn.js","../../node_modules/lodash/_baseKeysIn.js","../../node_modules/lodash/keysIn.js","../../node_modules/lodash/toPlainObject.js","../../node_modules/lodash/_baseMergeDeep.js","../../node_modules/lodash/_baseMerge.js","../../node_modules/lodash/identity.js","../../node_modules/lodash/_apply.js","../../node_modules/lodash/_overRest.js","../../node_modules/lodash/constant.js","../../node_modules/lodash/_baseSetToString.js","../../node_modules/lodash/_shortOut.js","../../node_modules/lodash/_setToString.js","../../node_modules/lodash/_baseRest.js","../../node_modules/lodash/_isIterateeCall.js","../../node_modules/lodash/_createAssigner.js","../../node_modules/lodash/merge.js","../../pmt-react-sdk/packages/modules/src/environment/defaultEnv.js","../../pmt-react-sdk/packages/modules/src/environment/environment.js","../../node_modules/lodash/_nativeKeys.js","../../node_modules/lodash/_baseKeys.js","../../node_modules/lodash/_DataView.js","../../node_modules/lodash/_Promise.js","../../node_modules/lodash/_Set.js","../../node_modules/lodash/_WeakMap.js","../../node_modules/lodash/_getTag.js","../../node_modules/lodash/isEmpty.js","../../node_modules/lodash/isNumber.js","../../node_modules/lodash/isNaN.js","../../node_modules/lodash/isString.js","../../node_modules/lodash/_baseFindIndex.js","../../node_modules/lodash/_setCacheAdd.js","../../node_modules/lodash/_setCacheHas.js","../../node_modules/lodash/_SetCache.js","../../node_modules/lodash/_arraySome.js","../../node_modules/lodash/_cacheHas.js","../../node_modules/lodash/_equalArrays.js","../../node_modules/lodash/_mapToArray.js","../../node_modules/lodash/_setToArray.js","../../node_modules/lodash/_equalByTag.js","../../node_modules/lodash/_arrayPush.js","../../node_modules/lodash/_baseGetAllKeys.js","../../node_modules/lodash/_arrayFilter.js","../../node_modules/lodash/stubArray.js","../../node_modules/lodash/_getSymbols.js","../../node_modules/lodash/keys.js","../../node_modules/lodash/_getAllKeys.js","../../node_modules/lodash/_equalObjects.js","../../node_modules/lodash/_baseIsEqualDeep.js","../../node_modules/lodash/_baseIsEqual.js","../../node_modules/lodash/_baseIsMatch.js","../../node_modules/lodash/_isStrictComparable.js","../../node_modules/lodash/_getMatchData.js","../../node_modules/lodash/_matchesStrictComparable.js","../../node_modules/lodash/_baseMatches.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/_isKey.js","../../node_modules/lodash/memoize.js","../../node_modules/lodash/_memoizeCapped.js","../../node_modules/lodash/_stringToPath.js","../../node_modules/lodash/_arrayMap.js","../../node_modules/lodash/_baseToString.js","../../node_modules/lodash/toString.js","../../node_modules/lodash/_castPath.js","../../node_modules/lodash/_toKey.js","../../node_modules/lodash/_baseGet.js","../../node_modules/lodash/get.js","../../node_modules/lodash/_baseHasIn.js","../../node_modules/lodash/_hasPath.js","../../node_modules/lodash/hasIn.js","../../node_modules/lodash/_baseMatchesProperty.js","../../node_modules/lodash/_baseProperty.js","../../node_modules/lodash/_basePropertyDeep.js","../../node_modules/lodash/property.js","../../node_modules/lodash/_baseIteratee.js","../../node_modules/lodash/_trimmedEndIndex.js","../../node_modules/lodash/_baseTrim.js","../../node_modules/lodash/toNumber.js","../../node_modules/lodash/toFinite.js","../../node_modules/lodash/toInteger.js","../../node_modules/lodash/findIndex.js","../../node_modules/lodash/_baseIsNaN.js","../../node_modules/lodash/_strictIndexOf.js","../../node_modules/lodash/_baseIndexOf.js","../../node_modules/lodash/indexOf.js","../../node_modules/lodash/_createFind.js","../../node_modules/lodash/find.js","../../node_modules/lodash/_arrayEach.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_createBaseEach.js","../../node_modules/lodash/_baseEach.js","../../node_modules/lodash/_castFunction.js","../../node_modules/lodash/forEach.js","../../node_modules/lodash/isUndefined.js","../../node_modules/lodash/isNull.js","../../node_modules/lodash/_baseMap.js","../../node_modules/lodash/map.js","../../node_modules/lodash/_baseAssign.js","../../node_modules/lodash/_baseAssignIn.js","../../node_modules/lodash/_copySymbols.js","../../node_modules/lodash/_getSymbolsIn.js","../../node_modules/lodash/_copySymbolsIn.js","../../node_modules/lodash/_getAllKeysIn.js","../../node_modules/lodash/_initCloneArray.js","../../node_modules/lodash/_cloneDataView.js","../../node_modules/lodash/_cloneRegExp.js","../../node_modules/lodash/_cloneSymbol.js","../../node_modules/lodash/_initCloneByTag.js","../../node_modules/lodash/_baseIsMap.js","../../node_modules/lodash/isMap.js","../../node_modules/lodash/_baseIsSet.js","../../node_modules/lodash/isSet.js","../../node_modules/lodash/_baseClone.js","../../node_modules/lodash/clone.js","../../node_modules/lodash/_arrayIncludes.js","../../node_modules/lodash/_arrayIncludesWith.js","../../node_modules/lodash/noop.js","../../node_modules/lodash/_createSet.js","../../node_modules/lodash/_baseUniq.js","../../node_modules/lodash/uniqBy.js","../../node_modules/lodash/_baseValues.js","../../node_modules/lodash/values.js","../../node_modules/lodash/_isFlattenable.js","../../node_modules/lodash/_baseFlatten.js","../../node_modules/lodash/_baseSortBy.js","../../node_modules/lodash/_compareAscending.js","../../node_modules/lodash/_compareMultiple.js","../../node_modules/lodash/_baseOrderBy.js","../../node_modules/lodash/sortBy.js","../../pmt-react-sdk/packages/utils/src/array/index.js","../../pmt-react-sdk/packages/utils/src/url/index.js","../../pmt-react-sdk/packages/modules/src/environment/getters.js","../../pmt-react-sdk/packages/modules/src/store/index.js","../../pmt-react-sdk/packages/modules/src/redux/createAction.js","../../pmt-react-sdk/packages/modules/src/redux/createReducer.js","../../node_modules/reselect/es/index.js","../../node_modules/lodash/concat.js","../../node_modules/lodash/uniqWith.js","../../pmt-react-sdk/packages/modules/src/redux/createPaginateReducer.js","../../node_modules/@sentry/utils/esm/is.js","../../node_modules/@sentry/utils/esm/string.js","../../node_modules/@sentry/utils/esm/aggregate-errors.js","../../node_modules/@sentry/utils/esm/worldwide.js","../../node_modules/@sentry/utils/esm/browser.js","../../node_modules/@sentry/utils/esm/debug-build.js","../../node_modules/@sentry/utils/esm/logger.js","../../node_modules/@sentry/utils/esm/dsn.js","../../node_modules/@sentry/utils/esm/error.js","../../node_modules/@sentry/utils/esm/object.js","../../node_modules/@sentry/utils/esm/stacktrace.js","../../node_modules/@sentry/utils/esm/instrument/_handlers.js","../../node_modules/@sentry/utils/esm/instrument/console.js","../../node_modules/@sentry/utils/esm/misc.js","../../node_modules/@sentry/utils/esm/instrument/dom.js","../../node_modules/@sentry/utils/esm/supports.js","../../node_modules/@sentry/utils/esm/instrument/fetch.js","../../node_modules/@sentry/utils/esm/instrument/globalError.js","../../node_modules/@sentry/utils/esm/instrument/globalUnhandledRejection.js","../../node_modules/@sentry/utils/esm/vendor/supportsHistory.js","../../node_modules/@sentry/utils/esm/instrument/history.js","../../node_modules/@sentry/utils/esm/instrument/xhr.js","../../node_modules/@sentry/utils/esm/env.js","../../node_modules/@sentry/utils/esm/memo.js","../../node_modules/@sentry/utils/esm/normalize.js","../../node_modules/@sentry/utils/esm/syncpromise.js","../../node_modules/@sentry/utils/esm/promisebuffer.js","../../node_modules/@sentry/utils/esm/url.js","../../node_modules/@sentry/utils/esm/severity.js","../../node_modules/@sentry/utils/esm/time.js","../../node_modules/@sentry/utils/esm/envelope.js","../../node_modules/@sentry/utils/esm/clientreport.js","../../node_modules/@sentry/utils/esm/ratelimit.js","../../node_modules/@sentry/core/esm/debug-build.js","../../node_modules/@sentry/core/esm/constants.js","../../node_modules/@sentry/core/esm/eventProcessors.js","../../node_modules/@sentry/core/esm/session.js","../../node_modules/@sentry/core/esm/utils/spanUtils.js","../../node_modules/@sentry/core/esm/utils/prepareEvent.js","../../node_modules/@sentry/core/esm/exports.js","../../node_modules/@sentry/core/esm/utils/getRootSpan.js","../../node_modules/@sentry/core/esm/tracing/dynamicSamplingContext.js","../../node_modules/@sentry/core/esm/utils/applyScopeDataToEvent.js","../../node_modules/@sentry/core/esm/scope.js","../../node_modules/@sentry/core/esm/version.js","../../node_modules/@sentry/core/esm/hub.js","../../node_modules/@sentry/core/esm/envelope.js","../../node_modules/@sentry/core/esm/api.js","../../node_modules/@sentry/core/esm/integration.js","../../node_modules/@sentry/core/esm/metrics/utils.js","../../node_modules/@sentry/core/esm/metrics/envelope.js","../../node_modules/@sentry/core/esm/baseclient.js","../../node_modules/@sentry/core/esm/sdk.js","../../node_modules/@sentry/core/esm/transports/base.js","../../node_modules/@sentry/core/esm/utils/sdkMetadata.js","../../node_modules/@sentry/core/esm/integrations/inboundfilters.js","../../node_modules/@sentry/core/esm/integrations/functiontostring.js","../../node_modules/@sentry/browser/esm/helpers.js","../../node_modules/@sentry/browser/esm/debug-build.js","../../node_modules/@sentry/browser/esm/eventbuilder.js","../../node_modules/@sentry/browser/esm/userfeedback.js","../../node_modules/@sentry/browser/esm/client.js","../../node_modules/@sentry/browser/esm/transports/utils.js","../../node_modules/@sentry/browser/esm/transports/fetch.js","../../node_modules/@sentry/browser/esm/transports/xhr.js","../../node_modules/@sentry/browser/esm/stack-parsers.js","../../node_modules/@sentry/browser/esm/integrations/breadcrumbs.js","../../node_modules/@sentry/browser/esm/integrations/dedupe.js","../../node_modules/@sentry/browser/esm/integrations/globalhandlers.js","../../node_modules/@sentry/browser/esm/integrations/httpcontext.js","../../node_modules/@sentry/browser/esm/integrations/linkederrors.js","../../node_modules/@sentry/browser/esm/integrations/trycatch.js","../../node_modules/@sentry/browser/esm/sdk.js","../../node_modules/uuid/dist/stringify.js","../../node_modules/uuid/dist/rng.js","../../node_modules/uuid/dist/v4.js","../../pmt-react-sdk/packages/utils/src/uuid/index.js","../../pmt-react-sdk/packages/modules/src/storage/index.js","../../pmt-react-sdk/packages/modules/src/frontSession/index.js","../../pmt-react-sdk/packages/utils/src/logger/index.js","../../pmt-react-sdk/packages/modules/src/redux/createSimpleSelector.js","../../pmt-react-sdk/packages/modules/src/redux/createSimpleReducer.js","../../pmt-react-sdk/packages/modules/src/redux/createMiddleware.js","../../pmt-react-sdk/packages/modules/src/redux/createReducerPerObject.js","../../pmt-react-sdk/packages/modules/src/redux/createSelectorsPerObject.js","../../node_modules/symbol-observable/es/ponyfill.js","../../node_modules/symbol-observable/es/index.js","../../node_modules/redux/es/redux.js","../../pmt-react-sdk/packages/modules/src/i18n/actions.js","../../pmt-react-sdk/packages/modules/src/i18n/constants.js","../../node_modules/lodash/_baseSlice.js","../../node_modules/lodash/_castSlice.js","../../node_modules/lodash/_hasUnicode.js","../../node_modules/lodash/_asciiToArray.js","../../node_modules/lodash/_unicodeToArray.js","../../node_modules/lodash/_stringToArray.js","../../node_modules/lodash/_createCaseFirst.js","../../node_modules/lodash/upperFirst.js","../../node_modules/lodash/capitalize.js","../../pmt-react-sdk/packages/utils/src/locale/index.js","../../pmt-react-sdk/packages/modules/src/i18n/storage.js","../../node_modules/flatpickr/dist/flatpickr.js","../../pmt-react-sdk/packages/modules/src/i18n/utils.js","../../pmt-react-sdk/packages/modules/src/i18n/selectors.js","../../node_modules/lodash/_baseClamp.js","../../node_modules/lodash/startsWith.js","../../pmt-react-sdk/packages/modules/src/i18n/format.js","../../pmt-react-sdk/packages/modules/src/i18n/index.js","../../node_modules/lodash/negate.js","../../node_modules/lodash/_baseSet.js","../../node_modules/lodash/_basePickBy.js","../../node_modules/lodash/pickBy.js","../../node_modules/lodash/omitBy.js","../../pmt-react-sdk/packages/modules/src/api/errors/GlobalErrors.js","../../pmt-react-sdk/packages/modules/src/api/ApiManager.js","../../pmt-react-sdk/packages/modules/src/event/Events.js","../../pmt-react-sdk/packages/modules/src/event/EventManager.js","../../pmt-react-sdk/packages/modules/src/event/components/containers/SendEventContainer.js","../../node_modules/react-ga4/dist/gtag.js","../../node_modules/react-ga4/dist/format.js","../../node_modules/react-ga4/dist/ga4.js","../../node_modules/react-ga4/dist/index.js","../../pmt-react-sdk/packages/modules/src/cookieConsent/index.js","../../pmt-react-sdk/packages/modules/src/analytics/utils.js","../../pmt-react-sdk/packages/modules/src/analytics/index.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","../../node_modules/redux-persist/es/createTransform.js","../../node_modules/redux-persist/lib/storage/getStorage.js","../../node_modules/redux-persist/lib/storage/createWebStorage.js","../../node_modules/redux-persist/lib/storage/index.js","../../node_modules/redux-persist/lib/stateReconciler/hardSet.js","../../node_modules/jsan/lib/path-getter.js","../../node_modules/jsan/lib/utils.js","../../node_modules/jsan/lib/cycle.js","../../node_modules/jsan/lib/index.js","../../node_modules/jsan/index.js","../../node_modules/@redux-devtools/serialize/lib/esm/helpers/index.js","../../node_modules/@redux-devtools/serialize/lib/esm/constants/options.js","../../node_modules/@redux-devtools/serialize/lib/esm/immutable/serialize.js","../../node_modules/@redux-devtools/serialize/lib/esm/immutable/index.js","../../pmt-react-sdk/packages/modules/src/redux/immutableTransform.js","../../node_modules/react-redux/es/components/Context.js","../../node_modules/react-redux/es/utils/batch.js","../../node_modules/react-redux/es/utils/Subscription.js","../../node_modules/react-redux/es/components/Provider.js","../../node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../../node_modules/react-redux/es/components/connectAdvanced.js","../../node_modules/react-redux/es/utils/shallowEqual.js","../../node_modules/react-redux/es/connect/wrapMapToProps.js","../../node_modules/react-redux/es/connect/mapDispatchToProps.js","../../node_modules/react-redux/es/connect/mapStateToProps.js","../../node_modules/react-redux/es/connect/mergeProps.js","../../node_modules/react-redux/es/connect/selectorFactory.js","../../node_modules/react-redux/es/connect/connect.js","../../node_modules/react-redux/es/hooks/useReduxContext.js","../../node_modules/react-redux/es/hooks/useStore.js","../../node_modules/react-redux/es/hooks/useDispatch.js","../../node_modules/react-redux/es/hooks/useSelector.js","../../node_modules/react-redux/es/index.js","../../node_modules/mini-create-react-context/dist/esm/index.js","../../node_modules/resolve-pathname/esm/resolve-pathname.js","../../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../../node_modules/history/esm/history.js","../../node_modules/path-to-regexp/node_modules/isarray/index.js","../../node_modules/path-to-regexp/index.js","../../node_modules/react-router/esm/react-router.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/actions.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/selectors.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/ConnectedRouter.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/reducer.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/structure/plain/getIn.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/structure/plain/index.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/middleware.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/index.js","../../pmt-react-sdk/packages/modules/src/reduxUi/actions.js","../../pmt-react-sdk/packages/modules/src/reduxUi/selectors.js","../../pmt-react-sdk/packages/modules/src/reduxUi/utils.js","../../pmt-react-sdk/packages/modules/src/reduxUi/UiContainer.js","../../pmt-react-sdk/packages/modules/src/reduxUi/ui.js","../../pmt-react-sdk/packages/modules/src/reduxUi/index.js","../../pmt-react-sdk/packages/ui/src/styles/index.js","../../pmt-react-sdk/packages/modules/src/theme/currentTheme.js","../../pmt-react-sdk/packages/modules/src/theme/theme.js","../../pmt-react-sdk/packages/modules/src/theme/selectors.js","../../pmt-react-sdk/packages/modules/src/theme/index.js","../../node_modules/lodash/last.js","../../node_modules/lodash/_parent.js","../../node_modules/lodash/_baseUnset.js","../../node_modules/lodash/_basePullAt.js","../../node_modules/lodash/remove.js","../../pmt-react-sdk/packages/modules/src/dialog/constants/ModalType.js","../../pmt-react-sdk/packages/modules/src/dialog/actions.js","../../pmt-react-sdk/packages/modules/src/dialog/config.js","../../pmt-react-sdk/packages/modules/src/dialog/selectors.js","../../pmt-react-sdk/packages/modules/src/dialog/components/DialogRoot.js","../../node_modules/lodash/isEqual.js","../../pmt-react-sdk/packages/modules/src/routing/constants/index.js","../../node_modules/lodash/forIn.js","../../pmt-react-sdk/packages/modules/src/routing/model/Route.js","../../pmt-react-sdk/packages/modules/src/routing/constants/SdkRoutingEnum.js","../../pmt-react-sdk/packages/modules/src/routing/config.js","../../pmt-react-sdk/packages/modules/src/routing/actions.js","../../node_modules/react-router-dom/esm/react-router-dom.js","../../pmt-react-sdk/packages/modules/src/routing/components/Link/Link.js","../../pmt-react-sdk/packages/modules/src/routing/components/RoutingContainer/RoutingContainer.js","../../pmt-react-sdk/packages/modules/src/dialog/middlewares.js","../../pmt-react-sdk/packages/modules/src/dialog/index.js","../../pmt-react-sdk/packages/modules/src/archi/utils/uxReducer.js","../../pmt-react-sdk/packages/modules/src/form/constants.js","../../pmt-react-sdk/packages/modules/src/form/config.js","../../pmt-react-sdk/packages/modules/src/form/actions.js","../../pmt-react-sdk/packages/modules/src/dataCatcher/DataCatcherType.js","../../pmt-react-sdk/packages/modules/src/dataCatcher/config.js","../../pmt-react-sdk/packages/modules/src/form/FormType.js","../../pmt-react-sdk/packages/modules/src/dataCatcher/actions.js","../../pmt-react-sdk/packages/modules/src/dataCatcher/index.js","../../pmt-react-sdk/packages/modules/src/form/createFormCustomAction.js","../../pmt-react-sdk/packages/utils/src/email/blackList.js","../../pmt-react-sdk/packages/utils/src/email/index.js","../../pmt-react-sdk/packages/utils/src/country/countryCodes.js","../../pmt-react-sdk/packages/utils/src/phone/index.js","../../pmt-react-sdk/packages/modules/src/form/validation/predicates/index.js","../../node_modules/ramda/src/internal/_isPlaceholder.js","../../node_modules/ramda/src/internal/_curry1.js","../../node_modules/ramda/src/internal/_identity.js","../../node_modules/ramda/src/identity.js","../../node_modules/ramda/src/internal/_curry2.js","../../node_modules/ramda/src/internal/_isArray.js","../../node_modules/ramda/src/internal/_isTransformer.js","../../node_modules/ramda/src/internal/_dispatchable.js","../../node_modules/ramda/src/internal/_map.js","../../node_modules/ramda/src/internal/_isString.js","../../node_modules/ramda/src/internal/_isArrayLike.js","../../node_modules/ramda/src/internal/_xwrap.js","../../node_modules/ramda/src/internal/_arity.js","../../node_modules/ramda/src/bind.js","../../node_modules/ramda/src/internal/_reduce.js","../../node_modules/ramda/src/internal/_xfBase.js","../../node_modules/ramda/src/internal/_xmap.js","../../node_modules/ramda/src/internal/_curryN.js","../../node_modules/ramda/src/curryN.js","../../node_modules/ramda/src/internal/_has.js","../../node_modules/ramda/src/internal/_isArguments.js","../../node_modules/ramda/src/keys.js","../../node_modules/ramda/src/map.js","../../node_modules/ramda/src/internal/_curry3.js","../../node_modules/ramda/src/reduce.js","../../node_modules/ramda/src/curry.js","../../node_modules/ramda/src/internal/_filter.js","../../node_modules/ramda/src/internal/_isObject.js","../../node_modules/ramda/src/internal/_xfilter.js","../../node_modules/ramda/src/filter.js","../../node_modules/ramda/src/internal/_arrayFromIterator.js","../../node_modules/ramda/src/internal/_functionName.js","../../node_modules/ramda/src/identical.js","../../node_modules/ramda/src/type.js","../../node_modules/ramda/src/internal/_equals.js","../../node_modules/ramda/src/equals.js","../../node_modules/ramda/src/internal/_reduced.js","../../node_modules/ramda/src/internal/_xall.js","../../node_modules/ramda/src/all.js","../../node_modules/spected/lib/index.js","../../node_modules/lodash/each.js","../../pmt-react-sdk/packages/modules/src/form/validation/validator.js","../../pmt-react-sdk/packages/modules/src/form/selectors.js","../../pmt-react-sdk/node_modules/clsx/dist/clsx.mjs","../../pmt-react-sdk/packages/ui/src/Button/ButtonFlat.js","../../pmt-react-sdk/packages/ui/src/LoadingBlock/LoadingBlock.js","../../pmt-react-sdk/packages/ui/src/LoadingBlock/LoadingBlockWrapper.js","../../pmt-react-sdk/packages/modules/src/form/components/FormButtons.js","../../pmt-react-sdk/packages/ui/src/ErrorBlock/actions.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inheritsLoose.js","../../node_modules/recompose/setStatic.js","../../node_modules/recompose/setDisplayName.js","../../node_modules/recompose/getDisplayName.js","../../node_modules/recompose/wrapDisplayName.js","../../node_modules/recompose/shouldUpdate.js","../../node_modules/fbjs/lib/shallowEqual.js","../../node_modules/recompose/shallowEqual.js","../../node_modules/recompose/pure.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/close.js","../../pmt-react-sdk/packages/ui/src/Snackbar/SnackbarContainer.js","../../pmt-react-sdk/packages/ui/src/ErrorBlock/SnackbarError.js","../../pmt-react-sdk/packages/ui/src/ErrorBlock/ErrorBlock.js","../../node_modules/lodash/isEqualWith.js","../../node_modules/lodash/union.js","../../pmt-react-sdk/packages/modules/src/form/utils.js","../../node_modules/lodash/cloneDeep.js","../../pmt-react-sdk/packages/modules/src/form/components/FormContainer.js","../../pmt-react-sdk/packages/modules/src/form/components/FormsContainer.js","../../pmt-react-sdk/packages/modules/src/form/components/withForm.js","../../pmt-react-sdk/packages/modules/src/form/components/withForms.js","../../pmt-react-sdk/packages/modules/src/form/createForm.js","../../pmt-react-sdk/packages/modules/src/form/index.js","../../pmt-react-sdk/packages/modules/src/search/config.js","../../pmt-react-sdk/packages/modules/src/search/actions.js","../../pmt-react-sdk/packages/modules/src/search/selectors.js","../../node_modules/lodash/_customOmitClone.js","../../node_modules/lodash/flatten.js","../../node_modules/lodash/_flatRest.js","../../node_modules/lodash/omit.js","../../pmt-react-sdk/packages/modules/src/search/components/Search.js","../../pmt-react-sdk/packages/modules/src/search/components/SearchContainer.js","../../pmt-react-sdk/packages/modules/src/search/index.js","../../pmt-react-sdk/packages/modules/src/statistics/config.js","../../pmt-react-sdk/packages/modules/src/statistics/actions.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/trending-up.js","../../pmt-react-sdk/packages/utils/src/string/index.js","../../pmt-react-sdk/packages/ui/src/Typography/TypographyCustom.js","../../pmt-react-sdk/packages/modules/src/statistics/components/Graph.js","../../pmt-react-sdk/packages/modules/src/statistics/selectors.js","../../pmt-react-sdk/packages/modules/src/statistics/components/StatisticsContainer.js","../../pmt-react-sdk/packages/modules/src/statistics/constants.js","../../pmt-react-sdk/packages/modules/src/statistics/utils.js","../../pmt-react-sdk/packages/modules/src/statistics/components/StatisticsGroupContainer.js","../../pmt-react-sdk/packages/utils/src/date/index.js","../../pmt-react-sdk/packages/ui/src/Calendar/CalendarMode.js","../../pmt-react-sdk/packages/ui/src/Calendar/Calendar.js","../../node_modules/lodash/_baseRange.js","../../node_modules/lodash/_createRange.js","../../node_modules/lodash/range.js","../../pmt-react-sdk/packages/ui/src/ListChooser/PopoverView.js","../../pmt-react-sdk/packages/ui/src/ListChooser/DialogView.js","../../pmt-react-sdk/packages/ui/src/ListChooser/ListChooserType.js","../../pmt-react-sdk/packages/ui/src/ListChooser/ViewType.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/Pagination.js","../../pmt-react-sdk/packages/utils/src/theme/colorManipulator.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/Body.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/Header.js","../../node_modules/fuse.js/dist/fuse.js","../../pmt-react-sdk/packages/ui/src/ListChooser/Content.js","../../pmt-react-sdk/packages/ui/src/svg-icons/content/clear.js","../../pmt-react-sdk/packages/ui/src/TextFieldCustom/TextFieldSuffixType.js","../../pmt-react-sdk/packages/ui/src/TextFieldCustom/index.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/ValueView.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/EmptyValue.js","../../pmt-react-sdk/packages/ui/src/ListChooser/ListChooser.js","../../pmt-react-sdk/packages/ui/src/DateField/InlineDate.js","../../pmt-react-sdk/packages/ui/src/DateField/DateField.js","../../pmt-react-sdk/packages/modules/src/statistics/components/StatisticsOptionsModifierContainer.js","../../pmt-react-sdk/packages/modules/src/statistics/index.js","../../pmt-react-sdk/packages/modules/src/reducers/index.js","../../pmt-react-sdk/packages/modules/src/archi/utils/reduxPersistTransformExpire.js","../../pmt-react-sdk/packages/modules/src/archi/utils/configureRootReducer.js","../../pmt-react-sdk/packages/modules/src/archi/store/createStoreCustom.js","../../node_modules/redux-thunk/es/index.js","../../pmt-react-sdk/packages/modules/src/archi/middleware/crashReporter.js","../../pmt-react-sdk/packages/modules/src/api/actions.js","../../pmt-react-sdk/packages/modules/src/api/middlewares/api.js","../../pmt-react-sdk/packages/modules/src/auth/constants.js","../../pmt-react-sdk/packages/modules/src/auth/utils/index.js","../../node_modules/lodash/_asciiSize.js","../../node_modules/lodash/_unicodeSize.js","../../node_modules/lodash/_stringSize.js","../../node_modules/lodash/size.js","../../pmt-react-sdk/packages/modules/src/appConfig/constants/index.js","../../pmt-react-sdk/packages/modules/src/appConfig/format/texts.js","../../pmt-react-sdk/packages/modules/src/appConfig/config.js","../../node_modules/lodash/mergeWith.js","../../pmt-react-sdk/packages/modules/src/appConfig/utils.js","../../pmt-react-sdk/packages/utils/src/currency/index.js","../../pmt-react-sdk/packages/utils/src/format/createDeepFormatter.js","../../pmt-react-sdk/packages/utils/src/format/createFormatter.js","../../pmt-react-sdk/packages/utils/src/format/createListFormatter.js","../../pmt-react-sdk/packages/utils/src/format/createMapFormatter.js","../../node_modules/lodash/includes.js","../../pmt-react-sdk/packages/utils/src/format/createSubObjectFormatter.js","../../pmt-react-sdk/packages/modules/src/catalog/constants/index.js","../../pmt-react-sdk/packages/modules/src/catalog/format/cartModifiers.js","../../pmt-react-sdk/packages/modules/src/fees/constants.js","../../pmt-react-sdk/packages/modules/src/fees/order/format.js","../../pmt-react-sdk/packages/modules/src/fees/settings/format.js","../../pmt-react-sdk/packages/modules/src/fees/utils.js","../../pmt-react-sdk/packages/modules/src/payment/check/format/entry.js","../../pmt-react-sdk/packages/modules/src/payment/check/format/index.js","../../pmt-react-sdk/packages/utils/src/browser/index.js","../../pmt-react-sdk/packages/modules/src/payment/payment/format/item.js","../../pmt-react-sdk/packages/modules/src/payment/payment/format/index.js","../../pmt-react-sdk/packages/utils/src/geoloc/index.js","../../pmt-react-sdk/packages/modules/src/restaurant/constants.js","../../pmt-react-sdk/packages/modules/src/restaurant/format/openingHours.js","../../pmt-react-sdk/packages/modules/src/restaurant/format/orderSettings.js","../../pmt-react-sdk/packages/modules/src/global/constants/Feature.js","../../pmt-react-sdk/packages/modules/src/global/constants/PaymentType.js","../../pmt-react-sdk/packages/utils/src/bit/index.js","../../pmt-react-sdk/packages/modules/src/global/format/features.js","../../pmt-react-sdk/packages/utils/src/country/index.js","../../pmt-react-sdk/packages/modules/src/psp/format.js","../../pmt-react-sdk/packages/modules/src/restaurant/format/formatLegal.js","../../pmt-react-sdk/packages/modules/src/restaurant/format/index.js","../../pmt-react-sdk/packages/modules/src/thirdParty/constants.js","../../pmt-react-sdk/packages/utils/src/google/index.js","../../pmt-react-sdk/packages/ui/src/StatusChip/index.js","../../pmt-react-sdk/packages/modules/src/order/constants/OrderMode.js","../../pmt-react-sdk/packages/modules/src/order/constants/OrderStatus.js","../../pmt-react-sdk/packages/modules/src/order/constants/index.js","../../pmt-react-sdk/packages/modules/src/order/format/formatAdmissionFees.js","../../pmt-react-sdk/packages/modules/src/order/format/formatUserAccountPayment.js","../../pmt-react-sdk/packages/modules/src/order/format/index.js","../../pmt-react-sdk/packages/modules/src/apiConsumer/constants.js","../../pmt-react-sdk/packages/modules/src/appConfig/format/index.js","../../pmt-react-sdk/packages/modules/src/appConfig/selectors.js","../../pmt-react-sdk/packages/modules/src/api/config/ApiEndpoints.js","../../pmt-react-sdk/packages/modules/src/api/errors/AuthErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/AuthApi.js","../../pmt-react-sdk/packages/modules/src/api/errors/UserErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/UserApi.js","../../pmt-react-sdk/packages/modules/src/auth/actions.js","../../pmt-react-sdk/packages/modules/src/auth/refreshToken/actions.js","../../pmt-react-sdk/packages/modules/src/auth/selectors.js","../../pmt-react-sdk/packages/modules/src/api/calls/AppConfigApi.js","../../pmt-react-sdk/packages/modules/src/appConfig/actions.js","../../node_modules/recompose/compose.js","../../pmt-react-sdk/packages/modules/src/appSecurity/actions.js","../../pmt-react-sdk/packages/modules/src/appSecurity/constants.js","../../pmt-react-sdk/packages/modules/src/appSecurity/utils.js","../../pmt-react-sdk/packages/modules/src/appSecurity/middlewares.js","../../pmt-react-sdk/packages/modules/src/appSecurity/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/alert/error.js","../../pmt-react-sdk/packages/modules/src/appConfig/components/AppConfigContainer.js","../../pmt-react-sdk/packages/modules/src/appConfig/components/withAppConfig.js","../../pmt-react-sdk/packages/modules/src/appConfig/events.js","../../pmt-react-sdk/packages/utils/src/theme/palette.js","../../pmt-react-sdk/packages/utils/src/theme/theme.js","../../pmt-react-sdk/packages/modules/src/customTexts/format.js","../../pmt-react-sdk/packages/modules/src/customTexts/selectors.js","../../pmt-react-sdk/packages/modules/src/appConfig/middlewares.js","../../pmt-react-sdk/packages/modules/src/appConfig/index.js","../../pmt-react-sdk/packages/modules/src/auth/refreshToken/middlewares.js","../../pmt-react-sdk/packages/modules/src/auth/middlewares.js","../../pmt-react-sdk/packages/modules/src/auth/index.js","../../pmt-react-sdk/packages/modules/src/api/middlewares/unauthorizedMiddleware.js","../../pmt-react-sdk/packages/modules/src/authPro/selectors.js","../../pmt-react-sdk/packages/modules/src/authRestaurant/selectors.js","../../pmt-react-sdk/packages/modules/src/auth/refreshToken/preAttemptRefresh.js","../../pmt-react-sdk/packages/modules/src/auth/refreshToken/attemptRefresh.js","../../pmt-react-sdk/packages/modules/src/api/middlewares/oauthUtils.js","../../pmt-react-sdk/packages/modules/src/api/middlewares/requestConfigurationMiddleware.js","../../pmt-react-sdk/packages/modules/src/i18n/middlewares.js","../../node_modules/redux-logger/dist/redux-logger.js","../../pmt-react-sdk/packages/modules/src/archi/store/generateMiddlewares.js","../../pmt-react-sdk/packages/modules/src/archi/store/configureStore.prod.js","../../node_modules/redux-devtools-extension/index.js","../../pmt-react-sdk/packages/modules/src/archi/store/configureStore.js","../../pmt-react-sdk/packages/utils/src/errorHandlers/index.js","../../pmt-react-sdk/packages/modules/src/archi/registerServiceWorker.js","../../node_modules/redux-persist/es/integration/react.js","../../pmt-react-sdk/packages/ui/src/ErrorBoundary/components/ErrorOccurredView.js","../../pmt-react-sdk/packages/ui/src/ErrorBoundary/ErrorBoundary.js","../../pmt-react-sdk/packages/ui/src/Layout/index.js","../../pmt-react-sdk/packages/modules/src/dev/pages/theme/index.js","../../pmt-react-sdk/packages/ui/src/Card/constants.js","../../pmt-react-sdk/packages/ui/src/svg-icons/editor/mode-edit.js","../../pmt-react-sdk/packages/ui/src/Card/components/Actions.js","../../pmt-react-sdk/packages/ui/src/Card/CardBasic.js","../../pmt-react-sdk/packages/ui/src/Card/CardPostIt.js","../../pmt-react-sdk/packages/ui/src/Card/CardSection.js","../../pmt-react-sdk/packages/ui/src/Card/CardItem.js","../../pmt-react-sdk/packages/ui/src/svg-icons/social/person.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/LogoGrey.js","../../pmt-react-sdk/packages/modules/src/dev/pages/styleguide/parts/calendar.js","../../pmt-react-sdk/packages/modules/src/user/constants/Allergen.js","../../pmt-react-sdk/packages/ui/src/CountryChooser/CountryChooser.js","../../pmt-react-sdk/packages/modules/src/user/constants/Diet.js","../../pmt-react-sdk/packages/modules/src/user/constants/Gender.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/celery.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/cheese.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/crab.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/egg.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/fish.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/lupine.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/milk.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/mustard.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/nut.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/peanuts.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/shellfish.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/sesame.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/soy.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/sulphites.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/wheat.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/tartrazine.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/rice.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/red_meat.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/poultry_meat.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/fruit.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/corn.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/garlic.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/balsam.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/buckwheat.js","../../pmt-react-sdk/packages/modules/src/user/constants/index.js","../../pmt-react-sdk/packages/modules/src/user/components/AllergenChooser/AllergenChooser.js","../../pmt-react-sdk/packages/modules/src/dev/pages/styleguide/parts/listChooser.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/check.js","../../pmt-react-sdk/packages/ui/src/Stepper/components/Step.js","../../pmt-react-sdk/packages/ui/src/Stepper/components/StepContent.js","../../pmt-react-sdk/packages/ui/src/Stepper/Stepper.js","../../pmt-react-sdk/packages/ui/src/svg-icons/communication/account-card-details.js","../../pmt-react-sdk/packages/modules/src/dev/pages/styleguide/parts/stepper.js","../../pmt-react-sdk/packages/modules/src/dev/components/styleguide/Resizer.js","../../pmt-react-sdk/packages/modules/src/dev/components/styleguide/ComponentList.js","../../pmt-react-sdk/packages/modules/src/dev/components/styleguide/SectionList.js","../../pmt-react-sdk/packages/modules/src/dev/pages/styleguide/index.js","../../pmt-react-sdk/packages/modules/src/dev/pages/test/index.js","../../pmt-react-sdk/packages/modules/src/archi/utils/devRoutes/devRoutes.js","../../pmt-react-sdk/packages/modules/src/archi/utils/devRoutes/index.js","../../pmt-react-sdk/packages/modules/src/archi/utils/configureRoutes.js","../../pmt-react-sdk/packages/modules/src/archi/App.js","../../src/config/routingEnum.js","../../src/pages/home/index.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/actions.js","../../pmt-react-sdk/packages/modules/src/api/calls/UserAddressApi.js","../../pmt-react-sdk/packages/modules/src/userAddress/actions.js","../../pmt-react-sdk/packages/modules/src/userAddress/format/index.js","../../pmt-react-sdk/packages/modules/src/userAddress/selectors.js","../../pmt-react-sdk/packages/modules/src/userAddress/components/UserAddressListContainer/UserAddressListContainer.js","../../pmt-react-sdk/packages/modules/src/userAddress/constants/index.js","../../pmt-react-sdk/packages/modules/src/userAddress/utils/index.js","../../pmt-react-sdk/packages/modules/src/userAddress/index.js","../../pmt-react-sdk/packages/modules/src/api/errors/CheckErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/CheckApi.js","../../pmt-react-sdk/packages/modules/src/payment/check/actions.js","../../pmt-react-sdk/packages/modules/src/payment/check/selectors.js","../../pmt-react-sdk/packages/modules/src/payment/check/index.js","../../pmt-react-sdk/packages/modules/src/geolocation/constants.js","../../pmt-react-sdk/packages/modules/src/geolocation/selectors.js","../../pmt-react-sdk/packages/modules/src/restaurant/selectors.js","../../pmt-react-sdk/packages/modules/src/orderSettings/actions.js","../../pmt-react-sdk/packages/modules/src/payment/constants/PaymentStatus.js","../../pmt-react-sdk/packages/modules/src/payment/constants/TipsValueType.js","../../pmt-react-sdk/packages/modules/src/payment/constants/index.js","../../pmt-react-sdk/packages/modules/src/orderSettings/constants.js","../../pmt-react-sdk/packages/modules/src/orderSettings/format/index.js","../../pmt-react-sdk/packages/modules/src/orderSettings/selectors.js","../../pmt-react-sdk/packages/modules/src/orderSettings/utils/mode.js","../../pmt-react-sdk/packages/modules/src/orderSettings/utils/delay.js","../../node_modules/lodash/uniq.js","../../pmt-react-sdk/packages/modules/src/orderSettings/utils/openingHours.js","../../pmt-react-sdk/packages/modules/src/orderSettings/utils/slots.js","../../pmt-react-sdk/packages/utils/src/object/index.js","../../pmt-react-sdk/packages/modules/src/api/errors/RestaurantErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/RestaurantApi.js","../../pmt-react-sdk/packages/modules/src/restaurant/actions.js","../../pmt-react-sdk/packages/modules/src/orderSettings/middlewares.js","../../pmt-react-sdk/packages/modules/src/orderSettings/index.js","../../pmt-react-sdk/packages/modules/src/orderFront/format.js","../../pmt-react-sdk/packages/modules/src/userMe/actions.js","../../pmt-react-sdk/packages/modules/src/userAccount/format/index.js","../../pmt-react-sdk/packages/modules/src/user/format/dietaryPreferences.js","../../pmt-react-sdk/packages/modules/src/user/format/marketing.js","../../pmt-react-sdk/packages/modules/src/user/format/index.js","../../pmt-react-sdk/packages/modules/src/userMe/selectors.js","../../pmt-react-sdk/packages/modules/src/userMe/components/UserMeContainer/index.js","../../pmt-react-sdk/packages/modules/src/userMe/components/UserMeContainer/withUserMe.js","../../pmt-react-sdk/packages/modules/src/userMe/components/AuthStateContainer/index.js","../../pmt-react-sdk/packages/modules/src/userMe/index.js","../../pmt-react-sdk/packages/utils/src/pure/index.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/transformForApi/transformOrderItemForApi.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/transformForApi/transformOrderProductForApi.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/transformForApi/transformOrderMenuForApi.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/transformForApi/transformCartForApi.js","../../pmt-react-sdk/packages/modules/src/orderProduct/format/index.js","../../node_modules/lodash/_arrayReduce.js","../../node_modules/lodash/_basePropertyOf.js","../../node_modules/lodash/_deburrLetter.js","../../node_modules/lodash/deburr.js","../../node_modules/lodash/_asciiWords.js","../../node_modules/lodash/_hasUnicodeWord.js","../../node_modules/lodash/_unicodeWords.js","../../node_modules/lodash/words.js","../../node_modules/lodash/_createCompounder.js","../../node_modules/lodash/kebabCase.js","../../node_modules/lodash/_baseFilter.js","../../node_modules/lodash/filter.js","../../pmt-react-sdk/packages/modules/src/orderProduct/utils/areSameProduct.js","../../node_modules/lodash/head.js","../../pmt-react-sdk/packages/modules/src/catalog/utils/categories.js","../../pmt-react-sdk/packages/modules/src/catalog/utils/item.js","../../pmt-react-sdk/packages/modules/src/catalog/utils/product.js","../../pmt-react-sdk/packages/modules/src/catalog/utils/menu.js","../../pmt-react-sdk/packages/modules/src/catalog/utils/upsellings.js","../../pmt-react-sdk/packages/modules/src/catalog/utils/cartModifier.js","../../pmt-react-sdk/packages/modules/src/orderProduct/modifiers/index.js","../../pmt-react-sdk/packages/modules/src/orderProduct/utils/createOrderProductFromProduct.js","../../pmt-react-sdk/packages/modules/src/orderProduct/utils/index.js","../../pmt-react-sdk/packages/modules/src/orderMenu/utils/category.js","../../pmt-react-sdk/packages/modules/src/orderMenu/utils/areSameMenu.js","../../pmt-react-sdk/packages/modules/src/orderMenu/utils/getMenuFromCart.js","../../pmt-react-sdk/packages/modules/src/orderMenu/utils/isMenuAutofillable.js","../../pmt-react-sdk/packages/modules/src/orderMenu/utils/getFilledMenu.js","../../pmt-react-sdk/packages/modules/src/orderMenu/modifiers/index.js","../../pmt-react-sdk/packages/modules/src/orderMenu/utils/createOrderMenuFromMenu.js","../../pmt-react-sdk/packages/modules/src/orderMenu/format/part.js","../../pmt-react-sdk/packages/modules/src/orderMenu/format/index.js","../../pmt-react-sdk/packages/modules/src/cart/format/index.js","../../pmt-react-sdk/packages/modules/src/cart/selectors.js","../../pmt-react-sdk/packages/modules/src/orderMenu/actions.js","../../pmt-react-sdk/packages/modules/src/cart/utils/transformOrderMenuForStore.js","../../pmt-react-sdk/packages/modules/src/orderProduct/actions.js","../../pmt-react-sdk/packages/modules/src/orderProduct/selectors.js","../../pmt-react-sdk/packages/modules/src/orderProduct/index.js","../../pmt-react-sdk/packages/modules/src/orderMenu/middlewares.js","../../pmt-react-sdk/packages/modules/src/orderMenu/selectors.js","../../pmt-react-sdk/packages/modules/src/orderMenu/index.js","../../pmt-react-sdk/packages/modules/src/cart/actions.js","../../pmt-react-sdk/packages/modules/src/cart/utils/item.js","../../pmt-react-sdk/packages/modules/src/suggestion/actions.js","../../pmt-react-sdk/packages/modules/src/cart/middlewares.js","../../pmt-react-sdk/packages/modules/src/cart/index.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/index.js","../../pmt-react-sdk/packages/modules/src/api/errors/PaymentErrorsList.js","../../pmt-react-sdk/packages/modules/src/api/errors/OrderErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/OrderPreviewApi.js","../../pmt-react-sdk/packages/modules/src/orderPreview/actions.js","../../pmt-react-sdk/packages/modules/src/orderPreview/constants.js","../../pmt-react-sdk/packages/modules/src/orderPreview/format.js","../../pmt-react-sdk/packages/modules/src/orderPreview/selectors.js","../../node_modules/lodash/_baseDifference.js","../../node_modules/lodash/differenceWith.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/areSameApiProduct.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/areSameApiMenu.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/reconciliateFromApi/reconciliateOrderProductFromApi.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/reconciliateFromApi/reconciliateOrderMenuFromApi.js","../../pmt-react-sdk/packages/modules/src/orderPreview/utils/reconciliateFromApi/reconciliateOrderFromApi.js","../../pmt-react-sdk/packages/modules/src/orderPreview/middlewares.js","../../pmt-react-sdk/packages/modules/src/orderPreview/index.js","../../pmt-react-sdk/packages/modules/src/orderFront/selectors.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/format/appConfigFrontSettings.js","../../node_modules/lodash/_baseRepeat.js","../../node_modules/lodash/_createPadding.js","../../node_modules/lodash/padStart.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/format/orderProperties.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/utils.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/selectors.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/components/containers/OrderPropertiesContainer.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/components/containers/withOrderProperties.js","../../node_modules/lodash/_baseFindKey.js","../../node_modules/lodash/findKey.js","../../pmt-react-sdk/packages/utils/src/idempotency/index.js","../../pmt-react-sdk/packages/modules/src/userHistory/actions.js","../../pmt-react-sdk/packages/modules/src/restaurant/index.js","../../pmt-react-sdk/packages/modules/src/orderFront/actions.js","../../pmt-react-sdk/packages/modules/src/orderFront/constants.js","../../pmt-react-sdk/packages/modules/src/api/errors/CatalogErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/CatalogApi.js","../../pmt-react-sdk/packages/modules/src/catalog/actions.js","../../pmt-react-sdk/packages/modules/src/api/calls/AsyncPaymentApi.js","../../pmt-react-sdk/packages/modules/src/asyncPayment/actions.js","../../pmt-react-sdk/packages/modules/src/asyncPayment/constants.js","../../pmt-react-sdk/packages/modules/src/asyncPayment/middlewares.js","../../pmt-react-sdk/packages/modules/src/asyncPayment/utils.js","../../pmt-react-sdk/packages/modules/src/api/calls/OrderApi.js","../../pmt-react-sdk/packages/modules/src/orderPost/actions.js","../../pmt-react-sdk/packages/modules/src/orderPost/selectors.js","../../pmt-react-sdk/packages/modules/src/orderPost/index.js","../../pmt-react-sdk/packages/modules/src/api/errors/UserAccountErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/UserAccountApi.js","../../pmt-react-sdk/packages/modules/src/userAccount/actions.js","../../pmt-react-sdk/packages/modules/src/userAccount/selectors.js","../../pmt-react-sdk/packages/modules/src/userAccount/components/UserAccountsContainer/UserAccountsContainer.js","../../pmt-react-sdk/packages/modules/src/userAccount/components/UserAccountContainer/UserAccountContainer.js","../../pmt-react-sdk/packages/modules/src/api/calls/RestaurantsGroupApi.js","../../node_modules/fast-json-patch/module/helpers.mjs","../../node_modules/fast-json-patch/module/core.mjs","../../node_modules/fast-json-patch/module/duplex.mjs","../../node_modules/fast-json-patch/index.mjs","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/actions.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/constants.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/format/index.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/selectors.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/components/RestaurantsGroupContainer.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/components/withRestaurantsGroup.js","../../pmt-react-sdk/packages/modules/src/userAccount/components/UserAccountRemainingView/View.js","../../pmt-react-sdk/packages/modules/src/userAccount/components/UserAccountRemainingView/UserAccountRemainingView.js","../../pmt-react-sdk/packages/modules/src/proCreateUser/actions.js","../../pmt-react-sdk/packages/modules/src/proCreateUser/selectors.js","../../pmt-react-sdk/packages/modules/src/proCreateUser/index.js","../../pmt-react-sdk/packages/modules/src/userAccount/index.js","../../pmt-react-sdk/packages/modules/src/orderFront/middlewares.js","../../pmt-react-sdk/packages/modules/src/orderFront/index.js","../../pmt-react-sdk/packages/modules/src/catalog/format/optionValue.js","../../pmt-react-sdk/packages/modules/src/catalog/format/options.js","../../pmt-react-sdk/packages/modules/src/catalog/format/product.js","../../pmt-react-sdk/packages/modules/src/catalog/format/item.js","../../pmt-react-sdk/packages/modules/src/catalog/format/category.js","../../pmt-react-sdk/packages/modules/src/catalog/utils/suggestion.js","../../pmt-react-sdk/packages/modules/src/catalog/format/suggestions.js","../../pmt-react-sdk/packages/modules/src/catalog/format/index.js","../../pmt-react-sdk/packages/modules/src/catalog/selectors.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/components/containers/CategoryContainer.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/components/containers/withCategory.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/components/containers/SelectedCategoryContainer.js","../../pmt-react-sdk/packages/modules/src/geolocation/actions.js","../../pmt-react-sdk/packages/modules/src/geolocation/index.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/constants.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/components/containers/OrderPluginUrlCheckerContainer.js","../../pmt-react-sdk/packages/modules/src/cart/constants/index.js","../../pmt-react-sdk/packages/modules/src/cartDiff/actions.js","../../pmt-react-sdk/packages/modules/src/cartDiff/selectors.js","../../pmt-react-sdk/packages/modules/src/cartDiff/utils/index.js","../../pmt-react-sdk/packages/modules/src/upselling/format/index.js","../../pmt-react-sdk/packages/modules/src/upselling/selectors.js","../../pmt-react-sdk/packages/modules/src/api/calls/TemplateApi.js","../../pmt-react-sdk/packages/modules/src/customTexts/actions.js","../../pmt-react-sdk/packages/modules/src/user/constants/UserType.js","../../pmt-react-sdk/packages/modules/src/api/calls/RegisterApi.js","../../pmt-react-sdk/packages/modules/src/registration/actions.js","../../pmt-react-sdk/packages/modules/src/registration/middlewares.js","../../pmt-react-sdk/packages/utils/src/debounce/index.js","../../pmt-react-sdk/packages/modules/src/api/errors/AuthAppErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/AuthAppApi.js","../../pmt-react-sdk/packages/modules/src/authApp/getApp/actions.js","../../pmt-react-sdk/packages/modules/src/authApp/getApp/selectors.js","../../pmt-react-sdk/packages/modules/src/authApp/authorizeApp/actions.js","../../pmt-react-sdk/packages/modules/src/authApp/getApp/index.js","../../pmt-react-sdk/packages/modules/src/authApp/authorizeApp/selectors.js","../../pmt-react-sdk/packages/modules/src/authApp/authorizeApp/index.js","../../pmt-react-sdk/packages/modules/src/authApp/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/visibility.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/visibility-off.js","../../node_modules/lodash/now.js","../../node_modules/lodash/debounce.js","../../node_modules/unfetch/dist/unfetch.module.js","../../node_modules/isomorphic-unfetch/browser.js","../../node_modules/hibp/es/responses2.js","../../node_modules/hibp/es/fetchFromApi2.js","../../node_modules/hibp/es/pwnedPasswordRange.js","../../pmt-react-sdk/packages/utils/src/security/sha1.js","../../pmt-react-sdk/packages/modules/src/hibp/container/HibpPasswordRangeContainer.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/info-outline.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/error-outline.js","../../pmt-react-sdk/packages/ui/src/MessageBlock/MessageBlock.js","../../src/components/MessageBlock/index.js","../../pmt-react-sdk/packages/ui/src/PasswordField/index.js","../../pmt-react-sdk/packages/ui/src/Menu/MenuView/MenuView.js","../../pmt-react-sdk/packages/utils/src/country/flags/ad.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ae.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/af.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ag.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ai.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/al.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/am.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ao.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/aq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ar.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/arab.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/as.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/at.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/au.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/aw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ax.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/az.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ba.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bb.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bd.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/be.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bi.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bo.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/br.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bs.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/by.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ca.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cd.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cefta.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ch.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ci.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ck.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/co.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cx.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cy.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/de.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/do.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/eac.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ec.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ee.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/eg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/eh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/er.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/es-ct.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/es-ga.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/es-pv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/es.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/et.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/eu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fi.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fo.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ga.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb-eng.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb-nir.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb-sct.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb-wls.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gd.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ge.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gi.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gs.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gy.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ht.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ic.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/id.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ie.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/il.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/im.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/in.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/io.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/iq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ir.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/is.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/it.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/je.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/jm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/jo.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/jp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ke.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ki.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/km.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ky.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/la.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lb.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/li.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ls.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ly.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ma.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/md.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/me.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ml.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mo.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ms.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mx.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/my.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/na.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ne.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ng.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ni.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/no.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/np.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/om.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pa.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pe.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ph.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ps.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/py.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/qa.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/re.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ro.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/rs.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ru.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/rw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sa.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sb.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sd.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/se.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sh-ac.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sh-hl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sh-ta.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/si.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/so.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ss.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/st.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sx.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sy.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/td.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/th.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/to.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ua.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ug.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/um.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/un.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/us.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/uy.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/uz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/va.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ve.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vi.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/wf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ws.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/xk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/xx.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ye.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/yt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/za.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/zm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/zw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flag.js","../../pmt-react-sdk/packages/ui/src/PhoneField/PhoneField.js","../../pmt-react-sdk/packages/modules/src/user/forms/elements/index.js","../../pmt-react-sdk/packages/modules/src/registration/forms/register/constants.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/middlewares/user.js","../../pmt-react-sdk/packages/modules/src/payment/voucher/actions.js","../../pmt-react-sdk/packages/modules/src/payment/voucher/selectors.js","../../pmt-react-sdk/packages/modules/src/payment/voucher/middlewares.js","../../pmt-react-sdk/packages/modules/src/payment/voucher/index.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/middlewares/index.js","../../pmt-react-sdk/packages/modules/src/orderPlugin/index.js","../../pmt-react-sdk/packages/ui/src/Layout/ScrollToTop.js","../../pmt-react-sdk/packages/ui/src/Layout/withScrollToTop.js","../../pmt-react-sdk/packages/modules/src/appSecurity/selectors.js","../../pmt-react-sdk/packages/modules/src/appSecurity/components/AppSecurityContainer/AppSecurityContainer.js","../../src/config/analytics.js","../../src/config/environment.js","../../pmt-react-sdk/packages/ui/src/svg-icons/hardware/keyboard-arrow-right.js","../../src/components/Button/ButtonSquare.js","../../src/components/Button/ButtonLink.js","../../src/components/Button/Button.js","../../node_modules/firebase/app/dist/esm/index.esm.js","../../pmt-react-sdk/packages/modules/src/firebase/actions.js","../../pmt-react-sdk/packages/modules/src/firebase/index.js","../../pmt-react-sdk/packages/modules/src/cookieConsent/components/CookieConsentBanner.js","../../src/components/OrderPage/Footer.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/arrow-back.js","../../node_modules/babel-runtime/helpers/objectWithoutProperties.js","../../node_modules/core-js/library/modules/_defined.js","../../node_modules/core-js/library/modules/_to-object.js","../../node_modules/core-js/library/modules/_has.js","../../node_modules/core-js/library/modules/_core.js","../../node_modules/core-js/library/modules/_global.js","../../node_modules/core-js/library/modules/_library.js","../../node_modules/core-js/library/modules/_shared.js","../../node_modules/core-js/library/modules/_uid.js","../../node_modules/core-js/library/modules/_shared-key.js","../../node_modules/core-js/library/modules/_object-gpo.js","../../node_modules/core-js/library/modules/_a-function.js","../../node_modules/core-js/library/modules/_ctx.js","../../node_modules/core-js/library/modules/_is-object.js","../../node_modules/core-js/library/modules/_an-object.js","../../node_modules/core-js/library/modules/_fails.js","../../node_modules/core-js/library/modules/_descriptors.js","../../node_modules/core-js/library/modules/_dom-create.js","../../node_modules/core-js/library/modules/_ie8-dom-define.js","../../node_modules/core-js/library/modules/_to-primitive.js","../../node_modules/core-js/library/modules/_object-dp.js","../../node_modules/core-js/library/modules/_property-desc.js","../../node_modules/core-js/library/modules/_hide.js","../../node_modules/core-js/library/modules/_export.js","../../node_modules/core-js/library/modules/_object-sap.js","../../node_modules/core-js/library/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/library/fn/object/get-prototype-of.js","../../node_modules/babel-runtime/core-js/object/get-prototype-of.js","../../node_modules/babel-runtime/helpers/classCallCheck.js","../../node_modules/core-js/library/modules/es6.object.define-property.js","../../node_modules/core-js/library/fn/object/define-property.js","../../node_modules/babel-runtime/core-js/object/define-property.js","../../node_modules/babel-runtime/helpers/createClass.js","../../node_modules/core-js/library/modules/_to-integer.js","../../node_modules/core-js/library/modules/_string-at.js","../../node_modules/core-js/library/modules/_redefine.js","../../node_modules/core-js/library/modules/_iterators.js","../../node_modules/core-js/library/modules/_cof.js","../../node_modules/core-js/library/modules/_iobject.js","../../node_modules/core-js/library/modules/_to-iobject.js","../../node_modules/core-js/library/modules/_to-length.js","../../node_modules/core-js/library/modules/_to-absolute-index.js","../../node_modules/core-js/library/modules/_array-includes.js","../../node_modules/core-js/library/modules/_object-keys-internal.js","../../node_modules/core-js/library/modules/_enum-bug-keys.js","../../node_modules/core-js/library/modules/_object-keys.js","../../node_modules/core-js/library/modules/_object-dps.js","../../node_modules/core-js/library/modules/_html.js","../../node_modules/core-js/library/modules/_object-create.js","../../node_modules/core-js/library/modules/_wks.js","../../node_modules/core-js/library/modules/_set-to-string-tag.js","../../node_modules/core-js/library/modules/_iter-create.js","../../node_modules/core-js/library/modules/_iter-define.js","../../node_modules/core-js/library/modules/es6.string.iterator.js","../../node_modules/core-js/library/modules/_add-to-unscopables.js","../../node_modules/core-js/library/modules/_iter-step.js","../../node_modules/core-js/library/modules/es6.array.iterator.js","../../node_modules/core-js/library/modules/web.dom.iterable.js","../../node_modules/core-js/library/modules/_wks-ext.js","../../node_modules/core-js/library/fn/symbol/iterator.js","../../node_modules/babel-runtime/core-js/symbol/iterator.js","../../node_modules/core-js/library/modules/_meta.js","../../node_modules/core-js/library/modules/_wks-define.js","../../node_modules/core-js/library/modules/_object-gops.js","../../node_modules/core-js/library/modules/_object-pie.js","../../node_modules/core-js/library/modules/_enum-keys.js","../../node_modules/core-js/library/modules/_is-array.js","../../node_modules/core-js/library/modules/_object-gopn.js","../../node_modules/core-js/library/modules/_object-gopn-ext.js","../../node_modules/core-js/library/modules/_object-gopd.js","../../node_modules/core-js/library/modules/es6.symbol.js","../../node_modules/core-js/library/modules/es7.symbol.async-iterator.js","../../node_modules/core-js/library/modules/es7.symbol.observable.js","../../node_modules/core-js/library/fn/symbol/index.js","../../node_modules/babel-runtime/core-js/symbol.js","../../node_modules/babel-runtime/helpers/typeof.js","../../node_modules/babel-runtime/helpers/possibleConstructorReturn.js","../../node_modules/core-js/library/modules/_set-proto.js","../../node_modules/core-js/library/modules/es6.object.set-prototype-of.js","../../node_modules/core-js/library/fn/object/set-prototype-of.js","../../node_modules/babel-runtime/core-js/object/set-prototype-of.js","../../node_modules/core-js/library/modules/es6.object.create.js","../../node_modules/core-js/library/fn/object/create.js","../../node_modules/babel-runtime/core-js/object/create.js","../../node_modules/babel-runtime/helpers/inherits.js","../../node_modules/lodash/_metaMap.js","../../node_modules/lodash/_baseSetData.js","../../node_modules/lodash/_createCtor.js","../../node_modules/lodash/_createBind.js","../../node_modules/lodash/_composeArgs.js","../../node_modules/lodash/_composeArgsRight.js","../../node_modules/lodash/_countHolders.js","../../node_modules/lodash/_baseLodash.js","../../node_modules/lodash/_LazyWrapper.js","../../node_modules/lodash/_getData.js","../../node_modules/lodash/_realNames.js","../../node_modules/lodash/_getFuncName.js","../../node_modules/lodash/_LodashWrapper.js","../../node_modules/lodash/_wrapperClone.js","../../node_modules/lodash/wrapperLodash.js","../../node_modules/lodash/_isLaziable.js","../../node_modules/lodash/_setData.js","../../node_modules/lodash/_getWrapDetails.js","../../node_modules/lodash/_insertWrapDetails.js","../../node_modules/lodash/_updateWrapDetails.js","../../node_modules/lodash/_setWrapToString.js","../../node_modules/lodash/_createRecurry.js","../../node_modules/lodash/_getHolder.js","../../node_modules/lodash/_reorder.js","../../node_modules/lodash/_replaceHolders.js","../../node_modules/lodash/_createHybrid.js","../../node_modules/lodash/_createCurry.js","../../node_modules/lodash/_createPartial.js","../../node_modules/lodash/_mergeData.js","../../node_modules/lodash/_createWrap.js","../../node_modules/lodash/bind.js","../../node_modules/can-use-dom/index.js","../../node_modules/react-google-maps/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../node_modules/change-emitter/lib/index.js","../../node_modules/react-google-maps/node_modules/recompose/es/Recompose.js","../../node_modules/scriptjs/dist/script.js","../../node_modules/react-google-maps/lib/withScriptjs.js","../../node_modules/babel-runtime/helpers/defineProperty.js","../../node_modules/react-google-maps/node_modules/warning/browser.js","../../node_modules/react-google-maps/lib/constants.js","../../node_modules/react-google-maps/lib/withGoogleMap.js","../../node_modules/core-js/library/modules/_iter-call.js","../../node_modules/core-js/library/modules/_is-array-iter.js","../../node_modules/core-js/library/modules/_create-property.js","../../node_modules/core-js/library/modules/_classof.js","../../node_modules/core-js/library/modules/core.get-iterator-method.js","../../node_modules/core-js/library/modules/_iter-detect.js","../../node_modules/core-js/library/modules/es6.array.from.js","../../node_modules/core-js/library/fn/array/from.js","../../node_modules/babel-runtime/core-js/array/from.js","../../node_modules/babel-runtime/helpers/toConsumableArray.js","../../node_modules/lodash/_baseReduce.js","../../node_modules/lodash/reduce.js","../../node_modules/lodash/lowerFirst.js","../../node_modules/lodash/_baseHas.js","../../node_modules/lodash/has.js","../../node_modules/react-google-maps/lib/utils/MapChildHelper.js","../../node_modules/react-google-maps/lib/components/GoogleMap.js","../../node_modules/react-google-maps/lib/components/Circle.js","../../node_modules/react-google-maps/lib/components/Marker.js","../../node_modules/react-google-maps/lib/components/Polyline.js","../../node_modules/react-google-maps/lib/components/Polygon.js","../../node_modules/react-google-maps/lib/components/Rectangle.js","../../node_modules/react-google-maps/lib/components/InfoWindow.js","../../node_modules/core-js/library/modules/_object-assign.js","../../node_modules/core-js/library/modules/es6.object.assign.js","../../node_modules/core-js/library/fn/object/assign.js","../../node_modules/babel-runtime/core-js/object/assign.js","../../node_modules/babel-runtime/helpers/extends.js","../../node_modules/lodash/_baseDelay.js","../../node_modules/lodash/delay.js","../../node_modules/lodash/assign.js","../../node_modules/react-google-maps/lib/utils/OverlayViewHelper.js","../../node_modules/react-google-maps/lib/components/OverlayView.js","../../node_modules/react-google-maps/lib/components/GroundOverlay.js","../../node_modules/react-google-maps/lib/components/DirectionsRenderer.js","../../node_modules/react-google-maps/lib/components/FusionTablesLayer.js","../../node_modules/react-google-maps/lib/components/KmlLayer.js","../../node_modules/react-google-maps/lib/components/TrafficLayer.js","../../node_modules/react-google-maps/lib/components/StreetViewPanorama.js","../../node_modules/react-google-maps/lib/components/BicyclingLayer.js","../../node_modules/react-google-maps/lib/index.js","../../pmt-react-sdk/packages/modules/src/google/components/GoogleMapsScriptJS.js","../../pmt-react-sdk/packages/utils/src/google/GoogleApi.js","../../pmt-react-sdk/packages/modules/src/google/components/GoogleMapsApiContainer.js","../../pmt-react-sdk/packages/modules/src/geolocation/container/GeolocationContainer.js","../../src/components/OrderPage/components/Address.js","../../src/components/BlockContainer/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/av/replay.js","../../src/components/OrderPage/components/ChangeButton.js","../../src/components/OrderPage/components/TableNumber.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/Delivery.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/OnSite.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/TakeAway.js","../../pmt-react-sdk/packages/ui/src/Icon/IconOrderMode.js","../../src/components/OrderPage/components/OrderModeSelect.js","../../src/components/OrderPage/components/OrderModeText.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/account-circle.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/arrow-drop-down.js","../../src/components/OrderPage/components/User.js","../../src/components/OrderPage/components/UserLight.js","../../pmt-react-sdk/packages/modules/src/authenticatedUser/selectors.js","../../src/components/OrderPage/components/Incognito.js","../../pmt-react-sdk/packages/ui/src/svg-icons/hardware/keyboard-arrow-down.js","../../pmt-react-sdk/packages/ui/src/svg-icons/hardware/keyboard-arrow-up.js","../../src/components/Slots/styles.js","../../src/utils/radioGroupKeyboardNav.js","../../src/components/Slots/index.js","../../src/components/OrderPage/Header.js","../../src/components/OrderPage/PageContent.js","../../src/components/OrderPage/components/ErrorLayout.js","../../src/components/OrderPage/index.js","../../src/pages/mode/View.js","../../src/pages/mode/index.js","../../pmt-react-sdk/packages/modules/src/catalog/components/container/CatalogContainer.js","../../pmt-react-sdk/packages/modules/src/catalog/components/container/withCatalog.js","../../pmt-react-sdk/packages/modules/src/catalog/components/container/CategoryContainer.js","../../pmt-react-sdk/packages/modules/src/catalog/index.js","../../pmt-react-sdk/packages/modules/src/restaurant/components/RestaurantContainer.js","../../pmt-react-sdk/packages/modules/src/orderFront/container/OrderRestaurantListContainer.js","../../pmt-react-sdk/packages/modules/src/google/constants/index.js","../../pmt-react-sdk/packages/modules/src/google/components/GoogleMapsAutocomplete.js","../../pmt-react-sdk/packages/modules/src/google/components/GoogleMapsReverseGeocoding.js","../../pmt-react-sdk/packages/ui/src/svg-icons/maps/my-location.js","../../src/components/SearchAddress/index.js","../../pmt-react-sdk/packages/modules/src/orderRestaurantContext/selectors.js","../../pmt-react-sdk/packages/modules/src/orderRestaurantContext/container/OrderRestaurantContextContainer.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/done.js","../../pmt-react-sdk/packages/ui/src/TestChip/index.js","../../src/pages/storeLocator/components/RestaurantRow.js","../../src/pages/storeLocator/components/RestaurantList.js","../../src/pages/storeLocator/components/WhereSection.js","../../pmt-react-sdk/packages/ui/src/NumberField/NumberField.js","../../src/components/TableNumberInput/index.js","../../src/pages/storeLocator/components/TableNumberForm.js","../../src/pages/storeLocator/components/AvailabilitySlots.js","../../src/pages/storeLocator/components/WhenContent.js","../../src/pages/storeLocator/components/WhenSection.js","../../src/pages/storeLocator/View.js","../../src/pages/storeLocator/index.js","../../pmt-react-sdk/packages/modules/src/authRestaurant/utils/index.js","../../pmt-react-sdk/packages/modules/src/authRestaurant/index.js","../../pmt-react-sdk/packages/modules/src/restaurant/components/withRestaurant.js","../../pmt-react-sdk/packages/modules/src/suggestion/constants.js","../../node_modules/lodash/flattenDeep.js","../../pmt-react-sdk/packages/modules/src/suggestion/format.js","../../pmt-react-sdk/packages/modules/src/suggestion/selectors.js","../../pmt-react-sdk/packages/modules/src/suggestion/index.js","../../pmt-react-sdk/packages/modules/src/api/calls/UpsellApi.js","../../pmt-react-sdk/packages/modules/src/upselling/actions.js","../../pmt-react-sdk/packages/modules/src/upselling/middlewares/index.js","../../pmt-react-sdk/packages/modules/src/upselling/index.js","../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/toPrimitive.js","../../node_modules/@babel/runtime/helpers/toPropertyKey.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../node_modules/react-event-listener/dist/react-event-listener.cjs.js","../../pmt-react-sdk/packages/ui/src/svg-icons/hardware/keyboard-arrow-left.js","../../pmt-react-sdk/packages/ui/src/Carousel/index.js","../../src/pages/catalog/components/Categories.js","../../pmt-react-sdk/packages/ui/src/Price/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/maps/restaurant.js","../../pmt-react-sdk/packages/ui/src/Card/components/CardItem/CardItemOrder.js","../../pmt-react-sdk/packages/ui/src/svg-icons/content/add.js","../../pmt-react-sdk/packages/ui/src/StateMachine/index.js","../../pmt-react-sdk/packages/ui/src/AlertDialog/AlertDialog.js","../../pmt-react-sdk/packages/ui/src/AlertButton/AlertButton.js","../../src/components/Chip/index.js","../../src/components/CartModifier/CartModifierTag.js","../../src/components/ProductTagList/index.js","../../src/pages/catalog/components/Item.js","../../src/pages/catalog/components/ItemList.js","../../src/components/BlockContainerGroup/index.js","../../src/components/Cart/Type.js","../../pmt-react-sdk/packages/ui/src/svg-icons/content/remove.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/Trash.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/CartIcon.js","../../pmt-react-sdk/packages/ui/src/IconLabel/IconLabel.js","../../pmt-react-sdk/packages/ui/src/svg-icons/communication/comment-outline.js","../../src/components/Cart/components/ProductContent.js","../../src/components/Cart/CartItemList.js","../../pmt-react-sdk/packages/ui/src/ToggleContainer/ToggleContainer.js","../../pmt-react-sdk/packages/ui/src/svg-icons/communication/message.js","../../src/components/Cart/CartFooter.js","../../src/components/TipWithIcon/index.js","../../src/pages/catalog/components/SideInformation.js","../../src/pages/catalog/components/CategoryBreadcrumb.js","../../src/pages/catalog/components/CategoriesBreadcrumb.js","../../pmt-react-sdk/packages/ui/src/MobileHeader/MobileHeader.js","../../src/pages/catalog/components/CategoryMobileHeader.js","../../src/pages/catalog/components/MobileCartButton.js","../../src/pages/catalog/View.js","../../src/pages/catalog/index.js","../../pmt-react-sdk/packages/modules/src/orderMenu/components/SelectedMenuContainer.js","../../node_modules/react-scrollable-anchor/lib/utils/hash.js","../../node_modules/jump.js/src/easing.js","../../node_modules/jump.js/src/jump.js","../../node_modules/react-scrollable-anchor/lib/utils/func.js","../../node_modules/react-scrollable-anchor/lib/utils/scroll.js","../../node_modules/react-scrollable-anchor/lib/Manager.js","../../node_modules/react-scrollable-anchor/lib/ScrollableAnchor.js","../../node_modules/react-scrollable-anchor/lib/index.js","../../node_modules/@paymytable/react-sticky/node_modules/@babel/runtime/helpers/interopRequireDefault.js","../../node_modules/@paymytable/react-sticky/node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@paymytable/react-sticky/node_modules/@babel/runtime/helpers/inheritsLoose.js","../../node_modules/@paymytable/react-sticky/lib/Sticky.js","../../node_modules/@paymytable/react-sticky/node_modules/@babel/runtime/helpers/extends.js","../../node_modules/performance-now/lib/performance-now.js","../../node_modules/raf/index.js","../../node_modules/@paymytable/react-sticky/lib/Container.js","../../node_modules/@paymytable/react-sticky/lib/index.js","../../src/pages/menu/components/Header.js","../../src/components/CategoryCard/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/chevron-left.js","../../src/components/ParentCategoryCard/index.js","../../src/pages/menu/components/PartQuantity.js","../../src/pages/menu/components/PartsView/ProductItem.js","../../src/pages/menu/components/PartsView/Item.js","../../src/pages/menu/components/PartsView/PartView.js","../../src/pages/menu/components/PartsView/PartsView.js","../../src/pages/menu/components/LeftArea/SideMenu.js","../../src/pages/menu/components/LeftArea/Actions.js","../../src/pages/menu/components/LeftArea/LeftArea.js","../../src/components/BannerView/index.js","../../src/pages/menu/View.js","../../src/pages/menu/index.js","../../pmt-react-sdk/packages/modules/src/orderProduct/components/SelectedProductContainerById.js","../../src/pages/product/components/SubmitBtnText.js","../../src/pages/product/components/Actions.js","../../src/pages/product/components/Comment.js","../../src/pages/product/components/Header.js","../../src/components/Checkbox/Checkbox.js","../../src/pages/product/components/OptionValue.js","../../src/pages/product/components/OptionView.js","../../src/pages/product/components/OptionsView.js","../../src/pages/product/components/ReclaimLater.js","../../src/pages/product/components/View.js","../../src/pages/product/View.js","../../src/pages/product/index.js","../../pmt-react-sdk/packages/modules/src/registration/selectors.js","../../pmt-react-sdk/packages/modules/src/registration/index.js","../../src/components/SideSummary/index.js","../../src/components/BackToBlock/index.js","../../src/pages/cart/components/Cart.js","../../src/pages/cart/View.js","../../src/pages/cart/index.js","../../pmt-react-sdk/packages/utils/src/address/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/image/edit.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/delete.js","../../pmt-react-sdk/packages/modules/src/userAddress/forms/edit/EditUserAddressFormView.js","../../src/components/Address/AddressEditForm.js","../../src/components/Address/index.js","../../src/pages/deliveryAddress/components/RegisteredAddresses.js","../../pmt-react-sdk/packages/modules/src/userAddress/forms/add/AddUserAddressFormView.js","../../src/pages/deliveryAddress/components/NewAddress.js","../../src/pages/deliveryAddress/components/DeliveryBlock.js","../../src/pages/deliveryAddress/View.js","../../src/pages/deliveryAddress/index.js","../../pmt-react-sdk/packages/modules/src/payment/components/TipBar.js","../../pmt-react-sdk/packages/modules/src/payment/components/TipSlider.js","../../pmt-react-sdk/packages/modules/src/payment/components/Tips.js","../../pmt-react-sdk/packages/ui/src/hooks/useMountEffect.js","../../pmt-react-sdk/packages/modules/src/useApi/index.js","../../src/pages/payment/components/VoucherCodes.js","../../src/pages/payment/components/CreditCardPayment.js","../../src/pages/payment/components/IrlPayment.js","../../src/pages/payment/components/UserAccountPayment.js","../../src/pages/payment/components/TRDPayment.js","../../src/pages/payment/components/PaymentMethods.js","../../src/pages/payment/components/PromoCode.js","../../src/pages/payment/components/PaymentDetails.js","../../src/pages/payment/components/PaymentBlock.js","../../src/pages/payment/View.js","../../src/pages/payment/index.js","../../src/pages/payment/verification/ErrorBlock.js","../../src/pages/payment/verification/View.js","../../src/pages/payment/verification/index.js","../../pmt-react-sdk/packages/modules/src/api/calls/PaymentApi.js","../../pmt-react-sdk/packages/modules/src/payment/pdf/actions.js","../../pmt-react-sdk/packages/modules/src/payment/pdf/selectors.js","../../pmt-react-sdk/packages/modules/src/payment/pdf/index.js","../../pmt-react-sdk/packages/modules/src/orderStatusPoll/actions.js","../../pmt-react-sdk/packages/modules/src/orderStatusPoll/selectors.js","../../pmt-react-sdk/packages/modules/src/orderStatusPoll/index.js","../../src/components/OrderStatusDisplay/index.js","../../src/pages/confirm/components/GeneralDatasCard.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/check-circle.js","../../src/pages/confirm/components/PaymentDatasCard.js","../../src/pages/confirm/View.js","../../src/pages/confirm/index.js","../../src/pages/login/constants.js","../../pmt-react-sdk/packages/modules/src/auth/forms/login/LoginFormView.js","../../pmt-react-sdk/packages/modules/src/auth/forms/login/index.js","../../src/pages/login/components/LoginForm.js","../../src/pages/login/components/AuthTabs.js","../../node_modules/lodash/set.js","../../pmt-react-sdk/packages/ui/src/Cgu/Cgu.js","../../pmt-react-sdk/packages/ui/src/Cgu/CguLabel.js","../../pmt-react-sdk/packages/modules/src/registration/forms/register/RegisterFormView.js","../../pmt-react-sdk/packages/modules/src/registration/forms/register/index.js","../../src/pages/login/components/RegisterForm.js","../../pmt-react-sdk/packages/modules/src/registration/forms/userLight/constants.js","../../pmt-react-sdk/packages/modules/src/registration/forms/userLight/UserLightFormView.js","../../pmt-react-sdk/packages/modules/src/registration/forms/userLight/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/ask.js","../../src/pages/login/components/UserLightForm.js","../../pmt-react-sdk/packages/modules/src/registration/forms/incognito/constants.js","../../pmt-react-sdk/packages/modules/src/registration/forms/incognito/IncognitoFormView.js","../../pmt-react-sdk/packages/modules/src/registration/forms/incognito/index.js","../../src/pages/login/components/IncognitoForm.js","../../src/pages/login/View.js","../../src/pages/login/index.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/actions.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/selectors.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/index.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/forms/forgotPassword/ForgotPasswordFormView.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/forms/forgotPassword/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/lock-outline.js","../../src/pages/forgotPassword/View.js","../../src/pages/forgotPassword/index.js","../../pmt-react-sdk/packages/modules/src/user/forms/profile/ProfileFormView.js","../../pmt-react-sdk/packages/modules/src/user/forms/profile/index.js","../../src/pages/user/profile/View.js","../../src/pages/user/profile/index.js","../../src/pages/user/account/components/LeftBlock.js","../../src/components/FlexBlock/index.js","../../src/pages/user/account/components/ProfileForm.js","../../src/pages/user/account/components/DeliveryAddresses.js","../../src/pages/user/account/View.js","../../src/pages/user/account/index.js","../../src/config/routes.js","../../pmt-react-sdk/packages/modules/src/archi/ApplicationView.js","../../pmt-react-sdk/packages/modules/src/archi/Application.js","../../src/config/appConfig.js","../../src/config/devMiddlewares.js","../../src/components/OrderPage/DeleteCartDialog.js","../../pmt-react-sdk/packages/modules/src/orderProduct/components/SelectedProductContainer.js","../../src/pages/product/dialog/index.js","../../src/pages/catalog/components/DietaryInfoDialog/DesktopView.js","../../src/pages/catalog/components/DietaryInfoDialog/MobileView.js","../../src/pages/catalog/components/DietaryInfoDialog/index.js","../../src/pages/catalog/components/SuggestionDialog.js","../../src/pages/catalog/components/UpsellingDialog.js","../../pmt-react-sdk/packages/modules/src/cartDiff/middlewares.js","../../pmt-react-sdk/packages/modules/src/cartDiff/index.js","../../src/components/Cart/CartDiffItemsDialog.js","../../pmt-react-sdk/packages/ui/src/svg-icons/maps/local-offer.js","../../src/components/CartModifier/CartModifierDialog.js","../../pmt-react-sdk/packages/ui/src/LoadingContainer/LoadingContainer.js","../../src/components/Slots/UnavailableDueDateDialog.js","../../src/pages/catalog/components/OrderModeDisabledDialog.js","../../src/pages/catalog/components/RestaurantDisabledDialog.js","../../src/pages/catalog/components/TableNotFoundDialog.js","../../pmt-react-sdk/packages/ui/src/svg-icons/device/clock.js","../../src/pages/catalog/components/ClosedStoreDialog.js","../../src/pages/payment/components/ExpiredSessionDialog.js","../../pmt-react-sdk/packages/modules/src/payment/voucher/constants.js","../../src/components/Voucher/InvalidVouchersDialog.js","../../src/components/Order/LimitedStockItemsDialog.js","../../src/config/dialogs.js","../../pmt-react-sdk/packages/modules/src/authenticatedUser/index.js","../../pmt-react-sdk/packages/modules/src/authPro/constants.js","../../pmt-react-sdk/packages/modules/src/authPro/utils/index.js","../../pmt-react-sdk/packages/modules/src/authPro/actions.js","../../pmt-react-sdk/packages/modules/src/authPro/index.js","../../pmt-react-sdk/packages/modules/src/customTexts/middlewares.js","../../pmt-react-sdk/packages/modules/src/customTexts/index.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/index.js","../../pmt-react-sdk/packages/modules/src/userOrders/actions.js","../../pmt-react-sdk/packages/modules/src/userOrders/selectors.js","../../pmt-react-sdk/packages/modules/src/userOrders/components/userOrderList/UserOrderListContainer.js","../../pmt-react-sdk/packages/modules/src/userOrders/index.js","../../pmt-react-sdk/packages/modules/src/payment/payment/selectors.js","../../pmt-react-sdk/packages/modules/src/payment/components/CheckContainer.js","../../node_modules/lodash/forOwn.js","../../pmt-react-sdk/packages/modules/src/payment/payment/index.js","../../src/config/entities.js","../../src/config/events.js","../../pmt-react-sdk/packages/modules/src/user/forms/profile/dietary.js","../../pmt-react-sdk/packages/modules/src/userAddress/forms/add/index.js","../../pmt-react-sdk/packages/modules/src/userAddress/forms/edit/index.js","../../src/config/forms.js","../../src/config/getApiManagerOptions.js","../../src/config/i18n.js","../../src/config/middlewares.js","../../src/config/theme.js","../../src/config/firebase.js","../../src/index.js"],"sourcesContent":["/** @license React v16.14.0\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\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.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:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Immutable = factory());\n}(this, function () { 'use strict';var SLICE$0 = Array.prototype.slice;\n\n  function createClass(ctor, superClass) {\n    if (superClass) {\n      ctor.prototype = Object.create(superClass.prototype);\n    }\n    ctor.prototype.constructor = ctor;\n  }\n\n  function Iterable(value) {\n      return isIterable(value) ? value : Seq(value);\n    }\n\n\n  createClass(KeyedIterable, Iterable);\n    function KeyedIterable(value) {\n      return isKeyed(value) ? value : KeyedSeq(value);\n    }\n\n\n  createClass(IndexedIterable, Iterable);\n    function IndexedIterable(value) {\n      return isIndexed(value) ? value : IndexedSeq(value);\n    }\n\n\n  createClass(SetIterable, Iterable);\n    function SetIterable(value) {\n      return isIterable(value) && !isAssociative(value) ? value : SetSeq(value);\n    }\n\n\n\n  function isIterable(maybeIterable) {\n    return !!(maybeIterable && maybeIterable[IS_ITERABLE_SENTINEL]);\n  }\n\n  function isKeyed(maybeKeyed) {\n    return !!(maybeKeyed && maybeKeyed[IS_KEYED_SENTINEL]);\n  }\n\n  function isIndexed(maybeIndexed) {\n    return !!(maybeIndexed && maybeIndexed[IS_INDEXED_SENTINEL]);\n  }\n\n  function isAssociative(maybeAssociative) {\n    return isKeyed(maybeAssociative) || isIndexed(maybeAssociative);\n  }\n\n  function isOrdered(maybeOrdered) {\n    return !!(maybeOrdered && maybeOrdered[IS_ORDERED_SENTINEL]);\n  }\n\n  Iterable.isIterable = isIterable;\n  Iterable.isKeyed = isKeyed;\n  Iterable.isIndexed = isIndexed;\n  Iterable.isAssociative = isAssociative;\n  Iterable.isOrdered = isOrdered;\n\n  Iterable.Keyed = KeyedIterable;\n  Iterable.Indexed = IndexedIterable;\n  Iterable.Set = SetIterable;\n\n\n  var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\n  var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\n  var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@';\n  var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\n\n  // Used for setting prototype methods that IE8 chokes on.\n  var DELETE = 'delete';\n\n  // Constants describing the size of trie nodes.\n  var SHIFT = 5; // Resulted in best performance after ______?\n  var SIZE = 1 << SHIFT;\n  var MASK = SIZE - 1;\n\n  // A consistent shared value representing \"not set\" which equals nothing other\n  // than itself, and nothing that could be provided externally.\n  var NOT_SET = {};\n\n  // Boolean references, Rough equivalent of `bool &`.\n  var CHANGE_LENGTH = { value: false };\n  var DID_ALTER = { value: false };\n\n  function MakeRef(ref) {\n    ref.value = false;\n    return ref;\n  }\n\n  function SetRef(ref) {\n    ref && (ref.value = true);\n  }\n\n  // A function which returns a value representing an \"owner\" for transient writes\n  // to tries. The return value will only ever equal itself, and will not equal\n  // the return of any subsequent call of this function.\n  function OwnerID() {}\n\n  // http://jsperf.com/copy-array-inline\n  function arrCopy(arr, offset) {\n    offset = offset || 0;\n    var len = Math.max(0, arr.length - offset);\n    var newArr = new Array(len);\n    for (var ii = 0; ii < len; ii++) {\n      newArr[ii] = arr[ii + offset];\n    }\n    return newArr;\n  }\n\n  function ensureSize(iter) {\n    if (iter.size === undefined) {\n      iter.size = iter.__iterate(returnTrue);\n    }\n    return iter.size;\n  }\n\n  function wrapIndex(iter, index) {\n    // This implements \"is array index\" which the ECMAString spec defines as:\n    //\n    //     A String property name P is an array index if and only if\n    //     ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal\n    //     to 2^32−1.\n    //\n    // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects\n    if (typeof index !== 'number') {\n      var uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32\n      if ('' + uint32Index !== index || uint32Index === 4294967295) {\n        return NaN;\n      }\n      index = uint32Index;\n    }\n    return index < 0 ? ensureSize(iter) + index : index;\n  }\n\n  function returnTrue() {\n    return true;\n  }\n\n  function wholeSlice(begin, end, size) {\n    return (begin === 0 || (size !== undefined && begin <= -size)) &&\n      (end === undefined || (size !== undefined && end >= size));\n  }\n\n  function resolveBegin(begin, size) {\n    return resolveIndex(begin, size, 0);\n  }\n\n  function resolveEnd(end, size) {\n    return resolveIndex(end, size, size);\n  }\n\n  function resolveIndex(index, size, defaultIndex) {\n    return index === undefined ?\n      defaultIndex :\n      index < 0 ?\n        Math.max(0, size + index) :\n        size === undefined ?\n          index :\n          Math.min(size, index);\n  }\n\n  /* global Symbol */\n\n  var ITERATE_KEYS = 0;\n  var ITERATE_VALUES = 1;\n  var ITERATE_ENTRIES = 2;\n\n  var REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n  var FAUX_ITERATOR_SYMBOL = '@@iterator';\n\n  var ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL;\n\n\n  function Iterator(next) {\n      this.next = next;\n    }\n\n    Iterator.prototype.toString = function() {\n      return '[Iterator]';\n    };\n\n\n  Iterator.KEYS = ITERATE_KEYS;\n  Iterator.VALUES = ITERATE_VALUES;\n  Iterator.ENTRIES = ITERATE_ENTRIES;\n\n  Iterator.prototype.inspect =\n  Iterator.prototype.toSource = function () { return this.toString(); }\n  Iterator.prototype[ITERATOR_SYMBOL] = function () {\n    return this;\n  };\n\n\n  function iteratorValue(type, k, v, iteratorResult) {\n    var value = type === 0 ? k : type === 1 ? v : [k, v];\n    iteratorResult ? (iteratorResult.value = value) : (iteratorResult = {\n      value: value, done: false\n    });\n    return iteratorResult;\n  }\n\n  function iteratorDone() {\n    return { value: undefined, done: true };\n  }\n\n  function hasIterator(maybeIterable) {\n    return !!getIteratorFn(maybeIterable);\n  }\n\n  function isIterator(maybeIterator) {\n    return maybeIterator && typeof maybeIterator.next === 'function';\n  }\n\n  function getIterator(iterable) {\n    var iteratorFn = getIteratorFn(iterable);\n    return iteratorFn && iteratorFn.call(iterable);\n  }\n\n  function getIteratorFn(iterable) {\n    var iteratorFn = iterable && (\n      (REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) ||\n      iterable[FAUX_ITERATOR_SYMBOL]\n    );\n    if (typeof iteratorFn === 'function') {\n      return iteratorFn;\n    }\n  }\n\n  function isArrayLike(value) {\n    return value && typeof value.length === 'number';\n  }\n\n  createClass(Seq, Iterable);\n    function Seq(value) {\n      return value === null || value === undefined ? emptySequence() :\n        isIterable(value) ? value.toSeq() : seqFromValue(value);\n    }\n\n    Seq.of = function(/*...values*/) {\n      return Seq(arguments);\n    };\n\n    Seq.prototype.toSeq = function() {\n      return this;\n    };\n\n    Seq.prototype.toString = function() {\n      return this.__toString('Seq {', '}');\n    };\n\n    Seq.prototype.cacheResult = function() {\n      if (!this._cache && this.__iterateUncached) {\n        this._cache = this.entrySeq().toArray();\n        this.size = this._cache.length;\n      }\n      return this;\n    };\n\n    // abstract __iterateUncached(fn, reverse)\n\n    Seq.prototype.__iterate = function(fn, reverse) {\n      return seqIterate(this, fn, reverse, true);\n    };\n\n    // abstract __iteratorUncached(type, reverse)\n\n    Seq.prototype.__iterator = function(type, reverse) {\n      return seqIterator(this, type, reverse, true);\n    };\n\n\n\n  createClass(KeyedSeq, Seq);\n    function KeyedSeq(value) {\n      return value === null || value === undefined ?\n        emptySequence().toKeyedSeq() :\n        isIterable(value) ?\n          (isKeyed(value) ? value.toSeq() : value.fromEntrySeq()) :\n          keyedSeqFromValue(value);\n    }\n\n    KeyedSeq.prototype.toKeyedSeq = function() {\n      return this;\n    };\n\n\n\n  createClass(IndexedSeq, Seq);\n    function IndexedSeq(value) {\n      return value === null || value === undefined ? emptySequence() :\n        !isIterable(value) ? indexedSeqFromValue(value) :\n        isKeyed(value) ? value.entrySeq() : value.toIndexedSeq();\n    }\n\n    IndexedSeq.of = function(/*...values*/) {\n      return IndexedSeq(arguments);\n    };\n\n    IndexedSeq.prototype.toIndexedSeq = function() {\n      return this;\n    };\n\n    IndexedSeq.prototype.toString = function() {\n      return this.__toString('Seq [', ']');\n    };\n\n    IndexedSeq.prototype.__iterate = function(fn, reverse) {\n      return seqIterate(this, fn, reverse, false);\n    };\n\n    IndexedSeq.prototype.__iterator = function(type, reverse) {\n      return seqIterator(this, type, reverse, false);\n    };\n\n\n\n  createClass(SetSeq, Seq);\n    function SetSeq(value) {\n      return (\n        value === null || value === undefined ? emptySequence() :\n        !isIterable(value) ? indexedSeqFromValue(value) :\n        isKeyed(value) ? value.entrySeq() : value\n      ).toSetSeq();\n    }\n\n    SetSeq.of = function(/*...values*/) {\n      return SetSeq(arguments);\n    };\n\n    SetSeq.prototype.toSetSeq = function() {\n      return this;\n    };\n\n\n\n  Seq.isSeq = isSeq;\n  Seq.Keyed = KeyedSeq;\n  Seq.Set = SetSeq;\n  Seq.Indexed = IndexedSeq;\n\n  var IS_SEQ_SENTINEL = '@@__IMMUTABLE_SEQ__@@';\n\n  Seq.prototype[IS_SEQ_SENTINEL] = true;\n\n\n\n  createClass(ArraySeq, IndexedSeq);\n    function ArraySeq(array) {\n      this._array = array;\n      this.size = array.length;\n    }\n\n    ArraySeq.prototype.get = function(index, notSetValue) {\n      return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue;\n    };\n\n    ArraySeq.prototype.__iterate = function(fn, reverse) {\n      var array = this._array;\n      var maxIndex = array.length - 1;\n      for (var ii = 0; ii <= maxIndex; ii++) {\n        if (fn(array[reverse ? maxIndex - ii : ii], ii, this) === false) {\n          return ii + 1;\n        }\n      }\n      return ii;\n    };\n\n    ArraySeq.prototype.__iterator = function(type, reverse) {\n      var array = this._array;\n      var maxIndex = array.length - 1;\n      var ii = 0;\n      return new Iterator(function() \n        {return ii > maxIndex ?\n          iteratorDone() :\n          iteratorValue(type, ii, array[reverse ? maxIndex - ii++ : ii++])}\n      );\n    };\n\n\n\n  createClass(ObjectSeq, KeyedSeq);\n    function ObjectSeq(object) {\n      var keys = Object.keys(object);\n      this._object = object;\n      this._keys = keys;\n      this.size = keys.length;\n    }\n\n    ObjectSeq.prototype.get = function(key, notSetValue) {\n      if (notSetValue !== undefined && !this.has(key)) {\n        return notSetValue;\n      }\n      return this._object[key];\n    };\n\n    ObjectSeq.prototype.has = function(key) {\n      return this._object.hasOwnProperty(key);\n    };\n\n    ObjectSeq.prototype.__iterate = function(fn, reverse) {\n      var object = this._object;\n      var keys = this._keys;\n      var maxIndex = keys.length - 1;\n      for (var ii = 0; ii <= maxIndex; ii++) {\n        var key = keys[reverse ? maxIndex - ii : ii];\n        if (fn(object[key], key, this) === false) {\n          return ii + 1;\n        }\n      }\n      return ii;\n    };\n\n    ObjectSeq.prototype.__iterator = function(type, reverse) {\n      var object = this._object;\n      var keys = this._keys;\n      var maxIndex = keys.length - 1;\n      var ii = 0;\n      return new Iterator(function()  {\n        var key = keys[reverse ? maxIndex - ii : ii];\n        return ii++ > maxIndex ?\n          iteratorDone() :\n          iteratorValue(type, key, object[key]);\n      });\n    };\n\n  ObjectSeq.prototype[IS_ORDERED_SENTINEL] = true;\n\n\n  createClass(IterableSeq, IndexedSeq);\n    function IterableSeq(iterable) {\n      this._iterable = iterable;\n      this.size = iterable.length || iterable.size;\n    }\n\n    IterableSeq.prototype.__iterateUncached = function(fn, reverse) {\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var iterable = this._iterable;\n      var iterator = getIterator(iterable);\n      var iterations = 0;\n      if (isIterator(iterator)) {\n        var step;\n        while (!(step = iterator.next()).done) {\n          if (fn(step.value, iterations++, this) === false) {\n            break;\n          }\n        }\n      }\n      return iterations;\n    };\n\n    IterableSeq.prototype.__iteratorUncached = function(type, reverse) {\n      if (reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      var iterable = this._iterable;\n      var iterator = getIterator(iterable);\n      if (!isIterator(iterator)) {\n        return new Iterator(iteratorDone);\n      }\n      var iterations = 0;\n      return new Iterator(function()  {\n        var step = iterator.next();\n        return step.done ? step : iteratorValue(type, iterations++, step.value);\n      });\n    };\n\n\n\n  createClass(IteratorSeq, IndexedSeq);\n    function IteratorSeq(iterator) {\n      this._iterator = iterator;\n      this._iteratorCache = [];\n    }\n\n    IteratorSeq.prototype.__iterateUncached = function(fn, reverse) {\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var iterator = this._iterator;\n      var cache = this._iteratorCache;\n      var iterations = 0;\n      while (iterations < cache.length) {\n        if (fn(cache[iterations], iterations++, this) === false) {\n          return iterations;\n        }\n      }\n      var step;\n      while (!(step = iterator.next()).done) {\n        var val = step.value;\n        cache[iterations] = val;\n        if (fn(val, iterations++, this) === false) {\n          break;\n        }\n      }\n      return iterations;\n    };\n\n    IteratorSeq.prototype.__iteratorUncached = function(type, reverse) {\n      if (reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      var iterator = this._iterator;\n      var cache = this._iteratorCache;\n      var iterations = 0;\n      return new Iterator(function()  {\n        if (iterations >= cache.length) {\n          var step = iterator.next();\n          if (step.done) {\n            return step;\n          }\n          cache[iterations] = step.value;\n        }\n        return iteratorValue(type, iterations, cache[iterations++]);\n      });\n    };\n\n\n\n\n  // # pragma Helper functions\n\n  function isSeq(maybeSeq) {\n    return !!(maybeSeq && maybeSeq[IS_SEQ_SENTINEL]);\n  }\n\n  var EMPTY_SEQ;\n\n  function emptySequence() {\n    return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([]));\n  }\n\n  function keyedSeqFromValue(value) {\n    var seq =\n      Array.isArray(value) ? new ArraySeq(value).fromEntrySeq() :\n      isIterator(value) ? new IteratorSeq(value).fromEntrySeq() :\n      hasIterator(value) ? new IterableSeq(value).fromEntrySeq() :\n      typeof value === 'object' ? new ObjectSeq(value) :\n      undefined;\n    if (!seq) {\n      throw new TypeError(\n        'Expected Array or iterable object of [k, v] entries, '+\n        'or keyed object: ' + value\n      );\n    }\n    return seq;\n  }\n\n  function indexedSeqFromValue(value) {\n    var seq = maybeIndexedSeqFromValue(value);\n    if (!seq) {\n      throw new TypeError(\n        'Expected Array or iterable object of values: ' + value\n      );\n    }\n    return seq;\n  }\n\n  function seqFromValue(value) {\n    var seq = maybeIndexedSeqFromValue(value) ||\n      (typeof value === 'object' && new ObjectSeq(value));\n    if (!seq) {\n      throw new TypeError(\n        'Expected Array or iterable object of values, or keyed object: ' + value\n      );\n    }\n    return seq;\n  }\n\n  function maybeIndexedSeqFromValue(value) {\n    return (\n      isArrayLike(value) ? new ArraySeq(value) :\n      isIterator(value) ? new IteratorSeq(value) :\n      hasIterator(value) ? new IterableSeq(value) :\n      undefined\n    );\n  }\n\n  function seqIterate(seq, fn, reverse, useKeys) {\n    var cache = seq._cache;\n    if (cache) {\n      var maxIndex = cache.length - 1;\n      for (var ii = 0; ii <= maxIndex; ii++) {\n        var entry = cache[reverse ? maxIndex - ii : ii];\n        if (fn(entry[1], useKeys ? entry[0] : ii, seq) === false) {\n          return ii + 1;\n        }\n      }\n      return ii;\n    }\n    return seq.__iterateUncached(fn, reverse);\n  }\n\n  function seqIterator(seq, type, reverse, useKeys) {\n    var cache = seq._cache;\n    if (cache) {\n      var maxIndex = cache.length - 1;\n      var ii = 0;\n      return new Iterator(function()  {\n        var entry = cache[reverse ? maxIndex - ii : ii];\n        return ii++ > maxIndex ?\n          iteratorDone() :\n          iteratorValue(type, useKeys ? entry[0] : ii - 1, entry[1]);\n      });\n    }\n    return seq.__iteratorUncached(type, reverse);\n  }\n\n  function fromJS(json, converter) {\n    return converter ?\n      fromJSWith(converter, json, '', {'': json}) :\n      fromJSDefault(json);\n  }\n\n  function fromJSWith(converter, json, key, parentJSON) {\n    if (Array.isArray(json)) {\n      return converter.call(parentJSON, key, IndexedSeq(json).map(function(v, k)  {return fromJSWith(converter, v, k, json)}));\n    }\n    if (isPlainObj(json)) {\n      return converter.call(parentJSON, key, KeyedSeq(json).map(function(v, k)  {return fromJSWith(converter, v, k, json)}));\n    }\n    return json;\n  }\n\n  function fromJSDefault(json) {\n    if (Array.isArray(json)) {\n      return IndexedSeq(json).map(fromJSDefault).toList();\n    }\n    if (isPlainObj(json)) {\n      return KeyedSeq(json).map(fromJSDefault).toMap();\n    }\n    return json;\n  }\n\n  function isPlainObj(value) {\n    return value && (value.constructor === Object || value.constructor === undefined);\n  }\n\n  /**\n   * An extension of the \"same-value\" algorithm as [described for use by ES6 Map\n   * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality)\n   *\n   * NaN is considered the same as NaN, however -0 and 0 are considered the same\n   * value, which is different from the algorithm described by\n   * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).\n   *\n   * This is extended further to allow Objects to describe the values they\n   * represent, by way of `valueOf` or `equals` (and `hashCode`).\n   *\n   * Note: because of this extension, the key equality of Immutable.Map and the\n   * value equality of Immutable.Set will differ from ES6 Map and Set.\n   *\n   * ### Defining custom values\n   *\n   * The easiest way to describe the value an object represents is by implementing\n   * `valueOf`. For example, `Date` represents a value by returning a unix\n   * timestamp for `valueOf`:\n   *\n   *     var date1 = new Date(1234567890000); // Fri Feb 13 2009 ...\n   *     var date2 = new Date(1234567890000);\n   *     date1.valueOf(); // 1234567890000\n   *     assert( date1 !== date2 );\n   *     assert( Immutable.is( date1, date2 ) );\n   *\n   * Note: overriding `valueOf` may have other implications if you use this object\n   * where JavaScript expects a primitive, such as implicit string coercion.\n   *\n   * For more complex types, especially collections, implementing `valueOf` may\n   * not be performant. An alternative is to implement `equals` and `hashCode`.\n   *\n   * `equals` takes another object, presumably of similar type, and returns true\n   * if the it is equal. Equality is symmetrical, so the same result should be\n   * returned if this and the argument are flipped.\n   *\n   *     assert( a.equals(b) === b.equals(a) );\n   *\n   * `hashCode` returns a 32bit integer number representing the object which will\n   * be used to determine how to store the value object in a Map or Set. You must\n   * provide both or neither methods, one must not exist without the other.\n   *\n   * Also, an important relationship between these methods must be upheld: if two\n   * values are equal, they *must* return the same hashCode. If the values are not\n   * equal, they might have the same hashCode; this is called a hash collision,\n   * and while undesirable for performance reasons, it is acceptable.\n   *\n   *     if (a.equals(b)) {\n   *       assert( a.hashCode() === b.hashCode() );\n   *     }\n   *\n   * All Immutable collections implement `equals` and `hashCode`.\n   *\n   */\n  function is(valueA, valueB) {\n    if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n      return true;\n    }\n    if (!valueA || !valueB) {\n      return false;\n    }\n    if (typeof valueA.valueOf === 'function' &&\n        typeof valueB.valueOf === 'function') {\n      valueA = valueA.valueOf();\n      valueB = valueB.valueOf();\n      if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n        return true;\n      }\n      if (!valueA || !valueB) {\n        return false;\n      }\n    }\n    if (typeof valueA.equals === 'function' &&\n        typeof valueB.equals === 'function' &&\n        valueA.equals(valueB)) {\n      return true;\n    }\n    return false;\n  }\n\n  function deepEqual(a, b) {\n    if (a === b) {\n      return true;\n    }\n\n    if (\n      !isIterable(b) ||\n      a.size !== undefined && b.size !== undefined && a.size !== b.size ||\n      a.__hash !== undefined && b.__hash !== undefined && a.__hash !== b.__hash ||\n      isKeyed(a) !== isKeyed(b) ||\n      isIndexed(a) !== isIndexed(b) ||\n      isOrdered(a) !== isOrdered(b)\n    ) {\n      return false;\n    }\n\n    if (a.size === 0 && b.size === 0) {\n      return true;\n    }\n\n    var notAssociative = !isAssociative(a);\n\n    if (isOrdered(a)) {\n      var entries = a.entries();\n      return b.every(function(v, k)  {\n        var entry = entries.next().value;\n        return entry && is(entry[1], v) && (notAssociative || is(entry[0], k));\n      }) && entries.next().done;\n    }\n\n    var flipped = false;\n\n    if (a.size === undefined) {\n      if (b.size === undefined) {\n        if (typeof a.cacheResult === 'function') {\n          a.cacheResult();\n        }\n      } else {\n        flipped = true;\n        var _ = a;\n        a = b;\n        b = _;\n      }\n    }\n\n    var allEqual = true;\n    var bSize = b.__iterate(function(v, k)  {\n      if (notAssociative ? !a.has(v) :\n          flipped ? !is(v, a.get(k, NOT_SET)) : !is(a.get(k, NOT_SET), v)) {\n        allEqual = false;\n        return false;\n      }\n    });\n\n    return allEqual && a.size === bSize;\n  }\n\n  createClass(Repeat, IndexedSeq);\n\n    function Repeat(value, times) {\n      if (!(this instanceof Repeat)) {\n        return new Repeat(value, times);\n      }\n      this._value = value;\n      this.size = times === undefined ? Infinity : Math.max(0, times);\n      if (this.size === 0) {\n        if (EMPTY_REPEAT) {\n          return EMPTY_REPEAT;\n        }\n        EMPTY_REPEAT = this;\n      }\n    }\n\n    Repeat.prototype.toString = function() {\n      if (this.size === 0) {\n        return 'Repeat []';\n      }\n      return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]';\n    };\n\n    Repeat.prototype.get = function(index, notSetValue) {\n      return this.has(index) ? this._value : notSetValue;\n    };\n\n    Repeat.prototype.includes = function(searchValue) {\n      return is(this._value, searchValue);\n    };\n\n    Repeat.prototype.slice = function(begin, end) {\n      var size = this.size;\n      return wholeSlice(begin, end, size) ? this :\n        new Repeat(this._value, resolveEnd(end, size) - resolveBegin(begin, size));\n    };\n\n    Repeat.prototype.reverse = function() {\n      return this;\n    };\n\n    Repeat.prototype.indexOf = function(searchValue) {\n      if (is(this._value, searchValue)) {\n        return 0;\n      }\n      return -1;\n    };\n\n    Repeat.prototype.lastIndexOf = function(searchValue) {\n      if (is(this._value, searchValue)) {\n        return this.size;\n      }\n      return -1;\n    };\n\n    Repeat.prototype.__iterate = function(fn, reverse) {\n      for (var ii = 0; ii < this.size; ii++) {\n        if (fn(this._value, ii, this) === false) {\n          return ii + 1;\n        }\n      }\n      return ii;\n    };\n\n    Repeat.prototype.__iterator = function(type, reverse) {var this$0 = this;\n      var ii = 0;\n      return new Iterator(function() \n        {return ii < this$0.size ? iteratorValue(type, ii++, this$0._value) : iteratorDone()}\n      );\n    };\n\n    Repeat.prototype.equals = function(other) {\n      return other instanceof Repeat ?\n        is(this._value, other._value) :\n        deepEqual(other);\n    };\n\n\n  var EMPTY_REPEAT;\n\n  function invariant(condition, error) {\n    if (!condition) throw new Error(error);\n  }\n\n  createClass(Range, IndexedSeq);\n\n    function Range(start, end, step) {\n      if (!(this instanceof Range)) {\n        return new Range(start, end, step);\n      }\n      invariant(step !== 0, 'Cannot step a Range by 0');\n      start = start || 0;\n      if (end === undefined) {\n        end = Infinity;\n      }\n      step = step === undefined ? 1 : Math.abs(step);\n      if (end < start) {\n        step = -step;\n      }\n      this._start = start;\n      this._end = end;\n      this._step = step;\n      this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1);\n      if (this.size === 0) {\n        if (EMPTY_RANGE) {\n          return EMPTY_RANGE;\n        }\n        EMPTY_RANGE = this;\n      }\n    }\n\n    Range.prototype.toString = function() {\n      if (this.size === 0) {\n        return 'Range []';\n      }\n      return 'Range [ ' +\n        this._start + '...' + this._end +\n        (this._step !== 1 ? ' by ' + this._step : '') +\n      ' ]';\n    };\n\n    Range.prototype.get = function(index, notSetValue) {\n      return this.has(index) ?\n        this._start + wrapIndex(this, index) * this._step :\n        notSetValue;\n    };\n\n    Range.prototype.includes = function(searchValue) {\n      var possibleIndex = (searchValue - this._start) / this._step;\n      return possibleIndex >= 0 &&\n        possibleIndex < this.size &&\n        possibleIndex === Math.floor(possibleIndex);\n    };\n\n    Range.prototype.slice = function(begin, end) {\n      if (wholeSlice(begin, end, this.size)) {\n        return this;\n      }\n      begin = resolveBegin(begin, this.size);\n      end = resolveEnd(end, this.size);\n      if (end <= begin) {\n        return new Range(0, 0);\n      }\n      return new Range(this.get(begin, this._end), this.get(end, this._end), this._step);\n    };\n\n    Range.prototype.indexOf = function(searchValue) {\n      var offsetValue = searchValue - this._start;\n      if (offsetValue % this._step === 0) {\n        var index = offsetValue / this._step;\n        if (index >= 0 && index < this.size) {\n          return index\n        }\n      }\n      return -1;\n    };\n\n    Range.prototype.lastIndexOf = function(searchValue) {\n      return this.indexOf(searchValue);\n    };\n\n    Range.prototype.__iterate = function(fn, reverse) {\n      var maxIndex = this.size - 1;\n      var step = this._step;\n      var value = reverse ? this._start + maxIndex * step : this._start;\n      for (var ii = 0; ii <= maxIndex; ii++) {\n        if (fn(value, ii, this) === false) {\n          return ii + 1;\n        }\n        value += reverse ? -step : step;\n      }\n      return ii;\n    };\n\n    Range.prototype.__iterator = function(type, reverse) {\n      var maxIndex = this.size - 1;\n      var step = this._step;\n      var value = reverse ? this._start + maxIndex * step : this._start;\n      var ii = 0;\n      return new Iterator(function()  {\n        var v = value;\n        value += reverse ? -step : step;\n        return ii > maxIndex ? iteratorDone() : iteratorValue(type, ii++, v);\n      });\n    };\n\n    Range.prototype.equals = function(other) {\n      return other instanceof Range ?\n        this._start === other._start &&\n        this._end === other._end &&\n        this._step === other._step :\n        deepEqual(this, other);\n    };\n\n\n  var EMPTY_RANGE;\n\n  createClass(Collection, Iterable);\n    function Collection() {\n      throw TypeError('Abstract');\n    }\n\n\n  createClass(KeyedCollection, Collection);function KeyedCollection() {}\n\n  createClass(IndexedCollection, Collection);function IndexedCollection() {}\n\n  createClass(SetCollection, Collection);function SetCollection() {}\n\n\n  Collection.Keyed = KeyedCollection;\n  Collection.Indexed = IndexedCollection;\n  Collection.Set = SetCollection;\n\n  var imul =\n    typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2 ?\n    Math.imul :\n    function imul(a, b) {\n      a = a | 0; // int\n      b = b | 0; // int\n      var c = a & 0xffff;\n      var d = b & 0xffff;\n      // Shift by 0 fixes the sign on the high part.\n      return (c * d) + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0) | 0; // int\n    };\n\n  // v8 has an optimization for storing 31-bit signed numbers.\n  // Values which have either 00 or 11 as the high order bits qualify.\n  // This function drops the highest order bit in a signed number, maintaining\n  // the sign bit.\n  function smi(i32) {\n    return ((i32 >>> 1) & 0x40000000) | (i32 & 0xBFFFFFFF);\n  }\n\n  function hash(o) {\n    if (o === false || o === null || o === undefined) {\n      return 0;\n    }\n    if (typeof o.valueOf === 'function') {\n      o = o.valueOf();\n      if (o === false || o === null || o === undefined) {\n        return 0;\n      }\n    }\n    if (o === true) {\n      return 1;\n    }\n    var type = typeof o;\n    if (type === 'number') {\n      if (o !== o || o === Infinity) {\n        return 0;\n      }\n      var h = o | 0;\n      if (h !== o) {\n        h ^= o * 0xFFFFFFFF;\n      }\n      while (o > 0xFFFFFFFF) {\n        o /= 0xFFFFFFFF;\n        h ^= o;\n      }\n      return smi(h);\n    }\n    if (type === 'string') {\n      return o.length > STRING_HASH_CACHE_MIN_STRLEN ? cachedHashString(o) : hashString(o);\n    }\n    if (typeof o.hashCode === 'function') {\n      return o.hashCode();\n    }\n    if (type === 'object') {\n      return hashJSObj(o);\n    }\n    if (typeof o.toString === 'function') {\n      return hashString(o.toString());\n    }\n    throw new Error('Value type ' + type + ' cannot be hashed.');\n  }\n\n  function cachedHashString(string) {\n    var hash = stringHashCache[string];\n    if (hash === undefined) {\n      hash = hashString(string);\n      if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) {\n        STRING_HASH_CACHE_SIZE = 0;\n        stringHashCache = {};\n      }\n      STRING_HASH_CACHE_SIZE++;\n      stringHashCache[string] = hash;\n    }\n    return hash;\n  }\n\n  // http://jsperf.com/hashing-strings\n  function hashString(string) {\n    // This is the hash from JVM\n    // The hash code for a string is computed as\n    // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1],\n    // where s[i] is the ith character of the string and n is the length of\n    // the string. We \"mod\" the result to make it between 0 (inclusive) and 2^31\n    // (exclusive) by dropping high bits.\n    var hash = 0;\n    for (var ii = 0; ii < string.length; ii++) {\n      hash = 31 * hash + string.charCodeAt(ii) | 0;\n    }\n    return smi(hash);\n  }\n\n  function hashJSObj(obj) {\n    var hash;\n    if (usingWeakMap) {\n      hash = weakMap.get(obj);\n      if (hash !== undefined) {\n        return hash;\n      }\n    }\n\n    hash = obj[UID_HASH_KEY];\n    if (hash !== undefined) {\n      return hash;\n    }\n\n    if (!canDefineProperty) {\n      hash = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY];\n      if (hash !== undefined) {\n        return hash;\n      }\n\n      hash = getIENodeHash(obj);\n      if (hash !== undefined) {\n        return hash;\n      }\n    }\n\n    hash = ++objHashUID;\n    if (objHashUID & 0x40000000) {\n      objHashUID = 0;\n    }\n\n    if (usingWeakMap) {\n      weakMap.set(obj, hash);\n    } else if (isExtensible !== undefined && isExtensible(obj) === false) {\n      throw new Error('Non-extensible objects are not allowed as keys.');\n    } else if (canDefineProperty) {\n      Object.defineProperty(obj, UID_HASH_KEY, {\n        'enumerable': false,\n        'configurable': false,\n        'writable': false,\n        'value': hash\n      });\n    } else if (obj.propertyIsEnumerable !== undefined &&\n               obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable) {\n      // Since we can't define a non-enumerable property on the object\n      // we'll hijack one of the less-used non-enumerable properties to\n      // save our hash on it. Since this is a function it will not show up in\n      // `JSON.stringify` which is what we want.\n      obj.propertyIsEnumerable = function() {\n        return this.constructor.prototype.propertyIsEnumerable.apply(this, arguments);\n      };\n      obj.propertyIsEnumerable[UID_HASH_KEY] = hash;\n    } else if (obj.nodeType !== undefined) {\n      // At this point we couldn't get the IE `uniqueID` to use as a hash\n      // and we couldn't use a non-enumerable property to exploit the\n      // dontEnum bug so we simply add the `UID_HASH_KEY` on the node\n      // itself.\n      obj[UID_HASH_KEY] = hash;\n    } else {\n      throw new Error('Unable to set a non-enumerable property on object.');\n    }\n\n    return hash;\n  }\n\n  // Get references to ES5 object methods.\n  var isExtensible = Object.isExtensible;\n\n  // True if Object.defineProperty works as expected. IE8 fails this test.\n  var canDefineProperty = (function() {\n    try {\n      Object.defineProperty({}, '@', {});\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }());\n\n  // IE has a `uniqueID` property on DOM nodes. We can construct the hash from it\n  // and avoid memory leaks from the IE cloneNode bug.\n  function getIENodeHash(node) {\n    if (node && node.nodeType > 0) {\n      switch (node.nodeType) {\n        case 1: // Element\n          return node.uniqueID;\n        case 9: // Document\n          return node.documentElement && node.documentElement.uniqueID;\n      }\n    }\n  }\n\n  // If possible, use a WeakMap.\n  var usingWeakMap = typeof WeakMap === 'function';\n  var weakMap;\n  if (usingWeakMap) {\n    weakMap = new WeakMap();\n  }\n\n  var objHashUID = 0;\n\n  var UID_HASH_KEY = '__immutablehash__';\n  if (typeof Symbol === 'function') {\n    UID_HASH_KEY = Symbol(UID_HASH_KEY);\n  }\n\n  var STRING_HASH_CACHE_MIN_STRLEN = 16;\n  var STRING_HASH_CACHE_MAX_SIZE = 255;\n  var STRING_HASH_CACHE_SIZE = 0;\n  var stringHashCache = {};\n\n  function assertNotInfinite(size) {\n    invariant(\n      size !== Infinity,\n      'Cannot perform this action with an infinite size.'\n    );\n  }\n\n  createClass(Map, KeyedCollection);\n\n    // @pragma Construction\n\n    function Map(value) {\n      return value === null || value === undefined ? emptyMap() :\n        isMap(value) && !isOrdered(value) ? value :\n        emptyMap().withMutations(function(map ) {\n          var iter = KeyedIterable(value);\n          assertNotInfinite(iter.size);\n          iter.forEach(function(v, k)  {return map.set(k, v)});\n        });\n    }\n\n    Map.of = function() {var keyValues = SLICE$0.call(arguments, 0);\n      return emptyMap().withMutations(function(map ) {\n        for (var i = 0; i < keyValues.length; i += 2) {\n          if (i + 1 >= keyValues.length) {\n            throw new Error('Missing value for key: ' + keyValues[i]);\n          }\n          map.set(keyValues[i], keyValues[i + 1]);\n        }\n      });\n    };\n\n    Map.prototype.toString = function() {\n      return this.__toString('Map {', '}');\n    };\n\n    // @pragma Access\n\n    Map.prototype.get = function(k, notSetValue) {\n      return this._root ?\n        this._root.get(0, undefined, k, notSetValue) :\n        notSetValue;\n    };\n\n    // @pragma Modification\n\n    Map.prototype.set = function(k, v) {\n      return updateMap(this, k, v);\n    };\n\n    Map.prototype.setIn = function(keyPath, v) {\n      return this.updateIn(keyPath, NOT_SET, function()  {return v});\n    };\n\n    Map.prototype.remove = function(k) {\n      return updateMap(this, k, NOT_SET);\n    };\n\n    Map.prototype.deleteIn = function(keyPath) {\n      return this.updateIn(keyPath, function()  {return NOT_SET});\n    };\n\n    Map.prototype.update = function(k, notSetValue, updater) {\n      return arguments.length === 1 ?\n        k(this) :\n        this.updateIn([k], notSetValue, updater);\n    };\n\n    Map.prototype.updateIn = function(keyPath, notSetValue, updater) {\n      if (!updater) {\n        updater = notSetValue;\n        notSetValue = undefined;\n      }\n      var updatedValue = updateInDeepMap(\n        this,\n        forceIterator(keyPath),\n        notSetValue,\n        updater\n      );\n      return updatedValue === NOT_SET ? undefined : updatedValue;\n    };\n\n    Map.prototype.clear = function() {\n      if (this.size === 0) {\n        return this;\n      }\n      if (this.__ownerID) {\n        this.size = 0;\n        this._root = null;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return emptyMap();\n    };\n\n    // @pragma Composition\n\n    Map.prototype.merge = function(/*...iters*/) {\n      return mergeIntoMapWith(this, undefined, arguments);\n    };\n\n    Map.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return mergeIntoMapWith(this, merger, iters);\n    };\n\n    Map.prototype.mergeIn = function(keyPath) {var iters = SLICE$0.call(arguments, 1);\n      return this.updateIn(\n        keyPath,\n        emptyMap(),\n        function(m ) {return typeof m.merge === 'function' ?\n          m.merge.apply(m, iters) :\n          iters[iters.length - 1]}\n      );\n    };\n\n    Map.prototype.mergeDeep = function(/*...iters*/) {\n      return mergeIntoMapWith(this, deepMerger, arguments);\n    };\n\n    Map.prototype.mergeDeepWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return mergeIntoMapWith(this, deepMergerWith(merger), iters);\n    };\n\n    Map.prototype.mergeDeepIn = function(keyPath) {var iters = SLICE$0.call(arguments, 1);\n      return this.updateIn(\n        keyPath,\n        emptyMap(),\n        function(m ) {return typeof m.mergeDeep === 'function' ?\n          m.mergeDeep.apply(m, iters) :\n          iters[iters.length - 1]}\n      );\n    };\n\n    Map.prototype.sort = function(comparator) {\n      // Late binding\n      return OrderedMap(sortFactory(this, comparator));\n    };\n\n    Map.prototype.sortBy = function(mapper, comparator) {\n      // Late binding\n      return OrderedMap(sortFactory(this, comparator, mapper));\n    };\n\n    // @pragma Mutability\n\n    Map.prototype.withMutations = function(fn) {\n      var mutable = this.asMutable();\n      fn(mutable);\n      return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this;\n    };\n\n    Map.prototype.asMutable = function() {\n      return this.__ownerID ? this : this.__ensureOwner(new OwnerID());\n    };\n\n    Map.prototype.asImmutable = function() {\n      return this.__ensureOwner();\n    };\n\n    Map.prototype.wasAltered = function() {\n      return this.__altered;\n    };\n\n    Map.prototype.__iterator = function(type, reverse) {\n      return new MapIterator(this, type, reverse);\n    };\n\n    Map.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      var iterations = 0;\n      this._root && this._root.iterate(function(entry ) {\n        iterations++;\n        return fn(entry[1], entry[0], this$0);\n      }, reverse);\n      return iterations;\n    };\n\n    Map.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this.__altered = false;\n        return this;\n      }\n      return makeMap(this.size, this._root, ownerID, this.__hash);\n    };\n\n\n  function isMap(maybeMap) {\n    return !!(maybeMap && maybeMap[IS_MAP_SENTINEL]);\n  }\n\n  Map.isMap = isMap;\n\n  var IS_MAP_SENTINEL = '@@__IMMUTABLE_MAP__@@';\n\n  var MapPrototype = Map.prototype;\n  MapPrototype[IS_MAP_SENTINEL] = true;\n  MapPrototype[DELETE] = MapPrototype.remove;\n  MapPrototype.removeIn = MapPrototype.deleteIn;\n\n\n  // #pragma Trie Nodes\n\n\n\n    function ArrayMapNode(ownerID, entries) {\n      this.ownerID = ownerID;\n      this.entries = entries;\n    }\n\n    ArrayMapNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      var entries = this.entries;\n      for (var ii = 0, len = entries.length; ii < len; ii++) {\n        if (is(key, entries[ii][0])) {\n          return entries[ii][1];\n        }\n      }\n      return notSetValue;\n    };\n\n    ArrayMapNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      var removed = value === NOT_SET;\n\n      var entries = this.entries;\n      var idx = 0;\n      for (var len = entries.length; idx < len; idx++) {\n        if (is(key, entries[idx][0])) {\n          break;\n        }\n      }\n      var exists = idx < len;\n\n      if (exists ? entries[idx][1] === value : removed) {\n        return this;\n      }\n\n      SetRef(didAlter);\n      (removed || !exists) && SetRef(didChangeSize);\n\n      if (removed && entries.length === 1) {\n        return; // undefined\n      }\n\n      if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) {\n        return createNodes(ownerID, entries, key, value);\n      }\n\n      var isEditable = ownerID && ownerID === this.ownerID;\n      var newEntries = isEditable ? entries : arrCopy(entries);\n\n      if (exists) {\n        if (removed) {\n          idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop());\n        } else {\n          newEntries[idx] = [key, value];\n        }\n      } else {\n        newEntries.push([key, value]);\n      }\n\n      if (isEditable) {\n        this.entries = newEntries;\n        return this;\n      }\n\n      return new ArrayMapNode(ownerID, newEntries);\n    };\n\n\n\n\n    function BitmapIndexedNode(ownerID, bitmap, nodes) {\n      this.ownerID = ownerID;\n      this.bitmap = bitmap;\n      this.nodes = nodes;\n    }\n\n    BitmapIndexedNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n      var bit = (1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK));\n      var bitmap = this.bitmap;\n      return (bitmap & bit) === 0 ? notSetValue :\n        this.nodes[popCount(bitmap & (bit - 1))].get(shift + SHIFT, keyHash, key, notSetValue);\n    };\n\n    BitmapIndexedNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n      var keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n      var bit = 1 << keyHashFrag;\n      var bitmap = this.bitmap;\n      var exists = (bitmap & bit) !== 0;\n\n      if (!exists && value === NOT_SET) {\n        return this;\n      }\n\n      var idx = popCount(bitmap & (bit - 1));\n      var nodes = this.nodes;\n      var node = exists ? nodes[idx] : undefined;\n      var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);\n\n      if (newNode === node) {\n        return this;\n      }\n\n      if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) {\n        return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode);\n      }\n\n      if (exists && !newNode && nodes.length === 2 && isLeafNode(nodes[idx ^ 1])) {\n        return nodes[idx ^ 1];\n      }\n\n      if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) {\n        return newNode;\n      }\n\n      var isEditable = ownerID && ownerID === this.ownerID;\n      var newBitmap = exists ? newNode ? bitmap : bitmap ^ bit : bitmap | bit;\n      var newNodes = exists ? newNode ?\n        setIn(nodes, idx, newNode, isEditable) :\n        spliceOut(nodes, idx, isEditable) :\n        spliceIn(nodes, idx, newNode, isEditable);\n\n      if (isEditable) {\n        this.bitmap = newBitmap;\n        this.nodes = newNodes;\n        return this;\n      }\n\n      return new BitmapIndexedNode(ownerID, newBitmap, newNodes);\n    };\n\n\n\n\n    function HashArrayMapNode(ownerID, count, nodes) {\n      this.ownerID = ownerID;\n      this.count = count;\n      this.nodes = nodes;\n    }\n\n    HashArrayMapNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n      var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n      var node = this.nodes[idx];\n      return node ? node.get(shift + SHIFT, keyHash, key, notSetValue) : notSetValue;\n    };\n\n    HashArrayMapNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n      var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n      var removed = value === NOT_SET;\n      var nodes = this.nodes;\n      var node = nodes[idx];\n\n      if (removed && !node) {\n        return this;\n      }\n\n      var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);\n      if (newNode === node) {\n        return this;\n      }\n\n      var newCount = this.count;\n      if (!node) {\n        newCount++;\n      } else if (!newNode) {\n        newCount--;\n        if (newCount < MIN_HASH_ARRAY_MAP_SIZE) {\n          return packNodes(ownerID, nodes, newCount, idx);\n        }\n      }\n\n      var isEditable = ownerID && ownerID === this.ownerID;\n      var newNodes = setIn(nodes, idx, newNode, isEditable);\n\n      if (isEditable) {\n        this.count = newCount;\n        this.nodes = newNodes;\n        return this;\n      }\n\n      return new HashArrayMapNode(ownerID, newCount, newNodes);\n    };\n\n\n\n\n    function HashCollisionNode(ownerID, keyHash, entries) {\n      this.ownerID = ownerID;\n      this.keyHash = keyHash;\n      this.entries = entries;\n    }\n\n    HashCollisionNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      var entries = this.entries;\n      for (var ii = 0, len = entries.length; ii < len; ii++) {\n        if (is(key, entries[ii][0])) {\n          return entries[ii][1];\n        }\n      }\n      return notSetValue;\n    };\n\n    HashCollisionNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n\n      var removed = value === NOT_SET;\n\n      if (keyHash !== this.keyHash) {\n        if (removed) {\n          return this;\n        }\n        SetRef(didAlter);\n        SetRef(didChangeSize);\n        return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]);\n      }\n\n      var entries = this.entries;\n      var idx = 0;\n      for (var len = entries.length; idx < len; idx++) {\n        if (is(key, entries[idx][0])) {\n          break;\n        }\n      }\n      var exists = idx < len;\n\n      if (exists ? entries[idx][1] === value : removed) {\n        return this;\n      }\n\n      SetRef(didAlter);\n      (removed || !exists) && SetRef(didChangeSize);\n\n      if (removed && len === 2) {\n        return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]);\n      }\n\n      var isEditable = ownerID && ownerID === this.ownerID;\n      var newEntries = isEditable ? entries : arrCopy(entries);\n\n      if (exists) {\n        if (removed) {\n          idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop());\n        } else {\n          newEntries[idx] = [key, value];\n        }\n      } else {\n        newEntries.push([key, value]);\n      }\n\n      if (isEditable) {\n        this.entries = newEntries;\n        return this;\n      }\n\n      return new HashCollisionNode(ownerID, this.keyHash, newEntries);\n    };\n\n\n\n\n    function ValueNode(ownerID, keyHash, entry) {\n      this.ownerID = ownerID;\n      this.keyHash = keyHash;\n      this.entry = entry;\n    }\n\n    ValueNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      return is(key, this.entry[0]) ? this.entry[1] : notSetValue;\n    };\n\n    ValueNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      var removed = value === NOT_SET;\n      var keyMatch = is(key, this.entry[0]);\n      if (keyMatch ? value === this.entry[1] : removed) {\n        return this;\n      }\n\n      SetRef(didAlter);\n\n      if (removed) {\n        SetRef(didChangeSize);\n        return; // undefined\n      }\n\n      if (keyMatch) {\n        if (ownerID && ownerID === this.ownerID) {\n          this.entry[1] = value;\n          return this;\n        }\n        return new ValueNode(ownerID, this.keyHash, [key, value]);\n      }\n\n      SetRef(didChangeSize);\n      return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]);\n    };\n\n\n\n  // #pragma Iterators\n\n  ArrayMapNode.prototype.iterate =\n  HashCollisionNode.prototype.iterate = function (fn, reverse) {\n    var entries = this.entries;\n    for (var ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) {\n      if (fn(entries[reverse ? maxIndex - ii : ii]) === false) {\n        return false;\n      }\n    }\n  }\n\n  BitmapIndexedNode.prototype.iterate =\n  HashArrayMapNode.prototype.iterate = function (fn, reverse) {\n    var nodes = this.nodes;\n    for (var ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) {\n      var node = nodes[reverse ? maxIndex - ii : ii];\n      if (node && node.iterate(fn, reverse) === false) {\n        return false;\n      }\n    }\n  }\n\n  ValueNode.prototype.iterate = function (fn, reverse) {\n    return fn(this.entry);\n  }\n\n  createClass(MapIterator, Iterator);\n\n    function MapIterator(map, type, reverse) {\n      this._type = type;\n      this._reverse = reverse;\n      this._stack = map._root && mapIteratorFrame(map._root);\n    }\n\n    MapIterator.prototype.next = function() {\n      var type = this._type;\n      var stack = this._stack;\n      while (stack) {\n        var node = stack.node;\n        var index = stack.index++;\n        var maxIndex;\n        if (node.entry) {\n          if (index === 0) {\n            return mapIteratorValue(type, node.entry);\n          }\n        } else if (node.entries) {\n          maxIndex = node.entries.length - 1;\n          if (index <= maxIndex) {\n            return mapIteratorValue(type, node.entries[this._reverse ? maxIndex - index : index]);\n          }\n        } else {\n          maxIndex = node.nodes.length - 1;\n          if (index <= maxIndex) {\n            var subNode = node.nodes[this._reverse ? maxIndex - index : index];\n            if (subNode) {\n              if (subNode.entry) {\n                return mapIteratorValue(type, subNode.entry);\n              }\n              stack = this._stack = mapIteratorFrame(subNode, stack);\n            }\n            continue;\n          }\n        }\n        stack = this._stack = this._stack.__prev;\n      }\n      return iteratorDone();\n    };\n\n\n  function mapIteratorValue(type, entry) {\n    return iteratorValue(type, entry[0], entry[1]);\n  }\n\n  function mapIteratorFrame(node, prev) {\n    return {\n      node: node,\n      index: 0,\n      __prev: prev\n    };\n  }\n\n  function makeMap(size, root, ownerID, hash) {\n    var map = Object.create(MapPrototype);\n    map.size = size;\n    map._root = root;\n    map.__ownerID = ownerID;\n    map.__hash = hash;\n    map.__altered = false;\n    return map;\n  }\n\n  var EMPTY_MAP;\n  function emptyMap() {\n    return EMPTY_MAP || (EMPTY_MAP = makeMap(0));\n  }\n\n  function updateMap(map, k, v) {\n    var newRoot;\n    var newSize;\n    if (!map._root) {\n      if (v === NOT_SET) {\n        return map;\n      }\n      newSize = 1;\n      newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]);\n    } else {\n      var didChangeSize = MakeRef(CHANGE_LENGTH);\n      var didAlter = MakeRef(DID_ALTER);\n      newRoot = updateNode(map._root, map.__ownerID, 0, undefined, k, v, didChangeSize, didAlter);\n      if (!didAlter.value) {\n        return map;\n      }\n      newSize = map.size + (didChangeSize.value ? v === NOT_SET ? -1 : 1 : 0);\n    }\n    if (map.__ownerID) {\n      map.size = newSize;\n      map._root = newRoot;\n      map.__hash = undefined;\n      map.__altered = true;\n      return map;\n    }\n    return newRoot ? makeMap(newSize, newRoot) : emptyMap();\n  }\n\n  function updateNode(node, ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n    if (!node) {\n      if (value === NOT_SET) {\n        return node;\n      }\n      SetRef(didAlter);\n      SetRef(didChangeSize);\n      return new ValueNode(ownerID, keyHash, [key, value]);\n    }\n    return node.update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter);\n  }\n\n  function isLeafNode(node) {\n    return node.constructor === ValueNode || node.constructor === HashCollisionNode;\n  }\n\n  function mergeIntoNode(node, ownerID, shift, keyHash, entry) {\n    if (node.keyHash === keyHash) {\n      return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]);\n    }\n\n    var idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK;\n    var idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n\n    var newNode;\n    var nodes = idx1 === idx2 ?\n      [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)] :\n      ((newNode = new ValueNode(ownerID, keyHash, entry)), idx1 < idx2 ? [node, newNode] : [newNode, node]);\n\n    return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes);\n  }\n\n  function createNodes(ownerID, entries, key, value) {\n    if (!ownerID) {\n      ownerID = new OwnerID();\n    }\n    var node = new ValueNode(ownerID, hash(key), [key, value]);\n    for (var ii = 0; ii < entries.length; ii++) {\n      var entry = entries[ii];\n      node = node.update(ownerID, 0, undefined, entry[0], entry[1]);\n    }\n    return node;\n  }\n\n  function packNodes(ownerID, nodes, count, excluding) {\n    var bitmap = 0;\n    var packedII = 0;\n    var packedNodes = new Array(count);\n    for (var ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) {\n      var node = nodes[ii];\n      if (node !== undefined && ii !== excluding) {\n        bitmap |= bit;\n        packedNodes[packedII++] = node;\n      }\n    }\n    return new BitmapIndexedNode(ownerID, bitmap, packedNodes);\n  }\n\n  function expandNodes(ownerID, nodes, bitmap, including, node) {\n    var count = 0;\n    var expandedNodes = new Array(SIZE);\n    for (var ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) {\n      expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined;\n    }\n    expandedNodes[including] = node;\n    return new HashArrayMapNode(ownerID, count + 1, expandedNodes);\n  }\n\n  function mergeIntoMapWith(map, merger, iterables) {\n    var iters = [];\n    for (var ii = 0; ii < iterables.length; ii++) {\n      var value = iterables[ii];\n      var iter = KeyedIterable(value);\n      if (!isIterable(value)) {\n        iter = iter.map(function(v ) {return fromJS(v)});\n      }\n      iters.push(iter);\n    }\n    return mergeIntoCollectionWith(map, merger, iters);\n  }\n\n  function deepMerger(existing, value, key) {\n    return existing && existing.mergeDeep && isIterable(value) ?\n      existing.mergeDeep(value) :\n      is(existing, value) ? existing : value;\n  }\n\n  function deepMergerWith(merger) {\n    return function(existing, value, key)  {\n      if (existing && existing.mergeDeepWith && isIterable(value)) {\n        return existing.mergeDeepWith(merger, value);\n      }\n      var nextValue = merger(existing, value, key);\n      return is(existing, nextValue) ? existing : nextValue;\n    };\n  }\n\n  function mergeIntoCollectionWith(collection, merger, iters) {\n    iters = iters.filter(function(x ) {return x.size !== 0});\n    if (iters.length === 0) {\n      return collection;\n    }\n    if (collection.size === 0 && !collection.__ownerID && iters.length === 1) {\n      return collection.constructor(iters[0]);\n    }\n    return collection.withMutations(function(collection ) {\n      var mergeIntoMap = merger ?\n        function(value, key)  {\n          collection.update(key, NOT_SET, function(existing )\n            {return existing === NOT_SET ? value : merger(existing, value, key)}\n          );\n        } :\n        function(value, key)  {\n          collection.set(key, value);\n        }\n      for (var ii = 0; ii < iters.length; ii++) {\n        iters[ii].forEach(mergeIntoMap);\n      }\n    });\n  }\n\n  function updateInDeepMap(existing, keyPathIter, notSetValue, updater) {\n    var isNotSet = existing === NOT_SET;\n    var step = keyPathIter.next();\n    if (step.done) {\n      var existingValue = isNotSet ? notSetValue : existing;\n      var newValue = updater(existingValue);\n      return newValue === existingValue ? existing : newValue;\n    }\n    invariant(\n      isNotSet || (existing && existing.set),\n      'invalid keyPath'\n    );\n    var key = step.value;\n    var nextExisting = isNotSet ? NOT_SET : existing.get(key, NOT_SET);\n    var nextUpdated = updateInDeepMap(\n      nextExisting,\n      keyPathIter,\n      notSetValue,\n      updater\n    );\n    return nextUpdated === nextExisting ? existing :\n      nextUpdated === NOT_SET ? existing.remove(key) :\n      (isNotSet ? emptyMap() : existing).set(key, nextUpdated);\n  }\n\n  function popCount(x) {\n    x = x - ((x >> 1) & 0x55555555);\n    x = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n    x = (x + (x >> 4)) & 0x0f0f0f0f;\n    x = x + (x >> 8);\n    x = x + (x >> 16);\n    return x & 0x7f;\n  }\n\n  function setIn(array, idx, val, canEdit) {\n    var newArray = canEdit ? array : arrCopy(array);\n    newArray[idx] = val;\n    return newArray;\n  }\n\n  function spliceIn(array, idx, val, canEdit) {\n    var newLen = array.length + 1;\n    if (canEdit && idx + 1 === newLen) {\n      array[idx] = val;\n      return array;\n    }\n    var newArray = new Array(newLen);\n    var after = 0;\n    for (var ii = 0; ii < newLen; ii++) {\n      if (ii === idx) {\n        newArray[ii] = val;\n        after = -1;\n      } else {\n        newArray[ii] = array[ii + after];\n      }\n    }\n    return newArray;\n  }\n\n  function spliceOut(array, idx, canEdit) {\n    var newLen = array.length - 1;\n    if (canEdit && idx === newLen) {\n      array.pop();\n      return array;\n    }\n    var newArray = new Array(newLen);\n    var after = 0;\n    for (var ii = 0; ii < newLen; ii++) {\n      if (ii === idx) {\n        after = 1;\n      }\n      newArray[ii] = array[ii + after];\n    }\n    return newArray;\n  }\n\n  var MAX_ARRAY_MAP_SIZE = SIZE / 4;\n  var MAX_BITMAP_INDEXED_SIZE = SIZE / 2;\n  var MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4;\n\n  createClass(List, IndexedCollection);\n\n    // @pragma Construction\n\n    function List(value) {\n      var empty = emptyList();\n      if (value === null || value === undefined) {\n        return empty;\n      }\n      if (isList(value)) {\n        return value;\n      }\n      var iter = IndexedIterable(value);\n      var size = iter.size;\n      if (size === 0) {\n        return empty;\n      }\n      assertNotInfinite(size);\n      if (size > 0 && size < SIZE) {\n        return makeList(0, size, SHIFT, null, new VNode(iter.toArray()));\n      }\n      return empty.withMutations(function(list ) {\n        list.setSize(size);\n        iter.forEach(function(v, i)  {return list.set(i, v)});\n      });\n    }\n\n    List.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    List.prototype.toString = function() {\n      return this.__toString('List [', ']');\n    };\n\n    // @pragma Access\n\n    List.prototype.get = function(index, notSetValue) {\n      index = wrapIndex(this, index);\n      if (index >= 0 && index < this.size) {\n        index += this._origin;\n        var node = listNodeFor(this, index);\n        return node && node.array[index & MASK];\n      }\n      return notSetValue;\n    };\n\n    // @pragma Modification\n\n    List.prototype.set = function(index, value) {\n      return updateList(this, index, value);\n    };\n\n    List.prototype.remove = function(index) {\n      return !this.has(index) ? this :\n        index === 0 ? this.shift() :\n        index === this.size - 1 ? this.pop() :\n        this.splice(index, 1);\n    };\n\n    List.prototype.insert = function(index, value) {\n      return this.splice(index, 0, value);\n    };\n\n    List.prototype.clear = function() {\n      if (this.size === 0) {\n        return this;\n      }\n      if (this.__ownerID) {\n        this.size = this._origin = this._capacity = 0;\n        this._level = SHIFT;\n        this._root = this._tail = null;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return emptyList();\n    };\n\n    List.prototype.push = function(/*...values*/) {\n      var values = arguments;\n      var oldSize = this.size;\n      return this.withMutations(function(list ) {\n        setListBounds(list, 0, oldSize + values.length);\n        for (var ii = 0; ii < values.length; ii++) {\n          list.set(oldSize + ii, values[ii]);\n        }\n      });\n    };\n\n    List.prototype.pop = function() {\n      return setListBounds(this, 0, -1);\n    };\n\n    List.prototype.unshift = function(/*...values*/) {\n      var values = arguments;\n      return this.withMutations(function(list ) {\n        setListBounds(list, -values.length);\n        for (var ii = 0; ii < values.length; ii++) {\n          list.set(ii, values[ii]);\n        }\n      });\n    };\n\n    List.prototype.shift = function() {\n      return setListBounds(this, 1);\n    };\n\n    // @pragma Composition\n\n    List.prototype.merge = function(/*...iters*/) {\n      return mergeIntoListWith(this, undefined, arguments);\n    };\n\n    List.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return mergeIntoListWith(this, merger, iters);\n    };\n\n    List.prototype.mergeDeep = function(/*...iters*/) {\n      return mergeIntoListWith(this, deepMerger, arguments);\n    };\n\n    List.prototype.mergeDeepWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return mergeIntoListWith(this, deepMergerWith(merger), iters);\n    };\n\n    List.prototype.setSize = function(size) {\n      return setListBounds(this, 0, size);\n    };\n\n    // @pragma Iteration\n\n    List.prototype.slice = function(begin, end) {\n      var size = this.size;\n      if (wholeSlice(begin, end, size)) {\n        return this;\n      }\n      return setListBounds(\n        this,\n        resolveBegin(begin, size),\n        resolveEnd(end, size)\n      );\n    };\n\n    List.prototype.__iterator = function(type, reverse) {\n      var index = 0;\n      var values = iterateList(this, reverse);\n      return new Iterator(function()  {\n        var value = values();\n        return value === DONE ?\n          iteratorDone() :\n          iteratorValue(type, index++, value);\n      });\n    };\n\n    List.prototype.__iterate = function(fn, reverse) {\n      var index = 0;\n      var values = iterateList(this, reverse);\n      var value;\n      while ((value = values()) !== DONE) {\n        if (fn(value, index++, this) === false) {\n          break;\n        }\n      }\n      return index;\n    };\n\n    List.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        return this;\n      }\n      return makeList(this._origin, this._capacity, this._level, this._root, this._tail, ownerID, this.__hash);\n    };\n\n\n  function isList(maybeList) {\n    return !!(maybeList && maybeList[IS_LIST_SENTINEL]);\n  }\n\n  List.isList = isList;\n\n  var IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@';\n\n  var ListPrototype = List.prototype;\n  ListPrototype[IS_LIST_SENTINEL] = true;\n  ListPrototype[DELETE] = ListPrototype.remove;\n  ListPrototype.setIn = MapPrototype.setIn;\n  ListPrototype.deleteIn =\n  ListPrototype.removeIn = MapPrototype.removeIn;\n  ListPrototype.update = MapPrototype.update;\n  ListPrototype.updateIn = MapPrototype.updateIn;\n  ListPrototype.mergeIn = MapPrototype.mergeIn;\n  ListPrototype.mergeDeepIn = MapPrototype.mergeDeepIn;\n  ListPrototype.withMutations = MapPrototype.withMutations;\n  ListPrototype.asMutable = MapPrototype.asMutable;\n  ListPrototype.asImmutable = MapPrototype.asImmutable;\n  ListPrototype.wasAltered = MapPrototype.wasAltered;\n\n\n\n    function VNode(array, ownerID) {\n      this.array = array;\n      this.ownerID = ownerID;\n    }\n\n    // TODO: seems like these methods are very similar\n\n    VNode.prototype.removeBefore = function(ownerID, level, index) {\n      if (index === level ? 1 << level : 0 || this.array.length === 0) {\n        return this;\n      }\n      var originIndex = (index >>> level) & MASK;\n      if (originIndex >= this.array.length) {\n        return new VNode([], ownerID);\n      }\n      var removingFirst = originIndex === 0;\n      var newChild;\n      if (level > 0) {\n        var oldChild = this.array[originIndex];\n        newChild = oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index);\n        if (newChild === oldChild && removingFirst) {\n          return this;\n        }\n      }\n      if (removingFirst && !newChild) {\n        return this;\n      }\n      var editable = editableVNode(this, ownerID);\n      if (!removingFirst) {\n        for (var ii = 0; ii < originIndex; ii++) {\n          editable.array[ii] = undefined;\n        }\n      }\n      if (newChild) {\n        editable.array[originIndex] = newChild;\n      }\n      return editable;\n    };\n\n    VNode.prototype.removeAfter = function(ownerID, level, index) {\n      if (index === (level ? 1 << level : 0) || this.array.length === 0) {\n        return this;\n      }\n      var sizeIndex = ((index - 1) >>> level) & MASK;\n      if (sizeIndex >= this.array.length) {\n        return this;\n      }\n\n      var newChild;\n      if (level > 0) {\n        var oldChild = this.array[sizeIndex];\n        newChild = oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index);\n        if (newChild === oldChild && sizeIndex === this.array.length - 1) {\n          return this;\n        }\n      }\n\n      var editable = editableVNode(this, ownerID);\n      editable.array.splice(sizeIndex + 1);\n      if (newChild) {\n        editable.array[sizeIndex] = newChild;\n      }\n      return editable;\n    };\n\n\n\n  var DONE = {};\n\n  function iterateList(list, reverse) {\n    var left = list._origin;\n    var right = list._capacity;\n    var tailPos = getTailOffset(right);\n    var tail = list._tail;\n\n    return iterateNodeOrLeaf(list._root, list._level, 0);\n\n    function iterateNodeOrLeaf(node, level, offset) {\n      return level === 0 ?\n        iterateLeaf(node, offset) :\n        iterateNode(node, level, offset);\n    }\n\n    function iterateLeaf(node, offset) {\n      var array = offset === tailPos ? tail && tail.array : node && node.array;\n      var from = offset > left ? 0 : left - offset;\n      var to = right - offset;\n      if (to > SIZE) {\n        to = SIZE;\n      }\n      return function()  {\n        if (from === to) {\n          return DONE;\n        }\n        var idx = reverse ? --to : from++;\n        return array && array[idx];\n      };\n    }\n\n    function iterateNode(node, level, offset) {\n      var values;\n      var array = node && node.array;\n      var from = offset > left ? 0 : (left - offset) >> level;\n      var to = ((right - offset) >> level) + 1;\n      if (to > SIZE) {\n        to = SIZE;\n      }\n      return function()  {\n        do {\n          if (values) {\n            var value = values();\n            if (value !== DONE) {\n              return value;\n            }\n            values = null;\n          }\n          if (from === to) {\n            return DONE;\n          }\n          var idx = reverse ? --to : from++;\n          values = iterateNodeOrLeaf(\n            array && array[idx], level - SHIFT, offset + (idx << level)\n          );\n        } while (true);\n      };\n    }\n  }\n\n  function makeList(origin, capacity, level, root, tail, ownerID, hash) {\n    var list = Object.create(ListPrototype);\n    list.size = capacity - origin;\n    list._origin = origin;\n    list._capacity = capacity;\n    list._level = level;\n    list._root = root;\n    list._tail = tail;\n    list.__ownerID = ownerID;\n    list.__hash = hash;\n    list.__altered = false;\n    return list;\n  }\n\n  var EMPTY_LIST;\n  function emptyList() {\n    return EMPTY_LIST || (EMPTY_LIST = makeList(0, 0, SHIFT));\n  }\n\n  function updateList(list, index, value) {\n    index = wrapIndex(list, index);\n\n    if (index !== index) {\n      return list;\n    }\n\n    if (index >= list.size || index < 0) {\n      return list.withMutations(function(list ) {\n        index < 0 ?\n          setListBounds(list, index).set(0, value) :\n          setListBounds(list, 0, index + 1).set(index, value)\n      });\n    }\n\n    index += list._origin;\n\n    var newTail = list._tail;\n    var newRoot = list._root;\n    var didAlter = MakeRef(DID_ALTER);\n    if (index >= getTailOffset(list._capacity)) {\n      newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter);\n    } else {\n      newRoot = updateVNode(newRoot, list.__ownerID, list._level, index, value, didAlter);\n    }\n\n    if (!didAlter.value) {\n      return list;\n    }\n\n    if (list.__ownerID) {\n      list._root = newRoot;\n      list._tail = newTail;\n      list.__hash = undefined;\n      list.__altered = true;\n      return list;\n    }\n    return makeList(list._origin, list._capacity, list._level, newRoot, newTail);\n  }\n\n  function updateVNode(node, ownerID, level, index, value, didAlter) {\n    var idx = (index >>> level) & MASK;\n    var nodeHas = node && idx < node.array.length;\n    if (!nodeHas && value === undefined) {\n      return node;\n    }\n\n    var newNode;\n\n    if (level > 0) {\n      var lowerNode = node && node.array[idx];\n      var newLowerNode = updateVNode(lowerNode, ownerID, level - SHIFT, index, value, didAlter);\n      if (newLowerNode === lowerNode) {\n        return node;\n      }\n      newNode = editableVNode(node, ownerID);\n      newNode.array[idx] = newLowerNode;\n      return newNode;\n    }\n\n    if (nodeHas && node.array[idx] === value) {\n      return node;\n    }\n\n    SetRef(didAlter);\n\n    newNode = editableVNode(node, ownerID);\n    if (value === undefined && idx === newNode.array.length - 1) {\n      newNode.array.pop();\n    } else {\n      newNode.array[idx] = value;\n    }\n    return newNode;\n  }\n\n  function editableVNode(node, ownerID) {\n    if (ownerID && node && ownerID === node.ownerID) {\n      return node;\n    }\n    return new VNode(node ? node.array.slice() : [], ownerID);\n  }\n\n  function listNodeFor(list, rawIndex) {\n    if (rawIndex >= getTailOffset(list._capacity)) {\n      return list._tail;\n    }\n    if (rawIndex < 1 << (list._level + SHIFT)) {\n      var node = list._root;\n      var level = list._level;\n      while (node && level > 0) {\n        node = node.array[(rawIndex >>> level) & MASK];\n        level -= SHIFT;\n      }\n      return node;\n    }\n  }\n\n  function setListBounds(list, begin, end) {\n    // Sanitize begin & end using this shorthand for ToInt32(argument)\n    // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n    if (begin !== undefined) {\n      begin = begin | 0;\n    }\n    if (end !== undefined) {\n      end = end | 0;\n    }\n    var owner = list.__ownerID || new OwnerID();\n    var oldOrigin = list._origin;\n    var oldCapacity = list._capacity;\n    var newOrigin = oldOrigin + begin;\n    var newCapacity = end === undefined ? oldCapacity : end < 0 ? oldCapacity + end : oldOrigin + end;\n    if (newOrigin === oldOrigin && newCapacity === oldCapacity) {\n      return list;\n    }\n\n    // If it's going to end after it starts, it's empty.\n    if (newOrigin >= newCapacity) {\n      return list.clear();\n    }\n\n    var newLevel = list._level;\n    var newRoot = list._root;\n\n    // New origin might need creating a higher root.\n    var offsetShift = 0;\n    while (newOrigin + offsetShift < 0) {\n      newRoot = new VNode(newRoot && newRoot.array.length ? [undefined, newRoot] : [], owner);\n      newLevel += SHIFT;\n      offsetShift += 1 << newLevel;\n    }\n    if (offsetShift) {\n      newOrigin += offsetShift;\n      oldOrigin += offsetShift;\n      newCapacity += offsetShift;\n      oldCapacity += offsetShift;\n    }\n\n    var oldTailOffset = getTailOffset(oldCapacity);\n    var newTailOffset = getTailOffset(newCapacity);\n\n    // New size might need creating a higher root.\n    while (newTailOffset >= 1 << (newLevel + SHIFT)) {\n      newRoot = new VNode(newRoot && newRoot.array.length ? [newRoot] : [], owner);\n      newLevel += SHIFT;\n    }\n\n    // Locate or create the new tail.\n    var oldTail = list._tail;\n    var newTail = newTailOffset < oldTailOffset ?\n      listNodeFor(list, newCapacity - 1) :\n      newTailOffset > oldTailOffset ? new VNode([], owner) : oldTail;\n\n    // Merge Tail into tree.\n    if (oldTail && newTailOffset > oldTailOffset && newOrigin < oldCapacity && oldTail.array.length) {\n      newRoot = editableVNode(newRoot, owner);\n      var node = newRoot;\n      for (var level = newLevel; level > SHIFT; level -= SHIFT) {\n        var idx = (oldTailOffset >>> level) & MASK;\n        node = node.array[idx] = editableVNode(node.array[idx], owner);\n      }\n      node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail;\n    }\n\n    // If the size has been reduced, there's a chance the tail needs to be trimmed.\n    if (newCapacity < oldCapacity) {\n      newTail = newTail && newTail.removeAfter(owner, 0, newCapacity);\n    }\n\n    // If the new origin is within the tail, then we do not need a root.\n    if (newOrigin >= newTailOffset) {\n      newOrigin -= newTailOffset;\n      newCapacity -= newTailOffset;\n      newLevel = SHIFT;\n      newRoot = null;\n      newTail = newTail && newTail.removeBefore(owner, 0, newOrigin);\n\n    // Otherwise, if the root has been trimmed, garbage collect.\n    } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) {\n      offsetShift = 0;\n\n      // Identify the new top root node of the subtree of the old root.\n      while (newRoot) {\n        var beginIndex = (newOrigin >>> newLevel) & MASK;\n        if (beginIndex !== (newTailOffset >>> newLevel) & MASK) {\n          break;\n        }\n        if (beginIndex) {\n          offsetShift += (1 << newLevel) * beginIndex;\n        }\n        newLevel -= SHIFT;\n        newRoot = newRoot.array[beginIndex];\n      }\n\n      // Trim the new sides of the new root.\n      if (newRoot && newOrigin > oldOrigin) {\n        newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift);\n      }\n      if (newRoot && newTailOffset < oldTailOffset) {\n        newRoot = newRoot.removeAfter(owner, newLevel, newTailOffset - offsetShift);\n      }\n      if (offsetShift) {\n        newOrigin -= offsetShift;\n        newCapacity -= offsetShift;\n      }\n    }\n\n    if (list.__ownerID) {\n      list.size = newCapacity - newOrigin;\n      list._origin = newOrigin;\n      list._capacity = newCapacity;\n      list._level = newLevel;\n      list._root = newRoot;\n      list._tail = newTail;\n      list.__hash = undefined;\n      list.__altered = true;\n      return list;\n    }\n    return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail);\n  }\n\n  function mergeIntoListWith(list, merger, iterables) {\n    var iters = [];\n    var maxSize = 0;\n    for (var ii = 0; ii < iterables.length; ii++) {\n      var value = iterables[ii];\n      var iter = IndexedIterable(value);\n      if (iter.size > maxSize) {\n        maxSize = iter.size;\n      }\n      if (!isIterable(value)) {\n        iter = iter.map(function(v ) {return fromJS(v)});\n      }\n      iters.push(iter);\n    }\n    if (maxSize > list.size) {\n      list = list.setSize(maxSize);\n    }\n    return mergeIntoCollectionWith(list, merger, iters);\n  }\n\n  function getTailOffset(size) {\n    return size < SIZE ? 0 : (((size - 1) >>> SHIFT) << SHIFT);\n  }\n\n  createClass(OrderedMap, Map);\n\n    // @pragma Construction\n\n    function OrderedMap(value) {\n      return value === null || value === undefined ? emptyOrderedMap() :\n        isOrderedMap(value) ? value :\n        emptyOrderedMap().withMutations(function(map ) {\n          var iter = KeyedIterable(value);\n          assertNotInfinite(iter.size);\n          iter.forEach(function(v, k)  {return map.set(k, v)});\n        });\n    }\n\n    OrderedMap.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    OrderedMap.prototype.toString = function() {\n      return this.__toString('OrderedMap {', '}');\n    };\n\n    // @pragma Access\n\n    OrderedMap.prototype.get = function(k, notSetValue) {\n      var index = this._map.get(k);\n      return index !== undefined ? this._list.get(index)[1] : notSetValue;\n    };\n\n    // @pragma Modification\n\n    OrderedMap.prototype.clear = function() {\n      if (this.size === 0) {\n        return this;\n      }\n      if (this.__ownerID) {\n        this.size = 0;\n        this._map.clear();\n        this._list.clear();\n        return this;\n      }\n      return emptyOrderedMap();\n    };\n\n    OrderedMap.prototype.set = function(k, v) {\n      return updateOrderedMap(this, k, v);\n    };\n\n    OrderedMap.prototype.remove = function(k) {\n      return updateOrderedMap(this, k, NOT_SET);\n    };\n\n    OrderedMap.prototype.wasAltered = function() {\n      return this._map.wasAltered() || this._list.wasAltered();\n    };\n\n    OrderedMap.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return this._list.__iterate(\n        function(entry ) {return entry && fn(entry[1], entry[0], this$0)},\n        reverse\n      );\n    };\n\n    OrderedMap.prototype.__iterator = function(type, reverse) {\n      return this._list.fromEntrySeq().__iterator(type, reverse);\n    };\n\n    OrderedMap.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      var newMap = this._map.__ensureOwner(ownerID);\n      var newList = this._list.__ensureOwner(ownerID);\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this._map = newMap;\n        this._list = newList;\n        return this;\n      }\n      return makeOrderedMap(newMap, newList, ownerID, this.__hash);\n    };\n\n\n  function isOrderedMap(maybeOrderedMap) {\n    return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap);\n  }\n\n  OrderedMap.isOrderedMap = isOrderedMap;\n\n  OrderedMap.prototype[IS_ORDERED_SENTINEL] = true;\n  OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove;\n\n\n\n  function makeOrderedMap(map, list, ownerID, hash) {\n    var omap = Object.create(OrderedMap.prototype);\n    omap.size = map ? map.size : 0;\n    omap._map = map;\n    omap._list = list;\n    omap.__ownerID = ownerID;\n    omap.__hash = hash;\n    return omap;\n  }\n\n  var EMPTY_ORDERED_MAP;\n  function emptyOrderedMap() {\n    return EMPTY_ORDERED_MAP || (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList()));\n  }\n\n  function updateOrderedMap(omap, k, v) {\n    var map = omap._map;\n    var list = omap._list;\n    var i = map.get(k);\n    var has = i !== undefined;\n    var newMap;\n    var newList;\n    if (v === NOT_SET) { // removed\n      if (!has) {\n        return omap;\n      }\n      if (list.size >= SIZE && list.size >= map.size * 2) {\n        newList = list.filter(function(entry, idx)  {return entry !== undefined && i !== idx});\n        newMap = newList.toKeyedSeq().map(function(entry ) {return entry[0]}).flip().toMap();\n        if (omap.__ownerID) {\n          newMap.__ownerID = newList.__ownerID = omap.__ownerID;\n        }\n      } else {\n        newMap = map.remove(k);\n        newList = i === list.size - 1 ? list.pop() : list.set(i, undefined);\n      }\n    } else {\n      if (has) {\n        if (v === list.get(i)[1]) {\n          return omap;\n        }\n        newMap = map;\n        newList = list.set(i, [k, v]);\n      } else {\n        newMap = map.set(k, list.size);\n        newList = list.set(list.size, [k, v]);\n      }\n    }\n    if (omap.__ownerID) {\n      omap.size = newMap.size;\n      omap._map = newMap;\n      omap._list = newList;\n      omap.__hash = undefined;\n      return omap;\n    }\n    return makeOrderedMap(newMap, newList);\n  }\n\n  createClass(ToKeyedSequence, KeyedSeq);\n    function ToKeyedSequence(indexed, useKeys) {\n      this._iter = indexed;\n      this._useKeys = useKeys;\n      this.size = indexed.size;\n    }\n\n    ToKeyedSequence.prototype.get = function(key, notSetValue) {\n      return this._iter.get(key, notSetValue);\n    };\n\n    ToKeyedSequence.prototype.has = function(key) {\n      return this._iter.has(key);\n    };\n\n    ToKeyedSequence.prototype.valueSeq = function() {\n      return this._iter.valueSeq();\n    };\n\n    ToKeyedSequence.prototype.reverse = function() {var this$0 = this;\n      var reversedSequence = reverseFactory(this, true);\n      if (!this._useKeys) {\n        reversedSequence.valueSeq = function()  {return this$0._iter.toSeq().reverse()};\n      }\n      return reversedSequence;\n    };\n\n    ToKeyedSequence.prototype.map = function(mapper, context) {var this$0 = this;\n      var mappedSequence = mapFactory(this, mapper, context);\n      if (!this._useKeys) {\n        mappedSequence.valueSeq = function()  {return this$0._iter.toSeq().map(mapper, context)};\n      }\n      return mappedSequence;\n    };\n\n    ToKeyedSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      var ii;\n      return this._iter.__iterate(\n        this._useKeys ?\n          function(v, k)  {return fn(v, k, this$0)} :\n          ((ii = reverse ? resolveSize(this) : 0),\n            function(v ) {return fn(v, reverse ? --ii : ii++, this$0)}),\n        reverse\n      );\n    };\n\n    ToKeyedSequence.prototype.__iterator = function(type, reverse) {\n      if (this._useKeys) {\n        return this._iter.__iterator(type, reverse);\n      }\n      var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n      var ii = reverse ? resolveSize(this) : 0;\n      return new Iterator(function()  {\n        var step = iterator.next();\n        return step.done ? step :\n          iteratorValue(type, reverse ? --ii : ii++, step.value, step);\n      });\n    };\n\n  ToKeyedSequence.prototype[IS_ORDERED_SENTINEL] = true;\n\n\n  createClass(ToIndexedSequence, IndexedSeq);\n    function ToIndexedSequence(iter) {\n      this._iter = iter;\n      this.size = iter.size;\n    }\n\n    ToIndexedSequence.prototype.includes = function(value) {\n      return this._iter.includes(value);\n    };\n\n    ToIndexedSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      var iterations = 0;\n      return this._iter.__iterate(function(v ) {return fn(v, iterations++, this$0)}, reverse);\n    };\n\n    ToIndexedSequence.prototype.__iterator = function(type, reverse) {\n      var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n      var iterations = 0;\n      return new Iterator(function()  {\n        var step = iterator.next();\n        return step.done ? step :\n          iteratorValue(type, iterations++, step.value, step)\n      });\n    };\n\n\n\n  createClass(ToSetSequence, SetSeq);\n    function ToSetSequence(iter) {\n      this._iter = iter;\n      this.size = iter.size;\n    }\n\n    ToSetSequence.prototype.has = function(key) {\n      return this._iter.includes(key);\n    };\n\n    ToSetSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return this._iter.__iterate(function(v ) {return fn(v, v, this$0)}, reverse);\n    };\n\n    ToSetSequence.prototype.__iterator = function(type, reverse) {\n      var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n      return new Iterator(function()  {\n        var step = iterator.next();\n        return step.done ? step :\n          iteratorValue(type, step.value, step.value, step);\n      });\n    };\n\n\n\n  createClass(FromEntriesSequence, KeyedSeq);\n    function FromEntriesSequence(entries) {\n      this._iter = entries;\n      this.size = entries.size;\n    }\n\n    FromEntriesSequence.prototype.entrySeq = function() {\n      return this._iter.toSeq();\n    };\n\n    FromEntriesSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return this._iter.__iterate(function(entry ) {\n        // Check if entry exists first so array access doesn't throw for holes\n        // in the parent iteration.\n        if (entry) {\n          validateEntry(entry);\n          var indexedIterable = isIterable(entry);\n          return fn(\n            indexedIterable ? entry.get(1) : entry[1],\n            indexedIterable ? entry.get(0) : entry[0],\n            this$0\n          );\n        }\n      }, reverse);\n    };\n\n    FromEntriesSequence.prototype.__iterator = function(type, reverse) {\n      var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n      return new Iterator(function()  {\n        while (true) {\n          var step = iterator.next();\n          if (step.done) {\n            return step;\n          }\n          var entry = step.value;\n          // Check if entry exists first so array access doesn't throw for holes\n          // in the parent iteration.\n          if (entry) {\n            validateEntry(entry);\n            var indexedIterable = isIterable(entry);\n            return iteratorValue(\n              type,\n              indexedIterable ? entry.get(0) : entry[0],\n              indexedIterable ? entry.get(1) : entry[1],\n              step\n            );\n          }\n        }\n      });\n    };\n\n\n  ToIndexedSequence.prototype.cacheResult =\n  ToKeyedSequence.prototype.cacheResult =\n  ToSetSequence.prototype.cacheResult =\n  FromEntriesSequence.prototype.cacheResult =\n    cacheResultThrough;\n\n\n  function flipFactory(iterable) {\n    var flipSequence = makeSequence(iterable);\n    flipSequence._iter = iterable;\n    flipSequence.size = iterable.size;\n    flipSequence.flip = function()  {return iterable};\n    flipSequence.reverse = function () {\n      var reversedSequence = iterable.reverse.apply(this); // super.reverse()\n      reversedSequence.flip = function()  {return iterable.reverse()};\n      return reversedSequence;\n    };\n    flipSequence.has = function(key ) {return iterable.includes(key)};\n    flipSequence.includes = function(key ) {return iterable.has(key)};\n    flipSequence.cacheResult = cacheResultThrough;\n    flipSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n      return iterable.__iterate(function(v, k)  {return fn(k, v, this$0) !== false}, reverse);\n    }\n    flipSequence.__iteratorUncached = function(type, reverse) {\n      if (type === ITERATE_ENTRIES) {\n        var iterator = iterable.__iterator(type, reverse);\n        return new Iterator(function()  {\n          var step = iterator.next();\n          if (!step.done) {\n            var k = step.value[0];\n            step.value[0] = step.value[1];\n            step.value[1] = k;\n          }\n          return step;\n        });\n      }\n      return iterable.__iterator(\n        type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES,\n        reverse\n      );\n    }\n    return flipSequence;\n  }\n\n\n  function mapFactory(iterable, mapper, context) {\n    var mappedSequence = makeSequence(iterable);\n    mappedSequence.size = iterable.size;\n    mappedSequence.has = function(key ) {return iterable.has(key)};\n    mappedSequence.get = function(key, notSetValue)  {\n      var v = iterable.get(key, NOT_SET);\n      return v === NOT_SET ?\n        notSetValue :\n        mapper.call(context, v, key, iterable);\n    };\n    mappedSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n      return iterable.__iterate(\n        function(v, k, c)  {return fn(mapper.call(context, v, k, c), k, this$0) !== false},\n        reverse\n      );\n    }\n    mappedSequence.__iteratorUncached = function (type, reverse) {\n      var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n      return new Iterator(function()  {\n        var step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n        var entry = step.value;\n        var key = entry[0];\n        return iteratorValue(\n          type,\n          key,\n          mapper.call(context, entry[1], key, iterable),\n          step\n        );\n      });\n    }\n    return mappedSequence;\n  }\n\n\n  function reverseFactory(iterable, useKeys) {\n    var reversedSequence = makeSequence(iterable);\n    reversedSequence._iter = iterable;\n    reversedSequence.size = iterable.size;\n    reversedSequence.reverse = function()  {return iterable};\n    if (iterable.flip) {\n      reversedSequence.flip = function () {\n        var flipSequence = flipFactory(iterable);\n        flipSequence.reverse = function()  {return iterable.flip()};\n        return flipSequence;\n      };\n    }\n    reversedSequence.get = function(key, notSetValue) \n      {return iterable.get(useKeys ? key : -1 - key, notSetValue)};\n    reversedSequence.has = function(key )\n      {return iterable.has(useKeys ? key : -1 - key)};\n    reversedSequence.includes = function(value ) {return iterable.includes(value)};\n    reversedSequence.cacheResult = cacheResultThrough;\n    reversedSequence.__iterate = function (fn, reverse) {var this$0 = this;\n      return iterable.__iterate(function(v, k)  {return fn(v, k, this$0)}, !reverse);\n    };\n    reversedSequence.__iterator =\n      function(type, reverse)  {return iterable.__iterator(type, !reverse)};\n    return reversedSequence;\n  }\n\n\n  function filterFactory(iterable, predicate, context, useKeys) {\n    var filterSequence = makeSequence(iterable);\n    if (useKeys) {\n      filterSequence.has = function(key ) {\n        var v = iterable.get(key, NOT_SET);\n        return v !== NOT_SET && !!predicate.call(context, v, key, iterable);\n      };\n      filterSequence.get = function(key, notSetValue)  {\n        var v = iterable.get(key, NOT_SET);\n        return v !== NOT_SET && predicate.call(context, v, key, iterable) ?\n          v : notSetValue;\n      };\n    }\n    filterSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n      var iterations = 0;\n      iterable.__iterate(function(v, k, c)  {\n        if (predicate.call(context, v, k, c)) {\n          iterations++;\n          return fn(v, useKeys ? k : iterations - 1, this$0);\n        }\n      }, reverse);\n      return iterations;\n    };\n    filterSequence.__iteratorUncached = function (type, reverse) {\n      var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n      var iterations = 0;\n      return new Iterator(function()  {\n        while (true) {\n          var step = iterator.next();\n          if (step.done) {\n            return step;\n          }\n          var entry = step.value;\n          var key = entry[0];\n          var value = entry[1];\n          if (predicate.call(context, value, key, iterable)) {\n            return iteratorValue(type, useKeys ? key : iterations++, value, step);\n          }\n        }\n      });\n    }\n    return filterSequence;\n  }\n\n\n  function countByFactory(iterable, grouper, context) {\n    var groups = Map().asMutable();\n    iterable.__iterate(function(v, k)  {\n      groups.update(\n        grouper.call(context, v, k, iterable),\n        0,\n        function(a ) {return a + 1}\n      );\n    });\n    return groups.asImmutable();\n  }\n\n\n  function groupByFactory(iterable, grouper, context) {\n    var isKeyedIter = isKeyed(iterable);\n    var groups = (isOrdered(iterable) ? OrderedMap() : Map()).asMutable();\n    iterable.__iterate(function(v, k)  {\n      groups.update(\n        grouper.call(context, v, k, iterable),\n        function(a ) {return (a = a || [], a.push(isKeyedIter ? [k, v] : v), a)}\n      );\n    });\n    var coerce = iterableClass(iterable);\n    return groups.map(function(arr ) {return reify(iterable, coerce(arr))});\n  }\n\n\n  function sliceFactory(iterable, begin, end, useKeys) {\n    var originalSize = iterable.size;\n\n    // Sanitize begin & end using this shorthand for ToInt32(argument)\n    // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n    if (begin !== undefined) {\n      begin = begin | 0;\n    }\n    if (end !== undefined) {\n      if (end === Infinity) {\n        end = originalSize;\n      } else {\n        end = end | 0;\n      }\n    }\n\n    if (wholeSlice(begin, end, originalSize)) {\n      return iterable;\n    }\n\n    var resolvedBegin = resolveBegin(begin, originalSize);\n    var resolvedEnd = resolveEnd(end, originalSize);\n\n    // begin or end will be NaN if they were provided as negative numbers and\n    // this iterable's size is unknown. In that case, cache first so there is\n    // a known size and these do not resolve to NaN.\n    if (resolvedBegin !== resolvedBegin || resolvedEnd !== resolvedEnd) {\n      return sliceFactory(iterable.toSeq().cacheResult(), begin, end, useKeys);\n    }\n\n    // Note: resolvedEnd is undefined when the original sequence's length is\n    // unknown and this slice did not supply an end and should contain all\n    // elements after resolvedBegin.\n    // In that case, resolvedSize will be NaN and sliceSize will remain undefined.\n    var resolvedSize = resolvedEnd - resolvedBegin;\n    var sliceSize;\n    if (resolvedSize === resolvedSize) {\n      sliceSize = resolvedSize < 0 ? 0 : resolvedSize;\n    }\n\n    var sliceSeq = makeSequence(iterable);\n\n    // If iterable.size is undefined, the size of the realized sliceSeq is\n    // unknown at this point unless the number of items to slice is 0\n    sliceSeq.size = sliceSize === 0 ? sliceSize : iterable.size && sliceSize || undefined;\n\n    if (!useKeys && isSeq(iterable) && sliceSize >= 0) {\n      sliceSeq.get = function (index, notSetValue) {\n        index = wrapIndex(this, index);\n        return index >= 0 && index < sliceSize ?\n          iterable.get(index + resolvedBegin, notSetValue) :\n          notSetValue;\n      }\n    }\n\n    sliceSeq.__iterateUncached = function(fn, reverse) {var this$0 = this;\n      if (sliceSize === 0) {\n        return 0;\n      }\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var skipped = 0;\n      var isSkipping = true;\n      var iterations = 0;\n      iterable.__iterate(function(v, k)  {\n        if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) {\n          iterations++;\n          return fn(v, useKeys ? k : iterations - 1, this$0) !== false &&\n                 iterations !== sliceSize;\n        }\n      });\n      return iterations;\n    };\n\n    sliceSeq.__iteratorUncached = function(type, reverse) {\n      if (sliceSize !== 0 && reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      // Don't bother instantiating parent iterator if taking 0.\n      var iterator = sliceSize !== 0 && iterable.__iterator(type, reverse);\n      var skipped = 0;\n      var iterations = 0;\n      return new Iterator(function()  {\n        while (skipped++ < resolvedBegin) {\n          iterator.next();\n        }\n        if (++iterations > sliceSize) {\n          return iteratorDone();\n        }\n        var step = iterator.next();\n        if (useKeys || type === ITERATE_VALUES) {\n          return step;\n        } else if (type === ITERATE_KEYS) {\n          return iteratorValue(type, iterations - 1, undefined, step);\n        } else {\n          return iteratorValue(type, iterations - 1, step.value[1], step);\n        }\n      });\n    }\n\n    return sliceSeq;\n  }\n\n\n  function takeWhileFactory(iterable, predicate, context) {\n    var takeSequence = makeSequence(iterable);\n    takeSequence.__iterateUncached = function(fn, reverse) {var this$0 = this;\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var iterations = 0;\n      iterable.__iterate(function(v, k, c) \n        {return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$0)}\n      );\n      return iterations;\n    };\n    takeSequence.__iteratorUncached = function(type, reverse) {var this$0 = this;\n      if (reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n      var iterating = true;\n      return new Iterator(function()  {\n        if (!iterating) {\n          return iteratorDone();\n        }\n        var step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n        var entry = step.value;\n        var k = entry[0];\n        var v = entry[1];\n        if (!predicate.call(context, v, k, this$0)) {\n          iterating = false;\n          return iteratorDone();\n        }\n        return type === ITERATE_ENTRIES ? step :\n          iteratorValue(type, k, v, step);\n      });\n    };\n    return takeSequence;\n  }\n\n\n  function skipWhileFactory(iterable, predicate, context, useKeys) {\n    var skipSequence = makeSequence(iterable);\n    skipSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var isSkipping = true;\n      var iterations = 0;\n      iterable.__iterate(function(v, k, c)  {\n        if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) {\n          iterations++;\n          return fn(v, useKeys ? k : iterations - 1, this$0);\n        }\n      });\n      return iterations;\n    };\n    skipSequence.__iteratorUncached = function(type, reverse) {var this$0 = this;\n      if (reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n      var skipping = true;\n      var iterations = 0;\n      return new Iterator(function()  {\n        var step, k, v;\n        do {\n          step = iterator.next();\n          if (step.done) {\n            if (useKeys || type === ITERATE_VALUES) {\n              return step;\n            } else if (type === ITERATE_KEYS) {\n              return iteratorValue(type, iterations++, undefined, step);\n            } else {\n              return iteratorValue(type, iterations++, step.value[1], step);\n            }\n          }\n          var entry = step.value;\n          k = entry[0];\n          v = entry[1];\n          skipping && (skipping = predicate.call(context, v, k, this$0));\n        } while (skipping);\n        return type === ITERATE_ENTRIES ? step :\n          iteratorValue(type, k, v, step);\n      });\n    };\n    return skipSequence;\n  }\n\n\n  function concatFactory(iterable, values) {\n    var isKeyedIterable = isKeyed(iterable);\n    var iters = [iterable].concat(values).map(function(v ) {\n      if (!isIterable(v)) {\n        v = isKeyedIterable ?\n          keyedSeqFromValue(v) :\n          indexedSeqFromValue(Array.isArray(v) ? v : [v]);\n      } else if (isKeyedIterable) {\n        v = KeyedIterable(v);\n      }\n      return v;\n    }).filter(function(v ) {return v.size !== 0});\n\n    if (iters.length === 0) {\n      return iterable;\n    }\n\n    if (iters.length === 1) {\n      var singleton = iters[0];\n      if (singleton === iterable ||\n          isKeyedIterable && isKeyed(singleton) ||\n          isIndexed(iterable) && isIndexed(singleton)) {\n        return singleton;\n      }\n    }\n\n    var concatSeq = new ArraySeq(iters);\n    if (isKeyedIterable) {\n      concatSeq = concatSeq.toKeyedSeq();\n    } else if (!isIndexed(iterable)) {\n      concatSeq = concatSeq.toSetSeq();\n    }\n    concatSeq = concatSeq.flatten(true);\n    concatSeq.size = iters.reduce(\n      function(sum, seq)  {\n        if (sum !== undefined) {\n          var size = seq.size;\n          if (size !== undefined) {\n            return sum + size;\n          }\n        }\n      },\n      0\n    );\n    return concatSeq;\n  }\n\n\n  function flattenFactory(iterable, depth, useKeys) {\n    var flatSequence = makeSequence(iterable);\n    flatSequence.__iterateUncached = function(fn, reverse) {\n      var iterations = 0;\n      var stopped = false;\n      function flatDeep(iter, currentDepth) {var this$0 = this;\n        iter.__iterate(function(v, k)  {\n          if ((!depth || currentDepth < depth) && isIterable(v)) {\n            flatDeep(v, currentDepth + 1);\n          } else if (fn(v, useKeys ? k : iterations++, this$0) === false) {\n            stopped = true;\n          }\n          return !stopped;\n        }, reverse);\n      }\n      flatDeep(iterable, 0);\n      return iterations;\n    }\n    flatSequence.__iteratorUncached = function(type, reverse) {\n      var iterator = iterable.__iterator(type, reverse);\n      var stack = [];\n      var iterations = 0;\n      return new Iterator(function()  {\n        while (iterator) {\n          var step = iterator.next();\n          if (step.done !== false) {\n            iterator = stack.pop();\n            continue;\n          }\n          var v = step.value;\n          if (type === ITERATE_ENTRIES) {\n            v = v[1];\n          }\n          if ((!depth || stack.length < depth) && isIterable(v)) {\n            stack.push(iterator);\n            iterator = v.__iterator(type, reverse);\n          } else {\n            return useKeys ? step : iteratorValue(type, iterations++, v, step);\n          }\n        }\n        return iteratorDone();\n      });\n    }\n    return flatSequence;\n  }\n\n\n  function flatMapFactory(iterable, mapper, context) {\n    var coerce = iterableClass(iterable);\n    return iterable.toSeq().map(\n      function(v, k)  {return coerce(mapper.call(context, v, k, iterable))}\n    ).flatten(true);\n  }\n\n\n  function interposeFactory(iterable, separator) {\n    var interposedSequence = makeSequence(iterable);\n    interposedSequence.size = iterable.size && iterable.size * 2 -1;\n    interposedSequence.__iterateUncached = function(fn, reverse) {var this$0 = this;\n      var iterations = 0;\n      iterable.__iterate(function(v, k) \n        {return (!iterations || fn(separator, iterations++, this$0) !== false) &&\n        fn(v, iterations++, this$0) !== false},\n        reverse\n      );\n      return iterations;\n    };\n    interposedSequence.__iteratorUncached = function(type, reverse) {\n      var iterator = iterable.__iterator(ITERATE_VALUES, reverse);\n      var iterations = 0;\n      var step;\n      return new Iterator(function()  {\n        if (!step || iterations % 2) {\n          step = iterator.next();\n          if (step.done) {\n            return step;\n          }\n        }\n        return iterations % 2 ?\n          iteratorValue(type, iterations++, separator) :\n          iteratorValue(type, iterations++, step.value, step);\n      });\n    };\n    return interposedSequence;\n  }\n\n\n  function sortFactory(iterable, comparator, mapper) {\n    if (!comparator) {\n      comparator = defaultComparator;\n    }\n    var isKeyedIterable = isKeyed(iterable);\n    var index = 0;\n    var entries = iterable.toSeq().map(\n      function(v, k)  {return [k, v, index++, mapper ? mapper(v, k, iterable) : v]}\n    ).toArray();\n    entries.sort(function(a, b)  {return comparator(a[3], b[3]) || a[2] - b[2]}).forEach(\n      isKeyedIterable ?\n      function(v, i)  { entries[i].length = 2; } :\n      function(v, i)  { entries[i] = v[1]; }\n    );\n    return isKeyedIterable ? KeyedSeq(entries) :\n      isIndexed(iterable) ? IndexedSeq(entries) :\n      SetSeq(entries);\n  }\n\n\n  function maxFactory(iterable, comparator, mapper) {\n    if (!comparator) {\n      comparator = defaultComparator;\n    }\n    if (mapper) {\n      var entry = iterable.toSeq()\n        .map(function(v, k)  {return [v, mapper(v, k, iterable)]})\n        .reduce(function(a, b)  {return maxCompare(comparator, a[1], b[1]) ? b : a});\n      return entry && entry[0];\n    } else {\n      return iterable.reduce(function(a, b)  {return maxCompare(comparator, a, b) ? b : a});\n    }\n  }\n\n  function maxCompare(comparator, a, b) {\n    var comp = comparator(b, a);\n    // b is considered the new max if the comparator declares them equal, but\n    // they are not equal and b is in fact a nullish value.\n    return (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) || comp > 0;\n  }\n\n\n  function zipWithFactory(keyIter, zipper, iters) {\n    var zipSequence = makeSequence(keyIter);\n    zipSequence.size = new ArraySeq(iters).map(function(i ) {return i.size}).min();\n    // Note: this a generic base implementation of __iterate in terms of\n    // __iterator which may be more generically useful in the future.\n    zipSequence.__iterate = function(fn, reverse) {\n      /* generic:\n      var iterator = this.__iterator(ITERATE_ENTRIES, reverse);\n      var step;\n      var iterations = 0;\n      while (!(step = iterator.next()).done) {\n        iterations++;\n        if (fn(step.value[1], step.value[0], this) === false) {\n          break;\n        }\n      }\n      return iterations;\n      */\n      // indexed:\n      var iterator = this.__iterator(ITERATE_VALUES, reverse);\n      var step;\n      var iterations = 0;\n      while (!(step = iterator.next()).done) {\n        if (fn(step.value, iterations++, this) === false) {\n          break;\n        }\n      }\n      return iterations;\n    };\n    zipSequence.__iteratorUncached = function(type, reverse) {\n      var iterators = iters.map(function(i )\n        {return (i = Iterable(i), getIterator(reverse ? i.reverse() : i))}\n      );\n      var iterations = 0;\n      var isDone = false;\n      return new Iterator(function()  {\n        var steps;\n        if (!isDone) {\n          steps = iterators.map(function(i ) {return i.next()});\n          isDone = steps.some(function(s ) {return s.done});\n        }\n        if (isDone) {\n          return iteratorDone();\n        }\n        return iteratorValue(\n          type,\n          iterations++,\n          zipper.apply(null, steps.map(function(s ) {return s.value}))\n        );\n      });\n    };\n    return zipSequence\n  }\n\n\n  // #pragma Helper Functions\n\n  function reify(iter, seq) {\n    return isSeq(iter) ? seq : iter.constructor(seq);\n  }\n\n  function validateEntry(entry) {\n    if (entry !== Object(entry)) {\n      throw new TypeError('Expected [K, V] tuple: ' + entry);\n    }\n  }\n\n  function resolveSize(iter) {\n    assertNotInfinite(iter.size);\n    return ensureSize(iter);\n  }\n\n  function iterableClass(iterable) {\n    return isKeyed(iterable) ? KeyedIterable :\n      isIndexed(iterable) ? IndexedIterable :\n      SetIterable;\n  }\n\n  function makeSequence(iterable) {\n    return Object.create(\n      (\n        isKeyed(iterable) ? KeyedSeq :\n        isIndexed(iterable) ? IndexedSeq :\n        SetSeq\n      ).prototype\n    );\n  }\n\n  function cacheResultThrough() {\n    if (this._iter.cacheResult) {\n      this._iter.cacheResult();\n      this.size = this._iter.size;\n      return this;\n    } else {\n      return Seq.prototype.cacheResult.call(this);\n    }\n  }\n\n  function defaultComparator(a, b) {\n    return a > b ? 1 : a < b ? -1 : 0;\n  }\n\n  function forceIterator(keyPath) {\n    var iter = getIterator(keyPath);\n    if (!iter) {\n      // Array might not be iterable in this environment, so we need a fallback\n      // to our wrapped type.\n      if (!isArrayLike(keyPath)) {\n        throw new TypeError('Expected iterable or array-like: ' + keyPath);\n      }\n      iter = getIterator(Iterable(keyPath));\n    }\n    return iter;\n  }\n\n  createClass(Record, KeyedCollection);\n\n    function Record(defaultValues, name) {\n      var hasInitialized;\n\n      var RecordType = function Record(values) {\n        if (values instanceof RecordType) {\n          return values;\n        }\n        if (!(this instanceof RecordType)) {\n          return new RecordType(values);\n        }\n        if (!hasInitialized) {\n          hasInitialized = true;\n          var keys = Object.keys(defaultValues);\n          setProps(RecordTypePrototype, keys);\n          RecordTypePrototype.size = keys.length;\n          RecordTypePrototype._name = name;\n          RecordTypePrototype._keys = keys;\n          RecordTypePrototype._defaultValues = defaultValues;\n        }\n        this._map = Map(values);\n      };\n\n      var RecordTypePrototype = RecordType.prototype = Object.create(RecordPrototype);\n      RecordTypePrototype.constructor = RecordType;\n\n      return RecordType;\n    }\n\n    Record.prototype.toString = function() {\n      return this.__toString(recordName(this) + ' {', '}');\n    };\n\n    // @pragma Access\n\n    Record.prototype.has = function(k) {\n      return this._defaultValues.hasOwnProperty(k);\n    };\n\n    Record.prototype.get = function(k, notSetValue) {\n      if (!this.has(k)) {\n        return notSetValue;\n      }\n      var defaultVal = this._defaultValues[k];\n      return this._map ? this._map.get(k, defaultVal) : defaultVal;\n    };\n\n    // @pragma Modification\n\n    Record.prototype.clear = function() {\n      if (this.__ownerID) {\n        this._map && this._map.clear();\n        return this;\n      }\n      var RecordType = this.constructor;\n      return RecordType._empty || (RecordType._empty = makeRecord(this, emptyMap()));\n    };\n\n    Record.prototype.set = function(k, v) {\n      if (!this.has(k)) {\n        throw new Error('Cannot set unknown key \"' + k + '\" on ' + recordName(this));\n      }\n      if (this._map && !this._map.has(k)) {\n        var defaultVal = this._defaultValues[k];\n        if (v === defaultVal) {\n          return this;\n        }\n      }\n      var newMap = this._map && this._map.set(k, v);\n      if (this.__ownerID || newMap === this._map) {\n        return this;\n      }\n      return makeRecord(this, newMap);\n    };\n\n    Record.prototype.remove = function(k) {\n      if (!this.has(k)) {\n        return this;\n      }\n      var newMap = this._map && this._map.remove(k);\n      if (this.__ownerID || newMap === this._map) {\n        return this;\n      }\n      return makeRecord(this, newMap);\n    };\n\n    Record.prototype.wasAltered = function() {\n      return this._map.wasAltered();\n    };\n\n    Record.prototype.__iterator = function(type, reverse) {var this$0 = this;\n      return KeyedIterable(this._defaultValues).map(function(_, k)  {return this$0.get(k)}).__iterator(type, reverse);\n    };\n\n    Record.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return KeyedIterable(this._defaultValues).map(function(_, k)  {return this$0.get(k)}).__iterate(fn, reverse);\n    };\n\n    Record.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      var newMap = this._map && this._map.__ensureOwner(ownerID);\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this._map = newMap;\n        return this;\n      }\n      return makeRecord(this, newMap, ownerID);\n    };\n\n\n  var RecordPrototype = Record.prototype;\n  RecordPrototype[DELETE] = RecordPrototype.remove;\n  RecordPrototype.deleteIn =\n  RecordPrototype.removeIn = MapPrototype.removeIn;\n  RecordPrototype.merge = MapPrototype.merge;\n  RecordPrototype.mergeWith = MapPrototype.mergeWith;\n  RecordPrototype.mergeIn = MapPrototype.mergeIn;\n  RecordPrototype.mergeDeep = MapPrototype.mergeDeep;\n  RecordPrototype.mergeDeepWith = MapPrototype.mergeDeepWith;\n  RecordPrototype.mergeDeepIn = MapPrototype.mergeDeepIn;\n  RecordPrototype.setIn = MapPrototype.setIn;\n  RecordPrototype.update = MapPrototype.update;\n  RecordPrototype.updateIn = MapPrototype.updateIn;\n  RecordPrototype.withMutations = MapPrototype.withMutations;\n  RecordPrototype.asMutable = MapPrototype.asMutable;\n  RecordPrototype.asImmutable = MapPrototype.asImmutable;\n\n\n  function makeRecord(likeRecord, map, ownerID) {\n    var record = Object.create(Object.getPrototypeOf(likeRecord));\n    record._map = map;\n    record.__ownerID = ownerID;\n    return record;\n  }\n\n  function recordName(record) {\n    return record._name || record.constructor.name || 'Record';\n  }\n\n  function setProps(prototype, names) {\n    try {\n      names.forEach(setProp.bind(undefined, prototype));\n    } catch (error) {\n      // Object.defineProperty failed. Probably IE8.\n    }\n  }\n\n  function setProp(prototype, name) {\n    Object.defineProperty(prototype, name, {\n      get: function() {\n        return this.get(name);\n      },\n      set: function(value) {\n        invariant(this.__ownerID, 'Cannot set on an immutable record.');\n        this.set(name, value);\n      }\n    });\n  }\n\n  createClass(Set, SetCollection);\n\n    // @pragma Construction\n\n    function Set(value) {\n      return value === null || value === undefined ? emptySet() :\n        isSet(value) && !isOrdered(value) ? value :\n        emptySet().withMutations(function(set ) {\n          var iter = SetIterable(value);\n          assertNotInfinite(iter.size);\n          iter.forEach(function(v ) {return set.add(v)});\n        });\n    }\n\n    Set.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    Set.fromKeys = function(value) {\n      return this(KeyedIterable(value).keySeq());\n    };\n\n    Set.prototype.toString = function() {\n      return this.__toString('Set {', '}');\n    };\n\n    // @pragma Access\n\n    Set.prototype.has = function(value) {\n      return this._map.has(value);\n    };\n\n    // @pragma Modification\n\n    Set.prototype.add = function(value) {\n      return updateSet(this, this._map.set(value, true));\n    };\n\n    Set.prototype.remove = function(value) {\n      return updateSet(this, this._map.remove(value));\n    };\n\n    Set.prototype.clear = function() {\n      return updateSet(this, this._map.clear());\n    };\n\n    // @pragma Composition\n\n    Set.prototype.union = function() {var iters = SLICE$0.call(arguments, 0);\n      iters = iters.filter(function(x ) {return x.size !== 0});\n      if (iters.length === 0) {\n        return this;\n      }\n      if (this.size === 0 && !this.__ownerID && iters.length === 1) {\n        return this.constructor(iters[0]);\n      }\n      return this.withMutations(function(set ) {\n        for (var ii = 0; ii < iters.length; ii++) {\n          SetIterable(iters[ii]).forEach(function(value ) {return set.add(value)});\n        }\n      });\n    };\n\n    Set.prototype.intersect = function() {var iters = SLICE$0.call(arguments, 0);\n      if (iters.length === 0) {\n        return this;\n      }\n      iters = iters.map(function(iter ) {return SetIterable(iter)});\n      var originalSet = this;\n      return this.withMutations(function(set ) {\n        originalSet.forEach(function(value ) {\n          if (!iters.every(function(iter ) {return iter.includes(value)})) {\n            set.remove(value);\n          }\n        });\n      });\n    };\n\n    Set.prototype.subtract = function() {var iters = SLICE$0.call(arguments, 0);\n      if (iters.length === 0) {\n        return this;\n      }\n      iters = iters.map(function(iter ) {return SetIterable(iter)});\n      var originalSet = this;\n      return this.withMutations(function(set ) {\n        originalSet.forEach(function(value ) {\n          if (iters.some(function(iter ) {return iter.includes(value)})) {\n            set.remove(value);\n          }\n        });\n      });\n    };\n\n    Set.prototype.merge = function() {\n      return this.union.apply(this, arguments);\n    };\n\n    Set.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return this.union.apply(this, iters);\n    };\n\n    Set.prototype.sort = function(comparator) {\n      // Late binding\n      return OrderedSet(sortFactory(this, comparator));\n    };\n\n    Set.prototype.sortBy = function(mapper, comparator) {\n      // Late binding\n      return OrderedSet(sortFactory(this, comparator, mapper));\n    };\n\n    Set.prototype.wasAltered = function() {\n      return this._map.wasAltered();\n    };\n\n    Set.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return this._map.__iterate(function(_, k)  {return fn(k, k, this$0)}, reverse);\n    };\n\n    Set.prototype.__iterator = function(type, reverse) {\n      return this._map.map(function(_, k)  {return k}).__iterator(type, reverse);\n    };\n\n    Set.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      var newMap = this._map.__ensureOwner(ownerID);\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this._map = newMap;\n        return this;\n      }\n      return this.__make(newMap, ownerID);\n    };\n\n\n  function isSet(maybeSet) {\n    return !!(maybeSet && maybeSet[IS_SET_SENTINEL]);\n  }\n\n  Set.isSet = isSet;\n\n  var IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@';\n\n  var SetPrototype = Set.prototype;\n  SetPrototype[IS_SET_SENTINEL] = true;\n  SetPrototype[DELETE] = SetPrototype.remove;\n  SetPrototype.mergeDeep = SetPrototype.merge;\n  SetPrototype.mergeDeepWith = SetPrototype.mergeWith;\n  SetPrototype.withMutations = MapPrototype.withMutations;\n  SetPrototype.asMutable = MapPrototype.asMutable;\n  SetPrototype.asImmutable = MapPrototype.asImmutable;\n\n  SetPrototype.__empty = emptySet;\n  SetPrototype.__make = makeSet;\n\n  function updateSet(set, newMap) {\n    if (set.__ownerID) {\n      set.size = newMap.size;\n      set._map = newMap;\n      return set;\n    }\n    return newMap === set._map ? set :\n      newMap.size === 0 ? set.__empty() :\n      set.__make(newMap);\n  }\n\n  function makeSet(map, ownerID) {\n    var set = Object.create(SetPrototype);\n    set.size = map ? map.size : 0;\n    set._map = map;\n    set.__ownerID = ownerID;\n    return set;\n  }\n\n  var EMPTY_SET;\n  function emptySet() {\n    return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap()));\n  }\n\n  createClass(OrderedSet, Set);\n\n    // @pragma Construction\n\n    function OrderedSet(value) {\n      return value === null || value === undefined ? emptyOrderedSet() :\n        isOrderedSet(value) ? value :\n        emptyOrderedSet().withMutations(function(set ) {\n          var iter = SetIterable(value);\n          assertNotInfinite(iter.size);\n          iter.forEach(function(v ) {return set.add(v)});\n        });\n    }\n\n    OrderedSet.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    OrderedSet.fromKeys = function(value) {\n      return this(KeyedIterable(value).keySeq());\n    };\n\n    OrderedSet.prototype.toString = function() {\n      return this.__toString('OrderedSet {', '}');\n    };\n\n\n  function isOrderedSet(maybeOrderedSet) {\n    return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet);\n  }\n\n  OrderedSet.isOrderedSet = isOrderedSet;\n\n  var OrderedSetPrototype = OrderedSet.prototype;\n  OrderedSetPrototype[IS_ORDERED_SENTINEL] = true;\n\n  OrderedSetPrototype.__empty = emptyOrderedSet;\n  OrderedSetPrototype.__make = makeOrderedSet;\n\n  function makeOrderedSet(map, ownerID) {\n    var set = Object.create(OrderedSetPrototype);\n    set.size = map ? map.size : 0;\n    set._map = map;\n    set.__ownerID = ownerID;\n    return set;\n  }\n\n  var EMPTY_ORDERED_SET;\n  function emptyOrderedSet() {\n    return EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap()));\n  }\n\n  createClass(Stack, IndexedCollection);\n\n    // @pragma Construction\n\n    function Stack(value) {\n      return value === null || value === undefined ? emptyStack() :\n        isStack(value) ? value :\n        emptyStack().unshiftAll(value);\n    }\n\n    Stack.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    Stack.prototype.toString = function() {\n      return this.__toString('Stack [', ']');\n    };\n\n    // @pragma Access\n\n    Stack.prototype.get = function(index, notSetValue) {\n      var head = this._head;\n      index = wrapIndex(this, index);\n      while (head && index--) {\n        head = head.next;\n      }\n      return head ? head.value : notSetValue;\n    };\n\n    Stack.prototype.peek = function() {\n      return this._head && this._head.value;\n    };\n\n    // @pragma Modification\n\n    Stack.prototype.push = function(/*...values*/) {\n      if (arguments.length === 0) {\n        return this;\n      }\n      var newSize = this.size + arguments.length;\n      var head = this._head;\n      for (var ii = arguments.length - 1; ii >= 0; ii--) {\n        head = {\n          value: arguments[ii],\n          next: head\n        };\n      }\n      if (this.__ownerID) {\n        this.size = newSize;\n        this._head = head;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return makeStack(newSize, head);\n    };\n\n    Stack.prototype.pushAll = function(iter) {\n      iter = IndexedIterable(iter);\n      if (iter.size === 0) {\n        return this;\n      }\n      assertNotInfinite(iter.size);\n      var newSize = this.size;\n      var head = this._head;\n      iter.reverse().forEach(function(value ) {\n        newSize++;\n        head = {\n          value: value,\n          next: head\n        };\n      });\n      if (this.__ownerID) {\n        this.size = newSize;\n        this._head = head;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return makeStack(newSize, head);\n    };\n\n    Stack.prototype.pop = function() {\n      return this.slice(1);\n    };\n\n    Stack.prototype.unshift = function(/*...values*/) {\n      return this.push.apply(this, arguments);\n    };\n\n    Stack.prototype.unshiftAll = function(iter) {\n      return this.pushAll(iter);\n    };\n\n    Stack.prototype.shift = function() {\n      return this.pop.apply(this, arguments);\n    };\n\n    Stack.prototype.clear = function() {\n      if (this.size === 0) {\n        return this;\n      }\n      if (this.__ownerID) {\n        this.size = 0;\n        this._head = undefined;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return emptyStack();\n    };\n\n    Stack.prototype.slice = function(begin, end) {\n      if (wholeSlice(begin, end, this.size)) {\n        return this;\n      }\n      var resolvedBegin = resolveBegin(begin, this.size);\n      var resolvedEnd = resolveEnd(end, this.size);\n      if (resolvedEnd !== this.size) {\n        // super.slice(begin, end);\n        return IndexedCollection.prototype.slice.call(this, begin, end);\n      }\n      var newSize = this.size - resolvedBegin;\n      var head = this._head;\n      while (resolvedBegin--) {\n        head = head.next;\n      }\n      if (this.__ownerID) {\n        this.size = newSize;\n        this._head = head;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return makeStack(newSize, head);\n    };\n\n    // @pragma Mutability\n\n    Stack.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this.__altered = false;\n        return this;\n      }\n      return makeStack(this.size, this._head, ownerID, this.__hash);\n    };\n\n    // @pragma Iteration\n\n    Stack.prototype.__iterate = function(fn, reverse) {\n      if (reverse) {\n        return this.reverse().__iterate(fn);\n      }\n      var iterations = 0;\n      var node = this._head;\n      while (node) {\n        if (fn(node.value, iterations++, this) === false) {\n          break;\n        }\n        node = node.next;\n      }\n      return iterations;\n    };\n\n    Stack.prototype.__iterator = function(type, reverse) {\n      if (reverse) {\n        return this.reverse().__iterator(type);\n      }\n      var iterations = 0;\n      var node = this._head;\n      return new Iterator(function()  {\n        if (node) {\n          var value = node.value;\n          node = node.next;\n          return iteratorValue(type, iterations++, value);\n        }\n        return iteratorDone();\n      });\n    };\n\n\n  function isStack(maybeStack) {\n    return !!(maybeStack && maybeStack[IS_STACK_SENTINEL]);\n  }\n\n  Stack.isStack = isStack;\n\n  var IS_STACK_SENTINEL = '@@__IMMUTABLE_STACK__@@';\n\n  var StackPrototype = Stack.prototype;\n  StackPrototype[IS_STACK_SENTINEL] = true;\n  StackPrototype.withMutations = MapPrototype.withMutations;\n  StackPrototype.asMutable = MapPrototype.asMutable;\n  StackPrototype.asImmutable = MapPrototype.asImmutable;\n  StackPrototype.wasAltered = MapPrototype.wasAltered;\n\n\n  function makeStack(size, head, ownerID, hash) {\n    var map = Object.create(StackPrototype);\n    map.size = size;\n    map._head = head;\n    map.__ownerID = ownerID;\n    map.__hash = hash;\n    map.__altered = false;\n    return map;\n  }\n\n  var EMPTY_STACK;\n  function emptyStack() {\n    return EMPTY_STACK || (EMPTY_STACK = makeStack(0));\n  }\n\n  /**\n   * Contributes additional methods to a constructor\n   */\n  function mixin(ctor, methods) {\n    var keyCopier = function(key ) { ctor.prototype[key] = methods[key]; };\n    Object.keys(methods).forEach(keyCopier);\n    Object.getOwnPropertySymbols &&\n      Object.getOwnPropertySymbols(methods).forEach(keyCopier);\n    return ctor;\n  }\n\n  function isProtoKey(key) {\n    return (\n      typeof key === 'string' && (key === '__proto__' || key === 'constructor')\n    );\n  }\n\n  Iterable.Iterator = Iterator;\n\n  mixin(Iterable, {\n\n    // ### Conversion to other types\n\n    toArray: function() {\n      assertNotInfinite(this.size);\n      var array = new Array(this.size || 0);\n      this.valueSeq().__iterate(function(v, i)  { array[i] = v; });\n      return array;\n    },\n\n    toIndexedSeq: function() {\n      return new ToIndexedSequence(this);\n    },\n\n    toJS: function() {\n      return this.toSeq().map(\n        function(value ) {return value && typeof value.toJS === 'function' ? value.toJS() : value}\n      ).__toJS();\n    },\n\n    toJSON: function() {\n      return this.toSeq().map(\n        function(value ) {return value && typeof value.toJSON === 'function' ? value.toJSON() : value}\n      ).__toJS();\n    },\n\n    toKeyedSeq: function() {\n      return new ToKeyedSequence(this, true);\n    },\n\n    toMap: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return Map(this.toKeyedSeq());\n    },\n\n    toObject: function() {\n      assertNotInfinite(this.size);\n      var object = {};\n      this.__iterate(function(v, k)  {\n        if (isProtoKey(k)) {\n          return;\n        }\n        \n        object[k] = v;\n      });\n      return object;\n    },\n\n    toOrderedMap: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return OrderedMap(this.toKeyedSeq());\n    },\n\n    toOrderedSet: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return OrderedSet(isKeyed(this) ? this.valueSeq() : this);\n    },\n\n    toSet: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return Set(isKeyed(this) ? this.valueSeq() : this);\n    },\n\n    toSetSeq: function() {\n      return new ToSetSequence(this);\n    },\n\n    toSeq: function() {\n      return isIndexed(this) ? this.toIndexedSeq() :\n        isKeyed(this) ? this.toKeyedSeq() :\n        this.toSetSeq();\n    },\n\n    toStack: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return Stack(isKeyed(this) ? this.valueSeq() : this);\n    },\n\n    toList: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return List(isKeyed(this) ? this.valueSeq() : this);\n    },\n\n\n    // ### Common JavaScript methods and properties\n\n    toString: function() {\n      return '[Iterable]';\n    },\n\n    __toString: function(head, tail) {\n      if (this.size === 0) {\n        return head + tail;\n      }\n      return head + ' ' + this.toSeq().map(this.__toStringMapper).join(', ') + ' ' + tail;\n    },\n\n\n    // ### ES6 Collection methods (ES6 Array and Map)\n\n    concat: function() {var values = SLICE$0.call(arguments, 0);\n      return reify(this, concatFactory(this, values));\n    },\n\n    includes: function(searchValue) {\n      return this.some(function(value ) {return is(value, searchValue)});\n    },\n\n    entries: function() {\n      return this.__iterator(ITERATE_ENTRIES);\n    },\n\n    every: function(predicate, context) {\n      assertNotInfinite(this.size);\n      var returnValue = true;\n      this.__iterate(function(v, k, c)  {\n        if (!predicate.call(context, v, k, c)) {\n          returnValue = false;\n          return false;\n        }\n      });\n      return returnValue;\n    },\n\n    filter: function(predicate, context) {\n      return reify(this, filterFactory(this, predicate, context, true));\n    },\n\n    find: function(predicate, context, notSetValue) {\n      var entry = this.findEntry(predicate, context);\n      return entry ? entry[1] : notSetValue;\n    },\n\n    forEach: function(sideEffect, context) {\n      assertNotInfinite(this.size);\n      return this.__iterate(context ? sideEffect.bind(context) : sideEffect);\n    },\n\n    join: function(separator) {\n      assertNotInfinite(this.size);\n      separator = separator !== undefined ? '' + separator : ',';\n      var joined = '';\n      var isFirst = true;\n      this.__iterate(function(v ) {\n        isFirst ? (isFirst = false) : (joined += separator);\n        joined += v !== null && v !== undefined ? v.toString() : '';\n      });\n      return joined;\n    },\n\n    keys: function() {\n      return this.__iterator(ITERATE_KEYS);\n    },\n\n    map: function(mapper, context) {\n      return reify(this, mapFactory(this, mapper, context));\n    },\n\n    reduce: function(reducer, initialReduction, context) {\n      assertNotInfinite(this.size);\n      var reduction;\n      var useFirst;\n      if (arguments.length < 2) {\n        useFirst = true;\n      } else {\n        reduction = initialReduction;\n      }\n      this.__iterate(function(v, k, c)  {\n        if (useFirst) {\n          useFirst = false;\n          reduction = v;\n        } else {\n          reduction = reducer.call(context, reduction, v, k, c);\n        }\n      });\n      return reduction;\n    },\n\n    reduceRight: function(reducer, initialReduction, context) {\n      var reversed = this.toKeyedSeq().reverse();\n      return reversed.reduce.apply(reversed, arguments);\n    },\n\n    reverse: function() {\n      return reify(this, reverseFactory(this, true));\n    },\n\n    slice: function(begin, end) {\n      return reify(this, sliceFactory(this, begin, end, true));\n    },\n\n    some: function(predicate, context) {\n      return !this.every(not(predicate), context);\n    },\n\n    sort: function(comparator) {\n      return reify(this, sortFactory(this, comparator));\n    },\n\n    values: function() {\n      return this.__iterator(ITERATE_VALUES);\n    },\n\n\n    // ### More sequential methods\n\n    butLast: function() {\n      return this.slice(0, -1);\n    },\n\n    isEmpty: function() {\n      return this.size !== undefined ? this.size === 0 : !this.some(function()  {return true});\n    },\n\n    count: function(predicate, context) {\n      return ensureSize(\n        predicate ? this.toSeq().filter(predicate, context) : this\n      );\n    },\n\n    countBy: function(grouper, context) {\n      return countByFactory(this, grouper, context);\n    },\n\n    equals: function(other) {\n      return deepEqual(this, other);\n    },\n\n    entrySeq: function() {\n      var iterable = this;\n      if (iterable._cache) {\n        // We cache as an entries array, so we can just return the cache!\n        return new ArraySeq(iterable._cache);\n      }\n      var entriesSequence = iterable.toSeq().map(entryMapper).toIndexedSeq();\n      entriesSequence.fromEntrySeq = function()  {return iterable.toSeq()};\n      return entriesSequence;\n    },\n\n    filterNot: function(predicate, context) {\n      return this.filter(not(predicate), context);\n    },\n\n    findEntry: function(predicate, context, notSetValue) {\n      var found = notSetValue;\n      this.__iterate(function(v, k, c)  {\n        if (predicate.call(context, v, k, c)) {\n          found = [k, v];\n          return false;\n        }\n      });\n      return found;\n    },\n\n    findKey: function(predicate, context) {\n      var entry = this.findEntry(predicate, context);\n      return entry && entry[0];\n    },\n\n    findLast: function(predicate, context, notSetValue) {\n      return this.toKeyedSeq().reverse().find(predicate, context, notSetValue);\n    },\n\n    findLastEntry: function(predicate, context, notSetValue) {\n      return this.toKeyedSeq().reverse().findEntry(predicate, context, notSetValue);\n    },\n\n    findLastKey: function(predicate, context) {\n      return this.toKeyedSeq().reverse().findKey(predicate, context);\n    },\n\n    first: function() {\n      return this.find(returnTrue);\n    },\n\n    flatMap: function(mapper, context) {\n      return reify(this, flatMapFactory(this, mapper, context));\n    },\n\n    flatten: function(depth) {\n      return reify(this, flattenFactory(this, depth, true));\n    },\n\n    fromEntrySeq: function() {\n      return new FromEntriesSequence(this);\n    },\n\n    get: function(searchKey, notSetValue) {\n      return this.find(function(_, key)  {return is(key, searchKey)}, undefined, notSetValue);\n    },\n\n    getIn: function(searchKeyPath, notSetValue) {\n      var nested = this;\n      // Note: in an ES6 environment, we would prefer:\n      // for (var key of searchKeyPath) {\n      var iter = forceIterator(searchKeyPath);\n      var step;\n      while (!(step = iter.next()).done) {\n        var key = step.value;\n        nested = nested && nested.get ? nested.get(key, NOT_SET) : NOT_SET;\n        if (nested === NOT_SET) {\n          return notSetValue;\n        }\n      }\n      return nested;\n    },\n\n    groupBy: function(grouper, context) {\n      return groupByFactory(this, grouper, context);\n    },\n\n    has: function(searchKey) {\n      return this.get(searchKey, NOT_SET) !== NOT_SET;\n    },\n\n    hasIn: function(searchKeyPath) {\n      return this.getIn(searchKeyPath, NOT_SET) !== NOT_SET;\n    },\n\n    isSubset: function(iter) {\n      iter = typeof iter.includes === 'function' ? iter : Iterable(iter);\n      return this.every(function(value ) {return iter.includes(value)});\n    },\n\n    isSuperset: function(iter) {\n      iter = typeof iter.isSubset === 'function' ? iter : Iterable(iter);\n      return iter.isSubset(this);\n    },\n\n    keyOf: function(searchValue) {\n      return this.findKey(function(value ) {return is(value, searchValue)});\n    },\n\n    keySeq: function() {\n      return this.toSeq().map(keyMapper).toIndexedSeq();\n    },\n\n    last: function() {\n      return this.toSeq().reverse().first();\n    },\n\n    lastKeyOf: function(searchValue) {\n      return this.toKeyedSeq().reverse().keyOf(searchValue);\n    },\n\n    max: function(comparator) {\n      return maxFactory(this, comparator);\n    },\n\n    maxBy: function(mapper, comparator) {\n      return maxFactory(this, comparator, mapper);\n    },\n\n    min: function(comparator) {\n      return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator);\n    },\n\n    minBy: function(mapper, comparator) {\n      return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator, mapper);\n    },\n\n    rest: function() {\n      return this.slice(1);\n    },\n\n    skip: function(amount) {\n      return this.slice(Math.max(0, amount));\n    },\n\n    skipLast: function(amount) {\n      return reify(this, this.toSeq().reverse().skip(amount).reverse());\n    },\n\n    skipWhile: function(predicate, context) {\n      return reify(this, skipWhileFactory(this, predicate, context, true));\n    },\n\n    skipUntil: function(predicate, context) {\n      return this.skipWhile(not(predicate), context);\n    },\n\n    sortBy: function(mapper, comparator) {\n      return reify(this, sortFactory(this, comparator, mapper));\n    },\n\n    take: function(amount) {\n      return this.slice(0, Math.max(0, amount));\n    },\n\n    takeLast: function(amount) {\n      return reify(this, this.toSeq().reverse().take(amount).reverse());\n    },\n\n    takeWhile: function(predicate, context) {\n      return reify(this, takeWhileFactory(this, predicate, context));\n    },\n\n    takeUntil: function(predicate, context) {\n      return this.takeWhile(not(predicate), context);\n    },\n\n    valueSeq: function() {\n      return this.toIndexedSeq();\n    },\n\n\n    // ### Hashable Object\n\n    hashCode: function() {\n      return this.__hash || (this.__hash = hashIterable(this));\n    }\n\n\n    // ### Internal\n\n    // abstract __iterate(fn, reverse)\n\n    // abstract __iterator(type, reverse)\n  });\n\n  // var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\n  // var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\n  // var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@';\n  // var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\n\n  var IterablePrototype = Iterable.prototype;\n  IterablePrototype[IS_ITERABLE_SENTINEL] = true;\n  IterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.values;\n  IterablePrototype.__toJS = IterablePrototype.toArray;\n  IterablePrototype.__toStringMapper = quoteString;\n  IterablePrototype.inspect =\n  IterablePrototype.toSource = function() { return this.toString(); };\n  IterablePrototype.chain = IterablePrototype.flatMap;\n  IterablePrototype.contains = IterablePrototype.includes;\n\n  mixin(KeyedIterable, {\n\n    // ### More sequential methods\n\n    flip: function() {\n      return reify(this, flipFactory(this));\n    },\n\n    mapEntries: function(mapper, context) {var this$0 = this;\n      var iterations = 0;\n      return reify(this,\n        this.toSeq().map(\n          function(v, k)  {return mapper.call(context, [k, v], iterations++, this$0)}\n        ).fromEntrySeq()\n      );\n    },\n\n    mapKeys: function(mapper, context) {var this$0 = this;\n      return reify(this,\n        this.toSeq().flip().map(\n          function(k, v)  {return mapper.call(context, k, v, this$0)}\n        ).flip()\n      );\n    }\n\n  });\n\n  var KeyedIterablePrototype = KeyedIterable.prototype;\n  KeyedIterablePrototype[IS_KEYED_SENTINEL] = true;\n  KeyedIterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.entries;\n  KeyedIterablePrototype.__toJS = IterablePrototype.toObject;\n  KeyedIterablePrototype.__toStringMapper = function(v, k)  {return JSON.stringify(k) + ': ' + quoteString(v)};\n\n\n\n  mixin(IndexedIterable, {\n\n    // ### Conversion to other types\n\n    toKeyedSeq: function() {\n      return new ToKeyedSequence(this, false);\n    },\n\n\n    // ### ES6 Collection methods (ES6 Array and Map)\n\n    filter: function(predicate, context) {\n      return reify(this, filterFactory(this, predicate, context, false));\n    },\n\n    findIndex: function(predicate, context) {\n      var entry = this.findEntry(predicate, context);\n      return entry ? entry[0] : -1;\n    },\n\n    indexOf: function(searchValue) {\n      var key = this.keyOf(searchValue);\n      return key === undefined ? -1 : key;\n    },\n\n    lastIndexOf: function(searchValue) {\n      var key = this.lastKeyOf(searchValue);\n      return key === undefined ? -1 : key;\n    },\n\n    reverse: function() {\n      return reify(this, reverseFactory(this, false));\n    },\n\n    slice: function(begin, end) {\n      return reify(this, sliceFactory(this, begin, end, false));\n    },\n\n    splice: function(index, removeNum /*, ...values*/) {\n      var numArgs = arguments.length;\n      removeNum = Math.max(removeNum | 0, 0);\n      if (numArgs === 0 || (numArgs === 2 && !removeNum)) {\n        return this;\n      }\n      // If index is negative, it should resolve relative to the size of the\n      // collection. However size may be expensive to compute if not cached, so\n      // only call count() if the number is in fact negative.\n      index = resolveBegin(index, index < 0 ? this.count() : this.size);\n      var spliced = this.slice(0, index);\n      return reify(\n        this,\n        numArgs === 1 ?\n          spliced :\n          spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum))\n      );\n    },\n\n\n    // ### More collection methods\n\n    findLastIndex: function(predicate, context) {\n      var entry = this.findLastEntry(predicate, context);\n      return entry ? entry[0] : -1;\n    },\n\n    first: function() {\n      return this.get(0);\n    },\n\n    flatten: function(depth) {\n      return reify(this, flattenFactory(this, depth, false));\n    },\n\n    get: function(index, notSetValue) {\n      index = wrapIndex(this, index);\n      return (index < 0 || (this.size === Infinity ||\n          (this.size !== undefined && index > this.size))) ?\n        notSetValue :\n        this.find(function(_, key)  {return key === index}, undefined, notSetValue);\n    },\n\n    has: function(index) {\n      index = wrapIndex(this, index);\n      return index >= 0 && (this.size !== undefined ?\n        this.size === Infinity || index < this.size :\n        this.indexOf(index) !== -1\n      );\n    },\n\n    interpose: function(separator) {\n      return reify(this, interposeFactory(this, separator));\n    },\n\n    interleave: function(/*...iterables*/) {\n      var iterables = [this].concat(arrCopy(arguments));\n      var zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, iterables);\n      var interleaved = zipped.flatten(true);\n      if (zipped.size) {\n        interleaved.size = zipped.size * iterables.length;\n      }\n      return reify(this, interleaved);\n    },\n\n    keySeq: function() {\n      return Range(0, this.size);\n    },\n\n    last: function() {\n      return this.get(-1);\n    },\n\n    skipWhile: function(predicate, context) {\n      return reify(this, skipWhileFactory(this, predicate, context, false));\n    },\n\n    zip: function(/*, ...iterables */) {\n      var iterables = [this].concat(arrCopy(arguments));\n      return reify(this, zipWithFactory(this, defaultZipper, iterables));\n    },\n\n    zipWith: function(zipper/*, ...iterables */) {\n      var iterables = arrCopy(arguments);\n      iterables[0] = this;\n      return reify(this, zipWithFactory(this, zipper, iterables));\n    }\n\n  });\n\n  IndexedIterable.prototype[IS_INDEXED_SENTINEL] = true;\n  IndexedIterable.prototype[IS_ORDERED_SENTINEL] = true;\n\n\n\n  mixin(SetIterable, {\n\n    // ### ES6 Collection methods (ES6 Array and Map)\n\n    get: function(value, notSetValue) {\n      return this.has(value) ? value : notSetValue;\n    },\n\n    includes: function(value) {\n      return this.has(value);\n    },\n\n\n    // ### More sequential methods\n\n    keySeq: function() {\n      return this.valueSeq();\n    }\n\n  });\n\n  SetIterable.prototype.has = IterablePrototype.includes;\n  SetIterable.prototype.contains = SetIterable.prototype.includes;\n\n\n  // Mixin subclasses\n\n  mixin(KeyedSeq, KeyedIterable.prototype);\n  mixin(IndexedSeq, IndexedIterable.prototype);\n  mixin(SetSeq, SetIterable.prototype);\n\n  mixin(KeyedCollection, KeyedIterable.prototype);\n  mixin(IndexedCollection, IndexedIterable.prototype);\n  mixin(SetCollection, SetIterable.prototype);\n\n\n  // #pragma Helper functions\n\n  function keyMapper(v, k) {\n    return k;\n  }\n\n  function entryMapper(v, k) {\n    return [k, v];\n  }\n\n  function not(predicate) {\n    return function() {\n      return !predicate.apply(this, arguments);\n    }\n  }\n\n  function neg(predicate) {\n    return function() {\n      return -predicate.apply(this, arguments);\n    }\n  }\n\n  function quoteString(value) {\n    return typeof value === 'string' ? JSON.stringify(value) : String(value);\n  }\n\n  function defaultZipper() {\n    return arrCopy(arguments);\n  }\n\n  function defaultNegComparator(a, b) {\n    return a < b ? 1 : a > b ? -1 : 0;\n  }\n\n  function hashIterable(iterable) {\n    if (iterable.size === Infinity) {\n      return 0;\n    }\n    var ordered = isOrdered(iterable);\n    var keyed = isKeyed(iterable);\n    var h = ordered ? 1 : 0;\n    var size = iterable.__iterate(\n      keyed ?\n        ordered ?\n          function(v, k)  { h = 31 * h + hashMerge(hash(v), hash(k)) | 0; } :\n          function(v, k)  { h = h + hashMerge(hash(v), hash(k)) | 0; } :\n        ordered ?\n          function(v ) { h = 31 * h + hash(v) | 0; } :\n          function(v ) { h = h + hash(v) | 0; }\n    );\n    return murmurHashOfSize(size, h);\n  }\n\n  function murmurHashOfSize(size, h) {\n    h = imul(h, 0xCC9E2D51);\n    h = imul(h << 15 | h >>> -15, 0x1B873593);\n    h = imul(h << 13 | h >>> -13, 5);\n    h = (h + 0xE6546B64 | 0) ^ size;\n    h = imul(h ^ h >>> 16, 0x85EBCA6B);\n    h = imul(h ^ h >>> 13, 0xC2B2AE35);\n    h = smi(h ^ h >>> 16);\n    return h;\n  }\n\n  function hashMerge(a, b) {\n    return a ^ b + 0x9E3779B9 + (a << 6) + (a >> 2) | 0; // int\n  }\n\n  var Immutable = {\n\n    Iterable: Iterable,\n\n    Seq: Seq,\n    Collection: Collection,\n    Map: Map,\n    OrderedMap: OrderedMap,\n    List: List,\n    Stack: Stack,\n    Set: Set,\n    OrderedSet: OrderedSet,\n\n    Record: Record,\n    Range: Range,\n    Repeat: Repeat,\n\n    is: is,\n    fromJS: fromJS\n\n  };\n\n  return Immutable;\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\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n  return value == null;\n}\n\nmodule.exports = isNil;\n","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n","function isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to) {\n  var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n  var toParts = to && to.split('/') || [];\n  var fromParts = from && from.split('/') || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash = void 0;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) {\n    fromParts.unshift('..');\n  }if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\nexport default resolvePathname;","var _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 valueEqual(a, b) {\n  if (a === b) return true;\n\n  if (a == null || b == null) return false;\n\n  if (Array.isArray(a)) {\n    return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n      return valueEqual(item, b[index]);\n    });\n  }\n\n  var aType = typeof a === 'undefined' ? 'undefined' : _typeof(a);\n  var bType = typeof b === 'undefined' ? 'undefined' : _typeof(b);\n\n  if (aType !== bType) return false;\n\n  if (aType === 'object') {\n    var aValue = a.valueOf();\n    var bValue = b.valueOf();\n\n    if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n    var aKeys = Object.keys(a);\n    var bKeys = Object.keys(b);\n\n    if (aKeys.length !== bKeys.length) return false;\n\n    return aKeys.every(function (key) {\n      return valueEqual(a[key], b[key]);\n    });\n  }\n\n  return false;\n}\n\nexport default valueEqual;","'use strict';\n\nexports.__esModule = true;\nvar addLeadingSlash = exports.addLeadingSlash = function addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n};\n\nvar stripLeadingSlash = exports.stripLeadingSlash = function stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n};\n\nvar hasBasename = exports.hasBasename = function hasBasename(path, prefix) {\n  return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n};\n\nvar stripBasename = exports.stripBasename = function stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n};\n\nvar stripTrailingSlash = exports.stripTrailingSlash = function stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n};\n\nvar parsePath = exports.parsePath = function parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n\n  var hashIndex = pathname.indexOf('#');\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n};\n\nvar createPath = exports.createPath = function createPath(location) {\n  var pathname = location.pathname,\n      search = location.search,\n      hash = location.hash;\n\n\n  var path = pathname || '/';\n\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : '?' + search;\n\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : '#' + hash;\n\n  return path;\n};","'use strict';\n\nexports.__esModule = true;\nexports.locationsAreEqual = exports.createLocation = undefined;\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 _resolvePathname = require('resolve-pathname');\n\nvar _resolvePathname2 = _interopRequireDefault(_resolvePathname);\n\nvar _valueEqual = require('value-equal');\n\nvar _valueEqual2 = _interopRequireDefault(_valueEqual);\n\nvar _PathUtils = require('./PathUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createLocation = exports.createLocation = function createLocation(path, state, key, currentLocation) {\n  var location = void 0;\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = (0, _PathUtils.parsePath)(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = _extends({}, path);\n\n    if (location.pathname === undefined) location.pathname = '';\n\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n\n  if (key) location.key = key;\n\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = (0, _resolvePathname2.default)(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n\n  return location;\n};\n\nvar locationsAreEqual = exports.locationsAreEqual = function locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && (0, _valueEqual2.default)(a.state, b.state);\n};","'use strict';\n\nexports.__esModule = true;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createTransitionManager = function createTransitionManager() {\n  var prompt = null;\n\n  var setPrompt = function setPrompt(nextPrompt) {\n    (0, _warning2.default)(prompt == null, 'A history supports only one prompt at a time');\n\n    prompt = nextPrompt;\n\n    return function () {\n      if (prompt === nextPrompt) prompt = null;\n    };\n  };\n\n  var confirmTransitionTo = function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n    // TODO: If another transition starts while we're still confirming\n    // the previous one, we may end up in a weird state. Figure out the\n    // best way to handle this.\n    if (prompt != null) {\n      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n      if (typeof result === 'string') {\n        if (typeof getUserConfirmation === 'function') {\n          getUserConfirmation(result, callback);\n        } else {\n          (0, _warning2.default)(false, 'A history needs a getUserConfirmation function in order to use a prompt message');\n\n          callback(true);\n        }\n      } else {\n        // Return false from a transition hook to cancel the transition.\n        callback(result !== false);\n      }\n    } else {\n      callback(true);\n    }\n  };\n\n  var listeners = [];\n\n  var appendListener = function appendListener(fn) {\n    var isActive = true;\n\n    var listener = function listener() {\n      if (isActive) fn.apply(undefined, arguments);\n    };\n\n    listeners.push(listener);\n\n    return function () {\n      isActive = false;\n      listeners = listeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  };\n\n  var notifyListeners = function notifyListeners() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    listeners.forEach(function (listener) {\n      return listener.apply(undefined, args);\n    });\n  };\n\n  return {\n    setPrompt: setPrompt,\n    confirmTransitionTo: confirmTransitionTo,\n    appendListener: appendListener,\n    notifyListeners: notifyListeners\n  };\n};\n\nexports.default = createTransitionManager;","'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = exports.canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nvar addEventListener = exports.addEventListener = function addEventListener(node, event, listener) {\n  return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener);\n};\n\nvar removeEventListener = exports.removeEventListener = function removeEventListener(node, event, listener) {\n  return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener);\n};\n\nvar getConfirmation = exports.getConfirmation = function getConfirmation(message, callback) {\n  return callback(window.confirm(message));\n}; // eslint-disable-line no-alert\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\nvar supportsHistory = exports.supportsHistory = function supportsHistory() {\n  var ua = window.navigator.userAgent;\n\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n\n  return window.history && 'pushState' in window.history;\n};\n\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\nvar supportsPopStateOnHashChange = exports.supportsPopStateOnHashChange = function supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n};\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\nvar supportsGoWithoutReloadUsingHash = exports.supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n};\n\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\nvar isExtraneousPopstateEvent = exports.isExtraneousPopstateEvent = function isExtraneousPopstateEvent(event) {\n  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n};","'use strict';\n\nexports.__esModule = true;\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\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 _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _createTransitionManager = require('./createTransitionManager');\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nvar _DOMUtils = require('./DOMUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nvar getHistoryState = function getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n};\n\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\nvar createBrowserHistory = function createBrowserHistory() {\n  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  (0, _invariant2.default)(_DOMUtils.canUseDOM, 'Browser history needs a DOM');\n\n  var globalHistory = window.history;\n  var canUseHistory = (0, _DOMUtils.supportsHistory)();\n  var needsHashChangeListener = !(0, _DOMUtils.supportsPopStateOnHashChange)();\n\n  var _props$forceRefresh = props.forceRefresh,\n      forceRefresh = _props$forceRefresh === undefined ? false : _props$forceRefresh,\n      _props$getUserConfirm = props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === undefined ? _DOMUtils.getConfirmation : _props$getUserConfirm,\n      _props$keyLength = props.keyLength,\n      keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n  var basename = props.basename ? (0, _PathUtils.stripTrailingSlash)((0, _PathUtils.addLeadingSlash)(props.basename)) : '';\n\n  var getDOMLocation = function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n        key = _ref.key,\n        state = _ref.state;\n\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n\n\n    var path = pathname + search + hash;\n\n    (0, _warning2.default)(!basename || (0, _PathUtils.hasBasename)(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n    if (basename) path = (0, _PathUtils.stripBasename)(path, basename);\n\n    return (0, _LocationUtils.createLocation)(path, state, key);\n  };\n\n  var createKey = function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  };\n\n  var transitionManager = (0, _createTransitionManager2.default)();\n\n  var setState = function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n\n    transitionManager.notifyListeners(history.location, history.action);\n  };\n\n  var handlePopState = function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if ((0, _DOMUtils.isExtraneousPopstateEvent)(event)) return;\n\n    handlePop(getDOMLocation(event.state));\n  };\n\n  var handleHashChange = function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  };\n\n  var forceNextPop = false;\n\n  var handlePop = function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({ action: action, location: location });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  };\n\n  var revertPop = function revertPop(fromLocation) {\n    var toLocation = history.location;\n\n    // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n\n    if (toIndex === -1) toIndex = 0;\n\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n\n    if (fromIndex === -1) fromIndex = 0;\n\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  };\n\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key];\n\n  // Public interface\n\n  var createHref = function createHref(location) {\n    return basename + (0, _PathUtils.createPath)(location);\n  };\n\n  var push = function push(path, state) {\n    (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n    var action = 'PUSH';\n    var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n\n      if (canUseHistory) {\n        globalHistory.pushState({ key: key, state: state }, null, href);\n\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n\n          setState({ action: action, location: location });\n        }\n      } else {\n        (0, _warning2.default)(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history');\n\n        window.location.href = href;\n      }\n    });\n  };\n\n  var replace = function replace(path, state) {\n    (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n    var action = 'REPLACE';\n    var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n\n      if (canUseHistory) {\n        globalHistory.replaceState({ key: key, state: state }, null, href);\n\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n\n          setState({ action: action, location: location });\n        }\n      } else {\n        (0, _warning2.default)(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history');\n\n        window.location.replace(href);\n      }\n    });\n  };\n\n  var go = function go(n) {\n    globalHistory.go(n);\n  };\n\n  var goBack = function goBack() {\n    return go(-1);\n  };\n\n  var goForward = function goForward() {\n    return go(1);\n  };\n\n  var listenerCount = 0;\n\n  var checkDOMListeners = function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1) {\n      (0, _DOMUtils.addEventListener)(window, PopStateEvent, handlePopState);\n\n      if (needsHashChangeListener) (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      (0, _DOMUtils.removeEventListener)(window, PopStateEvent, handlePopState);\n\n      if (needsHashChangeListener) (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleHashChange);\n    }\n  };\n\n  var isBlocked = false;\n\n  var block = function block() {\n    var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  };\n\n  var listen = function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  };\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n\n  return history;\n};\n\nexports.default = createBrowserHistory;","// Action key that carries API call info interpreted by this Redux middleware.\r\n// The data have to be formatted like:\r\n// {\r\n//  TYPES: {},\r\n//  REQUEST: {}\r\n// }\r\n//\r\n//\r\n//\r\nexport const API_CALL = 'API::API_CALL'\r\n\r\n//\r\n// The constants to attach to the actions\r\n// have to contains three constants: [ requestType, successType, failureType ]\r\n// Example: types: [ LOGIN_REQUEST, LOGIN_SUCCESS, LOGIN_FAILURE ]\r\n// Have to be set on API_CALL\r\nexport const TYPES = 'API::API_CALL::TYPES'\r\n\r\n//  REQUEST: {\r\n//   type: 'GET',\r\n//   schema: OAuthSchema,\r\n//   endpoint: ApiEndpoints.LOGIN,\r\n//   headers: {\r\n//     'Accept': 'application/x-www-form-urlencoded',\r\n//   },\r\n//   data: {\r\n//   }\r\n//   }\r\n//\r\n// See api/UserApi.login for example\r\nexport const REQUEST = 'API::API_CALL::REQUEST'\r\n\r\n/**\r\n * Additional data to attach to each action.\r\n * This data is used on reducers when handling request actions. It allows modification of the\r\n * state before the API call ended.\r\n * For non-critical requests that should not fail, use it to update the state directly without\r\n * waiting for the request response.\r\n * It allows a 'instant ui modification' look alike for out app.\r\n */\r\nexport const DATA = 'API::API_CALL::DATA'\r\n\r\n// Action key that carries API call info interpreted by this Redux middleware.\r\n// The data have to be formatted like:\r\n// {\r\n//  TYPES: {},\r\n//  REQUEST: {}\r\n// }\r\n//\r\nexport const API_CALL_TEST = 'API::API_CALL::TEST'\r\n\r\n/**\r\n * The object data to send as `response` on success\r\n */\r\nexport const SUCCESS_DATA = 'API::API_CALL::SUCCESS_DATA'\r\n\r\n/**\r\n * The object data to send as `error` on failure\r\n */\r\nexport const FAILURE_DATA = 'API::API_CALL::FAILURE_DATA'\r\n\r\n/**\r\n * Defines if the request is successfull\r\n */\r\nexport const REQUEST_IS_SUCCESS = 'API::API_CALL::REQUEST_IS_SUCCESS'\r\n\r\nexport const DAYS = {\r\n  MONDAY: 0,\r\n  TUESDAY: 1,\r\n  WEDNESDAY: 2,\r\n  THURSDAY: 3,\r\n  FRIDAY: 4,\r\n  SATURDAY: 5,\r\n  SUNDAY: 6,\r\n}\r\n\r\n/**\r\n * Custom generated api error (eg: when api returns empty result)\r\n */\r\nexport const GENERATED_API_ERROR = -1\r\n","import {\r\n  API_CALL,\r\n  TYPES,\r\n  REQUEST,\r\n  DATA,\r\n  API_CALL_TEST,\r\n  REQUEST_IS_SUCCESS,\r\n  SUCCESS_DATA,\r\n  FAILURE_DATA,\r\n} from './constants'\r\n\r\nexport const createUserLightBasic = email => `Basic ${btoa(`user_light_${email}:`)}`\r\n\r\nexport const createIncognitoBasic = userId => `Basic ${btoa(`incognito_${userId}:`)}`\r\n\r\nexport const createRestaurantBasic = (restaurantId, password) =>\r\n  `Basic ${btoa(`restaurant_${restaurantId}:${password}`)}`\r\n\r\n/**\r\n * returns true if the given `action` is an API_CALL action.\r\n */\r\nexport const isActionApiCall = action => {\r\n  const apiCall = action[API_CALL]\r\n\r\n  return typeof apiCall !== 'undefined'\r\n}\r\n/**\r\n * returns true if the given `action` is an API_CALL_TEST action.\r\n */\r\nexport const isActionApiCallTest = action => {\r\n  const apiCallTest = action[API_CALL_TEST]\r\n\r\n  return typeof apiCallTest !== 'undefined'\r\n}\r\n\r\n/**\r\n * Create an action for an api call.\r\n * See middleware `api`\r\n *\r\n * @param  {Object} typeEnum    the enum that define the action. Create with `createApiEnumAction`\r\n * @param  {Object} request     the request data. Ex: `ApiRestaurant.getRestaurant(restaurantId)`\r\n * @param  {Object} [data=null] data to attach to all the actions. Ex: { restaurantId }\r\n * @return {ApiAction}             ApiAction\r\n */\r\nexport const createApiCallAction = (typeEnum, request, data = null) => {\r\n  return {\r\n    type: API_CALL, // type is mandatory by redux-thunk\r\n    [API_CALL]: {\r\n      [TYPES]: [typeEnum.REQUEST, typeEnum.SUCCESS, typeEnum.FAILURE],\r\n      [REQUEST]: request,\r\n      [DATA]: data,\r\n    },\r\n  }\r\n}\r\n\r\n/**\r\n * Create an action for an api call.\r\n * See middleware `api`\r\n *\r\n * @param  {Object} typeEnum    the enum that define the action. Create with `createApiEnumAction`\r\n * @param  {boolean} isSuccess  should the mocked request be successfull or not ?\r\n * @param  {Object} mockData  data to attach to all the actions. Can contains the subobjects:\r\n *                                - data: the data to attach to each action of the api call\r\n *                                (REQUEST, SUCCESS, FAILURE)\r\n *                                - response: the data to attach to the success response action\r\n *                                - error: the data to attach to the failure response action\r\n * @return {ApiAction}             ApiAction\r\n */\r\nexport const createTestApiCallAction = (typeEnum, isSuccess, mockData = null) => ({\r\n  type: API_CALL_TEST, // type is mandatory by redux-thunk\r\n  [API_CALL_TEST]: {\r\n    [TYPES]: [typeEnum.REQUEST, typeEnum.SUCCESS, typeEnum.FAILURE],\r\n    [REQUEST]: null, // TODO: handle request for tests ?\r\n    [DATA]: mockData.data,\r\n    [REQUEST_IS_SUCCESS]: isSuccess,\r\n    [SUCCESS_DATA]: mockData.response,\r\n    [FAILURE_DATA]: mockData.error,\r\n  },\r\n})\r\n\r\n/**\r\n * Create an enum to use for an Api request action\r\n */\r\nexport const createApiEnumAction = prefix => ({\r\n  REQUEST: `${prefix}::REQUEST`,\r\n  SUCCESS: `${prefix}::SUCCESS`,\r\n  FAILURE: `${prefix}::FAILURE`,\r\n})\r\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignMergeValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nmodule.exports = safeGet;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var assignMergeValue = require('./_assignMergeValue'),\n    cloneBuffer = require('./_cloneBuffer'),\n    cloneTypedArray = require('./_cloneTypedArray'),\n    copyArray = require('./_copyArray'),\n    initCloneObject = require('./_initCloneObject'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isPlainObject = require('./isPlainObject'),\n    isTypedArray = require('./isTypedArray'),\n    safeGet = require('./_safeGet'),\n    toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var Stack = require('./_Stack'),\n    assignMergeValue = require('./_assignMergeValue'),\n    baseFor = require('./_baseFor'),\n    baseMergeDeep = require('./_baseMergeDeep'),\n    isObject = require('./isObject'),\n    keysIn = require('./keysIn'),\n    safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","//\r\n// default environment variables for our sdk\r\n//\r\n\r\nconst defaultEnv = {\r\n}\r\n\r\nexport default defaultEnv\r\n","//\r\n// Note: this file should never be import directly. Use a getter via getters.js\r\n//\r\n\r\nimport merge from 'lodash/merge'\r\n\r\nimport defaultEnv from './defaultEnv'\r\n\r\n//\r\n// The currentEnv is set by the front.\r\n// It is given to our `Application` that call `setCurrentEnv`\r\n//\r\nlet _currentEnv = {}\r\n\r\nexport const setCurrentEnv = (currentEnv) => {\r\n  _currentEnv = merge({}, defaultEnv, currentEnv)\r\n}\r\n\r\nexport const getEnv = () => _currentEnv\r\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isBuffer = require('./isBuffer'),\n    isPrototype = require('./_isPrototype'),\n    isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = isEmpty;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n  return typeof value == 'number' ||\n    (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","var isNumber = require('./isNumber');\n\n/**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\nfunction isNaN(value) {\n  // An `NaN` primitive is the only value that is not equal to itself.\n  // Perform the `toStringTag` check first to avoid errors with some\n  // ActiveX objects in IE.\n  return isNumber(value) && value != +value;\n}\n\nmodule.exports = isNaN;\n","var baseGetTag = require('./_baseGetTag'),\n    isArray = require('./isArray'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = baseFindIndex;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIteratee = require('./_baseIteratee'),\n    toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIsNaN = require('./_baseIsNaN'),\n    strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseIndexOf = require('./_baseIndexOf'),\n    toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\nfunction indexOf(array, value, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseIndexOf(array, value, index);\n}\n\nmodule.exports = indexOf;\n","var baseIteratee = require('./_baseIteratee'),\n    isArrayLike = require('./isArrayLike'),\n    keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(predicate, 3);\n      collection = keys(collection);\n      predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n    }\n    var index = findIndexFunc(collection, predicate, fromIndex);\n    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n  };\n}\n\nmodule.exports = createFind;\n","var createFind = require('./_createFind'),\n    findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': true },\n *   { 'user': 'fred',    'age': 40, 'active': false },\n *   { 'user': 'pebbles', 'age': 1,  'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var arrayEach = require('./_arrayEach'),\n    baseEach = require('./_baseEach'),\n    castFunction = require('./_castFunction'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n  return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","/**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\nfunction isNull(value) {\n  return value === null;\n}\n\nmodule.exports = isNull;\n","var baseEach = require('./_baseEach'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nmodule.exports = baseMap;\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nmodule.exports = noop;\n","var Set = require('./_Set'),\n    noop = require('./noop'),\n    setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    cacheHas = require('./_cacheHas'),\n    createSet = require('./_createSet'),\n    setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseUniq;\n","var baseIteratee = require('./_baseIteratee'),\n    baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n  return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nmodule.exports = baseValues;\n","var baseValues = require('./_baseValues'),\n    keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nmodule.exports = baseSortBy;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","var arrayMap = require('./_arrayMap'),\n    baseGet = require('./_baseGet'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    baseSortBy = require('./_baseSortBy'),\n    baseUnary = require('./_baseUnary'),\n    compareMultiple = require('./_compareMultiple'),\n    identity = require('./identity'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        };\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nmodule.exports = baseOrderBy;\n","var baseFlatten = require('./_baseFlatten'),\n    baseOrderBy = require('./_baseOrderBy'),\n    baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","import invariant from 'invariant'\r\nimport findIndex from 'lodash/findIndex'\r\nimport indexOf from 'lodash/indexOf'\r\nimport find from 'lodash/find'\r\nimport forEach from 'lodash/forEach'\r\nimport get from 'lodash/get'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport isNull from 'lodash/isNull'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isArray from 'lodash/isArray'\r\nimport map from 'lodash/map'\r\nimport clone from 'lodash/clone'\r\nimport uniqBy from 'lodash/uniqBy'\r\nimport values from 'lodash/values'\r\nimport sortBy from 'lodash/sortBy'\r\n\r\nexport const compare = (comparator, item, toCompare = null) => {\r\n  if (isNil(comparator)) {\r\n    // no comparator we try ours.\r\n    if (!isNil(item['id'])) {\r\n      // try to compare ids\r\n      invariant(toCompare !== null, 'A comparator is required if there is no object to compare to')\r\n      return item['id'] === toCompare['id']\r\n    }\r\n  } else {\r\n    if (isFunction(comparator)) {\r\n      return comparator(item, toCompare)\r\n    } else {\r\n      // comparator is not a function, it contains a value (fallback id)\r\n      // TODO: comparator is an object suchs as { id: 3, test: 'toto' }\r\n      invariant(\r\n        !isNil(item['id']),\r\n        `A string comparator will be compared with the item 'id'. No id found on item object`\r\n      )\r\n      return item['id'] === comparator\r\n    }\r\n  }\r\n\r\n  invariant(false, 'array compare not handled')\r\n  return false\r\n}\r\n\r\nexport const copyArray = array => map(array, clone)\r\n\r\n/**\r\n * https://stackoverflow.com/questions/13518343/sort-array-containing-objects-based-on-another-array\r\n *\r\n * @param  {[type]} keysOrder   array of the keys in the order you want.\r\n * @param  {[type]} arrayToSort array to sort\r\n * @param  {[type]} comparator  func(keyToFind, currentObject): boolean\r\n *                              currentObject is the object taken from the arrayToSort\r\n * @return {[type]}             a sorted array\r\n */\r\nexport const getOrderedArray = (keysOrder, arrayToSort, comparator) => {\r\n  const comparatorFunc = current => key => comparator(key, current)\r\n  let orderedArray = []\r\n  let len = arrayToSort.length\r\n  let index\r\n  let current\r\n\r\n  for (; len--; ) {\r\n    current = arrayToSort[len]\r\n    index = findIndex(keysOrder, comparatorFunc(current))\r\n    orderedArray[index] = current\r\n  }\r\n\r\n  //change the arrayToSort\r\n  return orderedArray\r\n}\r\n\r\nexport const sortArray = (arrayParam, propertyGetter) => {\r\n  return sortBy(arrayParam, propertyGetter)\r\n}\r\n\r\nexport const findOnArray = (array, comparator) => {\r\n  const match = find(array, item => compare(comparator, item))\r\n\r\n  return isUndefined(match) ? null : match\r\n}\r\n\r\nexport const findIndexOnArray = (array, comparator) => {\r\n  const match = findIndex(array, item => compare(comparator, item))\r\n\r\n  return isUndefined(match) ? null : match\r\n}\r\n\r\nexport const existsOnArray = (array, comparator) => {\r\n  const match = findOnArray(array, comparator)\r\n\r\n  return !isNull(match)\r\n}\r\n\r\nexport const deleteObjectAtIndexOnArray = (arrayParam, index) => {\r\n  const array = copyArray(arrayParam)\r\n  array.splice(index, 1)\r\n  return array\r\n}\r\n\r\nexport const deleteObjectOnArray = (arrayParam, comparator) => {\r\n  const array = copyArray(arrayParam)\r\n  const match = findOnArray(array, comparator)\r\n\r\n  if (match) {\r\n    // Find item index using indexOf+find\r\n    const index = indexOf(array, match)\r\n\r\n    // Replace item at index using native splice\r\n    array.splice(index, 1)\r\n  }\r\n\r\n  return array\r\n}\r\n\r\nexport const toggleArrayObject = (arrayParam, obj, comparator) => {\r\n  const array = copyArray(arrayParam)\r\n  if (existsOnArray(array, comparator)) {\r\n    return deleteObjectOnArray(array, comparator)\r\n  }\r\n\r\n  array.push(obj)\r\n  return array\r\n}\r\n\r\nexport const updateArrayObjectAtIndex = (arrayParam, obj, index) => {\r\n  const array = arrayParam\r\n  array[index] = obj\r\n  return array\r\n}\r\n\r\nexport const updateArrayObject = (arrayParam, obj, comparator) => {\r\n  const array = arrayParam\r\n\r\n  return array.map(item => (compare(comparator, item) === true ? obj : item))\r\n}\r\n\r\nexport const updateArrayObjectOrCreate = (arrayParam, obj, comparator) => {\r\n  const array = arrayParam || []\r\n\r\n  if (existsOnArray(array, comparator)) {\r\n    return updateArrayObject(array, obj, comparator)\r\n  }\r\n\r\n  array.push(obj)\r\n  return array\r\n}\r\n\r\nexport const addUniqueOnArray = (arrayParam, obj, comparator) => {\r\n  const array = copyArray(arrayParam)\r\n  if (!existsOnArray(array, comparator)) {\r\n    array.push(obj)\r\n  }\r\n  return array\r\n}\r\n\r\nexport const removeArrayDuplicates = (arrayParam, getter) => {\r\n  return uniqBy(arrayParam, function(e) {\r\n    if (!getter) {\r\n      return e\r\n    }\r\n    return getter(e)\r\n  })\r\n}\r\n\r\n/**\r\n * @param array {Array} the new array\r\n * @param source {Array} the old array\r\n * @param appendMode {boolean} true to merge array with the new data append on the old array (use it\r\n *  for pagination)\r\n */\r\nexport const mergeArray = (array, source, getValueFunc, appendMode = false) => {\r\n  // merge new array and source and remove duplicate data\r\n  const mergedArray = appendMode ? [...source, ...array] : [...array, ...source]\r\n  const newArray = uniqBy(mergedArray, getValueFunc)\r\n  // update the data\r\n  const res = newArray.map(object => {\r\n    const updatedObject = findOnArray(array, a => {\r\n      return getValueFunc(object) === getValueFunc(a)\r\n    })\r\n    return updatedObject ? updatedObject : object\r\n  })\r\n  return res\r\n}\r\n\r\nexport const toggleArrayValue = (arrayParam, value) => {\r\n  const array = copyArray(arrayParam)\r\n\r\n  if (array.includes(value)) {\r\n    array.splice(indexOf(array, value), 1)\r\n  } else {\r\n    array.push(value)\r\n  }\r\n\r\n  return array\r\n}\r\n\r\nexport const asArray = param => (isArray(param) ? param : [param])\r\n\r\n/**\r\n * Modify the given target array, to add the source array on it, with an optimize way.\r\n *\r\n * /!\\ It modifies the target array !\r\n *\r\n * see https://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki\r\n */\r\nexport const addToArray = (target, source) => {\r\n  const targetLength = target.length\r\n  const sourceLength = source.length\r\n\r\n  // pre-allocate\r\n  target.length = targetLength + sourceLength\r\n\r\n  // Add arr2 items to arr1\r\n  for (let i = 0; i < source.length; i++) {\r\n    target[targetLength + i] = source[i]\r\n  }\r\n  return target\r\n}\r\n\r\n/**\r\n * Filter duplicates from the given array. The array sorting is not preserved.\r\n *\r\n * @param getId function that returns the id of the given object\r\n * @param comparator function(object, other). returns true if other must replace the given object\r\n */\r\nexport const filterDuplicates = (arrayParam, getId, comparator) => {\r\n  const objects = {}\r\n\r\n  arrayParam.forEach(other => {\r\n    const id = getId(other)\r\n\r\n    const object = objects[id]\r\n    if (!object) {\r\n      objects[id] = other\r\n    } else {\r\n      // duplicate, compare which one we keep\r\n      if (comparator(object, other)) {\r\n        objects[id] = other\r\n      }\r\n    }\r\n  })\r\n\r\n  // the purpose here is to keep the returned array in the same order of keys as it was before\r\n  return getOrderedArray(\r\n    arrayParam,\r\n    values(objects),\r\n    (value, other) => value.id === other.id\r\n  ).filter(Boolean)\r\n}\r\n\r\n/**\r\n * flattenArrayTree\r\n */\r\nexport const flattenArrayTree = (children, path) => {\r\n  const flattenedArray = []\r\n\r\n  const flattenArrayTreeInternal = (flattenedArray, children, path) => {\r\n    forEach(children, cat => {\r\n      flattenedArray.push(cat)\r\n      flattenArrayTreeInternal(flattenedArray, get(cat, path, null), path)\r\n    })\r\n  }\r\n\r\n  flattenArrayTreeInternal(flattenedArray, children, path)\r\n  return flattenedArray\r\n}\r\n\r\n/**\r\n * Creates an array of items without id (new) or different from original (updated)\r\n *\r\n * @param array The array to inspect.\r\n * @param comparator The comparator invoked per element.\r\n * @param diffKeys The array of keys to watch.\r\n */\r\nexport const differenceByKeys = (array, comparator, diffKeys) => {\r\n  const newArray = []\r\n\r\n  forEach(array, iteratee => {\r\n    if (!iteratee.id) {\r\n      newArray.push(iteratee)\r\n    } else {\r\n      let hasDiff = false\r\n      const current = comparator(iteratee)\r\n      diffKeys.forEach(key => {\r\n        if (iteratee[key] !== current[key]) {\r\n          hasDiff = true\r\n        }\r\n      })\r\n\r\n      if (hasDiff) {\r\n        newArray.push(iteratee)\r\n      }\r\n    }\r\n  })\r\n\r\n  return newArray\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport isNaN from 'lodash/isNaN'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport invariant from 'invariant'\r\nimport isString from 'lodash/isString'\r\n\r\nimport { asArray } from '../array'\r\n\r\nexport const getHostname = uri => {\r\n  const reg = /^(?:https?:\\/\\/)(?:[^@/\\n]+@)?(?:www\\.)?([^:/?\\n]+)/gim\r\n  const matches = reg.exec(uri)\r\n  return (matches && matches[1]) || null\r\n}\r\n\r\nexport const getRelativePath = uri => uri.replace(/^(?:\\/\\/|[^/]+)*\\//, '')\r\n\r\n/**\r\n * Parse the given `uri` and returns its query params as an object.\r\n * @param  {string} uri\r\n */\r\nexport const getQueryFromUri = uri => {\r\n  uri = uri.replace(/%3D/gi, '=').replace(/%3F/i, '?')\r\n\r\n  if (uri.indexOf('?') === -1) {\r\n    return {}\r\n  }\r\n\r\n  // Checking if there is at least one parameter\r\n  const uriBase = uri.substr(uri.indexOf('?') + 1)\r\n  if (uriBase === '') {\r\n    return {}\r\n  }\r\n\r\n  return uriBase.split('&').reduce((prev, curr) => {\r\n    const p = curr.split('=')\r\n    const key = decodeURIComponent(p[0])\r\n    prev[key] = decodeURIComponent(getQueryParam(key, uri))\r\n    return prev\r\n  }, {})\r\n}\r\n\r\n/**\r\n * Append the given `parameters` to the `uri`\r\n * if the `uri` already contains query parameters\r\n */\r\nexport const formatQueryParams = (uri, parameters) => {\r\n  if (isNil(uri)) {\r\n    return null\r\n  }\r\n\r\n  // get query on uri\r\n  const uriParameters = getQueryFromUri(uri)\r\n\r\n  // merge query from uri and parameters\r\n  parameters = {\r\n    ...uriParameters,\r\n    ...parameters,\r\n  }\r\n\r\n  // remove query\r\n  uri = uri.split('?')[0]\r\n\r\n  let qs = ''\r\n  for (let key in parameters) {\r\n    let value = parameters[key]\r\n    qs += key + '=' + value + '&'\r\n  }\r\n\r\n  if (qs.length > 0) {\r\n    qs = encodeURI(qs)\r\n    qs = qs.substring(0, qs.length - 1) // chop off last '&'\r\n\r\n    if (uri.indexOf('?') === -1) {\r\n      // does not have a query param yet\r\n      return `${uri}?${qs}`\r\n    }\r\n\r\n    return `${uri}&${qs}`\r\n  }\r\n\r\n  return uri\r\n}\r\n\r\n/**\r\n * see https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\r\n */\r\nexport const getQueryParam = (name, url) => {\r\n  if (!url) url = window.location.href\r\n  name = name.replace(/[[\\]]/g, '\\\\$&')\r\n\r\n  const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n    results = regex.exec(url)\r\n  if (!results) {\r\n    return null\r\n  }\r\n  if (!results[2]) {\r\n    return ''\r\n  }\r\n\r\n  const component = decodeURIComponent(results[2].replace(/\\+/g, ' '))\r\n\r\n  if (component) {\r\n    // remove hash '#'\r\n    // ex: tableNumber=1#entrees must return 1 for `tableNumber` name\r\n    const hashIndex = component.lastIndexOf('#')\r\n    if (hashIndex !== -1) {\r\n      return component.substr(0, hashIndex)\r\n    }\r\n  }\r\n\r\n  return component\r\n}\r\n\r\nexport const getQueryParamAsArray = (name, url) => {\r\n  const queryParam = getQueryParam(name, url)\r\n\r\n  if (isEmpty(queryParam)) {\r\n    return []\r\n  }\r\n\r\n  const data = decodeURIComponent(queryParam)\r\n  return data.split(',')\r\n}\r\n\r\nexport const getHash = url => {\r\n  if (!url) {\r\n    return window.location.hash\r\n  }\r\n\r\n  const component = decodeURIComponent(url.replace(/\\+/g, ' '))\r\n\r\n  const hashIndex = component.lastIndexOf('#')\r\n  if (hashIndex !== -1) {\r\n    return component.substr(hashIndex + 1)\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nexport const CALLBACK_EVENTS = {\r\n  INVALID_ACCESS_TOKEN: 'INVALID_ACCESS_TOKEN',\r\n  NO_PREVIOUS_PAGE: 'NO_PREVIOUS_PAGE',\r\n  NEW_ORDER: 'NEW_ORDER',\r\n}\r\n\r\nexport const getCallbackUri = (callbackUri, event) =>\r\n  callbackUri.indexOf('?') === -1\r\n    ? `${callbackUri}?event=${event}`\r\n    : `${callbackUri}&event=${event}`\r\n\r\nexport const removeUrlParameter = (url, queryToRemoveParam) => {\r\n  const queryToRemove = asArray(queryToRemoveParam)\r\n\r\n  // let finalUrl = decodeURI(url)\r\n\r\n  let queries = getQueryFromUri(url)\r\n\r\n  const baseUrl = url.replace(/%3F/i, '?').split('?')[0]\r\n\r\n  queryToRemove.forEach(query => {\r\n    // finalUrl = removeQueryParamFromUrl(finalUrl, query)\r\n    delete queries[query]\r\n  })\r\n\r\n  return formatQueryParams(baseUrl, queries)\r\n}\r\n\r\nexport const queryParamToInt = str => {\r\n  const intValue = parseInt(str, 10)\r\n  if (isNaN(intValue)) {\r\n    return null\r\n  }\r\n  return intValue\r\n}\r\n\r\n/**\r\n * format a given path to an absolute url\r\n *\r\n * @param {*} path can be either an object like getRoute('XXX') or a path as string directly\r\n */\r\nexport const getAbsolutePath = (path, queryParams = {}) => {\r\n  const base = `${window.location.protocol}//${window.location.host}`\r\n\r\n  // keep api consumer query param\r\n  const apiConsumerQueryParam = getQueryParam('apiConsumer')\r\n  if (!isEmpty(apiConsumerQueryParam)) {\r\n    queryParams.apiConsumer = apiConsumerQueryParam\r\n  }\r\n\r\n  if (isString(path)) {\r\n    return formatQueryParams(`${base}${path}`, queryParams)\r\n  }\r\n  if (!isNil(path.path)) {\r\n    return formatQueryParams(`${base}${path.path}`, queryParams)\r\n  }\r\n  invariant(`[getAbsolutePath] unable to dertermine path`)\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\n//\r\n// The environment should never be called directly.\r\n// We provides via this file methods to access to the getEnv()ironment configuration.\r\n//\r\nimport { getEnv } from './environment'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nconst apiVersionQueryParam = getQueryParam('apiVersion')\r\n\r\nexport const QUERY_PARAM_API_CONSUMER = 'apiConsumer'\r\nexport const QUERY_PARAM_API_CONSUMER_DEPRECATED = 'apiconsumer'\r\n\r\nexport const getQueryApiConsumer = () =>\r\n  getQueryParam(QUERY_PARAM_API_CONSUMER) || getQueryParam(QUERY_PARAM_API_CONSUMER_DEPRECATED)\r\n\r\nexport const getApiConsumer = () =>\r\n  (window.globalEnvironmentSettings && window.globalEnvironmentSettings.apiConsumer) ||\r\n  getQueryApiConsumer() ||\r\n  getEnv().API_CONSUMER\r\n\r\nexport const getApiUrl = () => {\r\n  let apiUrl = getEnv().API_URL\r\n  // handle the 'apiVersion' query param, that allows to specify which api version we wants to use\r\n  if (!isEmpty(apiVersionQueryParam)) {\r\n    apiUrl = apiUrl.replace(/https:\\/\\/[\\w-]*paymytable/, '')\r\n    apiUrl = 'https://' + apiVersionQueryParam + '-dot-paymytable' + apiUrl\r\n  }\r\n  return apiUrl\r\n}\r\n\r\nexport const getApiDocUrl = () => {\r\n  // for trying the webservices, we want Rapidoc to use the API url (including the apiVersion if any) used by the current BO V2 instance\r\n  // except in production where we don't want to use the \"bo\" apiVersion, but the default one\r\n  if (isProd()) {\r\n    return getEnv().API_DOC_URL\r\n  }\r\n  return getApiUrl()\r\n}\r\n\r\nexport const isLocal = () => getEnv().IS_LOCAL\r\n\r\nexport const isDev = () => getEnv().IS_DEV\r\n\r\nexport const isPreprod = () => getEnv().IS_PREPROD\r\n\r\nexport const isProd = () => getEnv().IS_PROD\r\n\r\nexport const isWebCustomer = () => getEnv().IS_WEB_CUSTOMER\r\n\r\nexport const isKiosk = () => getEnv().IS_KIOSK\r\n\r\nexport const isBo = () => getEnv().IS_BO\r\n\r\nexport const isOrderPlugin = () => getEnv().IS_ORDER_PLUGIN\r\n\r\nexport const isWebGlobal = () => getEnv().IS_WEB_GLOBAL\r\n\r\nexport const isEmbeddedFront = () => isWebCustomer() || isOrderPlugin()\r\n\r\nexport const getGoogleMapApiUrl = () => getEnv().Google.Map.API_URL\r\n\r\nexport const getGoogleMapApiVersion = () => getEnv().Google.Map.API_VERSION\r\n\r\nexport const getGoogleMapApiKey = () => getEnv().Google.Map.API_KEY\r\n\r\nexport const hasAuthEnabled = () => getEnv().HAS_AUTH_ENABLED || (!isBo() && !isKiosk())\r\n\r\nexport const shouldUseAppConfig = () => {\r\n  // we do not want to load app config on kiosk login page, since we define the api consumer to use\r\n  // on the login page, not before\r\n  if (isKiosk() && window.location.pathname.endsWith('/login')) {\r\n    return false\r\n  }\r\n  return getEnv().SHOULD_USE_APP_CONFIG || false\r\n}\r\n\r\nexport const isLocalhost = () => window.location.hostname === 'localhost'\r\n\r\n/**\r\n * Check if the current hostname is localhost or a private local IP address (IPv4 or IPv6).\r\n *\r\n * @returns {boolean}\r\n */\r\nexport const isLocalhostOrPrivateIp = () => {\r\n  const hostname = window.location.hostname\r\n\r\n  // Localhost\r\n  if (hostname === 'localhost') {\r\n    return true\r\n  }\r\n\r\n  // Private IPv4 (RFC 1918)\r\n  if (hostname.startsWith('10.')) {\r\n    return true\r\n  }\r\n  if (hostname.startsWith('192.168.')) {\r\n    return true\r\n  }\r\n  if (hostname.startsWith('172.')) {\r\n    const secondOctet = parseInt(hostname.split('.')[1], 10)\r\n    if (secondOctet >= 16 && secondOctet <= 31) {\r\n      return true\r\n    }\r\n  }\r\n\r\n  // IPv6 localhost\r\n  if (hostname === '::1') {\r\n    return true\r\n  }\r\n\r\n  // IPv6 link-local (fe80::)\r\n  if (hostname.startsWith('fe80:')) {\r\n    return true\r\n  }\r\n\r\n  // IPv6 unique local (fc00::)\r\n  if (hostname.startsWith('fc00::')) {\r\n    return true\r\n  }\r\n\r\n  return false\r\n}\r\n\r\nexport const __DEV__ = process.env.__DEV__\r\n\r\nexport const __VERSION__ = process.env.__VERSION__\r\n\r\nexport const __SDK_GIT_COMMIT__ = process.env.__SDK_GIT_COMMIT__\r\nexport const __APP_GIT_COMMIT__ = process.env.__APP_GIT_COMMIT__\r\n\r\nexport const __SDK_GIT_BRANCH__ = process.env.__SDK_GIT_BRANCH__\r\nexport const __APP_GIT_BRANCH__ = process.env.__APP_GIT_BRANCH__\r\n\r\nexport const __VERSION_GIT_HASH__ = `${__APP_GIT_COMMIT__}_${__SDK_GIT_COMMIT__}`\r\n\r\nexport const getPublicUrl = () => (isLocalhostOrPrivateIp() ? '' : 'https://' + getEnv().HOSTNAME)\r\n\r\nexport const shouldDisplayReportDialog = () => getEnv().Logger.DISPLAY_REPORT_DIALOG\r\n\r\nexport const getSentryUrl = () => getEnv().Logger.SENTRY_URL\r\n","\r\n\r\n//\r\n// Reference for our redux store\r\n//\r\n\r\nlet _store\r\n\r\nexport const registerStore = (store) => {\r\n  _store = store\r\n}\r\n\r\nexport const getStore = () => _store\r\n","import invariant from 'invariant'\r\n\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nconst createAction = (type, data, callback = null) => dispatch => {\r\n  if (callback !== null) {\r\n    callback()\r\n  }\r\n\r\n  invariant(isNil(data) || isUndefined(data.type), 'data cannot contain a type parameter')\r\n\r\n  invariant(!isNil(type), 'type is nil')\r\n  invariant(\r\n    isFunction(dispatch),\r\n    'action is not correctly initialized: const myAction = () => creatAction(...'\r\n  )\r\n\r\n  return dispatch({\r\n    type,\r\n    ...data,\r\n  })\r\n}\r\n\r\nexport default createAction\r\n","const createReducer = (initialState, fnMap) => (state = initialState, action) => {\r\n  const handler = fnMap[action.type]\r\n\r\n  return handler ? handler(state, action) : state\r\n}\r\n\r\nexport default createReducer\r\n","function defaultEqualityCheck(a, b) {\n  return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n  if (prev === null || next === null || prev.length !== next.length) {\n    return false;\n  }\n\n  // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n  var length = prev.length;\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\nexport function defaultMemoize(func) {\n  var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n\n  var lastArgs = null;\n  var lastResult = null;\n  // we reference arguments instead of spreading them for performance reasons\n  return function () {\n    if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n      // apply arguments instead of spreading for performance.\n      lastResult = func.apply(null, arguments);\n    }\n\n    lastArgs = arguments;\n    return lastResult;\n  };\n}\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;\n    }).join(', ');\n    throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n  }\n\n  return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n  for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    memoizeOptions[_key - 1] = arguments[_key];\n  }\n\n  return function () {\n    for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      funcs[_key2] = arguments[_key2];\n    }\n\n    var recomputations = 0;\n    var resultFunc = funcs.pop();\n    var dependencies = getDependencies(funcs);\n\n    var memoizedResultFunc = memoize.apply(undefined, [function () {\n      recomputations++;\n      // apply arguments instead of spreading for performance.\n      return resultFunc.apply(null, arguments);\n    }].concat(memoizeOptions));\n\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n    var selector = memoize(function () {\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        params.push(dependencies[i].apply(null, arguments));\n      }\n\n      // apply arguments instead of spreading for performance.\n      return memoizedResultFunc.apply(null, params);\n    });\n\n    selector.resultFunc = resultFunc;\n    selector.dependencies = dependencies;\n    selector.recomputations = function () {\n      return recomputations;\n    };\n    selector.resetRecomputations = function () {\n      return recomputations = 0;\n    };\n    return selector;\n  };\n}\n\nexport var createSelector = createSelectorCreator(defaultMemoize);\n\nexport function createStructuredSelector(selectors) {\n  var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\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  var objectKeys = Object.keys(selectors);\n  return selectorCreator(objectKeys.map(function (key) {\n    return selectors[key];\n  }), function () {\n    for (var _len3 = arguments.length, values = 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}","var arrayPush = require('./_arrayPush'),\n    baseFlatten = require('./_baseFlatten'),\n    copyArray = require('./_copyArray'),\n    isArray = require('./isArray');\n\n/**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\nfunction concat() {\n  var length = arguments.length;\n  if (!length) {\n    return [];\n  }\n  var args = Array(length - 1),\n      array = arguments[0],\n      index = length;\n\n  while (index--) {\n    args[index - 1] = arguments[index];\n  }\n  return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n}\n\nmodule.exports = concat;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\nfunction uniqWith(array, comparator) {\n  comparator = typeof comparator == 'function' ? comparator : undefined;\n  return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n}\n\nmodule.exports = uniqWith;\n","import Immutable from 'immutable'\r\nimport invariant from 'invariant'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport concat from 'lodash/concat'\r\nimport uniqWith from 'lodash/uniqWith'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\n/**\r\n * Generate a simple reducer with basic REQUEST / SUCCESS / FAILURE\r\n * @param  {string} actionType  Action to be reduced\r\n * @return {Immutable}          Updated state\r\n */\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  data: null,\r\n  pagination: null,\r\n  isFetching: false,\r\n  error: null,\r\n})\r\n\r\n/**\r\n * @param options\r\n *  - onShouldReset. By default when the cursor 'before' is null, we reset the data, since it is the\r\n *    first page. On certains cases, we do not want to reset the data, even if our pagination has\r\n *    changed. This method should return false in this case. It receives the Api action reponse.\r\n */\r\nconst createPaginateReducer = (\r\n  actionType,\r\n  reducer = null,\r\n  options = {\r\n    isTypeCursor: true,\r\n    isTypePage: false,\r\n  }\r\n) => (state = DEFAULT_STATE, action) => {\r\n  switch (action.type) {\r\n    case actionType.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        error: null,\r\n      })\r\n\r\n    case actionType.SUCCESS:\r\n      let newList = []\r\n\r\n      /**\r\n       * A null before cursor means we ran the action to load the first\r\n       * data page. In this case, we don't merge the data,\r\n       * we reset it.\r\n       */\r\n\r\n      let isFirstPage = false\r\n      switch (true) {\r\n        case options.isTypeCursor === true:\r\n          isFirstPage =\r\n            isEmpty(action.response?.paging?.cursors?.before) &&\r\n            (!options.onShouldReset || options.onShouldReset(action) === true)\r\n          break\r\n\r\n        case options.isTypePage === true:\r\n          isFirstPage =\r\n            action.response?.paging?.page === 0 &&\r\n            (!options.onShouldReset || options.onShouldReset(action) === true)\r\n          break\r\n\r\n        default:\r\n      }\r\n\r\n      if (isFirstPage) {\r\n        newList = action.response.data\r\n      } else {\r\n        let currentList = state.getIn(['data'])\r\n        if (!isNil(currentList)) {\r\n          currentList = currentList\r\n            .valueSeq()\r\n            .toArray()\r\n            .map(item => {\r\n              return item.toJS()\r\n            })\r\n        } else {\r\n          currentList = []\r\n        }\r\n\r\n        newList = concat(currentList, action.response.data)\r\n        // TODO: provide option that gives a callback instead of comparing id\r\n        newList = uniqWith(newList, (a, b) => a.id === b.id)\r\n      }\r\n\r\n      return state.merge({\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n        data: Immutable.fromJS(newList),\r\n        paging: action.response.paging,\r\n      })\r\n\r\n    case actionType.FAILURE:\r\n      return state.merge({\r\n        data: null,\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      if (reducer !== null) {\r\n        invariant(\r\n          isFunction(reducer) || isObject(reducer),\r\n          'reducer must be a function or an object'\r\n        )\r\n        let res\r\n        if (isFunction(reducer)) {\r\n          res = reducer(state, action)\r\n        } else {\r\n          const func = reducer[action.type]\r\n          if (!func) {\r\n            // no reducer function found for the action type.\r\n            return state\r\n          }\r\n          res = func(state, action)\r\n        }\r\n        invariant(!isUndefined(res), 'reducer returned undefined')\r\n        return res\r\n      }\r\n      return state\r\n  }\r\n}\r\n\r\ncreatePaginateReducer.DEFAULT_STATE = DEFAULT_STATE\r\n\r\nexport default createPaginateReducer\r\n","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n  switch (objectToString.call(wat)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n  return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n  return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n  return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n  return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isParameterizedString(wat) {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n  return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n  return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isNaN(wat) {\n  return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n  try {\n    return wat instanceof base;\n  } catch (_e) {\n    return false;\n  }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  return !!(typeof wat === 'object' && wat !== null && ((wat ).__isVue || (wat )._isVue));\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isNaN, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { isVueViewModel, isString, isRegExp } from './is.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let end = Math.min(start + 140, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0);\n  }\n\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction safeJoin(input, delimiter) {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if (isVueViewModel(value)) {\n        output.push('[VueViewModel]');\n      } else {\n        output.push(String(value));\n      }\n    } catch (e) {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n  value,\n  pattern,\n  requireExactStringMatch = false,\n) {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n  testString,\n  patterns = [],\n  requireExactStringMatch = false,\n) {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","import { isInstanceOf } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nfunction applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation,\n  parser,\n  maxValueLimit = 250,\n  key,\n  limit,\n  event,\n  hint,\n) {\n  if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = truncateAggregateExceptions(\n      aggregateExceptionsFromError(\n        exceptionFromErrorImplementation,\n        parser,\n        limit,\n        hint.originalException ,\n        key,\n        event.exception.values,\n        originalException,\n        0,\n      ),\n      maxValueLimit,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation,\n  parser,\n  limit,\n  error,\n  key,\n  prevExceptions,\n  exception,\n  exceptionId,\n) {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  // Recursively call this function in order to walk down a chain of errors\n  if (isInstanceOf(error[key], Error)) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n  if (Array.isArray(error.errors)) {\n    error.errors.forEach((childError, i) => {\n      if (isInstanceOf(childError, Error)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId) {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n    exception_id: exceptionId,\n  };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception,\n  source,\n  exceptionId,\n  parentId,\n) {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    type: 'chained',\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId,\n  };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions, maxValueLength) {\n  return exceptions.map(exception => {\n    if (exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n    return exception;\n  });\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","/** Internal global with common properties and Sentry extensions  */\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj) {\n  return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ =\n  (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n  // eslint-disable-next-line no-restricted-globals\n  (typeof window == 'object' && isGlobalObj(window)) ||\n  (typeof self == 'object' && isGlobalObj(self)) ||\n  (typeof global == 'object' && isGlobalObj(global)) ||\n  (function () {\n    return this;\n  })() ||\n  {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nfunction getGlobalObject() {\n  return GLOBAL_OBJ ;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(name, creator, obj) {\n  const gbl = (obj || GLOBAL_OBJ) ;\n  const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n  const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n  return singleton;\n}\n\nexport { GLOBAL_OBJ, getGlobalObject, getGlobalSingleton };\n//# sourceMappingURL=worldwide.js.map\n","import { isString } from './is.js';\nimport { getGlobalObject } from './worldwide.js';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject();\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(\n  elem,\n  options = {},\n) {\n  if (!elem) {\n    return '<unknown>';\n  }\n\n  // try/catch both:\n  // - accessing event.target (see getsentry/raven-js#838, #768)\n  // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n  // - can throw an exception in some circumstances.\n  try {\n    let currentElem = elem ;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      // bail out if\n      // - nextStr is the 'html' element\n      // - the length of the string that would be created exceeds maxStringLength\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n        break;\n      }\n\n      out.push(nextStr);\n\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n\n    return out.reverse().join(separator);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n  const elem = el\n\n;\n\n  const out = [];\n  let className;\n  let classes;\n  let key;\n  let attr;\n  let i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  // @ts-expect-error WINDOW has HTMLElement\n  if (WINDOW.HTMLElement) {\n    // If using the component name annotation plugin, this value may be available on the DOM node\n    if (elem instanceof HTMLElement && elem.dataset && elem.dataset['sentryComponent']) {\n      return elem.dataset['sentryComponent'];\n    }\n  }\n\n  out.push(elem.tagName.toLowerCase());\n\n  // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n  const keyAttrPairs =\n    keyAttrs && keyAttrs.length\n      ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n      : null;\n\n  if (keyAttrPairs && keyAttrPairs.length) {\n    keyAttrPairs.forEach(keyAttrPair => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    if (elem.id) {\n      out.push(`#${elem.id}`);\n    }\n\n    // eslint-disable-next-line prefer-const\n    className = elem.className;\n    if (className && isString(className)) {\n      classes = className.split(/\\s+/);\n      for (i = 0; i < classes.length; i++) {\n        out.push(`.${classes[i]}`);\n      }\n    }\n  }\n  const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n  for (i = 0; i < allowedAttrs.length; i++) {\n    key = allowedAttrs[i];\n    attr = elem.getAttribute(key);\n    if (attr) {\n      out.push(`[${key}=\"${attr}\"]`);\n    }\n  }\n  return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n  try {\n    return WINDOW.document.location.href;\n  } catch (oO) {\n    return '';\n  }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getDomElement(selector) {\n  if (WINDOW.document && WINDOW.document.querySelector) {\n    return WINDOW.document.querySelector(selector) ;\n  }\n  return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` attribute. This attribute is added at build-time\n * by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nfunction getComponentName(elem) {\n  // @ts-expect-error WINDOW has HTMLElement\n  if (!WINDOW.HTMLElement) {\n    return null;\n  }\n\n  let currentElem = elem ;\n  const MAX_TRAVERSE_HEIGHT = 5;\n  for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n    if (!currentElem) {\n      return null;\n    }\n\n    if (currentElem instanceof HTMLElement && currentElem.dataset['sentryComponent']) {\n      return currentElem.dataset['sentryComponent'];\n    }\n\n    currentElem = currentElem.parentNode;\n  }\n\n  return null;\n}\n\nexport { getComponentName, getDomElement, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = [\n  'debug',\n  'info',\n  'warn',\n  'error',\n  'log',\n  'assert',\n  'trace',\n] ;\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/** JSDoc */\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n  if (!('console' in GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = GLOBAL_OBJ.console ;\n  const wrappedFuncs = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level] ;\n    wrappedFuncs[level] = console[level] ;\n    console[level] = originalConsoleMethod;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] ;\n    });\n  }\n}\n\nfunction makeLogger() {\n  let enabled = false;\n  const logger = {\n    enable: () => {\n      enabled = true;\n    },\n    disable: () => {\n      enabled = false;\n    },\n    isEnabled: () => enabled,\n  };\n\n  if (DEBUG_BUILD) {\n    CONSOLE_LEVELS.forEach(name => {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      logger[name] = (...args) => {\n        if (enabled) {\n          consoleSandbox(() => {\n            GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n          });\n        }\n      };\n    });\n  } else {\n    CONSOLE_LEVELS.forEach(name => {\n      logger[name] = () => undefined;\n    });\n  }\n\n  return logger ;\n}\n\nconst logger = makeLogger();\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };\n//# sourceMappingURL=logger.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox, logger } from './logger.js';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol) {\n  return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nfunction dsnToString(dsn, withPassword = false) {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nfunction dsnFromString(str) {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() ;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol , publicKey });\n}\n\nfunction dsnFromComponents(components) {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn) {\n  if (!DEBUG_BUILD) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      logger.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nfunction makeDsn(from) {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n\nexport { dsnFromString, dsnToString, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","/** An error emitted by Sentry SDKs and related utilities. */\nclass SentryError extends Error {\n  /** Display name of this error instance. */\n\n   constructor( message, logLevel = 'warn') {\n    super(message);this.message = message;\n    this.name = new.target.prototype.constructor.name;\n    // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n    // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n    // instances of `SentryError` fail `obj instanceof SentryError` checks.\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.logLevel = logLevel;\n  }\n}\n\nexport { SentryError };\n//# sourceMappingURL=error.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { logger } from './logger.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n  if (!(name in source)) {\n    return;\n  }\n\n  const original = source[name] ;\n  const wrapped = replacementFactory(original) ;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  if (typeof wrapped === 'function') {\n    markFunctionWrapped(wrapped, original);\n  }\n\n  source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n  try {\n    Object.defineProperty(obj, name, {\n      // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n      value: value,\n      writable: true,\n      configurable: true,\n    });\n  } catch (o_O) {\n    DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n  }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nfunction getOriginalFunction(func) {\n  return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nfunction urlEncode(object) {\n  return Object.keys(object)\n    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n    .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n *  an Error.\n */\nfunction convertToPlainObject(\n  value,\n)\n\n {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  } else if (isEvent(value)) {\n    const newObj\n\n = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    };\n\n    if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n      newObj.detail = value.detail;\n    }\n\n    return newObj;\n  } else {\n    return value;\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n  try {\n    return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps = {};\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj )[property];\n      }\n    }\n    return extractedProps;\n  } else {\n    return {};\n  }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n\n  if (!keys.length) {\n    return '[object has no keys]';\n  }\n\n  if (keys[0].length >= maxLength) {\n    return truncate(keys[0], maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return truncate(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n  if (isPojo(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal ;\n    }\n\n    const returnValue = {};\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    for (const key of Object.keys(inputValue)) {\n      if (typeof inputValue[key] !== 'undefined') {\n        returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n      }\n    }\n\n    return returnValue ;\n  }\n\n  if (Array.isArray(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal ;\n    }\n\n    const returnValue = [];\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach((item) => {\n      returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n    });\n\n    return returnValue ;\n  }\n\n  return inputValue;\n}\n\nfunction isPojo(input) {\n  if (!isPlainObject(input)) {\n    return false;\n  }\n\n  try {\n    const name = (Object.getPrototypeOf(input) ).constructor.name;\n    return !name || name === 'Object';\n  } catch (e) {\n    return true;\n  }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n  let objectified;\n  switch (true) {\n    case wat === undefined || wat === null:\n      objectified = new String(wat);\n      break;\n\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case typeof wat === 'symbol' || typeof wat === 'bigint':\n      objectified = Object(wat);\n      break;\n\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat ).constructor(wat);\n      break;\n\n    // by process of elimination, at this point we know that `wat` must already be an object\n    default:\n      objectified = wat;\n      break;\n  }\n  return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode };\n//# sourceMappingURL=object.js.map\n","import { node } from './node-stack-trace.js';\nexport { filenameIsInApp } from './node-stack-trace.js';\n\nconst STACKTRACE_FRAME_LIMIT = 50;\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack, skipFirst = 0) => {\n    const frames = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirst; i < lines.length; i++) {\n      const line = lines[i];\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n      // input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        continue;\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames);\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\n  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n  if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\n\n  // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n  if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the hub itself, making it:\n    //\n    //   Sentry.captureException()\n    //   getCurrentHub().captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n      localStack.pop();\n    }\n  }\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n    ...frame,\n    filename: frame.filename || localStack[localStack.length - 1].filename,\n    function: frame.function || '?',\n  }));\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    return defaultFunctionName;\n  }\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nfunction nodeStackLineParser(getModule) {\n  return [90, node(getModule)];\n}\n\nexport { createStackParser, getFunctionName, nodeStackLineParser, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../logger.js';\nimport { getFunctionName } from '../stacktrace.js';\n\n// We keep the handlers globally\nconst handlers = {};\nconst instrumented = {};\n\n/** Add a handler function. */\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] ).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nfunction resetInstrumentationHandlers() {\n  Object.keys(handlers).forEach(key => {\n    handlers[key ] = undefined;\n  });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nfunction maybeInstrument(type, instrumentFn) {\n  if (!instrumented[type]) {\n    instrumentFn();\n    instrumented[type] = true;\n  }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nfunction triggerHandlers(type, data) {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };\n//# sourceMappingURL=_handlers.js.map\n","import { CONSOLE_LEVELS, originalConsoleMethods } from '../logger.js';\nimport { fill } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addConsoleInstrumentationHandler(handler) {\n  const type = 'console';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole() {\n  if (!('console' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach(function (level) {\n    if (!(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod) {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args) {\n        const handlerData = { args, level };\n        triggerHandlers('console', handlerData);\n\n        const log = originalConsoleMethods[level];\n        log && log.apply(GLOBAL_OBJ.console, args);\n      };\n    });\n  });\n}\n\nexport { addConsoleInstrumentationHandler };\n//# sourceMappingURL=console.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n  const gbl = GLOBAL_OBJ ;\n  const crypto = gbl.crypto || gbl.msCrypto;\n\n  let getRandomByte = () => Math.random() * 16;\n  try {\n    if (crypto && crypto.randomUUID) {\n      return crypto.randomUUID().replace(/-/g, '');\n    }\n    if (crypto && crypto.getRandomValues) {\n      getRandomByte = () => {\n        // crypto.getRandomValues might return undefined instead of the typed array\n        // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n        // However, `typedArray` is still filled in-place.\n        // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n        const typedArray = new Uint8Array(1);\n        crypto.getRandomValues(typedArray);\n        return typedArray[0];\n      };\n    }\n  } catch (_) {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n  return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event) {\n  return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n\n  const firstException = getFirstException(event);\n  if (firstException) {\n    if (firstException.type && firstException.value) {\n      return `${firstException.type}: ${firstException.value}`;\n    }\n    return firstException.type || firstException.value || eventId || '<unknown>';\n  }\n  return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n  const exception = (event.exception = event.exception || {});\n  const values = (exception.values = exception.values || []);\n  const firstException = (values[0] = values[0] || {});\n  if (!firstException.value) {\n    firstException.value = value || '';\n  }\n  if (!firstException.type) {\n    firstException.type = type || 'Error';\n  }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = parseInt(match[1], 10);\n  const minor = parseInt(match[2], 10);\n  const patch = parseInt(match[3], 10);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line) => snipLine(line, 0));\n\n  frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (exception && (exception ).__sentry_captured__) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    addNonEnumerableProperty(exception , '__sentry_captured__', true);\n  } catch (err) {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nfunction arrayify(maybeArray) {\n  return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","import { uuid4 } from '../misc.js';\nimport { fill, addNonEnumerableProperty } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nconst WINDOW = GLOBAL_OBJ ;\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addClickKeypressInstrumentationHandler(handler) {\n  const type = 'dom';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nfunction instrumentDOM() {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n  // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n  // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n  const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n  WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n  // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n  // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n  // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n  // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n  // guaranteed to fire at least once.)\n  ['EventTarget', 'Node'].forEach((target) => {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const proto = (WINDOW )[target] && (WINDOW )[target].prototype;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n    if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n      return;\n    }\n\n    fill(proto, 'addEventListener', function (originalAddEventListener) {\n      return function (\n\n        type,\n        listener,\n        options,\n      ) {\n        if (type === 'click' || type == 'keypress') {\n          try {\n            const el = this ;\n            const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n            const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n\n            handlerForType.refCount++;\n          } catch (e) {\n            // Accessing dom properties is always fragile.\n            // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n          }\n        }\n\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n\n    fill(\n      proto,\n      'removeEventListener',\n      function (originalRemoveEventListener) {\n        return function (\n\n          type,\n          listener,\n          options,\n        ) {\n          if (type === 'click' || type == 'keypress') {\n            try {\n              const el = this ;\n              const handlers = el.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n\n              if (handlerForType) {\n                handlerForType.refCount--;\n                // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n                if (handlerForType.refCount <= 0) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                  handlerForType.handler = undefined;\n                  delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                }\n\n                // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                if (Object.keys(handlers).length === 0) {\n                  delete el.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch (e) {\n              // Accessing dom properties is always fragile.\n              // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n            }\n          }\n\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      },\n    );\n  });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event) {\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\n\n  try {\n    // If both events have the same type, it's still possible that actions were performed on different targets.\n    // e.g. 2 clicks on different buttons.\n    if (!event.target || (event.target )._sentryId !== lastCapturedEventTargetId) {\n      return false;\n    }\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n  }\n\n  // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n  // to which an event listener was attached), we treat them as the same action, as we want to capture\n  // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n  return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType, target) {\n  // We are only interested in filtering `keypress` events for now.\n  if (eventType !== 'keypress') {\n    return false;\n  }\n\n  if (!target || !target.tagName) {\n    return true;\n  }\n\n  // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n  // e.g.tabbing through elements, hotkeys, etc.\n  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n  handler,\n  globalListener = false,\n) {\n  return (event) => {\n    // It's possible this handler might trigger multiple times for the same\n    // event (e.g. event propagation through node ancestors).\n    // Ignore if we've already captured that event.\n    if (!event || event['_sentryCaptured']) {\n      return;\n    }\n\n    const target = getEventTarget(event);\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n\n    // Mark event as \"seen\"\n    addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n    if (target && !target._sentryId) {\n      // Add UUID to event target so we can identify if\n      addNonEnumerableProperty(target, '_sentryId', uuid4());\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n    // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n    // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : undefined;\n    }\n\n    // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n    clearTimeout(debounceTimerID);\n    debounceTimerID = WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = undefined;\n      lastCapturedEventType = undefined;\n    }, DEBOUNCE_DURATION);\n  };\n}\n\nfunction getEventTarget(event) {\n  try {\n    return event.target ;\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n    return null;\n  }\n}\n\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { logger } from './logger.js';\nimport { getGlobalObject } from './worldwide.js';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject();\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsErrorEvent() {\n  try {\n    new ErrorEvent('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMError() {\n  try {\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-expect-error It really needs 1 argument, not 0.\n    new DOMError('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMException() {\n  try {\n    new DOMException('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsFetch() {\n  if (!('fetch' in WINDOW)) {\n    return false;\n  }\n\n  try {\n    new Headers();\n    new Request('http://www.example.com');\n    new Response();\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isNativeFetch(func) {\n  return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nfunction supportsNativeFetch() {\n  if (typeof EdgeRuntime === 'string') {\n    return true;\n  }\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  // Fast path to avoid DOM I/O\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  if (isNativeFetch(WINDOW.fetch)) {\n    return true;\n  }\n\n  // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n  // so create a \"pure\" iframe to see if that has native fetch\n  let result = false;\n  const doc = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (doc && typeof (doc.createElement ) === 'function') {\n    try {\n      const sandbox = doc.createElement('iframe');\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        result = isNativeFetch(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      DEBUG_BUILD &&\n        logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReportingObserver() {\n  return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReferrerPolicy() {\n  // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n  // (see https://caniuse.com/#feat=referrer-policy),\n  // it doesn't. And it throws an exception instead of ignoring this parameter...\n  // REF: https://github.com/getsentry/raven-js/issues/1233\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  try {\n    new Request('_', {\n      referrerPolicy: 'origin' ,\n    });\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport { isNativeFetch, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver };\n//# sourceMappingURL=supports.js.map\n","import { fill } from '../object.js';\nimport { supportsNativeFetch } from '../supports.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addFetchInstrumentationHandler(handler) {\n  const type = 'fetch';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentFetch);\n}\n\nfunction instrumentFetch() {\n  if (!supportsNativeFetch()) {\n    return;\n  }\n\n  fill(GLOBAL_OBJ, 'fetch', function (originalFetch) {\n    return function (...args) {\n      const { method, url } = parseFetchArgs(args);\n\n      const handlerData = {\n        args,\n        fetchData: {\n          method,\n          url,\n        },\n        startTimestamp: Date.now(),\n      };\n\n      triggerHandlers('fetch', {\n        ...handlerData,\n      });\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalFetch.apply(GLOBAL_OBJ, args).then(\n        (response) => {\n          const finishedHandlerData = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            response,\n          };\n\n          triggerHandlers('fetch', finishedHandlerData);\n          return response;\n        },\n        (error) => {\n          const erroredHandlerData = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            error,\n          };\n\n          triggerHandlers('fetch', erroredHandlerData);\n          // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n          //       it means the sentry.javascript SDK caught an error invoking your application code.\n          //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n          throw error;\n        },\n      );\n    };\n  });\n}\n\nfunction hasProp(obj, prop) {\n  return !!obj && typeof obj === 'object' && !!(obj )[prop];\n}\n\nfunction getUrlFromResource(resource) {\n  if (typeof resource === 'string') {\n    return resource;\n  }\n\n  if (!resource) {\n    return '';\n  }\n\n  if (hasProp(resource, 'url')) {\n    return resource.url;\n  }\n\n  if (resource.toString) {\n    return resource.toString();\n  }\n\n  return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nfunction parseFetchArgs(fetchArgs) {\n  if (fetchArgs.length === 0) {\n    return { method: 'GET', url: '' };\n  }\n\n  if (fetchArgs.length === 2) {\n    const [url, options] = fetchArgs ;\n\n    return {\n      url: getUrlFromResource(url),\n      method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n    };\n  }\n\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg ),\n    method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n  };\n}\n\nexport { addFetchInstrumentationHandler, parseFetchArgs };\n//# sourceMappingURL=fetch.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nlet _oldOnErrorHandler = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalErrorInstrumentationHandler(handler) {\n  const type = 'error';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError() {\n  _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n  GLOBAL_OBJ.onerror = function (\n    msg,\n    url,\n    line,\n    column,\n    error,\n  ) {\n    const handlerData = {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    };\n    triggerHandlers('error', handlerData);\n\n    if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  };\n\n  GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalErrorInstrumentationHandler };\n//# sourceMappingURL=globalError.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nlet _oldOnUnhandledRejectionHandler = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalUnhandledRejectionInstrumentationHandler(\n  handler,\n) {\n  const type = 'unhandledrejection';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection() {\n  _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n  GLOBAL_OBJ.onunhandledrejection = function (e) {\n    const handlerData = e;\n    triggerHandlers('unhandledrejection', handlerData);\n\n    if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n\n    return true;\n  };\n\n  GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalUnhandledRejectionInstrumentationHandler };\n//# sourceMappingURL=globalUnhandledRejection.js.map\n","import { getGlobalObject } from '../worldwide.js';\n\n// Based on https://github.com/angular/angular.js/pull/13945/files\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject();\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsHistory() {\n  // NOTE: in Chrome App environment, touching history.pushState, *even inside\n  //       a try/catch block*, will cause Chrome to output an error to console.error\n  // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n  /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const chromeVar = (WINDOW ).chrome;\n  const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.app.runtime;\n  /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n  const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n  return !isChromePackagedApp && hasHistoryApi;\n}\n\nexport { supportsHistory };\n//# sourceMappingURL=supportsHistory.js.map\n","import { fill } from '../object.js';\nimport '../debug-build.js';\nimport '../logger.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { supportsHistory } from '../vendor/supportsHistory.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet lastHref;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addHistoryInstrumentationHandler(handler) {\n  const type = 'history';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory() {\n  if (!supportsHistory()) {\n    return;\n  }\n\n  const oldOnPopState = WINDOW.onpopstate;\n  WINDOW.onpopstate = function ( ...args) {\n    const to = WINDOW.location.href;\n    // keep track of the current URL state, as we always receive only the updated state\n    const from = lastHref;\n    lastHref = to;\n    const handlerData = { from, to };\n    triggerHandlers('history', handlerData);\n    if (oldOnPopState) {\n      // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n      // https://github.com/getsentry/sentry-javascript/issues/3344\n      // https://github.com/bugsnag/bugsnag-js/issues/469\n      try {\n        return oldOnPopState.apply(this, args);\n      } catch (_oO) {\n        // no-empty\n      }\n    }\n  };\n\n  function historyReplacementFunction(originalHistoryFunction) {\n    return function ( ...args) {\n      const url = args.length > 2 ? args[2] : undefined;\n      if (url) {\n        // coerce to string (this is what pushState does)\n        const from = lastHref;\n        const to = String(url);\n        // keep track of the current URL state, as we always receive only the updated state\n        lastHref = to;\n        const handlerData = { from, to };\n        triggerHandlers('history', handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  fill(WINDOW.history, 'pushState', historyReplacementFunction);\n  fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n\nexport { addHistoryInstrumentationHandler };\n//# sourceMappingURL=history.js.map\n","import { isString } from '../is.js';\nimport { fill } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addXhrInstrumentationHandler(handler) {\n  const type = 'xhr';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nfunction instrumentXHR() {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (!(WINDOW ).XMLHttpRequest) {\n    return;\n  }\n\n  const xhrproto = XMLHttpRequest.prototype;\n\n  fill(xhrproto, 'open', function (originalOpen) {\n    return function ( ...args) {\n      const startTimestamp = Date.now();\n\n      // open() should always be called with two or more arguments\n      // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n      const method = isString(args[0]) ? args[0].toUpperCase() : undefined;\n      const url = parseUrl(args[1]);\n\n      if (!method || !url) {\n        return originalOpen.apply(this, args);\n      }\n\n      this[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {},\n      };\n\n      // if Sentry key appears in URL, don't capture it as a request\n      if (method === 'POST' && url.match(/sentry_key/)) {\n        this.__sentry_own_request__ = true;\n      }\n\n      const onreadystatechangeHandler = () => {\n        // For whatever reason, this is not the same instance here as from the outer method\n        const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n        if (!xhrInfo) {\n          return;\n        }\n\n        if (this.readyState === 4) {\n          try {\n            // touching statusCode in some platforms throws\n            // an exception\n            xhrInfo.status_code = this.status;\n          } catch (e) {\n            /* do nothing */\n          }\n\n          const handlerData = {\n            args: [method, url],\n            endTimestamp: Date.now(),\n            startTimestamp,\n            xhr: this,\n          };\n          triggerHandlers('xhr', handlerData);\n        }\n      };\n\n      if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n        fill(this, 'onreadystatechange', function (original) {\n          return function ( ...readyStateArgs) {\n            onreadystatechangeHandler();\n            return original.apply(this, readyStateArgs);\n          };\n        });\n      } else {\n        this.addEventListener('readystatechange', onreadystatechangeHandler);\n      }\n\n      // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n      // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n      // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n      fill(this, 'setRequestHeader', function (original) {\n        return function ( ...setRequestHeaderArgs) {\n          const [header, value] = setRequestHeaderArgs;\n\n          const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo && isString(header) && isString(value)) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n\n          return original.apply(this, setRequestHeaderArgs);\n        };\n      });\n\n      return originalOpen.apply(this, args);\n    };\n  });\n\n  fill(xhrproto, 'send', function (originalSend) {\n    return function ( ...args) {\n      const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n\n      if (!sentryXhrData) {\n        return originalSend.apply(this, args);\n      }\n\n      if (args[0] !== undefined) {\n        sentryXhrData.body = args[0];\n      }\n\n      const handlerData = {\n        args: [sentryXhrData.method, sentryXhrData.url],\n        startTimestamp: Date.now(),\n        xhr: this,\n      };\n      triggerHandlers('xhr', handlerData);\n\n      return originalSend.apply(this, args);\n    };\n  });\n}\n\nfunction parseUrl(url) {\n  if (isString(url)) {\n    return url;\n  }\n\n  try {\n    // url can be a string or URL\n    // but since URL is not available in IE11, we do not check for it,\n    // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n    // If that fails, we just return undefined\n    return (url ).toString();\n  } catch (e2) {} // eslint-disable-line no-empty\n\n  return undefined;\n}\n\nexport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler, instrumentXHR };\n//# sourceMappingURL=xhr.js.map\n","/*\n * This module exists for optimizations in the build process through rollup and terser.  We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nfunction isBrowserBundle() {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nfunction getSDKSource() {\n  // @ts-expect-error \"npm\" is injected by rollup during build process\n  return \"npm\";\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder() {\n  const hasWeakSet = typeof WeakSet === 'function';\n  const inner = hasWeakSet ? new WeakSet() : [];\n  function memoize(obj) {\n    if (hasWeakSet) {\n      if (inner.has(obj)) {\n        return true;\n      }\n      inner.add(obj);\n      return false;\n    }\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let i = 0; i < inner.length; i++) {\n      const value = inner[i];\n      if (value === obj) {\n        return true;\n      }\n    }\n    inner.push(obj);\n    return false;\n  }\n\n  function unmemoize(obj) {\n    if (hasWeakSet) {\n      inner.delete(obj);\n    } else {\n      for (let i = 0; i < inner.length; i++) {\n        if (inner[i] === obj) {\n          inner.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }\n  return [memoize, unmemoize];\n}\n\nexport { memoBuilder };\n//# sourceMappingURL=memo.js.map\n","import { isNaN, isVueViewModel, isSyntheticEvent } from './is.js';\nimport { memoBuilder } from './memo.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  object,\n  // Default Node.js REPL depth\n  depth = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize = 100 * 1024,\n) {\n  const normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key,\n  value,\n  depth = +Infinity,\n  maxProperties = +Infinity,\n  memo = memoBuilder(),\n) {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))\n  ) {\n    return value ;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. As a general rule, the\n  // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n  // have already been normalized.\n  if ((value )['__sentry_skip_normalization__']) {\n    return value ;\n  }\n\n  // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n  // We keep a certain amount of depth.\n  // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n  const remainingDepth =\n    typeof (value )['__sentry_override_normalization_depth__'] === 'number'\n      ? ((value )['__sentry_override_normalization_depth__'] )\n      : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value ;\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch (err) {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) ;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = convertToPlainObject(value );\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n  key,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value,\n) {\n  try {\n    if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n      return '[Domain]';\n    }\n\n    if (key === 'domainEmitter') {\n      return '[DomainEmitter]';\n    }\n\n    // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n    // which won't throw if they are not present.\n\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n      return '[Window]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n      return '[Document]';\n    }\n\n    if (isVueViewModel(value)) {\n      return '[VueViewModel]';\n    }\n\n    // React's SyntheticEvent thingy\n    if (isSyntheticEvent(value)) {\n      return '[SyntheticEvent]';\n    }\n\n    if (typeof value === 'number' && value !== value) {\n      return '[NaN]';\n    }\n\n    if (typeof value === 'function') {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    // Handle HTML Elements\n    if (/^HTML(\\w*)Element$/.test(objName)) {\n      return `[HTMLElement: ${objName}]`;\n    }\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value) {\n  const prototype = Object.getPrototypeOf(value);\n\n  return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value) {\n  return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nfunction normalizeUrlToBase(url, basePath) {\n  const escapedBase = basePath\n    // Backslash to forward\n    .replace(/\\\\/g, '/')\n    // Escape RegExp special characters\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch (_Oo) {\n    // Sometime this breaks\n  }\n  return (\n    newUrl\n      .replace(/\\\\/g, '/')\n      .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n      // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n      .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n  );\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase, visit as walk };\n//# sourceMappingURL=normalize.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n  /** Pending */\n  const PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n  /** Resolved / OK */\n  const RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n  /** Rejected / Error */\n  const REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n\n   constructor(\n    executor,\n  ) {SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);\n    this._state = States.PENDING;\n    this._handlers = [];\n\n    try {\n      executor(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\n    }\n  }\n\n  /** JSDoc */\n   then(\n    onfulfilled,\n    onrejected,\n  ) {\n    return new SyncPromise((resolve, reject) => {\n      this._handlers.push([\n        false,\n        result => {\n          if (!onfulfilled) {\n            // TODO: ¯\\_(ツ)_/¯\n            // TODO: FIXME\n            resolve(result );\n          } else {\n            try {\n              resolve(onfulfilled(result));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n        reason => {\n          if (!onrejected) {\n            reject(reason);\n          } else {\n            try {\n              resolve(onrejected(reason));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n      ]);\n      this._executeHandlers();\n    });\n  }\n\n  /** JSDoc */\n   catch(\n    onrejected,\n  ) {\n    return this.then(val => val, onrejected);\n  }\n\n  /** JSDoc */\n   finally(onfinally) {\n    return new SyncPromise((resolve, reject) => {\n      let val;\n      let isRejected;\n\n      return this.then(\n        value => {\n          isRejected = false;\n          val = value;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n        reason => {\n          isRejected = true;\n          val = reason;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n      ).then(() => {\n        if (isRejected) {\n          reject(val);\n          return;\n        }\n\n        resolve(val );\n      });\n    });\n  }\n\n  /** JSDoc */\n    __init() {this._resolve = (value) => {\n    this._setResult(States.RESOLVED, value);\n  };}\n\n  /** JSDoc */\n    __init2() {this._reject = (reason) => {\n    this._setResult(States.REJECTED, reason);\n  };}\n\n  /** JSDoc */\n    __init3() {this._setResult = (state, value) => {\n    if (this._state !== States.PENDING) {\n      return;\n    }\n\n    if (isThenable(value)) {\n      void (value ).then(this._resolve, this._reject);\n      return;\n    }\n\n    this._state = state;\n    this._value = value;\n\n    this._executeHandlers();\n  };}\n\n  /** JSDoc */\n    __init4() {this._executeHandlers = () => {\n    if (this._state === States.PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler[0]) {\n        return;\n      }\n\n      if (this._state === States.RESOLVED) {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        handler[1](this._value );\n      }\n\n      if (this._state === States.REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { SentryError } from './error.js';\nimport { rejectedSyncPromise, SyncPromise, resolvedSyncPromise } from './syncpromise.js';\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nfunction makePromiseBuffer(limit) {\n  const buffer = [];\n\n  function isReady() {\n    return limit === undefined || buffer.length < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task) {\n    return buffer.splice(buffer.indexOf(task), 1)[0];\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer) {\n    if (!isReady()) {\n      return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    if (buffer.indexOf(task) === -1) {\n      buffer.push(task);\n    }\n    void task\n      .then(() => remove(task))\n      // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n      // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n      // have promises, so TS has to polyfill when down-compiling.)\n      .then(null, () =>\n        remove(task).then(null, () => {\n          // We have to add another catch here because `remove()` starts a new promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout) {\n    return new SyncPromise((resolve, reject) => {\n      let counter = buffer.length;\n\n      if (!counter) {\n        return resolve(true);\n      }\n\n      // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n\n      // if all promises resolve in time, cancel the timer and resolve to `true`\n      buffer.forEach(item => {\n        void resolvedSyncPromise(item).then(() => {\n          if (!--counter) {\n            clearTimeout(capturedSetTimeout);\n            resolve(true);\n          }\n        }, reject);\n      });\n    });\n  }\n\n  return {\n    $: buffer,\n    add,\n    drain,\n  };\n}\n\nexport { makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nfunction parseUrl(url) {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nfunction stripUrlQueryAndFragment(urlPath) {\n  // eslint-disable-next-line no-useless-escape\n  return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nfunction getNumberOfUrlSegments(url) {\n  // split at '/' or at '\\/' to split regex urls correctly\n  return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span description\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nfunction getSanitizedUrlString(url) {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    (host &&\n      host\n        // Always filter out authority\n        .replace(/^.*@/, '[filtered]:[filtered]@')\n        // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n        // TODO: Use new URL global if it exists\n        .replace(/(:80)$/, '')\n        .replace(/(:443)$/, '')) ||\n    '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n\nexport { getNumberOfUrlSegments, getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment };\n//# sourceMappingURL=url.js.map\n","// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nconst validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a member of the deprecated {@link Severity} enum.\n *\n * @deprecated `severityFromString` is deprecated. Please use `severityLevelFromString` instead.\n *\n * @param level String representation of Severity\n * @returns Severity\n */\nfunction severityFromString(level) {\n  return severityLevelFromString(level) ;\n}\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nfunction severityLevelFromString(level) {\n  return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') ;\n}\n\nexport { severityFromString, severityLevelFromString, validSeverityLevels };\n//# sourceMappingURL=severity.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nfunction dateTimestampInSeconds() {\n  return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc() {\n  const { performance } = GLOBAL_OBJ ;\n  if (!performance || !performance.now) {\n    return dateTimestampInSeconds;\n  }\n\n  // Some browser and environments don't have a timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  const approxStartingTimeOrigin = Date.now() - performance.now();\n  const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n  };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nconst timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Re-exported with an old name for backwards-compatibility.\n * TODO (v8): Remove this\n *\n * @deprecated Use `timestampInSeconds` instead.\n */\nconst timestampWithMs = timestampInSeconds;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nlet _browserPerformanceTimeOriginMode;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nconst browserPerformanceTimeOrigin = (() => {\n  // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n  // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n  // data as reliable if they are within a reasonable threshold of the current time.\n\n  const { performance } = GLOBAL_OBJ ;\n  if (!performance || !performance.now) {\n    _browserPerformanceTimeOriginMode = 'none';\n    return undefined;\n  }\n\n  const threshold = 3600 * 1000;\n  const performanceNow = performance.now();\n  const dateNow = Date.now();\n\n  // if timeOrigin isn't available set delta to threshold so it isn't used\n  const timeOriginDelta = performance.timeOrigin\n    ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n    : threshold;\n  const timeOriginIsReliable = timeOriginDelta < threshold;\n\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line deprecation/deprecation\n  const navigationStart = performance.timing && performance.timing.navigationStart;\n  const hasNavigationStart = typeof navigationStart === 'number';\n  // if navigationStart isn't available set delta to threshold so it isn't used\n  const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n  const navigationStartIsReliable = navigationStartDelta < threshold;\n\n  if (timeOriginIsReliable || navigationStartIsReliable) {\n    // Use the more reliable time origin\n    if (timeOriginDelta <= navigationStartDelta) {\n      _browserPerformanceTimeOriginMode = 'timeOrigin';\n      return performance.timeOrigin;\n    } else {\n      _browserPerformanceTimeOriginMode = 'navigationStart';\n      return navigationStart;\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n  _browserPerformanceTimeOriginMode = 'dateNow';\n  return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds, timestampWithMs };\n//# sourceMappingURL=time.js.map\n","import { dsnToString } from './dsn.js';\nimport { normalize } from './normalize.js';\nimport { dropUndefinedKeys } from './object.js';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction createEnvelope(headers, items = []) {\n  return [headers, items] ;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction addItemToEnvelope(envelope, newItem) {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]] ;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nfunction forEachEnvelopeItem(\n  envelope,\n  callback,\n) {\n  const envelopeItems = envelope[1];\n\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n\n    if (result) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nfunction envelopeContainsItemType(envelope, types) {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8.\n */\nfunction encodeUTF8(input, textEncoder) {\n  const utf8 = textEncoder || new TextEncoder();\n  return utf8.encode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nfunction serializeEnvelope(envelope, textEncoder) {\n  const [envHeaders, items] = envelope;\n\n  // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n  let parts = JSON.stringify(envHeaders);\n\n  function append(next) {\n    if (typeof parts === 'string') {\n      parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts, textEncoder), next];\n    } else {\n      parts.push(typeof next === 'string' ? encodeUTF8(next, textEncoder) : next);\n    }\n  }\n\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n\n    append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n    if (typeof payload === 'string' || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch (e) {\n        // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.strinify()` still\n        // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n        // performance impact but in this case a performance hit is better than throwing.\n        stringifiedPayload = JSON.stringify(normalize(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n\n  return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers) {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n  const merged = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const buffer of buffers) {\n    merged.set(buffer, offset);\n    offset += buffer.length;\n  }\n\n  return merged;\n}\n\n/**\n * Parses an envelope\n */\nfunction parseEnvelope(\n  env,\n  textEncoder,\n  textDecoder,\n) {\n  let buffer = typeof env === 'string' ? textEncoder.encode(env) : env;\n\n  function readBinary(length) {\n    const bin = buffer.subarray(0, length);\n    // Replace the buffer with the remaining data excluding trailing newline\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n\n  function readJson() {\n    let i = buffer.indexOf(0xa);\n    // If we couldn't find a newline, we must have found the end of the buffer\n    if (i < 0) {\n      i = buffer.length;\n    }\n\n    return JSON.parse(textDecoder.decode(readBinary(i))) ;\n  }\n\n  const envelopeHeader = readJson();\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const items = [];\n\n  while (buffer.length) {\n    const itemHeader = readJson();\n    const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n\n  return [envelopeHeader, items];\n}\n\n/**\n * Creates attachment envelope items\n */\nfunction createAttachmentEnvelopeItem(\n  attachment,\n  textEncoder,\n) {\n  const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data, textEncoder) : attachment.data;\n\n  return [\n    dropUndefinedKeys({\n      type: 'attachment',\n      length: buffer.length,\n      filename: attachment.filename,\n      content_type: attachment.contentType,\n      attachment_type: attachment.attachmentType,\n    }),\n    buffer,\n  ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP = {\n  session: 'session',\n  sessions: 'session',\n  attachment: 'attachment',\n  transaction: 'transaction',\n  event: 'error',\n  client_report: 'internal',\n  user_report: 'default',\n  profile: 'profile',\n  replay_event: 'replay',\n  replay_recording: 'replay',\n  check_in: 'monitor',\n  feedback: 'feedback',\n  span: 'span',\n  statsd: 'metric_bucket',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nfunction envelopeItemTypeToDataCategory(type) {\n  return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n  if (!metadataOrEvent || !metadataOrEvent.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nfunction createEventEnvelopeHeaders(\n  event,\n  sdkInfo,\n  tunnel,\n  dsn,\n) {\n  const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n  return {\n    event_id: event.event_id ,\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n    ...(dynamicSamplingContext && {\n      trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n    }),\n  };\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nfunction createClientReportEnvelope(\n  discarded_events,\n  dsn,\n  timestamp,\n) {\n  const clientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events,\n    },\n  ];\n  return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\n\nconst DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nfunction parseRetryAfterHeader(header, now = Date.now()) {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nfunction disabledUntil(limits, dataCategory) {\n  return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nfunction isRateLimited(limits, dataCategory, now = Date.now()) {\n  return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nfunction updateRateLimits(\n  limits,\n  { statusCode, headers },\n  now = Date.now(),\n) {\n  const updatedRateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n  const retryAfterHeader = headers && headers['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\n     * rate limit headers are of the form\n     *     <header>,<header>,..\n     * where each <header> is of the form\n     *     <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n     * where\n     *     <retry_after> is a delay in seconds\n     *     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n     *         <category>;<category>;...\n     *     <scope> is what's being limited (org, project, or key) - ignored by SDK\n     *     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n     *     <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n     *         Only present if rate limit applies to the metric_bucket data category.\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories, , , namespaces] = limit.split(':', 5);\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          if (category === 'metric_bucket') {\n            // namespaces will be present when category === 'metric_bucket'\n            if (!namespaces || namespaces.split(';').includes('custom')) {\n              updatedRateLimits[category] = now + delay;\n            }\n          } else {\n            updatedRateLimits[category] = now + delay;\n          }\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { SyncPromise, logger, isThenable, getGlobalSingleton } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\n\n/**\n * Returns the global event processors.\n * @deprecated Global event processors will be removed in v8.\n */\nfunction getGlobalEventProcessors() {\n  return getGlobalSingleton('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @deprecated Use `addEventProcessor` instead. Global event processors will be removed in v8.\n */\nfunction addGlobalEventProcessor(callback) {\n  // eslint-disable-next-line deprecation/deprecation\n  getGlobalEventProcessors().push(callback);\n}\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n  processors,\n  event,\n  hint,\n  index = 0,\n) {\n  return new SyncPromise((resolve, reject) => {\n    const processor = processors[index];\n    if (event === null || typeof processor !== 'function') {\n      resolve(event);\n    } else {\n      const result = processor({ ...event }, hint) ;\n\n      DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n      if (isThenable(result)) {\n        void result\n          .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n          .then(null, reject);\n      } else {\n        void notifyEventProcessors(processors, result, hint, index + 1)\n          .then(resolve)\n          .then(null, reject);\n      }\n    }\n  });\n}\n\nexport { addGlobalEventProcessor, getGlobalEventProcessors, notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { timestampInSeconds, uuid4, dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = timestampInSeconds();\n\n  const session = {\n    sid: uuid4(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: 'ok',\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session),\n  };\n\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nfunction updateSession(session, context = {}) {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || timestampInSeconds();\n\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n  return dropUndefinedKeys({\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds } from '@sentry/utils';\n\n// These are aligned with OpenTelemetry trace flags\nconst TRACE_FLAG_NONE = 0x0;\nconst TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n */\nfunction spanToTraceContext(span) {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, tags, origin } = spanToJSON(span);\n\n  return dropUndefinedKeys({\n    data,\n    op,\n    parent_span_id,\n    span_id,\n    status,\n    tags,\n    trace_id,\n    origin,\n  });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nfunction spanToTraceHeader(span) {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input intp a timestamp in seconds.\n */\nfunction spanTimeInputToSeconds(input) {\n  if (typeof input === 'number') {\n    return ensureTimestampInSeconds(input);\n  }\n\n  if (Array.isArray(input)) {\n    // See {@link HrTime} for the array-based time format\n    return input[0] + input[1] / 1e9;\n  }\n\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n\n  return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n * Note that all fields returned here are optional and need to be guarded against.\n *\n * Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n * This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n * And `spanToJSON` needs the Span class from `span.ts` to check here.\n * TODO v8: When we remove the deprecated stuff from `span.ts`, we can remove the circular dependency again.\n */\nfunction spanToJSON(span) {\n  if (spanIsSpanClass(span)) {\n    return span.getSpanJSON();\n  }\n\n  // Fallback: We also check for `.toJSON()` here...\n  // eslint-disable-next-line deprecation/deprecation\n  if (typeof span.toJSON === 'function') {\n    // eslint-disable-next-line deprecation/deprecation\n    return span.toJSON();\n  }\n\n  return {};\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSpanClass(span) {\n  return typeof (span ).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nfunction spanIsSampled(span) {\n  // We align our trace flags with the ones OpenTelemetry use\n  // So we also check for sampled the same way they do.\n  const { traceFlags } = span.spanContext();\n  // eslint-disable-next-line no-bitwise\n  return Boolean(traceFlags & TRACE_FLAG_SAMPLED);\n}\n\nexport { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, spanIsSampled, spanTimeInputToSeconds, spanToJSON, spanToTraceContext, spanToTraceHeader };\n//# sourceMappingURL=spanUtils.js.map\n","import { uuid4, dateTimestampInSeconds, addExceptionMechanism, truncate, GLOBAL_OBJ, normalize } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getGlobalEventProcessors, notifyEventProcessors } from '../eventProcessors.js';\nimport { getGlobalScope, Scope } from '../scope.js';\nimport { mergeScopeData, applyScopeDataToEvent } from './applyScopeDataToEvent.js';\nimport { spanToJSON } from './spanUtils.js';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * Note: This also triggers callbacks for `addGlobalEventProcessor`, but not `beforeSend`.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n  options,\n  event,\n  hint,\n  scope,\n  client,\n  isolationScope,\n) {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n  const prepared = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\n  // If we have scope given to us, use it as the base for further modifications.\n  // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    addExceptionMechanism(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client && client.getEventProcessors ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Hub.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = getGlobalScope().getScopeData();\n\n  if (isolationScope) {\n    const isolationData = isolationScope.getScopeData();\n    mergeScopeData(data, isolationData);\n  }\n\n  if (finalScope) {\n    const finalScopeData = finalScope.getScopeData();\n    mergeScopeData(data, finalScopeData);\n  }\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  applyScopeDataToEvent(prepared, data);\n\n  // TODO (v8): Update this order to be: Global > Client > Scope\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // eslint-disable-next-line deprecation/deprecation\n    ...getGlobalEventProcessors(),\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\n\n/**\n *  Enhances event using the client configuration.\n *  It takes care of all \"static\" values like environment, release and `dist`,\n *  as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n  const { environment, release, dist, maxValueLength = 250 } = options;\n\n  if (!('environment' in event)) {\n    event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n  }\n\n  if (event.release === undefined && release !== undefined) {\n    event.release = release;\n  }\n\n  if (event.dist === undefined && dist !== undefined) {\n    event.dist = dist;\n  }\n\n  if (event.message) {\n    event.message = truncate(event.message, maxValueLength);\n  }\n\n  const exception = event.exception && event.exception.values && event.exception.values[0];\n  if (exception && exception.value) {\n    exception.value = truncate(exception.value, maxValueLength);\n  }\n\n  const request = event.request;\n  if (request && request.url) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n}\n\nconst debugIdStackParserCache = new WeakMap();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n  if (!debugIdMap) {\n    return;\n  }\n\n  let debugIdStackFramesCache;\n  const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n  if (cachedDebugIdStackFrameCache) {\n    debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n  } else {\n    debugIdStackFramesCache = new Map();\n    debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n  }\n\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = Object.keys(debugIdMap).reduce((acc, debugIdStackTrace) => {\n    let parsedStack;\n    const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n    if (cachedParsedStack) {\n      parsedStack = cachedParsedStack;\n    } else {\n      parsedStack = stackParser(debugIdStackTrace);\n      debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n    }\n\n    for (let i = parsedStack.length - 1; i >= 0; i--) {\n      const stackFrame = parsedStack[i];\n      if (stackFrame.filename) {\n        acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n        break;\n      }\n    }\n    return acc;\n  }, {});\n\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception.values.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace.frames.forEach(frame => {\n        if (frame.filename) {\n          frame.debug_id = filenameDebugIdMap[frame.filename];\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap = {};\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception.values.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace.frames.forEach(frame => {\n        if (frame.debug_id) {\n          if (frame.abs_path) {\n            filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n          } else if (frame.filename) {\n            filenameDebugIdMap[frame.filename] = frame.debug_id;\n          }\n          delete frame.debug_id;\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.keys(filenameDebugIdMap).forEach(filename => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id: filenameDebugIdMap[filename],\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n  if (!event) {\n    return null;\n  }\n\n  const normalized = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: normalize(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: normalize(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth),\n    }),\n  };\n\n  // event.contexts.trace stores information about a Transaction. Similarly,\n  // event.spans[] stores information about child Spans. Given that a\n  // Transaction is conceptually a Span, normalization should apply to both\n  // Transactions and Spans consistently.\n  // For now the decision is to skip normalization of Transactions and Spans,\n  // so this block overwrites the normalized event to add back the original\n  // Transaction information prior to normalization.\n  if (event.contexts && event.contexts.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      const data = spanToJSON(span).data;\n\n      if (data) {\n        // This is a bit weird, as we generally have `Span` instances here, but to be safe we do not assume so\n        // eslint-disable-next-line deprecation/deprecation\n        span.data = normalize(data, depth, maxBreadth);\n      }\n\n      return span;\n    });\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(scope, captureContext) {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n  hint,\n) {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(\n  hint,\n) {\n  return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'requestSession',\n  'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { logger, uuid4, timestampInSeconds, isThenable, GLOBAL_OBJ } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { getCurrentHub, runWithAsyncContext, getIsolationScope } from './hub.js';\nimport { makeSession, updateSession, closeSession } from './session.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureException(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  exception,\n  hint,\n) {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nfunction captureMessage(\n  message,\n  // eslint-disable-next-line deprecation/deprecation\n  captureContext,\n) {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param exception The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nfunction captureEvent(event, hint) {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n *\n * @deprecated Use getCurrentScope() directly.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction configureScope(callback) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().configureScope(callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction addBreadcrumb(breadcrumb, hint) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().addBreadcrumb(breadcrumb, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, deprecation/deprecation\nfunction setContext(name, context) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setExtras(extras) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setExtra(key, extra) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setTags(tags) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setTag(key, value) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setUser(user) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setUser(user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n *     pushScope();\n *     callback();\n *     popScope();\n */\n\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n  ...rest\n) {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n    if (!scope) {\n      // eslint-disable-next-line deprecation/deprecation\n      return hub.withScope(callback);\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    return hub.withScope(() => {\n      // eslint-disable-next-line deprecation/deprecation\n      hub.getStackTop().scope = scope ;\n      return callback(scope );\n    });\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return hub.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * @param callback The callback in which the passed isolation scope is active. (Note: In environments without async\n * context strategy, the currently active isolation scope may change within execution of the callback.)\n * @returns The same value that `callback` returns.\n */\nfunction withIsolationScope(callback) {\n  return runWithAsyncContext(() => {\n    return callback(getIsolationScope());\n  });\n}\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback.\n *\n * @param span Spans started in the context of the provided callback will be children of this span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nfunction withActiveSpan(span, callback) {\n  return withScope(scope => {\n    // eslint-disable-next-line deprecation/deprecation\n    scope.setSpan(span);\n    return callback(scope);\n  });\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\nfunction startTransaction(\n  context,\n  customSamplingContext,\n  // eslint-disable-next-line deprecation/deprecation\n) {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n  const scope = getCurrentScope();\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n  monitorSlug,\n  callback,\n  upsertMonitorConfig,\n) {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = timestampInSeconds();\n\n  function finishCheckIn(status) {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n  }\n\n  let maybePromiseResult;\n  try {\n    maybePromiseResult = callback();\n  } catch (e) {\n    finishCheckIn('error');\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishCheckIn('ok');\n      },\n      () => {\n        finishCheckIn('error');\n      },\n    );\n  } else {\n    finishCheckIn('ok');\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n  const client = getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n  const client = getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nfunction lastEventId() {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().lastEventId();\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getClient();\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n  return !!getClient();\n}\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getScope();\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nfunction startSession(context) {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n  // Will fetch userAgent if called from browser sdk\n  const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n  const session = makeSession({\n    release,\n    environment,\n    user: currentScope.getUser() || isolationScope.getUser(),\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession && currentSession.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n  const client = getClient();\n  // TODO (v8): Remove currentScope and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session && client && client.captureSession) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nfunction captureSession(end = false) {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n\nexport { addBreadcrumb, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, configureScope, endSession, flush, getClient, getCurrentScope, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, startTransaction, withActiveSpan, withIsolationScope, withMonitor, withScope };\n//# sourceMappingURL=exports.js.map\n","/**\n * Returns the root span of a given span.\n *\n * As long as we use `Transaction`s internally, the returned root span\n * will be a `Transaction` but be aware that this might change in the future.\n *\n * If the given span has no root span or transaction, `undefined` is returned.\n */\nfunction getRootSpan(span) {\n  // TODO (v8): Remove this check and just return span\n  // eslint-disable-next-line deprecation/deprecation\n  return span.transaction;\n}\n\nexport { getRootSpan };\n//# sourceMappingURL=getRootSpan.js.map\n","import { dropUndefinedKeys } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getClient, getCurrentScope } from '../exports.js';\nimport { getRootSpan } from '../utils/getRootSpan.js';\nimport { spanToJSON, spanIsSampled } from '../utils/spanUtils.js';\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nfunction getDynamicSamplingContextFromClient(\n  trace_id,\n  client,\n  scope,\n) {\n  const options = client.getOptions();\n\n  const { publicKey: public_key } = client.getDsn() || {};\n  // TODO(v8): Remove segment from User\n  // eslint-disable-next-line deprecation/deprecation\n  const { segment: user_segment } = (scope && scope.getUser()) || {};\n\n  const dsc = dropUndefinedKeys({\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    user_segment,\n    public_key,\n    trace_id,\n  }) ;\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\n/**\n * A Span with a frozen dynamic sampling context.\n */\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nfunction getDynamicSamplingContextFromSpan(span) {\n  const client = getClient();\n  if (!client) {\n    return {};\n  }\n\n  // passing emit=false here to only emit later once the DSC is actually populated\n  const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client, getCurrentScope());\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  const txn = getRootSpan(span) ;\n  if (!txn) {\n    return dsc;\n  }\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  // For now we need to avoid breaking users who directly created a txn with a DSC, where this field is still set.\n  // @see Transaction class constructor\n  const v7FrozenDsc = txn && txn._frozenDynamicSamplingContext;\n  if (v7FrozenDsc) {\n    return v7FrozenDsc;\n  }\n\n  // TODO (v8): Replace txn.metadata with txn.attributes[]\n  // We can't do this yet because attributes aren't always set yet.\n  // eslint-disable-next-line deprecation/deprecation\n  const { sampleRate: maybeSampleRate, source } = txn.metadata;\n  if (maybeSampleRate != null) {\n    dsc.sample_rate = `${maybeSampleRate}`;\n  }\n\n  // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n  const jsonSpan = spanToJSON(txn);\n\n  // after JSON conversion, txn.name becomes jsonSpan.description\n  if (source && source !== 'url') {\n    dsc.transaction = jsonSpan.description;\n  }\n\n  dsc.sampled = String(spanIsSampled(txn));\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\nexport { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { dropUndefinedKeys, arrayify } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { getRootSpan } from './getRootSpan.js';\nimport { spanToTraceContext, spanToJSON } from './spanUtils.js';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nfunction applyScopeDataToEvent(event, data) {\n  const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n  // Apply general data\n  applyDataToEvent(event, data);\n\n  // We want to set the trace context for normal events only if there isn't already\n  // a trace context on the event. There is a product feature in place where we link\n  // errors with transaction and it relies on that.\n  if (span) {\n    applySpanToEvent(event, span);\n  }\n\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nfunction mergeScopeData(data, mergeData) {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    sdkProcessingMetadata,\n    breadcrumbs,\n    fingerprint,\n    eventProcessors,\n    attachments,\n    propagationContext,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n    span,\n  } = mergeData;\n\n  mergeAndOverwriteScopeData(data, 'extra', extra);\n  mergeAndOverwriteScopeData(data, 'tags', tags);\n  mergeAndOverwriteScopeData(data, 'user', user);\n  mergeAndOverwriteScopeData(data, 'contexts', contexts);\n  mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n  if (level) {\n    data.level = level;\n  }\n\n  if (transactionName) {\n    // eslint-disable-next-line deprecation/deprecation\n    data.transactionName = transactionName;\n  }\n\n  if (span) {\n    data.span = span;\n  }\n\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nfunction mergeAndOverwriteScopeData\n\n(data, prop, mergeVal) {\n  if (mergeVal && Object.keys(mergeVal).length) {\n    // Clone object\n    data[prop] = { ...data[prop] };\n    for (const key in mergeVal) {\n      if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n        data[prop][key] = mergeVal[key];\n      }\n    }\n  }\n}\n\nfunction applyDataToEvent(event, data) {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n  } = data;\n\n  const cleanedExtra = dropUndefinedKeys(extra);\n  if (cleanedExtra && Object.keys(cleanedExtra).length) {\n    event.extra = { ...cleanedExtra, ...event.extra };\n  }\n\n  const cleanedTags = dropUndefinedKeys(tags);\n  if (cleanedTags && Object.keys(cleanedTags).length) {\n    event.tags = { ...cleanedTags, ...event.tags };\n  }\n\n  const cleanedUser = dropUndefinedKeys(user);\n  if (cleanedUser && Object.keys(cleanedUser).length) {\n    event.user = { ...cleanedUser, ...event.user };\n  }\n\n  const cleanedContexts = dropUndefinedKeys(contexts);\n  if (cleanedContexts && Object.keys(cleanedContexts).length) {\n    event.contexts = { ...cleanedContexts, ...event.contexts };\n  }\n\n  if (level) {\n    event.level = level;\n  }\n\n  if (transactionName) {\n    event.transaction = transactionName;\n  }\n}\n\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n  const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata,\n  };\n}\n\nfunction applySpanToEvent(event, span) {\n  event.contexts = { trace: spanToTraceContext(span), ...event.contexts };\n  const rootSpan = getRootSpan(span);\n  if (rootSpan) {\n    event.sdkProcessingMetadata = {\n      dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n      ...event.sdkProcessingMetadata,\n    };\n    const transactionName = spanToJSON(rootSpan).description;\n    if (transactionName) {\n      event.tags = { transaction: transactionName, ...event.tags };\n    }\n  }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event, fingerprint) {\n  // Make sure it's an array first and we actually have something in place\n  event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n  // If we have something on the scope, then merge it with event\n  if (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(fingerprint);\n  }\n\n  // If we have no data at all, remove empty array default\n  if (event.fingerprint && !event.fingerprint.length) {\n    delete event.fingerprint;\n  }\n}\n\nexport { applyScopeDataToEvent, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=applyScopeDataToEvent.js.map\n","import { isPlainObject, dateTimestampInSeconds, uuid4, logger } from '@sentry/utils';\nimport { getGlobalEventProcessors, notifyEventProcessors } from './eventProcessors.js';\nimport { updateSession } from './session.js';\nimport { applyScopeDataToEvent } from './utils/applyScopeDataToEvent.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * The global scope is kept in this module.\n * When accessing this via `getGlobalScope()` we'll make sure to set one if none is currently present.\n */\nlet globalScope;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nclass Scope  {\n  /** Flag if notifying is happening. */\n\n  /** Callback for client to receive scope changes. */\n\n  /** Callback list that will be called after {@link applyToEvent}. */\n\n  /** Array of breadcrumbs. */\n\n  /** User */\n\n  /** Tags */\n\n  /** Extra */\n\n  /** Contexts */\n\n  /** Attachments */\n\n  /** Propagation Context for distributed tracing */\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n\n  /** Fingerprint */\n\n  /** Severity */\n  // eslint-disable-next-line deprecation/deprecation\n\n  /**\n   * Transaction Name\n   */\n\n  /** Span */\n\n  /** Session */\n\n  /** Request Mode Session Status */\n\n  /** The client on this scope */\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n   constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = generatePropagationContext();\n  }\n\n  /**\n   * Inherit values from the parent scope.\n   * @deprecated Use `scope.clone()` and `new Scope()` instead.\n   */\n   static clone(scope) {\n    return scope ? scope.clone() : new Scope();\n  }\n\n  /**\n   * Clone this scope instance.\n   */\n   clone() {\n    const newScope = new Scope();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._span = this._span;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._requestSession = this._requestSession;\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n\n    return newScope;\n  }\n\n  /** Update the client on the scope. */\n   setClient(client) {\n    this._client = client;\n  }\n\n  /**\n   * Get the client assigned to this scope.\n   *\n   * It is generally recommended to use the global function `Sentry.getClient()` instead, unless you know what you are doing.\n   */\n   getClient() {\n    return this._client;\n  }\n\n  /**\n   * Add internal on change listener. Used for sub SDKs that need to store the scope.\n   * @hidden\n   */\n   addScopeListener(callback) {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addEventProcessor(callback) {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setUser(user) {\n    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      segment: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getUser() {\n    return this._user;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getRequestSession() {\n    return this._requestSession;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setRequestSession(requestSession) {\n    this._requestSession = requestSession;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setTags(tags) {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setTag(key, value) {\n    this._tags = { ...this._tags, [key]: value };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setExtras(extras) {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setExtra(key, extra) {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setFingerprint(fingerprint) {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setLevel(\n    // eslint-disable-next-line deprecation/deprecation\n    level,\n  ) {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the transaction name on the scope for future events.\n   */\n   setTransactionName(name) {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setContext(key, context) {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the Span on the scope.\n   * @param span Span\n   * @deprecated Instead of setting a span on a scope, use `startSpan()`/`startSpanManual()` instead.\n   */\n   setSpan(span) {\n    this._span = span;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Returns the `Span` if there is one.\n   * @deprecated Use `getActiveSpan()` instead.\n   */\n   getSpan() {\n    return this._span;\n  }\n\n  /**\n   * Returns the `Transaction` attached to the scope (if there is one).\n   * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n   */\n   getTransaction() {\n    // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n    // have a pointer to the currently-active transaction.\n    const span = this._span;\n    // Cannot replace with getRootSpan because getRootSpan returns a span, not a transaction\n    // Also, this method will be removed anyway.\n    // eslint-disable-next-line deprecation/deprecation\n    return span && span.transaction;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setSession(session) {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getSession() {\n    return this._session;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   update(captureContext) {\n    if (!captureContext) {\n      return this;\n    }\n\n    const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n    if (scopeToMerge instanceof Scope) {\n      const scopeData = scopeToMerge.getScopeData();\n\n      this._tags = { ...this._tags, ...scopeData.tags };\n      this._extra = { ...this._extra, ...scopeData.extra };\n      this._contexts = { ...this._contexts, ...scopeData.contexts };\n      if (scopeData.user && Object.keys(scopeData.user).length) {\n        this._user = scopeData.user;\n      }\n      if (scopeData.level) {\n        this._level = scopeData.level;\n      }\n      if (scopeData.fingerprint.length) {\n        this._fingerprint = scopeData.fingerprint;\n      }\n      if (scopeToMerge.getRequestSession()) {\n        this._requestSession = scopeToMerge.getRequestSession();\n      }\n      if (scopeData.propagationContext) {\n        this._propagationContext = scopeData.propagationContext;\n      }\n    } else if (isPlainObject(scopeToMerge)) {\n      const scopeContext = captureContext ;\n      this._tags = { ...this._tags, ...scopeContext.tags };\n      this._extra = { ...this._extra, ...scopeContext.extra };\n      this._contexts = { ...this._contexts, ...scopeContext.contexts };\n      if (scopeContext.user) {\n        this._user = scopeContext.user;\n      }\n      if (scopeContext.level) {\n        this._level = scopeContext.level;\n      }\n      if (scopeContext.fingerprint) {\n        this._fingerprint = scopeContext.fingerprint;\n      }\n      if (scopeContext.requestSession) {\n        this._requestSession = scopeContext.requestSession;\n      }\n      if (scopeContext.propagationContext) {\n        this._propagationContext = scopeContext.propagationContext;\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clear() {\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._requestSession = undefined;\n    this._span = undefined;\n    this._session = undefined;\n    this._notifyScopeListeners();\n    this._attachments = [];\n    this._propagationContext = generatePropagationContext();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n    };\n\n    const breadcrumbs = this._breadcrumbs;\n    breadcrumbs.push(mergedBreadcrumb);\n    this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getLastBreadcrumb() {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clearBreadcrumbs() {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addAttachment(attachment) {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `getScopeData()` instead.\n   */\n   getAttachments() {\n    const data = this.getScopeData();\n\n    return data.attachments;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clearAttachments() {\n    this._attachments = [];\n    return this;\n  }\n\n  /** @inheritDoc */\n   getScopeData() {\n    const {\n      _breadcrumbs,\n      _attachments,\n      _contexts,\n      _tags,\n      _extra,\n      _user,\n      _level,\n      _fingerprint,\n      _eventProcessors,\n      _propagationContext,\n      _sdkProcessingMetadata,\n      _transactionName,\n      _span,\n    } = this;\n\n    return {\n      breadcrumbs: _breadcrumbs,\n      attachments: _attachments,\n      contexts: _contexts,\n      tags: _tags,\n      extra: _extra,\n      user: _user,\n      level: _level,\n      fingerprint: _fingerprint || [],\n      eventProcessors: _eventProcessors,\n      propagationContext: _propagationContext,\n      sdkProcessingMetadata: _sdkProcessingMetadata,\n      transactionName: _transactionName,\n      span: _span,\n    };\n  }\n\n  /**\n   * Applies data from the scope to the event and runs all event processors on it.\n   *\n   * @param event Event\n   * @param hint Object containing additional information about the original exception, for use by the event processors.\n   * @hidden\n   * @deprecated Use `applyScopeDataToEvent()` directly\n   */\n   applyToEvent(\n    event,\n    hint = {},\n    additionalEventProcessors = [],\n  ) {\n    applyScopeDataToEvent(event, this.getScopeData());\n\n    // TODO (v8): Update this order to be: Global > Client > Scope\n    const eventProcessors = [\n      ...additionalEventProcessors,\n      // eslint-disable-next-line deprecation/deprecation\n      ...getGlobalEventProcessors(),\n      ...this._eventProcessors,\n    ];\n\n    return notifyEventProcessors(eventProcessors, event, hint);\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry\n   */\n   setSDKProcessingMetadata(newData) {\n    this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setPropagationContext(context) {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getPropagationContext() {\n    return this._propagationContext;\n  }\n\n  /**\n   * Capture an exception for this scope.\n   *\n   * @param exception The exception to capture.\n   * @param hint Optinal additional data to attach to the Sentry event.\n   * @returns the id of the captured Sentry event.\n   */\n   captureException(exception, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a message for this scope.\n   *\n   * @param message The message to capture.\n   * @param level An optional severity level to report the message with.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured message.\n   */\n   captureMessage(message, level, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = new Error(message);\n\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Captures a manually created event for this scope and sends it to Sentry.\n   *\n   * @param exception The event to capture.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured event.\n   */\n   captureEvent(event, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n   _notifyScopeListeners() {\n    // We need this check for this._notifyingListeners to be able to work on scope during updates\n    // If this check is not here we'll produce endless recursion when something is done with the scope\n    // during the callback.\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      this._scopeListeners.forEach(callback => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n  if (!globalScope) {\n    globalScope = new Scope();\n  }\n\n  return globalScope;\n}\n\n/**\n * This is mainly needed for tests.\n * DO NOT USE this, as this is an internal API and subject to change.\n * @hidden\n */\nfunction setGlobalScope(scope) {\n  globalScope = scope;\n}\n\nfunction generatePropagationContext() {\n  return {\n    traceId: uuid4(),\n    spanId: uuid4().substring(16),\n  };\n}\n\nexport { Scope, getGlobalScope, setGlobalScope };\n//# sourceMappingURL=scope.js.map\n","const SDK_VERSION = '7.120.4';\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { isThenable, uuid4, dateTimestampInSeconds, consoleSandbox, logger, GLOBAL_OBJ, getGlobalSingleton } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { Scope } from './scope.js';\nimport { closeSession, makeSession, updateSession } from './session.js';\nimport { SDK_VERSION } from './version.js';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nconst API_VERSION = parseFloat(SDK_VERSION);\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * @deprecated The `Hub` class will be removed in version 8 of the SDK in favour of `Scope` and `Client` objects.\n *\n * If you previously used the `Hub` class directly, replace it with `Scope` and `Client` objects. More information:\n * - [Multiple Sentry Instances](https://docs.sentry.io/platforms/javascript/best-practices/multiple-sentry-instances/)\n * - [Browser Extensions](https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/)\n *\n * Some of our APIs are typed with the Hub class instead of the interface (e.g. `getCurrentHub`). Most of them are deprecated\n * themselves and will also be removed in version 8. More information:\n * - [Migration Guide](https://github.com/getsentry/sentry-javascript/blob/develop/MIGRATION.md#deprecate-hub)\n */\n// eslint-disable-next-line deprecation/deprecation\nclass Hub  {\n  /** Is a {@link Layer}[] containing the client and scope */\n\n  /** Contains the last event id of a captured event.  */\n\n  /**\n   * Creates a new instance of the hub, will push one {@link Layer} into the\n   * internal stack on creation.\n   *\n   * @param client bound to the hub.\n   * @param scope bound to the hub.\n   * @param version number, higher number means higher priority.\n   *\n   * @deprecated Instantiation of Hub objects is deprecated and the constructor will be removed in version 8 of the SDK.\n   *\n   * If you are currently using the Hub for multi-client use like so:\n   *\n   * ```\n   * // OLD\n   * const hub = new Hub();\n   * hub.bindClient(client);\n   * makeMain(hub)\n   * ```\n   *\n   * instead initialize the client as follows:\n   *\n   * ```\n   * // NEW\n   * Sentry.withIsolationScope(() => {\n   *    Sentry.setCurrentClient(client);\n   *    client.init();\n   * });\n   * ```\n   *\n   * If you are using the Hub to capture events like so:\n   *\n   * ```\n   * // OLD\n   * const client = new Client();\n   * const hub = new Hub(client);\n   * hub.captureException()\n   * ```\n   *\n   * instead capture isolated events as follows:\n   *\n   * ```\n   * // NEW\n   * const client = new Client();\n   * const scope = new Scope();\n   * scope.setClient(client);\n   * scope.captureException();\n   * ```\n   */\n   constructor(\n    client,\n    scope,\n    isolationScope,\n      _version = API_VERSION,\n  ) {this._version = _version;\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n      assignedScope.setClient(client);\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n      assignedIsolationScope.setClient(client);\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    this._stack = [{ scope: assignedScope }];\n\n    if (client) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.bindClient(client);\n    }\n\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Checks if this hub's version is older than the given version.\n   *\n   * @param version A version number to compare to.\n   * @return True if the given version is newer; otherwise false.\n   *\n   * @deprecated This will be removed in v8.\n   */\n   isOlderThan(version) {\n    return this._version < version;\n  }\n\n  /**\n   * This binds the given client to the current scope.\n   * @param client An SDK client (client) instance.\n   *\n   * @deprecated Use `initAndBind()` directly, or `setCurrentClient()` and/or `client.init()` instead.\n   */\n   bindClient(client) {\n    // eslint-disable-next-line deprecation/deprecation\n    const top = this.getStackTop();\n    top.client = client;\n    top.scope.setClient(client);\n    // eslint-disable-next-line deprecation/deprecation\n    if (client && client.setupIntegrations) {\n      // eslint-disable-next-line deprecation/deprecation\n      client.setupIntegrations();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n   pushScope() {\n    // We want to clone the content of prev scope\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.getScope().clone();\n    // eslint-disable-next-line deprecation/deprecation\n    this.getStack().push({\n      // eslint-disable-next-line deprecation/deprecation\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n   popScope() {\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.getStack().length <= 1) return false;\n    // eslint-disable-next-line deprecation/deprecation\n    return !!this.getStack().pop();\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.withScope()` instead.\n   */\n   withScope(callback) {\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.pushScope();\n\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          return res;\n        },\n        e => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          throw e;\n        },\n      );\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    this.popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.getClient()` instead.\n   */\n   getClient() {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().client ;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   *\n   * @deprecated Use `Sentry.getCurrentScope()` instead.\n   */\n   getScope() {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * @deprecated Use `Sentry.getIsolationScope()` instead.\n   */\n   getIsolationScope() {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the scope stack for domains or the process.\n   * @deprecated This will be removed in v8.\n   */\n   getStack() {\n    return this._stack;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   * @deprecated This will be removed in v8.\n   */\n   getStackTop() {\n    return this._stack[this._stack.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureException()` instead.\n   */\n   captureException(exception, hint) {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error('Sentry syntheticException');\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureException(exception, {\n      originalException: exception,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use  `Sentry.captureMessage()` instead.\n   */\n   captureMessage(\n    message,\n    // eslint-disable-next-line deprecation/deprecation\n    level,\n    hint,\n  ) {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error(message);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureMessage(message, level, {\n      originalException: message,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureEvent()` instead.\n   */\n   captureEvent(event, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n    if (!event.type) {\n      this._lastEventId = eventId;\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureEvent(event, { ...hint, event_id: eventId });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated This will be removed in v8.\n   */\n   lastEventId() {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.addBreadcrumb()` instead.\n   */\n   addBreadcrumb(breadcrumb, hint) {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n\n    if (!client) return;\n\n    const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n      (client.getOptions && client.getOptions()) || {};\n\n    if (maxBreadcrumbs <= 0) return;\n\n    const timestamp = dateTimestampInSeconds();\n    const mergedBreadcrumb = { timestamp, ...breadcrumb };\n    const finalBreadcrumb = beforeBreadcrumb\n      ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n      : mergedBreadcrumb;\n\n    if (finalBreadcrumb === null) return;\n\n    if (client.emit) {\n      client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n    }\n\n    // TODO(v8): I know this comment doesn't make much sense because the hub will be deprecated but I still wanted to\n    // write it down. In theory, we would have to add the breadcrumbs to the isolation scope here, however, that would\n    // duplicate all of the breadcrumbs. There was the possibility of adding breadcrumbs to both, the isolation scope\n    // and the normal scope, and deduplicating it down the line in the event processing pipeline. However, that would\n    // have been very fragile, because the breadcrumb objects would have needed to keep their identity all throughout\n    // the event processing pipeline.\n    // In the new implementation, the top level `Sentry.addBreadcrumb()` should ONLY write to the isolation scope.\n\n    scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setUser()` instead.\n   */\n   setUser(user) {\n    // TODO(v8): The top level `Sentry.setUser()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setUser(user);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTags()` instead.\n   */\n   setTags(tags) {\n    // TODO(v8): The top level `Sentry.setTags()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTags(tags);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtras()` instead.\n   */\n   setExtras(extras) {\n    // TODO(v8): The top level `Sentry.setExtras()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtras(extras);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTag()` instead.\n   */\n   setTag(key, value) {\n    // TODO(v8): The top level `Sentry.setTag()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTag(key, value);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtra()` instead.\n   */\n   setExtra(key, extra) {\n    // TODO(v8): The top level `Sentry.setExtra()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtra(key, extra);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtra(key, extra);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setContext()` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n   setContext(name, context) {\n    // TODO(v8): The top level `Sentry.setContext()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setContext(name, context);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setContext(name, context);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `getScope()` directly.\n   */\n   configureScope(callback) {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line deprecation/deprecation\n   run(callback) {\n    // eslint-disable-next-line deprecation/deprecation\n    const oldHub = makeMain(this);\n    try {\n      callback(this);\n    } finally {\n      // eslint-disable-next-line deprecation/deprecation\n      makeMain(oldHub);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.getClient().getIntegrationByName()` instead.\n   */\n   getIntegration(integration) {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this.getClient();\n    if (!client) return null;\n    try {\n      // eslint-disable-next-line deprecation/deprecation\n      return client.getIntegration(integration);\n    } catch (_oO) {\n      DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n      return null;\n    }\n  }\n\n  /**\n   * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n   *\n   * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n   * new child span within the transaction or any span, call the respective `.startChild()` method.\n   *\n   * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n   *\n   * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n   * finished child spans will be sent to Sentry.\n   *\n   * @param context Properties of the new `Transaction`.\n   * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n   * default values). See {@link Options.tracesSampler}.\n   *\n   * @returns The transaction which was just started\n   *\n   * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n   */\n   startTransaction(context, customSamplingContext) {\n    const result = this._callExtensionMethod('startTransaction', context, customSamplingContext);\n\n    if (DEBUG_BUILD && !result) {\n      // eslint-disable-next-line deprecation/deprecation\n      const client = this.getClient();\n      if (!client) {\n        logger.warn(\n          \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n        );\n      } else {\n        logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n`);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `spanToTraceHeader()` instead.\n   */\n   traceHeaders() {\n    return this._callExtensionMethod('traceHeaders');\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use top level `captureSession` instead.\n   */\n   captureSession(endSession = false) {\n    // both send the update and pull the session from the scope\n    if (endSession) {\n      // eslint-disable-next-line deprecation/deprecation\n      return this.endSession();\n    }\n\n    // only send the update\n    this._sendSessionUpdate();\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `endSession` instead.\n   */\n   endSession() {\n    // eslint-disable-next-line deprecation/deprecation\n    const layer = this.getStackTop();\n    const scope = layer.scope;\n    const session = scope.getSession();\n    if (session) {\n      closeSession(session);\n    }\n    this._sendSessionUpdate();\n\n    // the session is over; take it off of the scope\n    scope.setSession();\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `startSession` instead.\n   */\n   startSession(context) {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n    const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n    // Will fetch userAgent if called from browser sdk\n    const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n    const session = makeSession({\n      release,\n      environment,\n      user: scope.getUser(),\n      ...(userAgent && { userAgent }),\n      ...context,\n    });\n\n    // End existing session if there's one\n    const currentSession = scope.getSession && scope.getSession();\n    if (currentSession && currentSession.status === 'ok') {\n      updateSession(currentSession, { status: 'exited' });\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.endSession();\n\n    // Afterwards we set the new session on the scope\n    scope.setSession(session);\n\n    return session;\n  }\n\n  /**\n   * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n   * when Tracing is used.\n   *\n   * @deprecated Use top-level `getClient().getOptions().sendDefaultPii` instead. This function\n   * only unnecessarily increased API surface but only wrapped accessing the option.\n   */\n   shouldSendDefaultPii() {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this.getClient();\n    const options = client && client.getOptions();\n    return Boolean(options && options.sendDefaultPii);\n  }\n\n  /**\n   * Sends the current Session on the scope\n   */\n   _sendSessionUpdate() {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n\n    const session = scope.getSession();\n    if (session && client && client.captureSession) {\n      client.captureSession(session);\n    }\n  }\n\n  /**\n   * Calls global extension method and binding current instance to the function call\n   */\n  // @ts-expect-error Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n   _callExtensionMethod(method, ...args) {\n    const carrier = getMainCarrier();\n    const sentry = carrier.__SENTRY__;\n    if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n      return sentry.extensions[method].apply(this, args);\n    }\n    DEBUG_BUILD && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n  }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n  GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n    extensions: {},\n    hub: undefined,\n  };\n  return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n *\n * @deprecated Use `setCurrentClient()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction makeMain(hub) {\n  const registry = getMainCarrier();\n  const oldHub = getHubFromCarrier(registry);\n  setHubOnCarrier(registry, hub);\n  return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n *\n * @deprecated Use the respective replacement method directly instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction getCurrentHub() {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    const hub = registry.__SENTRY__.acs.getCurrentHub();\n\n    if (hub) {\n      return hub;\n    }\n  }\n\n  // Return hub that lives on a global object\n  return getGlobalHub(registry);\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context,\n * meaning that it will remain stable for the same Hub.\n */\nfunction getIsolationScope() {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getIsolationScope();\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction getGlobalHub(registry = getMainCarrier()) {\n  // If there's no hub, or its an old API, assign a new one\n\n  if (\n    !hasHubOnCarrier(registry) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(registry).isOlderThan(API_VERSION)\n  ) {\n    // eslint-disable-next-line deprecation/deprecation\n    setHubOnCarrier(registry, new Hub());\n  }\n\n  // Return hub that lives on a global object\n  return getHubFromCarrier(registry);\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * If the carrier does not contain a hub, a new hub is created with the global hub client and scope.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction ensureHubOnCarrier(carrier, parent = getGlobalHub()) {\n  // If there's no hub on current domain, or it's an old API, assign a new one\n  if (\n    !hasHubOnCarrier(carrier) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(carrier).isOlderThan(API_VERSION)\n  ) {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = parent.getClient();\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = parent.getScope();\n    // eslint-disable-next-line deprecation/deprecation\n    const isolationScope = parent.getIsolationScope();\n    // eslint-disable-next-line deprecation/deprecation\n    setHubOnCarrier(carrier, new Hub(client, scope.clone(), isolationScope.clone()));\n  }\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  registry.__SENTRY__ = registry.__SENTRY__ || {};\n  registry.__SENTRY__.acs = strategy;\n}\n\n/**\n * Runs the supplied callback in its own async context. Async Context strategies are defined per SDK.\n *\n * @param callback The callback to run in its own async context\n * @param options Options to pass to the async context strategy\n * @returns The result of the callback\n */\nfunction runWithAsyncContext(callback, options = {}) {\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    return registry.__SENTRY__.acs.runWithAsyncContext(callback, options);\n  }\n\n  // if there was no strategy, fallback to just calling the callback\n  return callback();\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n  return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction getHubFromCarrier(carrier) {\n  // eslint-disable-next-line deprecation/deprecation\n  return getGlobalSingleton('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setHubOnCarrier(carrier, hub) {\n  if (!carrier) return false;\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n  __SENTRY__.hub = hub;\n  return true;\n}\n\nexport { API_VERSION, Hub, ensureHubOnCarrier, getCurrentHub, getHubFromCarrier, getIsolationScope, getMainCarrier, makeMain, runWithAsyncContext, setAsyncContextStrategy, setHubOnCarrier };\n//# sourceMappingURL=hub.js.map\n","import { getSdkMetadataForEnvelopeHeader, dsnToString, createEnvelope, createEventEnvelopeHeaders } from '@sentry/utils';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event, sdkInfo) {\n  if (!sdkInfo) {\n    return event;\n  }\n  event.sdk = event.sdk || {};\n  event.sdk.name = event.sdk.name || sdkInfo.name;\n  event.sdk.version = event.sdk.version || sdkInfo.version;\n  event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n  event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n  return event;\n}\n\n/** Creates an envelope from a Session */\nfunction createSessionEnvelope(\n  session,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const envelopeItem =\n    'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n  return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nfunction createEventEnvelope(\n  event,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n  /*\n    Note: Due to TS, event.type may be `replay_event`, theoretically.\n    In practice, we never call `createEventEnvelope` with `replay_event` type,\n    and we'd have to adjut a looot of types to make this work properly.\n    We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n    So the safe choice is to really guard against the replay_event type here.\n  */\n  const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n  enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete event.sdkProcessingMetadata;\n\n  const eventItem = [{ type: eventType }, event];\n  return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\nexport { createEventEnvelope, createSessionEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { makeDsn, dsnToString, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n  const port = dsn.port ? `:${dsn.port}` : '';\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn) {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn, sdkInfo) {\n  return urlEncode({\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    sentry_key: dsn.publicKey,\n    sentry_version: SENTRY_API_VERSION,\n    ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n  });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nfunction getEnvelopeEndpointWithUrlEncodedAuth(\n  dsn,\n  // TODO (v8): Remove `tunnelOrOptions` in favor of `options`, and use the substitute code below\n  // options: ClientOptions = {} as ClientOptions,\n  tunnelOrOptions = {} ,\n) {\n  // TODO (v8): Use this code instead\n  // const { tunnel, _metadata = {} } = options;\n  // return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, _metadata.sdk)}`;\n\n  const tunnel = typeof tunnelOrOptions === 'string' ? tunnelOrOptions : tunnelOrOptions.tunnel;\n  const sdkInfo =\n    typeof tunnelOrOptions === 'string' || !tunnelOrOptions._metadata ? undefined : tunnelOrOptions._metadata.sdk;\n\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nfunction getReportDialogEndpoint(\n  dsnLike,\n  dialogOptions\n\n,\n) {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'onClose') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] )}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { arrayify, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { addGlobalEventProcessor } from './eventProcessors.js';\nimport { getClient } from './exports.js';\nimport { getCurrentHub } from './hub.js';\n\nconst installedIntegrations = [];\n\n/** Map of integrations assigned to a client */\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations) {\n  const integrationsByName = {};\n\n  integrations.forEach(currentInstance => {\n    const { name } = currentInstance;\n\n    const existingInstance = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nfunction getIntegrationsToSetup(options) {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach(integration => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations;\n\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === 'function') {\n    integrations = arrayify(userIntegrations(defaultIntegrations));\n  } else {\n    integrations = defaultIntegrations;\n  }\n\n  const finalIntegrations = filterDuplicates(integrations);\n\n  // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n  // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n  // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n  // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n  const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n  if (debugIndex !== -1) {\n    const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n    finalIntegrations.push(debugInstance);\n  }\n\n  return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nfunction setupIntegrations(client, integrations) {\n  const integrationIndex = {};\n\n  integrations.forEach(integration => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nfunction afterSetupIntegrations(client, integrations) {\n  for (const integration of integrations) {\n    // guard against empty provided integrations\n    if (integration && integration.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\n\n/** Setup a single integration.  */\nfunction setupIntegration(client, integration, integrationIndex) {\n  if (integrationIndex[integration.name]) {\n    DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n\n  // `setupOnce` is only called the first time\n  if (installedIntegrations.indexOf(integration.name) === -1) {\n    // eslint-disable-next-line deprecation/deprecation\n    integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n    installedIntegrations.push(integration.name);\n  }\n\n  // `setup` is run for each client\n  if (integration.setup && typeof integration.setup === 'function') {\n    integration.setup(client);\n  }\n\n  if (client.on && typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) ;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (client.addEventProcessor && typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) ;\n\n    const processor = (event, hint) =>\n      callback(event, hint, client);\n    processor.id = integration.name;\n\n    client.addEventProcessor(processor);\n  }\n\n  DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current hub's client. */\nfunction addIntegration(integration) {\n  const client = getClient();\n\n  if (!client || !client.addIntegration) {\n    DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex(arr, callback) {\n  for (let i = 0; i < arr.length; i++) {\n    if (callback(arr[i]) === true) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\n/**\n * Convert a new integration function to the legacy class syntax.\n * In v8, we can remove this and instead export the integration functions directly.\n *\n * @deprecated This will be removed in v8!\n */\nfunction convertIntegrationFnToClass(\n  name,\n  fn,\n) {\n  const ConvertedIntegration = function ConvertedIntegration(...args) {\n    return fn(...args);\n  };\n  ConvertedIntegration.id = name;\n  return ConvertedIntegration ;\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nfunction defineIntegration(fn) {\n  return fn;\n}\n\nexport { addIntegration, afterSetupIntegrations, convertIntegrationFnToClass, defineIntegration, getIntegrationsToSetup, installedIntegrations, setupIntegration, setupIntegrations };\n//# sourceMappingURL=integration.js.map\n","import { dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Generate bucket key from metric properties.\n */\nfunction getBucketKey(\n  metricType,\n  name,\n  unit,\n  tags,\n) {\n  const stringifiedTags = Object.entries(dropUndefinedKeys(tags)).sort((a, b) => a[0].localeCompare(b[0]));\n  return `${metricType}${name}${unit}${stringifiedTags}`;\n}\n\n/* eslint-disable no-bitwise */\n/**\n * Simple hash function for strings.\n */\nfunction simpleHash(s) {\n  let rv = 0;\n  for (let i = 0; i < s.length; i++) {\n    const c = s.charCodeAt(i);\n    rv = (rv << 5) - rv + c;\n    rv &= rv;\n  }\n  return rv >>> 0;\n}\n/* eslint-enable no-bitwise */\n\n/**\n * Serialize metrics buckets into a string based on statsd format.\n *\n * Example of format:\n * metric.name@second:1:1.2|d|#a:value,b:anothervalue|T12345677\n * Segments:\n * name: metric.name\n * unit: second\n * value: [1, 1.2]\n * type of metric: d (distribution)\n * tags: { a: value, b: anothervalue }\n * timestamp: 12345677\n */\nfunction serializeMetricBuckets(metricBucketItems) {\n  let out = '';\n  for (const item of metricBucketItems) {\n    const tagEntries = Object.entries(item.tags);\n    const maybeTags = tagEntries.length > 0 ? `|#${tagEntries.map(([key, value]) => `${key}:${value}`).join(',')}` : '';\n    out += `${item.name}@${item.unit}:${item.metric}|${item.metricType}${maybeTags}|T${item.timestamp}\\n`;\n  }\n  return out;\n}\n\n/** Sanitizes units */\nfunction sanitizeUnit(unit) {\n  return unit.replace(/[^\\w]+/gi, '_');\n}\n\n/** Sanitizes metric keys */\nfunction sanitizeMetricKey(key) {\n  return key.replace(/[^\\w\\-.]+/gi, '_');\n}\n\nfunction sanitizeTagKey(key) {\n  return key.replace(/[^\\w\\-./]+/gi, '');\n}\n\nconst tagValueReplacements = [\n  ['\\n', '\\\\n'],\n  ['\\r', '\\\\r'],\n  ['\\t', '\\\\t'],\n  ['\\\\', '\\\\\\\\'],\n  ['|', '\\\\u{7c}'],\n  [',', '\\\\u{2c}'],\n];\n\nfunction getCharOrReplacement(input) {\n  for (const [search, replacement] of tagValueReplacements) {\n    if (input === search) {\n      return replacement;\n    }\n  }\n\n  return input;\n}\n\nfunction sanitizeTagValue(value) {\n  return [...value].reduce((acc, char) => acc + getCharOrReplacement(char), '');\n}\n\n/**\n * Sanitizes tags.\n */\nfunction sanitizeTags(unsanitizedTags) {\n  const tags = {};\n  for (const key in unsanitizedTags) {\n    if (Object.prototype.hasOwnProperty.call(unsanitizedTags, key)) {\n      const sanitizedKey = sanitizeTagKey(key);\n      tags[sanitizedKey] = sanitizeTagValue(String(unsanitizedTags[key]));\n    }\n  }\n  return tags;\n}\n\nexport { getBucketKey, sanitizeMetricKey, sanitizeTags, sanitizeUnit, serializeMetricBuckets, simpleHash };\n//# sourceMappingURL=utils.js.map\n","import { dsnToString, createEnvelope } from '@sentry/utils';\nimport { serializeMetricBuckets } from './utils.js';\n\n/**\n * Create envelope from a metric aggregate.\n */\nfunction createMetricEnvelope(\n  metricBucketItems,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const headers = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (metadata && metadata.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  const item = createMetricEnvelopeItem(metricBucketItems);\n  return createEnvelope(headers, [item]);\n}\n\nfunction createMetricEnvelopeItem(metricBucketItems) {\n  const payload = serializeMetricBuckets(metricBucketItems);\n  const metricHeaders = {\n    type: 'statsd',\n    length: payload.length,\n  };\n  return [metricHeaders, payload];\n}\n\nexport { createMetricEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { makeDsn, logger, checkOrSetAlreadyCaught, isParameterizedString, isPrimitive, resolvedSyncPromise, addItemToEnvelope, createAttachmentEnvelopeItem, SyncPromise, rejectedSyncPromise, SentryError, isThenable, isPlainObject } from '@sentry/utils';\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { getClient } from './exports.js';\nimport { getIsolationScope } from './hub.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { createMetricEnvelope } from './metrics/envelope.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nclass BaseClient {\n  /**\n   * A reference to a metrics aggregator\n   *\n   * @experimental Note this is alpha API. It may experience breaking changes in the future.\n   */\n\n  /** Options passed to the SDK. */\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n\n  /** Array of set up integrations. */\n\n  /** Indicates whether this client's integrations have been set up. */\n\n  /** Number of calls being processed */\n\n  /** Holds flushable  */\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n   constructor(options) {\n    this._options = options;\n    this._integrations = {};\n    this._integrationsInitialized = false;\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n    }\n\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n      this._transport = options.transport({\n        tunnel: this._options.tunnel,\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url,\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n   captureException(exception, hint, scope) {\n    // ensure we haven't captured this very object before\n    if (checkOrSetAlreadyCaught(exception)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId = hint && hint.event_id;\n\n    this._process(\n      this.eventFromException(exception, hint)\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureMessage(\n    message,\n    // eslint-disable-next-line deprecation/deprecation\n    level,\n    hint,\n    scope,\n  ) {\n    let eventId = hint && hint.event_id;\n\n    const eventMessage = isParameterizedString(message) ? message : String(message);\n\n    const promisedEvent = isPrimitive(message)\n      ? this.eventFromMessage(eventMessage, level, hint)\n      : this.eventFromException(message, hint);\n\n    this._process(\n      promisedEvent\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureEvent(event, hint, scope) {\n    // ensure we haven't captured this very object before\n    if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId = hint && hint.event_id;\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n\n    this._process(\n      this._captureEvent(event, hint, capturedSpanScope || scope).then(result => {\n        eventId = result;\n      }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureSession(session) {\n    if (!(typeof session.release === 'string')) {\n      DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n    } else {\n      this.sendSession(session);\n      // After sending, we set init false to indicate it's not the first occurrence\n      updateSession(session, { init: false });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getDsn() {\n    return this._dsn;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getOptions() {\n    return this._options;\n  }\n\n  /**\n   * @see SdkMetadata in @sentry/types\n   *\n   * @return The metadata of the SDK\n   */\n   getSdkMetadata() {\n    return this._options._metadata;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getTransport() {\n    return this._transport;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   flush(timeout) {\n    const transport = this._transport;\n    if (transport) {\n      if (this.metricsAggregator) {\n        this.metricsAggregator.flush();\n      }\n      return this._isClientDoneProcessing(timeout).then(clientFinished => {\n        return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n      });\n    } else {\n      return resolvedSyncPromise(true);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   close(timeout) {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      if (this.metricsAggregator) {\n        this.metricsAggregator.close();\n      }\n      return result;\n    });\n  }\n\n  /** Get all installed event processors. */\n   getEventProcessors() {\n    return this._eventProcessors;\n  }\n\n  /** @inheritDoc */\n   addEventProcessor(eventProcessor) {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /**\n   * This is an internal function to setup all integrations that should run on the client.\n   * @deprecated Use `client.init()` instead.\n   */\n   setupIntegrations(forceInitialize) {\n    if ((forceInitialize && !this._integrationsInitialized) || (this._isEnabled() && !this._integrationsInitialized)) {\n      this._setupIntegrations();\n    }\n  }\n\n  /** @inheritdoc */\n   init() {\n    if (this._isEnabled()) {\n      this._setupIntegrations();\n    }\n  }\n\n  /**\n   * Gets an installed integration by its `id`.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `id` was installed.\n   * @deprecated Use `getIntegrationByName()` instead.\n   */\n   getIntegrationById(integrationId) {\n    return this.getIntegrationByName(integrationId);\n  }\n\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n   getIntegrationByName(integrationName) {\n    return this._integrations[integrationName] ;\n  }\n\n  /**\n   * Returns the client's instance of the given integration class, it any.\n   * @deprecated Use `getIntegrationByName()` instead.\n   */\n   getIntegration(integration) {\n    try {\n      return (this._integrations[integration.id] ) || null;\n    } catch (_oO) {\n      DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addIntegration(integration) {\n    const isAlreadyInstalled = this._integrations[integration.name];\n\n    // This hook takes care of only installing if not already installed\n    setupIntegration(this, integration, this._integrations);\n    // Here we need to check manually to make sure to not run this multiple times\n    if (!isAlreadyInstalled) {\n      afterSetupIntegrations(this, [integration]);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   sendEvent(event, hint = {}) {\n    this.emit('beforeSendEvent', event, hint);\n\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n    for (const attachment of hint.attachments || []) {\n      env = addItemToEnvelope(\n        env,\n        createAttachmentEnvelopeItem(\n          attachment,\n          this._options.transportOptions && this._options.transportOptions.textEncoder,\n        ),\n      );\n    }\n\n    const promise = this._sendEnvelope(env);\n    if (promise) {\n      promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   sendSession(session) {\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(env);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   recordDroppedEvent(reason, category, eventOrCount) {\n    if (this._options.sendClientReports) {\n      // TODO v9: We do not need the `event` passed as third argument anymore, and can possibly remove this overload\n      // If event is passed as third argument, we assume this is a count of 1\n      const count = typeof eventOrCount === 'number' ? eventOrCount : 1;\n\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\n      const key = `${reason}:${category}`;\n      DEBUG_BUILD && logger.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n      this._outcomes[key] = (this._outcomes[key] || 0) + count;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureAggregateMetrics(metricBucketItems) {\n    DEBUG_BUILD && logger.log(`Flushing aggregated metrics, number of metrics: ${metricBucketItems.length}`);\n    const metricsEnvelope = createMetricEnvelope(\n      metricBucketItems,\n      this._dsn,\n      this._options._metadata,\n      this._options.tunnel,\n    );\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(metricsEnvelope);\n  }\n\n  // Keep on() & emit() signatures in sync with types' client.ts interface\n  /* eslint-disable @typescript-eslint/unified-signatures */\n\n  /** @inheritdoc */\n\n  /** @inheritdoc */\n   on(hook, callback) {\n    if (!this._hooks[hook]) {\n      this._hooks[hook] = [];\n    }\n\n    // @ts-expect-error We assue the types are correct\n    this._hooks[hook].push(callback);\n  }\n\n  /** @inheritdoc */\n\n  /** @inheritdoc */\n   emit(hook, ...rest) {\n    if (this._hooks[hook]) {\n      this._hooks[hook].forEach(callback => callback(...rest));\n    }\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\n\n  /** Setup integrations for this client. */\n   _setupIntegrations() {\n    const { integrations } = this._options;\n    this._integrations = setupIntegrations(this, integrations);\n    afterSetupIntegrations(this, integrations);\n\n    // TODO v8: We don't need this flag anymore\n    this._integrationsInitialized = true;\n  }\n\n  /** Updates existing session based on the provided event */\n   _updateSessionFromEvent(session, event) {\n    let crashed = false;\n    let errored = false;\n    const exceptions = event.exception && event.exception.values;\n\n    if (exceptions) {\n      errored = true;\n\n      for (const ex of exceptions) {\n        const mechanism = ex.mechanism;\n        if (mechanism && mechanism.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\n  }\n\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n   _isClientDoneProcessing(timeout) {\n    return new SyncPromise(resolve => {\n      let ticked = 0;\n      const tick = 1;\n\n      const interval = setInterval(() => {\n        if (this._numProcessing == 0) {\n          clearInterval(interval);\n          resolve(true);\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            clearInterval(interval);\n            resolve(false);\n          }\n        }\n      }, tick);\n    });\n  }\n\n  /** Determines whether this SDK is enabled and a transport is present. */\n   _isEnabled() {\n    return this.getOptions().enabled !== false && this._transport !== undefined;\n  }\n\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n   _prepareEvent(\n    event,\n    hint,\n    scope,\n    isolationScope = getIsolationScope(),\n  ) {\n    const options = this.getOptions();\n    const integrations = Object.keys(this._integrations);\n    if (!hint.integrations && integrations.length > 0) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    return prepareEvent(options, event, hint, scope, this, isolationScope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      const propagationContext = {\n        ...isolationScope.getPropagationContext(),\n        ...(scope ? scope.getPropagationContext() : undefined),\n      };\n\n      const trace = evt.contexts && evt.contexts.trace;\n      if (!trace && propagationContext) {\n        const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext;\n        evt.contexts = {\n          trace: {\n            trace_id,\n            span_id: spanId,\n            parent_span_id: parentSpanId,\n          },\n          ...evt.contexts,\n        };\n\n        const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this, scope);\n\n        evt.sdkProcessingMetadata = {\n          dynamicSamplingContext,\n          ...evt.sdkProcessingMetadata,\n        };\n      }\n      return evt;\n    });\n  }\n\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n   _captureEvent(event, hint = {}, scope) {\n    return this._processEvent(event, hint, scope).then(\n      finalEvent => {\n        return finalEvent.event_id;\n      },\n      reason => {\n        if (DEBUG_BUILD) {\n          // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n          // control flow, log just the message (no stack) as a log-level log.\n          const sentryError = reason ;\n          if (sentryError.logLevel === 'log') {\n            logger.log(sentryError.message);\n          } else {\n            logger.warn(sentryError);\n          }\n        }\n        return undefined;\n      },\n    );\n  }\n\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n   _processEvent(event, hint, scope) {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || 'error';\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    if (isError && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n      this.recordDroppedEvent('sample_rate', 'error', event);\n      return rejectedSyncPromise(\n        new SentryError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n          'log',\n        ),\n      );\n    }\n\n    const dataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n    return this._prepareEvent(event, hint, scope, capturedSpanIsolationScope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory, event);\n          throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n        }\n\n        const isInternalException = hint.data && (hint.data ).__sentry__ === true;\n        if (isInternalException) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory, event);\n          if (isTransaction) {\n            const spans = event.spans || [];\n            // the transaction itself counts as one span, plus all the child spans that are added\n            const spanCount = 1 + spans.length;\n            this.recordDroppedEvent('before_send', 'span', spanCount);\n          }\n          throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n        }\n\n        const session = scope && scope.getSession();\n        if (!isTransaction && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        if (isTransaction) {\n          const spanCountBefore =\n            (processedEvent.sdkProcessingMetadata && processedEvent.sdkProcessingMetadata.spanCountBeforeProcessing) ||\n            0;\n          const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n          const droppedSpanCount = spanCountBefore - spanCountAfter;\n          if (droppedSpanCount > 0) {\n            this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n          }\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\n        const transactionInfo = processedEvent.transaction_info;\n        if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n          const source = 'custom';\n          processedEvent.transaction_info = {\n            ...transactionInfo,\n            source,\n          };\n        }\n\n        this.sendEvent(processedEvent, hint);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (reason instanceof SentryError) {\n          throw reason;\n        }\n\n        this.captureException(reason, {\n          data: {\n            __sentry__: true,\n          },\n          originalException: reason,\n        });\n        throw new SentryError(\n          `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n        );\n      });\n  }\n\n  /**\n   * Occupies the client with processing and event\n   */\n   _process(promise) {\n    this._numProcessing++;\n    void promise.then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n   _sendEnvelope(envelope) {\n    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\n      return this._transport.send(envelope).then(null, reason => {\n        DEBUG_BUILD && logger.error('Error while sending event:', reason);\n      });\n    } else {\n      DEBUG_BUILD && logger.error('Transport disabled');\n    }\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n   _clearOutcomes() {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.keys(outcomes).map(key => {\n      const [reason, category] = key.split(':') ;\n      return {\n        reason,\n        category,\n        quantity: outcomes[key],\n      };\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult,\n  beforeSendLabel,\n) {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!isPlainObject(event) && event !== null) {\n          throw new SentryError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw new SentryError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  options,\n  event,\n  hint,\n) {\n  const { beforeSend, beforeSendTransaction } = options;\n\n  if (isErrorEvent(event) && beforeSend) {\n    return beforeSend(event, hint);\n  }\n\n  if (isTransactionEvent(event) && beforeSendTransaction) {\n    if (event.spans) {\n      // We store the # of spans before processing in SDK metadata,\n      // so we can compare it afterwards to determine how many spans were dropped\n      const spanCountBefore = event.spans.length;\n      event.sdkProcessingMetadata = {\n        ...event.sdkProcessingMetadata,\n        spanCountBeforeProcessing: spanCountBefore,\n      };\n    }\n    return beforeSendTransaction(event, hint);\n  }\n\n  return event;\n}\n\nfunction isErrorEvent(event) {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event) {\n  return event.type === 'transaction';\n}\n\n/**\n * Add an event processor to the current client.\n * This event processor will run for all events processed by this client.\n */\nfunction addEventProcessor(callback) {\n  const client = getClient();\n\n  if (!client || !client.addEventProcessor) {\n    return;\n  }\n\n  client.addEventProcessor(callback);\n}\n\nexport { BaseClient, addEventProcessor };\n//# sourceMappingURL=baseclient.js.map\n","import { logger, consoleSandbox } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { getCurrentScope } from './exports.js';\nimport { getCurrentHub } from './hub.js';\n\n/** A class object that can instantiate Client objects. */\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nfunction initAndBind(\n  clientClass,\n  options,\n) {\n  if (options.debug === true) {\n    if (DEBUG_BUILD) {\n      logger.enable();\n    } else {\n      // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n      consoleSandbox(() => {\n        // eslint-disable-next-line no-console\n        console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n      });\n    }\n  }\n  const scope = getCurrentScope();\n  scope.update(options.initialScope);\n\n  const client = new clientClass(options);\n  setCurrentClient(client);\n  initializeClient(client);\n}\n\n/**\n * Make the given client the current client.\n */\nfunction setCurrentClient(client) {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  // eslint-disable-next-line deprecation/deprecation\n  const top = hub.getStackTop();\n  top.client = client;\n  top.scope.setClient(client);\n}\n\n/**\n * Initialize the client for the current scope.\n * Make sure to call this after `setCurrentClient()`.\n */\nfunction initializeClient(client) {\n  if (client.init) {\n    client.init();\n    // TODO v8: Remove this fallback\n    // eslint-disable-next-line deprecation/deprecation\n  } else if (client.setupIntegrations) {\n    // eslint-disable-next-line deprecation/deprecation\n    client.setupIntegrations();\n  }\n}\n\nexport { initAndBind, setCurrentClient };\n//# sourceMappingURL=sdk.js.map\n","import { makePromiseBuffer, forEachEnvelopeItem, envelopeItemTypeToDataCategory, isRateLimited, resolvedSyncPromise, createEnvelope, SentryError, logger, serializeEnvelope, updateRateLimits } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nfunction createTransport(\n  options,\n  makeRequest,\n  buffer = makePromiseBuffer(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n) {\n  let rateLimits = {};\n  const flush = (timeout) => buffer.drain(timeout);\n\n  function send(envelope) {\n    const filteredEnvelopeItems = [];\n\n    // Drop rate limited items from envelope\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const dataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, dataCategory)) {\n        const event = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return resolvedSyncPromise();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems );\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason) => {\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        const event = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n      });\n    };\n\n    const requestTask = () =>\n      makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).then(\n        response => {\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n            DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\n\n          rateLimits = updateRateLimits(rateLimits, response);\n          return response;\n        },\n        error => {\n          recordEnvelopeLoss('network_error');\n          throw error;\n        },\n      );\n\n    return buffer.add(requestTask).then(\n      result => result,\n      error => {\n        if (error instanceof SentryError) {\n          DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n          recordEnvelopeLoss('queue_overflow');\n          return resolvedSyncPromise();\n        } else {\n          throw error;\n        }\n      },\n    );\n  }\n\n  // We use this to identifify if the transport is the base transport\n  // TODO (v8): Remove this again as we'll no longer need it\n  send.__sentry__baseTransport__ = true;\n\n  return {\n    send,\n    flush,\n  };\n}\n\nfunction getEventForEnvelopeItem(item, type) {\n  if (type !== 'event' && type !== 'transaction') {\n    return undefined;\n  }\n\n  return Array.isArray(item) ? (item )[1] : undefined;\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","import { SDK_VERSION } from '../version.js';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nfunction applySdkMetadata(options, name, names = [name], source = 'npm') {\n  const metadata = options._metadata || {};\n\n  if (!metadata.sdk) {\n    metadata.sdk = {\n      name: `sentry.javascript.${name}`,\n      packages: names.map(name => ({\n        name: `${source}:@sentry/${name}`,\n        version: SDK_VERSION,\n      })),\n      version: SDK_VERSION,\n    };\n  }\n\n  options._metadata = metadata;\n}\n\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","import { logger, getEventDescription, stringMatchesSomePattern } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration, convertIntegrationFnToClass } from '../integration.js';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/,\n  /^Cannot redefine property: googletag$/,\n];\n\nconst DEFAULT_IGNORE_TRANSACTIONS = [\n  /^.*\\/healthcheck$/,\n  /^.*\\/healthy$/,\n  /^.*\\/live$/,\n  /^.*\\/ready$/,\n  /^.*\\/heartbeat$/,\n  /^.*\\/health$/,\n  /^.*\\/healthz$/,\n];\n\n/** Options for the InboundFilters integration */\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event, _hint, client) {\n      const clientOptions = client.getOptions();\n      const mergedOptions = _mergeOptions(options, clientOptions);\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    },\n  };\n}) ;\n\nconst inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\n/**\n * Inbound filters configurable by the user.\n * @deprecated Use `inboundFiltersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst InboundFilters = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  inboundFiltersIntegration,\n)\n\n;\n\nfunction _mergeOptions(\n  internalOptions = {},\n  clientOptions = {},\n) {\n  return {\n    allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n    denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n    ignoreErrors: [\n      ...(internalOptions.ignoreErrors || []),\n      ...(clientOptions.ignoreErrors || []),\n      ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n    ],\n    ignoreTransactions: [\n      ...(internalOptions.ignoreTransactions || []),\n      ...(clientOptions.ignoreTransactions || []),\n      ...(internalOptions.disableTransactionDefaults ? [] : DEFAULT_IGNORE_TRANSACTIONS),\n    ],\n    ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n  };\n}\n\nfunction _shouldDropEvent(event, options) {\n  if (options.ignoreInternal && _isSentryError(event)) {\n    DEBUG_BUILD &&\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n    return true;\n  }\n  if (_isIgnoredError(event, options.ignoreErrors)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isDeniedUrl(event, options.denyUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  if (!_isAllowedUrl(event, options.allowUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  return false;\n}\n\nfunction _isIgnoredError(event, ignoreErrors) {\n  // If event.type, this is not an error\n  if (event.type || !ignoreErrors || !ignoreErrors.length) {\n    return false;\n  }\n\n  return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n  if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event, denyUrls) {\n  // TODO: Use Glob instead?\n  if (!denyUrls || !denyUrls.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event, allowUrls) {\n  // TODO: Use Glob instead?\n  if (!allowUrls || !allowUrls.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event) {\n  const possibleMessages = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  let lastException;\n  try {\n    // @ts-expect-error Try catching to save bundle size\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    lastException = event.exception.values[event.exception.values.length - 1];\n  } catch (e) {\n    // try catching to save bundle size checking existence of variables\n  }\n\n  if (lastException) {\n    if (lastException.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  }\n\n  if (DEBUG_BUILD && possibleMessages.length === 0) {\n    logger.error(`Could not extract message for event ${getEventDescription(event)}`);\n  }\n\n  return possibleMessages;\n}\n\nfunction _isSentryError(event) {\n  try {\n    // @ts-expect-error can't be a sentry error if undefined\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return event.exception.values[0].type === 'SentryError';\n  } catch (e) {\n    // ignore\n  }\n  return false;\n}\n\nfunction _getLastValidUrl(frames = []) {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event) {\n  try {\n    let frames;\n    try {\n      // @ts-expect-error we only care about frames if the whole thing here is defined\n      frames = event.exception.values[0].stacktrace.frames;\n    } catch (e) {\n      // ignore\n    }\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch (oO) {\n    DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\n\nexport { InboundFilters, inboundFiltersIntegration };\n//# sourceMappingURL=inboundfilters.js.map\n","import { getOriginalFunction } from '@sentry/utils';\nimport { getClient } from '../exports.js';\nimport { defineIntegration, convertIntegrationFnToClass } from '../integration.js';\n\nlet originalFunctionToString;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      originalFunctionToString = Function.prototype.toString;\n\n      // intrinsics (like Function.prototype) might be immutable in some environments\n      // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        Function.prototype.toString = function ( ...args) {\n          const originalFunction = getOriginalFunction(this);\n          const context =\n            SETUP_CLIENTS.has(getClient() ) && originalFunction !== undefined ? originalFunction : this;\n          return originalFunctionToString.apply(context, args);\n        };\n      } catch (e) {\n        // ignore errors here, just don't patch this\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) ;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n *   integrations: [\n *     functionToStringIntegration(),\n *   ],\n * });\n * ```\n */\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * @deprecated Use `functionToStringIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst FunctionToString = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  functionToStringIntegration,\n) ;\n\n// eslint-disable-next-line deprecation/deprecation\n\nexport { FunctionToString, functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","import '@sentry-internal/tracing';\nimport { withScope, captureException } from '@sentry/core';\nimport { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, addExceptionTypeValue, addExceptionMechanism } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n  // onerror should trigger before setTimeout\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n  fn,\n  options\n\n = {},\n  before,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n  // for future readers what this does is wrap a function and then create\n  // a bi-directional wrapping between them.\n  //\n  // example: wrapped = wrap(original);\n  //  original.__sentry_wrapped__ -> wrapped\n  //  wrapped.__sentry_original__ -> original\n\n  if (typeof fn !== 'function') {\n    return fn;\n  }\n\n  try {\n    // if we're dealing with a function that was previously wrapped, return\n    // the original wrapper.\n    const wrapper = fn.__sentry_wrapped__;\n    if (wrapper) {\n      if (typeof wrapper === 'function') {\n        return wrapper;\n      } else {\n        // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n        // that something messed with it. In that case we want to return the originally passed function.\n        return fn;\n      }\n    }\n\n    // We don't wanna wrap it twice\n    if (getOriginalFunction(fn)) {\n      return fn;\n    }\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    // Bail on wrapping and return the function as-is (defers to window.onerror).\n    return fn;\n  }\n\n  /* eslint-disable prefer-rest-params */\n  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n  const sentryWrapped = function () {\n    const args = Array.prototype.slice.call(arguments);\n\n    try {\n      if (before && typeof before === 'function') {\n        before.apply(this, arguments);\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      const wrappedArguments = args.map((arg) => wrap(arg, options));\n\n      // Attempt to invoke user-land function\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n      //       means the sentry.javascript SDK caught an error invoking your application code. This\n      //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n\n      withScope(scope => {\n        scope.addEventProcessor(event => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, undefined, undefined);\n            addExceptionMechanism(event, options.mechanism);\n          }\n\n          event.extra = {\n            ...event.extra,\n            arguments: args,\n          };\n\n          return event;\n        });\n\n        captureException(ex);\n      });\n\n      throw ex;\n    }\n  };\n  /* eslint-enable prefer-rest-params */\n\n  // Accessing some objects may throw\n  // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch (_oO) {} // eslint-disable-line no-empty\n\n  // Signal that this function has been wrapped/filled already\n  // for both debugging and to prevent it to being wrapped/filled twice\n  markFunctionWrapped(sentryWrapped, fn);\n\n  addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') ;\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get() {\n          return fn.name;\n        },\n      });\n    }\n    // eslint-disable-next-line no-empty\n  } catch (_oO) {}\n\n  return sentryWrapped;\n}\n\nexport { WINDOW, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { getClient } from '@sentry/core';\nimport { addExceptionMechanism, resolvedSyncPromise, isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, isParameterizedString, normalizeToSize, extractExceptionKeysForMessage } from '@sentry/utils';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\n  // Get the frames first since Opera can lose the stack if we touch anything else first\n  const frames = parseStackFrames(stackParser, ex);\n\n  const exception = {\n    type: ex && ex.name,\n    value: extractMessage(ex),\n  };\n\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  if (exception.type === undefined && exception.value === '') {\n    exception.value = 'Unrecoverable error caught';\n  }\n\n  return exception;\n}\n\n/**\n * @hidden\n */\nfunction eventFromPlainObject(\n  stackParser,\n  exception,\n  syntheticException,\n  isUnhandledRejection,\n) {\n  const client = getClient();\n  const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n          value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n        },\n      ],\n    },\n    extra: {\n      __serialized__: normalizeToSize(exception, normalizeDepth),\n    },\n  };\n\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      // event.exception.values[0] has been set above\n      (event.exception ).values[0].stacktrace = { frames };\n    }\n  }\n\n  return event;\n}\n\n/**\n * @hidden\n */\nfunction eventFromError(stackParser, ex) {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n  stackParser,\n  ex,\n) {\n  // Access and store the stacktrace property before doing ANYTHING\n  // else to it because Opera is not very good at providing it\n  // reliably in other circumstances.\n  const stacktrace = ex.stacktrace || ex.stack || '';\n\n  const popSize = getPopSize(ex);\n\n  try {\n    return stackParser(stacktrace, popSize);\n  } catch (e) {\n    // no-empty\n  }\n\n  return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex) {\n  if (ex) {\n    if (typeof ex.framesToPop === 'number') {\n      return ex.framesToPop;\n    }\n\n    if (reactMinifiedRegexp.test(ex.message)) {\n      return 1;\n    }\n  }\n\n  return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex) {\n  const message = ex && ex.message;\n  if (!message) {\n    return 'No error message';\n  }\n  if (message.error && typeof message.error.message === 'string') {\n    return message.error.message;\n  }\n  return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nfunction eventFromException(\n  stackParser,\n  exception,\n  hint,\n  attachStacktrace,\n) {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n  event.level = 'error';\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nfunction eventFromMessage(\n  stackParser,\n  message,\n  // eslint-disable-next-line deprecation/deprecation\n  level = 'info',\n  hint,\n  attachStacktrace,\n) {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nfunction eventFromUnknownInput(\n  stackParser,\n  exception,\n  syntheticException,\n  attachStacktrace,\n  isUnhandledRejection,\n) {\n  let event;\n\n  if (isErrorEvent(exception ) && (exception ).error) {\n    // If it is an ErrorEvent with `error` property, extract it to get actual Error\n    const errorEvent = exception ;\n    return eventFromError(stackParser, errorEvent.error );\n  }\n\n  // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n  // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n  // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n  //\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n  // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n  if (isDOMError(exception) || isDOMException(exception )) {\n    const domException = exception ;\n\n    if ('stack' in (exception )) {\n      event = eventFromError(stackParser, exception );\n    } else {\n      const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      addExceptionTypeValue(event, message);\n    }\n    if ('code' in domException) {\n      // eslint-disable-next-line deprecation/deprecation\n      event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n    }\n\n    return event;\n  }\n  if (isError(exception)) {\n    // we have a real Error object, do nothing\n    return eventFromError(stackParser, exception);\n  }\n  if (isPlainObject(exception) || isEvent(exception)) {\n    // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n    // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n    // group on any key/value change.\n    const objectException = exception ;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    addExceptionMechanism(event, {\n      synthetic: true,\n    });\n    return event;\n  }\n\n  // If none of previous checks were valid, then it means that it's not:\n  // - an instance of DOMError\n  // - an instance of DOMException\n  // - an instance of Event\n  // - an instance of Error\n  // - a valid ErrorEvent (one with an error property)\n  // - a plain Object\n  //\n  // So bail out and capture it as a simple message:\n  event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);\n  addExceptionTypeValue(event, `${exception}`, undefined);\n  addExceptionMechanism(event, {\n    synthetic: true,\n  });\n\n  return event;\n}\n\n/**\n * @hidden\n */\nfunction eventFromString(\n  stackParser,\n  message,\n  syntheticException,\n  attachStacktrace,\n) {\n  const event = {};\n\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: message, stacktrace: { frames } }],\n      };\n    }\n  }\n\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n  exception,\n  { isUnhandledRejection },\n) {\n  const keys = extractExceptionKeysForMessage(exception);\n  const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n\n  if (isEvent(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj) {\n  try {\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch (e) {\n    // ignore errors here\n  }\n}\n\nexport { eventFromError, eventFromException, eventFromMessage, eventFromPlainObject, eventFromString, eventFromUnknownInput, exceptionFromError, parseStackFrames };\n//# sourceMappingURL=eventbuilder.js.map\n","import { dsnToString, createEnvelope } from '@sentry/utils';\n\n/**\n * Creates an envelope from a user feedback.\n */\nfunction createUserFeedbackEnvelope(\n  feedback,\n  {\n    metadata,\n    tunnel,\n    dsn,\n  }\n\n,\n) {\n  const headers = {\n    event_id: feedback.event_id,\n    sent_at: new Date().toISOString(),\n    ...(metadata &&\n      metadata.sdk && {\n        sdk: {\n          name: metadata.sdk.name,\n          version: metadata.sdk.version,\n        },\n      }),\n    ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n  };\n  const item = createUserFeedbackEnvelopeItem(feedback);\n\n  return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback) {\n  const feedbackHeaders = {\n    type: 'user_report',\n  };\n  return [feedbackHeaders, feedback];\n}\n\nexport { createUserFeedbackEnvelope };\n//# sourceMappingURL=userfeedback.js.map\n","import { BaseClient, applySdkMetadata } from '@sentry/core';\nimport { getSDKSource, logger, createClientReportEnvelope, dsnToString } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\nimport { createUserFeedbackEnvelope } from './userfeedback.js';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends BaseClient {\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n   constructor(options) {\n    const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n    applySdkMetadata(options, 'browser', ['browser'], sdkSource);\n\n    super(options);\n\n    if (options.sendClientReports && WINDOW.document) {\n      WINDOW.document.addEventListener('visibilitychange', () => {\n        if (WINDOW.document.visibilityState === 'hidden') {\n          this._flushOutcomes();\n        }\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromException(exception, hint) {\n    return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromMessage(\n    message,\n    // eslint-disable-next-line deprecation/deprecation\n    level = 'info',\n    hint,\n  ) {\n    return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * Sends user feedback to Sentry.\n   */\n   captureUserFeedback(feedback) {\n    if (!this._isEnabled()) {\n      DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n      return;\n    }\n\n    const envelope = createUserFeedbackEnvelope(feedback, {\n      metadata: this.getSdkMetadata(),\n      dsn: this.getDsn(),\n      tunnel: this.getOptions().tunnel,\n    });\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   _prepareEvent(event, hint, scope) {\n    event.platform = event.platform || 'javascript';\n    return super._prepareEvent(event, hint, scope);\n  }\n\n  /**\n   * Sends client reports as an envelope.\n   */\n   _flushOutcomes() {\n    const outcomes = this._clearOutcomes();\n\n    if (outcomes.length === 0) {\n      DEBUG_BUILD && logger.log('No outcomes to send');\n      return;\n    }\n\n    // This is really the only place where we want to check for a DSN and only send outcomes then\n    if (!this._dsn) {\n      DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n  }\n}\n\nexport { BrowserClient };\n//# sourceMappingURL=client.js.map\n","import { isNativeFetch, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nlet cachedFetchImpl = undefined;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n *   const p = f.apply(this, arguments);\n *\n *   p.then(function() {\n *     console.log('hi.');\n *   });\n *\n *   return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome:  Failed to fetch\n * Edge:    Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari:  resource blocked by content blocker\n */\nfunction getNativeFetchImplementation() {\n  if (cachedFetchImpl) {\n    return cachedFetchImpl;\n  }\n\n  /* eslint-disable @typescript-eslint/unbound-method */\n\n  // Fast path to avoid DOM I/O\n  if (isNativeFetch(WINDOW.fetch)) {\n    return (cachedFetchImpl = WINDOW.fetch.bind(WINDOW));\n  }\n\n  const document = WINDOW.document;\n  let fetchImpl = WINDOW.fetch;\n  // eslint-disable-next-line deprecation/deprecation\n  if (document && typeof document.createElement === 'function') {\n    try {\n      const sandbox = document.createElement('iframe');\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow.fetch) {\n        fetchImpl = contentWindow.fetch;\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      DEBUG_BUILD && logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n    }\n  }\n\n  return (cachedFetchImpl = fetchImpl.bind(WINDOW));\n  /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/** Clears cached fetch impl */\nfunction clearCachedFetchImplementation() {\n  cachedFetchImpl = undefined;\n}\n\nexport { clearCachedFetchImplementation, getNativeFetchImplementation };\n//# sourceMappingURL=utils.js.map\n","import { createTransport } from '@sentry/core';\nimport { rejectedSyncPromise } from '@sentry/utils';\nimport { getNativeFetchImplementation, clearCachedFetchImplementation } from './utils.js';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nfunction makeFetchTransport(\n  options,\n  nativeFetch = getNativeFetchImplementation(),\n) {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n\n  function makeRequest(request) {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n\n    const requestOptions = {\n      body: request.body,\n      method: 'POST',\n      referrerPolicy: 'origin',\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 60000 && pendingCount < 15,\n      ...options.fetchOptions,\n    };\n\n    try {\n      return nativeFetch(options.url, requestOptions).then(response => {\n        pendingBodySize -= requestSize;\n        pendingCount--;\n        return {\n          statusCode: response.status,\n          headers: {\n            'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n            'retry-after': response.headers.get('Retry-After'),\n          },\n        };\n      });\n    } catch (e) {\n      clearCachedFetchImplementation();\n      pendingBodySize -= requestSize;\n      pendingCount--;\n      return rejectedSyncPromise(e);\n    }\n  }\n\n  return createTransport(options, makeRequest);\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","import { createTransport } from '@sentry/core';\nimport { SyncPromise } from '@sentry/utils';\n\n/**\n * The DONE ready state for XmlHttpRequest\n *\n * Defining it here as a constant b/c XMLHttpRequest.DONE is not always defined\n * (e.g. during testing, it is `undefined`)\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState}\n */\nconst XHR_READYSTATE_DONE = 4;\n\n/**\n * Creates a Transport that uses the XMLHttpRequest API to send events to Sentry.\n */\nfunction makeXHRTransport(options) {\n  function makeRequest(request) {\n    return new SyncPromise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n\n      xhr.onerror = reject;\n\n      xhr.onreadystatechange = () => {\n        if (xhr.readyState === XHR_READYSTATE_DONE) {\n          resolve({\n            statusCode: xhr.status,\n            headers: {\n              'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),\n              'retry-after': xhr.getResponseHeader('Retry-After'),\n            },\n          });\n        }\n      };\n\n      xhr.open('POST', options.url);\n\n      for (const header in options.headers) {\n        if (Object.prototype.hasOwnProperty.call(options.headers, header)) {\n          xhr.setRequestHeader(header, options.headers[header]);\n        }\n      }\n\n      xhr.send(request.body);\n    });\n  }\n\n  return createTransport(options, makeRequest);\n}\n\nexport { makeXHRTransport };\n//# sourceMappingURL=xhr.js.map\n","import { createStackParser } from '@sentry/utils';\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, func, lineno, colno) {\n  const frame = {\n    filename,\n    function: func,\n    in_app: true, // All browser frames are considered in_app\n  };\n\n  if (lineno !== undefined) {\n    frame.lineno = lineno;\n  }\n\n  if (colno !== undefined) {\n    frame.colno = colno;\n  }\n\n  return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n  /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn = line => {\n  const parts = chromeRegex.exec(line);\n\n  if (parts) {\n    const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]);\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line/column number\n        parts[2] = subMatch[1]; // url\n        parts[3] = subMatch[2]; // line\n        parts[4] = subMatch[3]; // column\n      }\n    }\n\n    // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n    // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n    return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n  }\n\n  return;\n};\n\nconst chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n  /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko = line => {\n  const parts = geckoREgex.exec(line);\n\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]);\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line number\n        parts[1] = parts[1] || 'eval';\n        parts[3] = subMatch[1];\n        parts[4] = subMatch[2];\n        parts[5] = ''; // no column when eval\n      }\n    }\n\n    let filename = parts[3];\n    let func = parts[1] || UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n\n    return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n  }\n\n  return;\n};\n\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs = line => {\n  const parts = winjsRegex.exec(line);\n\n  return parts\n    ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n    : undefined;\n};\n\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10 = line => {\n  const parts = opera10Regex.exec(line);\n  return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n  / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11 = line => {\n  const parts = opera11Regex.exec(line);\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\n\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser];\n\nconst defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n *   at function@url:row:col\n *   at function@url:row:col\n *   at function@url:row:col\n *\n * it produces something like:\n *\n *   function@url:row:col\n *   function@url:row:col\n *   function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func, filename) => {\n  const isSafariExtension = func.indexOf('safari-extension') !== -1;\n  const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n  return isSafariExtension || isSafariWebExtension\n    ? [\n        func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n        isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n      ]\n    : [func, filename];\n};\n\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\n","import { defineIntegration, convertIntegrationFnToClass, getClient, addBreadcrumb } from '@sentry/core';\nimport { addConsoleInstrumentationHandler, addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addFetchInstrumentationHandler, addHistoryInstrumentationHandler, getEventDescription, logger, htmlTreeAsString, getComponentName, severityLevelFromString, safeJoin, SENTRY_XHR_DATA_KEY, parseUrl } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/* eslint-disable max-lines */\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options = {}) => {\n  const _options = {\n    console: true,\n    dom: true,\n    fetch: true,\n    history: true,\n    sentry: true,\n    xhr: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      if (_options.console) {\n        addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n      }\n      if (_options.dom) {\n        addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n      }\n      if (_options.xhr) {\n        addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n      }\n      if (_options.fetch) {\n        addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n      }\n      if (_options.history) {\n        addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n      }\n      if (_options.sentry && client.on) {\n        client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n      }\n    },\n  };\n}) ;\n\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Default Breadcrumbs instrumentations\n *\n * @deprecated Use `breadcrumbsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst Breadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, breadcrumbsIntegration)\n\n;\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client) {\n  return function addSentryBreadcrumb(event) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    addBreadcrumb(\n      {\n        category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n        event_id: event.event_id,\n        level: event.level,\n        message: getEventDescription(event),\n      },\n      {\n        event,\n      },\n    );\n  };\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n  client,\n  dom,\n) {\n  return function _innerDomBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let target;\n    let componentName;\n    let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n    let maxStringLength =\n      typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n        );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n\n    if (typeof keyAttrs === 'string') {\n      keyAttrs = [keyAttrs];\n    }\n\n    // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n    try {\n      const event = handlerData.event ;\n      const element = _isEvent(event) ? event.target : event;\n\n      target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n      componentName = getComponentName(element);\n    } catch (e) {\n      target = '<unknown>';\n    }\n\n    if (target.length === 0) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: `ui.${handlerData.name}`,\n      message: target,\n    };\n\n    if (componentName) {\n      breadcrumb.data = { 'ui.component_name': componentName };\n    }\n\n    addBreadcrumb(breadcrumb, {\n      event: handlerData.event,\n      name: handlerData.name,\n      global: handlerData.global,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client) {\n  return function _consoleBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: 'console',\n      data: {\n        arguments: handlerData.args,\n        logger: 'console',\n      },\n      level: severityLevelFromString(handlerData.level),\n      message: safeJoin(handlerData.args, ' '),\n    };\n\n    if (handlerData.level === 'assert') {\n      if (handlerData.args[0] === false) {\n        breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n        breadcrumb.data.arguments = handlerData.args.slice(1);\n      } else {\n        // Don't capture a breadcrumb for passed assertions\n        return;\n      }\n    }\n\n    addBreadcrumb(breadcrumb, {\n      input: handlerData.args,\n      level: handlerData.level,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client) {\n  return function _xhrBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n    // We only capture complete, non-sentry requests\n    if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n      return;\n    }\n\n    const { method, url, status_code, body } = sentryXhrData;\n\n    const data = {\n      method,\n      url,\n      status_code,\n    };\n\n    const hint = {\n      xhr: handlerData.xhr,\n      input: body,\n      startTimestamp,\n      endTimestamp,\n    };\n\n    addBreadcrumb(\n      {\n        category: 'xhr',\n        data,\n        type: 'http',\n      },\n      hint,\n    );\n  };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client) {\n  return function _fetchBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    // We only capture complete fetch requests\n    if (!endTimestamp) {\n      return;\n    }\n\n    if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n      // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n      return;\n    }\n\n    if (handlerData.error) {\n      const data = handlerData.fetchData;\n      const hint = {\n        data: handlerData.error,\n        input: handlerData.args,\n        startTimestamp,\n        endTimestamp,\n      };\n\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          level: 'error',\n          type: 'http',\n        },\n        hint,\n      );\n    } else {\n      const response = handlerData.response ;\n      const data = {\n        ...handlerData.fetchData,\n        status_code: response && response.status,\n      };\n      const hint = {\n        input: handlerData.args,\n        response,\n        startTimestamp,\n        endTimestamp,\n      };\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          type: 'http',\n        },\n        hint,\n      );\n    }\n  };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client) {\n  return function _historyBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let from = handlerData.from;\n    let to = handlerData.to;\n    const parsedLoc = parseUrl(WINDOW.location.href);\n    let parsedFrom = from ? parseUrl(from) : undefined;\n    const parsedTo = parseUrl(to);\n\n    // Initial pushState doesn't provide `from` information\n    if (!parsedFrom || !parsedFrom.path) {\n      parsedFrom = parsedLoc;\n    }\n\n    // Use only the path component of the URL if the URL matches the current\n    // document (almost all the time when using pushState)\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n      to = parsedTo.relative;\n    }\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n      from = parsedFrom.relative;\n    }\n\n    addBreadcrumb({\n      category: 'navigation',\n      data: {\n        from,\n        to,\n      },\n    });\n  };\n}\n\nfunction _isEvent(event) {\n  return !!event && !!(event ).target;\n}\n\nexport { Breadcrumbs, breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { defineIntegration, convertIntegrationFnToClass } from '@sentry/core';\nimport { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n  let previousEvent;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(currentEvent) {\n      // We want to ignore any non-error type events, e.g. transactions or replays\n      // These should never be deduped, and also not be compared against as _previousEvent.\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n\n      // Juuust in case something goes wrong\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n          return null;\n        }\n      } catch (_oO) {} // eslint-disable-line no-empty\n\n      return (previousEvent = currentEvent);\n    },\n  };\n}) ;\n\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/**\n * Deduplication filter.\n * @deprecated Use `dedupeIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst Dedupe = convertIntegrationFnToClass(INTEGRATION_NAME, dedupeIntegration)\n\n;\n\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n  let currentFrames = _getFramesFromEvent(currentEvent);\n  let previousFrames = _getFramesFromEvent(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames ;\n  previousFrames = previousFrames ;\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    const frameA = previousFrames[i];\n    const frameB = currentFrames[i];\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint ;\n  previousFingerprint = previousFingerprint ;\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch (_oO) {\n    return false;\n  }\n}\n\nfunction _getExceptionFromEvent(event) {\n  return event.exception && event.exception.values && event.exception.values[0];\n}\n\nfunction _getFramesFromEvent(event) {\n  const exception = event.exception;\n\n  if (exception) {\n    try {\n      // @ts-expect-error Object could be undefined\n      return exception.values[0].stacktrace.frames;\n    } catch (_oO) {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n\nexport { Dedupe, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { defineIntegration, convertIntegrationFnToClass, getClient, captureEvent } from '@sentry/core';\nimport { addGlobalErrorInstrumentationHandler, isString, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, isErrorEvent, getLocationHref, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options = {}) => {\n  const _options = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      Error.stackTraceLimit = 50;\n    },\n    setup(client) {\n      if (_options.onerror) {\n        _installGlobalOnErrorHandler(client);\n        globalHandlerLog('onerror');\n      }\n      if (_options.onunhandledrejection) {\n        _installGlobalOnUnhandledRejectionHandler(client);\n        globalHandlerLog('onunhandledrejection');\n      }\n    },\n  };\n}) ;\n\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\n/**\n * Global handlers.\n * @deprecated Use `globalHandlersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst GlobalHandlers = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  globalHandlersIntegration,\n)\n\n;\n\nfunction _installGlobalOnErrorHandler(client) {\n  addGlobalErrorInstrumentationHandler(data => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const { msg, url, line, column, error } = data;\n\n    const event =\n      error === undefined && isString(msg)\n        ? _eventFromIncompleteOnError(msg, url, line, column)\n        : _enhanceEventWithInitialFrame(\n            eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n            url,\n            line,\n            column,\n          );\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onerror',\n      },\n    });\n  });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client) {\n  addGlobalUnhandledRejectionInstrumentationHandler(e => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const error = _getUnhandledRejectionError(e );\n\n    const event = isPrimitive(error)\n      ? _eventFromRejectionWithPrimitive(error)\n      : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onunhandledrejection',\n      },\n    });\n  });\n}\n\nfunction _getUnhandledRejectionError(error) {\n  if (isPrimitive(error)) {\n    return error;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const e = error ;\n\n  // dig the object of the rejection out of known event types\n  try {\n    // PromiseRejectionEvents store the object of the rejection under 'reason'\n    // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n    if ('reason' in e) {\n      return e.reason;\n    }\n\n    // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n    // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n    // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n    // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n    // https://github.com/getsentry/sentry-javascript/issues/2380\n    else if ('detail' in e && 'reason' in e.detail) {\n      return e.detail.reason;\n    }\n  } catch (e2) {} // eslint-disable-line no-empty\n\n  return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason) {\n  return {\n    exception: {\n      values: [\n        {\n          type: 'UnhandledRejection',\n          // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n          value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n        },\n      ],\n    },\n  };\n}\n\n/**\n * This function creates a stack from an old, error-less onerror handler.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _eventFromIncompleteOnError(msg, url, line, column) {\n  const ERROR_TYPES_RE =\n    /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n\n  // If 'message' is ErrorEvent, get real message from inside\n  let message = isErrorEvent(msg) ? msg.message : msg;\n  let name = 'Error';\n\n  const groups = message.match(ERROR_TYPES_RE);\n  if (groups) {\n    name = groups[1];\n    message = groups[2];\n  }\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: name,\n          value: message,\n        },\n      ],\n    },\n  };\n\n  return _enhanceEventWithInitialFrame(event, url, line, column);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event, url, line, column) {\n  // event.exception\n  const e = (event.exception = event.exception || {});\n  // event.exception.values\n  const ev = (e.values = e.values || []);\n  // event.exception.values[0]\n  const ev0 = (ev[0] = ev[0] || {});\n  // event.exception.values[0].stacktrace\n  const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n  // event.exception.values[0].stacktrace.frames\n  const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n  const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n  const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n  const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n  // event.exception.values[0].stacktrace.frames\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      filename,\n      function: '?',\n      in_app: true,\n      lineno,\n    });\n  }\n\n  return event;\n}\n\nfunction globalHandlerLog(type) {\n  DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions() {\n  const client = getClient();\n  const options = (client && client.getOptions()) || {\n    stackParser: () => [],\n    attachStacktrace: false,\n  };\n  return options;\n}\n\nexport { GlobalHandlers, globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { defineIntegration, convertIntegrationFnToClass } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\nconst INTEGRATION_NAME = 'HttpContext';\n\nconst _httpContextIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    preprocessEvent(event) {\n      // if none of the information we want exists, don't bother\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n\n      // grab as much info as exists and add it to the event\n      const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n      const { referrer } = WINDOW.document || {};\n      const { userAgent } = WINDOW.navigator || {};\n\n      const headers = {\n        ...(event.request && event.request.headers),\n        ...(referrer && { Referer: referrer }),\n        ...(userAgent && { 'User-Agent': userAgent }),\n      };\n      const request = { ...event.request, ...(url && { url }), headers };\n\n      event.request = request;\n    },\n  };\n}) ;\n\nconst httpContextIntegration = defineIntegration(_httpContextIntegration);\n\n/**\n * HttpContext integration collects information about HTTP request headers.\n * @deprecated Use `httpContextIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst HttpContext = convertIntegrationFnToClass(INTEGRATION_NAME, httpContextIntegration)\n\n;\n\nexport { HttpContext, httpContextIntegration };\n//# sourceMappingURL=httpcontext.js.map\n","import { defineIntegration, convertIntegrationFnToClass } from '@sentry/core';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      applyAggregateErrorsToEvent(\n        // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n        exceptionFromError,\n        options.stackParser,\n        options.maxValueLength,\n        key,\n        limit,\n        event,\n        hint,\n      );\n    },\n  };\n}) ;\n\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\n/**\n * Aggregrate linked errors in an event.\n * @deprecated Use `linkedErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration)\n\n;\n\nexport { LinkedErrors, linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { defineIntegration, convertIntegrationFnToClass } from '@sentry/core';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\nimport { WINDOW, wrap } from '../helpers.js';\n\nconst DEFAULT_EVENT_TARGET = [\n  'EventTarget',\n  'Window',\n  'Node',\n  'ApplicationCache',\n  'AudioTrackList',\n  'BroadcastChannel',\n  'ChannelMergerNode',\n  'CryptoOperation',\n  'EventSource',\n  'FileReader',\n  'HTMLUnknownElement',\n  'IDBDatabase',\n  'IDBRequest',\n  'IDBTransaction',\n  'KeyOperation',\n  'MediaController',\n  'MessagePort',\n  'ModalWindow',\n  'Notification',\n  'SVGElementInstance',\n  'Screen',\n  'SharedWorker',\n  'TextTrack',\n  'TextTrackCue',\n  'TextTrackList',\n  'WebSocket',\n  'WebSocketWorker',\n  'Worker',\n  'XMLHttpRequest',\n  'XMLHttpRequestEventTarget',\n  'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'TryCatch';\n\nconst _browserApiErrorsIntegration = ((options = {}) => {\n  const _options = {\n    XMLHttpRequest: true,\n    eventTarget: true,\n    requestAnimationFrame: true,\n    setInterval: true,\n    setTimeout: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO: This currently only works for the first client this is setup\n    // We may want to adjust this to check for client etc.\n    setupOnce() {\n      if (_options.setTimeout) {\n        fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n      }\n\n      if (_options.setInterval) {\n        fill(WINDOW, 'setInterval', _wrapTimeFunction);\n      }\n\n      if (_options.requestAnimationFrame) {\n        fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n      }\n\n      if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n        fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n      }\n\n      const eventTargetOption = _options.eventTarget;\n      if (eventTargetOption) {\n        const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n        eventTarget.forEach(_wrapEventTarget);\n      }\n    },\n  };\n}) ;\n\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n * @deprecated Use `browserApiErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst TryCatch = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  browserApiErrorsIntegration,\n)\n\n;\n\nfunction _wrapTimeFunction(original) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function ( ...args) {\n    const originalCallback = args[0];\n    args[0] = wrap(originalCallback, {\n      mechanism: {\n        data: { function: getFunctionName(original) },\n        handled: false,\n        type: 'instrument',\n      },\n    });\n    return original.apply(this, args);\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function ( callback) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return original.apply(this, [\n      wrap(callback, {\n        mechanism: {\n          data: {\n            function: 'requestAnimationFrame',\n            handler: getFunctionName(original),\n          },\n          handled: false,\n          type: 'instrument',\n        },\n      }),\n    ]);\n  };\n}\n\nfunction _wrapXHR(originalSend) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function ( ...args) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const xhr = this;\n    const xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n    xmlHttpRequestProps.forEach(prop => {\n      if (prop in xhr && typeof xhr[prop] === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        fill(xhr, prop, function (original) {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                function: prop,\n                handler: getFunctionName(original),\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          };\n\n          // If Instrument integration has been called before TryCatch, get the name of original function\n          const originalFunction = getOriginalFunction(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n          }\n\n          // Otherwise wrap directly\n          return wrap(original, wrapOptions);\n        });\n      }\n    });\n\n    return originalSend.apply(this, args);\n  };\n}\n\nfunction _wrapEventTarget(target) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const globalObject = WINDOW ;\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const proto = globalObject[target] && globalObject[target].prototype;\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n  if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n    return;\n  }\n\n  fill(proto, 'addEventListener', function (original,)\n\n {\n    return function (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n      eventName,\n      fn,\n      options,\n    ) {\n      try {\n        if (typeof fn.handleEvent === 'function') {\n          // ESlint disable explanation:\n          //  First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n          //  introduce a bug here, because bind returns a new function that doesn't have our\n          //  flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n          //  Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n          // eslint-disable-next-line @typescript-eslint/unbound-method\n          fn.handleEvent = wrap(fn.handleEvent, {\n            mechanism: {\n              data: {\n                function: 'handleEvent',\n                handler: getFunctionName(fn),\n                target,\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          });\n        }\n      } catch (err) {\n        // can sometimes get 'Permission denied to access property \"handle Event'\n      }\n\n      return original.apply(this, [\n        eventName,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        wrap(fn , {\n          mechanism: {\n            data: {\n              function: 'addEventListener',\n              handler: getFunctionName(fn),\n              target,\n            },\n            handled: false,\n            type: 'instrument',\n          },\n        }),\n        options,\n      ]);\n    };\n  });\n\n  fill(\n    proto,\n    'removeEventListener',\n    function (\n      originalRemoveEventListener,\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ) {\n      return function (\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n        eventName,\n        fn,\n        options,\n      ) {\n        /**\n         * There are 2 possible scenarios here:\n         *\n         * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n         * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n         * as a pass-through, and call original `removeEventListener` with it.\n         *\n         * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n         * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n         * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n         * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n         * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n         *\n         * When someone adds a handler prior to initialization, and then do it again, but after,\n         * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n         * to get rid of the initial handler and it'd stick there forever.\n         */\n        const wrappedEventHandler = fn ;\n        try {\n          const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n          if (originalEventHandler) {\n            originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n          }\n        } catch (e) {\n          // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n        }\n        return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n      };\n    },\n  );\n}\n\nexport { TryCatch, browserApiErrorsIntegration };\n//# sourceMappingURL=trycatch.js.map\n","import { inboundFiltersIntegration, functionToStringIntegration, getIntegrationsToSetup, initAndBind, getReportDialogEndpoint, getCurrentHub, startSession, captureSession, getClient } from '@sentry/core';\nimport { stackParserFromStackParserOptions, supportsFetch, logger, addHistoryInstrumentationHandler } from '@sentry/utils';\nimport { BrowserClient } from './client.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW, wrap as wrap$1 } from './helpers.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { dedupeIntegration } from './integrations/dedupe.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { browserApiErrorsIntegration } from './integrations/trycatch.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\nimport { makeXHRTransport } from './transports/xhr.js';\n\n/** @deprecated Use `getDefaultIntegrations(options)` instead. */\nconst defaultIntegrations = [\n  inboundFiltersIntegration(),\n  functionToStringIntegration(),\n  browserApiErrorsIntegration(),\n  breadcrumbsIntegration(),\n  globalHandlersIntegration(),\n  linkedErrorsIntegration(),\n  dedupeIntegration(),\n  httpContextIntegration(),\n];\n\n/** Get the default integrations for the browser SDK. */\nfunction getDefaultIntegrations(_options) {\n  // We return a copy of the defaultIntegrations here to avoid mutating this\n  return [\n    // eslint-disable-next-line deprecation/deprecation\n    ...defaultIntegrations,\n  ];\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n *   dsn: '__DSN__',\n *   // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n *   scope.setExtra({ battery: 0.7 });\n *   scope.setTag({ user_mode: 'admin' });\n *   scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n *   message: 'My Breadcrumb',\n *   // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n *   message: 'Manual',\n *   stacktrace: [\n *     // ...\n *   ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nfunction init(options = {}) {\n  if (options.defaultIntegrations === undefined) {\n    options.defaultIntegrations = getDefaultIntegrations();\n  }\n  if (options.release === undefined) {\n    // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n    if (typeof __SENTRY_RELEASE__ === 'string') {\n      options.release = __SENTRY_RELEASE__;\n    }\n\n    // This supports the variable that sentry-webpack-plugin injects\n    if (WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id) {\n      options.release = WINDOW.SENTRY_RELEASE.id;\n    }\n  }\n  if (options.autoSessionTracking === undefined) {\n    options.autoSessionTracking = true;\n  }\n  if (options.sendClientReports === undefined) {\n    options.sendClientReports = true;\n  }\n\n  const clientOptions = {\n    ...options,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    integrations: getIntegrationsToSetup(options),\n    transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),\n  };\n\n  initAndBind(BrowserClient, clientOptions);\n\n  if (options.autoSessionTracking) {\n    startSessionTracking();\n  }\n}\n\nconst showReportDialog = (\n  // eslint-disable-next-line deprecation/deprecation\n  options = {},\n  // eslint-disable-next-line deprecation/deprecation\n  hub = getCurrentHub(),\n) => {\n  // doesn't work without a document (React Native)\n  if (!WINDOW.document) {\n    DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n    return;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  const { client, scope } = hub.getStackTop();\n  const dsn = options.dsn || (client && client.getDsn());\n  if (!dsn) {\n    DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n    return;\n  }\n\n  if (scope) {\n    options.user = {\n      ...scope.getUser(),\n      ...options.user,\n    };\n  }\n\n  if (!options.eventId) {\n    // eslint-disable-next-line deprecation/deprecation\n    options.eventId = hub.lastEventId();\n  }\n\n  const script = WINDOW.document.createElement('script');\n  script.async = true;\n  script.crossOrigin = 'anonymous';\n  script.src = getReportDialogEndpoint(dsn, options);\n\n  if (options.onLoad) {\n    script.onload = options.onLoad;\n  }\n\n  const { onClose } = options;\n  if (onClose) {\n    const reportDialogClosedMessageHandler = (event) => {\n      if (event.data === '__sentry_reportdialog_closed__') {\n        try {\n          onClose();\n        } finally {\n          WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n        }\n      }\n    };\n    WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n  }\n\n  const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n  if (injectionPoint) {\n    injectionPoint.appendChild(script);\n  } else {\n    DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n  }\n};\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction forceLoad() {\n  // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction onLoad(callback) {\n  callback();\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @deprecated This function will be removed in v8.\n * It is not part of Sentry's official API and it's easily replaceable by using a try/catch block\n * and calling Sentry.captureException.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// TODO(v8): Remove this function\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrap(fn) {\n  return wrap$1(fn)();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking() {\n  if (typeof WINDOW.document === 'undefined') {\n    DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n    return;\n  }\n\n  // The session duration for browser sessions does not track a meaningful\n  // concept that can be used as a metric.\n  // Automatically captured sessions are akin to page views, and thus we\n  // discard their duration.\n  startSession({ ignoreDuration: true });\n  captureSession();\n\n  // We want to create a session for every navigation as well\n  addHistoryInstrumentationHandler(({ from, to }) => {\n    // Don't create an additional session for the initial route or if the location did not change\n    if (from !== undefined && from !== to) {\n      startSession({ ignoreDuration: true });\n      captureSession();\n    }\n  });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\nfunction captureUserFeedback(feedback) {\n  const client = getClient();\n  if (client) {\n    client.captureUserFeedback(feedback);\n  }\n}\n\nexport { captureUserFeedback, defaultIntegrations, forceLoad, getDefaultIntegrations, init, onLoad, showReportDialog, wrap };\n//# sourceMappingURL=sdk.js.map\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!validate(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexport default stringify;\n","const rnds8 = new Uint8Array(16);\nexport default function rng() {\n    return crypto.getRandomValues(rnds8);\n}\n","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n    if (!buf && !options && crypto.randomUUID) {\n        return crypto.randomUUID();\n    }\n    return _v4(options, buf, offset);\n}\nfunction _v4(options, buf, offset) {\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? rng();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = rnds[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(rnds);\n}\nexport default v4;\n","import { v4 as uuidv4 } from 'uuid'\r\n\r\nexport const generateUUID = () => uuidv4()\r\n","import isNil from 'lodash/isNil'\r\nimport isNull from 'lodash/isNull'\r\nimport isNaN from 'lodash/isNaN'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { isLocalhostOrPrivateIp } from 'pmt-modules/environment'\r\n\r\n//\r\n// ------------------------------------------------------------------------------------------------\r\n//        STORAGE\r\n// ------------------------------------------------------------------------------------------------\r\n//\r\n\r\n//\r\n// local storage abstraction functions\r\n//\r\n\r\nconst getObjectFromStorage = (key, defaultValue = null) => {\r\n  try {\r\n    if (!localStorage) {\r\n      return null\r\n    }\r\n    const obj = localStorage.getItem(key)\r\n\r\n    let value = null\r\n\r\n    // default value\r\n    if (isUndefined(obj) || isNull(obj)) {\r\n      if (!isUndefined(defaultValue) && !isNull(defaultValue)) {\r\n        value = defaultValue\r\n      }\r\n    } else {\r\n      try {\r\n        value = JSON.parse(obj)\r\n      } catch (e) {\r\n        value = obj\r\n      }\r\n    }\r\n\r\n    // saved values as null are set as a string 'null', not null\r\n    if (value === 'null') {\r\n      return null\r\n    }\r\n\r\n    return value\r\n  } catch {}\r\n}\r\n\r\n//\r\n// setters\r\n//\r\n\r\nexport const saveToStorage = (key, object) => {\r\n  try {\r\n    const json = JSON.stringify(object)\r\n    localStorage.setItem(key, json)\r\n  } catch {}\r\n}\r\n\r\n//\r\n// getters\r\n//\r\n\r\nexport const getFromStorage = (key, defaultValue = null) => {\r\n  const value = getObjectFromStorage(key, defaultValue)\r\n  return value\r\n}\r\n\r\nexport const getFloatFromStorage = (key, defaultReturn = 0) => {\r\n  let value = getObjectFromStorage(key)\r\n\r\n  // default value\r\n  if (isNil(value) || isNaN(value)) {\r\n    if (!isUndefined(defaultReturn) && !isNull(defaultReturn)) {\r\n      value = defaultReturn\r\n    } else {\r\n      value = 0\r\n    }\r\n  }\r\n\r\n  const intValue = parseFloat(value)\r\n  if (isNaN(intValue)) {\r\n    return defaultReturn\r\n  }\r\n  return intValue\r\n}\r\n\r\nexport const getIntFromStorage = (key, defaultReturn = 0) => {\r\n  try {\r\n    let value = localStorage.getItem(key)\r\n\r\n    // default value\r\n    if (isUndefined(value) || isNull(value) || isNaN(value)) {\r\n      if (!isUndefined(defaultReturn) && !isNull(defaultReturn)) {\r\n        value = defaultReturn\r\n      } else {\r\n        value = 0\r\n      }\r\n    }\r\n\r\n    const intValue = parseInt(value, 10)\r\n    if (isNaN(intValue)) {\r\n      return defaultReturn\r\n    }\r\n    return intValue\r\n  } catch {}\r\n}\r\n\r\n//\r\n// remove\r\n//\r\n\r\nexport const removeFromStorage = key => {\r\n  try {\r\n    localStorage.removeItem(key)\r\n  } catch {}\r\n}\r\n\r\n//\r\n// ------------------------------------------------------------------------------------------------\r\n//        SESSION\r\n// ------------------------------------------------------------------------------------------------\r\n//\r\n\r\n//\r\n// session storage abstraction functions\r\n//\r\n\r\nconst getObjectFromSession = (key, defaultValue = null) => {\r\n  if (!sessionStorage) {\r\n    return null\r\n  }\r\n  const obj = sessionStorage.getItem(key)\r\n\r\n  let value = null\r\n\r\n  // default value\r\n  if (isUndefined(obj) || isNull(obj)) {\r\n    if (!isUndefined(defaultValue) && !isNull(defaultValue)) {\r\n      value = defaultValue\r\n    }\r\n  } else {\r\n    try {\r\n      value = JSON.parse(obj)\r\n    } catch (e) {\r\n      value = obj\r\n    }\r\n  }\r\n\r\n  // saved values as null are set as a string 'null', not null\r\n  if (value === 'null') {\r\n    return null\r\n  }\r\n\r\n  return value\r\n}\r\n\r\n//\r\n// setters\r\n//\r\n\r\nexport const saveToSession = (key, object) => {\r\n  const json = JSON.stringify(object)\r\n  sessionStorage.setItem(key, json)\r\n}\r\n\r\n//\r\n// getters\r\n//\r\n\r\nexport const getFromSession = (key, defaultValue = null) => {\r\n  const value = getObjectFromSession(key, defaultValue)\r\n  return value\r\n}\r\n\r\nexport const getFloatFromSession = (key, defaultReturn = 0) => {\r\n  let value = getObjectFromStorage(key)\r\n\r\n  // default value\r\n  if (isNil(value) || isNaN(value)) {\r\n    if (!isUndefined(defaultReturn) && !isNull(defaultReturn)) {\r\n      value = defaultReturn\r\n    } else {\r\n      value = 0\r\n    }\r\n  }\r\n\r\n  const intValue = parseFloat(value)\r\n  if (isNaN(intValue)) {\r\n    return defaultReturn\r\n  }\r\n  return intValue\r\n}\r\n\r\nexport const getIntFromSession = (key, defaultReturn = 0) => {\r\n  let value = sessionStorage.getItem(key)\r\n\r\n  // default value\r\n  if (isUndefined(value) || isNull(value) || isNaN(value)) {\r\n    if (!isUndefined(defaultReturn) && !isNull(defaultReturn)) {\r\n      value = defaultReturn\r\n    } else {\r\n      value = 0\r\n    }\r\n  }\r\n\r\n  const intValue = parseInt(value, 10)\r\n  if (isNaN(intValue)) {\r\n    return defaultReturn\r\n  }\r\n  return intValue\r\n}\r\n\r\n//\r\n// remove\r\n//\r\n\r\nexport const removeFromSession = key => {\r\n  sessionStorage.removeItem(key)\r\n}\r\n\r\n//\r\n// ------------------------------------------------------------------------------------------------\r\n//        COOKIES\r\n// ------------------------------------------------------------------------------------------------\r\n//\r\n\r\n/**\r\n * Set Cookie\r\n * Cookies are saved in name-value pairs like: key = value\r\n *\r\n * @param {string} key\r\n * @param {string} value\r\n * @param {number} [expTime=86400000] expiration time when cookie will expire (default: 1 day)\r\n * @param {string} [domain=null] tell the browser what domain the cookie belongs to\r\n * @param {string} [path='/'] tell the browser what path the cookie belongs to\r\n */\r\nexport const setCookie = (key, value, expTime = 86400000, domain = null, path = '/') => {\r\n  const d = new Date()\r\n  d.setTime(d.getTime() + expTime)\r\n  const expires = d.toUTCString()\r\n\r\n  /**\r\n   * domains must start with a dot, so we remove it for localhost\r\n   * https://www.ietf.org/rfc/rfc2109.txt\r\n   */\r\n  if (isNull(domain)) {\r\n    const hostname = window.location.hostname\r\n    domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1)\r\n    domain = `.${domain}`\r\n  }\r\n\r\n  // encodeURIComponent: because accents and special characters should not trigger issues (for example with Safari)\r\n  // encodeURIComponent and not encode in base64: to have retrocompatibility with existing cookies\r\n  document.cookie = `${key}=${encodeURIComponent(value)}; expires=${expires};${\r\n    !isLocalhostOrPrivateIp() ? ` domain=${domain}; Secure;` : ''\r\n  } path=${path}`\r\n}\r\n\r\n/**\r\n * Get cookie value by key\r\n *\r\n * @param {string} key\r\n * @returns\r\n */\r\nexport const getCookie = key => {\r\n  const name = `${key}=`\r\n  const decodedCookie = decodeURIComponent(document.cookie)\r\n  const ca = decodedCookie.split(';')\r\n\r\n  for (let i = 0; i < ca.length; i++) {\r\n    let c = ca[i]\r\n\r\n    while (c.charAt(0) === ' ') {\r\n      c = c.substring(1)\r\n    }\r\n\r\n    if (c.indexOf(name) === 0) {\r\n      return c.substring(name.length, c.length)\r\n    }\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * Delete cookie\r\n *\r\n * @param {string} key\r\n * @param {string} [domain=null] tell the browser what domain the cookie belongs to\r\n * @param {string} [path='/'] tell the browser what path the cookie belongs to\r\n */\r\nexport const deleteCookie = (key, domain = null, path = '/') => {\r\n  /**\r\n   * domains must start with a dot, so we remove it for localhost\r\n   * https://www.ietf.org/rfc/rfc2109.txt\r\n   */\r\n  if (isNull(domain)) {\r\n    const hostname = window.location.hostname\r\n    domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1)\r\n    domain = `.${domain}`\r\n  }\r\n\r\n  document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; ${\r\n    !isLocalhostOrPrivateIp() ? ` domain=${domain};` : ''\r\n  } path=${path};`\r\n}\r\n\r\n/**\r\n * Detect if a storage type is available or not\r\n *\r\n * you can test this by blocking cookies in via chrome://settings/content/cookies\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Testing_for_availability\r\n\r\n * @param {String} type can be 'localStorage' or 'sessionStorage'\r\n * @returns\r\n */\r\nexport const storageAvailable = type => {\r\n  let storage = null\r\n  try {\r\n    storage = window[type]\r\n    const x = '__storage_test__'\r\n    storage.setItem(x, x)\r\n    storage.removeItem(x)\r\n    return true\r\n  } catch (e) {\r\n    return (\r\n      e instanceof DOMException &&\r\n      // everything except Firefox\r\n      (e.code === 22 ||\r\n        // Firefox\r\n        e.code === 1014 ||\r\n        // test name field too, because code might not be present\r\n        // everything except Firefox\r\n        e.name === 'QuotaExceededError' ||\r\n        // Firefox\r\n        e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\r\n      // acknowledge QuotaExceededError only if there's something already stored\r\n      storage &&\r\n      storage.length !== 0\r\n    )\r\n  }\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\nimport { getFromSession, saveToSession } from 'pmt-modules/storage'\r\n\r\n//\r\n// The front can define a unique \"session\" id for the current user session and send it on the\r\n// 'p-front-session-id' header to the API.\r\n// It allows the API to link different API calls to a single front session.\r\n//\r\n\r\n// generate front session id for the session\r\n// It is saved on the sessionStorage: The sessionStorage object stores data for only one session\r\n// (the data is deleted when the browser tab is closed).\r\nlet _frontSessionId = null\r\n\r\nconst SessionStorageKey = 'P_FRONT_SESSSION_ID'\r\n\r\nexport const FRONT_SESSION_ID_HEADER = 'p-front-session-id'\r\n\r\nexport const initFrontSessionId = () => {\r\n  _frontSessionId = getFromSession(SessionStorageKey)\r\n\r\n  if (isEmpty(_frontSessionId)) {\r\n    _frontSessionId = `${Date.now()}_${generateUUID()}`\r\n    saveToSession(SessionStorageKey, _frontSessionId)\r\n  }\r\n}\r\n\r\nexport const getFrontSessionId = () => _frontSessionId\r\n","import * as Sentry from '@sentry/browser'\r\n\r\nimport isString from 'lodash/isString'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getFrontSessionId } from 'pmt-modules/frontSession'\r\n\r\n//import { getStore } from 'pmt-modules/store'\r\n\r\n// contains current logged in user info\r\nlet _userData = null\r\n\r\nlet _loggerConfig = {\r\n  SENTRY_URL: '',\r\n\r\n  DISPLAY_REPORT_DIALOG: true,\r\n\r\n  APP_VERSION: '',\r\n}\r\n\r\nexport default class Logger {\r\n  static LoggerLevel = {\r\n    INFO: 'info',\r\n    WARNING: 'warning',\r\n    ERROR: 'error',\r\n  }\r\n\r\n  //\r\n  // Define the different contexts\r\n  //\r\n\r\n  static UserContext = {\r\n    ANONYMOUS: 'ANONYMOUS',\r\n    USER: 'USER',\r\n  }\r\n\r\n  static ProContext = {\r\n    ANONYMOUS: 'ANONYMOUS',\r\n    PRO: 'PRO',\r\n  }\r\n\r\n  static RestaurantContext = {\r\n    ANONYMOUS: 'ANONYMOUS',\r\n    RESTAURANT: 'RESTAURANT',\r\n  }\r\n\r\n  // https://github.com/getsentry/sentry-javascript/issues/2027\r\n  static isSetup() {\r\n    const hub = Sentry.getCurrentHub()\r\n    if (!isNil(hub)) {\r\n      return !isNil(hub.getClient())\r\n    }\r\n    return false\r\n  }\r\n\r\n  //\r\n  //\r\n  //\r\n\r\n  /**\r\n   * Configure sentry logging\r\n   * @param  {[type]} config [description]\r\n   * @return {[type]}        [description]\r\n   */\r\n  static configure(config) {\r\n    _loggerConfig = config\r\n\r\n    // Do not send errors to sentry if we are on localhost.\r\n    if (document.location.hostname === 'localhost') {\r\n      return\r\n    }\r\n\r\n    if (!Logger.isSetup()) {\r\n      Sentry.init({\r\n        dsn: _loggerConfig.SENTRY_URL,\r\n        debug: true,\r\n        // see https://docs.sentry.io/clients/javascript/config/\r\n        release: _loggerConfig.APP_VERSION,\r\n        environment: _loggerConfig.ENV,\r\n        // Enables/disables automatic collection of breadcrumbs. default: true\r\n        autoBreadcrumbs: {\r\n          xhr: true, // XMLHttpRequest\r\n          console: true, // console logging\r\n          dom: true, // DOM interactions, i.e. clicks/typing\r\n          location: true, // url changes, including pushState/popState\r\n          sentry: true, // sentry events\r\n        },\r\n        // Maximum number of levels that normalization algorithm will traverse in objects and arrays.\r\n        normalizeDepth: 11,\r\n        // see https://docs.sentry.io/clients/javascript/tips/\r\n        ignoreErrors: [\r\n          // fetch\r\n          // https://stackoverflow.com/questions/55738408/javascript-typeerror-cancelled-error-when-calling-fetch-on-ios\r\n          //'TypeError: Failed to fetch',\r\n          'TypeError: NetworkError when attempting to fetch resource.',\r\n          'TypeError: Cancelled',\r\n          // Random plugins/extensions\r\n          'top.GLOBALS',\r\n          // See: http://blog.errorception.com/2012/03/tale-of-unfindable-js-error. html\r\n          'originalCreateNotification',\r\n          'canvas.contentDocument',\r\n          // Facebook borked\r\n          'fb_xd_fragment',\r\n        ],\r\n        ignoreUrls: [\r\n          // Facebook flakiness\r\n          /graph\\.facebook\\.com/i,\r\n          // Facebook blocked\r\n          /connect\\.facebook\\.net\\/en_US\\/all\\.js/i,\r\n          // Chrome extensions\r\n          /extensions\\//i,\r\n          /^chrome:\\/\\//i,\r\n        ],\r\n      })\r\n\r\n      Sentry.setTag('appCommit', _loggerConfig.__APP_GIT_COMMIT__)\r\n      Sentry.setTag('sdkCommit', _loggerConfig.__SDK_GIT_COMMIT__)\r\n      Sentry.setTag('sdkBranch', _loggerConfig.__SDK_GIT_BRANCH__)\r\n      Sentry.setTag('appBranch', _loggerConfig.__APP_GIT_BRANCH__)\r\n      Sentry.setTag('frontSessionId', getFrontSessionId())\r\n    }\r\n  }\r\n\r\n  static notImplemented(key, detail = '', extra = {}) {\r\n    console.error(key, detail, extra)\r\n\r\n    if (Logger.isSetup()) {\r\n      const message = `[${key}] ${Logger.formatObject(detail)}`\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.WARNING)\r\n        scope.setExtra('userData', _userData)\r\n        scope.setExtra('extra', extra)\r\n        Sentry.captureMessage(message)\r\n      })\r\n\r\n      Sentry.showReportDialog()\r\n    }\r\n  }\r\n\r\n  static info(key, detail, extra = {}) {\r\n    if (Logger.isSetup()) {\r\n      const message = `[${key}] ${Logger.formatObject(detail)}`\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.INFO)\r\n        scope.setExtra('userData', _userData)\r\n        scope.setExtra('extra', extra)\r\n        Sentry.captureMessage(message)\r\n      })\r\n    }\r\n  }\r\n\r\n  static warn(key, detail, extra = {}) {\r\n    Logger.warning(key, detail, extra)\r\n  }\r\n\r\n  static warning(key, detail, extra = {}) {\r\n    console.warn(key, detail)\r\n\r\n    if (Logger.isSetup()) {\r\n      const message = `[${key}] ${Logger.formatObject(detail)}`\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.WARNING)\r\n        scope.setExtra('userData', _userData)\r\n        scope.setExtra('extra', extra)\r\n        Sentry.captureMessage(message)\r\n      })\r\n    }\r\n  }\r\n\r\n  static error(key, detail, extra = {}) {\r\n    console.error(key, detail, extra)\r\n\r\n    if (Logger.isSetup()) {\r\n      const message = `[${key}] ${Logger.formatObject(detail)}`\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.ERROR)\r\n        scope.setExtra('userData', _userData)\r\n        scope.setExtra('extra', extra)\r\n        Sentry.captureMessage(message)\r\n      })\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when an exception is thrown during an action.\r\n   *\r\n   * See crashReporter.js\r\n   *\r\n   * @param  {[type]} err    exception thrown\r\n   * @param  {[type]} action action dispatched when the error occurred\r\n   */\r\n  static reduxException(err, action) {\r\n    console.error('action exception', err)\r\n\r\n    if (Logger.isSetup()) {\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.ERROR)\r\n        scope.setExtra('action', {\r\n          response: action.response,\r\n        })\r\n        scope.setExtra('userData', _userData)\r\n        Sentry.captureException(err)\r\n      })\r\n\r\n      Logger.runReportDialog()\r\n    }\r\n  }\r\n\r\n  static formatObject(object) {\r\n    if (!isString(object)) {\r\n      try {\r\n        return JSON.stringify(object)\r\n      } catch (e) {}\r\n    }\r\n\r\n    return object\r\n  }\r\n\r\n  static componentDidCatch(error, info) {\r\n    if (Logger.isSetup()) {\r\n      Sentry.withScope(scope => {\r\n        // see https://docs.sentry.io/platforms/javascript/#extra-context\r\n        scope.setExtra('info', info)\r\n        scope.setExtra('userData', _userData)\r\n        Sentry.captureException(error)\r\n      })\r\n\r\n      Logger.runReportDialog()\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Log an exception to the console and send it to our tracker (raven).\r\n   * @see https://github.com/getsentry/raven-js/blob/master/docs/integrations/react.rst\r\n   *\r\n   * @param ex\r\n   * @param context\r\n   */\r\n  static logException(ex, context) {\r\n    if (Logger.isSetup()) {\r\n      Sentry.withScope(scope => {\r\n        // see https://docs.sentry.io/platforms/javascript/#extra-context\r\n        scope.setExtra('context', context)\r\n        scope.setExtra('userData', _userData)\r\n        Sentry.captureException(ex)\r\n      })\r\n\r\n      Logger.runReportDialog()\r\n    }\r\n    /* eslint no-console:0 */\r\n    if (window.console && console.error) {\r\n      console.error(ex)\r\n    }\r\n  }\r\n\r\n  static runReportDialog() {\r\n    if (_loggerConfig.DISPLAY_REPORT_DIALOG === true) {\r\n      const data = {\r\n        eventId: Logger.lastEventId(),\r\n        name: _userData ? `${_userData.firstName} ${_userData.lastName}` : '',\r\n        email: _userData ? _userData.email : '',\r\n        comments: '',\r\n      }\r\n\r\n      // do not show if already displayed\r\n      // Note: in most cases, the dialog is ask to show multiple times in a row. In this case the\r\n      // following code does not work.\r\n      const sentryClass = 'sentry-error-embed-wrapper'\r\n      const classes = document.getElementsByClassName(sentryClass)\r\n      if (classes && classes.length > 0) {\r\n        return\r\n      }\r\n\r\n      // see https://docs.getsentry.com/hosted/clients/javascript/usage/#user-feedback\r\n      Sentry.showReportDialog(data)\r\n\r\n      // put some default data on report dialog, need to wait for the dialog to appear.\r\n      // Note: we wait for ~1s, it is completely arbitrary and some browsers don't display the\r\n      // dialog before this timeout ends.\r\n      // In this case, we attempt one retry.\r\n      const prefillReportDialogData = (data, shouldRetryIfNotLoadedYet = false) => {\r\n        const nameElem = document.getElementById('id_name')\r\n        const emailElem = document.getElementById('id_email')\r\n        const idElem = document.getElementById('id_comments')\r\n\r\n        // if all elements are null, the modal isn't display yet.\r\n        if (isNil(idElem) && isNil(nameElem) && isNil(emailElem)) {\r\n          // not loaded yet, should we retry ?\r\n          if (shouldRetryIfNotLoadedYet === true) {\r\n            setTimeout(() => {\r\n              // false to avoid infinite loop\r\n              prefillReportDialogData(data, false)\r\n            }, 1200)\r\n          }\r\n        } else {\r\n          if (!isNil(nameElem) && !isNil(data.name)) {\r\n            nameElem.value = data.name\r\n          }\r\n\r\n          if (!isNil(emailElem) && !isNil(data.email)) {\r\n            emailElem.value = data.email\r\n          }\r\n\r\n          if (!isNil(idElem) && !isNil(data.comments)) {\r\n            idElem.value = data.comments\r\n          }\r\n        }\r\n      }\r\n\r\n      // first try after 1s\r\n      setTimeout(() => {\r\n        prefillReportDialogData(data, true)\r\n      }, 1000) // 1s\r\n    }\r\n  }\r\n\r\n  //\r\n  //\r\n  //\r\n\r\n  /**\r\n   * https://docs.sentry.io/platforms/javascript/#capturing-the-user\r\n   * @param see Logger.UserContext\r\n   * @param userId\r\n   */\r\n  static setUserContext(userContext, userData = {}) {\r\n    if (Logger.isSetup()) {\r\n      _userData = userData\r\n\r\n      Sentry.configureScope(scope => {\r\n        scope.setUser({\r\n          userContext,\r\n          id: userData.id,\r\n          email: userData.email,\r\n          restaurantsGroup: userData.restaurantsGroup,\r\n          name: `${userData.firstName} ${userData.lastName}`,\r\n        })\r\n      })\r\n    }\r\n  }\r\n\r\n  /**\r\n   * https://docs.sentry.io/platforms/javascript/#capturing-the-user\r\n   * @param see Logger.UserContext\r\n   * @param userId\r\n   */\r\n  static setProContext(proContext, proData) {\r\n    _userData = proData\r\n\r\n    if (Logger.isSetup()) {\r\n      Sentry.configureScope(scope => {\r\n        scope.setUser({\r\n          userContext: proContext,\r\n          id: proData.id,\r\n          email: proData.email,\r\n          name: `${proData.firstName} ${proData.lastName}`,\r\n        })\r\n      })\r\n    }\r\n  }\r\n\r\n  /**\r\n   * https://docs.sentry.io/platforms/javascript/#capturing-the-user\r\n   * @param see Logger.UserContext\r\n   * @param userId\r\n   */\r\n  static setRestaurantContext(restaurantContext, restaurantData) {\r\n    _userData = restaurantData\r\n\r\n    if (Logger.isSetup()) {\r\n      Sentry.configureScope(scope => {\r\n        scope.setUser({\r\n          userContext: restaurantContext,\r\n          restaurantId: restaurantData.restaurantId,\r\n        })\r\n      })\r\n    }\r\n  }\r\n\r\n  //\r\n  // Raven utils\r\n  //\r\n\r\n  static clearUserContext() {\r\n    // TODO: do we really want to clear the user data here?\r\n    _userData = null\r\n\r\n    if (Logger.isSetup()) {\r\n      // https://docs.sentry.io/platforms/javascript/#unsetting-context\r\n      Sentry.configureScope(scope => scope.clear())\r\n    }\r\n  }\r\n\r\n  static lastEventId() {\r\n    if (Logger.isSetup()) {\r\n      return Sentry.lastEventId()\r\n    }\r\n    return null\r\n  }\r\n\r\n  //\r\n  // utils\r\n  //\r\n\r\n  /**\r\n   * Get a strack trice as an object.\r\n   * @type {[type]}\r\n   */\r\n  static getStackTrace = () => {\r\n    const obj = {}\r\n\r\n    if (Error.captureStackTrace) {\r\n      Error.captureStackTrace(obj, Logger.getStackTrace)\r\n      return obj.stack\r\n    }\r\n\r\n    return null\r\n  }\r\n}\r\n","import { createSelector } from 'reselect'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\n\r\n/**\r\n * Generate a simple selector with basic isFetching / getData / getErrors\r\n * @param  {function} getState  Function to retrieve entity from state\r\n *                              state => state.entities.ENTITY_NAME\r\n * @param  {function} formatData  Callback function to format data\r\n * @return {object}             Object with 3 selectors\r\n *                              isFetching / getData / getErrors\r\n * TODO: rename to `createSimpleSelectors`\r\n */\r\nconst createSimpleSelector = (getState, formatData = null) => ({\r\n  isFetching: createSelector(\r\n    [getState],\r\n    dataState => (isNil(dataState) ? false : dataState.get('isFetching') || false)\r\n  ),\r\n\r\n  getData: createSelector([getState], dataState => {\r\n    if (isNil(dataState)) {\r\n      return null\r\n    }\r\n\r\n    const data = dataState.get('data')\r\n\r\n    if (isNil(data)) {\r\n      return null\r\n    }\r\n\r\n    if (!data.toJS) {\r\n      // Can happen when the API did not sent back a JSON object.\r\n      throw new Error('Invalid data on createSimpleSelector, toJS does not exists: ' + data)\r\n    }\r\n\r\n    const dataJs = data.toJS()\r\n\r\n    // add action payload data if exists\r\n    const actionData = dataState.get('actionData', null)\r\n\r\n    return formatData !== null && typeof formatData === 'function'\r\n      ? formatData(dataJs, { data: dataJs, actionData: actionData ? actionData.toJS() : null })\r\n      : dataJs\r\n  }),\r\n\r\n  getError: createSelector([getState], dataState => {\r\n    if (isNil(dataState)) {\r\n      return null\r\n    }\r\n\r\n    const error = dataState.get('error')\r\n\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n\r\n    if (!isFunction(error.toJS)) {\r\n      Logger.warn('Create Simple Selector', 'data is not immutable', { error })\r\n    }\r\n\r\n    return error.toJS ? error.toJS() : error\r\n  }),\r\n})\r\n\r\nexport default createSimpleSelector\r\n","import Immutable from 'immutable'\r\nimport invariant from 'invariant'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\n/**\r\n * Generate a simple reducer with basic REQUEST / SUCCESS / FAILURE\r\n * @param  {string} actionType  Action to be reduced\r\n * @return {Immutable}          Updated state\r\n */\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  data: null,\r\n  isFetching: false,\r\n  error: null,\r\n})\r\n\r\nconst createSimpleReducer = (actionType, reducer = null) => (state = DEFAULT_STATE, action) => {\r\n  switch (action.type) {\r\n    case actionType.REQUEST:\r\n      return state\r\n        .merge({\r\n          actionData: action.data,\r\n          isFetching: true,\r\n          error: null,\r\n        })\r\n        .merge(\r\n          action?.data?.resetDataOnRequest ?? true\r\n            ? {\r\n                data: null,\r\n              }\r\n            : {}\r\n        )\r\n\r\n    case actionType.SUCCESS:\r\n      return state.merge({\r\n        data: action.response,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n    case actionType.FAILURE:\r\n      return state.merge({\r\n        data: null,\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      if (reducer !== null) {\r\n        invariant(\r\n          isFunction(reducer) || isObject(reducer),\r\n          'reducer must be a function or an object'\r\n        )\r\n        let res\r\n        if (isFunction(reducer)) {\r\n          res = reducer(state, action)\r\n        } else {\r\n          const func = reducer[action.type]\r\n          if (!func) {\r\n            // no reducer function found for the action type.\r\n            return state\r\n          }\r\n          res = func(state, action)\r\n        }\r\n        invariant(!isUndefined(res), 'reducer returned undefined')\r\n        return res\r\n      }\r\n      return state\r\n  }\r\n}\r\n\r\ncreateSimpleReducer.DEFAULT_STATE = DEFAULT_STATE\r\n\r\nexport default createSimpleReducer\r\n","//\r\n// utility to create a middleware function. Avoid boilerplate.\r\n//\r\n// Example:\r\n//\r\n// ```\r\n// const middleware = createMiddleware(Action.REQUEST, ({ getState, dispatch, next, action }) => {\r\n//\r\n// })\r\n// ```\r\n//\r\n//\r\nimport findIndex from 'lodash/findIndex'\r\nimport isArray from 'lodash/isArray'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\nimport isNull from 'lodash/isNull'\r\nimport invariant from 'invariant'\r\nimport { __DEV__ } from '../environment'\r\n\r\nconst STOP_PROPAGATION = -1\r\n\r\n/**\r\n *\r\n * @param  {any} actionsToHandleParam can either be:\r\n *                                    - function: (action) -> bool\r\n *                                    - array of `type` constants\r\n *                                    - `type` constant\r\n * @param  {func} func                the body of the middleware\r\n */\r\nconst createMiddleware = (actionsToHandleParam, func) => ({\r\n  getState,\r\n  dispatch,\r\n}) => next => action => {\r\n  if (__DEV__) {\r\n    invariant(isFunction(func), 'middleware must be a function')\r\n    invariant(!isNil(actionsToHandleParam), 'actionsToHandleParam nil for ' + func)\r\n  }\r\n\r\n  let res = null\r\n\r\n  //\r\n  if (typeof action === 'object' && action.hasOwnProperty('type')) {\r\n    // handle actionsToHandleParam as array of actions and as a single action\r\n    let actionsToHandle = actionsToHandleParam\r\n    if (isFunction(actionsToHandleParam) && actionsToHandleParam.TYPE) {\r\n      // the user gives an action as actionsToHandleParam, we need to use the type\r\n      actionsToHandle = actionsToHandleParam.TYPE\r\n    }\r\n\r\n    let toHandle = false\r\n\r\n    if (isFunction(actionsToHandle)) {\r\n      toHandle = actionsToHandle(action)\r\n    } else {\r\n      // handle actionsToHandleParam as array of actions and as a single action: we pass it to an\r\n      // array\r\n      if (!isArray(actionsToHandle)) {\r\n        actionsToHandle = [actionsToHandle]\r\n      }\r\n\r\n      toHandle =\r\n        findIndex(actionsToHandle, actionToHandle => {\r\n          return action.type === actionToHandle\r\n        }) !== -1\r\n    }\r\n\r\n    if (toHandle) {\r\n      try {\r\n        res = func({\r\n          getState,\r\n          dispatch,\r\n          next,\r\n          action,\r\n        })\r\n      } catch (e) {\r\n        console.error(`Error on middleware`, { action })\r\n        console.error(e)\r\n      }\r\n\r\n      // action should stop if we get a null result\r\n      if (res !== STOP_PROPAGATION) {\r\n        return isNil(res) // in case we forgot the final `return next(action)` on the middleware\r\n          ? next(action)\r\n          : res\r\n      }\r\n    }\r\n  }\r\n\r\n  //\r\n  if (isNull(res) || res !== STOP_PROPAGATION) {\r\n    return next(action)\r\n  }\r\n}\r\n\r\ncreateMiddleware.STOP_PROPAGATION = STOP_PROPAGATION\r\n\r\nexport default createMiddleware\r\n","import Immutable from 'immutable'\r\nimport invariant from 'invariant'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\n/**\r\n * Generate a simple reducer with basic REQUEST / SUCCESS / FAILURE\r\n * @param  {string} actionType  Action to be reduced\r\n * @return {Immutable}          Updated state\r\n */\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  data: null,\r\n  isFetching: false,\r\n  error: null,\r\n})\r\n\r\nconst onRequest = (state, action, getProp) =>\r\n  state.mergeIn([getProp(action)], {\r\n    data: null,\r\n    isFetching: true,\r\n    error: null,\r\n    actionData: action.data,\r\n  })\r\n\r\nconst onSuccess = (state, action, getProp) =>\r\n  state.mergeIn([getProp(action)], {\r\n    data: action.response,\r\n    isFetching: false,\r\n    error: null,\r\n  })\r\n\r\nconst onFailure = (state, action, getProp) =>\r\n  state.mergeIn([getProp(action)], {\r\n    data: null,\r\n    isFetching: false,\r\n    error: action.error,\r\n  })\r\n\r\n// options:\r\n//  - override: { onSuccess: }\r\nconst createReducerPerObject = (actionType, getProp, reducer = null, options = {}) => (\r\n  state = DEFAULT_STATE,\r\n  action\r\n) => {\r\n  switch (action.type) {\r\n    case actionType.REQUEST:\r\n      return (options?.override?.onRequest || onRequest)(state, action, getProp)\r\n\r\n    case actionType.SUCCESS:\r\n      return (options?.override?.onSuccess || onSuccess)(state, action, getProp)\r\n\r\n    case actionType.FAILURE:\r\n      return (options?.override?.onFailure || onFailure)(state, action, getProp)\r\n\r\n    default:\r\n      if (reducer !== null) {\r\n        invariant(\r\n          isFunction(reducer) || isObject(reducer),\r\n          'reducer must be a function or an object'\r\n        )\r\n        let res\r\n        if (isFunction(reducer)) {\r\n          res = reducer(state, action)\r\n        } else {\r\n          const func = reducer[action.type]\r\n          if (!func) {\r\n            // no reducer function found for the action type.\r\n            return state\r\n          }\r\n          res = func(state, action)\r\n        }\r\n        invariant(!isUndefined(res), 'reducer returned undefined')\r\n        return res\r\n      }\r\n      return state\r\n  }\r\n}\r\n\r\ncreateReducerPerObject.DEFAULT_STATE = DEFAULT_STATE\r\n\r\nexport default createReducerPerObject\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\n/**\r\n * Generate a simple selector with basic isFetching / getData / getErrors but with a make prefix.\r\n * @param  {function} getState  Function to retrieve entity from state\r\n *                              state => state.entities.ENTITY_NAME\r\n * @param  {function} formatData  Callback function to format data\r\n * @return {object}             Object with 3 selectors\r\n *                              isFetching / getData / getErrors\r\n \r\n */\r\nconst createSelectorsPerObject = (getState, getProp, formatData = null) => ({\r\n  makeIsFetching: () =>\r\n    createSelector([getState, getProp], (dataState, prop) => {\r\n      if (isNil(dataState)) {\r\n        return false\r\n      }\r\n\r\n      const listObject = dataState.get(prop)\r\n\r\n      return isNil(listObject) ? false : listObject.get('isFetching') || false\r\n    }),\r\n\r\n  makeGetData: () =>\r\n    createSelector([getState, getProp], (dataState, prop) => {\r\n      if (isNil(dataState)) {\r\n        return null\r\n      }\r\n\r\n      const listObject = dataState.get(prop)\r\n\r\n      if (isNil(listObject)) {\r\n        return null\r\n      }\r\n\r\n      const data = listObject.get('data')\r\n\r\n      if (isNil(data)) {\r\n        return null\r\n      }\r\n\r\n      return formatData !== null && typeof formatData === 'function'\r\n        ? formatData(data.toJS())\r\n        : data.toJS()\r\n    }),\r\n\r\n  makeGetError: () =>\r\n    createSelector([getState, getProp], (dataState, prop) => {\r\n      if (isNil(dataState)) {\r\n        return null\r\n      }\r\n\r\n      const listObject = dataState.get(prop)\r\n\r\n      if (isNil(listObject)) {\r\n        return null\r\n      }\r\n\r\n      const error = listObject.get('error')\r\n\r\n      if (isNil(error)) {\r\n        return null\r\n      }\r\n\r\n      return error.toJS()\r\n    }),\r\n})\r\n\r\nexport default createSelectorsPerObject\r\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n  root = self;\n} else if (typeof window !== 'undefined') {\n  root = window;\n} else if (typeof global !== 'undefined') {\n  root = global;\n} else if (typeof module !== 'undefined') {\n  root = module;\n} else {\n  root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function');\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error('Expected the enhancer to be a function.');\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error('Expected the reducer to be a function.');\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error('Expected the listener to be a function.');\n    }\n\n    if (isDispatching) {\n      throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n    }\n\n    if (isDispatching) {\n      throw new Error('Reducers may not dispatch actions.');\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error('Expected the nextReducer to be a function.');\n    }\n\n    currentReducer = nextReducer;\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new TypeError('Expected the observer to be an object.');\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[$$observable] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n  var actionType = action && action.type;\n  var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n  return \"Given \" + actionDescription + \", reducer \\\"\" + 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\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + 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(\"Reducer \\\"\" + 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);\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 errorMessage = getUndefinedStateErrorMessage(_key, action);\n        throw new Error(errorMessage);\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\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 a single function as the first argument,\n * and get a 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(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n  }\n\n  var keys = Object.keys(actionCreators);\n  var boundActionCreators = {};\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\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\nfunction _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\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\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(\"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({}, 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 { createStore, combineReducers, bindActionCreators, applyMiddleware, compose, ActionTypes as __DO_NOT_USE__ActionTypes };\n","import { createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { isOrderPlugin, isKiosk, isWebCustomer, isBo, isWebGlobal } from 'pmt-modules/environment'\r\nimport { getStore } from 'pmt-modules/store'\r\nimport { createAction } from '../redux'\r\n\r\nexport const I18nFetchingLocale = createApiEnumAction('I18n::FETCHING_LOCALE')\r\n\r\n// the require.context is needed for webpack to bundle translation files\r\n// without it, the translation are not loaded when the app is hosted on a custom domain and displayed via iframe\r\n// eg. the translations were not loaded on https://order.preprod.leon-de-bruxelles.paymytable.com/restaurant/17000107/catalog\r\n// despite being loaded on https://order2.pluginweb.preprod.paymytable.com/restaurant/17000107/catalog?apiConsumer=NTY4MTEzNDk5MDAwMDEyODpBTnc0VkZlODNqMFpiZw==\r\n// Vite alternative to require.context is import.meta.glob\r\nconst translationsContext = import.meta.glob(\r\n  '/pmt-react-sdk/packages/modules/src/i18n/labels/**/*.json',\r\n  {\r\n    eager: true,\r\n  }\r\n)\r\n\r\nasync function loadTranslationFile(locale) {\r\n  const appName =\r\n    isOrderPlugin()\r\n      ? 'pmt-order-plugin'\r\n      : isWebCustomer()\r\n        ? 'pmt_web_customer'\r\n        : isKiosk()\r\n          ? 'pmt-web-kiosk'\r\n          : isBo()\r\n            ? 'pmt-backoffice'\r\n            : isWebGlobal()\r\n              ? 'pmt-web-global'\r\n              : null\r\n\r\n  return loadTranslationFileForApp(appName, locale)\r\n}\r\n\r\nexport async function loadTranslationFileForApp(appName, locale) {\r\n  if (!appName) {\r\n    console.error(`Unknown webapp: cannot determine appName to load the translations`)\r\n    throw new Error('Unknown webapp: cannot determine appName to load the translations')\r\n  }\r\n\r\n  const fileKey = `/pmt-react-sdk/packages/modules/src/i18n/labels/${appName}/${locale}.json`\r\n  const module = translationsContext[fileKey]\r\n\r\n  if (!module) {\r\n    const error = new Error(`Translation file not found: ${fileKey}`)\r\n    console.error(error)\r\n    throw error\r\n  }\r\n\r\n  return module.default || module\r\n}\r\n\r\nexport const retrieveMessages = languageParam => {\r\n  const locale = languageParam === 'debug' ? 'en' : languageParam\r\n\r\n  getStore().dispatch({\r\n    type: I18nFetchingLocale.REQUEST,\r\n    locale: locale,\r\n  })\r\n\r\n  loadTranslationFile(locale)\r\n    .then(labels => {\r\n      getStore().dispatch({\r\n        type: I18nFetchingLocale.SUCCESS,\r\n        locale: locale,\r\n        phrases: labels,\r\n      })\r\n    })\r\n    .catch(err => {\r\n      console.log('[i18n] retrieveMessages FAILURE for locale:', locale, err)\r\n      getStore().dispatch({\r\n        type: I18nFetchingLocale.FAILURE,\r\n        locale: locale,\r\n      })\r\n    })\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const CHOOSE_LOCALE = 'I18n::CHOOSE_LOCALE'\r\n\r\nexport const chooseLocale = locale => createAction(CHOOSE_LOCALE, { locale })\r\n","\r\n\r\n// to avoid infinit loop of fetching texts.\r\nexport const RETRIEVE_MESSAGES_LIMIT = 4\r\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nmodule.exports = baseSlice;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","var asciiToArray = require('./_asciiToArray'),\n    hasUnicode = require('./_hasUnicode'),\n    unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","var castSlice = require('./_castSlice'),\n    hasUnicode = require('./_hasUnicode'),\n    stringToArray = require('./_stringToArray'),\n    toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nmodule.exports = createCaseFirst;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","var toString = require('./toString'),\n    upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n","import find from 'lodash/find'\r\nimport forEach from 'lodash/forEach'\r\n\r\nexport const localeEquals = (localeA = '', localeB = '') => {\r\n  // trick to handle compare 'fr-FR' with 'fr' or 'FR'\r\n  if (localeA?.length !== localeB?.length) {\r\n    localeA = localeA?.substring(0, 2)\r\n    localeB = localeB?.substring(0, 2)\r\n  }\r\n\r\n  return localeA?.replace('-', '_').toLowerCase() === localeB?.replace('-', '_').toLowerCase()\r\n}\r\n\r\nexport const getForLocale = (localesData, locale) => {\r\n  return find(localesData, localeData => localeEquals(localeData.locale, locale))\r\n}\r\n\r\n/**\r\n *\r\n * @param {object} localeObject  { 'fr': 'test' }\r\n * @param {string} localeToSearchFor\r\n */\r\nexport const getForLocaleObject = (localeObject, localeToSearchFor) => {\r\n  let res = null\r\n  forEach(localeObject, (value, locale) => {\r\n    if (localeEquals(locale, localeToSearchFor)) {\r\n      res = value\r\n      return false\r\n    }\r\n  })\r\n  return res\r\n}\r\n","import { saveToStorage, getFromStorage } from 'pmt-modules/storage'\r\n\r\nconst StorageItem = {\r\n  LOCALE: 'LOCALE',\r\n}\r\n\r\nexport const saveLocaleToStorage = language => {\r\n  saveToStorage(StorageItem.LOCALE, language)\r\n}\r\n\r\nexport const getLocaleFromStorage = () => getFromStorage(StorageItem.LOCALE, null)\r\n","/* flatpickr v4.5.2, @license MIT */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global.flatpickr = factory());\n}(this, (function () { 'use strict';\n\n    var pad = function pad(number) {\n      return (\"0\" + number).slice(-2);\n    };\n    var int = function int(bool) {\n      return bool === true ? 1 : 0;\n    };\n    function debounce(func, wait, immediate) {\n      if (immediate === void 0) {\n        immediate = false;\n      }\n\n      var timeout;\n      return function () {\n        var context = this,\n            args = arguments;\n        timeout !== null && clearTimeout(timeout);\n        timeout = window.setTimeout(function () {\n          timeout = null;\n          if (!immediate) func.apply(context, args);\n        }, wait);\n        if (immediate && !timeout) func.apply(context, args);\n      };\n    }\n    var arrayify = function arrayify(obj) {\n      return obj instanceof Array ? obj : [obj];\n    };\n\n    var do_nothing = function do_nothing() {\n      return undefined;\n    };\n\n    var monthToStr = function monthToStr(monthNumber, shorthand, locale) {\n      return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\n    };\n    var revFormat = {\n      D: do_nothing,\n      F: function F(dateObj, monthName, locale) {\n        dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n      },\n      G: function G(dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n      },\n      H: function H(dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n      },\n      J: function J(dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n      },\n      K: function K(dateObj, amPM, locale) {\n        dateObj.setHours(dateObj.getHours() % 12 + 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n      },\n      M: function M(dateObj, shortMonth, locale) {\n        dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n      },\n      S: function S(dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n      },\n      U: function U(_, unixSeconds) {\n        return new Date(parseFloat(unixSeconds) * 1000);\n      },\n      W: function W(dateObj, weekNum) {\n        var weekNumber = parseInt(weekNum);\n        return new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n      },\n      Y: function Y(dateObj, year) {\n        dateObj.setFullYear(parseFloat(year));\n      },\n      Z: function Z(_, ISODate) {\n        return new Date(ISODate);\n      },\n      d: function d(dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n      },\n      h: function h(dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n      },\n      i: function i(dateObj, minutes) {\n        dateObj.setMinutes(parseFloat(minutes));\n      },\n      j: function j(dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n      },\n      l: do_nothing,\n      m: function m(dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n      },\n      n: function n(dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n      },\n      s: function s(dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n      },\n      w: do_nothing,\n      y: function y(dateObj, year) {\n        dateObj.setFullYear(2000 + parseFloat(year));\n      }\n    };\n    var tokenRegex = {\n      D: \"(\\\\w+)\",\n      F: \"(\\\\w+)\",\n      G: \"(\\\\d\\\\d|\\\\d)\",\n      H: \"(\\\\d\\\\d|\\\\d)\",\n      J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n      K: \"\",\n      M: \"(\\\\w+)\",\n      S: \"(\\\\d\\\\d|\\\\d)\",\n      U: \"(.+)\",\n      W: \"(\\\\d\\\\d|\\\\d)\",\n      Y: \"(\\\\d{4})\",\n      Z: \"(.+)\",\n      d: \"(\\\\d\\\\d|\\\\d)\",\n      h: \"(\\\\d\\\\d|\\\\d)\",\n      i: \"(\\\\d\\\\d|\\\\d)\",\n      j: \"(\\\\d\\\\d|\\\\d)\",\n      l: \"(\\\\w+)\",\n      m: \"(\\\\d\\\\d|\\\\d)\",\n      n: \"(\\\\d\\\\d|\\\\d)\",\n      s: \"(\\\\d\\\\d|\\\\d)\",\n      w: \"(\\\\d\\\\d|\\\\d)\",\n      y: \"(\\\\d{2})\"\n    };\n    var formats = {\n      Z: function Z(date) {\n        return date.toISOString();\n      },\n      D: function D(date, locale, options) {\n        return locale.weekdays.shorthand[formats.w(date, locale, options)];\n      },\n      F: function F(date, locale, options) {\n        return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n      },\n      G: function G(date, locale, options) {\n        return pad(formats.h(date, locale, options));\n      },\n      H: function H(date) {\n        return pad(date.getHours());\n      },\n      J: function J(date, locale) {\n        return locale.ordinal !== undefined ? date.getDate() + locale.ordinal(date.getDate()) : date.getDate();\n      },\n      K: function K(date, locale) {\n        return locale.amPM[int(date.getHours() > 11)];\n      },\n      M: function M(date, locale) {\n        return monthToStr(date.getMonth(), true, locale);\n      },\n      S: function S(date) {\n        return pad(date.getSeconds());\n      },\n      U: function U(date) {\n        return date.getTime() / 1000;\n      },\n      W: function W(date, _, options) {\n        return options.getWeek(date);\n      },\n      Y: function Y(date) {\n        return date.getFullYear();\n      },\n      d: function d(date) {\n        return pad(date.getDate());\n      },\n      h: function h(date) {\n        return date.getHours() % 12 ? date.getHours() % 12 : 12;\n      },\n      i: function i(date) {\n        return pad(date.getMinutes());\n      },\n      j: function j(date) {\n        return date.getDate();\n      },\n      l: function l(date, locale) {\n        return locale.weekdays.longhand[date.getDay()];\n      },\n      m: function m(date) {\n        return pad(date.getMonth() + 1);\n      },\n      n: function n(date) {\n        return date.getMonth() + 1;\n      },\n      s: function s(date) {\n        return date.getSeconds();\n      },\n      w: function w(date) {\n        return date.getDay();\n      },\n      y: function y(date) {\n        return String(date.getFullYear()).substring(2);\n      }\n    };\n\n    var english = {\n      weekdays: {\n        shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n        longhand: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n      },\n      months: {\n        shorthand: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n        longhand: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n      },\n      daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n      firstDayOfWeek: 0,\n      ordinal: function ordinal(nth) {\n        var s = nth % 100;\n        if (s > 3 && s < 21) return \"th\";\n\n        switch (s % 10) {\n          case 1:\n            return \"st\";\n\n          case 2:\n            return \"nd\";\n\n          case 3:\n            return \"rd\";\n\n          default:\n            return \"th\";\n        }\n      },\n      rangeSeparator: \" to \",\n      weekAbbreviation: \"Wk\",\n      scrollTitle: \"Scroll to increment\",\n      toggleTitle: \"Click to toggle\",\n      amPM: [\"AM\", \"PM\"],\n      yearAriaLabel: \"Year\"\n    };\n\n    var createDateFormatter = function createDateFormatter(_ref) {\n      var _ref$config = _ref.config,\n          config = _ref$config === void 0 ? defaults : _ref$config,\n          _ref$l10n = _ref.l10n,\n          l10n = _ref$l10n === void 0 ? english : _ref$l10n;\n      return function (dateObj, frmt, overrideLocale) {\n        var locale = overrideLocale || l10n;\n\n        if (config.formatDate !== undefined) {\n          return config.formatDate(dateObj, frmt, locale);\n        }\n\n        return frmt.split(\"\").map(function (c, i, arr) {\n          return formats[c] && arr[i - 1] !== \"\\\\\" ? formats[c](dateObj, locale, config) : c !== \"\\\\\" ? c : \"\";\n        }).join(\"\");\n      };\n    };\n    var createDateParser = function createDateParser(_ref2) {\n      var _ref2$config = _ref2.config,\n          config = _ref2$config === void 0 ? defaults : _ref2$config,\n          _ref2$l10n = _ref2.l10n,\n          l10n = _ref2$l10n === void 0 ? english : _ref2$l10n;\n      return function (date, givenFormat, timeless, customLocale) {\n        if (date !== 0 && !date) return undefined;\n        var locale = customLocale || l10n;\n        var parsedDate;\n        var date_orig = date;\n        if (date instanceof Date) parsedDate = new Date(date.getTime());else if (typeof date !== \"string\" && date.toFixed !== undefined) parsedDate = new Date(date);else if (typeof date === \"string\") {\n          var format = givenFormat || (config || defaults).dateFormat;\n          var datestr = String(date).trim();\n\n          if (datestr === \"today\") {\n            parsedDate = new Date();\n            timeless = true;\n          } else if (/Z$/.test(datestr) || /GMT$/.test(datestr)) parsedDate = new Date(date);else if (config && config.parseDate) parsedDate = config.parseDate(date, format);else {\n            parsedDate = !config || !config.noCalendar ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0) : new Date(new Date().setHours(0, 0, 0, 0));\n            var matched,\n                ops = [];\n\n            for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n              var token = format[i];\n              var isBackSlash = token === \"\\\\\";\n              var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n\n              if (tokenRegex[token] && !escaped) {\n                regexStr += tokenRegex[token];\n                var match = new RegExp(regexStr).exec(date);\n\n                if (match && (matched = true)) {\n                  ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n                    fn: revFormat[token],\n                    val: match[++matchIndex]\n                  });\n                }\n              } else if (!isBackSlash) regexStr += \".\";\n\n              ops.forEach(function (_ref3) {\n                var fn = _ref3.fn,\n                    val = _ref3.val;\n                return parsedDate = fn(parsedDate, val, locale) || parsedDate;\n              });\n            }\n\n            parsedDate = matched ? parsedDate : undefined;\n          }\n        }\n\n        if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n          config.errorHandler(new Error(\"Invalid date provided: \" + date_orig));\n          return undefined;\n        }\n\n        if (timeless === true) parsedDate.setHours(0, 0, 0, 0);\n        return parsedDate;\n      };\n    };\n    function compareDates(date1, date2, timeless) {\n      if (timeless === void 0) {\n        timeless = true;\n      }\n\n      if (timeless !== false) {\n        return new Date(date1.getTime()).setHours(0, 0, 0, 0) - new Date(date2.getTime()).setHours(0, 0, 0, 0);\n      }\n\n      return date1.getTime() - date2.getTime();\n    }\n    var getWeek = function getWeek(givenDate) {\n      var date = new Date(givenDate.getTime());\n      date.setHours(0, 0, 0, 0);\n      date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n      var week1 = new Date(date.getFullYear(), 0, 4);\n      return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n    };\n    var isBetween = function isBetween(ts, ts1, ts2) {\n      return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n    };\n    var duration = {\n      DAY: 86400000\n    };\n\n    var HOOKS = [\"onChange\", \"onClose\", \"onDayCreate\", \"onDestroy\", \"onKeyDown\", \"onMonthChange\", \"onOpen\", \"onParseConfig\", \"onReady\", \"onValueUpdate\", \"onYearChange\", \"onPreCalendarPosition\"];\n    var defaults = {\n      _disable: [],\n      _enable: [],\n      allowInput: false,\n      altFormat: \"F j, Y\",\n      altInput: false,\n      altInputClass: \"form-control input\",\n      animate: typeof window === \"object\" && window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n      ariaDateFormat: \"F j, Y\",\n      clickOpens: true,\n      closeOnSelect: true,\n      conjunction: \", \",\n      dateFormat: \"Y-m-d\",\n      defaultHour: 12,\n      defaultMinute: 0,\n      defaultSeconds: 0,\n      disable: [],\n      disableMobile: false,\n      enable: [],\n      enableSeconds: false,\n      enableTime: false,\n      errorHandler: function errorHandler(err) {\n        return typeof console !== \"undefined\" && console.warn(err);\n      },\n      getWeek: getWeek,\n      hourIncrement: 1,\n      ignoredFocusElements: [],\n      inline: false,\n      locale: \"default\",\n      minuteIncrement: 5,\n      mode: \"single\",\n      nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n      noCalendar: false,\n      now: new Date(),\n      onChange: [],\n      onClose: [],\n      onDayCreate: [],\n      onDestroy: [],\n      onKeyDown: [],\n      onMonthChange: [],\n      onOpen: [],\n      onParseConfig: [],\n      onReady: [],\n      onValueUpdate: [],\n      onYearChange: [],\n      onPreCalendarPosition: [],\n      plugins: [],\n      position: \"auto\",\n      positionElement: undefined,\n      prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n      shorthandCurrentMonth: false,\n      showMonths: 1,\n      static: false,\n      time_24hr: false,\n      weekNumbers: false,\n      wrap: false\n    };\n\n    function toggleClass(elem, className, bool) {\n      if (bool === true) return elem.classList.add(className);\n      elem.classList.remove(className);\n    }\n    function createElement(tag, className, content) {\n      var e = window.document.createElement(tag);\n      className = className || \"\";\n      content = content || \"\";\n      e.className = className;\n      if (content !== undefined) e.textContent = content;\n      return e;\n    }\n    function clearNode(node) {\n      while (node.firstChild) {\n        node.removeChild(node.firstChild);\n      }\n    }\n    function findParent(node, condition) {\n      if (condition(node)) return node;else if (node.parentNode) return findParent(node.parentNode, condition);\n      return undefined;\n    }\n    function createNumberInput(inputClassName, opts) {\n      var wrapper = createElement(\"div\", \"numInputWrapper\"),\n          numInput = createElement(\"input\", \"numInput \" + inputClassName),\n          arrowUp = createElement(\"span\", \"arrowUp\"),\n          arrowDown = createElement(\"span\", \"arrowDown\");\n      numInput.type = \"text\";\n      numInput.pattern = \"\\\\d*\";\n      if (opts !== undefined) for (var key in opts) {\n        numInput.setAttribute(key, opts[key]);\n      }\n      wrapper.appendChild(numInput);\n      wrapper.appendChild(arrowUp);\n      wrapper.appendChild(arrowDown);\n      return wrapper;\n    }\n\n    if (typeof Object.assign !== \"function\") {\n      Object.assign = function (target) {\n        if (!target) {\n          throw TypeError(\"Cannot convert undefined or null to object\");\n        }\n\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        var _loop = function _loop() {\n          var source = args[_i];\n\n          if (source) {\n            Object.keys(source).forEach(function (key) {\n              return target[key] = source[key];\n            });\n          }\n        };\n\n        for (var _i = 0; _i < args.length; _i++) {\n          _loop();\n        }\n\n        return target;\n      };\n    }\n\n    var DEBOUNCED_CHANGE_MS = 300;\n\n    function FlatpickrInstance(element, instanceConfig) {\n      var self = {\n        config: Object.assign({}, flatpickr.defaultConfig),\n        l10n: english\n      };\n      self.parseDate = createDateParser({\n        config: self.config,\n        l10n: self.l10n\n      });\n      self._handlers = [];\n      self._bind = bind;\n      self._setHoursFromDate = setHoursFromDate;\n      self._positionCalendar = positionCalendar;\n      self.changeMonth = changeMonth;\n      self.changeYear = changeYear;\n      self.clear = clear;\n      self.close = close;\n      self._createElement = createElement;\n      self.destroy = destroy;\n      self.isEnabled = isEnabled;\n      self.jumpToDate = jumpToDate;\n      self.open = open;\n      self.redraw = redraw;\n      self.set = set;\n      self.setDate = setDate;\n      self.toggle = toggle;\n\n      function setupHelperFunctions() {\n        self.utils = {\n          getDaysInMonth: function getDaysInMonth(month, yr) {\n            if (month === void 0) {\n              month = self.currentMonth;\n            }\n\n            if (yr === void 0) {\n              yr = self.currentYear;\n            }\n\n            if (month === 1 && (yr % 4 === 0 && yr % 100 !== 0 || yr % 400 === 0)) return 29;\n            return self.l10n.daysInMonth[month];\n          }\n        };\n      }\n\n      function init() {\n        self.element = self.input = element;\n        self.isOpen = false;\n        parseConfig();\n        setupLocale();\n        setupInputs();\n        setupDates();\n        setupHelperFunctions();\n        if (!self.isMobile) build();\n        bindEvents();\n\n        if (self.selectedDates.length || self.config.noCalendar) {\n          if (self.config.enableTime) {\n            setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj || self.config.minDate : undefined);\n          }\n\n          updateValue(false);\n        }\n\n        setCalendarWidth();\n        self.showTimeInput = self.selectedDates.length > 0 || self.config.noCalendar;\n        var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n        if (!self.isMobile && isSafari) {\n          positionCalendar();\n        }\n\n        triggerEvent(\"onReady\");\n      }\n\n      function bindToInstance(fn) {\n        return fn.bind(self);\n      }\n\n      function setCalendarWidth() {\n        var config = self.config;\n        if (config.weekNumbers === false && config.showMonths === 1) return;else if (config.noCalendar !== true) {\n          window.requestAnimationFrame(function () {\n            self.calendarContainer.style.visibility = \"hidden\";\n            self.calendarContainer.style.display = \"block\";\n\n            if (self.daysContainer !== undefined) {\n              var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n              self.daysContainer.style.width = daysWidth + \"px\";\n              self.calendarContainer.style.width = daysWidth + (self.weekWrapper !== undefined ? self.weekWrapper.offsetWidth : 0) + \"px\";\n              self.calendarContainer.style.removeProperty(\"visibility\");\n              self.calendarContainer.style.removeProperty(\"display\");\n            }\n          });\n        }\n      }\n\n      function updateTime(e) {\n        if (self.selectedDates.length === 0) return;\n\n        if (e !== undefined && e.type !== \"blur\") {\n          timeWrapper(e);\n        }\n\n        var prevValue = self._input.value;\n        setHoursFromInputs();\n        updateValue();\n\n        if (self._input.value !== prevValue) {\n          self._debouncedChange();\n        }\n      }\n\n      function ampm2military(hour, amPM) {\n        return hour % 12 + 12 * int(amPM === self.l10n.amPM[1]);\n      }\n\n      function military2ampm(hour) {\n        switch (hour % 24) {\n          case 0:\n          case 12:\n            return 12;\n\n          default:\n            return hour % 12;\n        }\n      }\n\n      function setHoursFromInputs() {\n        if (self.hourElement === undefined || self.minuteElement === undefined) return;\n        var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24,\n            minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60,\n            seconds = self.secondElement !== undefined ? (parseInt(self.secondElement.value, 10) || 0) % 60 : 0;\n\n        if (self.amPM !== undefined) {\n          hours = ampm2military(hours, self.amPM.textContent);\n        }\n\n        var limitMinHours = self.config.minTime !== undefined || self.config.minDate && self.minDateHasTime && self.latestSelectedDateObj && compareDates(self.latestSelectedDateObj, self.config.minDate, true) === 0;\n        var limitMaxHours = self.config.maxTime !== undefined || self.config.maxDate && self.maxDateHasTime && self.latestSelectedDateObj && compareDates(self.latestSelectedDateObj, self.config.maxDate, true) === 0;\n\n        if (limitMaxHours) {\n          var maxTime = self.config.maxTime !== undefined ? self.config.maxTime : self.config.maxDate;\n          hours = Math.min(hours, maxTime.getHours());\n          if (hours === maxTime.getHours()) minutes = Math.min(minutes, maxTime.getMinutes());\n          if (minutes === maxTime.getMinutes()) seconds = Math.min(seconds, maxTime.getSeconds());\n        }\n\n        if (limitMinHours) {\n          var minTime = self.config.minTime !== undefined ? self.config.minTime : self.config.minDate;\n          hours = Math.max(hours, minTime.getHours());\n          if (hours === minTime.getHours()) minutes = Math.max(minutes, minTime.getMinutes());\n          if (minutes === minTime.getMinutes()) seconds = Math.max(seconds, minTime.getSeconds());\n        }\n\n        setHours(hours, minutes, seconds);\n      }\n\n      function setHoursFromDate(dateObj) {\n        var date = dateObj || self.latestSelectedDateObj;\n        if (date) setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n      }\n\n      function setDefaultHours() {\n        var hours = self.config.defaultHour;\n        var minutes = self.config.defaultMinute;\n        var seconds = self.config.defaultSeconds;\n\n        if (self.config.minDate !== undefined) {\n          var min_hr = self.config.minDate.getHours();\n          var min_minutes = self.config.minDate.getMinutes();\n          hours = Math.max(hours, min_hr);\n          if (hours === min_hr) minutes = Math.max(min_minutes, minutes);\n          if (hours === min_hr && minutes === min_minutes) seconds = self.config.minDate.getSeconds();\n        }\n\n        if (self.config.maxDate !== undefined) {\n          var max_hr = self.config.maxDate.getHours();\n          var max_minutes = self.config.maxDate.getMinutes();\n          hours = Math.min(hours, max_hr);\n          if (hours === max_hr) minutes = Math.min(max_minutes, minutes);\n          if (hours === max_hr && minutes === max_minutes) seconds = self.config.maxDate.getSeconds();\n        }\n\n        setHours(hours, minutes, seconds);\n      }\n\n      function setHours(hours, minutes, seconds) {\n        if (self.latestSelectedDateObj !== undefined) {\n          self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n        }\n\n        if (!self.hourElement || !self.minuteElement || self.isMobile) return;\n        self.hourElement.value = pad(!self.config.time_24hr ? (12 + hours) % 12 + 12 * int(hours % 12 === 0) : hours);\n        self.minuteElement.value = pad(minutes);\n        if (self.amPM !== undefined) self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n        if (self.secondElement !== undefined) self.secondElement.value = pad(seconds);\n      }\n\n      function onYearInput(event) {\n        var year = parseInt(event.target.value) + (event.delta || 0);\n\n        if (year / 1000 > 1 || event.key === \"Enter\" && !/[^\\d]/.test(year.toString())) {\n          changeYear(year);\n        }\n      }\n\n      function bind(element, event, handler, options) {\n        if (event instanceof Array) return event.forEach(function (ev) {\n          return bind(element, ev, handler, options);\n        });\n        if (element instanceof Array) return element.forEach(function (el) {\n          return bind(el, event, handler, options);\n        });\n        element.addEventListener(event, handler, options);\n\n        self._handlers.push({\n          element: element,\n          event: event,\n          handler: handler,\n          options: options\n        });\n      }\n\n      function onClick(handler) {\n        return function (evt) {\n          evt.which === 1 && handler(evt);\n        };\n      }\n\n      function triggerChange() {\n        triggerEvent(\"onChange\");\n      }\n\n      function bindEvents() {\n        if (self.config.wrap) {\n          [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n            Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n              return bind(el, \"click\", self[evt]);\n            });\n          });\n        }\n\n        if (self.isMobile) {\n          setupMobile();\n          return;\n        }\n\n        var debouncedResize = debounce(onResize, 50);\n        self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n        if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent)) bind(self.daysContainer, \"mouseover\", function (e) {\n          if (self.config.mode === \"range\") onMouseOver(e.target);\n        });\n        bind(window.document.body, \"keydown\", onKeyDown);\n        if (!self.config.static) bind(self._input, \"keydown\", onKeyDown);\n        if (!self.config.inline && !self.config.static) bind(window, \"resize\", debouncedResize);\n        if (window.ontouchstart !== undefined) bind(window.document, \"click\", documentClick);else bind(window.document, \"mousedown\", onClick(documentClick));\n        bind(window.document, \"focus\", documentClick, {\n          capture: true\n        });\n\n        if (self.config.clickOpens === true) {\n          bind(self._input, \"focus\", self.open);\n          bind(self._input, \"mousedown\", onClick(self.open));\n        }\n\n        if (self.daysContainer !== undefined) {\n          bind(self.monthNav, \"mousedown\", onClick(onMonthNavClick));\n          bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n          bind(self.daysContainer, \"mousedown\", onClick(selectDate));\n        }\n\n        if (self.timeContainer !== undefined && self.minuteElement !== undefined && self.hourElement !== undefined) {\n          var selText = function selText(e) {\n            return e.target.select();\n          };\n\n          bind(self.timeContainer, [\"increment\"], updateTime);\n          bind(self.timeContainer, \"blur\", updateTime, {\n            capture: true\n          });\n          bind(self.timeContainer, \"mousedown\", onClick(timeIncrement));\n          bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n          if (self.secondElement !== undefined) bind(self.secondElement, \"focus\", function () {\n            return self.secondElement && self.secondElement.select();\n          });\n\n          if (self.amPM !== undefined) {\n            bind(self.amPM, \"mousedown\", onClick(function (e) {\n              updateTime(e);\n              triggerChange();\n            }));\n          }\n        }\n      }\n\n      function jumpToDate(jumpDate) {\n        var jumpTo = jumpDate !== undefined ? self.parseDate(jumpDate) : self.latestSelectedDateObj || (self.config.minDate && self.config.minDate > self.now ? self.config.minDate : self.config.maxDate && self.config.maxDate < self.now ? self.config.maxDate : self.now);\n\n        try {\n          if (jumpTo !== undefined) {\n            self.currentYear = jumpTo.getFullYear();\n            self.currentMonth = jumpTo.getMonth();\n          }\n        } catch (e) {\n          e.message = \"Invalid date supplied: \" + jumpTo;\n          self.config.errorHandler(e);\n        }\n\n        self.redraw();\n      }\n\n      function timeIncrement(e) {\n        if (~e.target.className.indexOf(\"arrow\")) incrementNumInput(e, e.target.classList.contains(\"arrowUp\") ? 1 : -1);\n      }\n\n      function incrementNumInput(e, delta, inputElem) {\n        var target = e && e.target;\n        var input = inputElem || target && target.parentNode && target.parentNode.firstChild;\n        var event = createEvent(\"increment\");\n        event.delta = delta;\n        input && input.dispatchEvent(event);\n      }\n\n      function build() {\n        var fragment = window.document.createDocumentFragment();\n        self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n        self.calendarContainer.tabIndex = -1;\n\n        if (!self.config.noCalendar) {\n          fragment.appendChild(buildMonthNav());\n          self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n\n          if (self.config.weekNumbers) {\n            var _buildWeeks = buildWeeks(),\n                weekWrapper = _buildWeeks.weekWrapper,\n                weekNumbers = _buildWeeks.weekNumbers;\n\n            self.innerContainer.appendChild(weekWrapper);\n            self.weekNumbers = weekNumbers;\n            self.weekWrapper = weekWrapper;\n          }\n\n          self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n          self.rContainer.appendChild(buildWeekdays());\n\n          if (!self.daysContainer) {\n            self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n            self.daysContainer.tabIndex = -1;\n          }\n\n          buildDays();\n          self.rContainer.appendChild(self.daysContainer);\n          self.innerContainer.appendChild(self.rContainer);\n          fragment.appendChild(self.innerContainer);\n        }\n\n        if (self.config.enableTime) {\n          fragment.appendChild(buildTime());\n        }\n\n        toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n        toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n        toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n        self.calendarContainer.appendChild(fragment);\n        var customAppend = self.config.appendTo !== undefined && self.config.appendTo.nodeType !== undefined;\n\n        if (self.config.inline || self.config.static) {\n          self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n\n          if (self.config.inline) {\n            if (!customAppend && self.element.parentNode) self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);else if (self.config.appendTo !== undefined) self.config.appendTo.appendChild(self.calendarContainer);\n          }\n\n          if (self.config.static) {\n            var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n            if (self.element.parentNode) self.element.parentNode.insertBefore(wrapper, self.element);\n            wrapper.appendChild(self.element);\n            if (self.altInput) wrapper.appendChild(self.altInput);\n            wrapper.appendChild(self.calendarContainer);\n          }\n        }\n\n        if (!self.config.static && !self.config.inline) (self.config.appendTo !== undefined ? self.config.appendTo : window.document.body).appendChild(self.calendarContainer);\n      }\n\n      function createDay(className, date, dayNumber, i) {\n        var dateIsEnabled = isEnabled(date, true),\n            dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n        dayElement.dateObj = date;\n        dayElement.$i = i;\n        dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n\n        if (className.indexOf(\"hidden\") === -1 && compareDates(date, self.now) === 0) {\n          self.todayDateElem = dayElement;\n          dayElement.classList.add(\"today\");\n          dayElement.setAttribute(\"aria-current\", \"date\");\n        }\n\n        if (dateIsEnabled) {\n          dayElement.tabIndex = -1;\n\n          if (isDateSelected(date)) {\n            dayElement.classList.add(\"selected\");\n            self.selectedDateElem = dayElement;\n\n            if (self.config.mode === \"range\") {\n              toggleClass(dayElement, \"startRange\", self.selectedDates[0] && compareDates(date, self.selectedDates[0], true) === 0);\n              toggleClass(dayElement, \"endRange\", self.selectedDates[1] && compareDates(date, self.selectedDates[1], true) === 0);\n              if (className === \"nextMonthDay\") dayElement.classList.add(\"inRange\");\n            }\n          }\n        } else {\n          dayElement.classList.add(\"disabled\");\n        }\n\n        if (self.config.mode === \"range\") {\n          if (isDateInRange(date) && !isDateSelected(date)) dayElement.classList.add(\"inRange\");\n        }\n\n        if (self.weekNumbers && self.config.showMonths === 1 && className !== \"prevMonthDay\" && dayNumber % 7 === 1) {\n          self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n        }\n\n        triggerEvent(\"onDayCreate\", dayElement);\n        return dayElement;\n      }\n\n      function focusOnDayElem(targetNode) {\n        targetNode.focus();\n        if (self.config.mode === \"range\") onMouseOver(targetNode);\n      }\n\n      function getFirstAvailableDay(delta) {\n        var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n\n        for (var m = startMonth; m != endMonth; m += delta) {\n          var month = self.daysContainer.children[m];\n          var startIndex = delta > 0 ? 0 : month.children.length - 1;\n          var endIndex = delta > 0 ? month.children.length : -1;\n\n          for (var i = startIndex; i != endIndex; i += delta) {\n            var c = month.children[i];\n            if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj)) return c;\n          }\n        }\n\n        return undefined;\n      }\n\n      function getNextAvailableDay(current, delta) {\n        var givenMonth = current.className.indexOf(\"Month\") === -1 ? current.dateObj.getMonth() : self.currentMonth;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        var loopDelta = delta > 0 ? 1 : -1;\n\n        for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n          var month = self.daysContainer.children[m];\n          var startIndex = givenMonth - self.currentMonth === m ? current.$i + delta : delta < 0 ? month.children.length - 1 : 0;\n          var numMonthDays = month.children.length;\n\n          for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n            var c = month.children[i];\n            if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj) && Math.abs(current.$i - i) >= Math.abs(delta)) return focusOnDayElem(c);\n          }\n        }\n\n        self.changeMonth(loopDelta);\n        focusOnDay(getFirstAvailableDay(loopDelta), 0);\n        return undefined;\n      }\n\n      function focusOnDay(current, offset) {\n        var dayFocused = isInView(document.activeElement || document.body);\n        var startElem = current !== undefined ? current : dayFocused ? document.activeElement : self.selectedDateElem !== undefined && isInView(self.selectedDateElem) ? self.selectedDateElem : self.todayDateElem !== undefined && isInView(self.todayDateElem) ? self.todayDateElem : getFirstAvailableDay(offset > 0 ? 1 : -1);\n        if (startElem === undefined) return self._input.focus();\n        if (!dayFocused) return focusOnDayElem(startElem);\n        getNextAvailableDay(startElem, offset);\n      }\n\n      function buildMonthDays(year, month) {\n        var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n        var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12);\n        var daysInMonth = self.utils.getDaysInMonth(month),\n            days = window.document.createDocumentFragment(),\n            isMultiMonth = self.config.showMonths > 1,\n            prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\",\n            nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n        var dayNumber = prevMonthDays + 1 - firstOfMonth,\n            dayIndex = 0;\n\n        for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n          days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n        }\n\n        for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n          days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n        }\n\n        for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth && (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n          days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n        }\n\n        var dayContainer = createElement(\"div\", \"dayContainer\");\n        dayContainer.appendChild(days);\n        return dayContainer;\n      }\n\n      function buildDays() {\n        if (self.daysContainer === undefined) {\n          return;\n        }\n\n        clearNode(self.daysContainer);\n        if (self.weekNumbers) clearNode(self.weekNumbers);\n        var frag = document.createDocumentFragment();\n\n        for (var i = 0; i < self.config.showMonths; i++) {\n          var d = new Date(self.currentYear, self.currentMonth, 1);\n          d.setMonth(self.currentMonth + i);\n          frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n        }\n\n        self.daysContainer.appendChild(frag);\n        self.days = self.daysContainer.firstChild;\n\n        if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n          onMouseOver();\n        }\n      }\n\n      function buildMonth() {\n        var container = createElement(\"div\", \"flatpickr-month\");\n        var monthNavFragment = window.document.createDocumentFragment();\n        var monthElement = createElement(\"span\", \"cur-month\");\n        var yearInput = createNumberInput(\"cur-year\", {\n          tabindex: \"-1\"\n        });\n        var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n        yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n        if (self.config.minDate) yearElement.setAttribute(\"data-min\", self.config.minDate.getFullYear().toString());\n\n        if (self.config.maxDate) {\n          yearElement.setAttribute(\"data-max\", self.config.maxDate.getFullYear().toString());\n          yearElement.disabled = !!self.config.minDate && self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n        }\n\n        var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n        currentMonth.appendChild(monthElement);\n        currentMonth.appendChild(yearInput);\n        monthNavFragment.appendChild(currentMonth);\n        container.appendChild(monthNavFragment);\n        return {\n          container: container,\n          yearElement: yearElement,\n          monthElement: monthElement\n        };\n      }\n\n      function buildMonths() {\n        clearNode(self.monthNav);\n        self.monthNav.appendChild(self.prevMonthNav);\n\n        for (var m = self.config.showMonths; m--;) {\n          var month = buildMonth();\n          self.yearElements.push(month.yearElement);\n          self.monthElements.push(month.monthElement);\n          self.monthNav.appendChild(month.container);\n        }\n\n        self.monthNav.appendChild(self.nextMonthNav);\n      }\n\n      function buildMonthNav() {\n        self.monthNav = createElement(\"div\", \"flatpickr-months\");\n        self.yearElements = [];\n        self.monthElements = [];\n        self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n        self.prevMonthNav.innerHTML = self.config.prevArrow;\n        self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n        self.nextMonthNav.innerHTML = self.config.nextArrow;\n        buildMonths();\n        Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n          get: function get() {\n            return self.__hidePrevMonthArrow;\n          },\n          set: function set(bool) {\n            if (self.__hidePrevMonthArrow !== bool) {\n              toggleClass(self.prevMonthNav, \"disabled\", bool);\n              self.__hidePrevMonthArrow = bool;\n            }\n          }\n        });\n        Object.defineProperty(self, \"_hideNextMonthArrow\", {\n          get: function get() {\n            return self.__hideNextMonthArrow;\n          },\n          set: function set(bool) {\n            if (self.__hideNextMonthArrow !== bool) {\n              toggleClass(self.nextMonthNav, \"disabled\", bool);\n              self.__hideNextMonthArrow = bool;\n            }\n          }\n        });\n        self.currentYearElement = self.yearElements[0];\n        updateNavigationCurrentMonth();\n        return self.monthNav;\n      }\n\n      function buildTime() {\n        self.calendarContainer.classList.add(\"hasTime\");\n        if (self.config.noCalendar) self.calendarContainer.classList.add(\"noCalendar\");\n        self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n        self.timeContainer.tabIndex = -1;\n        var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n        var hourInput = createNumberInput(\"flatpickr-hour\");\n        self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n        var minuteInput = createNumberInput(\"flatpickr-minute\");\n        self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n        self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n        self.hourElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getHours() : self.config.time_24hr ? self.config.defaultHour : military2ampm(self.config.defaultHour));\n        self.minuteElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getMinutes() : self.config.defaultMinute);\n        self.hourElement.setAttribute(\"data-step\", self.config.hourIncrement.toString());\n        self.minuteElement.setAttribute(\"data-step\", self.config.minuteIncrement.toString());\n        self.hourElement.setAttribute(\"data-min\", self.config.time_24hr ? \"0\" : \"1\");\n        self.hourElement.setAttribute(\"data-max\", self.config.time_24hr ? \"23\" : \"12\");\n        self.minuteElement.setAttribute(\"data-min\", \"0\");\n        self.minuteElement.setAttribute(\"data-max\", \"59\");\n        self.timeContainer.appendChild(hourInput);\n        self.timeContainer.appendChild(separator);\n        self.timeContainer.appendChild(minuteInput);\n        if (self.config.time_24hr) self.timeContainer.classList.add(\"time24hr\");\n\n        if (self.config.enableSeconds) {\n          self.timeContainer.classList.add(\"hasSeconds\");\n          var secondInput = createNumberInput(\"flatpickr-second\");\n          self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n          self.secondElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getSeconds() : self.config.defaultSeconds);\n          self.secondElement.setAttribute(\"data-step\", self.minuteElement.getAttribute(\"data-step\"));\n          self.secondElement.setAttribute(\"data-min\", self.minuteElement.getAttribute(\"data-min\"));\n          self.secondElement.setAttribute(\"data-max\", self.minuteElement.getAttribute(\"data-max\"));\n          self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n          self.timeContainer.appendChild(secondInput);\n        }\n\n        if (!self.config.time_24hr) {\n          self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj ? self.hourElement.value : self.config.defaultHour) > 11)]);\n          self.amPM.title = self.l10n.toggleTitle;\n          self.amPM.tabIndex = -1;\n          self.timeContainer.appendChild(self.amPM);\n        }\n\n        return self.timeContainer;\n      }\n\n      function buildWeekdays() {\n        if (!self.weekdayContainer) self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");else clearNode(self.weekdayContainer);\n\n        for (var i = self.config.showMonths; i--;) {\n          var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n          self.weekdayContainer.appendChild(container);\n        }\n\n        updateWeekdays();\n        return self.weekdayContainer;\n      }\n\n      function updateWeekdays() {\n        var firstDayOfWeek = self.l10n.firstDayOfWeek;\n        var weekdays = self.l10n.weekdays.shorthand.concat();\n\n        if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n          weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek));\n        }\n\n        for (var i = self.config.showMonths; i--;) {\n          self.weekdayContainer.children[i].innerHTML = \"\\n      <span class=flatpickr-weekday>\\n        \" + weekdays.join(\"</span><span class=flatpickr-weekday>\") + \"\\n      </span>\\n      \";\n        }\n      }\n\n      function buildWeeks() {\n        self.calendarContainer.classList.add(\"hasWeeks\");\n        var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n        weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n        var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n        weekWrapper.appendChild(weekNumbers);\n        return {\n          weekWrapper: weekWrapper,\n          weekNumbers: weekNumbers\n        };\n      }\n\n      function changeMonth(value, is_offset) {\n        if (is_offset === void 0) {\n          is_offset = true;\n        }\n\n        var delta = is_offset ? value : value - self.currentMonth;\n        if (delta < 0 && self._hidePrevMonthArrow === true || delta > 0 && self._hideNextMonthArrow === true) return;\n        self.currentMonth += delta;\n\n        if (self.currentMonth < 0 || self.currentMonth > 11) {\n          self.currentYear += self.currentMonth > 11 ? 1 : -1;\n          self.currentMonth = (self.currentMonth + 12) % 12;\n          triggerEvent(\"onYearChange\");\n        }\n\n        buildDays();\n        triggerEvent(\"onMonthChange\");\n        updateNavigationCurrentMonth();\n      }\n\n      function clear(triggerChangeEvent) {\n        if (triggerChangeEvent === void 0) {\n          triggerChangeEvent = true;\n        }\n\n        self.input.value = \"\";\n        if (self.altInput !== undefined) self.altInput.value = \"\";\n        if (self.mobileInput !== undefined) self.mobileInput.value = \"\";\n        self.selectedDates = [];\n        self.latestSelectedDateObj = undefined;\n        self.showTimeInput = false;\n\n        if (self.config.enableTime === true) {\n          setDefaultHours();\n        }\n\n        self.redraw();\n        if (triggerChangeEvent) triggerEvent(\"onChange\");\n      }\n\n      function close() {\n        self.isOpen = false;\n\n        if (!self.isMobile) {\n          self.calendarContainer.classList.remove(\"open\");\n\n          self._input.classList.remove(\"active\");\n        }\n\n        triggerEvent(\"onClose\");\n      }\n\n      function destroy() {\n        if (self.config !== undefined) triggerEvent(\"onDestroy\");\n\n        for (var i = self._handlers.length; i--;) {\n          var h = self._handlers[i];\n          h.element.removeEventListener(h.event, h.handler, h.options);\n        }\n\n        self._handlers = [];\n\n        if (self.mobileInput) {\n          if (self.mobileInput.parentNode) self.mobileInput.parentNode.removeChild(self.mobileInput);\n          self.mobileInput = undefined;\n        } else if (self.calendarContainer && self.calendarContainer.parentNode) {\n          if (self.config.static && self.calendarContainer.parentNode) {\n            var wrapper = self.calendarContainer.parentNode;\n            wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n\n            if (wrapper.parentNode) {\n              while (wrapper.firstChild) {\n                wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n              }\n\n              wrapper.parentNode.removeChild(wrapper);\n            }\n          } else self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n        }\n\n        if (self.altInput) {\n          self.input.type = \"text\";\n          if (self.altInput.parentNode) self.altInput.parentNode.removeChild(self.altInput);\n          delete self.altInput;\n        }\n\n        if (self.input) {\n          self.input.type = self.input._type;\n          self.input.classList.remove(\"flatpickr-input\");\n          self.input.removeAttribute(\"readonly\");\n          self.input.value = \"\";\n        }\n\n        [\"_showTimeInput\", \"latestSelectedDateObj\", \"_hideNextMonthArrow\", \"_hidePrevMonthArrow\", \"__hideNextMonthArrow\", \"__hidePrevMonthArrow\", \"isMobile\", \"isOpen\", \"selectedDateElem\", \"minDateHasTime\", \"maxDateHasTime\", \"days\", \"daysContainer\", \"_input\", \"_positionElement\", \"innerContainer\", \"rContainer\", \"monthNav\", \"todayDateElem\", \"calendarContainer\", \"weekdayContainer\", \"prevMonthNav\", \"nextMonthNav\", \"currentMonthElement\", \"currentYearElement\", \"navigationCurrentMonth\", \"selectedDateElem\", \"config\"].forEach(function (k) {\n          try {\n            delete self[k];\n          } catch (_) {}\n        });\n      }\n\n      function isCalendarElem(elem) {\n        if (self.config.appendTo && self.config.appendTo.contains(elem)) return true;\n        return self.calendarContainer.contains(elem);\n      }\n\n      function documentClick(e) {\n        if (self.isOpen && !self.config.inline) {\n          var isCalendarElement = isCalendarElem(e.target);\n          var isInput = e.target === self.input || e.target === self.altInput || self.element.contains(e.target) || e.path && e.path.indexOf && (~e.path.indexOf(self.input) || ~e.path.indexOf(self.altInput));\n          var lostFocus = e.type === \"blur\" ? isInput && e.relatedTarget && !isCalendarElem(e.relatedTarget) : !isInput && !isCalendarElement;\n          var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n            return elem.contains(e.target);\n          });\n\n          if (lostFocus && isIgnored) {\n            self.close();\n\n            if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n              self.clear(false);\n              self.redraw();\n            }\n          }\n        }\n      }\n\n      function changeYear(newYear) {\n        if (!newYear || self.config.minDate && newYear < self.config.minDate.getFullYear() || self.config.maxDate && newYear > self.config.maxDate.getFullYear()) return;\n        var newYearNum = newYear,\n            isNewYear = self.currentYear !== newYearNum;\n        self.currentYear = newYearNum || self.currentYear;\n\n        if (self.config.maxDate && self.currentYear === self.config.maxDate.getFullYear()) {\n          self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n        } else if (self.config.minDate && self.currentYear === self.config.minDate.getFullYear()) {\n          self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n        }\n\n        if (isNewYear) {\n          self.redraw();\n          triggerEvent(\"onYearChange\");\n        }\n      }\n\n      function isEnabled(date, timeless) {\n        if (timeless === void 0) {\n          timeless = true;\n        }\n\n        var dateToCheck = self.parseDate(date, undefined, timeless);\n        if (self.config.minDate && dateToCheck && compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0 || self.config.maxDate && dateToCheck && compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0) return false;\n        if (self.config.enable.length === 0 && self.config.disable.length === 0) return true;\n        if (dateToCheck === undefined) return false;\n        var bool = self.config.enable.length > 0,\n            array = bool ? self.config.enable : self.config.disable;\n\n        for (var i = 0, d; i < array.length; i++) {\n          d = array[i];\n          if (typeof d === \"function\" && d(dateToCheck)) return bool;else if (d instanceof Date && dateToCheck !== undefined && d.getTime() === dateToCheck.getTime()) return bool;else if (typeof d === \"string\" && dateToCheck !== undefined) {\n            var parsed = self.parseDate(d, undefined, true);\n            return parsed && parsed.getTime() === dateToCheck.getTime() ? bool : !bool;\n          } else if (typeof d === \"object\" && dateToCheck !== undefined && d.from && d.to && dateToCheck.getTime() >= d.from.getTime() && dateToCheck.getTime() <= d.to.getTime()) return bool;\n        }\n\n        return !bool;\n      }\n\n      function isInView(elem) {\n        if (self.daysContainer !== undefined) return elem.className.indexOf(\"hidden\") === -1 && self.daysContainer.contains(elem);\n        return false;\n      }\n\n      function onKeyDown(e) {\n        var isInput = e.target === self._input;\n        var allowInput = self.config.allowInput;\n        var allowKeydown = self.isOpen && (!allowInput || !isInput);\n        var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n\n        if (e.keyCode === 13 && isInput) {\n          if (allowInput) {\n            self.setDate(self._input.value, true, e.target === self.altInput ? self.config.altFormat : self.config.dateFormat);\n            return e.target.blur();\n          } else self.open();\n        } else if (isCalendarElem(e.target) || allowKeydown || allowInlineKeydown) {\n          var isTimeObj = !!self.timeContainer && self.timeContainer.contains(e.target);\n\n          switch (e.keyCode) {\n            case 13:\n              if (isTimeObj) updateTime();else selectDate(e);\n              break;\n\n            case 27:\n              e.preventDefault();\n              focusAndClose();\n              break;\n\n            case 8:\n            case 46:\n              if (isInput && !self.config.allowInput) {\n                e.preventDefault();\n                self.clear();\n              }\n\n              break;\n\n            case 37:\n            case 39:\n              if (!isTimeObj) {\n                e.preventDefault();\n\n                if (self.daysContainer !== undefined && (allowInput === false || isInView(document.activeElement))) {\n                  var _delta = e.keyCode === 39 ? 1 : -1;\n\n                  if (!e.ctrlKey) focusOnDay(undefined, _delta);else {\n                    changeMonth(_delta);\n                    focusOnDay(getFirstAvailableDay(1), 0);\n                  }\n                }\n              } else if (self.hourElement) self.hourElement.focus();\n\n              break;\n\n            case 38:\n            case 40:\n              e.preventDefault();\n              var delta = e.keyCode === 40 ? 1 : -1;\n\n              if (self.daysContainer && e.target.$i !== undefined) {\n                if (e.ctrlKey) {\n                  changeYear(self.currentYear - delta);\n                  focusOnDay(getFirstAvailableDay(1), 0);\n                } else if (!isTimeObj) focusOnDay(undefined, delta * 7);\n              } else if (self.config.enableTime) {\n                if (!isTimeObj && self.hourElement) self.hourElement.focus();\n                updateTime(e);\n\n                self._debouncedChange();\n              }\n\n              break;\n\n            case 9:\n              if (!isTimeObj) {\n                self.element.focus();\n                break;\n              }\n\n              var elems = [self.hourElement, self.minuteElement, self.secondElement, self.amPM].filter(function (x) {\n                return x;\n              });\n              var i = elems.indexOf(e.target);\n\n              if (i !== -1) {\n                var target = elems[i + (e.shiftKey ? -1 : 1)];\n\n                if (target !== undefined) {\n                  e.preventDefault();\n                  target.focus();\n                } else {\n                  self.element.focus();\n                }\n              }\n\n              break;\n\n            default:\n              break;\n          }\n        }\n\n        if (self.amPM !== undefined && e.target === self.amPM) {\n          switch (e.key) {\n            case self.l10n.amPM[0].charAt(0):\n            case self.l10n.amPM[0].charAt(0).toLowerCase():\n              self.amPM.textContent = self.l10n.amPM[0];\n              setHoursFromInputs();\n              updateValue();\n              break;\n\n            case self.l10n.amPM[1].charAt(0):\n            case self.l10n.amPM[1].charAt(0).toLowerCase():\n              self.amPM.textContent = self.l10n.amPM[1];\n              setHoursFromInputs();\n              updateValue();\n              break;\n          }\n        }\n\n        triggerEvent(\"onKeyDown\", e);\n      }\n\n      function onMouseOver(elem) {\n        if (self.selectedDates.length !== 1 || elem && (!elem.classList.contains(\"flatpickr-day\") || elem.classList.contains(\"disabled\"))) return;\n        var hoverDate = elem ? elem.dateObj.getTime() : self.days.firstElementChild.dateObj.getTime(),\n            initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(),\n            rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()),\n            rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime()),\n            lastDate = self.daysContainer.lastChild.lastChild.dateObj.getTime();\n        var containsDisabled = false;\n        var minRange = 0,\n            maxRange = 0;\n\n        for (var t = rangeStartDate; t < lastDate; t += duration.DAY) {\n          if (!isEnabled(new Date(t), true)) {\n            containsDisabled = containsDisabled || t > rangeStartDate && t < rangeEndDate;\n            if (t < initialDate && (!minRange || t > minRange)) minRange = t;else if (t > initialDate && (!maxRange || t < maxRange)) maxRange = t;\n          }\n        }\n\n        for (var m = 0; m < self.config.showMonths; m++) {\n          var month = self.daysContainer.children[m];\n          var prevMonth = self.daysContainer.children[m - 1];\n\n          var _loop = function _loop(i, l) {\n            var dayElem = month.children[i],\n                date = dayElem.dateObj;\n            var timestamp = date.getTime();\n            var outOfRange = minRange > 0 && timestamp < minRange || maxRange > 0 && timestamp > maxRange;\n\n            if (outOfRange) {\n              dayElem.classList.add(\"notAllowed\");\n              [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n                dayElem.classList.remove(c);\n              });\n              return \"continue\";\n            } else if (containsDisabled && !outOfRange) return \"continue\";\n\n            [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n              dayElem.classList.remove(c);\n            });\n\n            if (elem !== undefined) {\n              elem.classList.add(hoverDate < self.selectedDates[0].getTime() ? \"startRange\" : \"endRange\");\n\n              if (month.contains(elem) || !(m > 0 && prevMonth && prevMonth.lastChild.dateObj.getTime() >= timestamp)) {\n                if (initialDate < hoverDate && timestamp === initialDate) dayElem.classList.add(\"startRange\");else if (initialDate > hoverDate && timestamp === initialDate) dayElem.classList.add(\"endRange\");\n                if (timestamp >= minRange && (maxRange === 0 || timestamp <= maxRange) && isBetween(timestamp, initialDate, hoverDate)) dayElem.classList.add(\"inRange\");\n              }\n            }\n          };\n\n          for (var i = 0, l = month.children.length; i < l; i++) {\n            var _ret = _loop(i, l);\n\n            if (_ret === \"continue\") continue;\n          }\n        }\n      }\n\n      function onResize() {\n        if (self.isOpen && !self.config.static && !self.config.inline) positionCalendar();\n      }\n\n      function open(e, positionElement) {\n        if (positionElement === void 0) {\n          positionElement = self._positionElement;\n        }\n\n        if (self.isMobile === true) {\n          if (e) {\n            e.preventDefault();\n            e.target && e.target.blur();\n          }\n\n          if (self.mobileInput !== undefined) {\n            self.mobileInput.focus();\n            self.mobileInput.click();\n          }\n\n          triggerEvent(\"onOpen\");\n          return;\n        }\n\n        if (self._input.disabled || self.config.inline) return;\n        var wasOpen = self.isOpen;\n        self.isOpen = true;\n\n        if (!wasOpen) {\n          self.calendarContainer.classList.add(\"open\");\n\n          self._input.classList.add(\"active\");\n\n          triggerEvent(\"onOpen\");\n          positionCalendar(positionElement);\n        }\n\n        if (self.config.enableTime === true && self.config.noCalendar === true) {\n          if (self.selectedDates.length === 0) {\n            self.setDate(self.config.minDate !== undefined ? new Date(self.config.minDate.getTime()) : new Date(), false);\n            setDefaultHours();\n            updateValue();\n          }\n\n          if (self.config.allowInput === false && (e === undefined || !self.timeContainer.contains(e.relatedTarget))) {\n            setTimeout(function () {\n              return self.hourElement.select();\n            }, 50);\n          }\n        }\n      }\n\n      function minMaxDateSetter(type) {\n        return function (date) {\n          var dateObj = self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat);\n          var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n\n          if (dateObj !== undefined) {\n            self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] = dateObj.getHours() > 0 || dateObj.getMinutes() > 0 || dateObj.getSeconds() > 0;\n          }\n\n          if (self.selectedDates) {\n            self.selectedDates = self.selectedDates.filter(function (d) {\n              return isEnabled(d);\n            });\n            if (!self.selectedDates.length && type === \"min\") setHoursFromDate(dateObj);\n            updateValue();\n          }\n\n          if (self.daysContainer) {\n            redraw();\n            if (dateObj !== undefined) self.currentYearElement[type] = dateObj.getFullYear().toString();else self.currentYearElement.removeAttribute(type);\n            self.currentYearElement.disabled = !!inverseDateObj && dateObj !== undefined && inverseDateObj.getFullYear() === dateObj.getFullYear();\n          }\n        };\n      }\n\n      function parseConfig() {\n        var boolOpts = [\"wrap\", \"weekNumbers\", \"allowInput\", \"clickOpens\", \"time_24hr\", \"enableTime\", \"noCalendar\", \"altInput\", \"shorthandCurrentMonth\", \"inline\", \"static\", \"enableSeconds\", \"disableMobile\"];\n        var userConfig = Object.assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));\n        var formats$$1 = {};\n        self.config.parseDate = userConfig.parseDate;\n        self.config.formatDate = userConfig.formatDate;\n        Object.defineProperty(self.config, \"enable\", {\n          get: function get() {\n            return self.config._enable;\n          },\n          set: function set(dates) {\n            self.config._enable = parseDateRules(dates);\n          }\n        });\n        Object.defineProperty(self.config, \"disable\", {\n          get: function get() {\n            return self.config._disable;\n          },\n          set: function set(dates) {\n            self.config._disable = parseDateRules(dates);\n          }\n        });\n        var timeMode = userConfig.mode === \"time\";\n\n        if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n          formats$$1.dateFormat = userConfig.noCalendar || timeMode ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\") : flatpickr.defaultConfig.dateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n        }\n\n        if (userConfig.altInput && (userConfig.enableTime || timeMode) && !userConfig.altFormat) {\n          formats$$1.altFormat = userConfig.noCalendar || timeMode ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\") : flatpickr.defaultConfig.altFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n        }\n\n        Object.defineProperty(self.config, \"minDate\", {\n          get: function get() {\n            return self.config._minDate;\n          },\n          set: minMaxDateSetter(\"min\")\n        });\n        Object.defineProperty(self.config, \"maxDate\", {\n          get: function get() {\n            return self.config._maxDate;\n          },\n          set: minMaxDateSetter(\"max\")\n        });\n\n        var minMaxTimeSetter = function minMaxTimeSetter(type) {\n          return function (val) {\n            self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i\");\n          };\n        };\n\n        Object.defineProperty(self.config, \"minTime\", {\n          get: function get() {\n            return self.config._minTime;\n          },\n          set: minMaxTimeSetter(\"min\")\n        });\n        Object.defineProperty(self.config, \"maxTime\", {\n          get: function get() {\n            return self.config._maxTime;\n          },\n          set: minMaxTimeSetter(\"max\")\n        });\n\n        if (userConfig.mode === \"time\") {\n          self.config.noCalendar = true;\n          self.config.enableTime = true;\n        }\n\n        Object.assign(self.config, formats$$1, userConfig);\n\n        for (var i = 0; i < boolOpts.length; i++) {\n          self.config[boolOpts[i]] = self.config[boolOpts[i]] === true || self.config[boolOpts[i]] === \"true\";\n        }\n\n        HOOKS.filter(function (hook) {\n          return self.config[hook] !== undefined;\n        }).forEach(function (hook) {\n          self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n        });\n        self.isMobile = !self.config.disableMobile && !self.config.inline && self.config.mode === \"single\" && !self.config.disable.length && !self.config.enable.length && !self.config.weekNumbers && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n        for (var _i = 0; _i < self.config.plugins.length; _i++) {\n          var pluginConf = self.config.plugins[_i](self) || {};\n\n          for (var key in pluginConf) {\n            if (HOOKS.indexOf(key) > -1) {\n              self.config[key] = arrayify(pluginConf[key]).map(bindToInstance).concat(self.config[key]);\n            } else if (typeof userConfig[key] === \"undefined\") self.config[key] = pluginConf[key];\n          }\n        }\n\n        triggerEvent(\"onParseConfig\");\n      }\n\n      function setupLocale() {\n        if (typeof self.config.locale !== \"object\" && typeof flatpickr.l10ns[self.config.locale] === \"undefined\") self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n        self.l10n = Object.assign({}, flatpickr.l10ns.default, typeof self.config.locale === \"object\" ? self.config.locale : self.config.locale !== \"default\" ? flatpickr.l10ns[self.config.locale] : undefined);\n        tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n        self.formatDate = createDateFormatter(self);\n        self.parseDate = createDateParser({\n          config: self.config,\n          l10n: self.l10n\n        });\n      }\n\n      function positionCalendar(customPositionElement) {\n        if (self.calendarContainer === undefined) return;\n        triggerEvent(\"onPreCalendarPosition\");\n        var positionElement = customPositionElement || self._positionElement;\n        var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, function (acc, child) {\n          return acc + child.offsetHeight;\n        }, 0),\n            calendarWidth = self.calendarContainer.offsetWidth,\n            configPos = self.config.position.split(\" \"),\n            configPosVertical = configPos[0],\n            configPosHorizontal = configPos.length > 1 ? configPos[1] : null,\n            inputBounds = positionElement.getBoundingClientRect(),\n            distanceFromBottom = window.innerHeight - inputBounds.bottom,\n            showOnTop = configPosVertical === \"above\" || configPosVertical !== \"below\" && distanceFromBottom < calendarHeight && inputBounds.top > calendarHeight;\n        var top = window.pageYOffset + inputBounds.top + (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n        toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n        toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n        if (self.config.inline) return;\n        var left = window.pageXOffset + inputBounds.left - (configPosHorizontal != null && configPosHorizontal === \"center\" ? (calendarWidth - inputBounds.width) / 2 : 0);\n        var right = window.document.body.offsetWidth - inputBounds.right;\n        var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n        toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n        if (self.config.static) return;\n        self.calendarContainer.style.top = top + \"px\";\n\n        if (!rightMost) {\n          self.calendarContainer.style.left = left + \"px\";\n          self.calendarContainer.style.right = \"auto\";\n        } else {\n          self.calendarContainer.style.left = \"auto\";\n          self.calendarContainer.style.right = right + \"px\";\n        }\n      }\n\n      function redraw() {\n        if (self.config.noCalendar || self.isMobile) return;\n        updateNavigationCurrentMonth();\n        buildDays();\n      }\n\n      function focusAndClose() {\n        self._input.focus();\n\n        if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 || navigator.msMaxTouchPoints !== undefined) {\n          setTimeout(self.close, 0);\n        } else {\n          self.close();\n        }\n      }\n\n      function selectDate(e) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        var isSelectable = function isSelectable(day) {\n          return day.classList && day.classList.contains(\"flatpickr-day\") && !day.classList.contains(\"disabled\") && !day.classList.contains(\"notAllowed\");\n        };\n\n        var t = findParent(e.target, isSelectable);\n        if (t === undefined) return;\n        var target = t;\n        var selectedDate = self.latestSelectedDateObj = new Date(target.dateObj.getTime());\n        var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth || selectedDate.getMonth() > self.currentMonth + self.config.showMonths - 1) && self.config.mode !== \"range\";\n        self.selectedDateElem = target;\n        if (self.config.mode === \"single\") self.selectedDates = [selectedDate];else if (self.config.mode === \"multiple\") {\n          var selectedIndex = isDateSelected(selectedDate);\n          if (selectedIndex) self.selectedDates.splice(parseInt(selectedIndex), 1);else self.selectedDates.push(selectedDate);\n        } else if (self.config.mode === \"range\") {\n          if (self.selectedDates.length === 2) self.clear(false);\n          self.selectedDates.push(selectedDate);\n          if (compareDates(selectedDate, self.selectedDates[0], true) !== 0) self.selectedDates.sort(function (a, b) {\n            return a.getTime() - b.getTime();\n          });\n        }\n        setHoursFromInputs();\n\n        if (shouldChangeMonth) {\n          var isNewYear = self.currentYear !== selectedDate.getFullYear();\n          self.currentYear = selectedDate.getFullYear();\n          self.currentMonth = selectedDate.getMonth();\n          if (isNewYear) triggerEvent(\"onYearChange\");\n          triggerEvent(\"onMonthChange\");\n        }\n\n        updateNavigationCurrentMonth();\n        buildDays();\n        updateValue();\n        if (self.config.enableTime) setTimeout(function () {\n          return self.showTimeInput = true;\n        }, 50);\n        if (!shouldChangeMonth && self.config.mode !== \"range\" && self.config.showMonths === 1) focusOnDayElem(target);else self.selectedDateElem && self.selectedDateElem.focus();\n        if (self.hourElement !== undefined) setTimeout(function () {\n          return self.hourElement !== undefined && self.hourElement.select();\n        }, 451);\n\n        if (self.config.closeOnSelect) {\n          var single = self.config.mode === \"single\" && !self.config.enableTime;\n          var range = self.config.mode === \"range\" && self.selectedDates.length === 2 && !self.config.enableTime;\n\n          if (single || range) {\n            focusAndClose();\n          }\n        }\n\n        triggerChange();\n      }\n\n      var CALLBACKS = {\n        locale: [setupLocale, updateWeekdays],\n        showMonths: [buildMonths, setCalendarWidth, buildWeekdays]\n      };\n\n      function set(option, value) {\n        if (option !== null && typeof option === \"object\") Object.assign(self.config, option);else {\n          self.config[option] = value;\n          if (CALLBACKS[option] !== undefined) CALLBACKS[option].forEach(function (x) {\n            return x();\n          });else if (HOOKS.indexOf(option) > -1) self.config[option] = arrayify(value);\n        }\n        self.redraw();\n        jumpToDate();\n        updateValue(false);\n      }\n\n      function setSelectedDate(inputDate, format) {\n        var dates = [];\n        if (inputDate instanceof Array) dates = inputDate.map(function (d) {\n          return self.parseDate(d, format);\n        });else if (inputDate instanceof Date || typeof inputDate === \"number\") dates = [self.parseDate(inputDate, format)];else if (typeof inputDate === \"string\") {\n          switch (self.config.mode) {\n            case \"single\":\n            case \"time\":\n              dates = [self.parseDate(inputDate, format)];\n              break;\n\n            case \"multiple\":\n              dates = inputDate.split(self.config.conjunction).map(function (date) {\n                return self.parseDate(date, format);\n              });\n              break;\n\n            case \"range\":\n              dates = inputDate.split(self.l10n.rangeSeparator).map(function (date) {\n                return self.parseDate(date, format);\n              });\n              break;\n\n            default:\n              break;\n          }\n        } else self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n        self.selectedDates = dates.filter(function (d) {\n          return d instanceof Date && isEnabled(d, false);\n        });\n        if (self.config.mode === \"range\") self.selectedDates.sort(function (a, b) {\n          return a.getTime() - b.getTime();\n        });\n      }\n\n      function setDate(date, triggerChange, format) {\n        if (triggerChange === void 0) {\n          triggerChange = false;\n        }\n\n        if (format === void 0) {\n          format = self.config.dateFormat;\n        }\n\n        if (date !== 0 && !date || date instanceof Array && date.length === 0) return self.clear(triggerChange);\n        setSelectedDate(date, format);\n        self.showTimeInput = self.selectedDates.length > 0;\n        self.latestSelectedDateObj = self.selectedDates[0];\n        self.redraw();\n        jumpToDate();\n        setHoursFromDate();\n        updateValue(triggerChange);\n        if (triggerChange) triggerEvent(\"onChange\");\n      }\n\n      function parseDateRules(arr) {\n        return arr.slice().map(function (rule) {\n          if (typeof rule === \"string\" || typeof rule === \"number\" || rule instanceof Date) {\n            return self.parseDate(rule, undefined, true);\n          } else if (rule && typeof rule === \"object\" && rule.from && rule.to) return {\n            from: self.parseDate(rule.from, undefined),\n            to: self.parseDate(rule.to, undefined)\n          };\n\n          return rule;\n        }).filter(function (x) {\n          return x;\n        });\n      }\n\n      function setupDates() {\n        self.selectedDates = [];\n        self.now = self.parseDate(self.config.now) || new Date();\n        var preloadedDate = self.config.defaultDate || ((self.input.nodeName === \"INPUT\" || self.input.nodeName === \"TEXTAREA\") && self.input.placeholder && self.input.value === self.input.placeholder ? null : self.input.value);\n        if (preloadedDate) setSelectedDate(preloadedDate, self.config.dateFormat);\n        var initialDate = self.selectedDates.length > 0 ? self.selectedDates[0] : self.config.minDate && self.config.minDate.getTime() > self.now.getTime() ? self.config.minDate : self.config.maxDate && self.config.maxDate.getTime() < self.now.getTime() ? self.config.maxDate : self.now;\n        self.currentYear = initialDate.getFullYear();\n        self.currentMonth = initialDate.getMonth();\n        if (self.selectedDates.length > 0) self.latestSelectedDateObj = self.selectedDates[0];\n        if (self.config.minTime !== undefined) self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n        if (self.config.maxTime !== undefined) self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n        self.minDateHasTime = !!self.config.minDate && (self.config.minDate.getHours() > 0 || self.config.minDate.getMinutes() > 0 || self.config.minDate.getSeconds() > 0);\n        self.maxDateHasTime = !!self.config.maxDate && (self.config.maxDate.getHours() > 0 || self.config.maxDate.getMinutes() > 0 || self.config.maxDate.getSeconds() > 0);\n        Object.defineProperty(self, \"showTimeInput\", {\n          get: function get() {\n            return self._showTimeInput;\n          },\n          set: function set(bool) {\n            self._showTimeInput = bool;\n            if (self.calendarContainer) toggleClass(self.calendarContainer, \"showTimeInput\", bool);\n            self.isOpen && positionCalendar();\n          }\n        });\n      }\n\n      function setupInputs() {\n        self.input = self.config.wrap ? element.querySelector(\"[data-input]\") : element;\n\n        if (!self.input) {\n          self.config.errorHandler(new Error(\"Invalid input element specified\"));\n          return;\n        }\n\n        self.input._type = self.input.type;\n        self.input.type = \"text\";\n        self.input.classList.add(\"flatpickr-input\");\n        self._input = self.input;\n\n        if (self.config.altInput) {\n          self.altInput = createElement(self.input.nodeName, self.input.className + \" \" + self.config.altInputClass);\n          self._input = self.altInput;\n          self.altInput.placeholder = self.input.placeholder;\n          self.altInput.disabled = self.input.disabled;\n          self.altInput.required = self.input.required;\n          self.altInput.tabIndex = self.input.tabIndex;\n          self.altInput.type = \"text\";\n          self.input.setAttribute(\"type\", \"hidden\");\n          if (!self.config.static && self.input.parentNode) self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n        }\n\n        if (!self.config.allowInput) self._input.setAttribute(\"readonly\", \"readonly\");\n        self._positionElement = self.config.positionElement || self._input;\n      }\n\n      function setupMobile() {\n        var inputType = self.config.enableTime ? self.config.noCalendar ? \"time\" : \"datetime-local\" : \"date\";\n        self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n        self.mobileInput.step = self.input.getAttribute(\"step\") || \"any\";\n        self.mobileInput.tabIndex = 1;\n        self.mobileInput.type = inputType;\n        self.mobileInput.disabled = self.input.disabled;\n        self.mobileInput.required = self.input.required;\n        self.mobileInput.placeholder = self.input.placeholder;\n        self.mobileFormatStr = inputType === \"datetime-local\" ? \"Y-m-d\\\\TH:i:S\" : inputType === \"date\" ? \"Y-m-d\" : \"H:i:S\";\n\n        if (self.selectedDates.length > 0) {\n          self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n        }\n\n        if (self.config.minDate) self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n        if (self.config.maxDate) self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n        self.input.type = \"hidden\";\n        if (self.altInput !== undefined) self.altInput.type = \"hidden\";\n\n        try {\n          if (self.input.parentNode) self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n        } catch (_a) {}\n\n        bind(self.mobileInput, \"change\", function (e) {\n          self.setDate(e.target.value, false, self.mobileFormatStr);\n          triggerEvent(\"onChange\");\n          triggerEvent(\"onClose\");\n        });\n      }\n\n      function toggle(e) {\n        if (self.isOpen === true) return self.close();\n        self.open(e);\n      }\n\n      function triggerEvent(event, data) {\n        if (self.config === undefined) return;\n        var hooks = self.config[event];\n\n        if (hooks !== undefined && hooks.length > 0) {\n          for (var i = 0; hooks[i] && i < hooks.length; i++) {\n            hooks[i](self.selectedDates, self.input.value, self, data);\n          }\n        }\n\n        if (event === \"onChange\") {\n          self.input.dispatchEvent(createEvent(\"change\"));\n          self.input.dispatchEvent(createEvent(\"input\"));\n        }\n      }\n\n      function createEvent(name) {\n        var e = document.createEvent(\"Event\");\n        e.initEvent(name, true, true);\n        return e;\n      }\n\n      function isDateSelected(date) {\n        for (var i = 0; i < self.selectedDates.length; i++) {\n          if (compareDates(self.selectedDates[i], date) === 0) return \"\" + i;\n        }\n\n        return false;\n      }\n\n      function isDateInRange(date) {\n        if (self.config.mode !== \"range\" || self.selectedDates.length < 2) return false;\n        return compareDates(date, self.selectedDates[0]) >= 0 && compareDates(date, self.selectedDates[1]) <= 0;\n      }\n\n      function updateNavigationCurrentMonth() {\n        if (self.config.noCalendar || self.isMobile || !self.monthNav) return;\n        self.yearElements.forEach(function (yearElement, i) {\n          var d = new Date(self.currentYear, self.currentMonth, 1);\n          d.setMonth(self.currentMonth + i);\n          self.monthElements[i].textContent = monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n          yearElement.value = d.getFullYear().toString();\n        });\n        self._hidePrevMonthArrow = self.config.minDate !== undefined && (self.currentYear === self.config.minDate.getFullYear() ? self.currentMonth <= self.config.minDate.getMonth() : self.currentYear < self.config.minDate.getFullYear());\n        self._hideNextMonthArrow = self.config.maxDate !== undefined && (self.currentYear === self.config.maxDate.getFullYear() ? self.currentMonth + 1 > self.config.maxDate.getMonth() : self.currentYear > self.config.maxDate.getFullYear());\n      }\n\n      function getDateStr(format) {\n        return self.selectedDates.map(function (dObj) {\n          return self.formatDate(dObj, format);\n        }).filter(function (d, i, arr) {\n          return self.config.mode !== \"range\" || self.config.enableTime || arr.indexOf(d) === i;\n        }).join(self.config.mode !== \"range\" ? self.config.conjunction : self.l10n.rangeSeparator);\n      }\n\n      function updateValue(triggerChange) {\n        if (triggerChange === void 0) {\n          triggerChange = true;\n        }\n\n        if (self.selectedDates.length === 0) return self.clear(triggerChange);\n\n        if (self.mobileInput !== undefined && self.mobileFormatStr) {\n          self.mobileInput.value = self.latestSelectedDateObj !== undefined ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr) : \"\";\n        }\n\n        self.input.value = getDateStr(self.config.dateFormat);\n\n        if (self.altInput !== undefined) {\n          self.altInput.value = getDateStr(self.config.altFormat);\n        }\n\n        if (triggerChange !== false) triggerEvent(\"onValueUpdate\");\n      }\n\n      function onMonthNavClick(e) {\n        e.preventDefault();\n        var isPrevMonth = self.prevMonthNav.contains(e.target);\n        var isNextMonth = self.nextMonthNav.contains(e.target);\n\n        if (isPrevMonth || isNextMonth) {\n          changeMonth(isPrevMonth ? -1 : 1);\n        } else if (self.yearElements.indexOf(e.target) >= 0) {\n          e.target.select();\n        } else if (e.target.classList.contains(\"arrowUp\")) {\n          self.changeYear(self.currentYear + 1);\n        } else if (e.target.classList.contains(\"arrowDown\")) {\n          self.changeYear(self.currentYear - 1);\n        }\n      }\n\n      function timeWrapper(e) {\n        e.preventDefault();\n        var isKeyDown = e.type === \"keydown\",\n            input = e.target;\n\n        if (self.amPM !== undefined && e.target === self.amPM) {\n          self.amPM.textContent = self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n        }\n\n        var min = parseFloat(input.getAttribute(\"data-min\")),\n            max = parseFloat(input.getAttribute(\"data-max\")),\n            step = parseFloat(input.getAttribute(\"data-step\")),\n            curValue = parseInt(input.value, 10),\n            delta = e.delta || (isKeyDown ? e.which === 38 ? 1 : -1 : 0);\n        var newValue = curValue + step * delta;\n\n        if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n          var isHourElem = input === self.hourElement,\n              isMinuteElem = input === self.minuteElement;\n\n          if (newValue < min) {\n            newValue = max + newValue + int(!isHourElem) + (int(isHourElem) && int(!self.amPM));\n            if (isMinuteElem) incrementNumInput(undefined, -1, self.hourElement);\n          } else if (newValue > max) {\n            newValue = input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n            if (isMinuteElem) incrementNumInput(undefined, 1, self.hourElement);\n          }\n\n          if (self.amPM && isHourElem && (step === 1 ? newValue + curValue === 23 : Math.abs(newValue - curValue) > step)) {\n            self.amPM.textContent = self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n          }\n\n          input.value = pad(newValue);\n        }\n      }\n\n      init();\n      return self;\n    }\n\n    function _flatpickr(nodeList, config) {\n      var nodes = Array.prototype.slice.call(nodeList);\n      var instances = [];\n\n      for (var i = 0; i < nodes.length; i++) {\n        var node = nodes[i];\n\n        try {\n          if (node.getAttribute(\"data-fp-omit\") !== null) continue;\n\n          if (node._flatpickr !== undefined) {\n            node._flatpickr.destroy();\n\n            node._flatpickr = undefined;\n          }\n\n          node._flatpickr = FlatpickrInstance(node, config || {});\n          instances.push(node._flatpickr);\n        } catch (e) {\n          console.error(e);\n        }\n      }\n\n      return instances.length === 1 ? instances[0] : instances;\n    }\n\n    if (typeof HTMLElement !== \"undefined\") {\n      HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n        return _flatpickr(this, config);\n      };\n\n      HTMLElement.prototype.flatpickr = function (config) {\n        return _flatpickr([this], config);\n      };\n    }\n\n    var flatpickr = function flatpickr(selector, config) {\n      if (selector instanceof NodeList) return _flatpickr(selector, config);else if (typeof selector === \"string\") return _flatpickr(window.document.querySelectorAll(selector), config);\n      return _flatpickr([selector], config);\n    };\n\n    flatpickr.defaultConfig = defaults;\n    flatpickr.l10ns = {\n      en: Object.assign({}, english),\n      default: Object.assign({}, english)\n    };\n\n    flatpickr.localize = function (l10n) {\n      flatpickr.l10ns.default = Object.assign({}, flatpickr.l10ns.default, l10n);\n    };\n\n    flatpickr.setDefaults = function (config) {\n      flatpickr.defaultConfig = Object.assign({}, flatpickr.defaultConfig, config);\n    };\n\n    flatpickr.parseDate = createDateParser({});\n    flatpickr.formatDate = createDateFormatter({});\n    flatpickr.compareDates = compareDates;\n\n    if (typeof jQuery !== \"undefined\") {\n      jQuery.fn.flatpickr = function (config) {\n        return _flatpickr(this, config);\n      };\n    }\n\n    Date.prototype.fp_incr = function (days) {\n      return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n    };\n\n    if (typeof window !== \"undefined\") {\n      window.flatpickr = flatpickr;\n    }\n\n    return flatpickr;\n\n})));\n","import Polyglot from 'node-polyglot'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport find from 'lodash/find'\r\nimport capitalize from 'lodash/capitalize'\r\n\r\n// import manually the language files we need\r\n// TODO: do this dynamically\r\nimport 'moment/locale/fr'\r\nimport 'moment/locale/de'\r\nimport moment from 'moment'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { localeEquals } from 'pmt-utils/locale'\r\n\r\nimport { retrieveMessages } from './actions'\r\nimport { getLocaleFromStorage } from './storage'\r\n\r\n// could be dynamically imported if we want to reduce the bundle size\r\nimport localizeFlatpickr from 'pmt-ui/Calendar/localizeFlatpickr'\r\n\r\n// force locale to be used, can be: 'debug', fr, en, etc\r\nexport const QUERY_PARAM_LOCALE = 'l'\r\n\r\nexport const getDefaultBrowserLocale = () => {\r\n  // Define user's language. Different browsers have the user locale defined\r\n  // on different fields on the `navigator` object, so we make sure to account\r\n  // for these different by checking all of them\r\n  const language =\r\n    (navigator.languages && navigator.languages[0]) || navigator.language || navigator.userLanguage\r\n\r\n  return language\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst DEFAULT_OPTIONS = {\r\n  defaultLocale: 'en',\r\n  calendar: false,\r\n}\r\n\r\nlet _locale = null\r\nlet _texts = null\r\n\r\n//\r\n// - calendar -> tr flatpickr ?\r\n//\r\nlet _options = DEFAULT_OPTIONS\r\n\r\n// create an instance of the Polyglot class, which you will use for translation.\r\n// Polyglot is class-based so you can maintain different sets of phrases at the same time, possibly\r\n// in different locales. This is very useful for example when serving requests with Express,\r\n// because each request may have a different locale, and you don’t want concurrent requests to\r\n// clobber each other’s phrases.\r\nlet _polyglot = new Polyglot({ locale: getDefaultBrowserLocale() })\r\n\r\nexport const getPolyglot = () => _polyglot\r\n\r\nexport const setPolyglot = polyglot => {\r\n  _polyglot = polyglot\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst getLanguageWithoutRegionCode = language => {\r\n  if (isEmpty(language)) {\r\n    return 'en'\r\n  }\r\n\r\n  // Split locales with a region code\r\n  const languageWithoutRegionCode = language.toLowerCase().split(/[_-]+/)[0]\r\n\r\n  return languageWithoutRegionCode\r\n}\r\n\r\nexport const getCurrentLanguageWithoutRegionCode = () => {\r\n  return getLanguageWithoutRegionCode(_locale)\r\n}\r\n\r\nexport const isSupportedLocale = locale =>\r\n  find(_options.locales, supportedLocale => localeEquals(supportedLocale, locale))\r\n\r\nexport const getCurrentSupportedLanguage = () => {\r\n  let language = getLanguageWithoutRegionCode(_locale)\r\n  if (!isSupportedLocale(language)) {\r\n    language = _options.defaultLocale\r\n  }\r\n  return language\r\n}\r\n\r\nexport const getDefaultLocale = () => {\r\n  let locale = getDefaultBrowserLocale()\r\n\r\n  const queryLocale = getQueryParam(QUERY_PARAM_LOCALE)\r\n  if (!isEmpty(queryLocale) && isSupportedLocale(queryLocale)) {\r\n    locale = queryLocale\r\n  } else {\r\n    // not in query param, search in storage\r\n    const storageLocale = getLocaleFromStorage()\r\n    if (!isEmpty(storageLocale)) {\r\n      locale = storageLocale\r\n    }\r\n  }\r\n\r\n  return locale\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const configureI18n = (options = {}) => {\r\n  // set options\r\n  _options = { ...DEFAULT_OPTIONS, ...options }\r\n\r\n  if (_options.disable) {\r\n    return\r\n  }\r\n\r\n  if (!globalThis.Intl) {\r\n    console.error('Required intl Polyfill')\r\n  }\r\n\r\n  let locale = getDefaultLocale()\r\n  setLocale(locale)\r\n}\r\n\r\nexport const getSupportedLocales = () => _options.locales\r\n\r\n/**\r\n * \"fr_CH\" => \"fr-CH\"\r\n *\r\n * We saw some Restaurants with fr-FR (probably because it's the default value) and some with fr_FR (probably value provided by BOV1)\r\n */\r\nexport const cleanLocale = locale => {\r\n  if (!locale) {\r\n    return null\r\n  }\r\n  return locale.replace('_', '-')\r\n}\r\n\r\n/**\r\n * \"fr-CH\" => \"Français (Suisse)\"\r\n */\r\nexport const getLocaleLabel = value => {\r\n  try {\r\n    const displayNamesLanguage = new Intl.DisplayNames([getLocale()], { type: 'language' })\r\n    const displayNamesRegion = new Intl.DisplayNames([getLocale()], { type: 'region' })\r\n\r\n    const cleanedLocale = cleanLocale(value)\r\n    if (!cleanedLocale) {\r\n      return value\r\n    }\r\n\r\n    const parts = cleanedLocale.split('-')\r\n    const language = parts[0]\r\n    const region = parts[1]\r\n    if (region) {\r\n      return (\r\n        capitalize(displayNamesLanguage.of(language)) +\r\n        ' (' +\r\n        capitalize(displayNamesRegion.of(region)) +\r\n        ')'\r\n      )\r\n    } else {\r\n      return capitalize(displayNamesLanguage.of(language))\r\n    }\r\n  } catch (e) {\r\n    console.error(e)\r\n    return value\r\n  }\r\n}\r\n\r\nexport const getSupportedLocalesOptions = () =>\r\n  getSupportedLocales().map(locale => ({\r\n    value: locale,\r\n    label: getLocaleLabel(locale),\r\n  }))\r\n\r\nexport const setTexts = (apiConsumerTexts, restaurantCustomTexts) => {\r\n  _texts = {\r\n    ...(apiConsumerTexts || {}),\r\n    ...(restaurantCustomTexts?.texts || {}),\r\n  }\r\n}\r\n\r\nexport const setLocale = locale => {\r\n  _locale = locale\r\n\r\n  let language = getLanguageWithoutRegionCode(locale)\r\n  if (!isSupportedLocale(language)) {\r\n    language = _options.defaultLocale\r\n  }\r\n\r\n  if (typeof document !== 'undefined' && document.documentElement) {\r\n    document.documentElement.lang = language\r\n  }\r\n\r\n  const optionsFR = {\r\n    longDateFormat: {\r\n      LT: 'HH[h]mm', // to have 20h00 and not 20:00 in French\r\n    },\r\n  }\r\n\r\n  moment.updateLocale('fr', optionsFR)\r\n\r\n  const optionsDE = {\r\n    longDateFormat: {\r\n      LT: 'HH.mm', // to have 20.15 and not 20:15 in German\r\n    },\r\n  }\r\n\r\n  moment.updateLocale('de', optionsDE)\r\n\r\n  moment.locale(language)\r\n\r\n  if (typeof document !== 'undefined' && document.documentElement) {\r\n    document.documentElement.lang = language\r\n  }\r\n\r\n  if (process.env.FEATURE_FLATPICKR) {\r\n    localizeFlatpickr(language)\r\n  }\r\n\r\n  // retrieve messages\r\n  retrieveMessages(language)\r\n}\r\n\r\nexport const getLocale = () => _locale\r\n\r\nexport const getCountryForLocale = locale => {\r\n  if (!locale) {\r\n    return ''\r\n  }\r\n  if (locale.length === 5) {\r\n    // handle 'fr-FR' format\r\n    const country = locale.substring(3, 5)\r\n    return country.toLowerCase()\r\n  }\r\n\r\n  // trick for locales like 'en', 'fr'\r\n  locale = locale.substring(0, 2).toLowerCase()\r\n  switch (locale) {\r\n    case 'sq':\r\n      return 'al'\r\n    case 'ar':\r\n      return 'eg'\r\n    case 'be':\r\n      return 'by'\r\n    case 'ca':\r\n      return 'es'\r\n    case 'zh':\r\n      return 'cn'\r\n    case 'cs':\r\n      return 'cz'\r\n    case 'da':\r\n      return 'dk'\r\n    case 'en':\r\n      return 'us'\r\n    case 'et':\r\n      return 'ee'\r\n    case 'el':\r\n      return 'gr'\r\n    case 'iw':\r\n      return 'il'\r\n    case 'hi':\r\n      return 'in'\r\n    case 'in':\r\n      return 'id'\r\n    case 'ga':\r\n      return 'ie'\r\n    case 'ja':\r\n      return 'jp'\r\n    case 'ko':\r\n      return 'kr'\r\n    case 'ms':\r\n      return 'my'\r\n    case 'sl':\r\n      return 'si'\r\n    case 'sv':\r\n      return 'se'\r\n    case 'uk':\r\n      return 'ua'\r\n    case 'vi':\r\n      return 'vn'\r\n    case 'sr':\r\n      return 'rs'\r\n\r\n    default:\r\n      return locale\r\n  }\r\n}\r\n\r\nexport const getCountryCodeForLocale = locale => {\r\n  let countryCode = getCountryForLocale(locale)\r\n\r\n  if (countryCode) {\r\n    countryCode = countryCode.toUpperCase()\r\n  }\r\n\r\n  return countryCode\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst trWithLocale = (locale, key, options = {}, useKeyIfNotFound) => {\r\n  if (locale === 'debug') {\r\n    return key\r\n  }\r\n\r\n  if (isEmpty(key)) {\r\n    console.error(`[i18n] key is empty.`)\r\n    return null\r\n  }\r\n\r\n  try {\r\n    if (_texts && !isEmpty(_texts[key])) {\r\n      // eg. \"Welcome, %{name}!\" with options = { name: \"John\" }\r\n      // or \"%{smart_count} restaurant disponible autour de %{address} |||| %{smart_count} restaurants disponibles autour de %{address}\" with options = { smart_count: 2, address: \"Paris\" }\r\n      let text = _texts[key]\r\n\r\n      // handle plural forms like polyglot does\r\n      // (simple implementation - only 2 forms: singular and plural. separated by ||||. Languages with more complex plural rules are not supported here)\r\n      if (options.smart_count) {\r\n        const smartCount = parseInt(options.smart_count, 10)\r\n        // Split the label into singular and plural forms\r\n        const [singular, plural] = text.split('||||').map(str => str.trim())\r\n\r\n        // Choose the correct form based on smartCount\r\n        text = smartCount === 1 ? singular : plural\r\n      }\r\n\r\n      // replace %{param} placeholders\r\n      Object.keys(options).forEach(paramKey => {\r\n        const placeholder = `%{${paramKey}}`\r\n        const value = options[paramKey]\r\n        text = text.replace(placeholder, value)\r\n      })\r\n      return text\r\n    }\r\n\r\n    const message = getPolyglot().t(key, options)\r\n\r\n    // polyglot returns the key itself if not found\r\n    if (isEmpty(message) || message === key) {\r\n      if (useKeyIfNotFound) {\r\n        console.error(`[i18n][${key}] Missing translation for key for locale ${locale}`)\r\n        return key\r\n      } else {\r\n        // maybe we want to return nothing (instead of the key)\r\n        // eg. placeholder for optional text\r\n        // Note: will be checked with isNil() in the caller to know if we want to display the label container or not. So we return null (and not an empty string)\r\n        return null\r\n      }\r\n    }\r\n\r\n    return message\r\n  } catch (e) {\r\n    console.error(e)\r\n    // console.warn(`I18n: ${key} error when formatting for locale ${locale}`, options)\r\n  }\r\n\r\n  return locale\r\n}\r\n\r\nexport const tr = (key, options = {}) => {\r\n  return trWithLocale(_locale, key, options, true)\r\n}\r\n\r\n/**\r\n * returns an empty string (and not the key) if the value is empty\r\n *\r\n * useful for optional texts\r\n */\r\nexport const trOptional = (key, options = {}) => {\r\n  return trWithLocale(_locale, key, options, false)\r\n}\r\n","import { createSelector } from 'reselect'\r\n\r\nimport isNil from 'lodash/isNil'\r\n\r\nconst getState = state => state.i18n\r\n\r\nexport const isFetchingI18nPhrases = createSelector([getState], state =>\r\n  state.get('isFetching', false)\r\n)\r\n\r\nexport const getI18nPhrases = createSelector([getState], state => {\r\n  const phrases = state.get('phrases', null)\r\n  if (isNil(phrases)) {\r\n    return null\r\n  }\r\n\r\n  return phrases.toJS()\r\n})\r\n\r\nexport const getCurrentLocale = createSelector([getState], state => state.get('locale', null))\r\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n  if (number === number) {\n    if (upper !== undefined) {\n      number = number <= upper ? number : upper;\n    }\n    if (lower !== undefined) {\n      number = number >= lower ? number : lower;\n    }\n  }\n  return number;\n}\n\nmodule.exports = baseClamp;\n","var baseClamp = require('./_baseClamp'),\n    baseToString = require('./_baseToString'),\n    toInteger = require('./toInteger'),\n    toString = require('./toString');\n\n/**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n *  else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\nfunction startsWith(string, target, position) {\n  string = toString(string);\n  position = position == null\n    ? 0\n    : baseClamp(toInteger(position), 0, string.length);\n\n  target = baseToString(target);\n  return string.slice(position, position + target.length) == target;\n}\n\nmodule.exports = startsWith;\n","import isEmpty from 'lodash/isEmpty'\r\nimport startsWith from 'lodash/startsWith'\r\n\r\nimport { getDefaultLocale, getCurrentLanguageWithoutRegionCode } from './utils.js'\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\n// TODO: handle region code\r\n// better handling?\r\nexport const getForCurrentLocale = locales => {\r\n  if (!locales) {\r\n    return ''\r\n  }\r\n\r\n  // try to find for current language\r\n  const currentLanguage = getCurrentLanguageWithoutRegionCode().toUpperCase()\r\n  let locale = findOnArray(\r\n    locales,\r\n    locale =>\r\n      locale.locale && startsWith(locale.locale.toLowerCase(), currentLanguage.toLowerCase())\r\n  )\r\n\r\n  // try to find for default language\r\n  if (!locale) {\r\n    const defaultLanguage = getDefaultLocale()\r\n      .substr(0, 2)\r\n      .toUpperCase()\r\n\r\n    if (defaultLanguage !== currentLanguage) {\r\n      locale = findOnArray(\r\n        locales,\r\n        locale =>\r\n          locale.locale && startsWith(locale.locale.toLowerCase(), defaultLanguage.toLowerCase())\r\n      )\r\n    }\r\n  }\r\n\r\n  // none found, fallback to a default\r\n  if (!locale && !isEmpty(locales)) {\r\n    locale = locales[0]\r\n  }\r\n\r\n  // avoid crash\r\n  return locale ? locale.text : ''\r\n}\r\n\r\nexport const getForLocale = (locales, localeParam) => {\r\n  let locale = findOnArray(\r\n    locales,\r\n    locale => locale && startsWith(locale.locale.toLowerCase(), localeParam.toLowerCase())\r\n  )\r\n\r\n  // none found, fallback to a default\r\n  if (!locale && !isEmpty(locales)) {\r\n    locale = locales[0]\r\n  }\r\n\r\n  // avoid crash\r\n  return locale ? locale.text : ''\r\n}\r\n","import Polyglot from 'node-polyglot'\r\nimport Immutable from 'immutable'\r\n\r\nimport { I18nFetchingLocale } from './actions'\r\nimport { RETRIEVE_MESSAGES_LIMIT } from './constants'\r\n\r\nimport { setPolyglot, getDefaultLocale } from './utils'\r\n\r\nimport { retrieveMessages } from './actions'\r\n\r\nexport * from './selectors'\r\nexport * from './utils'\r\nexport * from './format'\r\n\r\n//\r\n//\r\n//\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  isFetching: false,\r\n  locale: null,\r\n  phrases: {},\r\n  retrieveCount: 0,\r\n})\r\n\r\nexport const i18nReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case I18nFetchingLocale.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n      })\r\n\r\n    case I18nFetchingLocale.SUCCESS:\r\n      const { locale, phrases } = action\r\n\r\n      // instance Polyglot for this locale\r\n      const polyglot = new Polyglot({\r\n        locale,\r\n      })\r\n\r\n      // add our strings\r\n      polyglot.extend({\r\n        ...phrases,\r\n      })\r\n\r\n      setPolyglot(polyglot)\r\n\r\n      console.info(`[i18n] loaded for ${locale}`)\r\n\r\n      return state.merge({\r\n        isFetching: false,\r\n        locale,\r\n        phrases,\r\n        retrieveCount: 0,\r\n      })\r\n\r\n    case I18nFetchingLocale.FAILURE:\r\n      const retrieveCount = state.retrieveCount + 1\r\n\r\n      if (retrieveCount < RETRIEVE_MESSAGES_LIMIT) {\r\n        retrieveMessages(getDefaultLocale())\r\n      }\r\n\r\n      return state.merge({\r\n        isFetching: false,\r\n        locale,\r\n        phrases,\r\n        retrieveCount,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n *   return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n  if (typeof predicate != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  return function() {\n    var args = arguments;\n    switch (args.length) {\n      case 0: return !predicate.call(this);\n      case 1: return !predicate.call(this, args[0]);\n      case 2: return !predicate.call(this, args[0], args[1]);\n      case 3: return !predicate.call(this, args[0], args[1], args[2]);\n    }\n    return !predicate.apply(this, args);\n  };\n}\n\nmodule.exports = negate;\n","var assignValue = require('./_assignValue'),\n    castPath = require('./_castPath'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nmodule.exports = baseSet;\n","var baseGet = require('./_baseGet'),\n    baseSet = require('./_baseSet'),\n    castPath = require('./_castPath');\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = basePickBy;\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    basePickBy = require('./_basePickBy'),\n    getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n  if (object == null) {\n    return {};\n  }\n  var props = arrayMap(getAllKeysIn(object), function(prop) {\n    return [prop];\n  });\n  predicate = baseIteratee(predicate);\n  return basePickBy(object, props, function(value, path) {\n    return predicate(value, path[0]);\n  });\n}\n\nmodule.exports = pickBy;\n","var baseIteratee = require('./_baseIteratee'),\n    negate = require('./negate'),\n    pickBy = require('./pickBy');\n\n/**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\nfunction omitBy(object, predicate) {\n  return pickBy(object, negate(baseIteratee(predicate)));\n}\n\nmodule.exports = omitBy;\n","const GlobalErrors = {\r\n  1015: 'global.api.global_error.1015',\r\n  1030: 'global.api.global_error.1030',\r\n  10020: 'forbidden.session_expired',\r\n  10021: 'forbidden.invalid_geolocation',\r\n  10023: 'forbidden.invalid_on_site_security',\r\n}\r\n\r\nexport default GlobalErrors\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport invariant from 'invariant'\r\nimport merge from 'lodash/merge'\r\nimport omitBy from 'lodash/omitBy'\r\nimport isNull from 'lodash/isNull'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isString from 'lodash/isString'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nimport { getApiUrl } from '../environment'\r\nimport { getStore } from '../store'\r\n\r\nimport GlobalErrors from './errors/GlobalErrors'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nconst Error = {\r\n  NO_INTERNET: 'NO_INTERNET',\r\n  UNKNOWN: 'UNKNOWN',\r\n}\r\n\r\n/**\r\n * This function will merge object of headers together.\r\n * We need this function to handle different cases on headers names, so `authorization` and\r\n * `Authorization` are considered the same header.\r\n *\r\n * @param  {object} headersBase\r\n * @param  {object} headers2\r\n * @return {object}          a new object with the headers merge\r\n */\r\nconst mergeHeaders = (headersBase, headersToMerge) => {\r\n  // clone in order to not brake the reference\r\n  let headers = { ...headersBase }\r\n\r\n  for (let headersToMergeKey in headersToMerge) {\r\n    let found = false\r\n    for (let headerKey in headers) {\r\n      if (headersToMergeKey.toLowerCase() === headerKey.toLowerCase()) {\r\n        headers[headerKey] = headersToMerge[headersToMergeKey]\r\n        found = true\r\n      }\r\n    }\r\n\r\n    if (!found) {\r\n      headers[headersToMergeKey] = headersToMerge[headersToMergeKey]\r\n    }\r\n  }\r\n\r\n  return headers\r\n}\r\n\r\nfunction ApiError(code, message) {\r\n  return {\r\n    code,\r\n    message,\r\n  }\r\n}\r\n\r\nfunction formatEndpoint(endpoint, params = null) {\r\n  if (isNull(params)) {\r\n    return endpoint || ''\r\n  }\r\n\r\n  invariant(!isNil(endpoint), `endpoint is nil`)\r\n\r\n  let formattedEnpoint = template(endpoint, params)\r\n\r\n  function template(template, data) {\r\n    return template.replace(/:(\\w*)/g, (m, key) => {\r\n      return data.hasOwnProperty(key) ? data[key] : ''\r\n    })\r\n  }\r\n\r\n  return formattedEnpoint\r\n}\r\n\r\n// https://stackoverflow.com/questions/316781/how-to-build-query-string-with-javascript/34209399#34209399\r\nfunction formatQueryParams(parameters) {\r\n  let qs = ''\r\n  for (let key in parameters) {\r\n    let value = parameters[key]\r\n    qs += encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&'\r\n  }\r\n  if (qs.length > 0) {\r\n    qs = qs.substring(0, qs.length - 1) // chop off last '&'\r\n    return `?${qs}`\r\n  }\r\n\r\n  return ''\r\n}\r\n\r\nclass ApiManager {\r\n  ContentTypes = {\r\n    FORM_URL_ENCODE: 'application/x-www-form-urlencoded',\r\n  }\r\n\r\n  /**\r\n   * Must be set by calling `setGetApiManagerOptions`\r\n   *\r\n   * A middleware used in case of error.\r\n   * Must return true if the middleware have taking care of the error.\r\n   * Use to handle 401, 500, etc.\r\n   *\r\n   * @param error\r\n   * @param res If undefined, the request have encounter a connexion error.\r\n   * @type Function\r\n   *\r\n   * Example of middleware:\r\n   *\r\n   * ```\r\n   * errorMiddleware: (error, response, json, success, failure) => {\r\n   * if (!isNil(res)) {\r\n   *       if (res.statusCode === 401) {\r\n   *         console.error('[API] 401, redirect to login')\r\n   *         return true\r\n   *       }\r\n   *\r\n   *       if (res.statusCode === 500) {\r\n   *         console.log(res)\r\n   *         Logger.error('API 500', res)\r\n   *         // redirect to error 500 page\r\n   *         return true\r\n   *       }\r\n   *     }\r\n   *     return false\r\n   *   }\r\n   * ```\r\n   *\r\n   * errorMiddleware: (error, res, success: Function, failure: Function) => { return false },\r\n   *\r\n   * Function that must return an object.\r\n   *\r\n   * Example:\r\n   * {\r\n   *  Authorization:  'toto',\r\n   *  OtherHeader: 'toto42'\r\n   * }\r\n   *\r\n   * Note that the headers set to the request's params have the priority over the headers given\r\n   * by the middleware.\r\n   *\r\n   * @type Function\r\n   *\r\n   * headersMiddleware: () => { return {} },\r\n   *\r\n   * @type string\r\n   * apiUrl: '',\r\n   */\r\n  getApiManagerOptions = null\r\n\r\n  setGetApiManagerOptions(func) {\r\n    this.getApiManagerOptions = func\r\n  }\r\n\r\n  //\r\n  // ------------- Tools\r\n  //\r\n\r\n  /**\r\n   * remove undefined or null headers\r\n   */\r\n  getHeaders(headersParam) {\r\n    const optionsHeadersMiddleware = this.getApiManagerOptions(\r\n      getStore().getState()\r\n    ).headersMiddleware()\r\n\r\n    let headers = mergeHeaders(optionsHeadersMiddleware, headersParam)\r\n    return omitBy(headers, isNil)\r\n  }\r\n\r\n  handleSuccess(previousRequestOptions, response, data, success, failure) {\r\n    if (!previousRequestOptions.then) {\r\n      success(data, response)\r\n\r\n      if (isFunction(previousRequestOptions.onSuccessCallback)) {\r\n        previousRequestOptions.onSuccessCallback(data, response)\r\n      }\r\n\r\n      return\r\n    }\r\n\r\n    //\r\n    // Chained request\r\n    //\r\n\r\n    const requestOptions = previousRequestOptions.then(previousRequestOptions, data)\r\n\r\n    // requestOptions can be null. when the the functions call the previousRequestOptions.failure itself, it\r\n    // returns null to stop the chain\r\n    if (requestOptions === null) {\r\n      return\r\n    }\r\n\r\n    // set root requestOptions success and failure\r\n    requestOptions.success = success\r\n    requestOptions.failure = failure\r\n\r\n    this.runFetch(requestOptions.type, requestOptions)\r\n  }\r\n\r\n  /**\r\n   * Handle an HTTP response.\r\n   * Calls the success callback in case of success\r\n   * Calls the failure callback in case of error and if the errorMiddleware does not handle the error.\r\n   *\r\n   * @param error\r\n   * @param res\r\n   * @param success the closure called on success. Take a json object as parameter.\r\n   * @param failure the closure called on failure. Take an ApiError as parameter.\r\n   */\r\n  handleResponse(requestOptions, error, response, success, failure, fetchRequestData) {\r\n    if (!isNil(response)) {\r\n      if (response.status === 204) {\r\n        // whatever the content-type, a 204 means success without response body\r\n        this.handleSuccess(requestOptions, response, {}, success, failure)\r\n      } else {\r\n        const contentType = response.headers.get('content-type')\r\n        if (contentType && contentType.indexOf('application/json') !== -1) {\r\n          return response\r\n            .json()\r\n            .then(\r\n              json => {\r\n                if (response.ok) {\r\n                  this.handleSuccess(requestOptions, response, json, success, failure)\r\n                } else {\r\n                  console.log('fetch success, response json not ok')\r\n                  this.handleError(requestOptions, response, null, json, success, failure)\r\n                }\r\n              },\r\n              data => {\r\n                // In case we get a 204 (\r\n                // e.g. : when deleting a user address\r\n                // We need to handle the answer as a success and not ignoring it\r\n                if (requestOptions.type === 'DELETE' && response.ok) {\r\n                  this.handleSuccess(requestOptions, response, {}, success, failure)\r\n                } else {\r\n                  console.log('fetch success, response data not ok')\r\n                  this.handleError(requestOptions, response, null, {}, success, failure)\r\n                }\r\n              }\r\n            )\r\n            .catch(e => {\r\n              console.log('fetch error')\r\n              console.error(e)\r\n              this.handleError(requestOptions, response, e, null, success, failure)\r\n            })\r\n        } else {\r\n          response\r\n            .text()\r\n            .then(text => {\r\n              if (response.ok) {\r\n                this.handleSuccess(requestOptions, response, text, success, failure)\r\n              } else {\r\n                console.log('fetch success, response text is not ok')\r\n                this.handleError(requestOptions, response, null, text, success, failure)\r\n              }\r\n            })\r\n            .catch(e => {\r\n              console.log('fetch success, response text catched')\r\n              this.handleError(requestOptions, response, e, null, success, failure)\r\n            })\r\n        }\r\n      }\r\n    } else {\r\n      // TODO: find a way to know it has been cancelled\r\n      const isCancelled = false //error && error.name && error.name === 'AbortError'\r\n      // console.log({isCancelled })\r\n      if (!isCancelled) {\r\n        console.log('fetch catched error:')\r\n        console.error(error)\r\n        if (fetchRequestData.retry < 5) {\r\n          // wait seconds before retrying.\r\n          const timeouts = [2, 3, 4, 5, 10]\r\n          console.log('Retrying')\r\n          setTimeout(() => {\r\n            this.runFetch(\r\n              fetchRequestData.method,\r\n              fetchRequestData.options,\r\n              fetchRequestData.retry + 1\r\n            )\r\n          }, (timeouts[fetchRequestData.retry] || 10) * 1000)\r\n        } else {\r\n          console.log('Aborting')\r\n          // retry.\r\n          this.handleError(requestOptions, null, error, null, success, failure)\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  callFailure(requestOptions, error, apiError, failure) {\r\n    if (isFunction(requestOptions.onFailure)) {\r\n      const res = requestOptions.onFailure(requestOptions, apiError)\r\n      if (res !== false) {\r\n        // returns true if handled\r\n        if (res !== true) {\r\n          // not true, we have an object defining a request\r\n          const newRequestOptions = res\r\n          // set root requestOptions success and failure\r\n          newRequestOptions.success = requestOptions.success\r\n          newRequestOptions.failure = failure\r\n          this.run(newRequestOptions)\r\n        }\r\n        return\r\n      }\r\n    }\r\n\r\n    if (isFunction(requestOptions.onFailureCallback)) {\r\n      requestOptions.onFailureCallback(apiError)\r\n    }\r\n\r\n    failure(apiError)\r\n  }\r\n\r\n  handleError(requestOptions, response, error, json, success, failure) {\r\n    let apiError = null\r\n\r\n    if (isNil(json)) {\r\n      // no internet connexion / no response\r\n      apiError = ApiError(Error.NO_INTERNET, 'No internet connectivity')\r\n      apiError.localizedMessage = tr('global.api.global_error.no_internet')\r\n    } else {\r\n      apiError = this.createApiError(requestOptions, json, response)\r\n    }\r\n\r\n    apiError.body = json\r\n    apiError.response = response\r\n    this.callFailure(requestOptions, error, apiError, failure)\r\n  }\r\n\r\n  /**\r\n   * Parse the HTTP response body to create an ApiError object.\r\n   *\r\n   *\r\n   * @param responseBody The HTTP response body.\r\n   * @returns {ApiError} A populate ApiError object.\r\n   */\r\n  createApiError(requestOptions, json, response) {\r\n    // An errorHandler can be:\r\n    // - an object:\r\n    //  ```\r\n    //   {\r\n    //     101: '', // api error code and message (localized)\r\n    //     default: '', // default value to use. not mandatory\r\n    //   }\r\n    //  ```\r\n    // - function\r\n    //  ```\r\n    //    (requestOptions, json) => {\r\n    //    }\r\n    //  ```\r\n    //  - requestOptions is the option object set on our Api* file, (and modify by the ApiManager)\r\n    //  - json is the api response data (could be null / not json)\r\n    let localizedMessage = 'Something went wrong, please try again'\r\n    const error = ApiError(Error.UNKNOWN, '')\r\n    const errorHandler = requestOptions && requestOptions.errorHandler\r\n\r\n    if (!isNil(json)) {\r\n      error.code = json.code\r\n      error.message = json.message\r\n      error.localizedMessage = localizedMessage\r\n      error.extra = json.extra\r\n      error.errorCode = json.errorCode\r\n      error.httpStatus = json.httpStatus\r\n      error.timestamp = json.timestamp\r\n      error.fieldErrors = json.fieldErrors\r\n\r\n      // Temporary fix to handle oauth authentication failure..\r\n      // for now the API gives the code 100. But it can mess with other code 100\r\n      // TODO: remove once the API is up with the new error code (1015)\r\n      if (!isEmpty(error.message) && error.message.indexOf('Oauth authentication failure') !== -1) {\r\n        error.localizedMessage = GlobalErrors[1015]\r\n        return error\r\n      }\r\n\r\n      // get localizedMessage\r\n      localizedMessage = json.message\r\n\r\n      /**\r\n       * Find the localized message for the json error.\r\n       * We use the GlobalErrors, then the returned localizedMessage if any, then the defined errorHandler.\r\n       *\r\n       * @param  {[type]} errorHandler   defined errorHandler for the request\r\n       * @param  {[type]} requestOptions request options\r\n       * @param  {[type]} json           error json\r\n       */\r\n      const findLocalizedMessage = (errorHandler, requestOptions, json, response) => {\r\n        // find global error\r\n        let globalLocalizedMessage = GlobalErrors[json.code]\r\n\r\n        if (!isEmpty(globalLocalizedMessage)) {\r\n          return tr(globalLocalizedMessage)\r\n        }\r\n\r\n        if (!isEmpty(json.localizedMessage)) {\r\n          return json.localizedMessage\r\n        }\r\n\r\n        // use error handler\r\n        if (errorHandler) {\r\n          if (isFunction(errorHandler)) {\r\n            const errorHandlerFuncResult = errorHandler(requestOptions, json, response)\r\n            // if return an object of errors ({ 100: '', 200: ''})\r\n            if (!isString(errorHandlerFuncResult)) {\r\n              return errorHandlerFuncResult[json.code] || errorHandlerFuncResult['default']\r\n            }\r\n            return errorHandlerFuncResult\r\n          }\r\n\r\n          return errorHandler[json.code] || errorHandler['default']\r\n        }\r\n\r\n        return null\r\n      }\r\n\r\n      let foundLocalizedMessage = findLocalizedMessage(errorHandler, requestOptions, json, response)\r\n\r\n      if (!isNull(foundLocalizedMessage)) {\r\n        localizedMessage = foundLocalizedMessage\r\n      }\r\n    } else {\r\n      if (isFunction(errorHandler)) {\r\n        localizedMessage = errorHandler(requestOptions, null)\r\n      } else if (errorHandler) {\r\n        localizedMessage = errorHandler['default'] || localizedMessage\r\n      }\r\n    }\r\n\r\n    error.localizedMessage = localizedMessage\r\n\r\n    return error\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param statusCode the response status code\r\n   * @returns {boolean} True if the status code indicate a successful response\r\n   */\r\n  isSuccessResponse(statusCode) {\r\n    return statusCode >= 200 && statusCode < 300\r\n  }\r\n\r\n  //\r\n  // ------------- Requests tools for the API\r\n  //\r\n\r\n  /**\r\n   * @param  {Object} request An object that represent a request:\r\n   * {\r\n   *  type: PUT, POST, UPDATE, DELETE, GET\r\n   *  success: success callback (param: JSON)\r\n   *  failure: failure callback (param: ApiError)\r\n   *  endpoint: the endpoint,\r\n   *  params: the url parameters to set on the endpoint,\r\n   *  query: the url query params,\r\n   *  body: the body data to be send as json,\r\n   *  headers: an object of headers,\r\n   *  isForm: true if the body to send is not json but a x-www-form-urlencoded form. We transform the\r\n   *   body given as an object to a form data.\r\n   *  isMultipart: true if the body to send is a multipart. The given body have to be a javascript\r\n   *   object\r\n   *  errorHandler: A function / object ({ 100: '', default: ''} ) to retrieve the message to attach\r\n   *  on the error. See `createApiError` for more info\r\n   *  isExtern is the request external to our API? must be used with an `url` parameter\r\n   *  url: the url to use instead of the baseUrl + endpoint\r\n   *  then: function (previousOptions, json|data) to chain requests\r\n   *  after: function () to chain requests\r\n   *  updateBody: function (data, body), use it when using the `after` param. It allows you to update\r\n   *   the body set on the request data with the data of the previous request (defined by `after`)\r\n   *  onFailure: function (error): boolean|object custom handler. returns false if custom handler\r\n   *   doest not handled the error. Otherwise can returns true or an object defining a new request\r\n   * }\r\n   */\r\n  run(request) {\r\n    try {\r\n      switch (request.type) {\r\n        case 'GET':\r\n          this.get(request)\r\n          break\r\n        case 'POST':\r\n          this.post(request)\r\n          break\r\n        case 'UPDATE':\r\n        case 'PUT':\r\n          this.put(request)\r\n          break\r\n        case 'PATCH':\r\n          this.patch(request)\r\n          break\r\n        case 'DELETE':\r\n          this.delete(request)\r\n          break\r\n        default:\r\n          Logger.error(\r\n            'api',\r\n            `unknown type ${\r\n              request.type\r\n            }. Verify your defined a 'type' on your api call configuration.`\r\n          )\r\n      }\r\n    } catch (e) {\r\n      console.error(e)\r\n    }\r\n  }\r\n\r\n  get(options) {\r\n    this.runFetch('GET', options)\r\n  }\r\n\r\n  delete(options) {\r\n    this.runFetch('DELETE', options)\r\n  }\r\n\r\n  post(options) {\r\n    this.runFetch('POST', options)\r\n  }\r\n\r\n  put(options) {\r\n    this.runFetch('PUT', options)\r\n  }\r\n\r\n  patch(options) {\r\n    this.runFetch('PATCH', options)\r\n  }\r\n\r\n  getFinalApiUrl(defaultUrl = null) {\r\n    if (!isEmpty(defaultUrl)) {\r\n      return defaultUrl\r\n    }\r\n\r\n    return getApiUrl()\r\n  }\r\n\r\n  runFetch(method, options, retry = 0) {\r\n    const { url, isExtern, after, query, endpoint, params, success, failure } = options\r\n    // get otherOptions where we remove the headers, that cause problems whene merging the\r\n    // default options with this options (override headers, add null headers that are removed\r\n    // on getHeaders)\r\n    const { headers, ...otherOptions } = options\r\n\r\n    // Handle `after` param, the current request have to be run after the one describe by the\r\n    // `after` function param.\r\n    //\r\n    if (!isNil(after)) {\r\n      // get request to made before the current request\r\n      const previousRequestOptions = after()\r\n      // attach a success\r\n      previousRequestOptions.success = json => {\r\n        // run current\r\n        this.run({\r\n          ...options,\r\n          body: !isNil(options.updateBody) ? options.updateBody(json, options.body) : options.body,\r\n          after: null, // avoid infinite loop\r\n        })\r\n      }\r\n      previousRequestOptions.failure = failure\r\n\r\n      // run the request to made before the current request\r\n      this.run(previousRequestOptions)\r\n      return // do not continue\r\n    }\r\n\r\n    // in case of external call, we use the url set on the options, instead of the base url /\r\n    // endpoint / params.\r\n    const finalUrl = isExtern\r\n      ? `${this.getFinalApiUrl(url)}${formatEndpoint(endpoint, params)}${formatQueryParams(query)}`\r\n      : `${this.getFinalApiUrl(url)}${formatEndpoint(endpoint, params)}${formatQueryParams(query)}`\r\n\r\n    const defaultHeaders = {\r\n      Accept: 'application/json',\r\n      'Content-Type': 'application/json',\r\n    }\r\n\r\n    if (!isExtern) {\r\n      const simulateHeader = getQueryParam('simulate')\r\n      if (simulateHeader) {\r\n        defaultHeaders.simulate = simulateHeader\r\n      }\r\n    }\r\n\r\n    const defaultOptions = {\r\n      method: method,\r\n      mode: 'cors',\r\n      cache: 'default',\r\n      headers: mergeHeaders(\r\n        defaultHeaders,\r\n        // do not set default headers for external request\r\n        isExtern ? {} : this.getHeaders(headers)\r\n      ),\r\n    }\r\n\r\n    // merge otherOptions (options with bad data removed, such as headers that don't have to\r\n    // be merge here since we merge it above)\r\n    const finalOptions = merge(defaultOptions, otherOptions)\r\n\r\n    // handle form\r\n    if (options.isForm) {\r\n      finalOptions.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'\r\n\r\n      // see https://github.com/github/fetch/issues/263\r\n      // Note: This does not handle nested javascript objects\r\n      finalOptions.body = Object.keys(finalOptions.body)\r\n        .map(key => {\r\n          return encodeURIComponent(key) + '=' + encodeURIComponent(finalOptions.body[key])\r\n        })\r\n        .join('&')\r\n    } else if (options.isMultipart) {\r\n      // create form data from json object\r\n      const formData = new FormData()\r\n      for (let key in finalOptions.body) {\r\n        formData.append(key, finalOptions.body[key])\r\n      }\r\n      finalOptions.body = formData\r\n    } else if (method === 'POST' || method === 'PUT' || method === 'PATCH') {\r\n      // post\r\n      finalOptions.body = JSON.stringify(finalOptions.body)\r\n    }\r\n\r\n    fetch(finalUrl, finalOptions)\r\n      .then(response => {\r\n        this.handleResponse(finalOptions, null, response, success, failure, {\r\n          method,\r\n          options,\r\n          retry,\r\n        })\r\n      })\r\n      .catch(error => {\r\n        this.handleResponse(finalOptions, error, null, success, failure, {\r\n          method,\r\n          options,\r\n          retry,\r\n        })\r\n      })\r\n  }\r\n}\r\n\r\nlet _apiManagerInstance = new ApiManager()\r\n\r\nexport default _apiManagerInstance\r\n","export const Events = {\r\n  ON_APP_INIT: 'EVENT::GLOBAL::APP_INIT',\r\n  ON_ANALYTICS_INIT: 'EVENT::GLOBAL::ANALYTICS::INIT',\r\n  ON_HISTORY_CHANGE: 'EVENT::GLOBAL::HISTORY_CHANGE',\r\n\r\n  ON_RESTAURANT_LIST_SUCCESS: 'EVENT::GLOBAL::RESTAURANT_LIST::SUCCESS',\r\n  ON_LOGIN_SUCCESS: 'EVENT::GLOBAL::LOGIN::SUCCESS',\r\n  ON_REGISTER_SUCCESS: 'EVENT::GLOBAL::REGISTER::SUCCESS',\r\n  ON_PAYMENT_SUCCESS: 'EVENT::GLOBAL::PAYMENT::SUCCESS',\r\n}\r\n\r\nexport default Events\r\n","import forEach from 'lodash/forEach'\r\nimport Events from './Events'\r\n\r\n/**\r\n * Manage dispatch Events and plugins custom events\r\n */\r\nclass EventManager {\r\n  /**\r\n   * key: event\r\n   * value: array of events\r\n   */\r\n  listeners = {}\r\n\r\n  /**\r\n   * Shortctut to Events.\r\n   * Also contains the plugins events. (see registerEvents)\r\n   */\r\n  Events = { ...Events }\r\n\r\n  addListener(event, fn) {\r\n    this.listeners[event] = [...(this.listeners[event] || []), fn]\r\n\r\n    // TODO:\r\n    // - verify fn is a function\r\n    // - verify event is listed events or plugins events\r\n  }\r\n\r\n  dispatch(event, data = {}) {\r\n    const listeners = this.listeners[event]\r\n\r\n    // TODO: dev log\r\n\r\n    if (listeners !== undefined) {\r\n      listeners.forEach(listener => {\r\n        listener({\r\n          type: event,\r\n          data,\r\n        })\r\n      })\r\n    }\r\n  }\r\n\r\n  registerEvents(events) {\r\n    // TODO: in dev, verify that there is no collusion\r\n    this.Events = { ...this.Events, ...events }\r\n  }\r\n\r\n  addListeners(listeners) {\r\n    forEach(listeners, (fn, event) => {\r\n      this.addListener(event, fn)\r\n    })\r\n  }\r\n}\r\n\r\nconst EventManagerInstance = new EventManager()\r\n\r\n// globalize EventManagerInstance\r\nwindow.PMTEventManager = EventManagerInstance\r\n\r\n// EventManager is a Singleton\r\nexport default EventManagerInstance\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport EventManager from 'pmt-modules/event/EventManager'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that send an event\r\n *\r\n */\r\nclass SendEventContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (props.send) {\r\n      this.sendEvent(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (nextProps.send && !this.props.send) {\r\n      this.sendEvent(nextProps)\r\n    }\r\n  }\r\n\r\n  sendEvent = props => {\r\n    EventManager.dispatch(props.event, props.eventProps ? props.eventProps() : {})\r\n  }\r\n\r\n  render() {\r\n    return React.cloneElement(this.props.children)\r\n  }\r\n}\r\n\r\nSendEventContainer.defaultProps = {\r\n  send: true,\r\n}\r\n\r\nSendEventContainer.propTypes = {\r\n  children: PropTypes.object.isRequired,\r\n\r\n  event: PropTypes.string.isRequired,\r\n  eventProps: PropTypes.func,\r\n\r\n  send: PropTypes.bool,\r\n}\r\n\r\nexport default SendEventContainer\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar gtag = function gtag() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (typeof window !== \"undefined\") {\n    var _window;\n\n    if (typeof window.gtag === \"undefined\") {\n      window.dataLayer = window.dataLayer || [];\n\n      window.gtag = function gtag() {\n        window.dataLayer.push(arguments);\n      };\n    }\n\n    (_window = window).gtag.apply(_window, args);\n  }\n};\n\nvar _default = gtag;\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = format;\nvar smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\\.?|via)$/i;\n\nfunction toTitleCase(string) {\n  return string.toString().trim().replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, function (match, index, title) {\n    if (index > 0 && index + match.length !== title.length && match.search(smallWords) > -1 && title.charAt(index - 2) !== \":\" && (title.charAt(index + match.length) !== \"-\" || title.charAt(index - 1) === \"-\") && title.charAt(index - 1).search(/[^\\s-]/) < 0) {\n      return match.toLowerCase();\n    }\n\n    if (match.substr(1).search(/[A-Z]|\\../) > -1) {\n      return match;\n    }\n\n    return match.charAt(0).toUpperCase() + match.substr(1);\n  });\n} // See if s could be an email address. We don't want to send personal data like email.\n// https://support.google.com/analytics/answer/2795983?hl=en\n\n\nfunction mightBeEmail(s) {\n  // There's no point trying to validate rfc822 fully, just look for ...@...\n  return typeof s === \"string\" && s.indexOf(\"@\") !== -1;\n}\n\nvar redacted = \"REDACTED (Potential Email Address)\";\n\nfunction redactEmail(string) {\n  if (mightBeEmail(string)) {\n    console.warn(\"This arg looks like an email address, redacting.\");\n    return redacted;\n  }\n\n  return string;\n}\n\nfunction format() {\n  var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n  var titleCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  var redactingEmail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n  var _str = s || \"\";\n\n  if (titleCase) {\n    _str = toTitleCase(s);\n  }\n\n  if (redactingEmail) {\n    _str = redactEmail(_str);\n  }\n\n  return _str;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.GA4 = void 0;\n\nvar _gtag = _interopRequireDefault(require(\"./gtag\"));\n\nvar _format = _interopRequireDefault(require(\"./format\"));\n\nvar _excluded = [\"eventCategory\", \"eventAction\", \"eventLabel\", \"eventValue\", \"hitType\"],\n    _excluded2 = [\"title\", \"location\"],\n    _excluded3 = [\"page\", \"hitType\"],\n    _excluded4 = [\"action\", \"category\", \"label\", \"value\", \"nonInteraction\", \"transport\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": 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\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\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 _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 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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { 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\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 _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\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 _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/*\nLinks\nhttps://developers.google.com/gtagjs/reference/api\nhttps://developers.google.com/tag-platform/gtagjs/reference\n*/\n\n/**\n * @typedef GaOptions\n * @type {Object}\n * @property {boolean} [cookieUpdate=true]\n * @property {number} [cookieExpires=63072000] Default two years\n * @property {string} [cookieDomain=\"auto\"]\n * @property {string} [cookieFlags]\n * @property {string} [userId]\n * @property {string} [clientId]\n * @property {boolean} [anonymizeIp]\n * @property {string} [contentGroup1]\n * @property {string} [contentGroup2]\n * @property {string} [contentGroup3]\n * @property {string} [contentGroup4]\n * @property {string} [contentGroup5]\n * @property {boolean} [allowAdFeatures=true]\n * @property {boolean} [allowAdPersonalizationSignals]\n * @property {boolean} [nonInteraction]\n * @property {string} [page]\n */\n\n/**\n * @typedef UaEventOptions\n * @type {Object}\n * @property {string} action\n * @property {string} category\n * @property {string} [label]\n * @property {number} [value]\n * @property {boolean} [nonInteraction]\n * @property {('beacon'|'xhr'|'image')} [transport]\n */\n\n/**\n * @typedef InitOptions\n * @type {Object}\n * @property {string} trackingId\n * @property {GaOptions|any} [gaOptions]\n * @property {Object} [gtagOptions] New parameter\n */\nvar GA4 = /*#__PURE__*/function () {\n  function GA4() {\n    var _this = this;\n\n    _classCallCheck(this, GA4);\n\n    _defineProperty(this, \"reset\", function () {\n      _this.isInitialized = false;\n      _this._testMode = false;\n      _this._currentMeasurementId;\n      _this._hasLoadedGA = false;\n      _this._isQueuing = false;\n      _this._queueGtag = [];\n    });\n\n    _defineProperty(this, \"_gtag\", function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      if (!_this._testMode) {\n        if (_this._isQueuing) {\n          _this._queueGtag.push(args);\n        } else {\n          _gtag[\"default\"].apply(void 0, args);\n        }\n      } else {\n        _this._queueGtag.push(args);\n      }\n    });\n\n    _defineProperty(this, \"_loadGA\", function (GA_MEASUREMENT_ID, nonce) {\n      if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n        return;\n      }\n\n      if (!_this._hasLoadedGA) {\n        // Global Site Tag (gtag.js) - Google Analytics\n        var script = document.createElement(\"script\");\n        script.async = true;\n        script.src = \"https://www.googletagmanager.com/gtag/js?id=\".concat(GA_MEASUREMENT_ID);\n\n        if (nonce) {\n          script.setAttribute(\"nonce\", nonce);\n        }\n\n        document.body.appendChild(script);\n        window.dataLayer = window.dataLayer || [];\n\n        window.gtag = function gtag() {\n          window.dataLayer.push(arguments);\n        };\n\n        _this._hasLoadedGA = true;\n      }\n    });\n\n    _defineProperty(this, \"_toGtagOptions\", function (gaOptions) {\n      if (!gaOptions) {\n        return;\n      }\n\n      var mapFields = {\n        // Old https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#cookieUpdate\n        // New https://developers.google.com/analytics/devguides/collection/gtagjs/cookies-user-id#cookie_update\n        cookieUpdate: \"cookie_update\",\n        cookieExpires: \"cookie_expires\",\n        cookieDomain: \"cookie_domain\",\n        cookieFlags: \"cookie_flags\",\n        // must be in set method?\n        userId: \"user_id\",\n        clientId: \"client_id\",\n        anonymizeIp: \"anonymize_ip\",\n        // https://support.google.com/analytics/answer/2853546?hl=en#zippy=%2Cin-this-article\n        contentGroup1: \"content_group1\",\n        contentGroup2: \"content_group2\",\n        contentGroup3: \"content_group3\",\n        contentGroup4: \"content_group4\",\n        contentGroup5: \"content_group5\",\n        // https://support.google.com/analytics/answer/9050852?hl=en\n        allowAdFeatures: \"allow_google_signals\",\n        allowAdPersonalizationSignals: \"allow_ad_personalization_signals\",\n        nonInteraction: \"non_interaction\",\n        page: \"page_path\",\n        hitCallback: \"event_callback\"\n      };\n      var gtagOptions = Object.entries(gaOptions).reduce(function (prev, _ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            key = _ref2[0],\n            value = _ref2[1];\n\n        if (mapFields[key]) {\n          prev[mapFields[key]] = value;\n        } else {\n          prev[key] = value;\n        }\n\n        return prev;\n      }, {});\n      return gtagOptions;\n    });\n\n    _defineProperty(this, \"initialize\", function (GA_MEASUREMENT_ID) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (!GA_MEASUREMENT_ID) {\n        throw new Error(\"Require GA_MEASUREMENT_ID\");\n      }\n\n      var initConfigs = typeof GA_MEASUREMENT_ID === \"string\" ? [{\n        trackingId: GA_MEASUREMENT_ID\n      }] : GA_MEASUREMENT_ID;\n      _this._currentMeasurementId = initConfigs[0].trackingId;\n      var gaOptions = options.gaOptions,\n          gtagOptions = options.gtagOptions,\n          _options$legacyDimens = options.legacyDimensionMetric,\n          legacyDimensionMetric = _options$legacyDimens === void 0 ? true : _options$legacyDimens,\n          nonce = options.nonce,\n          _options$testMode = options.testMode,\n          testMode = _options$testMode === void 0 ? false : _options$testMode;\n      _this._testMode = testMode;\n\n      if (!testMode) {\n        _this._loadGA(_this._currentMeasurementId, nonce);\n      }\n\n      if (!_this.isInitialized) {\n        _this._gtag(\"js\", new Date());\n\n        initConfigs.forEach(function (config) {\n          var mergedGtagOptions = _this._appendCustomMap(_objectSpread(_objectSpread(_objectSpread({\n            // https://developers.google.com/analytics/devguides/collection/gtagjs/pages#disable_pageview_measurement\n            send_page_view: false\n          }, _this._toGtagOptions(_objectSpread(_objectSpread({}, gaOptions), config.gaOptions))), gtagOptions), config.gtagOptions), legacyDimensionMetric);\n\n          _this._gtag(\"config\", config.trackingId, mergedGtagOptions);\n        });\n      }\n\n      _this.isInitialized = true;\n\n      if (!testMode) {\n        var queues = _toConsumableArray(_this._queueGtag);\n\n        _this._queueGtag = [];\n        _this._isQueuing = false;\n\n        while (queues.length) {\n          var queue = queues.shift();\n\n          _this._gtag.apply(_this, _toConsumableArray(queue));\n\n          if (queue[0] === \"get\") {\n            _this._isQueuing = true;\n          }\n        }\n      }\n    });\n\n    _defineProperty(this, \"set\", function (fieldsObject) {\n      if (!fieldsObject) {\n        console.warn(\"`fieldsObject` is required in .set()\");\n        return;\n      }\n\n      if (_typeof(fieldsObject) !== \"object\") {\n        console.warn(\"Expected `fieldsObject` arg to be an Object\");\n        return;\n      }\n\n      if (Object.keys(fieldsObject).length === 0) {\n        console.warn(\"empty `fieldsObject` given to .set()\");\n      }\n\n      _this._gaCommand(\"set\", fieldsObject);\n    });\n\n    _defineProperty(this, \"_gaCommandSendEvent\", function (eventCategory, eventAction, eventLabel, eventValue, fieldsObject) {\n      _this._gtag(\"event\", eventAction, _objectSpread(_objectSpread({\n        event_category: eventCategory,\n        event_label: eventLabel,\n        value: eventValue\n      }, fieldsObject && {\n        non_interaction: fieldsObject.nonInteraction\n      }), _this._toGtagOptions(fieldsObject)));\n    });\n\n    _defineProperty(this, \"_gaCommandSendEventParameters\", function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      if (typeof args[0] === \"string\") {\n        _this._gaCommandSendEvent.apply(_this, _toConsumableArray(args.slice(1)));\n      } else {\n        var _args$ = args[0],\n            eventCategory = _args$.eventCategory,\n            eventAction = _args$.eventAction,\n            eventLabel = _args$.eventLabel,\n            eventValue = _args$.eventValue,\n            hitType = _args$.hitType,\n            rest = _objectWithoutProperties(_args$, _excluded);\n\n        _this._gaCommandSendEvent(eventCategory, eventAction, eventLabel, eventValue, rest);\n      }\n    });\n\n    _defineProperty(this, \"_gaCommandSendTiming\", function (timingCategory, timingVar, timingValue, timingLabel) {\n      _this._gtag(\"event\", \"timing_complete\", {\n        name: timingVar,\n        value: timingValue,\n        event_category: timingCategory,\n        event_label: timingLabel\n      });\n    });\n\n    _defineProperty(this, \"_gaCommandSendPageview\", function (page, fieldsObject) {\n      if (fieldsObject && Object.keys(fieldsObject).length) {\n        var _this$_toGtagOptions = _this._toGtagOptions(fieldsObject),\n            title = _this$_toGtagOptions.title,\n            location = _this$_toGtagOptions.location,\n            rest = _objectWithoutProperties(_this$_toGtagOptions, _excluded2);\n\n        _this._gtag(\"event\", \"page_view\", _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, page && {\n          page_path: page\n        }), title && {\n          page_title: title\n        }), location && {\n          page_location: location\n        }), rest));\n      } else if (page) {\n        _this._gtag(\"event\", \"page_view\", {\n          page_path: page\n        });\n      } else {\n        _this._gtag(\"event\", \"page_view\");\n      }\n    });\n\n    _defineProperty(this, \"_gaCommandSendPageviewParameters\", function () {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      if (typeof args[0] === \"string\") {\n        _this._gaCommandSendPageview.apply(_this, _toConsumableArray(args.slice(1)));\n      } else {\n        var _args$2 = args[0],\n            page = _args$2.page,\n            hitType = _args$2.hitType,\n            rest = _objectWithoutProperties(_args$2, _excluded3);\n\n        _this._gaCommandSendPageview(page, rest);\n      }\n    });\n\n    _defineProperty(this, \"_gaCommandSend\", function () {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      var hitType = typeof args[0] === \"string\" ? args[0] : args[0].hitType;\n\n      switch (hitType) {\n        case \"event\":\n          _this._gaCommandSendEventParameters.apply(_this, args);\n\n          break;\n\n        case \"pageview\":\n          _this._gaCommandSendPageviewParameters.apply(_this, args);\n\n          break;\n\n        case \"timing\":\n          _this._gaCommandSendTiming.apply(_this, _toConsumableArray(args.slice(1)));\n\n          break;\n\n        case \"screenview\":\n        case \"transaction\":\n        case \"item\":\n        case \"social\":\n        case \"exception\":\n          console.warn(\"Unsupported send command: \".concat(hitType));\n          break;\n\n        default:\n          console.warn(\"Send command doesn't exist: \".concat(hitType));\n      }\n    });\n\n    _defineProperty(this, \"_gaCommandSet\", function () {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\n      if (typeof args[0] === \"string\") {\n        args[0] = _defineProperty({}, args[0], args[1]);\n      }\n\n      _this._gtag(\"set\", _this._toGtagOptions(args[0]));\n    });\n\n    _defineProperty(this, \"_gaCommand\", function (command) {\n      for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n        args[_key6 - 1] = arguments[_key6];\n      }\n\n      switch (command) {\n        case \"send\":\n          _this._gaCommandSend.apply(_this, args);\n\n          break;\n\n        case \"set\":\n          _this._gaCommandSet.apply(_this, args);\n\n          break;\n\n        default:\n          console.warn(\"Command doesn't exist: \".concat(command));\n      }\n    });\n\n    _defineProperty(this, \"ga\", function () {\n      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        args[_key7] = arguments[_key7];\n      }\n\n      if (typeof args[0] === \"string\") {\n        _this._gaCommand.apply(_this, args);\n      } else {\n        var readyCallback = args[0];\n\n        _this._gtag(\"get\", _this._currentMeasurementId, \"client_id\", function (clientId) {\n          _this._isQueuing = false;\n          var queues = _this._queueGtag;\n          readyCallback({\n            get: function get(property) {\n              return property === \"clientId\" ? clientId : property === \"trackingId\" ? _this._currentMeasurementId : property === \"apiVersion\" ? \"1\" : undefined;\n            }\n          });\n\n          while (queues.length) {\n            var queue = queues.shift();\n\n            _this._gtag.apply(_this, _toConsumableArray(queue));\n          }\n        });\n\n        _this._isQueuing = true;\n      }\n\n      return _this.ga;\n    });\n\n    _defineProperty(this, \"event\", function (optionsOrName, params) {\n      if (typeof optionsOrName === \"string\") {\n        _this._gtag(\"event\", optionsOrName, _this._toGtagOptions(params));\n      } else {\n        var action = optionsOrName.action,\n            category = optionsOrName.category,\n            label = optionsOrName.label,\n            value = optionsOrName.value,\n            nonInteraction = optionsOrName.nonInteraction,\n            transport = optionsOrName.transport,\n            rest = _objectWithoutProperties(optionsOrName, _excluded4);\n\n        if (!category || !action) {\n          console.warn(\"args.category AND args.action are required in event()\");\n          return;\n        } // Required Fields\n\n\n        var fieldObject = {\n          hitType: \"event\",\n          eventCategory: (0, _format[\"default\"])(category),\n          eventAction: (0, _format[\"default\"])(action)\n        }; // Optional Fields\n\n        if (label) {\n          fieldObject.eventLabel = (0, _format[\"default\"])(label);\n        }\n\n        if (typeof value !== \"undefined\") {\n          if (typeof value !== \"number\") {\n            console.warn(\"Expected `args.value` arg to be a Number.\");\n          } else {\n            fieldObject.eventValue = value;\n          }\n        }\n\n        if (typeof nonInteraction !== \"undefined\") {\n          if (typeof nonInteraction !== \"boolean\") {\n            console.warn(\"`args.nonInteraction` must be a boolean.\");\n          } else {\n            fieldObject.nonInteraction = nonInteraction;\n          }\n        }\n\n        if (typeof transport !== \"undefined\") {\n          if (typeof transport !== \"string\") {\n            console.warn(\"`args.transport` must be a string.\");\n          } else {\n            if ([\"beacon\", \"xhr\", \"image\"].indexOf(transport) === -1) {\n              console.warn(\"`args.transport` must be either one of these values: `beacon`, `xhr` or `image`\");\n            }\n\n            fieldObject.transport = transport;\n          }\n        }\n\n        Object.keys(rest).filter(function (key) {\n          return key.substr(0, \"dimension\".length) === \"dimension\";\n        }).forEach(function (key) {\n          fieldObject[key] = rest[key];\n        });\n        Object.keys(rest).filter(function (key) {\n          return key.substr(0, \"metric\".length) === \"metric\";\n        }).forEach(function (key) {\n          fieldObject[key] = rest[key];\n        });\n\n        _this._gaCommand(\"send\", fieldObject);\n      }\n    });\n\n    _defineProperty(this, \"send\", function (fieldObject) {\n      _this._gaCommand(\"send\", fieldObject);\n    });\n\n    _defineProperty(this, \"pageview\", function (path, _, title) {\n      var pathTrim = path === null || path === void 0 ? void 0 : path.trim();\n\n      if (pathTrim === \"\") {\n        console.warn(\"path cannot be an empty string in .pageview()\");\n        return;\n      }\n\n      _this._gaCommand(\"send\", \"pageview\", pathTrim, {\n        title: title\n      });\n    });\n\n    this.reset();\n  }\n\n  _createClass(GA4, [{\n    key: \"gtag\",\n    value: function gtag() {\n      this._gtag.apply(this, arguments);\n    }\n  }, {\n    key: \"_appendCustomMap\",\n    value: function _appendCustomMap(options) {\n      var legacyDimensionMetric = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      if (!legacyDimensionMetric) {\n        return options;\n      }\n\n      if (!options.custom_map) {\n        options.custom_map = {};\n      }\n\n      for (var i = 1; i <= 200; i++) {\n        if (!options.custom_map[\"dimension\".concat(i)]) {\n          options.custom_map[\"dimension\".concat(i)] = \"dimension\".concat(i);\n        }\n\n        if (!options.custom_map[\"metric\".concat(i)]) {\n          options.custom_map[\"metric\".concat(i)] = \"metric\".concat(i);\n        }\n      }\n\n      return options;\n    }\n    /**\n     * @since v1.0.2\n     * @param {string} [path=\"location.href\"]\n     * @param {string[]} [_] unsupported\n     * @param {string} [title=\"location.pathname\"]\n     * @deprecated Use `.send(\"pageview\")` instead\n     */\n\n  }, {\n    key: \"outboundLink\",\n    value:\n    /**\n     * @since v1.0.6\n     * @param {Object} options\n     * @param {string} options.label\n     * @param {function} hitCallback\n     * @deprecated Use `enhanced measurement` feature in Google Analytics.\n     */\n    function outboundLink(_ref3, hitCallback) {\n      var label = _ref3.label;\n\n      if (typeof hitCallback !== \"function\") {\n        console.warn(\"hitCallback function is required\");\n        return;\n      }\n\n      if (!label) {\n        console.warn(\"args.label is required in outboundLink()\");\n        return;\n      } // Required Fields\n\n\n      var fieldObject = {\n        hitType: \"event\",\n        eventCategory: \"Outbound\",\n        eventAction: \"Click\",\n        eventLabel: (0, _format[\"default\"])(label)\n      };\n      var safetyCallbackCalled = false;\n\n      var safetyCallback = function safetyCallback() {\n        // This prevents a delayed response from GA\n        // causing hitCallback from being fired twice\n        safetyCallbackCalled = true;\n        hitCallback();\n      }; // Using a timeout to ensure the execution of critical application code\n      // in the case when the GA server might be down\n      // or an ad blocker prevents sending the data\n      // register safety net timeout:\n\n\n      var t = setTimeout(safetyCallback, 250);\n\n      var clearableCallbackForGA = function clearableCallbackForGA() {\n        clearTimeout(t);\n\n        if (!safetyCallbackCalled) {\n          hitCallback();\n        }\n      };\n\n      fieldObject.hitCallback = clearableCallbackForGA;\n\n      this._gaCommand(\"send\", fieldObject);\n    }\n  }]);\n\n  return GA4;\n}();\n\nexports.GA4 = GA4;\n\nvar _default = new GA4();\n\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.ReactGAImplementation = void 0;\n\nvar _ga = _interopRequireWildcard(require(\"./ga4\"));\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\nvar ReactGAImplementation = _ga.GA4;\nexports.ReactGAImplementation = ReactGAImplementation;\nvar _default = _ga[\"default\"];\nexports[\"default\"] = _default;","import { getCookie, setCookie } from 'pmt-modules/storage'\r\n\r\nexport const CONSENT_KEY = 'cookie-consent'\r\n\r\nexport const ConsentChoice = {\r\n  ACCEPTED: 'accepted',\r\n  DENIED: 'denied',\r\n}\r\n\r\nconst SIX_MONTHS_MS = 6 * 30 * 24 * 60 * 60 * 1000 // ~6 mois\r\n\r\n// null if unknown or expired. In this case, the behaviour should be as if the user denied the non-essential cookies + display the banner\r\n// we use an (essential) cookie so it's shared between web customer & order plugin\r\nexport const getConsent = () => {\r\n  return getCookie(CONSENT_KEY)\r\n}\r\n\r\nexport const setConsent = choice => {\r\n  if (choice) {\r\n    setCookie(CONSENT_KEY, choice, SIX_MONTHS_MS)\r\n  }\r\n}\r\n","export const cleanUrls = url => {\r\n  // clean urls to know how many people visit each of these pages\r\n  url = url.replace(/users\\/[0-9]+/g, 'users') // replace users/123123 -> users\r\n  url = url.replace(/users\\/me/g, 'users') // replace users/me -> users\r\n  url = url.replace(/check\\/[0-9]+/g, 'check') // replace check/123123 -> check\r\n\r\n  return url\r\n}\r\n","// https://github.com/react-ga/react-ga - previous version for Universal Analytics\r\n//import ReactGA from 'react-ga'\r\n// https://www.npmjs.com/package/react-ga4 - new version for Google Analytics 4\r\nimport ReactGA from 'react-ga4'\r\nimport invariant from 'invariant'\r\nimport concat from 'lodash/concat'\r\nimport forEach from 'lodash/forEach'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getConsent, ConsentChoice } from 'pmt-modules/cookieConsent'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getFrontSessionId } from 'pmt-modules/frontSession'\r\n\r\nimport { getAnalyticsConfig, registerAnalyticsConfig } from './config'\r\nimport { cleanUrls } from './utils'\r\n\r\n/**\r\n * Config is made in [project]/src/config/analytics.js\r\n * It will be merged with api consumer settings if set\r\n * config: {\r\n *   waitForAppConfig: true,\r\n *   identifiers: [\r\n *     {\r\n *       trackingId: 'UA-XXXX-XX',\r\n *       debug: true,\r\n *       gaOptions: {\r\n *         cookieDomain: 'auto',\r\n *         name: '...',\r\n *       },\r\n *     },\r\n *   ],\r\n * }\r\n *\r\n * - waitForAppConfig, default: true. Set to false for the fronts that do not load the app config\r\n *  (e.g: backoffice)\r\n */\r\n\r\nexport * from './config'\r\n\r\nlet _isInitialized = false\r\n\r\nconst hasConsented = () => {\r\n  return getConsent() === ConsentChoice.ACCEPTED\r\n}\r\n\r\n// deprecated - was for react-ga, not useful for react-ga4 who handle multiple trackers\r\nconst getTrackersNames = () =>\r\n  getAnalyticsConfig().identifiers.map(identifier => {\r\n    invariant(!isNil(identifier.gaOptions), 'no identifier gaOptions found')\r\n    return identifier.gaOptions.name\r\n  })\r\n\r\n// deprecated - was for UA, not tested with GA4\r\nexport const pluginRequire = name => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  forEach(getTrackersNames(), trackerName => {\r\n    ReactGA.ga(`${trackerName}.require`, name)\r\n  })\r\n}\r\n// deprecated - was for UA, but the object ReactGA.plugin doesn't seem to exist with GA4\r\n// the only plugin we used was 'ec' (ecommerce) but it seems integrated in GA4 (no plugin needed)\r\nexport const pluginExecute = (pluginName, action, ...args) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  forEach(getTrackersNames(), trackerName => {\r\n    ReactGA.plugin && ReactGA.plugin.execute(`${trackerName}.${pluginName}`, action, ...args)\r\n  })\r\n}\r\n\r\n// for UA\r\nconst sendCheckoutProgress = stepNumber => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.event('checkout_progress', { checkout_step: stepNumber })\r\n}\r\n\r\n// for UA\r\nconst sendCheckoutOption = (stepNumber, optionName, optionValue) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.event('set_checkout_option', {\r\n    checkout_step: stepNumber,\r\n    checkout_option: optionName,\r\n    value: optionValue,\r\n  })\r\n}\r\n\r\nexport const sendViewItem = formattedItem => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // UA and GA4\r\n  ReactGA.event('view_item', { items: [formattedItem] })\r\n}\r\n\r\nexport const sendAddToCart = formattedItem => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // UA and GA4\r\n  ReactGA.event('add_to_cart', { items: [formattedItem] })\r\n}\r\n\r\nexport const sendRemoveFromCart = formattedItem => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // UA and GA4\r\n  ReactGA.event('remove_from_cart', { items: [formattedItem] })\r\n}\r\n\r\nexport const sendViewCart = (formattedItems, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('view_cart', { items: formattedItems })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendCartSubmitted = (formattedItems, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('begin_checkout', { items: formattedItems })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendLogin = stepNumber => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('login')\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendAddDeliveryInfo = (formattedItems, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('add_shipping_info', { items: formattedItems })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendAddPaymentInfo = (formattedItems, paymentMode, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('add_payment_info', {\r\n    payment_type: paymentMode,\r\n    items: formattedItems,\r\n  })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutOption(stepNumber, 'payment_type', paymentMode)\r\n  }\r\n}\r\n\r\nexport const sendPaymentSucceeded = (formattedItems, transactionId, monetaryValue, currency) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.event('purchase', {\r\n    items: formattedItems,\r\n    transaction_id: transactionId,\r\n    value: monetaryValue,\r\n    currency: currency,\r\n  })\r\n}\r\n\r\nexport const sendPaymentSubmitted = (formattedItems, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4 - custom event\r\n  ReactGA.event('payment_submitted', { items: formattedItems })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendEvent = event => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.event(event)\r\n}\r\n\r\nexport const sendPageView = page => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.ga(`set`, 'frontSessionId', getFrontSessionId())\r\n  ReactGA.ga(`set`, 'location', window.location.href)\r\n  ReactGA.ga(`set`, 'page', cleanUrls(page))\r\n  ReactGA.send({ hitType: 'pageview', page: cleanUrls(page) })\r\n}\r\n\r\nconst handleInit = (config, override) => {\r\n  if (override && override.identifiers) {\r\n    config.identifiers = concat(config.identifiers, override.identifiers)\r\n  }\r\n\r\n  registerAnalyticsConfig(config)\r\n\r\n  // Only initialize GA if user has accepted\r\n  const consent = getConsent()\r\n  if (consent === ConsentChoice.ACCEPTED) {\r\n    ReactGA.initialize(config.identifiers, config.options)\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_ANALYTICS_INIT)\r\n\r\n    // set the first page just after init\r\n    sendPageView(window.location.pathname)\r\n\r\n    _isInitialized = true\r\n\r\n    ReactGA.ga(`set`, 'frontSessionId', getFrontSessionId())\r\n  }\r\n}\r\n\r\n// https://developers.google.com/tag-platform/security/guides/consent?consentmode=basic\r\nconst indicateDefaultConsentForGA = () => {\r\n  window.dataLayer = window.dataLayer || []\r\n  window.gtag =\r\n    window.gtag ||\r\n    function() {\r\n      window.dataLayer.push(arguments)\r\n    }\r\n\r\n  window.gtag('consent', 'default', {\r\n    ad_user_data: 'denied',\r\n    ad_personalization: 'denied',\r\n    ad_storage: 'denied',\r\n    analytics_storage: 'denied',\r\n    wait_for_update: 500,\r\n  })\r\n}\r\n\r\nexport const indicateConsentForGA = consentChoice => {\r\n  if (!consentChoice) {\r\n    return // should not happen (should be handled by indicateDefaultConsentForGA)\r\n  }\r\n\r\n  window.dataLayer = window.dataLayer || []\r\n  window.gtag =\r\n    window.gtag ||\r\n    function() {\r\n      window.dataLayer.push(arguments)\r\n    }\r\n\r\n  const ga4ConsentValue = consentChoice === ConsentChoice.ACCEPTED ? 'granted' : 'denied'\r\n\r\n  window.gtag('consent', 'update', {\r\n    // the ad_* (relative to Google Ads feature) should stay with the default value (denied)\r\n    analytics_storage: ga4ConsentValue,\r\n  })\r\n\r\n  if (consentChoice === ConsentChoice.DENIED) {\r\n    // removing existing GA cookies\r\n    deleteExistingGACookies()\r\n  }\r\n}\r\n\r\nfunction getRootDomain(hostname) {\r\n  const parts = hostname.split('.')\r\n  if (parts.length > 2) {\r\n    // \".paymytable.com\"\r\n    return '.' + parts.slice(-2).join('.')\r\n  }\r\n  return '.' + hostname\r\n}\r\n\r\nconst deleteExistingGACookies = () => {\r\n  const gaCookies = ['_ga', '_gid', '_gcl_au']\r\n\r\n  // Get all cookies\r\n  const cookies = document.cookie.split(';')\r\n\r\n  cookies.forEach(cookie => {\r\n    const cookieName = cookie.split('=')[0].trim()\r\n\r\n    if (\r\n      gaCookies.includes(cookieName) ||\r\n      // '_ga_<container-id>' if you use multiple trackers\r\n      cookieName.startsWith('_ga_')\r\n    ) {\r\n      // Delete cookie for current domain\r\n      document.cookie = `${cookieName}=; Max-Age=0; path=/; domain=${window.location.hostname}`\r\n      // Delete cookie for root domain (Google Analytics is likely to have set the cookie for .paymytable.com)\r\n      document.cookie = `${cookieName}=; Max-Age=0; path=/; domain=${getRootDomain(\r\n        window.location.hostname\r\n      )}`\r\n      // Delete cookie without specifying domain (some cookies may be set without domain)\r\n      document.cookie = `${cookieName}=; Max-Age=0; path=/`\r\n    }\r\n  })\r\n}\r\n\r\n// initialize Google Analytics (but only if non-essential cookies have been accepted)\r\nexport const initializeAnalytics = (appOptions, appConfig = null) => {\r\n  // Only initialize GA if user has accepted\r\n  const consent = getConsent()\r\n  if (!consent) {\r\n    indicateDefaultConsentForGA()\r\n  }\r\n  if (consent !== ConsentChoice.ACCEPTED) {\r\n    return\r\n  }\r\n\r\n  const config = appOptions.analytics\r\n\r\n  invariant(!isNil(config), 'no analytics config found')\r\n  invariant(!isNil(config.identifiers), 'no identifiers found on analytics config')\r\n\r\n  // some fronts does not retrieve the app config (e.g: backoffice). We use this config to init\r\n  // the analytics config directly.\r\n  if (config.waitForAppConfig === false) {\r\n    handleInit(config, null)\r\n  } else {\r\n    // we need the appConfig\r\n\r\n    // we already have it => do the initialization immediately\r\n    if (appConfig) {\r\n      handleInit(config, appConfig.front.analytics)\r\n    } else {\r\n      // add a listener to do the initialization once we received the appConfig\r\n      EventManager.addListener(EventManager.Events.ON_GET_APP_CONFIG_SUCCESS, ({ data }) => {\r\n        data.appConfig.front.analytics\r\n          ? handleInit(config, data.appConfig.front.analytics)\r\n          : handleInit(config, null)\r\n      })\r\n    }\r\n  }\r\n\r\n  EventManager.addListener(EventManager.Events.ON_HISTORY_CHANGE, ({ data }) => {\r\n    // the ON_HISTORY_CHANGE event is send before we initializeAnalytics (ON_GET_APP_CONFIG_SUCCESS\r\n    // event)\r\n    if (!_isInitialized) {\r\n      console.warn('History change event ignored, analytics not initialized')\r\n      return\r\n    }\r\n\r\n    sendPageView(data.location.pathname)\r\n  })\r\n}\r\n","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;","var _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\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\nexport default function autoMergeLevel1(inboundState, originalState, reducedState, _ref) {\n  var debug = _ref.debug;\n\n  var newState = _extends({}, reducedState);\n  // only rehydrate if inboundState exists and is an object\n  if (inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') {\n    Object.keys(inboundState).forEach(function (key) {\n      // ignore _persist data\n      if (key === '_persist') return;\n      // if reducer modifies substate, skip auto rehydration\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      // otherwise hard set the new value\n      newState[key] = inboundState[key];\n    });\n  }\n\n  if (process.env.NODE_ENV !== 'production' && debug && inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') console.log('redux-persist/stateReconciler: rehydrated keys \\'' + Object.keys(inboundState).join(', ') + '\\'');\n\n  return newState;\n}\n\n/*\n  autoMergeLevel1: \n    - merges 1 level of substate\n    - skips substate if already modified\n*/","import { KEY_PREFIX, REHYDRATE } from './constants';\n\n// @TODO remove once flow < 0.63 support is no longer required.\n\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 = '' + (config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX) + config.key;\n  var storage = config.storage;\n  var serialize = config.serialize === false ? function (x) {\n    return x;\n  } : defaultSerialize;\n\n  // initialize stateful values\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      if (lastState[key] === state[key]) return; // value unchanged? noop\n      if (keysToProcess.indexOf(key) !== -1) return; // is key already queued? noop\n      keysToProcess.push(key); // add key to queue\n    });\n\n    //if any key is missing in the new state which was present in the lastState,\n    //add it for processing too\n    Object.keys(lastState).forEach(function (key) {\n      if (state[key] === undefined) {\n        keysToProcess.push(key);\n      }\n    });\n\n    // start the time iterator if not running (read: throttle)\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\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 (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    return writePromise || Promise.resolve();\n  };\n\n  // return `persistoid`\n  return {\n    update: update,\n    flush: flush\n  };\n}\n\n// @NOTE in the future this may be exposed via config\nfunction defaultSerialize(data) {\n  return JSON.stringify(data);\n}","\n\nimport { KEY_PREFIX } from './constants';\n\nexport default function getStoredState(config) {\n  var transforms = config.transforms || [];\n  var storageKey = '' + (config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX) + config.key;\n  var storage = config.storage;\n  var debug = config.debug;\n  var deserialize = config.serialize === false ? function (x) {\n    return x;\n  } : defaultDeserialize;\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 ' + serialized, err);\n        throw err;\n      }\n    }\n  });\n}\n\nfunction defaultDeserialize(serial) {\n  return JSON.parse(serial);\n}","\n\nimport { KEY_PREFIX } from './constants';\n\nexport default function purgeStoredState(config) {\n  var storage = config.storage;\n  var storageKey = '' + (config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX) + 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}","var _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\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\nimport { FLUSH, PAUSE, PERSIST, PURGE, REHYDRATE, DEFAULT_VERSION } from './constants';\n\nimport autoMergeLevel1 from './stateReconciler/autoMergeLevel1';\nimport createPersistoid from './createPersistoid';\nimport defaultGetStoredState from './getStoredState';\nimport purgeStoredState from './purgeStoredState';\n\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*/\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  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']);\n\n    var restState = rest;\n\n    if (action.type === PERSIST) {\n      var _sealed = false;\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 \"' + config.key + '\" called after timeout.', payload, err);\n\n        // only rehydrate if we are not already sealed\n        if (!_sealed) {\n          action.rehydrate(config.key, payload, err);\n          _sealed = true;\n        }\n      };\n      timeout && setTimeout(function () {\n        !_sealed && _rehydrate(undefined, new Error('redux-persist: persist timed out for persist key \"' + config.key + '\"'));\n      }, timeout);\n\n      // @NOTE PERSIST resumes if paused.\n      _paused = false;\n\n      // @NOTE only ever create persistoid once, ensure we call it at least once, even if _persist has already been set\n      if (!_persistoid) _persistoid = createPersistoid(config);\n\n      // @NOTE PERSIST can be called multiple times, noop after the first\n      if (_persist) return state;\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\n      action.register(config.key);\n\n      getStoredState(config).then(function (restoredState) {\n        var migrate = config.migrate || function (s, v) {\n          return Promise.resolve(s);\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          _rehydrate(undefined, migrateErr);\n        });\n      }, function (err) {\n        _rehydrate(undefined, err);\n      });\n\n      return _extends({}, baseReducer(restState, action), {\n        _persist: { version: version, rehydrated: false }\n      });\n    } else if (action.type === PURGE) {\n      _purge = true;\n      action.result(purgeStoredState(config));\n      return _extends({}, baseReducer(restState, action), {\n        _persist: _persist\n      });\n    } else if (action.type === FLUSH) {\n      action.result(_persistoid && _persistoid.flush());\n      return _extends({}, 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 _extends({}, restState, {\n        _persist: _extends({}, _persist, { rehydrated: true })\n\n        // @NOTE if key does not match, will continue to default else below\n      });if (action.key === config.key) {\n        var reducedState = baseReducer(restState, action);\n        var inboundState = action.payload;\n        // only reconcile state if stateReconciler and inboundState are both defined\n        var reconciledRest = stateReconciler !== false && inboundState !== undefined ? stateReconciler(inboundState, state, reducedState, config) : reducedState;\n\n        var _newState = _extends({}, reconciledRest, {\n          _persist: _extends({}, _persist, { rehydrated: true })\n        });\n        return conditionalUpdate(_newState);\n      }\n    }\n\n    // if we have not already handled PERSIST, straight passthrough\n    if (!_persist) return baseReducer(state, action);\n\n    // run base reducer:\n    // is state modified ? return original : return updated\n    var newState = baseReducer(restState, action);\n    if (newState === restState) return state;else {\n      newState._persist = _persist;\n      return conditionalUpdate(newState);\n    }\n  };\n}","var _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\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\nimport { createStore } from 'redux';\n\nimport persistReducer from './persistReducer';\nimport { FLUSH, PAUSE, PERSIST, PURGE, REGISTER, REHYDRATE } from './constants';\n\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[1];\n\n  switch (action.type) {\n    case REGISTER:\n      return _extends({}, state, { registry: [].concat(_toConsumableArray(state.registry), [action.key]) });\n    case REHYDRATE:\n      var firstIndex = state.registry.indexOf(action.key);\n      var registry = [].concat(_toConsumableArray(state.registry));\n      registry.splice(firstIndex, 1);\n      return _extends({}, state, { registry: registry, bootstrapped: registry.length === 0 });\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: \"' + k + '\". You may be incorrectly passing persistConfig into persistStore, whereas it should be passed into persistReducer.');\n    });\n  }\n  var boostrappedCb = cb || false;\n\n  var _pStore = createStore(persistorReducer, initialState, options ? options.enhancer : undefined);\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\n      // dispatch to `store` to rehydrate and `persistor` to track result\n    };store.dispatch(rehydrateAction);\n    _pStore.dispatch(rehydrateAction);\n    if (boostrappedCb && persistor.getState().bootstrapped) {\n      boostrappedCb();\n      boostrappedCb = false;\n    }\n  };\n\n  var persistor = _extends({}, _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({ type: PERSIST, register: register, rehydrate: rehydrate });\n    }\n  });\n\n  persistor.persist();\n\n  return persistor;\n}","\n\nexport default function createTransform(\n// @NOTE inbound: transform state coming from redux on its way to being serialized and stored\ninbound,\n// @NOTE outbound: transform state coming from storage, on its way to be rehydrated into redux\noutbound) {\n  var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  var whitelist = config.whitelist || null;\n  var blacklist = config.blacklist || null;\n\n  function whitelistBlacklistCheck(key) {\n    if (whitelist && whitelist.indexOf(key) === -1) return true;\n    if (blacklist && blacklist.indexOf(key) !== -1) return true;\n    return false;\n  }\n\n  return {\n    in: function _in(state, key, fullState) {\n      return !whitelistBlacklistCheck(key) && inbound ? inbound(state, key, fullState) : state;\n    },\n    out: function out(state, key, fullState) {\n      return !whitelistBlacklistCheck(key) && outbound ? outbound(state, key, fullState) : state;\n    }\n  };\n}","'use strict';\n\nexports.__esModule = true;\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\nexports.default = getStorage;\n\n\nfunction noop() {}\n\nvar noopStorage = {\n  getItem: noop,\n  setItem: noop,\n  removeItem: noop\n};\n\nfunction hasStorage(storageType) {\n  if ((typeof self === 'undefined' ? 'undefined' : _typeof(self)) !== 'object' || !(storageType in self)) {\n    return false;\n  }\n\n  try {\n    var storage = self[storageType];\n    var testKey = 'redux-persist ' + storageType + ' test';\n    storage.setItem(testKey, 'test');\n    storage.getItem(testKey);\n    storage.removeItem(testKey);\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') console.warn('redux-persist ' + storageType + ' test failed, persistence will be disabled.');\n    return false;\n  }\n  return true;\n}\n\nfunction getStorage(type) {\n  var storageType = type + 'Storage';\n  if (hasStorage(storageType)) return self[storageType];else {\n    if (process.env.NODE_ENV !== 'production') {\n      console.error('redux-persist failed to create sync storage. falling back to memory storage.');\n    }\n    return noopStorage;\n  }\n}","'use strict';\n\nexports.__esModule = true;\nexports.default = createWebStorage;\n\nvar _getStorage = require('./getStorage');\n\nvar _getStorage2 = _interopRequireDefault(_getStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createWebStorage(type) {\n  var storage = (0, _getStorage2.default)(type);\n  return {\n    getItem: function getItem(key) {\n      return new Promise(function (resolve, reject) {\n        resolve(storage.getItem(key));\n      });\n    },\n    setItem: function setItem(key, item) {\n      return new Promise(function (resolve, reject) {\n        resolve(storage.setItem(key, item));\n      });\n    },\n    removeItem: function removeItem(key) {\n      return new Promise(function (resolve, reject) {\n        resolve(storage.removeItem(key));\n      });\n    }\n  };\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _createWebStorage = require('./createWebStorage');\n\nvar _createWebStorage2 = _interopRequireDefault(_createWebStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _createWebStorage2.default)('local');","\"use strict\";\n\nexports.__esModule = true;\nexports.default = hardSet;\n\n\n/*\n  hardSet: \n    - hard set incoming state\n*/\n\nfunction hardSet(inboundState) {\n  return inboundState;\n}","module.exports = pathGetter;\n\nfunction pathGetter(obj, path) {\n  if (path !== '$') {\n    var paths = getPaths(path);\n    for (var i = 0; i < paths.length; i++) {\n      path = paths[i].toString().replace(/\\\\\"/g, '\"');\n      if (typeof obj[path] === 'undefined' && i !== paths.length - 1) continue;\n      obj = obj[path];\n    }\n  }\n  return obj;\n}\n\nfunction getPaths(pathString) {\n  var regex = /(?:\\.(\\w+))|(?:\\[(\\d+)\\])|(?:\\[\"((?:[^\\\\\"]|\\\\.)*)\"\\])/g;\n  var matches = [];\n  var match;\n  while (match = regex.exec(pathString)) {\n    matches.push( match[1] || match[2] || match[3] );\n  }\n  return matches;\n}\n","var pathGetter = require('./path-getter');\nvar jsan = require('./');\n\nexports.getRegexFlags = function getRegexFlags(regex) {\n  var flags = '';\n  if (regex.ignoreCase) flags += 'i';\n  if (regex.global) flags += 'g';\n  if (regex.multiline) flags += 'm';\n  return flags;\n};\n\nexports.stringifyFunction = function stringifyFunction(fn, customToString) {\n  if (typeof customToString === 'function') {\n    return customToString(fn);\n  }\n  var str = fn.toString();\n  var match = str.match(/^[^{]*{|^[^=]*=>/);\n  var start = match ? match[0] : '<function> ';\n  var end = str[str.length - 1] === '}' ? '}' : '';\n  return start.replace(/\\r\\n|\\n/g, ' ').replace(/\\s+/g, ' ') + ' /* ... */ ' + end;\n};\n\nexports.restore = function restore(obj, root) {\n  var type = obj[0];\n  var rest = obj.slice(1);\n  switch(type) {\n    case '$':\n      return pathGetter(root, obj);\n    case 'r':\n      var comma = rest.indexOf(',');\n      var flags = rest.slice(0, comma);\n      var source = rest.slice(comma + 1);\n      return RegExp(source, flags);\n    case 'd':\n      return new Date(+rest);\n    case 'f':\n      var fn = function() { throw new Error(\"can't run jsan parsed function\") };\n      fn.toString = function() { return rest; };\n      return fn;\n    case 'u':\n      return undefined;\n    case 'e':\n      var error = new Error(rest);\n      error.stack = 'Stack is unavailable for jsan parsed errors';\n      return error;\n    case 's':\n      return Symbol(rest);\n    case 'g':\n      return Symbol.for(rest);\n    case 'm':\n      return new Map(jsan.parse(rest));\n    case 'l':\n      return new Set(jsan.parse(rest));\n    case 'n':\n      return NaN;\n    case 'i':\n      return Infinity;\n    case 'y':\n      return -Infinity;\n    default:\n      console.warn('unknown type', obj);\n      return obj;\n  }\n}\n","var pathGetter = require('./path-getter');\nvar utils = require('./utils');\n\nvar WMap = typeof WeakMap !== 'undefined'?\n  WeakMap:\n  function() {\n    var keys = [];\n    var values = [];\n    return {\n      set: function(key, value) {\n        keys.push(key);\n        values.push(value);\n      },\n      get: function(key) {\n        for (var i = 0; i < keys.length; i++) {\n          if (keys[i] === key) {\n            return values[i];\n          }\n        }\n      }\n    }\n  };\n\n// Based on https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n\nexports.decycle = function decycle(object, options, replacer, map) {\n  'use strict';\n\n  map = map || new WMap();\n\n  var noCircularOption = !Object.prototype.hasOwnProperty.call(options, 'circular');\n  var withRefs = options.refs !== false;\n\n  return (function derez(_value, path, key) {\n\n    // The derez recurses through the object, producing the deep copy.\n\n    var i,        // The loop counter\n      name,       // Property name\n      nu;         // The new object or array\n\n    // typeof null === 'object', so go on if this value is really an object but not\n    // one of the weird builtin objects.\n\n    var value = typeof replacer === 'function' ? replacer(key || '', _value) : _value;\n\n    if (options.date && value instanceof Date) {\n      return {$jsan: 'd' + value.getTime()};\n    }\n    if (options.regex && value instanceof RegExp) {\n      return {$jsan: 'r' + utils.getRegexFlags(value) + ',' + value.source};\n    }\n    if (options['function'] && typeof value === 'function') {\n      return {$jsan: 'f' + utils.stringifyFunction(value, options['function'])}\n    }\n    if (options['nan'] && typeof value === 'number' && isNaN(value)) {\n      return {$jsan: 'n'}\n    }\n    if (options['infinity']) {\n      if (Number.POSITIVE_INFINITY === value) return {$jsan: 'i'}\n      if (Number.NEGATIVE_INFINITY === value) return {$jsan: 'y'}\n    }\n    if (options['undefined'] && value === undefined) {\n      return {$jsan: 'u'}\n    }\n    if (options['error'] && value instanceof Error) {\n      return {$jsan: 'e' + value.message}\n    }\n    if (options['symbol'] && typeof value === 'symbol') {\n      var symbolKey = Symbol.keyFor(value)\n      if (symbolKey !== undefined) {\n        return {$jsan: 'g' + symbolKey}\n      }\n\n      // 'Symbol(foo)'.slice(7, -1) === 'foo'\n      return {$jsan: 's' + value.toString().slice(7, -1)}\n    }\n\n    if (options['map'] && typeof Map === 'function' && value instanceof Map && typeof Array.from === 'function') {\n      return {$jsan: 'm' + JSON.stringify(decycle(Array.from(value), options, replacer, map))}\n    }\n\n    if (options['set'] && typeof Set === 'function' && value instanceof Set && typeof Array.from === 'function') {\n      return {$jsan: 'l' + JSON.stringify(decycle(Array.from(value), options, replacer, map))}\n    }\n\n    if (value && typeof value.toJSON === 'function') {\n      try {\n        value = value.toJSON(key);\n      } catch (error) {\n        var keyString = (key || '$');\n        return \"toJSON failed for '\" + (map.get(value) || keyString) + \"'\";\n      }\n    }\n\n    if (typeof value === 'object' && value !== null &&\n      !(value instanceof Boolean) &&\n      !(value instanceof Date)    &&\n      !(value instanceof Number)  &&\n      !(value instanceof RegExp)  &&\n      !(value instanceof String)  &&\n      !(typeof value === 'symbol')  &&\n      !(value instanceof Error)) {\n\n        // If the value is an object or array, look to see if we have already\n        // encountered it. If so, return a $ref/path object.\n\n      if (typeof value === 'object') {\n        var foundPath = map.get(value);\n        if (foundPath) {\n          if (noCircularOption && withRefs) {\n            return {$jsan: foundPath};\n          }\n          \n          // This is only a true circular reference if the parent path is inside of foundPath\n          // drop the last component of the current path and check if it starts with foundPath\n          var parentPath = path.split('.').slice(0, -1).join('.');\n          if (parentPath.indexOf(foundPath) === 0) {\n            if (!noCircularOption) {\n              return typeof options.circular === 'function'?\n              options.circular(value, path, foundPath):\n              options.circular;\n            }\n            return {$jsan: foundPath};\n          }\n          if (withRefs) return {$jsan: foundPath};\n        }\n        map.set(value, path);\n      }\n\n\n      // If it is an array, replicate the array.\n\n      if (Object.prototype.toString.apply(value) === '[object Array]') {\n          nu = [];\n          for (i = 0; i < value.length; i += 1) {\n              nu[i] = derez(value[i], path + '[' + i + ']', i);\n          }\n      } else {\n\n        // If it is an object, replicate the object.\n\n        nu = {};\n        for (name in value) {\n          if (Object.prototype.hasOwnProperty.call(value, name)) {\n            var nextPath = /^\\w+$/.test(name) ?\n              '.' + name :\n              '[' + JSON.stringify(name) + ']';\n            nu[name] = name === '$jsan' ? [derez(value[name], path + nextPath)] : derez(value[name], path + nextPath, name);\n          }\n        }\n      }\n      return nu;\n    }\n    return value;\n  }(object, '$'));\n};\n\n\nexports.retrocycle = function retrocycle($) {\n  'use strict';\n\n\n  return (function rez(value) {\n\n    // The rez function walks recursively through the object looking for $jsan\n    // properties. When it finds one that has a value that is a path, then it\n    // replaces the $jsan object with a reference to the value that is found by\n    // the path.\n\n    var i, item, name, path;\n\n    if (value && typeof value === 'object') {\n      if (Object.prototype.toString.apply(value) === '[object Array]') {\n        for (i = 0; i < value.length; i += 1) {\n          item = value[i];\n          if (item && typeof item === 'object') {\n            if (item.$jsan) {\n              value[i] = utils.restore(item.$jsan, $);\n            } else {\n              rez(item);\n            }\n          }\n        }\n      } else {\n        for (name in value) {\n          // base case passed raw object\n          if(typeof value[name] === 'string' && name === '$jsan'){\n            return utils.restore(value.$jsan, $);\n            break;\n          }\n          else {\n            if (name === '$jsan') {\n              value[name] = value[name][0];\n            }\n            if (typeof value[name] === 'object') {\n              item = value[name];\n              if (item && typeof item === 'object') {\n                if (item.$jsan) {\n                  value[name] = utils.restore(item.$jsan, $);\n                } else {\n                  rez(item);\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    return value;\n  }($));\n};\n","var cycle = require('./cycle');\n\nexports.stringify = function stringify(value, replacer, space, _options) {\n\n  if (arguments.length < 4) {\n    try {\n      if (arguments.length === 1) {\n        return JSON.stringify(value);\n      } else {\n        return JSON.stringify.apply(JSON, arguments);\n      }\n    } catch (e) {}\n  }\n\n  var options = _options || false;\n  if (typeof options === 'boolean') {\n    options = {\n      'date': options,\n      'function': options,\n      'regex': options,\n      'undefined': options,\n      'error': options,\n      'symbol': options,\n      'map': options,\n      'set': options,\n      'nan': options,\n      'infinity': options\n    }\n  }\n\n  var decycled = cycle.decycle(value, options, replacer);\n  if (arguments.length === 1) {\n    return JSON.stringify(decycled);\n  } else {\n    // decycle already handles when replacer is a function.\n    return JSON.stringify(decycled, Array.isArray(replacer) ? replacer : null, space);\n  }\n}\n\nexports.parse = function parse(text, reviver) {\n  var needsRetrocycle = /\"\\$jsan\"/.test(text);\n  var parsed;\n  if (arguments.length === 1) {\n    parsed = JSON.parse(text);\n  } else {\n    parsed = JSON.parse(text, reviver);\n  }\n  if (needsRetrocycle) {\n    parsed = cycle.retrocycle(parsed);\n  }\n  return parsed;\n}\n","module.exports = require('./lib');\n","export function mark(data, type, transformMethod) {\n  return {\n    data: transformMethod ? data[transformMethod]() : data,\n    __serializedType__: type\n  };\n}\nexport function extract(data, type) {\n  return {\n    data: Object.assign({}, data),\n    __serializedType__: type\n  };\n}\nexport function refer(data, type, transformMethod, refs) {\n  const r = mark(data, type, transformMethod);\n  if (!refs) return r;\n  for (let i = 0; i < refs.length; i++) {\n    const ref = refs[i];\n    if (typeof ref === 'function' && data instanceof ref) {\n      r.__serializedRef__ = i;\n      return r;\n    }\n  }\n  return r;\n}","// jsan stringify options\n\nexport default {\n  refs: false,\n  // references can't be resolved on the original Immutable structure\n  date: true,\n  function: true,\n  regex: true,\n  undefined: true,\n  error: true,\n  symbol: true,\n  map: true,\n  set: true,\n  nan: true,\n  infinity: true\n};","import { mark, extract, refer } from '../helpers';\nimport options from '../constants/options';\nexport default function serialize(immutable, refs, customReplacer, customReviver) {\n  function replacer(key, value) {\n    if (value instanceof immutable.Record) return refer(value, 'ImmutableRecord', 'toObject', refs);\n    if (value instanceof immutable.Range) return extract(value, 'ImmutableRange');\n    if (value instanceof immutable.Repeat) return extract(value, 'ImmutableRepeat');\n    if (immutable.OrderedMap.isOrderedMap(value)) return mark(value, 'ImmutableOrderedMap', 'toObject');\n    if (immutable.Map.isMap(value)) return mark(value, 'ImmutableMap', 'toObject');\n    if (immutable.List.isList(value)) return mark(value, 'ImmutableList', 'toArray');\n    if (immutable.OrderedSet.isOrderedSet(value)) return mark(value, 'ImmutableOrderedSet', 'toArray');\n    if (immutable.Set.isSet(value)) return mark(value, 'ImmutableSet', 'toArray');\n    if (immutable.Seq.isSeq(value)) return mark(value, 'ImmutableSeq', 'toArray');\n    if (immutable.Stack.isStack(value)) return mark(value, 'ImmutableStack', 'toArray');\n    return value;\n  }\n  function reviver(key, value) {\n    if (typeof value === 'object' && value !== null && '__serializedType__' in value) {\n      const immutableValue = value;\n      switch (immutableValue.__serializedType__) {\n        case 'ImmutableMap':\n          return immutable.Map(immutableValue.data);\n        case 'ImmutableOrderedMap':\n          return immutable.OrderedMap(immutableValue.data);\n        case 'ImmutableList':\n          return immutable.List(immutableValue.data);\n        case 'ImmutableRange':\n          return immutable.Range(immutableValue.data._start, immutableValue.data._end, immutableValue.data._step);\n        case 'ImmutableRepeat':\n          return immutable.Repeat(immutableValue.data._value, immutableValue.data.size);\n        case 'ImmutableSet':\n          return immutable.Set(immutableValue.data);\n        case 'ImmutableOrderedSet':\n          return immutable.OrderedSet(immutableValue.data);\n        case 'ImmutableSeq':\n          return immutable.Seq(immutableValue.data);\n        case 'ImmutableStack':\n          return immutable.Stack(immutableValue.data);\n        case 'ImmutableRecord':\n          return refs && refs[immutableValue.__serializedRef__] ? new refs[immutableValue.__serializedRef__](immutableValue.data) : immutable.Map(immutableValue.data);\n        default:\n          return immutableValue.data;\n      }\n    }\n    return value;\n  }\n  return {\n    replacer: customReplacer ? function (key, value) {\n      return customReplacer(key, value, replacer);\n    } : replacer,\n    reviver: customReviver ? function (key, value) {\n      return customReviver(key, value, reviver);\n    } : reviver,\n    options: options\n  };\n}","import jsan from 'jsan';\nimport serialize from './serialize';\nimport options from '../constants/options';\nexport default function (immutable, refs, customReplacer, customReviver) {\n  return {\n    stringify: function (data) {\n      return jsan.stringify(data, serialize(immutable, refs, customReplacer, customReviver).replacer, undefined, options);\n    },\n    parse: function (data) {\n      return jsan.parse(data, serialize(immutable, refs, customReplacer, customReviver).reviver);\n    },\n    serialize: serialize\n  };\n}\nexport { default as serialize } from './serialize';","// Replaces 'redux-persist-transform-immutable' (5.0.0) with a custom transform using 'redux-persist' and '@redux-devtools' serializer\r\n\r\nimport { createTransform } from 'redux-persist'\r\nimport Immutable from 'immutable'\r\nimport { immutable } from '@redux-devtools/serialize'\r\nimport Logger from 'pmt-utils/logger/index.js'\r\n\r\nconst { stringify, parse } = immutable(Immutable)\r\n\r\nconst immutableTransform = () =>\r\n  createTransform(\r\n    // Serialization\r\n    (inboundState, key) => {\r\n      try {\r\n        return stringify(inboundState)\r\n      } catch (error) {\r\n        Logger.error(`immutableTransform: serialization (stringify) failed for key \"${key}\"`, error)\r\n        throw error\r\n      }\r\n    },\r\n    // Deserialization\r\n    (outboundState, key) => {\r\n      try {\r\n        return parse(outboundState)\r\n      } catch (error) {\r\n        Logger.error(`immutableTransform: deserialization (parse) failed for key \"${key}\"`, error)\r\n        throw error\r\n      }\r\n    }\r\n  )\r\n\r\nexport default immutableTransform\r\n","import React from 'react';\nexport var ReactReduxContext = React.createContext(null);\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n  return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n  return batch;\n};","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\nvar CLEARED = null;\nvar nullListeners = {\n  notify: function notify() {}\n};\n\nfunction createListenerCollection() {\n  var batch = getBatch(); // the current/next pattern is copied from redux's createStore code.\n  // TODO: refactor+expose that code to be reusable here?\n\n  var current = [];\n  var next = [];\n  return {\n    clear: function clear() {\n      next = CLEARED;\n      current = CLEARED;\n    },\n    notify: function notify() {\n      var listeners = current = next;\n      batch(function () {\n        for (var i = 0; i < listeners.length; i++) {\n          listeners[i]();\n        }\n      });\n    },\n    get: function get() {\n      return next;\n    },\n    subscribe: function subscribe(listener) {\n      var isSubscribed = true;\n      if (next === current) next = current.slice();\n      next.push(listener);\n      return function unsubscribe() {\n        if (!isSubscribed || current === CLEARED) return;\n        isSubscribed = false;\n        if (next === current) next = current.slice();\n        next.splice(next.indexOf(listener), 1);\n      };\n    }\n  };\n}\n\nvar Subscription =\n/*#__PURE__*/\nfunction () {\n  function Subscription(store, parentSub) {\n    this.store = store;\n    this.parentSub = parentSub;\n    this.unsubscribe = null;\n    this.listeners = nullListeners;\n    this.handleChangeWrapper = this.handleChangeWrapper.bind(this);\n  }\n\n  var _proto = Subscription.prototype;\n\n  _proto.addNestedSub = function addNestedSub(listener) {\n    this.trySubscribe();\n    return this.listeners.subscribe(listener);\n  };\n\n  _proto.notifyNestedSubs = function notifyNestedSubs() {\n    this.listeners.notify();\n  };\n\n  _proto.handleChangeWrapper = function handleChangeWrapper() {\n    if (this.onStateChange) {\n      this.onStateChange();\n    }\n  };\n\n  _proto.isSubscribed = function isSubscribed() {\n    return Boolean(this.unsubscribe);\n  };\n\n  _proto.trySubscribe = function trySubscribe() {\n    if (!this.unsubscribe) {\n      this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.handleChangeWrapper) : this.store.subscribe(this.handleChangeWrapper);\n      this.listeners = createListenerCollection();\n    }\n  };\n\n  _proto.tryUnsubscribe = function tryUnsubscribe() {\n    if (this.unsubscribe) {\n      this.unsubscribe();\n      this.unsubscribe = null;\n      this.listeners.clear();\n      this.listeners = nullListeners;\n    }\n  };\n\n  return Subscription;\n}();\n\nexport { Subscription as default };","import React, { useMemo, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport Subscription from '../utils/Subscription';\n\nfunction Provider(_ref) {\n  var store = _ref.store,\n      context = _ref.context,\n      children = _ref.children;\n  var contextValue = useMemo(function () {\n    var subscription = new Subscription(store);\n    subscription.onStateChange = subscription.notifyNestedSubs;\n    return {\n      store: store,\n      subscription: subscription\n    };\n  }, [store]);\n  var previousState = useMemo(function () {\n    return store.getState();\n  }, [store]);\n  useEffect(function () {\n    var subscription = contextValue.subscription;\n    subscription.trySubscribe();\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs();\n    }\n\n    return function () {\n      subscription.tryUnsubscribe();\n      subscription.onStateChange = null;\n    };\n  }, [contextValue, previousState]);\n  var Context = context || ReactReduxContext;\n  return React.createElement(Context.Provider, {\n    value: contextValue\n  }, children);\n}\n\nProvider.propTypes = {\n  store: PropTypes.shape({\n    subscribe: PropTypes.func.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    getState: PropTypes.func.isRequired\n  }),\n  context: PropTypes.object,\n  children: PropTypes.any\n};\nexport default Provider;","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\nvar isHopefullyDomEnvironment = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';\nexport var useIsomorphicLayoutEffect = isHopefullyDomEnvironment ? useLayoutEffect : useEffect;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport hoistStatics from 'hoist-non-react-statics';\nimport invariant from 'invariant';\nimport React, { useContext, useMemo, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport Subscription from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n  try {\n    return JSON.stringify(Comp);\n  } catch (err) {\n    return String(Comp);\n  }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n  var updateCount = state[1];\n  return [action.payload, updateCount + 1];\n}\n\nvar initStateUpdates = function initStateUpdates() {\n  return [null, 0];\n};\n\nexport default function connectAdvanced(\n/*\r\n  selectorFactory is a func that is responsible for returning the selector function used to\r\n  compute new props from state, props, and dispatch. For example:\r\n      export default connectAdvanced((dispatch, options) => (state, props) => ({\r\n      thing: state.things[props.thingId],\r\n      saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\r\n    }))(YourComponent)\r\n    Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\r\n  outside of their selector as an optimization. Options passed to connectAdvanced are passed to\r\n  the selectorFactory, along with displayName and WrappedComponent, as the second argument.\r\n    Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\r\n  props. Do not use connectAdvanced directly without memoizing results between calls to your\r\n  selector, otherwise the Connect component will re-render on every state or props change.\r\n*/\nselectorFactory, // options object:\n_ref) {\n  if (_ref === void 0) {\n    _ref = {};\n  }\n\n  var _ref2 = _ref,\n      _ref2$getDisplayName = _ref2.getDisplayName,\n      getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n    return \"ConnectAdvanced(\" + name + \")\";\n  } : _ref2$getDisplayName,\n      _ref2$methodName = _ref2.methodName,\n      methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n      _ref2$renderCountProp = _ref2.renderCountProp,\n      renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n      _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n      shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n      _ref2$storeKey = _ref2.storeKey,\n      storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n      _ref2$withRef = _ref2.withRef,\n      withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n      _ref2$forwardRef = _ref2.forwardRef,\n      forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n      _ref2$context = _ref2.context,\n      context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n      connectOptions = _objectWithoutPropertiesLoose(_ref2, [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"]);\n\n  invariant(renderCountProp === undefined, \"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n  invariant(!withRef, 'withRef is removed. To access the wrapped instance, use a ref on the connected component');\n  var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: <Provider context={MyContext}><ConnectedComponent context={MyContext} /></Provider>. ' + 'You may also pass a {context : MyContext} option to connect';\n  invariant(storeKey === 'store', 'storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n  var Context = context;\n  return function wrapWithConnect(WrappedComponent) {\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(isValidElementType(WrappedComponent), \"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n    }\n\n    var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n    var displayName = getDisplayName(wrappedComponentName);\n\n    var selectorFactoryOptions = _extends({}, connectOptions, {\n      getDisplayName: getDisplayName,\n      methodName: methodName,\n      renderCountProp: renderCountProp,\n      shouldHandleStateChanges: shouldHandleStateChanges,\n      storeKey: storeKey,\n      displayName: displayName,\n      wrappedComponentName: wrappedComponentName,\n      WrappedComponent: WrappedComponent\n    });\n\n    var pure = connectOptions.pure;\n\n    function createChildSelector(store) {\n      return selectorFactory(store.dispatch, selectorFactoryOptions);\n    } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n    // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n    // that just executes the given callback immediately.\n\n\n    var usePureOnlyMemo = pure ? useMemo : function (callback) {\n      return callback();\n    };\n\n    function ConnectFunction(props) {\n      var _useMemo = useMemo(function () {\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        var forwardedRef = props.forwardedRef,\n            wrapperProps = _objectWithoutPropertiesLoose(props, [\"forwardedRef\"]);\n\n        return [props.context, forwardedRef, wrapperProps];\n      }, [props]),\n          propsContext = _useMemo[0],\n          forwardedRef = _useMemo[1],\n          wrapperProps = _useMemo[2];\n\n      var ContextToUse = useMemo(function () {\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 && isContextConsumer(React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n      }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n      var 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      var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n      var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n      invariant(didStoreComeFromProps || didStoreComeFromContext, \"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a <Provider>, \") + \"or pass a custom React context provider to <Provider> and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\")); // Based on the previous check, one of these must be true\n\n      var store = didStoreComeFromProps ? props.store : contextValue.store;\n      var childPropsSelector = useMemo(function () {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return createChildSelector(store);\n      }, [store]);\n\n      var _useMemo2 = useMemo(function () {\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        var subscription = new Subscription(store, didStoreComeFromProps ? null : 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        var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n        return [subscription, notifyNestedSubs];\n      }, [store, didStoreComeFromProps, contextValue]),\n          subscription = _useMemo2[0],\n          notifyNestedSubs = _useMemo2[1]; // 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\n      var overriddenContextValue = useMemo(function () {\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: subscription\n        });\n      }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n      // causes a change to the calculated child component props (or we caught an error in mapState)\n\n      var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n          _useReducer$ = _useReducer[0],\n          previousStateUpdateResult = _useReducer$[0],\n          forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n      if (previousStateUpdateResult && previousStateUpdateResult.error) {\n        throw previousStateUpdateResult.error;\n      } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n      var lastChildProps = useRef();\n      var lastWrapperProps = useRef(wrapperProps);\n      var childPropsFromStoreUpdate = useRef();\n      var renderIsScheduled = useRef(false);\n      var actualChildProps = usePureOnlyMemo(function () {\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      }, [store, previousStateUpdateResult, 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      useIsomorphicLayoutEffect(function () {\n        // We want to capture the wrapper props and child props we used for later comparisons\n        lastWrapperProps.current = wrapperProps;\n        lastChildProps.current = actualChildProps;\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      }); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n      useIsomorphicLayoutEffect(function () {\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        var didUnsubscribe = false;\n        var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n        var checkForUpdates = function checkForUpdates() {\n          if (didUnsubscribe) {\n            // Don't run stale listeners.\n            // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n            return;\n          }\n\n          var latestStoreState = store.getState();\n          var 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; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n            forceComponentUpdateDispatch({\n              type: 'STORE_UPDATED',\n              payload: {\n                error: error\n              }\n            });\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        var unsubscribeWrapper = function 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      }, [store, subscription, childPropsSelector]); // 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      var renderedWrappedComponent = useMemo(function () {\n        return React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n          ref: forwardedRef\n        }));\n      }, [forwardedRef, 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      var renderedChild = useMemo(function () {\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 React.createElement(ContextToUse.Provider, {\n            value: overriddenContextValue\n          }, renderedWrappedComponent);\n        }\n\n        return renderedWrappedComponent;\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n      return renderedChild;\n    } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n    var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n    Connect.WrappedComponent = WrappedComponent;\n    Connect.displayName = displayName;\n\n    if (forwardRef) {\n      var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n        return React.createElement(Connect, _extends({}, props, {\n          forwardedRef: ref\n        }));\n      });\n      forwarded.displayName = displayName;\n      forwarded.WrappedComponent = WrappedComponent;\n      return hoistStatics(forwarded, WrappedComponent);\n    }\n\n    return hoistStatics(Connect, WrappedComponent);\n  };\n}","var hasOwn = Object.prototype.hasOwnProperty;\n\nfunction 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  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return false;\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n  return function initConstantSelector(dispatch, options) {\n    var constant = getConstant(dispatch, options);\n\n    function constantSelector() {\n      return constant;\n    }\n\n    constantSelector.dependsOnOwnProps = false;\n    return constantSelector;\n  };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n  return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n  return function initProxySelector(dispatch, _ref) {\n    var displayName = _ref.displayName;\n\n    var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n    }; // allow detectFactoryAndVerify to get ownProps\n\n\n    proxy.dependsOnOwnProps = true;\n\n    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n      proxy.mapToProps = mapToProps;\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n      var props = proxy(stateOrDispatch, ownProps);\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props;\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n        props = proxy(stateOrDispatch, ownProps);\n      }\n\n      if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n      return props;\n    };\n\n    return proxy;\n  };\n}","import { bindActionCreators } from 'redux';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n  return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n  return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n    return {\n      dispatch: dispatch\n    };\n  }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n    return bindActionCreators(mapDispatchToProps, dispatch);\n  }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n  return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n  return !mapStateToProps ? wrapMapToPropsConstant(function () {\n    return {};\n  }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n  return _extends({}, ownProps, {}, stateProps, {}, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n  return function initMergePropsProxy(dispatch, _ref) {\n    var displayName = _ref.displayName,\n        pure = _ref.pure,\n        areMergedPropsEqual = _ref.areMergedPropsEqual;\n    var hasRunOnce = false;\n    var mergedProps;\n    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n      var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n      if (hasRunOnce) {\n        if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n      } else {\n        hasRunOnce = true;\n        mergedProps = nextMergedProps;\n        if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n      }\n\n      return mergedProps;\n    };\n  };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n  return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n  return !mergeProps ? function () {\n    return defaultMergeProps;\n  } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n  return function impureFinalPropsSelector(state, ownProps) {\n    return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n  };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n  var areStatesEqual = _ref.areStatesEqual,\n      areOwnPropsEqual = _ref.areOwnPropsEqual,\n      areStatePropsEqual = _ref.areStatePropsEqual;\n  var hasRunAtLeastOnce = false;\n  var state;\n  var ownProps;\n  var stateProps;\n  var dispatchProps;\n  var mergedProps;\n\n  function handleFirstCall(firstState, firstOwnProps) {\n    state = firstState;\n    ownProps = firstOwnProps;\n    stateProps = mapStateToProps(state, ownProps);\n    dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    hasRunAtLeastOnce = true;\n    return mergedProps;\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewState() {\n    var nextStateProps = mapStateToProps(state, ownProps);\n    var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n    stateProps = nextStateProps;\n    if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleSubsequentCalls(nextState, nextOwnProps) {\n    var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n    var stateChanged = !areStatesEqual(nextState, state);\n    state = nextState;\n    ownProps = nextOwnProps;\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n    if (propsChanged) return handleNewProps();\n    if (stateChanged) return handleNewState();\n    return mergedProps;\n  }\n\n  return function pureFinalPropsSelector(nextState, nextOwnProps) {\n    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n  };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n  var initMapStateToProps = _ref2.initMapStateToProps,\n      initMapDispatchToProps = _ref2.initMapDispatchToProps,\n      initMergeProps = _ref2.initMergeProps,\n      options = _objectWithoutPropertiesLoose(_ref2, [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"]);\n\n  var mapStateToProps = initMapStateToProps(dispatch, options);\n  var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n  var mergeProps = initMergeProps(dispatch, options);\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n  }\n\n  var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n  return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\r\n  connect is a facade over connectAdvanced. It turns its args into a compatible\r\n  selectorFactory, which has the signature:\r\n\r\n    (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\r\n  \r\n  connect passes its args to connectAdvanced as options, which will in turn pass them to\r\n  selectorFactory each time a Connect component instance is instantiated or hot reloaded.\r\n\r\n  selectorFactory returns a final props selector from its mapStateToProps,\r\n  mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\r\n  mergePropsFactories, and pure args.\r\n\r\n  The resulting final props selector is called by the Connect component instance whenever\r\n  it receives new props or store state.\r\n */\n\nfunction match(arg, factories, name) {\n  for (var i = factories.length - 1; i >= 0; i--) {\n    var result = factories[i](arg);\n    if (result) return result;\n  }\n\n  return function (dispatch, options) {\n    throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n  };\n}\n\nfunction strictEqual(a, b) {\n  return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$connectHOC = _ref.connectHOC,\n      connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n      _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n      mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n      _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n      mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n      _ref$mergePropsFactor = _ref.mergePropsFactories,\n      mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n      _ref$selectorFactory = _ref.selectorFactory,\n      selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n  return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n    if (_ref2 === void 0) {\n      _ref2 = {};\n    }\n\n    var _ref3 = _ref2,\n        _ref3$pure = _ref3.pure,\n        pure = _ref3$pure === void 0 ? true : _ref3$pure,\n        _ref3$areStatesEqual = _ref3.areStatesEqual,\n        areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n        _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n        areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n        _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n        areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n        _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n        areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n        extraOptions = _objectWithoutPropertiesLoose(_ref3, [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"]);\n\n    var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n    var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n    var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n    return connectHOC(selectorFactory, _extends({\n      // used in error messages\n      methodName: 'connect',\n      // used to compute Connect's displayName from the wrapped component's displayName.\n      getDisplayName: function getDisplayName(name) {\n        return \"Connect(\" + name + \")\";\n      },\n      // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n      shouldHandleStateChanges: Boolean(mapStateToProps),\n      // passed through to selectorFactory\n      initMapStateToProps: initMapStateToProps,\n      initMapDispatchToProps: initMapDispatchToProps,\n      initMergeProps: initMergeProps,\n      pure: pure,\n      areStatesEqual: areStatesEqual,\n      areOwnPropsEqual: areOwnPropsEqual,\n      areStatePropsEqual: areStatePropsEqual,\n      areMergedPropsEqual: areMergedPropsEqual\n    }, extraOptions));\n  };\n}\nexport default createConnect();","import { useContext } from 'react';\nimport invariant from 'invariant';\nimport { ReactReduxContext } from '../components/Context';\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 = ({ value }) => {\r\n *   const { store } = useReduxContext()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport function useReduxContext() {\n  var contextValue = useContext(ReactReduxContext);\n  invariant(contextValue, 'could not find react-redux context value; please ensure the component is wrapped in a <Provider>');\n  return contextValue;\n}","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 {Function} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context) {\n  if (context === void 0) {\n    context = ReactReduxContext;\n  }\n\n  var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n    return useContext(context);\n  };\n  return function useStore() {\n    var _useReduxContext = useReduxContext(),\n        store = _useReduxContext.store;\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 <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport var useStore = 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 {Function} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context) {\n  if (context === void 0) {\n    context = ReactReduxContext;\n  }\n\n  var useStore = context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n  return function useDispatch() {\n    var store = useStore();\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 *     <div>\r\n *       <span>{value}</span>\r\n *       <button onClick={increaseCounter}>Increase counter</button>\r\n *     </div>\r\n *   )\r\n * }\r\n */\n\nexport var useDispatch = createDispatchHook();","import { useReducer, useRef, useMemo, useContext } from 'react';\nimport invariant from 'invariant';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport Subscription from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from '../components/Context';\n\nvar refEquality = function refEquality(a, b) {\n  return a === b;\n};\n\nfunction useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {\n  var _useReducer = useReducer(function (s) {\n    return s + 1;\n  }, 0),\n      forceRender = _useReducer[1];\n\n  var subscription = useMemo(function () {\n    return new Subscription(store, contextSub);\n  }, [store, contextSub]);\n  var latestSubscriptionCallbackError = useRef();\n  var latestSelector = useRef();\n  var latestSelectedState = useRef();\n  var selectedState;\n\n  try {\n    if (selector !== latestSelector.current || latestSubscriptionCallbackError.current) {\n      selectedState = selector(store.getState());\n    } else {\n      selectedState = latestSelectedState.current;\n    }\n  } catch (err) {\n    var errorMessage = \"An error occurred while selecting the store state: \" + err.message + \".\";\n\n    if (latestSubscriptionCallbackError.current) {\n      errorMessage += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\nOriginal stack trace:\";\n    }\n\n    throw new Error(errorMessage);\n  }\n\n  useIsomorphicLayoutEffect(function () {\n    latestSelector.current = selector;\n    latestSelectedState.current = selectedState;\n    latestSubscriptionCallbackError.current = undefined;\n  });\n  useIsomorphicLayoutEffect(function () {\n    function checkForUpdates() {\n      try {\n        var newSelectedState = latestSelector.current(store.getState());\n\n        if (equalityFn(newSelectedState, latestSelectedState.current)) {\n          return;\n        }\n\n        latestSelectedState.current = newSelectedState;\n      } catch (err) {\n        // we ignore all errors here, since when the component\n        // is re-rendered, the selectors are called again, and\n        // will throw again, if neither props nor store state\n        // changed\n        latestSubscriptionCallbackError.current = err;\n      }\n\n      forceRender({});\n    }\n\n    subscription.onStateChange = checkForUpdates;\n    subscription.trySubscribe();\n    checkForUpdates();\n    return function () {\n      return subscription.tryUnsubscribe();\n    };\n  }, [store, subscription]);\n  return selectedState;\n}\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {Function} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context) {\n  if (context === void 0) {\n    context = ReactReduxContext;\n  }\n\n  var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n    return useContext(context);\n  };\n  return function useSelector(selector, equalityFn) {\n    if (equalityFn === void 0) {\n      equalityFn = refEquality;\n    }\n\n    invariant(selector, \"You must pass a selector to useSelectors\");\n\n    var _useReduxContext = useReduxContext(),\n        store = _useReduxContext.store,\n        contextSub = _useReduxContext.subscription;\n\n    return useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);\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 <div>{counter}</div>\r\n * }\r\n */\n\nexport var useSelector = createSelectorHook();","import Provider from './components/Provider';\nimport connectAdvanced from './components/connectAdvanced';\nimport { ReactReduxContext } from './components/Context';\nimport connect from './connect/connect';\nimport { useDispatch, createDispatchHook } from './hooks/useDispatch';\nimport { useSelector, createSelectorHook } from './hooks/useSelector';\nimport { useStore, createStoreHook } from './hooks/useStore';\nimport { setBatch } from './utils/batch';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport shallowEqual from './utils/shallowEqual';\nsetBatch(batch);\nexport { Provider, connectAdvanced, ReactReduxContext, connect, batch, useDispatch, createDispatchHook, useSelector, createSelectorHook, useStore, createStoreHook, shallowEqual };","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n  var key = '__global_unique_id__';\n  return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nfunction createEventEmitter(value) {\n  var handlers = [];\n  return {\n    on: function on(handler) {\n      handlers.push(handler);\n    },\n    off: function off(handler) {\n      handlers = handlers.filter(function (h) {\n        return h !== handler;\n      });\n    },\n    get: function get() {\n      return value;\n    },\n    set: function set(newValue, changedBits) {\n      value = newValue;\n      handlers.forEach(function (handler) {\n        return handler(value, changedBits);\n      });\n    }\n  };\n}\n\nfunction onlyChild(children) {\n  return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n  var _Provider$childContex, _Consumer$contextType;\n\n  var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n  var Provider = /*#__PURE__*/function (_Component) {\n    _inheritsLoose(Provider, _Component);\n\n    function Provider() {\n      var _this;\n\n      _this = _Component.apply(this, arguments) || this;\n      _this.emitter = createEventEmitter(_this.props.value);\n      return _this;\n    }\n\n    var _proto = Provider.prototype;\n\n    _proto.getChildContext = function getChildContext() {\n      var _ref;\n\n      return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n    };\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      if (this.props.value !== nextProps.value) {\n        var oldValue = this.props.value;\n        var newValue = nextProps.value;\n        var changedBits;\n\n        if (objectIs(oldValue, newValue)) {\n          changedBits = 0;\n        } else {\n          changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n          if (process.env.NODE_ENV !== 'production') {\n            warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n          }\n\n          changedBits |= 0;\n\n          if (changedBits !== 0) {\n            this.emitter.set(nextProps.value, changedBits);\n          }\n        }\n      }\n    };\n\n    _proto.render = function render() {\n      return this.props.children;\n    };\n\n    return Provider;\n  }(Component);\n\n  Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n  var Consumer = /*#__PURE__*/function (_Component2) {\n    _inheritsLoose(Consumer, _Component2);\n\n    function Consumer() {\n      var _this2;\n\n      _this2 = _Component2.apply(this, arguments) || this;\n      _this2.state = {\n        value: _this2.getValue()\n      };\n\n      _this2.onUpdate = function (newValue, changedBits) {\n        var observedBits = _this2.observedBits | 0;\n\n        if ((observedBits & changedBits) !== 0) {\n          _this2.setState({\n            value: _this2.getValue()\n          });\n        }\n      };\n\n      return _this2;\n    }\n\n    var _proto2 = Consumer.prototype;\n\n    _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var observedBits = nextProps.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentDidMount = function componentDidMount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].on(this.onUpdate);\n      }\n\n      var observedBits = this.props.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentWillUnmount = function componentWillUnmount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].off(this.onUpdate);\n      }\n    };\n\n    _proto2.getValue = function getValue() {\n      if (this.context[contextProp]) {\n        return this.context[contextProp].get();\n      } else {\n        return defaultValue;\n      }\n    };\n\n    _proto2.render = function render() {\n      return onlyChild(this.props.children)(this.state.value);\n    };\n\n    return Consumer;\n  }(Component);\n\n  Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n  return {\n    Provider: Provider,\n    Consumer: Consumer\n  };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","function isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n  if (from === undefined) from = '';\n\n  var toParts = (to && to.split('/')) || [];\n  var fromParts = (from && from.split('/')) || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n  if (\n    mustEndAbs &&\n    fromParts[0] !== '' &&\n    (!fromParts[0] || !isAbsolute(fromParts[0]))\n  )\n    fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\nexport default resolvePathname;\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n    if (condition) {\n        return;\n    }\n    if (isProduction) {\n        throw new Error(prefix);\n    }\n    var provided = typeof message === 'function' ? message() : message;\n    var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n    throw new Error(value);\n}\n\nexport { invariant as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n  return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n  var hashIndex = pathname.indexOf('#');\n\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n}\nfunction createPath(location) {\n  var pathname = location.pathname,\n      search = location.search,\n      hash = location.hash;\n  var path = pathname || '/';\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n  return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n  var location;\n\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = parsePath(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = _extends({}, path);\n    if (location.pathname === undefined) location.pathname = '';\n\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n\n  if (key) location.key = key;\n\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n\n  return location;\n}\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n  var prompt = null;\n\n  function setPrompt(nextPrompt) {\n    process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n    prompt = nextPrompt;\n    return function () {\n      if (prompt === nextPrompt) prompt = null;\n    };\n  }\n\n  function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n    // TODO: If another transition starts while we're still confirming\n    // the previous one, we may end up in a weird state. Figure out the\n    // best way to handle this.\n    if (prompt != null) {\n      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n      if (typeof result === 'string') {\n        if (typeof getUserConfirmation === 'function') {\n          getUserConfirmation(result, callback);\n        } else {\n          process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n          callback(true);\n        }\n      } else {\n        // Return false from a transition hook to cancel the transition.\n        callback(result !== false);\n      }\n    } else {\n      callback(true);\n    }\n  }\n\n  var listeners = [];\n\n  function appendListener(fn) {\n    var isActive = true;\n\n    function listener() {\n      if (isActive) fn.apply(void 0, arguments);\n    }\n\n    listeners.push(listener);\n    return function () {\n      isActive = false;\n      listeners = listeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function notifyListeners() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    listeners.forEach(function (listener) {\n      return listener.apply(void 0, args);\n    });\n  }\n\n  return {\n    setPrompt: setPrompt,\n    confirmTransitionTo: confirmTransitionTo,\n    appendListener: appendListener,\n    notifyListeners: notifyListeners\n  };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n  callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = window.navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n  return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canUseHistory = supportsHistory();\n  var needsHashChangeListener = !supportsPopStateOnHashChange();\n  var _props = props,\n      _props$forceRefresh = _props.forceRefresh,\n      forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n  function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n        key = _ref.key,\n        state = _ref.state;\n\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n    var path = pathname + search + hash;\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path, state, key);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if (isExtraneousPopstateEvent(event)) return;\n    handlePop(getDOMLocation(event.state));\n  }\n\n  function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  }\n\n  var forceNextPop = false;\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  }\n\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key]; // Public interface\n\n  function createHref(location) {\n    return basename + createPath(location);\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.pushState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex + 1);\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n        window.location.href = href;\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.replaceState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n        window.location.replace(href);\n      }\n    });\n  }\n\n  function go(n) {\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n  hashbang: {\n    encodePath: function encodePath(path) {\n      return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n    },\n    decodePath: function decodePath(path) {\n      return path.charAt(0) === '!' ? path.substr(1) : path;\n    }\n  },\n  noslash: {\n    encodePath: stripLeadingSlash,\n    decodePath: addLeadingSlash\n  },\n  slash: {\n    encodePath: addLeadingSlash,\n    decodePath: addLeadingSlash\n  }\n};\n\nfunction stripHash(url) {\n  var hashIndex = url.indexOf('#');\n  return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var hashIndex = href.indexOf('#');\n  return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n  window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n  var _props = props,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$hashType = _props.hashType,\n      hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n  var _HashPathCoders$hashT = HashPathCoders[hashType],\n      encodePath = _HashPathCoders$hashT.encodePath,\n      decodePath = _HashPathCoders$hashT.decodePath;\n\n  function getDOMLocation() {\n    var path = decodePath(getHashPath());\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  var forceNextPop = false;\n  var ignorePath = null;\n\n  function locationsAreEqual$$1(a, b) {\n    return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n  }\n\n  function handleHashChange() {\n    var path = getHashPath();\n    var encodedPath = encodePath(path);\n\n    if (path !== encodedPath) {\n      // Ensure we always have a properly-encoded hash.\n      replaceHashPath(encodedPath);\n    } else {\n      var location = getDOMLocation();\n      var prevLocation = history.location;\n      if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n      if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n      ignorePath = null;\n      handlePop(location);\n    }\n  }\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of paths we've seen in sessionStorage.\n    // Instead, we just default to 0 for paths we don't know.\n\n    var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  } // Ensure the hash is encoded properly before doing anything else.\n\n\n  var path = getHashPath();\n  var encodedPath = encodePath(path);\n  if (path !== encodedPath) replaceHashPath(encodedPath);\n  var initialLocation = getDOMLocation();\n  var allPaths = [createPath(initialLocation)]; // Public interface\n\n  function createHref(location) {\n    var baseTag = document.querySelector('base');\n    var href = '';\n\n    if (baseTag && baseTag.getAttribute('href')) {\n      href = stripHash(window.location.href);\n    }\n\n    return href + '#' + encodePath(basename + createPath(location));\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a PUSH, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        pushHashPath(encodedPath);\n        var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n        var nextPaths = allPaths.slice(0, prevIndex + 1);\n        nextPaths.push(path);\n        allPaths = nextPaths;\n        setState({\n          action: action,\n          location: location\n        });\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n        setState();\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        replaceHashPath(encodedPath);\n      }\n\n      var prevIndex = allPaths.indexOf(createPath(history.location));\n      if (prevIndex !== -1) allPaths[prevIndex] = path;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(HashChangeEvent$1, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(HashChangeEvent$1, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n  return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  var _props = props,\n      getUserConfirmation = _props.getUserConfirmation,\n      _props$initialEntries = _props.initialEntries,\n      initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n      _props$initialIndex = _props.initialIndex,\n      initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = history.entries.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var index = clamp(initialIndex, 0, initialEntries.length - 1);\n  var entries = initialEntries.map(function (entry) {\n    return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n  }); // Public interface\n\n  var createHref = createPath;\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var prevIndex = history.index;\n      var nextIndex = prevIndex + 1;\n      var nextEntries = history.entries.slice(0);\n\n      if (nextEntries.length > nextIndex) {\n        nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n      } else {\n        nextEntries.push(location);\n      }\n\n      setState({\n        action: action,\n        location: location,\n        index: nextIndex,\n        entries: nextEntries\n      });\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      history.entries[history.index] = location;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n    var action = 'POP';\n    var location = history.entries[nextIndex];\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (ok) {\n        setState({\n          action: action,\n          location: location,\n          index: nextIndex\n        });\n      } else {\n        // Mimic the behavior of DOM histories by\n        // causing a render after a cancelled POP.\n        setState();\n      }\n    });\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function canGo(n) {\n    var nextIndex = history.index + n;\n    return nextIndex >= 0 && nextIndex < history.entries.length;\n  }\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    return transitionManager.setPrompt(prompt);\n  }\n\n  function listen(listener) {\n    return transitionManager.appendListener(listener);\n  }\n\n  var history = {\n    length: entries.length,\n    action: 'POP',\n    location: entries[index],\n    index: index,\n    entries: entries,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    canGo: canGo,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","module.exports = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = options && options.delimiter || '/'\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      continue\n    }\n\n    var next = str[index]\n    var prefix = res[2]\n    var name = res[3]\n    var capture = res[4]\n    var group = res[5]\n    var modifier = res[6]\n    var asterisk = res[7]\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n    }\n\n    var partial = prefix != null && next != null && next !== prefix\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var delimiter = prefix || defaultDelimiter\n    var pattern = capture || group\n    var prevText = prefix || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : restrictBacktrack(delimiter, prevText))\n    })\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path += str.substr(index)\n  }\n\n  // If the path exists, push it onto the end.\n  if (path) {\n    tokens.push(path)\n  }\n\n  return tokens\n}\n\nfunction restrictBacktrack(delimiter, prevText) {\n  if (!prevText || prevText.indexOf(delimiter) > -1) {\n    return '[^' + escapeString(delimiter) + ']+?'\n  }\n\n  return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')[^' + escapeString(delimiter) + '])+?'\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n    }\n  }\n\n  return function (obj, opts) {\n    var path = ''\n    var data = obj || {}\n    var options = opts || {}\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n\n        continue\n      }\n\n      var value = data[token.name]\n      var segment\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path += token.prefix\n          }\n\n          continue\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined')\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j])\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n      }\n\n      path += token.prefix + segment\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n  re.keys = keys\n  return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      })\n    }\n  }\n\n  return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n  return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  var strict = options.strict\n  var end = options.end !== false\n  var route = ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var prefix = escapeString(token.prefix)\n      var capture = '(?:' + token.pattern + ')'\n\n      keys.push(token)\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*'\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?'\n        } else {\n          capture = prefix + '(' + capture + ')?'\n        }\n      } else {\n        capture = prefix + '(' + capture + ')'\n      }\n\n      route += capture\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/')\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n  }\n\n  if (end) {\n    route += '$'\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, /** @type {!Array} */ (keys))\n  }\n\n  if (isarray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","import createContext from 'mini-create-react-context';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport { createMemoryHistory, createLocation, locationsAreEqual, createPath } from 'history';\nimport invariant from 'tiny-invariant';\nimport pathToRegexp from 'path-to-regexp';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport { isValidElementType } from 'react-is';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport hoistStatics from 'hoist-non-react-statics';\n\n// TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext = function createNamedContext(name) {\n  var context = createContext();\n  context.displayName = name;\n  return context;\n};\n\nvar context =\n/*#__PURE__*/\ncreateNamedContext(\"Router\");\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Router, _React$Component);\n\n  Router.computeRootMatch = function computeRootMatch(pathname) {\n    return {\n      path: \"/\",\n      url: \"/\",\n      params: {},\n      isExact: pathname === \"/\"\n    };\n  };\n\n  function Router(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this;\n    _this.state = {\n      location: props.history.location\n    }; // This is a bit of a hack. We have to start listening for location\n    // changes here in the constructor in case there are any <Redirect>s\n    // on the initial render. If there are, they will replace/push when\n    // they mount and since cDM fires in children before parents, we may\n    // get a new location before the <Router> is mounted.\n\n    _this._isMounted = false;\n    _this._pendingLocation = null;\n\n    if (!props.staticContext) {\n      _this.unlisten = props.history.listen(function (location) {\n        if (_this._isMounted) {\n          _this.setState({\n            location: location\n          });\n        } else {\n          _this._pendingLocation = location;\n        }\n      });\n    }\n\n    return _this;\n  }\n\n  var _proto = Router.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this._isMounted = true;\n\n    if (this._pendingLocation) {\n      this.setState({\n        location: this._pendingLocation\n      });\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.unlisten) this.unlisten();\n  };\n\n  _proto.render = function render() {\n    return React.createElement(context.Provider, {\n      children: this.props.children || null,\n      value: {\n        history: this.props.history,\n        location: this.state.location,\n        match: Router.computeRootMatch(this.state.location.pathname),\n        staticContext: this.props.staticContext\n      }\n    });\n  };\n\n  return Router;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Router.propTypes = {\n    children: PropTypes.node,\n    history: PropTypes.object.isRequired,\n    staticContext: PropTypes.object\n  };\n\n  Router.prototype.componentDidUpdate = function (prevProps) {\n    process.env.NODE_ENV !== \"production\" ? warning(prevProps.history === this.props.history, \"You cannot change <Router history>\") : void 0;\n  };\n}\n\n/**\n * The public API for a <Router> that stores location in memory.\n */\n\nvar MemoryRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(MemoryRouter, _React$Component);\n\n  function MemoryRouter() {\n    var _this;\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createMemoryHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = MemoryRouter.prototype;\n\n  _proto.render = function render() {\n    return React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return MemoryRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  MemoryRouter.propTypes = {\n    initialEntries: PropTypes.array,\n    initialIndex: PropTypes.number,\n    getUserConfirmation: PropTypes.func,\n    keyLength: PropTypes.number,\n    children: PropTypes.node\n  };\n\n  MemoryRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<MemoryRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\") : void 0;\n  };\n}\n\nvar Lifecycle =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Lifecycle, _React$Component);\n\n  function Lifecycle() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Lifecycle.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    if (this.props.onMount) this.props.onMount.call(this, this);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n  };\n\n  _proto.render = function render() {\n    return null;\n  };\n\n  return Lifecycle;\n}(React.Component);\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\n\nfunction Prompt(_ref) {\n  var message = _ref.message,\n      _ref$when = _ref.when,\n      when = _ref$when === void 0 ? true : _ref$when;\n  return React.createElement(context.Consumer, null, function (context$$1) {\n    !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Prompt> outside a <Router>\") : invariant(false) : void 0;\n    if (!when || context$$1.staticContext) return null;\n    var method = context$$1.history.block;\n    return React.createElement(Lifecycle, {\n      onMount: function onMount(self) {\n        self.release = method(message);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        if (prevProps.message !== message) {\n          self.release();\n          self.release = method(message);\n        }\n      },\n      onUnmount: function onUnmount(self) {\n        self.release();\n      },\n      message: message\n    });\n  });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  var messageType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);\n  Prompt.propTypes = {\n    when: PropTypes.bool,\n    message: messageType.isRequired\n  };\n}\n\nvar cache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nfunction compilePath(path) {\n  if (cache[path]) return cache[path];\n  var generator = pathToRegexp.compile(path);\n\n  if (cacheCount < cacheLimit) {\n    cache[path] = generator;\n    cacheCount++;\n  }\n\n  return generator;\n}\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\n\n\nfunction generatePath(path, params) {\n  if (path === void 0) {\n    path = \"/\";\n  }\n\n  if (params === void 0) {\n    params = {};\n  }\n\n  return path === \"/\" ? path : compilePath(path)(params, {\n    pretty: true\n  });\n}\n\n/**\n * The public API for navigating programmatically with a component.\n */\n\nfunction Redirect(_ref) {\n  var computedMatch = _ref.computedMatch,\n      to = _ref.to,\n      _ref$push = _ref.push,\n      push = _ref$push === void 0 ? false : _ref$push;\n  return React.createElement(context.Consumer, null, function (context$$1) {\n    !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Redirect> outside a <Router>\") : invariant(false) : void 0;\n    var history = context$$1.history,\n        staticContext = context$$1.staticContext;\n    var method = push ? history.push : history.replace;\n    var location = createLocation(computedMatch ? typeof to === \"string\" ? generatePath(to, computedMatch.params) : _extends({}, to, {\n      pathname: generatePath(to.pathname, computedMatch.params)\n    }) : to); // When rendering in a static context,\n    // set the new location immediately.\n\n    if (staticContext) {\n      method(location);\n      return null;\n    }\n\n    return React.createElement(Lifecycle, {\n      onMount: function onMount() {\n        method(location);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        var prevLocation = createLocation(prevProps.to);\n\n        if (!locationsAreEqual(prevLocation, _extends({}, location, {\n          key: prevLocation.key\n        }))) {\n          method(location);\n        }\n      },\n      to: to\n    });\n  });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  Redirect.propTypes = {\n    push: PropTypes.bool,\n    from: PropTypes.string,\n    to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n  };\n}\n\nvar cache$1 = {};\nvar cacheLimit$1 = 10000;\nvar cacheCount$1 = 0;\n\nfunction compilePath$1(path, options) {\n  var cacheKey = \"\" + options.end + options.strict + options.sensitive;\n  var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {});\n  if (pathCache[path]) return pathCache[path];\n  var keys = [];\n  var regexp = pathToRegexp(path, keys, options);\n  var result = {\n    regexp: regexp,\n    keys: keys\n  };\n\n  if (cacheCount$1 < cacheLimit$1) {\n    pathCache[path] = result;\n    cacheCount$1++;\n  }\n\n  return result;\n}\n/**\n * Public API for matching a URL pathname to a path.\n */\n\n\nfunction matchPath(pathname, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  if (typeof options === \"string\") options = {\n    path: options\n  };\n  var _options = options,\n      path = _options.path,\n      _options$exact = _options.exact,\n      exact = _options$exact === void 0 ? false : _options$exact,\n      _options$strict = _options.strict,\n      strict = _options$strict === void 0 ? false : _options$strict,\n      _options$sensitive = _options.sensitive,\n      sensitive = _options$sensitive === void 0 ? false : _options$sensitive;\n  var paths = [].concat(path);\n  return paths.reduce(function (matched, path) {\n    if (!path) return null;\n    if (matched) return matched;\n\n    var _compilePath = compilePath$1(path, {\n      end: exact,\n      strict: strict,\n      sensitive: sensitive\n    }),\n        regexp = _compilePath.regexp,\n        keys = _compilePath.keys;\n\n    var match = regexp.exec(pathname);\n    if (!match) return null;\n    var url = match[0],\n        values = match.slice(1);\n    var isExact = pathname === url;\n    if (exact && !isExact) return null;\n    return {\n      path: path,\n      // the path used to match\n      url: path === \"/\" && url === \"\" ? \"/\" : url,\n      // the matched portion of the URL\n      isExact: isExact,\n      // whether or not we matched exactly\n      params: keys.reduce(function (memo, key, index) {\n        memo[key.name] = values[index];\n        return memo;\n      }, {})\n    };\n  }, null);\n}\n\nfunction isEmptyChildren(children) {\n  return React.Children.count(children) === 0;\n}\n/**\n * The public API for matching a single path and rendering.\n */\n\n\nvar Route =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Route, _React$Component);\n\n  function Route() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Route.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return React.createElement(context.Consumer, null, function (context$$1) {\n      !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Route> outside a <Router>\") : invariant(false) : void 0;\n      var location = _this.props.location || context$$1.location;\n      var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us\n      : _this.props.path ? matchPath(location.pathname, _this.props) : context$$1.match;\n\n      var props = _extends({}, context$$1, {\n        location: location,\n        match: match\n      });\n\n      var _this$props = _this.props,\n          children = _this$props.children,\n          component = _this$props.component,\n          render = _this$props.render; // Preact uses an empty array as children by\n      // default, so use null if that's the case.\n\n      if (Array.isArray(children) && children.length === 0) {\n        children = null;\n      }\n\n      if (typeof children === \"function\") {\n        children = children(props);\n\n        if (children === undefined) {\n          if (process.env.NODE_ENV !== \"production\") {\n            var path = _this.props.path;\n            process.env.NODE_ENV !== \"production\" ? warning(false, \"You returned `undefined` from the `children` function of \" + (\"<Route\" + (path ? \" path=\\\"\" + path + \"\\\"\" : \"\") + \">, but you \") + \"should have returned a React element or `null`\") : void 0;\n          }\n\n          children = null;\n        }\n      }\n\n      return React.createElement(context.Provider, {\n        value: props\n      }, children && !isEmptyChildren(children) ? children : props.match ? component ? React.createElement(component, props) : render ? render(props) : null : null);\n    });\n  };\n\n  return Route;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Route.propTypes = {\n    children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n    component: function component(props, propName) {\n      if (props[propName] && !isValidElementType(props[propName])) {\n        return new Error(\"Invalid prop 'component' supplied to 'Route': the prop is not a valid React component\");\n      }\n    },\n    exact: PropTypes.bool,\n    location: PropTypes.object,\n    path: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n    render: PropTypes.func,\n    sensitive: PropTypes.bool,\n    strict: PropTypes.bool\n  };\n\n  Route.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.component), \"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored\") : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.render), \"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored\") : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.component && this.props.render), \"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\") : void 0;\n  };\n\n  Route.prototype.componentDidUpdate = function (prevProps) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.location && !prevProps.location), '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(!this.props.location && prevProps.location), '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n  };\n}\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n  if (!basename) return location;\n  return _extends({}, location, {\n    pathname: addLeadingSlash(basename) + location.pathname\n  });\n}\n\nfunction stripBasename(basename, location) {\n  if (!basename) return location;\n  var base = addLeadingSlash(basename);\n  if (location.pathname.indexOf(base) !== 0) return location;\n  return _extends({}, location, {\n    pathname: location.pathname.substr(base.length)\n  });\n}\n\nfunction createURL(location) {\n  return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n  return function () {\n    process.env.NODE_ENV !== \"production\" ? invariant(false, \"You cannot %s with <StaticRouter>\", methodName) : invariant(false);\n  };\n}\n\nfunction noop() {}\n/**\n * The public top-level API for a \"static\" <Router>, so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\n\nvar StaticRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(StaticRouter, _React$Component);\n\n  function StaticRouter() {\n    var _this;\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n    _this.handlePush = function (location) {\n      return _this.navigateTo(location, \"PUSH\");\n    };\n\n    _this.handleReplace = function (location) {\n      return _this.navigateTo(location, \"REPLACE\");\n    };\n\n    _this.handleListen = function () {\n      return noop;\n    };\n\n    _this.handleBlock = function () {\n      return noop;\n    };\n\n    return _this;\n  }\n\n  var _proto = StaticRouter.prototype;\n\n  _proto.navigateTo = function navigateTo(location, action) {\n    var _this$props = this.props,\n        _this$props$basename = _this$props.basename,\n        basename = _this$props$basename === void 0 ? \"\" : _this$props$basename,\n        _this$props$context = _this$props.context,\n        context = _this$props$context === void 0 ? {} : _this$props$context;\n    context.action = action;\n    context.location = addBasename(basename, createLocation(location));\n    context.url = createURL(context.location);\n  };\n\n  _proto.render = function render() {\n    var _this$props2 = this.props,\n        _this$props2$basename = _this$props2.basename,\n        basename = _this$props2$basename === void 0 ? \"\" : _this$props2$basename,\n        _this$props2$context = _this$props2.context,\n        context = _this$props2$context === void 0 ? {} : _this$props2$context,\n        _this$props2$location = _this$props2.location,\n        location = _this$props2$location === void 0 ? \"/\" : _this$props2$location,\n        rest = _objectWithoutPropertiesLoose(_this$props2, [\"basename\", \"context\", \"location\"]);\n\n    var history = {\n      createHref: function createHref(path) {\n        return addLeadingSlash(basename + createURL(path));\n      },\n      action: \"POP\",\n      location: stripBasename(basename, createLocation(location)),\n      push: this.handlePush,\n      replace: this.handleReplace,\n      go: staticHandler(\"go\"),\n      goBack: staticHandler(\"goBack\"),\n      goForward: staticHandler(\"goForward\"),\n      listen: this.handleListen,\n      block: this.handleBlock\n    };\n    return React.createElement(Router, _extends({}, rest, {\n      history: history,\n      staticContext: context\n    }));\n  };\n\n  return StaticRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  StaticRouter.propTypes = {\n    basename: PropTypes.string,\n    context: PropTypes.object,\n    location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n  };\n\n  StaticRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<StaticRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { StaticRouter as Router }`.\") : void 0;\n  };\n}\n\n/**\n * The public API for rendering the first <Route> that matches.\n */\n\nvar Switch =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Switch, _React$Component);\n\n  function Switch() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Switch.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return React.createElement(context.Consumer, null, function (context$$1) {\n      !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Switch> outside a <Router>\") : invariant(false) : void 0;\n      var location = _this.props.location || context$$1.location;\n      var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()\n      // here because toArray adds keys to all child elements and we do not want\n      // to trigger an unmount/remount for two <Route>s that render the same\n      // component at different URLs.\n\n      React.Children.forEach(_this.props.children, function (child) {\n        if (match == null && React.isValidElement(child)) {\n          element = child;\n          var path = child.props.path || child.props.from;\n          match = path ? matchPath(location.pathname, _extends({}, child.props, {\n            path: path\n          })) : context$$1.match;\n        }\n      });\n      return match ? React.cloneElement(element, {\n        location: location,\n        computedMatch: match\n      }) : null;\n    });\n  };\n\n  return Switch;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Switch.propTypes = {\n    children: PropTypes.node,\n    location: PropTypes.object\n  };\n\n  Switch.prototype.componentDidUpdate = function (prevProps) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.location && !prevProps.location), '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(!this.props.location && prevProps.location), '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n  };\n}\n\n/**\n * A public higher-order component to access the imperative API\n */\n\nfunction withRouter(Component) {\n  var displayName = \"withRouter(\" + (Component.displayName || Component.name) + \")\";\n\n  var C = function C(props) {\n    var wrappedComponentRef = props.wrappedComponentRef,\n        remainingProps = _objectWithoutPropertiesLoose(props, [\"wrappedComponentRef\"]);\n\n    return React.createElement(context.Consumer, null, function (context$$1) {\n      !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <\" + displayName + \" /> outside a <Router>\") : invariant(false) : void 0;\n      return React.createElement(Component, _extends({}, remainingProps, context$$1, {\n        ref: wrappedComponentRef\n      }));\n    });\n  };\n\n  C.displayName = displayName;\n  C.WrappedComponent = Component;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    C.propTypes = {\n      wrappedComponentRef: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object])\n    };\n  }\n\n  return hoistStatics(C, Component);\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  if (typeof window !== \"undefined\") {\n    var global = window;\n    var key = \"__react_router_build__\";\n    var buildNames = {\n      cjs: \"CommonJS\",\n      esm: \"ES modules\",\n      umd: \"UMD\"\n    };\n\n    if (global[key] && global[key] !== \"esm\") {\n      var initialBuildName = buildNames[global[key]];\n      var secondaryBuildName = buildNames[\"esm\"]; // TODO: Add link to article that explains in detail how to avoid\n      // loading 2 different builds.\n\n      throw new Error(\"You are loading the \" + secondaryBuildName + \" build of React Router \" + (\"on a page that is already running the \" + initialBuildName + \" \") + \"build, so things won't work right.\");\n    }\n\n    global[key] = \"esm\";\n  }\n}\n\nexport { MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, generatePath, matchPath, withRouter, context as __RouterContext };\n","/**\n * This action type will be dispatched when your history\n * receives a location change.\n */\nexport var LOCATION_CHANGE = '@@router/LOCATION_CHANGE';\nexport var onLocationChanged = function onLocationChanged(location, action) {\n  var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  return {\n    type: LOCATION_CHANGE,\n    payload: {\n      location: location,\n      action: action,\n      isFirstRendering: isFirstRendering\n    }\n  };\n};\n/**\n * This action type will be dispatched by the history actions below.\n * If you're writing a middleware to watch for navigation events, be sure to\n * look for actions of this type.\n */\n\nexport var CALL_HISTORY_METHOD = '@@router/CALL_HISTORY_METHOD';\n\nvar updateLocation = function updateLocation(method) {\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return {\n      type: CALL_HISTORY_METHOD,\n      payload: {\n        method: method,\n        args: args\n      }\n    };\n  };\n};\n/**\n * These actions correspond to the history API.\n * The associated routerMiddleware will capture these events before they get to\n * your reducer and reissue them as the matching function on your history.\n */\n\n\nexport var push = updateLocation('push');\nexport var replace = updateLocation('replace');\nexport var go = updateLocation('go');\nexport var goBack = updateLocation('goBack');\nexport var goForward = updateLocation('goForward');\nexport var routerActions = {\n  push: push,\n  replace: replace,\n  go: go,\n  goBack: goBack,\n  goForward: goForward\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\nimport { matchPath } from \"react-router\";\n\nvar createSelectors = function createSelectors(structure) {\n  var getIn = structure.getIn,\n      toJS = structure.toJS;\n\n  var isRouter = function isRouter(value) {\n    return value != null && _typeof(value) === 'object' && getIn(value, ['location']) && getIn(value, ['action']);\n  };\n\n  var getRouter = function getRouter(state) {\n    var router = toJS(getIn(state, ['router']));\n\n    if (!isRouter(router)) {\n      throw 'Could not find router reducer in state tree, it must be mounted under \"router\"';\n    }\n\n    return router;\n  };\n\n  var getLocation = function getLocation(state) {\n    return toJS(getIn(getRouter(state), ['location']));\n  };\n\n  var getAction = function getAction(state) {\n    return toJS(getIn(getRouter(state), ['action']));\n  };\n\n  var getSearch = function getSearch(state) {\n    return toJS(getIn(getRouter(state), ['location', 'search']));\n  };\n\n  var getHash = function getHash(state) {\n    return toJS(getIn(getRouter(state), ['location', 'hash']));\n  }; // It only makes sense to recalculate the `matchPath` whenever the pathname\n  // of the location changes. That's why `createMatchSelector` memoizes\n  // the latest result based on the location's pathname.\n\n\n  var createMatchSelector = function createMatchSelector(path) {\n    var lastPathname = null;\n    var lastMatch = null;\n    return function (state) {\n      var _ref = getLocation(state) || {},\n          pathname = _ref.pathname;\n\n      if (pathname === lastPathname) {\n        return lastMatch;\n      }\n\n      lastPathname = pathname;\n      var match = matchPath(pathname, path);\n\n      if (!match || !lastMatch || match.url !== lastMatch.url) {\n        lastMatch = match;\n      }\n\n      return lastMatch;\n    };\n  };\n\n  return {\n    getLocation: getLocation,\n    getAction: getAction,\n    getRouter: getRouter,\n    getSearch: getSearch,\n    getHash: getHash,\n    createMatchSelector: createMatchSelector\n  };\n};\n\nexport default createSelectors;","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 _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 _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 _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\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\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect, ReactReduxContext } from 'react-redux';\nimport { Router } from 'react-router';\nimport { onLocationChanged as _onLocationChanged } from './actions';\nimport createSelectors from './selectors';\n\nvar createConnectedRouter = function createConnectedRouter(structure) {\n  var _createSelectors = createSelectors(structure),\n      getLocation = _createSelectors.getLocation;\n  /*\n   * ConnectedRouter listens to a history object passed from props.\n   * When history is changed, it dispatches action to redux store.\n   * Then, store will pass props to component to render.\n   * This creates uni-directional flow from history->store->router->components.\n   */\n\n\n  var ConnectedRouter =\n  /*#__PURE__*/\n  function (_PureComponent) {\n    _inherits(ConnectedRouter, _PureComponent);\n\n    function ConnectedRouter(props) {\n      var _this;\n\n      _classCallCheck(this, ConnectedRouter);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectedRouter).call(this, props));\n      var store = props.store,\n          history = props.history,\n          onLocationChanged = props.onLocationChanged;\n      _this.inTimeTravelling = false; // Subscribe to store changes to check if we are in time travelling\n\n      _this.unsubscribe = store.subscribe(function () {\n        // Extract store's location\n        var _getLocation = getLocation(store.getState()),\n            pathnameInStore = _getLocation.pathname,\n            searchInStore = _getLocation.search,\n            hashInStore = _getLocation.hash; // Extract history's location\n\n\n        var _history$location = history.location,\n            pathnameInHistory = _history$location.pathname,\n            searchInHistory = _history$location.search,\n            hashInHistory = _history$location.hash; // If we do time travelling, the location in store is changed but location in history is not changed\n\n        if (pathnameInHistory !== pathnameInStore || searchInHistory !== searchInStore || hashInHistory !== hashInStore) {\n          _this.inTimeTravelling = true; // Update history's location to match store's location\n\n          history.push({\n            pathname: pathnameInStore,\n            search: searchInStore,\n            hash: hashInStore\n          });\n        }\n      });\n\n      var handleLocationChange = function handleLocationChange(location, action) {\n        var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n        // Dispatch onLocationChanged except when we're in time travelling\n        if (!_this.inTimeTravelling) {\n          onLocationChanged(location, action, isFirstRendering);\n        } else {\n          _this.inTimeTravelling = false;\n        }\n      }; // Listen to history changes\n\n\n      _this.unlisten = history.listen(handleLocationChange); // Dispatch a location change action for the initial location.\n      // This makes it backward-compatible with react-router-redux.\n      // But, we add `isFirstRendering` to `true` to prevent double-rendering.\n\n      handleLocationChange(history.location, history.action, true);\n      return _this;\n    }\n\n    _createClass(ConnectedRouter, [{\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        this.unlisten();\n        this.unsubscribe();\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this$props = this.props,\n            history = _this$props.history,\n            children = _this$props.children;\n        return React.createElement(Router, {\n          history: history\n        }, children);\n      }\n    }]);\n\n    return ConnectedRouter;\n  }(PureComponent);\n\n  ConnectedRouter.propTypes = {\n    store: PropTypes.shape({\n      getState: PropTypes.func.isRequired,\n      subscribe: PropTypes.func.isRequired\n    }).isRequired,\n    history: PropTypes.shape({\n      action: PropTypes.string.isRequired,\n      listen: PropTypes.func.isRequired,\n      location: PropTypes.object.isRequired,\n      push: PropTypes.func.isRequired\n    }).isRequired,\n    basename: PropTypes.string,\n    children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n    onLocationChanged: PropTypes.func.isRequired\n  };\n\n  var mapDispatchToProps = function mapDispatchToProps(dispatch) {\n    return {\n      onLocationChanged: function onLocationChanged(location, action, isFirstRendering) {\n        return dispatch(_onLocationChanged(location, action, isFirstRendering));\n      }\n    };\n  };\n\n  var ConnectedRouterWithContext = function ConnectedRouterWithContext(props) {\n    var Context = props.context || ReactReduxContext;\n\n    if (Context == null) {\n      throw 'Please upgrade to react-redux v6';\n    }\n\n    return React.createElement(Context.Consumer, null, function (_ref) {\n      var store = _ref.store;\n      return React.createElement(ConnectedRouter, _extends({\n        store: store\n      }, props));\n    });\n  };\n\n  ConnectedRouterWithContext.propTypes = {\n    context: PropTypes.object\n  };\n  return connect(null, mapDispatchToProps)(ConnectedRouterWithContext);\n};\n\nexport default createConnectedRouter;","import { LOCATION_CHANGE } from './actions';\n\nvar createConnectRouter = function createConnectRouter(structure) {\n  var fromJS = structure.fromJS,\n      merge = structure.merge;\n\n  var createRouterReducer = function createRouterReducer(history) {\n    var initialRouterState = fromJS({\n      location: history.location,\n      action: history.action\n    });\n    /*\n    * This reducer will update the state with the most recent location history\n    * has transitioned to.\n    */\n\n    return function () {\n      var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialRouterState;\n\n      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n          type = _ref.type,\n          payload = _ref.payload;\n\n      if (type === LOCATION_CHANGE) {\n        var location = payload.location,\n            action = payload.action,\n            isFirstRendering = payload.isFirstRendering; // Don't update the state ref for the first rendering\n        // to prevent the double-rendering issue on initilization\n\n        return isFirstRendering ? state : merge(state, {\n          location: fromJS(location),\n          action: action\n        });\n      }\n\n      return state;\n    };\n  };\n\n  return createRouterReducer;\n};\n\nexport default createConnectRouter;","/* Code from github.com/erikras/redux-form by Erik Rasmussen */\nvar getIn = function getIn(state, path) {\n  if (!state) {\n    return state;\n  }\n\n  var length = path.length;\n\n  if (!length) {\n    return undefined;\n  }\n\n  var result = state;\n\n  for (var i = 0; i < length && !!result; ++i) {\n    result = result[path[i]];\n  }\n\n  return result;\n};\n\nexport default getIn;","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, 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 getIn from './getIn';\nvar structure = {\n  fromJS: function fromJS(value) {\n    return value;\n  },\n  getIn: getIn,\n  merge: function merge(state, payload) {\n    return _objectSpread({}, state, payload);\n  },\n  toJS: function toJS(value) {\n    return value;\n  }\n};\nexport default structure;","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\nimport { CALL_HISTORY_METHOD } from './actions';\n/**\n * This middleware captures CALL_HISTORY_METHOD actions to redirect to the\n * provided history object. This will prevent these actions from reaching your\n * reducer or any middleware that comes after this one.\n */\n\nvar routerMiddleware = function routerMiddleware(history) {\n  return function (store) {\n    return function (next) {\n      return function (action) {\n        // eslint-disable-line no-unused-vars\n        if (action.type !== CALL_HISTORY_METHOD) {\n          return next(action);\n        }\n\n        var _action$payload = action.payload,\n            method = _action$payload.method,\n            args = _action$payload.args;\n        history[method].apply(history, _toConsumableArray(args));\n      };\n    };\n  };\n};\n\nexport default routerMiddleware;","import createConnectedRouter from \"./ConnectedRouter\";\nimport createConnectRouter from \"./reducer\";\nimport createSelectors from \"./selectors\";\nimport plainStructure from \"./structure/plain\";\nexport { LOCATION_CHANGE, CALL_HISTORY_METHOD, onLocationChanged, push, replace, go, goBack, goForward, routerActions } from \"./actions\";\nexport { default as routerMiddleware } from \"./middleware\";\nexport var ConnectedRouter =\n/*#__PURE__*/\ncreateConnectedRouter(plainStructure);\nexport var connectRouter =\n/*#__PURE__*/\ncreateConnectRouter(plainStructure);\n\nvar _createSelectors =\n/*#__PURE__*/\ncreateSelectors(plainStructure),\n    getLocation = _createSelectors.getLocation,\n    getAction = _createSelectors.getAction,\n    getHash = _createSelectors.getHash,\n    getSearch = _createSelectors.getSearch,\n    createMatchSelector = _createSelectors.createMatchSelector;\n\nexport { getLocation, getAction, getHash, getSearch, createMatchSelector };","import { createAction } from 'pmt-modules/redux'\r\n\r\nexport const UiAction = {\r\n  UPDATE: 'UI::UPDATE',\r\n}\r\n\r\nexport const updateUI = (key, data) =>\r\n  createAction(UiAction.UPDATE, {\r\n    key,\r\n    data,\r\n  })\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getState = state => state.ui\r\n\r\nexport const getUi = createSelector([getState], data => (isNil(data) ? data : data.toJS()))\r\n","export const generateKeyForComponent = c =>\r\n  (c.displayName || c.name) + Math.floor(Math.random() * (1 << 30)).toString(16)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport get from 'lodash/get'\r\n\r\nimport { updateUI } from './actions'\r\nimport { getUi } from './selectors'\r\nimport { generateKeyForComponent } from './utils'\r\n\r\nclass UiContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.uiState = {}\r\n    this.key = generateKeyForComponent(props.WrappedComponent)\r\n  }\r\n\r\n  componentWillMount() {\r\n    let state = {\r\n      ...this.props.uiState.state,\r\n    }\r\n\r\n    Object.keys(state).forEach(k => {\r\n      if (typeof state[k] === 'function') {\r\n        state[k] = state[k](this.props)\r\n      }\r\n    })\r\n\r\n    this.props.updateUI(this.key, state)\r\n  }\r\n\r\n  componentWillReceiveProps({ ui, uiState }) {\r\n    ui = get(ui, this.key, {})\r\n    this.uiState = {\r\n      ...uiState.state,\r\n      ...ui,\r\n    }\r\n  }\r\n\r\n  updateUI = state => {\r\n    this.props.updateUI(this.key, state)\r\n  }\r\n\r\n  render() {\r\n    const { WrappedComponent, ...otherProps } = this.props\r\n\r\n    return <WrappedComponent {...otherProps} ui={this.uiState} updateUI={this.updateUI} />\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  ui: getUi(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    updateUI,\r\n  }\r\n)(UiContainer)\r\n","import React from 'react'\r\n\r\nimport UiContainer from './UiContainer'\r\n\r\nexport default function ui(uiState) {\r\n  return WrappedComponent => props => (\r\n    <UiContainer uiState={uiState} WrappedComponent={WrappedComponent} {...props} />\r\n  )\r\n}\r\n","import Immutable from 'immutable'\r\n\r\nimport { UiAction } from './actions'\r\nimport ui from './ui'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\n\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\nexport const uiReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case UiAction.UPDATE:\r\n      return state.mergeIn([action.key], action.data)\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport default ui\r\n","export { ThemeProvider, withStyles, withTheme } from '@material-ui/styles'\r\n\r\nexport * from '@material-ui/core/styles'\r\nexport { getLuminance, lighten } from '@material-ui/core/styles/colorManipulator'\r\nexport { dark, light } from '@material-ui/core/styles/createPalette'\r\n\r\n// Retro-compatibility Bridge : createMuiTheme -> createTheme\r\nimport { createTheme as muiCreateTheme } from '@material-ui/core/styles'\r\n\r\nexport const createTheme = muiCreateTheme\r\nexport const createMuiTheme = muiCreateTheme // Deprecated alias\r\n","import Immutable from 'immutable'\r\n\r\nconst CHANGE_CURRENT_THEME = 'Theme::CHANGE_CURRENT_THEME'\r\n\r\nexport const changeCurrentTheme = (newCurrentTheme) => ({\r\n  type: CHANGE_CURRENT_THEME,\r\n  newCurrentTheme\r\n})\r\n\r\n// configure it on the appOptions\r\n// theme: {\r\n//  muiTheme: { } <- on this value\r\n// }\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\n//\r\n// current theme reducer\r\n//\r\nexport const currentTheme = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case CHANGE_CURRENT_THEME:\r\n      return Immutable.fromJS(action.newCurrentTheme)\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { combineReducers } from 'redux'\r\n\r\nimport { currentTheme } from './currentTheme'\r\n\r\n//\r\n// theme reducer.\r\n//\r\nexport const theme = combineReducers({\r\n  current: currentTheme,\r\n})\r\n","import { createSelector } from 'reselect'\r\n\r\n//\r\n// selectors for the currentTheme and defaultThemes reducers.\r\n//\r\n\r\nconst getThemeOnState = (state) => state.ux.theme\r\n\r\nconst getCurrentThemeOnState = (state) => getThemeOnState(state).current\r\n\r\nexport const getCurrentTheme = createSelector(\r\n  [ getCurrentThemeOnState ],\r\n  (theme) => theme ? theme.toJS() : null\r\n)\r\n","import { createMuiTheme } from 'pmt-ui/styles'\r\n\r\nexport * from './theme'\r\nexport * from './selectors'\r\nexport * from './constants'\r\nexport { changeCurrentTheme } from './currentTheme'\r\n\r\n//\r\n// {\r\n//    muiTheme: {}, // see https://material-ui-1dab0.firebaseapp.com/customization/themes/#configuration-variables\r\n// }\r\n//\r\n// contains the theme defined on the appOptions\r\nlet _theme = {}\r\n\r\nexport const registerTheme = (theme) => {\r\n  _theme = theme\r\n}\r\n\r\nexport const getRegisteredTheme = () => (\r\n  _theme\r\n)\r\n\r\nexport const getRegisteredMuiTheme = () => (\r\n  createMuiTheme(getRegisteredTheme().muiTheme)\r\n)\r\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var baseGet = require('./_baseGet'),\n    baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var castPath = require('./_castPath'),\n    last = require('./last'),\n    parent = require('./_parent'),\n    toKey = require('./_toKey');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n\n  // Prevent prototype pollution:\n  // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n  // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n  var index = -1,\n      length = path.length;\n\n  if (!length) {\n    return true;\n  }\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n\n    // Always block \"__proto__\" anywhere in the path if it's not expected\n    if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n      return false;\n    }\n\n    // Block constructor/prototype as non-terminal traversal keys to prevent\n    // escaping the object graph into built-in constructors and prototypes.\n    if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n      return false;\n    }\n  }\n\n  var obj = parent(object, path);\n  return obj == null || delete obj[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var baseUnset = require('./_baseUnset'),\n    isIndex = require('./_isIndex');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\nfunction basePullAt(array, indexes) {\n  var length = array ? indexes.length : 0,\n      lastIndex = length - 1;\n\n  while (length--) {\n    var index = indexes[length];\n    if (length == lastIndex || index !== previous) {\n      var previous = index;\n      if (isIndex(index)) {\n        splice.call(array, index, 1);\n      } else {\n        baseUnset(array, index);\n      }\n    }\n  }\n  return array;\n}\n\nmodule.exports = basePullAt;\n","var baseIteratee = require('./_baseIteratee'),\n    basePullAt = require('./_basePullAt');\n\n/**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n *   return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\nfunction remove(array, predicate) {\n  var result = [];\n  if (!(array && array.length)) {\n    return result;\n  }\n  var index = -1,\n      indexes = [],\n      length = array.length;\n\n  predicate = baseIteratee(predicate, 3);\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result.push(value);\n      indexes.push(index);\n    }\n  }\n  basePullAt(array, indexes);\n  return result;\n}\n\nmodule.exports = remove;\n","// TODO: rename to DialogType to be consistant\r\nexport const ModalType = {\r\n  /**\r\n   * Props:\r\n   * - entry: the entry to share\r\n   * - item: the item (nullable)\r\n   */\r\n  PAYMENT_CHOOSE_ENTRY_DIVIDER: 'PAYMENT_CHOOSE_ENTRY_DIVIDER',\r\n\r\n  PAYMENT_GENEROUS_PAYMENT: 'PAYMENT_GENEROUS_PAYMENT',\r\n\r\n  /**\r\n   * Props:\r\n   * - error\r\n   */\r\n  ERROR: 'ERROR',\r\n\r\n  /**\r\n   * Props:\r\n   */\r\n  DELETE_CART: 'DELETE_CART',\r\n\r\n  /**\r\n   * Props:\r\n   * - productId\r\n   */\r\n  ORDER_PLUGIN_PRODUCT_VIEW: 'ORDER_PLUGIN_PRODUCT_VIEW',\r\n\r\n  /**\r\n   * Show the dialog containing all items that will be deleted when changing schedule\r\n   */\r\n  CART_DIFF_ITEMS: 'CART_DIFF_ITEMS',\r\n\r\n  /**\r\n   * Show the dialog containing all items that are in limited stock which are ordered in too high number.\r\n   *\r\n   * Eg: 3 Coca while only 2 are in stock\r\n   */\r\n  LIMITED_STOCK_ITEMS: 'LIMITED_STOCK_ITEMS',\r\n\r\n  /**\r\n   * Show the dialog containing all the vouchers that will be deleted because invalid\r\n   */\r\n  INVALID_VOUCHERS: 'INVALID_VOUCHERS',\r\n\r\n  /**\r\n   * Props:\r\n   * - company\r\n   */\r\n  ADD_ADMISSION_FEE_RULE: 'ADD_ADMISSION_FEE_RULE',\r\n\r\n  /**\r\n   * Props:\r\n   * - company\r\n   */\r\n  ADD_SUBSIDY_RULE: 'ADD_SUBSIDY_RULE',\r\n\r\n  /**\r\n   *\r\n   */\r\n  SUGGESTION_VIEW: 'SUGGESTION_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  UPSELLING_VIEW: 'UPSELLING_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  CART_MODIFIER_VIEW: 'CART_MODIFIER_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  PRODUCT_VIEW: 'PRODUCT_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  LOOSE_CART_VIEW: 'LOOSE_CART_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  INACTIVITY: 'INACTIVITY',\r\n\r\n  /**\r\n   *\r\n   */\r\n  PRINTER_DISABLED: 'PRINTER_DISABLED',\r\n\r\n  /**\r\n   *\r\n   */\r\n  POST_ORDER_ERROR_BACK_HOME: 'POST_ORDER_ERROR_BACK_HOME',\r\n\r\n  /**\r\n   *\r\n   */\r\n  DIETARY_INFO: 'DIETARY_INFO',\r\n\r\n  /**\r\n   *\r\n   */\r\n  RESTAURANTS_GROUP_SELECTION: 'RESTAURANTS_GROUP_SELECTION',\r\n\r\n  /**\r\n   *\r\n   */\r\n  UNAVAILABLE_DUE_DATE: 'UNAVAILABLE_DUE_DATE',\r\n\r\n  /**\r\n   *\r\n   */\r\n  ORDER_MODE_DISABLED: 'ORDER_MODE_DISABLED',\r\n\r\n  /**\r\n   *\r\n   */\r\n  RESTAURANT_DISABLED: 'RESTAURANT_DISABLED',\r\n\r\n  /**\r\n   *\r\n   */\r\n  RESTAURANT_CLOSED: 'RESTAURANT_CLOSED',\r\n\r\n  /**\r\n   *\r\n   */\r\n  TABLE_NOT_FOUND: 'TABLE_NOT_FOUND',\r\n\r\n  /**\r\n   *\r\n   */\r\n  EXPIRED_SESSION: 'EXPIRED_SESSION',\r\n}\r\n\r\nexport default ModalType\r\n","/**\r\n * Inspired by https://stackoverflow.com/questions/35623656/how-can-i-display-a-modal-dialog-in-redux-that-performs-asynchronous-actions/35641680\r\n */\r\n\r\nimport { createAction } from '../redux'\r\n\r\nimport { ModalType } from './constants/ModalType'\r\n\r\nexport const DialogAction = {\r\n  SHOW_DIALOG: 'DIALOG::SHOW',\r\n  HIDE_DIALOG: 'DIALOG::HIDE',\r\n  HIDE_DIALOG_BACK: 'DIALOG::HIDE_BACK',\r\n  RESET: 'DIALOG::RESET',\r\n}\r\n\r\nexport const createShowDialogAction =\r\n  (dialogType, dialogProps, callback = null) =>\r\n  dispatch => {\r\n    if (callback !== null) {\r\n      callback()\r\n    }\r\n    return dispatch({\r\n      type: DialogAction.SHOW_DIALOG,\r\n      dialogType,\r\n      dialogProps,\r\n    })\r\n  }\r\n\r\nexport const createHideDialogAction = dialogType => dispatch => {\r\n  return dispatch(hideDialogAction(dialogType))\r\n}\r\n\r\n// clean a specific dialog\r\nexport const hideDialogAction = dialogType => createAction(DialogAction.HIDE_DIALOG, { dialogType })\r\n\r\n// clean all openened dialogs\r\nexport const resetDialogAction = () => createAction(DialogAction.RESET)\r\n\r\n// this dialog is used on web customer\r\n// to choose the divider that will be affected to an entry\r\nexport const displayChooseEntryDividerDialog = entry =>\r\n  createShowDialogAction(ModalType.PAYMENT_CHOOSE_ENTRY_DIVIDER, { id: entry.id })\r\n\r\n// this dialog is used on web customer\r\n// to choose the divider that will be affected to an entry\r\nexport const displayGenerousPaymentDialog = ({\r\n  checkId,\r\n  restaurantId,\r\n  amount,\r\n  outstandingBalance,\r\n}) =>\r\n  createShowDialogAction(ModalType.PAYMENT_GENEROUS_PAYMENT, {\r\n    checkId,\r\n    restaurantId,\r\n    amount,\r\n    outstandingBalance,\r\n  })\r\n\r\n// this dialog is used on order plugin\r\n// warns the user that his carts is going to be deleted if he comes back to store locator\r\nexport const displayDeleteCartDialog = () => createShowDialogAction(ModalType.DELETE_CART, {})\r\n\r\nexport const displayLimitedStockItemsDialog = (limitedStockItems, limitedStockMessageFallback) =>\r\n  createShowDialogAction(ModalType.LIMITED_STOCK_ITEMS, {\r\n    limitedStockItems,\r\n    limitedStockMessageFallback,\r\n  })\r\n\r\nexport const hideLimitedStockItemsDialog = () =>\r\n  createHideDialogAction(ModalType.LIMITED_STOCK_ITEMS)\r\n\r\nexport const displayCartDiffItemsDialog = () =>\r\n  createShowDialogAction(ModalType.CART_DIFF_ITEMS, {})\r\n\r\nexport const displayCartModifierDialog = cartModifiers =>\r\n  createShowDialogAction(ModalType.CART_MODIFIER_VIEW, { cartModifiers })\r\n\r\nexport const hideCartModifierDialog = () => createHideDialogAction(ModalType.CART_MODIFIER_VIEW)\r\n\r\nexport const displayInvalidVouchersDialog = () =>\r\n  createShowDialogAction(ModalType.INVALID_VOUCHERS, {})\r\n","import find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\n//\r\n// {\r\n//   type: ModalType.ORDER_PLUGIN_PRODUCT_VIEW,\r\n//   view: ProductDialog,\r\n// }\r\n//\r\n\r\nlet _dialogs = []\r\nexport const registerDialogs = (dialogs) => {\r\n  _dialogs = dialogs\r\n}\r\n\r\nexport const getDialogs = (dialogs) => (\r\n  _dialogs\r\n)\r\n\r\n/**\r\n * @param  {string} dialogType DialogType of the dialog to retrive\r\n * @return {DialogConfiguration} the configuration for the given DialogType\r\n */\r\nexport const getDialogViewForType = (dialogType) => {\r\n  const dialog = find(_dialogs, (dialog) => dialogType === dialog.type)\r\n\r\n  invariant(!isNil(dialog), 'dialog ' + dialogType + ' not registered')\r\n\r\n  return dialog.view\r\n}\r\n","import { createSelector } from 'reselect'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nconst getDialogState = state => state.ux.dialog\r\n\r\n/**\r\n * at the moment, we only display one dialog at a time so we select the last one requested\r\n * an idea for future developments : handle a priority system instead of always the last one\r\n */\r\nexport const getDialog = createSelector([getDialogState], dialogState => {\r\n  const dialogs = dialogState.get('list').toJS()\r\n\r\n  if (!isEmpty(dialogs)) {\r\n    const dialog = dialogs[dialogs.length - 1]\r\n    return dialog.type ? dialog : null\r\n  }\r\n\r\n  return {}\r\n})\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport Dialog from 'pmt-ui/Dialog'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { hideDialogAction } from '../actions'\r\nimport { getDialogViewForType } from '../config'\r\nimport { getDialog } from '../selectors'\r\n\r\n/**\r\n * TODO: use portal?\r\n * https://github.com/cloudflare/react-gateway\r\n *\r\n * The root component of any modal\r\n */\r\nconst DialogRoot = ({ dialog, hideDialogAction }) => {\r\n  if (!dialog.type) {\r\n    return null\r\n  }\r\n\r\n  const SpecificModal = getDialogViewForType(dialog.type)\r\n\r\n  class generateDialog extends React.Component {\r\n    render() {\r\n      const { classes } = this.props\r\n\r\n      return SpecificModal.DialogRootProps && SpecificModal.DialogRootProps.isComplex ? (\r\n        <SpecificModal\r\n          {...dialog.props}\r\n          onClose={() => {\r\n            hideDialogAction(dialog.type)\r\n          }}\r\n        >\r\n          {({ dialogContent, ...otherProps }) => (\r\n            <Dialog\r\n              open\r\n              // false to handle onClose when clicking outside.\r\n              // handle legacy `ignoreBackdropClick` renamed to `disableBackdropClick`\r\n              disableBackdropClick={\r\n                (SpecificModal.DialogRootProps &&\r\n                  SpecificModal.DialogRootProps.ignoreBackdropClick) ||\r\n                false\r\n              }\r\n              onClose={() => {\r\n                hideDialogAction(dialog.type)\r\n              }}\r\n              {...SpecificModal.DialogRootProps}\r\n              classes={classes}\r\n              {...otherProps}\r\n            >\r\n              {React.cloneElement(dialogContent)}\r\n            </Dialog>\r\n          )}\r\n        </SpecificModal>\r\n      ) : (\r\n        <Dialog\r\n          open\r\n          // false to handle onClose when clicking outside.\r\n          // handle legacy `ignoreBackdropClick` renamed to `disableBackdropClick`\r\n          disableBackdropClick={\r\n            (SpecificModal.DialogRootProps && SpecificModal.DialogRootProps.ignoreBackdropClick) ||\r\n            false\r\n          }\r\n          onClose={() => {\r\n            hideDialogAction(dialog.type)\r\n          }}\r\n          {...SpecificModal.DialogRootProps}\r\n          classes={classes}\r\n        >\r\n          <SpecificModal\r\n            // add shortcut to hide the dialog\r\n            onClose={() => {\r\n              hideDialogAction(dialog.type)\r\n            }}\r\n            {...dialog.props}\r\n          />\r\n        </Dialog>\r\n      )\r\n    }\r\n  }\r\n\r\n  const DialogWithStyles = withStyles(SpecificModal.DialogStyles || {})(generateDialog)\r\n\r\n  return <DialogWithStyles />\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  dialog: getDialog(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    hideDialogAction,\r\n  }\r\n)(DialogRoot)\r\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","export { LOCATION_CHANGE } from 'connected-react-router'\r\n\r\nexport const Query = {\r\n  // Special query value that force the query param to be removed.\r\n  // used to force remove the query parameters to keep on all pages.\r\n  // see actions.js#generatePathWithParams\r\n  REMOVE_ME: 'QUERY::REMOVE_ME',\r\n}\r\n","var baseFor = require('./_baseFor'),\n    castFunction = require('./_castFunction'),\n    keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n  return object == null\n    ? object\n    : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","import invariant from 'invariant'\r\n\r\nimport forIn from 'lodash/forIn'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\n/**\r\n * Define a route.\r\n */\r\nexport default class Route {\r\n  /**\r\n   * Construct a new Route object.\r\n   * @param name The name (identifier) of the route.\r\n   * @param path The path of the route. Ex: /home or /restaurants/:id\r\n   * @param handler The handler for this route. A null handler disable the route\r\n   * @param handler Define if the route is restrict to loggedIn user\r\n   * @param disable\r\n   */\r\n  constructor(name, path, authRequired = true, disable = false) {\r\n    invariant(path.indexOf(' ') === -1, `invalid path ${path} for route ${name}`)\r\n    invariant(name.indexOf(' ') === -1, `invalid name ${name}`)\r\n\r\n    this.name = name\r\n    this.path = path\r\n    this.authRequired = authRequired\r\n    this.disable = disable\r\n  }\r\n\r\n  formatQueryParams(parameters) {\r\n    let qs = ''\r\n    for (let key in parameters) {\r\n      let value = parameters[key]\r\n      qs += encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&'\r\n    }\r\n    if (qs.length > 0) {\r\n      qs = qs.substring(0, qs.length - 1) // chop off last '&'\r\n      return `?${qs}`\r\n    }\r\n\r\n    return ''\r\n  }\r\n\r\n  parseQueryToObject(query) {\r\n    query = query.replace(/\\+/g, '%20')\r\n\r\n    let arr = {}\r\n    let a = query.split(/&(?!amp)/g)\r\n\r\n    for (let i = 0; i < a.length; i++) {\r\n      const pair = a[i].split('=')\r\n      arr[pair[0]] = decodeURIComponent(a[i].substr(a[i].indexOf('=') + 1))\r\n    }\r\n\r\n    return arr\r\n  }\r\n\r\n  /*\r\n   * Replace params. On url definition, params start with ':'\r\n   */\r\n  generatePathWithParams(params, query, options = {}) {\r\n    const search = window.location.search.substring(1)\r\n\r\n    if (!isEmpty(search) && options.keepQuery === true) {\r\n      query = { ...query, ...this.parseQueryToObject(document.location.search.substring(1)) }\r\n    }\r\n\r\n    let path = this.path\r\n    forIn(params, (param, key) => {\r\n      path = path.replace(`:${key}`, param)\r\n    })\r\n\r\n    return path + this.formatQueryParams(query) + (options?.anchor ? `#${options.anchor}` : '')\r\n  }\r\n\r\n  getPath() {\r\n    return this.path\r\n  }\r\n}\r\n","import Route from '../model/Route'\r\n\r\n/**\r\n * Enum that contains:\r\n * - our global routes: dev routes and generice routes.\r\n * - our projects routes: TODO: refactor. Those routes should be put on app/config/routingEnum\r\n *\r\n * The `handler` component for each route is define on `app/config/routes` (NEVER define an handler\r\n * here)\r\n */\r\nconst SdkRoutingEnum = {\r\n  //\r\n  // Generic\r\n  //\r\n\r\n  HOME: new Route('HOME', '/', true),\r\n\r\n  LOGIN: new Route('LOGIN', '/login', false),\r\n\r\n  LOGOUT: new Route('LOGOUT', '/logout', false),\r\n\r\n  REGISTER: new Route('REGISTER', '/register', false),\r\n\r\n  FORGOT_PASSWORD: new Route('FORGOT_PASSWORD', '/forgot-password', false),\r\n\r\n  // TODO: to implement\r\n  RELOAD: new Route('USER::RELOAD', '/reload'),\r\n\r\n  USER_PROFILE: new Route('USER::PROFILE', '/users/:userId/profile'),\r\n\r\n  // generic 404 page\r\n  // https://stackoverflow.com/questions/32128978/react-router-no-not-found-route\r\n  PAGE_NOT_FOUND: new Route('PAGE_NOT_FOUND', '*'),\r\n\r\n  // fake page, used to display a loading page while loading the real page chunk\r\n  PAGE_LOADING: new Route('PAGE_LOADING', '/page-loading'),\r\n\r\n  //\r\n  // development pages\r\n  // Those pages are defined on pmt-modules/dev/pages and are available only in development.\r\n  //\r\n\r\n  DEV_THEME: new Route('DEV::THEME', '/dev/theme'),\r\n\r\n  DEV_STYLEGUIDE: new Route('DEV::STYLEGUIDE', '/dev/styleguide'),\r\n\r\n  DEV_TEST: new Route('DEV::TEST', '/dev/test'),\r\n}\r\n\r\nexport default SdkRoutingEnum\r\n","import invariant from 'invariant'\r\nimport isNil from 'lodash/isNil'\r\nimport find from 'lodash/find'\r\nimport isString from 'lodash/isString'\r\n\r\nimport SdkRoutingEnum from './constants/SdkRoutingEnum'\r\n\r\nlet _routes = []\r\n\r\nexport const registerRoutes = routes => {\r\n  _routes = routes\r\n}\r\n\r\nexport const getRoutes = () => _routes\r\n\r\nexport const getConfigForRoute = route => {\r\n  if (!route) {\r\n    return null\r\n  }\r\n\r\n  if (isString(route)) {\r\n    route = getRoute(route)\r\n  }\r\n  return find(_routes, routeDefinition => {\r\n    return route.name === routeDefinition.definition.name\r\n  })\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nlet _history = null\r\n\r\nexport const registerHistory = history => {\r\n  _history = history\r\n}\r\n\r\nexport const getHistory = () => _history\r\n\r\n//\r\n//\r\n//\r\n\r\n// spread SdkRoutingEnum to allow dev pages from sdk\r\nlet _routingEnum = { ...SdkRoutingEnum }\r\n\r\nexport const registerRoutingEnum = routingEnum => {\r\n  // Note: the given routingEnum must have spread SdkRoutingEnum\r\n  _routingEnum = routingEnum\r\n}\r\n\r\nexport const getRoutingEnum = () => _routingEnum\r\n\r\nexport const getRoute = routeName => {\r\n  const route = getRoutingEnum()[routeName]\r\n  invariant(\r\n    !isNil(route),\r\n    `Not route found for ${routeName}. Verify that you defined the route on the routes`\r\n  )\r\n  return route\r\n}\r\n","import isString from 'lodash/isString'\r\nimport forEach from 'lodash/forEach'\r\nimport isArray from 'lodash/isArray'\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport { push, replace, goBack as goBackAction } from 'connected-react-router'\r\n\r\nimport invariant from 'invariant'\r\nimport isNil from 'lodash/isNil'\r\nimport pickBy from 'lodash/pickBy'\r\n\r\nimport { getHostname, getRelativePath } from 'pmt-utils/url'\r\n\r\nimport { Query } from './constants'\r\nimport { formatQueryParams, getQueryFromUri } from './utils'\r\nimport { getConfigForRoute, getHistory } from './config'\r\n\r\nimport { isWebCustomer } from '../environment'\r\n\r\n//\r\n// connected-react-router need a middleware to handle functions such as `push(location)`,\r\n// `replace(loacation)`\r\n// It handle actions creators that correspond with the history methods of the same name.\r\n// see https://github.com/supasate/connected-react-router\r\n//\r\n// For reference they are defined as follows:\r\n// push - Pushes a new location to history, becoming the current location.\r\n// replace - Replaces the current location in history.\r\n// go - Moves backwards or forwards a relative number of locations in history.\r\n// goForward - Moves forward one location. Equivalent to go(1)\r\n// goBack - Moves backwards one location. Equivalent to go(-1)\r\n//\r\n// Both push and replace take in a location descriptor, which can be an object describing the URL\r\n// or a plain string URL.\r\n//\r\n// A location object is conceptually similar to document.location in web browsers, with a few\r\n// extra goodies. location objects have the following properties:\r\n//\r\n// pathname      The pathname portion of the URL, without query string\r\n// search        The query string portion of the URL, including the ?\r\n// state         An object of data tied to this location\r\n// action        One of PUSH, REPLACE, or POP\r\n// key           A unique identifier for this location\r\n//\r\n// see https://github.com/ReactTraining/history/blob/v3/docs/Location.md\r\n//\r\n// We do not use Location but our custom `Route` object, that is defined on `RoutingEnum`.\r\n//\r\n//\r\n\r\n//\r\n// About `options` property:\r\n// - keepQuery: it will keep all the query params set on the current url and put them back on the\r\n//   new route.\r\n//\r\n//\r\n\r\nexport const generatePathWithParams = (route, params, query, options = {}) => {\r\n  const config = getConfigForRoute(route)\r\n\r\n  invariant(!isNil(config), `Config for route ${route.name} not found`)\r\n\r\n  // keep legacy where the final parameter was keepQuery default true, and not options\r\n  // FIXME: the web customer must use the same configuration of the routes than the bo:\r\n  // `props.query` define query parameters to keep for each route\r\n  if (isWebCustomer()) {\r\n    options.keepQuery = true\r\n  }\r\n\r\n  // keep query from url\r\n  let finalQueries = { ...query }\r\n  const queryParamsToKeep = !isNil(config.props) ? config.props.query || [] : []\r\n  const currentUrlQueries = getQueryFromUri(window.location.href)\r\n\r\n  queryParamsToKeep.forEach(queryParam => {\r\n    const currentValueOnUrl = currentUrlQueries[queryParam]\r\n    const alreadySet = !isNil(finalQueries[queryParam])\r\n    if (currentValueOnUrl && !alreadySet) {\r\n      finalQueries[queryParam] = currentValueOnUrl\r\n    }\r\n  })\r\n\r\n  // remove queries that have the Query.REMOVE_ME value.\r\n  finalQueries = pickBy(finalQueries, value => value !== Query.REMOVE_ME)\r\n  // remove undefined values\r\n  finalQueries = pickBy(finalQueries, value => value !== undefined)\r\n\r\n  return config.definition.generatePathWithParams(params, finalQueries, options)\r\n}\r\n\r\nconst handleStringRoute = (action, route) => {\r\n  const hostname = getHostname(route)\r\n  if (hostname && window.location.hostname !== hostname) {\r\n    return redirectToExternal(route)\r\n  }\r\n\r\n  const relativePath = getRelativePath(route)\r\n  return action(relativePath)\r\n}\r\n\r\nexport const redirectTo = (route, params, query, options = {}) => {\r\n  if (isString(route)) {\r\n    return handleStringRoute(push, route)\r\n  }\r\n  const path = generatePathWithParams(route, params, query, options)\r\n  return push(path)\r\n}\r\n\r\nexport const createRedirectToAction = (route, params, query) => dispatch =>\r\n  dispatch(redirectTo(route, params, query))\r\n\r\nexport const replaceWith = (route, params, query, options = {}) => {\r\n  if (isString(route)) {\r\n    return handleStringRoute(replace, route)\r\n  }\r\n  const path = generatePathWithParams(route, params, query, options)\r\n  return replace(path)\r\n}\r\n\r\nexport const createReplaceWithAction = (route, params, query) => dispatch =>\r\n  dispatch(replaceWith(route, params, query))\r\n\r\nexport const reloadTo = (route, params, query, options = {}) => {\r\n  const path = generatePathWithParams(route, params, query, options)\r\n  window.location = path\r\n  return { type: 'ROUTING_EXTERNAL' }\r\n}\r\n\r\nexport const reloadToPath = path => {\r\n  window.location = path\r\n  return { type: 'ROUTING_EXTERNAL' }\r\n}\r\n\r\nexport const openExternalLink = uri => {\r\n  window.open(uri, '_blank')\r\n  return { type: 'ROUTING_EXTERNAL' }\r\n}\r\n\r\nlet isRedirectingToExternal = false\r\n\r\nexport const setIsRedirectingToExternal = value => {\r\n  isRedirectingToExternal = value\r\n}\r\n\r\nexport const getIsRedirectingToExternal = () => isRedirectingToExternal\r\n\r\nexport const redirectToExternal = (uri, query = {}) => {\r\n  window.location = formatQueryParams(uri, query)\r\n  return { type: 'ROUTING_EXTERNAL' }\r\n}\r\n\r\nexport const updatePageQueries = (query = {}) => {\r\n  const history = getHistory()\r\n  const currentQuery = getQueryFromUri(window.location.href)\r\n\r\n  let finalQueries = {}\r\n\r\n  // transform the query values.\r\n  // E.g we transform arrays as string with `,` separation\r\n  forEach(query, (value, key) => {\r\n    let finalValue = value\r\n    if (isArray(value)) {\r\n      finalValue = value.join(',')\r\n    }\r\n\r\n    // must be a string to avoid updating queries that are the same (to avoid compare string query\r\n    // to number)\r\n    finalQueries[key] = finalValue ? `${finalValue}` : finalValue\r\n  })\r\n\r\n  finalQueries = {\r\n    ...currentQuery,\r\n    ...finalQueries,\r\n  }\r\n\r\n  finalQueries = pickBy(finalQueries, value => value !== Query.REMOVE_ME)\r\n\r\n  if (!isEqual(finalQueries, currentQuery)) {\r\n    // https://github.com/ReactTraining/history\r\n    history.push(formatQueryParams(window.location.pathname, finalQueries))\r\n  }\r\n}\r\n\r\nexport const goBack = goBackAction\r\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport { Router, __RouterContext, matchPath } from 'react-router';\nexport * from 'react-router';\nimport { createBrowserHistory, createHashHistory, createLocation } from 'history';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport invariant from 'tiny-invariant';\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(BrowserRouter, _React$Component);\n\n  function BrowserRouter() {\n    var _this;\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createBrowserHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = BrowserRouter.prototype;\n\n  _proto.render = function render() {\n    return React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return BrowserRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  BrowserRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    forceRefresh: PropTypes.bool,\n    getUserConfirmation: PropTypes.func,\n    keyLength: PropTypes.number\n  };\n\n  BrowserRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\") : void 0;\n  };\n}\n\n/**\n * The public API for a <Router> that uses window.location.hash.\n */\n\nvar HashRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(HashRouter, _React$Component);\n\n  function HashRouter() {\n    var _this;\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 = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createHashHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = HashRouter.prototype;\n\n  _proto.render = function render() {\n    return React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return HashRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  HashRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    getUserConfirmation: PropTypes.func,\n    hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n  };\n\n  HashRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<HashRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { HashRouter as Router }`.\") : void 0;\n  };\n}\n\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n/**\n * The public API for rendering a history-aware <a>.\n */\n\n\nvar Link =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Link, _React$Component);\n\n  function Link() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Link.prototype;\n\n  _proto.handleClick = function handleClick(event, history) {\n    try {\n      if (this.props.onClick) this.props.onClick(event);\n    } catch (ex) {\n      event.preventDefault();\n      throw ex;\n    }\n\n    if (!event.defaultPrevented && // onClick prevented default\n    event.button === 0 && ( // ignore everything but left clicks\n    !this.props.target || this.props.target === \"_self\") && // let browser handle \"target=_blank\" etc.\n    !isModifiedEvent(event) // ignore clicks with modifier keys\n    ) {\n        event.preventDefault();\n        var method = this.props.replace ? history.replace : history.push;\n        method(this.props.to);\n      }\n  };\n\n  _proto.render = function render() {\n    var _this = this;\n\n    var _this$props = this.props,\n        innerRef = _this$props.innerRef,\n        replace = _this$props.replace,\n        to = _this$props.to,\n        rest = _objectWithoutPropertiesLoose(_this$props, [\"innerRef\", \"replace\", \"to\"]); // eslint-disable-line no-unused-vars\n\n\n    return React.createElement(__RouterContext.Consumer, null, function (context) {\n      !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Link> outside a <Router>\") : invariant(false) : void 0;\n      var location = typeof to === \"string\" ? createLocation(to, null, null, context.location) : to;\n      var href = location ? context.history.createHref(location) : \"\";\n      return React.createElement(\"a\", _extends({}, rest, {\n        onClick: function onClick(event) {\n          return _this.handleClick(event, context.history);\n        },\n        href: href,\n        ref: innerRef\n      }));\n    });\n  };\n\n  return Link;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  var toType = PropTypes.oneOfType([PropTypes.string, PropTypes.object]);\n  var innerRefType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.shape({\n    current: PropTypes.any\n  })]);\n  Link.propTypes = {\n    innerRef: innerRefType,\n    onClick: PropTypes.func,\n    replace: PropTypes.bool,\n    target: PropTypes.string,\n    to: toType.isRequired\n  };\n}\n\nfunction joinClassnames() {\n  for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n    classnames[_key] = arguments[_key];\n  }\n\n  return classnames.filter(function (i) {\n    return i;\n  }).join(\" \");\n}\n/**\n * A <Link> wrapper that knows if it's \"active\" or not.\n */\n\n\nfunction NavLink(_ref) {\n  var _ref$ariaCurrent = _ref[\"aria-current\"],\n      ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n      _ref$activeClassName = _ref.activeClassName,\n      activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n      activeStyle = _ref.activeStyle,\n      classNameProp = _ref.className,\n      exact = _ref.exact,\n      isActiveProp = _ref.isActive,\n      locationProp = _ref.location,\n      strict = _ref.strict,\n      styleProp = _ref.style,\n      to = _ref.to,\n      rest = _objectWithoutPropertiesLoose(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"strict\", \"style\", \"to\"]);\n\n  var path = typeof to === \"object\" ? to.pathname : to; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n  var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n  return React.createElement(__RouterContext.Consumer, null, function (context) {\n    !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <NavLink> outside a <Router>\") : invariant(false) : void 0;\n    var pathToMatch = locationProp ? locationProp.pathname : context.location.pathname;\n    var match = escapedPath ? matchPath(pathToMatch, {\n      path: escapedPath,\n      exact: exact,\n      strict: strict\n    }) : null;\n    var isActive = !!(isActiveProp ? isActiveProp(match, context.location) : match);\n    var className = isActive ? joinClassnames(classNameProp, activeClassName) : classNameProp;\n    var style = isActive ? _extends({}, styleProp, activeStyle) : styleProp;\n    return React.createElement(Link, _extends({\n      \"aria-current\": isActive && ariaCurrent || null,\n      className: className,\n      style: style,\n      to: to\n    }, rest));\n  });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  var ariaCurrentType = PropTypes.oneOf([\"page\", \"step\", \"location\", \"date\", \"time\", \"true\"]);\n  NavLink.propTypes = _extends({}, Link.propTypes, {\n    \"aria-current\": ariaCurrentType,\n    activeClassName: PropTypes.string,\n    activeStyle: PropTypes.object,\n    className: PropTypes.string,\n    exact: PropTypes.bool,\n    isActive: PropTypes.func,\n    location: PropTypes.object,\n    strict: PropTypes.bool,\n    style: PropTypes.object\n  });\n}\n\nexport { BrowserRouter, HashRouter, Link, NavLink };\n","import React from 'react'\r\nimport { Link as ReactRouterLink } from 'react-router-dom'\r\nimport PropTypes from 'prop-types'\r\nimport { default as MuiLink } from '@material-ui/core/Link'\r\nimport Route from '../../model/Route'\r\nimport { getRoute } from '../../config'\r\nimport { generatePathWithParams } from '../../actions'\r\n\r\n/**\r\n * Abstract the react-router-dom Route to handle our `Route` definition.\r\n */\r\nclass Link extends React.Component {\r\n  static defaultProps = {\r\n    to: PropTypes.oneOfType([PropTypes.objectOf(Route), PropTypes.string]).isRequired,\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      href,\r\n      to,\r\n      className = '',\r\n      params = {},\r\n      query = {},\r\n      children,\r\n      newTab,\r\n      target,\r\n      anchor,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    if (href) {\r\n      return (\r\n        <a\r\n          href={href + (anchor ? `#${anchor}` : '')}\r\n          className={`link ${className}`}\r\n          target={newTab ? '_blank' : target}\r\n          {...otherProps}\r\n        >\r\n          {children}\r\n        </a>\r\n      )\r\n    }\r\n\r\n    return (\r\n      <ReactRouterLink\r\n        to={generatePathWithParams(to, params, query, { anchor })}\r\n        className={`link ${className}`}\r\n        target={newTab ? '_blank' : target}\r\n        {...otherProps}\r\n      >\r\n        {children}\r\n      </ReactRouterLink>\r\n    )\r\n  }\r\n}\r\n\r\n// Shortcut to retrieve a route config (to use in the `to` prop)\r\nLink.getRoute = getRoute\r\n\r\nLink.Mui = ({ ...rest }) => {\r\n  return <MuiLink component={Link} {...rest} />\r\n}\r\n\r\nexport default Link\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport {\r\n  redirectTo,\r\n  replaceWith,\r\n  reloadTo,\r\n  goBack,\r\n  openExternalLink,\r\n  redirectToExternal,\r\n  updatePageQueries,\r\n} from '../../actions'\r\n\r\nimport { getRoute, getRoutingEnum } from '../../config'\r\n\r\n/**\r\n * Gives the shortcut to routing module such as:\r\n * - actions\r\n */\r\nclass RoutingContainer extends React.Component {\r\n  render() {\r\n    const {\r\n      redirectTo,\r\n      replaceWith,\r\n      reloadTo,\r\n      goBack,\r\n      openExternalLink,\r\n      redirectToExternal,\r\n      children,\r\n    } = this.props\r\n\r\n    return children({\r\n      redirectTo,\r\n      replaceWith,\r\n      goBack,\r\n      reloadTo,\r\n      openExternalLink,\r\n      redirectToExternal,\r\n      updatePageQueries,\r\n      getRoute,\r\n      getRoutingEnum,\r\n    })\r\n  }\r\n}\r\n\r\nRoutingContainer.propTypes = {\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  // no state to map yet\r\n  return {}\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    redirectTo,\r\n    replaceWith,\r\n    reloadTo,\r\n    goBack,\r\n    openExternalLink,\r\n    redirectToExternal,\r\n    // not an action, so we do not have to map the updatePageQueries as an action\r\n    // updatePageQueries,\r\n  }\r\n)(RoutingContainer)\r\n","import { goBack } from 'pmt-modules/routing'\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { isOrderPlugin } from 'pmt-modules/environment'\r\n\r\nimport { DialogAction } from './actions'\r\n\r\nconst dialogMiddleware = createMiddleware(DialogAction.HIDE_DIALOG_BACK, ({ dispatch, action }) => {\r\n  if (isOrderPlugin()) {\r\n    dispatch(goBack())\r\n  }\r\n})\r\n\r\nexport const dialogMiddlewares = [dialogMiddleware]\r\n","//\r\n// The dialog module is mostly inspired by Dan Abramov reponse on\r\n// https://stackoverflow.com/questions/35623656/how-can-i-display-a-modal-dialog-in-redux-that-performs-asynchronous-actions/35641680\r\n//\r\n// Note: We handle only one dialog at a time.\r\n//\r\n//\r\n// ---\r\n// Note about the Dialog component\r\n//\r\n// the dialog component can use\r\n// - DialogRootProps: static data to override props of the `Dialog` in the `DialogRoot` file\r\n// it can be used to change the value of `ignoreBackdropClick` for example\r\n// - DialogStyles: static function used to pass the 'classes' to the Dialog. It behave like the\r\n// `styles` function and `withStyles`\r\n//\r\nimport Immutable, { fromJS } from 'immutable'\r\nimport isNil from 'lodash/isNil'\r\nimport remove from 'lodash/remove'\r\n\r\nimport { DialogAction } from './actions'\r\n\r\nexport * from './config'\r\nexport * from './actions'\r\nexport * from './constants'\r\nexport { default as DialogRoot } from './components/DialogRoot'\r\nexport * from './middlewares'\r\nexport * from './selectors'\r\n\r\n/**\r\n */\r\nconst DEFAULT = {\r\n  list: [],\r\n}\r\n\r\n//\r\n// dialog reducer.\r\n//\r\nexport const dialog = (state = Immutable.fromJS(DEFAULT), action) => {\r\n  let list = state.get('list')\r\n\r\n  switch (action.type) {\r\n    case DialogAction.SHOW_DIALOG:\r\n      if (!isNil(list)) {\r\n        list = list.toJS()\r\n\r\n        list.push({\r\n          type: action.dialogType,\r\n          props: action.dialogProps,\r\n        })\r\n        return state.setIn(['list'], fromJS(list))\r\n      }\r\n      return state\r\n\r\n    case DialogAction.HIDE_DIALOG:\r\n      if (!isNil(list)) {\r\n        list = list.toJS()\r\n        remove(list, i => i.type === action.dialogType)\r\n        return state.setIn(['list'], fromJS(list))\r\n      }\r\n      return state\r\n\r\n    case DialogAction.RESET:\r\n      return state.setIn(['list'], fromJS([]))\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { combineReducers } from 'redux'\r\n\r\nimport { theme } from '../../theme'\r\n\r\nimport { dialog } from '../../dialog'\r\n\r\nconst ux = combineReducers({\r\n  theme,\r\n  dialog,\r\n})\r\n\r\nexport default ux\r\n","\r\nexport const DEFAULT_FORM_OPTIONS = {\r\n  isActivated: false,\r\n}\r\n","import Immutable from 'immutable'\r\nimport find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport invariant from 'invariant'\r\n\r\nimport { DEFAULT_FORM_OPTIONS } from './constants'\r\n\r\nlet _forms = []\r\nexport const registerForms = forms => {\r\n  _forms = forms\r\n}\r\n\r\nexport const getForms = forms => _forms\r\n\r\nexport const getFormsDefaultState = () => {\r\n  let defaultState = {}\r\n\r\n  _forms.forEach(form => {\r\n    if (process.env.__DEV__) {\r\n      invariant(\r\n        isNil(form.default) || !isFunction(form.getDefault),\r\n        `form ${form.type} default must be a function named getDefault`\r\n      )\r\n\r\n      invariant(!isNil(form.type), 'form.type is required')\r\n    }\r\n\r\n    defaultState[form.type] = {\r\n      formData: form.getDefault(),\r\n      options: DEFAULT_FORM_OPTIONS,\r\n    }\r\n  })\r\n\r\n  return Immutable.fromJS(defaultState)\r\n}\r\n\r\n/**\r\n * @param  {string} formType FormType of the form to retrive\r\n * @return {FormConfiguration} the configuration for the given FormType\r\n */\r\nexport const getForm = formType => {\r\n  const form = find(_forms, form => formType === form.type)\r\n\r\n  invariant(!isNil(form), 'form ' + formType + ' not registered')\r\n\r\n  return form\r\n}\r\n\r\nexport const getFormDefaultData = formType => {\r\n  const form = getForm(formType)\r\n\r\n  return form.getDefault()\r\n}\r\n\r\nexport const getFormDefaultOptions = formType => {\r\n  return { ...DEFAULT_FORM_OPTIONS }\r\n}\r\n\r\nexport const getFormOptions = formType => getForm(formType).options\r\n\r\nexport const getFormCustomActions = formType => {\r\n  const form = getForm(formType)\r\n\r\n  const customActions = form.options.customActions\r\n  invariant(\r\n    isNil(customActions) || isObject(customActions),\r\n    'form ' + formType + ' has no customActions'\r\n  )\r\n\r\n  return customActions || null\r\n}\r\n\r\nexport const getFormReducer = formType => {\r\n  const form = getForm(formType)\r\n\r\n  const reducer = form.options.reducer\r\n  invariant(isNil(reducer) || isFunction(reducer), 'form ' + formType + ' has no reducer')\r\n\r\n  return reducer\r\n}\r\n\r\nexport const getFormModifier = formType => {\r\n  const form = getForm(formType)\r\n\r\n  const modifier = form.options.modifier\r\n  invariant(isNil(modifier) || isFunction(modifier), 'form ' + formType + ' has no modifier')\r\n\r\n  return modifier\r\n}\r\n\r\nexport const getValidator = formType => getForm(formType).validator\r\n","import { createAction } from '../redux'\r\n\r\nimport {\r\n  getFormDefaultData,\r\n  getFormDefaultOptions,\r\n} from './config'\r\n\r\nexport const FormAction = {\r\n  CREATE: 'FORM::CREATE',\r\n  UPDATE: 'FORM::UPDATE',\r\n  RESET: 'FORM::RESET',\r\n  ACTIVATION: 'FORM::ACTIVATION',\r\n  UPDATE_OPTIONS: 'FORM::OPTIONS::UPDATE'\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} formType The FormType\r\n * @param {any} data The form data\r\n */\r\nexport const initForm = (formType, data) => createAction(\r\n  FormAction.CREATE,\r\n  {\r\n    formType,\r\n    data,\r\n  }\r\n)\r\n\r\n/**\r\n *\r\n * @param {string} formType The FormType\r\n * @param {any} data The form data\r\n */\r\nexport const updateForm = (formType, data) => createAction(\r\n  FormAction.UPDATE,\r\n  {\r\n    formType,\r\n    data,\r\n  }\r\n)\r\n\r\n/**\r\n *\r\n * @param {string} formType The FormType\r\n * @param {any} data The form data\r\n */\r\nexport const resetForm = (formType, data, options) => createAction(\r\n  FormAction.RESET,\r\n  {\r\n    withDefaultData: false,\r\n    formType,\r\n    data,\r\n    options,\r\n  }\r\n)\r\n\r\n/**\r\n *\r\n * @param {string} formType The FormType\r\n * @param {any} data The form data\r\n */\r\nexport const resetFormWithDefaultData = (formType) => createAction(\r\n  FormAction.RESET,\r\n  {\r\n    withDefaultData: true,\r\n    formType,\r\n    data: getFormDefaultData(formType),\r\n    options: getFormDefaultOptions(formType),\r\n  }\r\n)\r\n\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const setFormActivation = (formType, isActivated) => createAction(\r\n  FormAction.ACTIVATION,\r\n  {\r\n    formType,\r\n    isActivated,\r\n  }\r\n)\r\n\r\n/**\r\n * update options of a form\r\n */\r\nexport const updateFormOptions = (formType, options) => createAction(\r\n  FormAction.UPDATE_OPTIONS,\r\n  {\r\n    formType,\r\n    options,\r\n  }\r\n)\r\n","export default {\r\n  USER_FORM_EMAIL: 'USER_FORM_EMAIL',\r\n  PRO_FORM_EMAIL: 'PRO_FORM_EMAIL',\r\n}\r\n","import find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\n\r\nlet _dataCatcherSettings = null\r\n\r\nexport const setDataCatcherSettings = dataCatcherSettings => {\r\n  _dataCatcherSettings = dataCatcherSettings\r\n}\r\n\r\nexport const getDataCatcherSettings = () => _dataCatcherSettings\r\n\r\nexport const getDataCatcherSettingForType = dataCatcherType =>\r\n  find(getDataCatcherSettings(), setting => setting.dataCatcherType === dataCatcherType)\r\n\r\nexport const isDataCatcherEnabledForType = dataCatcherType =>\r\n  !isNil(getDataCatcherSettingForType(dataCatcherType))\r\n","/**\r\n * Enum of different existing forms.\r\n * The FormType is used to save / get data on our form reducer\r\n */\r\nconst FormType = {\r\n  REGISTER: 'FORM::REGISTER',\r\n  LOGIN: 'FORM::LOGIN',\r\n  PRO_LOGIN: 'FORM::PRO_LOGIN',\r\n  GROUP_EDIT_GENERAL_INFOS: 'FORM::GROUP_EDIT_GENERAL_INFOS',\r\n  RESTAURANT_LOGIN: 'FORM::RESTAURANT_LOGIN',\r\n  RESTAURANT_CREATE: 'FORM::RESTAURANT_CREATE',\r\n  FORGOT_PASSWORD: 'FORM::FORGOT_PASSWORD',\r\n  PRO_FORGOT_PASSWORD: 'FORM::PRO_FORGOT_PASSWORD',\r\n  USER_LIGHT: 'FORM::USER_LIGHT',\r\n  INCOGNITO: 'FORM::INCOGNITO',\r\n  CREDIT_CARD: 'FORM::CREDIT_CARD',\r\n  COMPANY_ADD: 'FORM::COMPANY_ADD',\r\n  COMPANY_EDIT: 'FORM::COMPANY_EDIT',\r\n  BILLING_ENTITY_ADD: 'FORM::BILLING_ENTITY_ADD',\r\n  BILLING_ENTITY_EDIT: 'FORM::BILLING_ENTITY_EDIT',\r\n  ADMISSION_FEE_RULE_ADD: 'FORM::ADMISSION_FEE_RULE_ADD',\r\n  PRICING_RULE_ADD: 'FORM::PRICING_RULE_ADD',\r\n  SUBSIDY_RULE_ADD: 'FORM::SUBSIDY_RULE_ADD',\r\n  SUBSIDY_RULE_EDIT: 'FORM::SUBSIDY_RULE_EDIT',\r\n\r\n  CREATE_USER: 'FORM::CREATE_USER',\r\n  EDIT_USER_ACCOUNT: 'FORM::EDIT_USER_ACCOUNT',\r\n  EDIT_USER: 'FORM::EDIT_USER',\r\n  ADD_USER_ADDRESS: 'FORM::ADD_USER_ADDRESS',\r\n  EDIT_USER_ADDRESS: 'FORM::EDIT_USER_ADDRESS',\r\n\r\n  USER_PROFILE: 'FORM::USER_PROFILE',\r\n  USER_PROFILE_DIETARY: 'FORM::USER_PROFILE_DIETARY',\r\n\r\n  PRO_ACCOUNT_EDIT: 'FORM::PRO_ACCOUNT_EDIT',\r\n  PRO_ROLE_EDIT: 'FORM::PRO_ROLE_EDIT',\r\n\r\n  HISTORY_SELECT: 'FORM::HISTORY_SELECT',\r\n\r\n  CHECKOUT_PAYMENT_EMAIL: 'FORM::CHECKOUT::PAYMENT_EMAIL',\r\n\r\n  SCHEDULED_ACTION: 'FORM::SCHEDULED_ACTION',\r\n\r\n  GROUP_CREATE: 'FORM::GROUP::CREATE',\r\n  GROUP_EDIT_USER_SETTINGS: 'FORM::GROUP::EDIT::USER_SETTINGS',\r\n  GROUP_EDIT_FRONT_SETTINGS: 'FORM::GROUP::EDIT::FRONT_SETTINGS',\r\n  GROUP_EDIT_FINANCE_SETTINGS: 'FORM::GROUP::EDIT::FINANCE_SETTINGS',\r\n  GROUP_EDIT_PAYMENT_METHOD_DETAIL_SETTINGS: 'FORM::GROUP::EDIT::PAYMENT_METHOD_DETAIL_SETTINGS',\r\n  GROUP_EDIT_USER_MANAGEMENT_SETTINGS: 'FORM::GROUP::EDIT::USER_MANAGEMENT_SETTINGS',\r\n\r\n  API_CONSUMER__CREATE: 'FORM::API_CONSUMER::CREATE',\r\n  API_CONSUMER__THEME: 'FORM::API_CONSUMER::THEME',\r\n  API_CONSUMER__AUTHENTICATION: 'FORM::API_CONSUMER::AUTHENTICATION',\r\n  API_CONSUMER__ANALYTICS: 'FORM::API_CONSUMER::ANALYTICS',\r\n  API_CONSUMER__REGISTRATION: 'FORM::API_CONSUMER::REGISTRATION',\r\n  API_CONSUMER__IDENTIFICATION: 'FORM::API_CONSUMER::IDENTIFICATION',\r\n  API_CONSUMER__INCOGNITO_IDENTIFICATION: 'FORM::API_CONSUMER::INCOGNITO_IDENTIFICATION',\r\n  API_CONSUMER__FRONT: 'FORM::API_CONSUMER::FRONT',\r\n  API_CONSUMER__SECURITY: 'FORM::API_CONSUMER::SECURITY',\r\n  API_CONSUMER__THIRDPARTY: 'FORM::API_CONSUMER::THIRDPARTY',\r\n  API_CONSUMER__TEXTS: 'FORM::API_CONSUMER::TEXTS',\r\n  API_CONSUMER__ORDER: 'FORM::API_CONSUMER::ORDER',\r\n  API_CONSUMER__DIGITAL_MENU: 'FORM::API_CONSUMER::DIGITAL_MENU',\r\n  API_CONSUMER__CATALOG: 'FORM::API_CONSUMER::CATALOG',\r\n  API_CONSUMER__GENERAL: 'FORM::API_CONSUMER::API_CONSUMER__GENERAL',\r\n\r\n  BO_PIM_SETTINGS_PRICING_CLUSTER_EDIT: 'FORM::BO_PIM_SETTINGS_PRICING_CLUSTER::EDIT',\r\n  // Tip: NEW_FORM_ABOVE\r\n}\r\n\r\nexport default FormType\r\n","import { createAction } from '../redux'\r\n\r\nexport const DataCatcherAction = {\r\n  POST_CATCHED_DATA: 'DATA_CATCHER::POST_CATCHED_DATA',\r\n}\r\n\r\n/**\r\n *\r\n * @param  {DataCatcherType} dataCatcherType\r\n * @param  {any} value  catched data value\r\n */\r\nexport const postCatchedData = (dataCatcherType, value) => createAction(\r\n  DataCatcherAction.POST_CATCHED_DATA,\r\n  {\r\n    dataCatcherType,\r\n    value,\r\n  }\r\n)\r\n","import DataCatcherType from './DataCatcherType'\r\n\r\nimport { isDataCatcherEnabledForType } from './config'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nexport * from './actions'\r\nexport * from './middlewares'\r\nexport { default as DataCatcherType } from './DataCatcherType'\r\n\r\n//\r\n// This modules allows to catch data from an action, and to update other state data.\r\n// It is used for example to catch user email on login / password recovery, and put this email\r\n// on the login / password recovery form data, to pre-fill the forms.\r\n//\r\n// Note: You MUST add dataCatcherMiddlewares to the front middlewares config\r\n//\r\n\r\n// TODO: reducer should be defined on the front config.\r\nexport const dataCatcherFormReducer = (state, action) => {\r\n  switch (action.dataCatcherType) {\r\n    // Used for web customer\r\n    case DataCatcherType.USER_FORM_EMAIL:\r\n      if (!isDataCatcherEnabledForType(DataCatcherType.USER_FORM_EMAIL)) {\r\n        return state\r\n      }\r\n\r\n      return state\r\n        .updateIn([FormType.LOGIN, 'formData'], formData => formData.set('username', action.value))\r\n        .updateIn([FormType.FORGOT_PASSWORD, 'formData'], formData =>\r\n          formData.set('username', action.value)\r\n        )\r\n\r\n    // Used for backoffice\r\n    case DataCatcherType.PRO_FORM_EMAIL:\r\n      if (!isDataCatcherEnabledForType(DataCatcherType.PRO_FORM_EMAIL)) {\r\n        return state\r\n      }\r\n\r\n      return state\r\n        .updateIn([FormType.PRO_LOGIN, 'formData'], formData =>\r\n          formData.set('username', action.value)\r\n        )\r\n        .updateIn([FormType.PRO_FORGOT_PASSWORD, 'formData'], formData =>\r\n          formData.set('username', action.value)\r\n        )\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import invariant from 'invariant'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nexport const FORM_CUSTOM_ACTION = 'FORM::CUSTOM_ACTION'\r\n\r\n/**\r\n * create a form custom action : the form must have a configured reducer\r\n * that handle the given actionName\r\n * @param  {formType} formType\r\n * @param  {string} actionName\r\n * @param  {object} data\r\n */\r\nconst createFormCustomAction = (formType, actionName, data = null) => dispatch => {\r\n\r\n  invariant(!isEmpty(actionName), 'action name is required')\r\n  invariant(!isEmpty(formType), 'form type is required')\r\n\r\n  return dispatch({\r\n    type: FORM_CUSTOM_ACTION,\r\n    formType,\r\n    actionName,\r\n    data,\r\n  })\r\n\r\n}\r\n\r\nexport default createFormCustomAction\r\n","export const blackList = [\r\n  \"0-mail.com\",\r\n  \"0815.ru\",\r\n  \"0815.su\",\r\n  \"0clickemail.com\",\r\n  \"0wnd.net\",\r\n  \"0wnd.org\",\r\n  \"10mail.org\",\r\n  \"10minutemail.cf\",\r\n  \"10minutemail.com\",\r\n  \"10minutemail.de\",\r\n  \"10minutemail.ga\",\r\n  \"10minutemail.gq\",\r\n  \"10minutemail.ml\",\r\n  \"123-m.com\",\r\n  \"12minutemail.com\",\r\n  \"1ce.us\",\r\n  \"1chuan.com\",\r\n  \"1mail.ml\",\r\n  \"1pad.de\",\r\n  \"1zhuan.com\",\r\n  \"20mail.in\",\r\n  \"20mail.it\",\r\n  \"20minutemail.com\",\r\n  \"21cn.com\",\r\n  \"24hourmail.com\",\r\n  \"2prong.com\",\r\n  \"30minutemail.com\",\r\n  \"33mail.com\",\r\n  \"3d-painting.com\",\r\n  \"3mail.ga\",\r\n  \"4mail.cf\",\r\n  \"4mail.ga\",\r\n  \"4warding.com\",\r\n  \"4warding.net\",\r\n  \"4warding.org\",\r\n  \"5mail.cf\",\r\n  \"5mail.ga\",\r\n  \"60minutemail.com\",\r\n  \"675hosting.com\",\r\n  \"675hosting.net\",\r\n  \"675hosting.org\",\r\n  \"6ip.us\",\r\n  \"6mail.cf\",\r\n  \"6mail.ga\",\r\n  \"6mail.ml\",\r\n  \"6paq.com\",\r\n  \"6url.com\",\r\n  \"75hosting.com\",\r\n  \"75hosting.net\",\r\n  \"75hosting.org\",\r\n  \"7days-printing.com\",\r\n  \"7mail.ga\",\r\n  \"7mail.ml\",\r\n  \"7tags.com\",\r\n  \"8mail.cf\",\r\n  \"8mail.ga\",\r\n  \"8mail.ml\",\r\n  \"99experts.com\",\r\n  \"9mail.cf\",\r\n  \"9ox.net\",\r\n  \"a-bc.net\",\r\n  \"a45.in\",\r\n  \"abusemail.de\",\r\n  \"abyssmail.com\",\r\n  \"ac20mail.in\",\r\n  \"acentri.com\",\r\n  \"advantimo.com\",\r\n  \"afrobacon.com\",\r\n  \"ag.us.to\",\r\n  \"agedmail.com\",\r\n  \"ahk.jp\",\r\n  \"ajaxapp.net\",\r\n  \"alivance.com\",\r\n  \"amail.com\",\r\n  \"amilegit.com\",\r\n  \"amiri.net\",\r\n  \"amiriindustries.com\",\r\n  \"anappthat.com\",\r\n  \"ano-mail.net\",\r\n  \"anonbox.net\",\r\n  \"anonymail.dk\",\r\n  \"anonymbox.com\",\r\n  \"antichef.com\",\r\n  \"antichef.net\",\r\n  \"antispam.de\",\r\n  \"appixie.com\",\r\n  \"armyspy.com\",\r\n  \"aver.com\",\r\n  \"azmeil.tk\",\r\n  \"baxomale.ht.cx\",\r\n  \"beddly.com\",\r\n  \"beefmilk.com\",\r\n  \"big1.us\",\r\n  \"bigprofessor.so\",\r\n  \"bigstring.com\",\r\n  \"binkmail.com\",\r\n  \"bio-muesli.net\",\r\n  \"bladesmail.net\",\r\n  \"blogmyway.org\",\r\n  \"bobmail.info\",\r\n  \"bodhi.lawlita.com\",\r\n  \"bofthew.com\",\r\n  \"bootybay.de\",\r\n  \"boun.cr\",\r\n  \"bouncr.com\",\r\n  \"boxformail.in\",\r\n  \"boxtemp.com.br\",\r\n  \"brefmail.com\",\r\n  \"brennendesreich.de\",\r\n  \"broadbandninja.com\",\r\n  \"bsnow.net\",\r\n  \"bu.mintemail.com\",\r\n  \"buffemail.com\",\r\n  \"bugmenot.com\",\r\n  \"bumpymail.com\",\r\n  \"bund.us\",\r\n  \"bundes-li.ga\",\r\n  \"burnthespam.info\",\r\n  \"burstmail.info\",\r\n  \"buyusedlibrarybooks.org\",\r\n  \"c2.hu\",\r\n  \"cachedot.net\",\r\n  \"casualdx.com\",\r\n  \"cbair.com\",\r\n  \"ce.mintemail.com\",\r\n  \"cellurl.com\",\r\n  \"centermail.com\",\r\n  \"centermail.net\",\r\n  \"chammy.info\",\r\n  \"cheatmail.de\",\r\n  \"chogmail.com\",\r\n  \"choicemail1.com\",\r\n  \"chong-mail.com\",\r\n  \"chong-mail.net\",\r\n  \"chong-mail.org\",\r\n  \"clixser.com\",\r\n  \"cmail.com\",\r\n  \"cmail.net\",\r\n  \"cmail.org\",\r\n  \"coldemail.info\",\r\n  \"consumerriot.com\",\r\n  \"cool.fr.nf\",\r\n  \"correo.blogos.net\",\r\n  \"cosmorph.com\",\r\n  \"courriel.fr.nf\",\r\n  \"courrieltemporaire.com\",\r\n  \"crapmail.org\",\r\n  \"crazespaces.pw\",\r\n  \"crazymailing.com\",\r\n  \"cubiclink.com\",\r\n  \"curryworld.de\",\r\n  \"cust.in\",\r\n  \"cuvox.de\",\r\n  \"dacoolest.com\",\r\n  \"daintly.com\",\r\n  \"dandikmail.com\",\r\n  \"dayrep.com\",\r\n  \"dbunker.com\",\r\n  \"dcemail.com\",\r\n  \"deadaddress.com\",\r\n  \"deadchildren.org\",\r\n  \"deadfake.cf\",\r\n  \"deadfake.ga\",\r\n  \"deadfake.ml\",\r\n  \"deadfake.tk\",\r\n  \"deadspam.com\",\r\n  \"deagot.com\",\r\n  \"dealja.com\",\r\n  \"despam.it\",\r\n  \"despammed.com\",\r\n  \"devnullmail.com\",\r\n  \"dfgh.net\",\r\n  \"dharmatel.net\",\r\n  \"digitalsanctuary.com\",\r\n  \"dingbone.com\",\r\n  \"discard.cf\",\r\n  \"discard.email\",\r\n  \"discard.ga\",\r\n  \"discard.gq\",\r\n  \"discard.ml\",\r\n  \"discard.tk\",\r\n  \"discardmail.com\",\r\n  \"discardmail.de\",\r\n  \"disposable-email.ml\",\r\n  \"disposable.cf\",\r\n  \"disposable.ga\",\r\n  \"disposable.ml\",\r\n  \"disposableaddress.com\",\r\n  \"disposableemailaddresses.com\",\r\n  \"disposableemailaddresses.emailmiser.com\",\r\n  \"disposableinbox.com\",\r\n  \"dispose.it\",\r\n  \"disposeamail.com\",\r\n  \"disposemail.com\",\r\n  \"dispostable.com\",\r\n  \"divermail.com\",\r\n  \"dm.w3internet.co.uk\",\r\n  \"dodgeit.com\",\r\n  \"dodgit.com\",\r\n  \"dodgit.org\",\r\n  \"doiea.com\",\r\n  \"domozmail.com\",\r\n  \"donemail.ru\",\r\n  \"dontreg.com\",\r\n  \"dontsendmespam.de\",\r\n  \"dotmsg.com\",\r\n  \"drdrb.com\",\r\n  \"drdrb.net\",\r\n  \"droplar.com\",\r\n  \"dropmail.me\",\r\n  \"duam.net\",\r\n  \"dudmail.com\",\r\n  \"dump-email.info\",\r\n  \"dumpandjunk.com\",\r\n  \"dumpmail.de\",\r\n  \"dumpyemail.com\",\r\n  \"duskmail.com\",\r\n  \"e-mail.com\",\r\n  \"e-mail.org\",\r\n  \"e4ward.com\",\r\n  \"easytrashmail.com\",\r\n  \"eelmail.com\",\r\n  \"einrot.com\",\r\n  \"einrot.de\",\r\n  \"email-fake.cf\",\r\n  \"email-fake.ga\",\r\n  \"email-fake.gq\",\r\n  \"email-fake.ml\",\r\n  \"email-fake.tk\",\r\n  \"email60.com\",\r\n  \"emailage.cf\",\r\n  \"emailage.ga\",\r\n  \"emailage.gq\",\r\n  \"emailage.ml\",\r\n  \"emailage.tk\",\r\n  \"emaildienst.de\",\r\n  \"emailgo.de\",\r\n  \"emailias.com\",\r\n  \"emailigo.de\",\r\n  \"emailinfive.com\",\r\n  \"emailisvalid.com\",\r\n  \"emaillime.com\",\r\n  \"emailmiser.com\",\r\n  \"emailproxsy.com\",\r\n  \"emails.ga\",\r\n  \"emailsensei.com\",\r\n  \"emailspam.cf\",\r\n  \"emailspam.ga\",\r\n  \"emailspam.gq\",\r\n  \"emailspam.ml\",\r\n  \"emailspam.tk\",\r\n  \"emailtemporar.ro\",\r\n  \"emailtemporario.com.br\",\r\n  \"emailthe.net\",\r\n  \"emailtmp.com\",\r\n  \"emailto.de\",\r\n  \"emailwarden.com\",\r\n  \"emailx.at.hm\",\r\n  \"emailxfer.com\",\r\n  \"emailz.cf\",\r\n  \"emailz.ga\",\r\n  \"emailz.gq\",\r\n  \"emailz.ml\",\r\n  \"emeil.in\",\r\n  \"emeil.ir\",\r\n  \"emil.com\",\r\n  \"emkei.cf\",\r\n  \"emkei.ga\",\r\n  \"emkei.gq\",\r\n  \"emkei.ml\",\r\n  \"emkei.tk\",\r\n  \"emz.net\",\r\n  \"enterto.com\",\r\n  \"ephemail.net\",\r\n  \"etranquil.com\",\r\n  \"etranquil.net\",\r\n  \"etranquil.org\",\r\n  \"evopo.com\",\r\n  \"explodemail.com\",\r\n  \"eyepaste.com\",\r\n  \"facebook-email.cf\",\r\n  \"facebook-email.ga\",\r\n  \"facebook-email.ml\",\r\n  \"facebookmail.gq\",\r\n  \"facebookmail.ml\",\r\n  \"fake-mail.cf\",\r\n  \"fake-mail.ga\",\r\n  \"fake-mail.ml\",\r\n  \"fakeinbox.cf\",\r\n  \"fakeinbox.com\",\r\n  \"fakeinbox.ga\",\r\n  \"fakeinbox.ml\",\r\n  \"fakeinbox.tk\",\r\n  \"fakeinformation.com\",\r\n  \"fakemail.fr\",\r\n  \"fakemailgenerator.com\",\r\n  \"fakemailz.com\",\r\n  \"fammix.com\",\r\n  \"fansworldwide.de\",\r\n  \"fantasymail.de\",\r\n  \"fastacura.com\",\r\n  \"fastchevy.com\",\r\n  \"fastchrysler.com\",\r\n  \"fastkawasaki.com\",\r\n  \"fastmazda.com\",\r\n  \"fastmitsubishi.com\",\r\n  \"fastnissan.com\",\r\n  \"fastsubaru.com\",\r\n  \"fastsuzuki.com\",\r\n  \"fasttoyota.com\",\r\n  \"fastyamaha.com\",\r\n  \"fatflap.com\",\r\n  \"fdfdsfds.com\",\r\n  \"fightallspam.com\",\r\n  \"filzmail.com\",\r\n  \"fixmail.tk\",\r\n  \"fizmail.com\",\r\n  \"fleckens.hu\",\r\n  \"flurred.com\",\r\n  \"flyspam.com\",\r\n  \"footard.com\",\r\n  \"forgetmail.com\",\r\n  \"fornow.eu\",\r\n  \"fr33mail.info\",\r\n  \"frapmail.com\",\r\n  \"free-email.cf\",\r\n  \"free-email.ga\",\r\n  \"freemail.ms\",\r\n  \"freemails.cf\",\r\n  \"freemails.ga\",\r\n  \"freemails.ml\",\r\n  \"freundin.ru\",\r\n  \"friendlymail.co.uk\",\r\n  \"front14.org\",\r\n  \"fuckingduh.com\",\r\n  \"fudgerub.com\",\r\n  \"fux0ringduh.com\",\r\n  \"garliclife.com\",\r\n  \"gawab.com\",\r\n  \"gelitik.in\",\r\n  \"get-mail.cf\",\r\n  \"get-mail.ga\",\r\n  \"get-mail.ml\",\r\n  \"get-mail.tk\",\r\n  \"get1mail.com\",\r\n  \"get2mail.fr\",\r\n  \"getairmail.cf\",\r\n  \"getairmail.com\",\r\n  \"getairmail.ga\",\r\n  \"getairmail.gq\",\r\n  \"getairmail.ml\",\r\n  \"getairmail.tk\",\r\n  \"getmails.eu\",\r\n  \"getonemail.com\",\r\n  \"getonemail.net\",\r\n  \"ghosttexter.de\",\r\n  \"girlsundertheinfluence.com\",\r\n  \"gishpuppy.com\",\r\n  \"goemailgo.com\",\r\n  \"gorillaswithdirtyarmpits.com\",\r\n  \"gotmail.com\",\r\n  \"gotmail.net\",\r\n  \"gotmail.org\",\r\n  \"gotti.otherinbox.com\",\r\n  \"gowikibooks.com\",\r\n  \"gowikicampus.com\",\r\n  \"gowikicars.com\",\r\n  \"gowikifilms.com\",\r\n  \"gowikigames.com\",\r\n  \"gowikimusic.com\",\r\n  \"gowikinetwork.com\",\r\n  \"gowikitravel.com\",\r\n  \"gowikitv.com\",\r\n  \"grandmamail.com\",\r\n  \"grandmasmail.com\",\r\n  \"great-host.in\",\r\n  \"greensloth.com\",\r\n  \"grr.la\",\r\n  \"gsrv.co.uk\",\r\n  \"guerillamail.biz\",\r\n  \"guerillamail.com\",\r\n  \"guerillamail.net\",\r\n  \"guerillamail.org\",\r\n  \"guerrillamail.biz\",\r\n  \"guerrillamail.com\",\r\n  \"guerrillamail.de\",\r\n  \"guerrillamail.net\",\r\n  \"guerrillamail.org\",\r\n  \"guerrillamailblock.com\",\r\n  \"gustr.com\",\r\n  \"h.mintemail.com\",\r\n  \"h8s.org\",\r\n  \"hacccc.com\",\r\n  \"haltospam.com\",\r\n  \"harakirimail.com\",\r\n  \"hartbot.de\",\r\n  \"hatespam.org\",\r\n  \"hellodream.mobi\",\r\n  \"herp.in\",\r\n  \"hidemail.de\",\r\n  \"hidzz.com\",\r\n  \"hmamail.com\",\r\n  \"hochsitze.com\",\r\n  \"hopemail.biz\",\r\n  \"hot-mail.cf\",\r\n  \"hot-mail.ga\",\r\n  \"hot-mail.gq\",\r\n  \"hot-mail.ml\",\r\n  \"hot-mail.tk\",\r\n  \"hotpop.com\",\r\n  \"hulapla.de\",\r\n  \"humn.ws.gy\",\r\n  \"ieatspam.eu\",\r\n  \"ieatspam.info\",\r\n  \"ieh-mail.de\",\r\n  \"ihateyoualot.info\",\r\n  \"iheartspam.org\",\r\n  \"imails.info\",\r\n  \"imgof.com\",\r\n  \"imstations.com\",\r\n  \"inbax.tk\",\r\n  \"inbox.si\",\r\n  \"inboxalias.com\",\r\n  \"inboxclean.com\",\r\n  \"inboxclean.org\",\r\n  \"inboxproxy.com\",\r\n  \"incognitomail.com\",\r\n  \"incognitomail.net\",\r\n  \"incognitomail.org\",\r\n  \"insorg-mail.info\",\r\n  \"instant-mail.de\",\r\n  \"instantemailaddress.com\",\r\n  \"ipoo.org\",\r\n  \"irish2me.com\",\r\n  \"iroid.com\",\r\n  \"iwi.net\",\r\n  \"jetable.com\",\r\n  \"jetable.fr.nf\",\r\n  \"jetable.net\",\r\n  \"jetable.org\",\r\n  \"jnxjn.com\",\r\n  \"jourrapide.com\",\r\n  \"jsrsolutions.com\",\r\n  \"junk1e.com\",\r\n  \"junkmail.ga\",\r\n  \"junkmail.gq\",\r\n  \"kasmail.com\",\r\n  \"kaspop.com\",\r\n  \"keepmymail.com\",\r\n  \"killmail.com\",\r\n  \"killmail.net\",\r\n  \"kimsdisk.com\",\r\n  \"kingsq.ga\",\r\n  \"kir.ch.tc\",\r\n  \"klassmaster.com\",\r\n  \"klassmaster.net\",\r\n  \"klzlk.com\",\r\n  \"kook.ml\",\r\n  \"koszmail.pl\",\r\n  \"kulturbetrieb.info\",\r\n  \"kurzepost.de\",\r\n  \"l33r.eu\",\r\n  \"lackmail.net\",\r\n  \"lags.us\",\r\n  \"landmail.co\",\r\n  \"lastmail.co\",\r\n  \"lastmail.com\",\r\n  \"lazyinbox.com\",\r\n  \"letthemeatspam.com\",\r\n  \"lhsdv.com\",\r\n  \"lifebyfood.com\",\r\n  \"link2mail.net\",\r\n  \"litedrop.com\",\r\n  \"loadby.us\",\r\n  \"login-email.cf\",\r\n  \"login-email.ga\",\r\n  \"login-email.ml\",\r\n  \"login-email.tk\",\r\n  \"lol.ovpn.to\",\r\n  \"lookugly.com\",\r\n  \"lopl.co.cc\",\r\n  \"lortemail.dk\",\r\n  \"lovemeleaveme.com\",\r\n  \"lr7.us\",\r\n  \"lr78.com\",\r\n  \"lroid.com\",\r\n  \"luv2.us\",\r\n  \"m4ilweb.info\",\r\n  \"maboard.com\",\r\n  \"mail-filter.com\",\r\n  \"mail-temporaire.fr\",\r\n  \"mail.by\",\r\n  \"mail.mezimages.net\",\r\n  \"mail114.net\",\r\n  \"mail2rss.org\",\r\n  \"mail333.com\",\r\n  \"mail4trash.com\",\r\n  \"mailbidon.com\",\r\n  \"mailblocks.com\",\r\n  \"mailbucket.org\",\r\n  \"mailcat.biz\",\r\n  \"mailcatch.com\",\r\n  \"maildrop.cc\",\r\n  \"maildrop.cf\",\r\n  \"maildrop.ga\",\r\n  \"maildrop.gq\",\r\n  \"maildrop.ml\",\r\n  \"maildx.com\",\r\n  \"maileater.com\",\r\n  \"mailexpire.com\",\r\n  \"mailfa.tk\",\r\n  \"mailforspam.com\",\r\n  \"mailfree.ga\",\r\n  \"mailfree.gq\",\r\n  \"mailfree.ml\",\r\n  \"mailfreeonline.com\",\r\n  \"mailfs.com\",\r\n  \"mailguard.me\",\r\n  \"mailimate.com\",\r\n  \"mailin8r.com\",\r\n  \"mailinater.com\",\r\n  \"mailinator.com\",\r\n  \"mailinator.gq\",\r\n  \"mailinator.net\",\r\n  \"mailinator.org\",\r\n  \"mailinator.us\",\r\n  \"mailinator2.com\",\r\n  \"mailincubator.com\",\r\n  \"mailismagic.com\",\r\n  \"mailjunk.cf\",\r\n  \"mailjunk.ga\",\r\n  \"mailjunk.gq\",\r\n  \"mailjunk.ml\",\r\n  \"mailjunk.tk\",\r\n  \"mailmate.com\",\r\n  \"mailme.gq\",\r\n  \"mailme.ir\",\r\n  \"mailme.lv\",\r\n  \"mailme24.com\",\r\n  \"mailmetrash.com\",\r\n  \"mailmoat.com\",\r\n  \"mailnator.com\",\r\n  \"mailnesia.com\",\r\n  \"mailnull.com\",\r\n  \"mailpick.biz\",\r\n  \"mailproxsy.com\",\r\n  \"mailquack.com\",\r\n  \"mailrock.biz\",\r\n  \"mailsac.com\",\r\n  \"mailscrap.com\",\r\n  \"mailseal.de\",\r\n  \"mailshell.com\",\r\n  \"mailsiphon.com\",\r\n  \"mailslapping.com\",\r\n  \"mailslite.com\",\r\n  \"mailtemp.info\",\r\n  \"mailtothis.com\",\r\n  \"mailzilla.com\",\r\n  \"mailzilla.org\",\r\n  \"mailzilla.orgmbx.cc\",\r\n  \"makemetheking.com\",\r\n  \"manifestgenerator.com\",\r\n  \"manybrain.com\",\r\n  \"mbx.cc\",\r\n  \"mciek.com\",\r\n  \"mega.zik.dj\",\r\n  \"meinspamschutz.de\",\r\n  \"meltmail.com\",\r\n  \"messagebeamer.de\",\r\n  \"mezimages.net\",\r\n  \"mfsa.ru\",\r\n  \"mierdamail.com\",\r\n  \"migumail.com\",\r\n  \"mintemail.com\",\r\n  \"mjukglass.nu\",\r\n  \"moakt.com\",\r\n  \"mobi.web.id\",\r\n  \"mobileninja.co.uk\",\r\n  \"moburl.com\",\r\n  \"mohmal.com\",\r\n  \"moncourrier.fr.nf\",\r\n  \"monemail.fr.nf\",\r\n  \"monmail.fr.nf\",\r\n  \"monumentmail.com\",\r\n  \"ms9.mailslite.com\",\r\n  \"msa.minsmail.com\",\r\n  \"mt2009.com\",\r\n  \"mt2014.com\",\r\n  \"mx0.wwwnew.eu\",\r\n  \"my10minutemail.com\",\r\n  \"mycleaninbox.net\",\r\n  \"myemailboxy.com\",\r\n  \"mymail-in.net\",\r\n  \"mymailoasis.com\",\r\n  \"mynetstore.de\",\r\n  \"mypacks.net\",\r\n  \"mypartyclip.de\",\r\n  \"myphantomemail.com\",\r\n  \"myspaceinc.com\",\r\n  \"myspaceinc.net\",\r\n  \"myspaceinc.org\",\r\n  \"myspacepimpedup.com\",\r\n  \"myspamless.com\",\r\n  \"mytemp.email\",\r\n  \"mytempemail.com\",\r\n  \"mytrashmail.com\",\r\n  \"neomailbox.com\",\r\n  \"nepwk.com\",\r\n  \"nervmich.net\",\r\n  \"nervtmich.net\",\r\n  \"netmails.com\",\r\n  \"netmails.net\",\r\n  \"netzidiot.de\",\r\n  \"neverbox.com\",\r\n  \"nice-4u.com\",\r\n  \"nmail.cf\",\r\n  \"no-spam.ws\",\r\n  \"nobulk.com\",\r\n  \"noclickemail.com\",\r\n  \"nogmailspam.info\",\r\n  \"nomail.xl.cx\",\r\n  \"nomail2me.com\",\r\n  \"nomorespamemails.com\",\r\n  \"nonspam.eu\",\r\n  \"nonspammer.de\",\r\n  \"noref.in\",\r\n  \"nospam.wins.com.br\",\r\n  \"nospam.ze.tc\",\r\n  \"nospam4.us\",\r\n  \"nospamfor.us\",\r\n  \"nospamthanks.info\",\r\n  \"notmailinator.com\",\r\n  \"notsharingmy.info\",\r\n  \"nowhere.org\",\r\n  \"nowmymail.com\",\r\n  \"ntlhelp.net\",\r\n  \"nurfuerspam.de\",\r\n  \"nus.edu.sg\",\r\n  \"nwldx.com\",\r\n  \"objectmail.com\",\r\n  \"obobbo.com\",\r\n  \"odaymail.com\",\r\n  \"one-time.email\",\r\n  \"oneoffemail.com\",\r\n  \"oneoffmail.com\",\r\n  \"onewaymail.com\",\r\n  \"online.ms\",\r\n  \"oopi.org\",\r\n  \"opayq.com\",\r\n  \"ordinaryamerican.net\",\r\n  \"otherinbox.com\",\r\n  \"ourklips.com\",\r\n  \"outlawspam.com\",\r\n  \"ovpn.to\",\r\n  \"owlpic.com\",\r\n  \"pancakemail.com\",\r\n  \"paplease.com\",\r\n  \"pcusers.otherinbox.com\",\r\n  \"pepbot.com\",\r\n  \"pfui.ru\",\r\n  \"pimpedupmyspace.com\",\r\n  \"pjjkp.com\",\r\n  \"plexolan.de\",\r\n  \"poczta.onet.pl\",\r\n  \"politikerclub.de\",\r\n  \"poofy.org\",\r\n  \"pookmail.com\",\r\n  \"postacin.com\",\r\n  \"privacy.net\",\r\n  \"privy-mail.com\",\r\n  \"privymail.de\",\r\n  \"proxymail.eu\",\r\n  \"prtnx.com\",\r\n  \"prtz.eu\",\r\n  \"punkass.com\",\r\n  \"putthisinyourspamdatabase.com\",\r\n  \"pwrby.com\",\r\n  \"qasti.com\",\r\n  \"qisdo.com\",\r\n  \"qisoa.com\",\r\n  \"quickinbox.com\",\r\n  \"quickmail.nl\",\r\n  \"radiku.ye.vc\",\r\n  \"rcpt.at\",\r\n  \"reallymymail.com\",\r\n  \"receiveee.chickenkiller.com\",\r\n  \"receiveee.com\",\r\n  \"recode.me\",\r\n  \"reconmail.com\",\r\n  \"recursor.net\",\r\n  \"recyclemail.dk\",\r\n  \"regbypass.com\",\r\n  \"regbypass.comsafe-mail.net\",\r\n  \"rejectmail.com\",\r\n  \"remail.cf\",\r\n  \"remail.ga\",\r\n  \"rhyta.com\",\r\n  \"rk9.chickenkiller.com\",\r\n  \"rklips.com\",\r\n  \"rmqkr.net\",\r\n  \"royal.net\",\r\n  \"rppkn.com\",\r\n  \"rtrtr.com\",\r\n  \"ruffrey.com\",\r\n  \"s0ny.net\",\r\n  \"safe-mail.net\",\r\n  \"safersignup.de\",\r\n  \"safetymail.info\",\r\n  \"safetypost.de\",\r\n  \"sandelf.de\",\r\n  \"saynotospams.com\",\r\n  \"scatmail.com\",\r\n  \"schafmail.de\",\r\n  \"selfdestructingmail.com\",\r\n  \"selfdestructingmail.org\",\r\n  \"sendspamhere.com\",\r\n  \"sendspamhere.com\",\r\n  \"sharedmailbox.org\",\r\n  \"sharklasers.com\",\r\n  \"shieldedmail.com\",\r\n  \"shiftmail.com\",\r\n  \"shitmail.me\",\r\n  \"shitmail.org\",\r\n  \"shitware.nl\",\r\n  \"shortmail.net\",\r\n  \"sibmail.com\",\r\n  \"sinnlos-mail.de\",\r\n  \"siteposter.net\",\r\n  \"skeefmail.com\",\r\n  \"slaskpost.se\",\r\n  \"slave-auctions.net\",\r\n  \"slopsbox.com\",\r\n  \"slushmail.com\",\r\n  \"smashmail.de\",\r\n  \"smellfear.com\",\r\n  \"smellrear.com\",\r\n  \"snakemail.com\",\r\n  \"sneakemail.com\",\r\n  \"snkmail.com\",\r\n  \"sofimail.com\",\r\n  \"sofort-mail.de\",\r\n  \"softpls.asia\",\r\n  \"sogetthis.com\",\r\n  \"sohu.com\",\r\n  \"soisz.com\",\r\n  \"solvemail.info\",\r\n  \"soodomail.com\",\r\n  \"soodonims.com\",\r\n  \"spam-be-gone.com\",\r\n  \"spam.la\",\r\n  \"spam.su\",\r\n  \"spam4.me\",\r\n  \"spamavert.com\",\r\n  \"spambob.com\",\r\n  \"spambob.net\",\r\n  \"spambob.org\",\r\n  \"spambog.com\",\r\n  \"spambog.de\",\r\n  \"spambog.net\",\r\n  \"spambog.ru\",\r\n  \"spambooger.com\",\r\n  \"spambox.info\",\r\n  \"spambox.irishspringrealty.com\",\r\n  \"spambox.us\",\r\n  \"spamcannon.com\",\r\n  \"spamcannon.net\",\r\n  \"spamcero.com\",\r\n  \"spamcon.org\",\r\n  \"spamcorptastic.com\",\r\n  \"spamcowboy.com\",\r\n  \"spamcowboy.net\",\r\n  \"spamcowboy.org\",\r\n  \"spamday.com\",\r\n  \"spamdecoy.net\",\r\n  \"spamex.com\",\r\n  \"spamfighter.cf\",\r\n  \"spamfighter.ga\",\r\n  \"spamfighter.gq\",\r\n  \"spamfighter.ml\",\r\n  \"spamfighter.tk\",\r\n  \"spamfree.eu\",\r\n  \"spamfree24.com\",\r\n  \"spamfree24.de\",\r\n  \"spamfree24.eu\",\r\n  \"spamfree24.info\",\r\n  \"spamfree24.net\",\r\n  \"spamfree24.org\",\r\n  \"spamgoes.in\",\r\n  \"spamgourmet.com\",\r\n  \"spamgourmet.net\",\r\n  \"spamgourmet.org\",\r\n  \"spamherelots.com\",\r\n  \"spamherelots.com\",\r\n  \"spamhereplease.com\",\r\n  \"spamhereplease.com\",\r\n  \"spamhole.com\",\r\n  \"spamify.com\",\r\n  \"spaminator.de\",\r\n  \"spamkill.info\",\r\n  \"spaml.com\",\r\n  \"spaml.de\",\r\n  \"spammotel.com\",\r\n  \"spamobox.com\",\r\n  \"spamoff.de\",\r\n  \"spamsalad.in\",\r\n  \"spamslicer.com\",\r\n  \"spamspot.com\",\r\n  \"spamstack.net\",\r\n  \"spamthis.co.uk\",\r\n  \"spamthisplease.com\",\r\n  \"spamtrail.com\",\r\n  \"spamtroll.net\",\r\n  \"speed.1s.fr\",\r\n  \"spikio.com\",\r\n  \"spoofmail.de\",\r\n  \"squizzy.de\",\r\n  \"ssoia.com\",\r\n  \"startkeys.com\",\r\n  \"stinkefinger.net\",\r\n  \"stop-my-spam.cf\",\r\n  \"stop-my-spam.com\",\r\n  \"stop-my-spam.ga\",\r\n  \"stop-my-spam.ml\",\r\n  \"stop-my-spam.tk\",\r\n  \"streetwisemail.com\",\r\n  \"stuffmail.de\",\r\n  \"supergreatmail.com\",\r\n  \"supermailer.jp\",\r\n  \"superrito.com\",\r\n  \"superstachel.de\",\r\n  \"suremail.info\",\r\n  \"svk.jp\",\r\n  \"sweetxxx.de\",\r\n  \"tafmail.com\",\r\n  \"tagyourself.com\",\r\n  \"talkinator.com\",\r\n  \"tapchicuoihoi.com\",\r\n  \"teewars.org\",\r\n  \"teleworm.com\",\r\n  \"teleworm.us\",\r\n  \"temp.emeraldwebmail.com\",\r\n  \"temp.headstrong.de\",\r\n  \"tempalias.com\",\r\n  \"tempe-mail.com\",\r\n  \"tempemail.biz\",\r\n  \"tempemail.co.za\",\r\n  \"tempemail.com\",\r\n  \"tempemail.net\",\r\n  \"tempemail.net\",\r\n  \"tempinbox.co.uk\",\r\n  \"tempinbox.com\",\r\n  \"tempmail.it\",\r\n  \"tempmail2.com\",\r\n  \"tempmaildemo.com\",\r\n  \"tempmailer.com\",\r\n  \"tempomail.fr\",\r\n  \"temporarily.de\",\r\n  \"temporarioemail.com.br\",\r\n  \"temporaryemail.net\",\r\n  \"temporaryemail.us\",\r\n  \"temporaryforwarding.com\",\r\n  \"temporaryinbox.com\",\r\n  \"tempsky.com\",\r\n  \"tempthe.net\",\r\n  \"tempymail.com\",\r\n  \"thanksnospam.info\",\r\n  \"thankyou2010.com\",\r\n  \"thecloudindex.com\",\r\n  \"thisisnotmyrealemail.com\",\r\n  \"throam.com\",\r\n  \"throwawayemailaddress.com\",\r\n  \"throwawaymail.com\",\r\n  \"tilien.com\",\r\n  \"tittbit.in\",\r\n  \"tmail.ws\",\r\n  \"tmailinator.com\",\r\n  \"toiea.com\",\r\n  \"toomail.biz\",\r\n  \"tradermail.info\",\r\n  \"trash-amil.com\",\r\n  \"trash-mail.at\",\r\n  \"trash-mail.cf\",\r\n  \"trash-mail.com\",\r\n  \"trash-mail.de\",\r\n  \"trash-mail.ga\",\r\n  \"trash-mail.gq\",\r\n  \"trash-mail.ml\",\r\n  \"trash-mail.tk\",\r\n  \"trash2009.com\",\r\n  \"trash2010.com\",\r\n  \"trash2011.com\",\r\n  \"trashdevil.com\",\r\n  \"trashdevil.de\",\r\n  \"trashemail.de\",\r\n  \"trashmail.at\",\r\n  \"trashmail.com\",\r\n  \"trashmail.de\",\r\n  \"trashmail.me\",\r\n  \"trashmail.net\",\r\n  \"trashmail.org\",\r\n  \"trashmail.ws\",\r\n  \"trashmailer.com\",\r\n  \"trashymail.com\",\r\n  \"trashymail.net\",\r\n  \"trayna.com\",\r\n  \"trbvm.com\",\r\n  \"trickmail.net\",\r\n  \"trillianpro.com\",\r\n  \"tryalert.com\",\r\n  \"turual.com\",\r\n  \"twinmail.de\",\r\n  \"twoweirdtricks.com\",\r\n  \"tyldd.com\",\r\n  \"ubismail.net\",\r\n  \"uggsrock.com\",\r\n  \"umail.net\",\r\n  \"unmail.ru\",\r\n  \"upliftnow.com\",\r\n  \"uplipht.com\",\r\n  \"uroid.com\",\r\n  \"username.e4ward.com\",\r\n  \"valemail.net\",\r\n  \"venompen.com\",\r\n  \"veryrealemail.com\",\r\n  \"vidchart.com\",\r\n  \"viditag.com\",\r\n  \"viewcastmedia.com\",\r\n  \"viewcastmedia.net\",\r\n  \"viewcastmedia.org\",\r\n  \"vomoto.com\",\r\n  \"vubby.com\",\r\n  \"walala.org\",\r\n  \"walkmail.net\",\r\n  \"webemail.me\",\r\n  \"webm4il.info\",\r\n  \"webuser.in\",\r\n  \"wee.my\",\r\n  \"weg-werf-email.de\",\r\n  \"wegwerf-email-addressen.de\",\r\n  \"wegwerf-emails.de\",\r\n  \"wegwerfadresse.de\",\r\n  \"wegwerfemail.de\",\r\n  \"wegwerfmail.de\",\r\n  \"wegwerfmail.info\",\r\n  \"wegwerfmail.net\",\r\n  \"wegwerfmail.org\",\r\n  \"wetrainbayarea.com\",\r\n  \"wetrainbayarea.org\",\r\n  \"wh4f.org\",\r\n  \"whatiaas.com\",\r\n  \"whatpaas.com\",\r\n  \"whatsaas.com\",\r\n  \"whopy.com\",\r\n  \"whtjddn.33mail.com\",\r\n  \"whyspam.me\",\r\n  \"wickmail.net\",\r\n  \"wilemail.com\",\r\n  \"willselfdestruct.com\",\r\n  \"winemaven.info\",\r\n  \"wmail.cf\",\r\n  \"wollan.info\",\r\n  \"wronghead.com\",\r\n  \"wuzup.net\",\r\n  \"wuzupmail.net\",\r\n  \"www.e4ward.com\",\r\n  \"www.gishpuppy.com\",\r\n  \"www.mailinator.com\",\r\n  \"wwwnew.eu\",\r\n  \"xagloo.com\",\r\n  \"xemaps.com\",\r\n  \"xents.com\",\r\n  \"xmaily.com\",\r\n  \"xoxox.cc\",\r\n  \"xoxy.net\",\r\n  \"xyzfree.net\",\r\n  \"yapped.net\",\r\n  \"yeah.net\",\r\n  \"yep.it\",\r\n  \"yert.ye.vc\",\r\n  \"yogamaven.com\",\r\n  \"yomail.info\",\r\n  \"yopmail.com\",\r\n  \"yopmail.fr\",\r\n  \"yopmail.gq\",\r\n  \"yopmail.net\",\r\n  \"youmail.ga\",\r\n  \"ypmail.webarnak.fr.eu.org\",\r\n  \"yuurok.com\",\r\n  \"za.com\",\r\n  \"zehnminutenmail.de\",\r\n  \"zetmail.com\",\r\n  \"zippymail.info\",\r\n  \"zoaxe.com\",\r\n  \"zoemail.com\",\r\n  \"zoemail.net\",\r\n  \"zoemail.org\",\r\n  \"zomg.info\",\r\n  \"zxcv.com\",\r\n  \"zxcvbnm.com\",\r\n  \"zzz.com\",\r\n]\r\n","// @flow\r\nimport { blackList } from './blackList'\r\n\r\nconst EMAIL_REGEXP = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n\r\nexport const isValidEmail = email => {\r\n  if (!email) {\r\n    return false\r\n  }\r\n  if (!EMAIL_REGEXP.test(email)) {\r\n    return false\r\n  }\r\n\r\n  const matches = email.match(/[^@]+$/)\r\n  if (!matches || !matches[0]) {\r\n    return false\r\n  }\r\n  const domain = matches[0] || null\r\n  if (!domain) {\r\n    return false\r\n  }\r\n\r\n  if (blackList.indexOf(domain) !== -1) {\r\n    return false\r\n  }\r\n\r\n  return true\r\n}\r\n","// if you uncomment a country here in order to enable it\r\n// please verify that the corresponding flag svg exists (/flags/${country.toLowerCase()}.svg)\r\nexport const countryCodes = [\r\n  {\r\n    name: 'Afghanistan',\r\n    dial_code: '+93',\r\n    code: 'AF',\r\n  },\r\n  {\r\n    name: 'Aland Islands',\r\n    dial_code: '+358',\r\n    code: 'AX',\r\n  },\r\n  {\r\n    name: 'Albania',\r\n    dial_code: '+355',\r\n    code: 'AL',\r\n  },\r\n  {\r\n    name: 'Algeria',\r\n    dial_code: '+213',\r\n    code: 'DZ',\r\n  },\r\n  {\r\n    name: 'AmericanSamoa',\r\n    dial_code: '+1684',\r\n    code: 'AS',\r\n  },\r\n  {\r\n    name: 'Andorra',\r\n    dial_code: '+376',\r\n    code: 'AD',\r\n  },\r\n  {\r\n    name: 'Angola',\r\n    dial_code: '+244',\r\n    code: 'AO',\r\n  },\r\n  {\r\n    name: 'Anguilla',\r\n    dial_code: '+1264',\r\n    code: 'AI',\r\n  },\r\n  {\r\n    name: 'Antarctica',\r\n    dial_code: '+672',\r\n    code: 'AQ',\r\n  },\r\n  {\r\n    name: 'Antigua and Barbuda',\r\n    dial_code: '+1268',\r\n    code: 'AG',\r\n  },\r\n  {\r\n    name: 'Argentina',\r\n    dial_code: '+54',\r\n    code: 'AR',\r\n  },\r\n  {\r\n    name: 'Armenia',\r\n    dial_code: '+374',\r\n    code: 'AM',\r\n  },\r\n  {\r\n    name: 'Aruba',\r\n    dial_code: '+297',\r\n    code: 'AW',\r\n  },\r\n  {\r\n    name: 'Australia',\r\n    dial_code: '+61',\r\n    code: 'AU',\r\n  },\r\n  {\r\n    name: 'Austria',\r\n    dial_code: '+43',\r\n    code: 'AT',\r\n  },\r\n  {\r\n    name: 'Azerbaijan',\r\n    dial_code: '+994',\r\n    code: 'AZ',\r\n  },\r\n  {\r\n    name: 'Bahamas',\r\n    dial_code: '+1242',\r\n    code: 'BS',\r\n  },\r\n  {\r\n    name: 'Bahrain',\r\n    dial_code: '+973',\r\n    code: 'BH',\r\n  },\r\n  {\r\n    name: 'Bangladesh',\r\n    dial_code: '+880',\r\n    code: 'BD',\r\n  },\r\n  {\r\n    name: 'Barbados',\r\n    dial_code: '+1246',\r\n    code: 'BB',\r\n  },\r\n  {\r\n    name: 'Belarus',\r\n    dial_code: '+375',\r\n    code: 'BY',\r\n  },\r\n  {\r\n    name: 'Belgium',\r\n    dial_code: '+32',\r\n    code: 'BE',\r\n  },\r\n  {\r\n    name: 'Belize',\r\n    dial_code: '+501',\r\n    code: 'BZ',\r\n  },\r\n  {\r\n    name: 'Benin',\r\n    dial_code: '+229',\r\n    code: 'BJ',\r\n  },\r\n  {\r\n    name: 'Bermuda',\r\n    dial_code: '+1441',\r\n    code: 'BM',\r\n  },\r\n  {\r\n    name: 'Bhutan',\r\n    dial_code: '+975',\r\n    code: 'BT',\r\n  },\r\n  {\r\n    name: 'Bolivia, Plurinational State of bolivia',\r\n    dial_code: '+591',\r\n    code: 'BO',\r\n  },\r\n  {\r\n    name: 'Bosnia and Herzegovina',\r\n    dial_code: '+387',\r\n    code: 'BA',\r\n  },\r\n  {\r\n    name: 'Botswana',\r\n    dial_code: '+267',\r\n    code: 'BW',\r\n  },\r\n  {\r\n    name: 'Brazil',\r\n    dial_code: '+55',\r\n    code: 'BR',\r\n  },\r\n  {\r\n    name: 'British Indian Ocean Territory',\r\n    dial_code: '+246',\r\n    code: 'IO',\r\n  },\r\n  {\r\n    name: 'Brunei Darussalam',\r\n    dial_code: '+673',\r\n    code: 'BN',\r\n  },\r\n  {\r\n    name: 'Bulgaria',\r\n    dial_code: '+359',\r\n    code: 'BG',\r\n  },\r\n  {\r\n    name: 'Burkina Faso',\r\n    dial_code: '+226',\r\n    code: 'BF',\r\n  },\r\n  {\r\n    name: 'Burundi',\r\n    dial_code: '+257',\r\n    code: 'BI',\r\n  },\r\n  {\r\n    name: 'Cambodia',\r\n    dial_code: '+855',\r\n    code: 'KH',\r\n  },\r\n  {\r\n    name: 'Cameroon',\r\n    dial_code: '+237',\r\n    code: 'CM',\r\n  },\r\n  {\r\n    name: 'Canada',\r\n    dial_code: '+1',\r\n    code: 'CA',\r\n  },\r\n  {\r\n    name: 'Cape Verde',\r\n    dial_code: '+238',\r\n    code: 'CV',\r\n  },\r\n  {\r\n    name: 'Cayman Islands',\r\n    dial_code: '+1345',\r\n    code: 'KY',\r\n  },\r\n  {\r\n    name: 'Central African Republic',\r\n    dial_code: '+236',\r\n    code: 'CF',\r\n  },\r\n  {\r\n    name: 'Chad',\r\n    dial_code: '+235',\r\n    code: 'TD',\r\n  },\r\n  {\r\n    name: 'Chile',\r\n    dial_code: '+56',\r\n    code: 'CL',\r\n  },\r\n  {\r\n    name: 'China',\r\n    dial_code: '+86',\r\n    code: 'CN',\r\n  },\r\n  {\r\n    name: 'Christmas Island',\r\n    dial_code: '+61',\r\n    code: 'CX',\r\n  },\r\n  {\r\n    name: 'Cocos (Keeling) Islands',\r\n    dial_code: '+61',\r\n    code: 'CC',\r\n  },\r\n  {\r\n    name: 'Colombia',\r\n    dial_code: '+57',\r\n    code: 'CO',\r\n  },\r\n  {\r\n    name: 'Comoros',\r\n    dial_code: '+269',\r\n    code: 'KM',\r\n  },\r\n  {\r\n    name: 'Congo',\r\n    dial_code: '+242',\r\n    code: 'CG',\r\n  },\r\n  {\r\n    name: 'Congo, The Democratic Republic of the Congo',\r\n    dial_code: '+243',\r\n    code: 'CD',\r\n  },\r\n  {\r\n    name: 'Cook Islands',\r\n    dial_code: '+682',\r\n    code: 'CK',\r\n  },\r\n  {\r\n    name: 'Costa Rica',\r\n    dial_code: '+506',\r\n    code: 'CR',\r\n  },\r\n  {\r\n    name: \"Cote d'Ivoire\",\r\n    dial_code: '+225',\r\n    code: 'CI',\r\n  },\r\n  {\r\n    name: 'Croatia',\r\n    dial_code: '+385',\r\n    code: 'HR',\r\n  },\r\n  {\r\n    name: 'Cuba',\r\n    dial_code: '+53',\r\n    code: 'CU',\r\n  },\r\n  {\r\n    name: 'Cyprus',\r\n    dial_code: '+357',\r\n    code: 'CY',\r\n  },\r\n  {\r\n    name: 'Czech Republic',\r\n    dial_code: '+420',\r\n    code: 'CZ',\r\n  },\r\n  {\r\n    name: 'Denmark',\r\n    dial_code: '+45',\r\n    code: 'DK',\r\n  },\r\n  {\r\n    name: 'Djibouti',\r\n    dial_code: '+253',\r\n    code: 'DJ',\r\n  },\r\n  {\r\n    name: 'Dominica',\r\n    dial_code: '+1767',\r\n    code: 'DM',\r\n  },\r\n  {\r\n    name: 'Dominican Republic',\r\n    dial_code: '+1849',\r\n    code: 'DO',\r\n  },\r\n  {\r\n    name: 'Ecuador',\r\n    dial_code: '+593',\r\n    code: 'EC',\r\n  },\r\n  {\r\n    name: 'Egypt',\r\n    dial_code: '+20',\r\n    code: 'EG',\r\n  },\r\n  {\r\n    name: 'El Salvador',\r\n    dial_code: '+503',\r\n    code: 'SV',\r\n  },\r\n  {\r\n    name: 'Equatorial Guinea',\r\n    dial_code: '+240',\r\n    code: 'GQ',\r\n  },\r\n  {\r\n    name: 'Eritrea',\r\n    dial_code: '+291',\r\n    code: 'ER',\r\n  },\r\n  {\r\n    name: 'Estonia',\r\n    dial_code: '+372',\r\n    code: 'EE',\r\n  },\r\n  {\r\n    name: 'Ethiopia',\r\n    dial_code: '+251',\r\n    code: 'ET',\r\n  },\r\n  {\r\n    name: 'Falkland Islands (Malvinas)',\r\n    dial_code: '+500',\r\n    code: 'FK',\r\n  },\r\n  {\r\n    name: 'Faroe Islands',\r\n    dial_code: '+298',\r\n    code: 'FO',\r\n  },\r\n  {\r\n    name: 'Fiji',\r\n    dial_code: '+679',\r\n    code: 'FJ',\r\n  },\r\n  {\r\n    name: 'Finland',\r\n    dial_code: '+358',\r\n    code: 'FI',\r\n  },\r\n  {\r\n    name: 'France',\r\n    dial_code: '+33',\r\n    code: 'FR',\r\n  },\r\n  {\r\n    name: 'French Guiana',\r\n    dial_code: '+594',\r\n    code: 'GF',\r\n  },\r\n  {\r\n    name: 'French Polynesia',\r\n    dial_code: '+689',\r\n    code: 'PF',\r\n  },\r\n  {\r\n    name: 'Gabon',\r\n    dial_code: '+241',\r\n    code: 'GA',\r\n  },\r\n  {\r\n    name: 'Gambia',\r\n    dial_code: '+220',\r\n    code: 'GM',\r\n  },\r\n  {\r\n    name: 'Georgia',\r\n    dial_code: '+995',\r\n    code: 'GE',\r\n  },\r\n  {\r\n    name: 'Germany',\r\n    dial_code: '+49',\r\n    code: 'DE',\r\n  },\r\n  {\r\n    name: 'Ghana',\r\n    dial_code: '+233',\r\n    code: 'GH',\r\n  },\r\n  {\r\n    name: 'Gibraltar',\r\n    dial_code: '+350',\r\n    code: 'GI',\r\n  },\r\n  {\r\n    name: 'Greece',\r\n    dial_code: '+30',\r\n    code: 'GR',\r\n  },\r\n  {\r\n    name: 'Greenland',\r\n    dial_code: '+299',\r\n    code: 'GL',\r\n  },\r\n  {\r\n    name: 'Grenada',\r\n    dial_code: '+1473',\r\n    code: 'GD',\r\n  },\r\n  {\r\n    name: 'Guadeloupe',\r\n    dial_code: '+590',\r\n    code: 'GP',\r\n  },\r\n  {\r\n    name: 'Guam',\r\n    dial_code: '+1671',\r\n    code: 'GU',\r\n  },\r\n  {\r\n    name: 'Guatemala',\r\n    dial_code: '+502',\r\n    code: 'GT',\r\n  },\r\n  {\r\n    name: 'Guernsey',\r\n    dial_code: '+44',\r\n    code: 'GG',\r\n  },\r\n  {\r\n    name: 'Guinea',\r\n    dial_code: '+224',\r\n    code: 'GN',\r\n  },\r\n  {\r\n    name: 'Guinea-Bissau',\r\n    dial_code: '+245',\r\n    code: 'GW',\r\n  },\r\n  {\r\n    name: 'Guyana',\r\n    dial_code: '+592',\r\n    code: 'GY',\r\n  },\r\n  {\r\n    name: 'Haiti',\r\n    dial_code: '+509',\r\n    code: 'HT',\r\n  },\r\n  {\r\n    name: 'Holy See (Vatican City State)',\r\n    dial_code: '+379',\r\n    code: 'VA',\r\n  },\r\n  {\r\n    name: 'Honduras',\r\n    dial_code: '+504',\r\n    code: 'HN',\r\n  },\r\n  {\r\n    name: 'Hong Kong',\r\n    dial_code: '+852',\r\n    code: 'HK',\r\n  },\r\n  {\r\n    name: 'Hungary',\r\n    dial_code: '+36',\r\n    code: 'HU',\r\n  },\r\n  {\r\n    name: 'Iceland',\r\n    dial_code: '+354',\r\n    code: 'IS',\r\n  },\r\n  {\r\n    name: 'India',\r\n    dial_code: '+91',\r\n    code: 'IN',\r\n  },\r\n  {\r\n    name: 'Indonesia',\r\n    dial_code: '+62',\r\n    code: 'ID',\r\n  },\r\n  {\r\n    name: 'Iran, Islamic Republic of Persian Gulf',\r\n    dial_code: '+98',\r\n    code: 'IR',\r\n  },\r\n  {\r\n    name: 'Iraq',\r\n    dial_code: '+964',\r\n    code: 'IQ',\r\n  },\r\n  {\r\n    name: 'Ireland',\r\n    dial_code: '+353',\r\n    code: 'IE',\r\n  },\r\n  {\r\n    name: 'Isle of Man',\r\n    dial_code: '+44',\r\n    code: 'IM',\r\n  },\r\n  {\r\n    name: 'Israel',\r\n    dial_code: '+972',\r\n    code: 'IL',\r\n  },\r\n  {\r\n    name: 'Italy',\r\n    dial_code: '+39',\r\n    code: 'IT',\r\n  },\r\n  {\r\n    name: 'Jamaica',\r\n    dial_code: '+1876',\r\n    code: 'JM',\r\n  },\r\n  {\r\n    name: 'Japan',\r\n    dial_code: '+81',\r\n    code: 'JP',\r\n  },\r\n  {\r\n    name: 'Jersey',\r\n    dial_code: '+44',\r\n    code: 'JE',\r\n  },\r\n  {\r\n    name: 'Jordan',\r\n    dial_code: '+962',\r\n    code: 'JO',\r\n  },\r\n  {\r\n    name: 'Kazakhstan',\r\n    dial_code: '+7',\r\n    code: 'KZ',\r\n  },\r\n  {\r\n    name: 'Kenya',\r\n    dial_code: '+254',\r\n    code: 'KE',\r\n  },\r\n  {\r\n    name: 'Kiribati',\r\n    dial_code: '+686',\r\n    code: 'KI',\r\n  },\r\n  {\r\n    name: \"Korea, Democratic People's Republic of Korea\",\r\n    dial_code: '+850',\r\n    code: 'KP',\r\n  },\r\n  {\r\n    name: 'Korea, Republic of South Korea',\r\n    dial_code: '+82',\r\n    code: 'KR',\r\n  },\r\n  {\r\n    name: 'Kuwait',\r\n    dial_code: '+965',\r\n    code: 'KW',\r\n  },\r\n  {\r\n    name: 'Kyrgyzstan',\r\n    dial_code: '+996',\r\n    code: 'KG',\r\n  },\r\n  {\r\n    name: 'Laos',\r\n    dial_code: '+856',\r\n    code: 'LA',\r\n  },\r\n  {\r\n    name: 'Latvia',\r\n    dial_code: '+371',\r\n    code: 'LV',\r\n  },\r\n  {\r\n    name: 'Lebanon',\r\n    dial_code: '+961',\r\n    code: 'LB',\r\n  },\r\n  {\r\n    name: 'Lesotho',\r\n    dial_code: '+266',\r\n    code: 'LS',\r\n  },\r\n  {\r\n    name: 'Liberia',\r\n    dial_code: '+231',\r\n    code: 'LR',\r\n  },\r\n  {\r\n    name: 'Libyan Arab Jamahiriya',\r\n    dial_code: '+218',\r\n    code: 'LY',\r\n  },\r\n  {\r\n    name: 'Liechtenstein',\r\n    dial_code: '+423',\r\n    code: 'LI',\r\n  },\r\n  {\r\n    name: 'Lithuania',\r\n    dial_code: '+370',\r\n    code: 'LT',\r\n  },\r\n  {\r\n    name: 'Luxembourg',\r\n    dial_code: '+352',\r\n    code: 'LU',\r\n  },\r\n  {\r\n    name: 'Macao',\r\n    dial_code: '+853',\r\n    code: 'MO',\r\n  },\r\n  {\r\n    name: 'Macedonia',\r\n    dial_code: '+389',\r\n    code: 'MK',\r\n  },\r\n  {\r\n    name: 'Madagascar',\r\n    dial_code: '+261',\r\n    code: 'MG',\r\n  },\r\n  {\r\n    name: 'Malawi',\r\n    dial_code: '+265',\r\n    code: 'MW',\r\n  },\r\n  {\r\n    name: 'Malaysia',\r\n    dial_code: '+60',\r\n    code: 'MY',\r\n  },\r\n  {\r\n    name: 'Maldives',\r\n    dial_code: '+960',\r\n    code: 'MV',\r\n  },\r\n  {\r\n    name: 'Mali',\r\n    dial_code: '+223',\r\n    code: 'ML',\r\n  },\r\n  {\r\n    name: 'Malta',\r\n    dial_code: '+356',\r\n    code: 'MT',\r\n  },\r\n  {\r\n    name: 'Marshall Islands',\r\n    dial_code: '+692',\r\n    code: 'MH',\r\n  },\r\n  {\r\n    name: 'Martinique',\r\n    dial_code: '+596',\r\n    code: 'MQ',\r\n  },\r\n  {\r\n    name: 'Mauritania',\r\n    dial_code: '+222',\r\n    code: 'MR',\r\n  },\r\n  {\r\n    name: 'Mauritius',\r\n    dial_code: '+230',\r\n    code: 'MU',\r\n  },\r\n  {\r\n    name: 'Mayotte',\r\n    dial_code: '+262',\r\n    code: 'YT',\r\n  },\r\n  {\r\n    name: 'Mexico',\r\n    dial_code: '+52',\r\n    code: 'MX',\r\n  },\r\n  {\r\n    name: 'Micronesia, Federated States of Micronesia',\r\n    dial_code: '+691',\r\n    code: 'FM',\r\n  },\r\n  {\r\n    name: 'Moldova',\r\n    dial_code: '+373',\r\n    code: 'MD',\r\n  },\r\n  {\r\n    name: 'Monaco',\r\n    dial_code: '+377',\r\n    code: 'MC',\r\n  },\r\n  {\r\n    name: 'Mongolia',\r\n    dial_code: '+976',\r\n    code: 'MN',\r\n  },\r\n  {\r\n    name: 'Montenegro',\r\n    dial_code: '+382',\r\n    code: 'ME',\r\n  },\r\n  {\r\n    name: 'Montserrat',\r\n    dial_code: '+1664',\r\n    code: 'MS',\r\n  },\r\n  {\r\n    name: 'Morocco',\r\n    dial_code: '+212',\r\n    code: 'MA',\r\n  },\r\n  {\r\n    name: 'Mozambique',\r\n    dial_code: '+258',\r\n    code: 'MZ',\r\n  },\r\n  {\r\n    name: 'Myanmar',\r\n    dial_code: '+95',\r\n    code: 'MM',\r\n  },\r\n  {\r\n    name: 'Namibia',\r\n    dial_code: '+264',\r\n    code: 'NA',\r\n  },\r\n  {\r\n    name: 'Nauru',\r\n    dial_code: '+674',\r\n    code: 'NR',\r\n  },\r\n  {\r\n    name: 'Nepal',\r\n    dial_code: '+977',\r\n    code: 'NP',\r\n  },\r\n  {\r\n    name: 'Netherlands',\r\n    dial_code: '+31',\r\n    code: 'NL',\r\n  },\r\n  {\r\n    name: 'New Caledonia',\r\n    dial_code: '+687',\r\n    code: 'NC',\r\n  },\r\n  {\r\n    name: 'New Zealand',\r\n    dial_code: '+64',\r\n    code: 'NZ',\r\n  },\r\n  {\r\n    name: 'Nicaragua',\r\n    dial_code: '+505',\r\n    code: 'NI',\r\n  },\r\n  {\r\n    name: 'Niger',\r\n    dial_code: '+227',\r\n    code: 'NE',\r\n  },\r\n  {\r\n    name: 'Nigeria',\r\n    dial_code: '+234',\r\n    code: 'NG',\r\n  },\r\n  {\r\n    name: 'Niue',\r\n    dial_code: '+683',\r\n    code: 'NU',\r\n  },\r\n  {\r\n    name: 'Norfolk Island',\r\n    dial_code: '+672',\r\n    code: 'NF',\r\n  },\r\n  {\r\n    name: 'Northern Mariana Islands',\r\n    dial_code: '+1670',\r\n    code: 'MP',\r\n  },\r\n  {\r\n    name: 'Norway',\r\n    dial_code: '+47',\r\n    code: 'NO',\r\n  },\r\n  {\r\n    name: 'Oman',\r\n    dial_code: '+968',\r\n    code: 'OM',\r\n  },\r\n  {\r\n    name: 'Pakistan',\r\n    dial_code: '+92',\r\n    code: 'PK',\r\n  },\r\n  {\r\n    name: 'Palau',\r\n    dial_code: '+680',\r\n    code: 'PW',\r\n  },\r\n  {\r\n    name: 'Palestinian Territory, Occupied',\r\n    dial_code: '+970',\r\n    code: 'PS',\r\n  },\r\n  {\r\n    name: 'Panama',\r\n    dial_code: '+507',\r\n    code: 'PA',\r\n  },\r\n  {\r\n    name: 'Papua New Guinea',\r\n    dial_code: '+675',\r\n    code: 'PG',\r\n  },\r\n  {\r\n    name: 'Paraguay',\r\n    dial_code: '+595',\r\n    code: 'PY',\r\n  },\r\n  {\r\n    name: 'Peru',\r\n    dial_code: '+51',\r\n    code: 'PE',\r\n  },\r\n  {\r\n    name: 'Philippines',\r\n    dial_code: '+63',\r\n    code: 'PH',\r\n  },\r\n  {\r\n    name: 'Pitcairn',\r\n    dial_code: '+64',\r\n    code: 'PN',\r\n  },\r\n  {\r\n    name: 'Poland',\r\n    dial_code: '+48',\r\n    code: 'PL',\r\n  },\r\n  {\r\n    name: 'Portugal',\r\n    dial_code: '+351',\r\n    code: 'PT',\r\n  },\r\n  {\r\n    name: 'Puerto Rico',\r\n    dial_code: '+1',\r\n    code: 'PR',\r\n  },\r\n  {\r\n    name: 'Qatar',\r\n    dial_code: '+974',\r\n    code: 'QA',\r\n  },\r\n  {\r\n    name: 'Romania',\r\n    dial_code: '+40',\r\n    code: 'RO',\r\n  },\r\n  {\r\n    name: 'Russia',\r\n    dial_code: '+7',\r\n    code: 'RU',\r\n  },\r\n  {\r\n    name: 'Rwanda',\r\n    dial_code: '+250',\r\n    code: 'RW',\r\n  },\r\n  {\r\n    name: 'Reunion',\r\n    dial_code: '+262',\r\n    code: 'RE',\r\n  },\r\n  {\r\n    name: 'Saint Barthelemy',\r\n    dial_code: '+590',\r\n    code: 'BL',\r\n  },\r\n  {\r\n    name: 'Saint Helena, Ascension and Tristan Da Cunha',\r\n    dial_code: '+290',\r\n    code: 'SH',\r\n  },\r\n  {\r\n    name: 'Saint Kitts and Nevis',\r\n    dial_code: '+1869',\r\n    code: 'KN',\r\n  },\r\n  {\r\n    name: 'Saint Lucia',\r\n    dial_code: '+1758',\r\n    code: 'LC',\r\n  },\r\n  {\r\n    name: 'Saint Martin',\r\n    dial_code: '+590',\r\n    code: 'MF',\r\n  },\r\n  {\r\n    name: 'Saint Pierre and Miquelon',\r\n    dial_code: '+508',\r\n    code: 'PM',\r\n  },\r\n  {\r\n    name: 'Saint Vincent and the Grenadines',\r\n    dial_code: '+1784',\r\n    code: 'VC',\r\n  },\r\n  {\r\n    name: 'Samoa',\r\n    dial_code: '+685',\r\n    code: 'WS',\r\n  },\r\n  {\r\n    name: 'San Marino',\r\n    dial_code: '+378',\r\n    code: 'SM',\r\n  },\r\n  {\r\n    name: 'Sao Tome and Principe',\r\n    dial_code: '+239',\r\n    code: 'ST',\r\n  },\r\n  {\r\n    name: 'Saudi Arabia',\r\n    dial_code: '+966',\r\n    code: 'SA',\r\n  },\r\n  {\r\n    name: 'Senegal',\r\n    dial_code: '+221',\r\n    code: 'SN',\r\n  },\r\n  {\r\n    name: 'Serbia',\r\n    dial_code: '+381',\r\n    code: 'RS',\r\n  },\r\n  {\r\n    name: 'Seychelles',\r\n    dial_code: '+248',\r\n    code: 'SC',\r\n  },\r\n  {\r\n    name: 'Sierra Leone',\r\n    dial_code: '+232',\r\n    code: 'SL',\r\n  },\r\n  {\r\n    name: 'Singapore',\r\n    dial_code: '+65',\r\n    code: 'SG',\r\n  },\r\n  {\r\n    name: 'Slovakia',\r\n    dial_code: '+421',\r\n    code: 'SK',\r\n  },\r\n  {\r\n    name: 'Slovenia',\r\n    dial_code: '+386',\r\n    code: 'SI',\r\n  },\r\n  {\r\n    name: 'Solomon Islands',\r\n    dial_code: '+677',\r\n    code: 'SB',\r\n  },\r\n  {\r\n    name: 'Somalia',\r\n    dial_code: '+252',\r\n    code: 'SO',\r\n  },\r\n  {\r\n    name: 'South Africa',\r\n    dial_code: '+27',\r\n    code: 'ZA',\r\n  },\r\n  {\r\n    name: 'South Sudan',\r\n    dial_code: '+211',\r\n    code: 'SS',\r\n  },\r\n  {\r\n    name: 'South Georgia and the South Sandwich Islands',\r\n    dial_code: '+500',\r\n    code: 'GS',\r\n  },\r\n  {\r\n    name: 'Spain',\r\n    dial_code: '+34',\r\n    code: 'ES',\r\n  },\r\n  {\r\n    name: 'Sri Lanka',\r\n    dial_code: '+94',\r\n    code: 'LK',\r\n  },\r\n  {\r\n    name: 'Sudan',\r\n    dial_code: '+249',\r\n    code: 'SD',\r\n  },\r\n  {\r\n    name: 'Suriname',\r\n    dial_code: '+597',\r\n    code: 'SR',\r\n  },\r\n  {\r\n    name: 'Svalbard and Jan Mayen',\r\n    dial_code: '+47',\r\n    code: 'SJ',\r\n  },\r\n  {\r\n    name: 'Swaziland',\r\n    dial_code: '+268',\r\n    code: 'SZ',\r\n  },\r\n  {\r\n    name: 'Sweden',\r\n    dial_code: '+46',\r\n    code: 'SE',\r\n  },\r\n  {\r\n    name: 'Switzerland',\r\n    dial_code: '+41',\r\n    code: 'CH',\r\n  },\r\n  {\r\n    name: 'Syrian Arab Republic',\r\n    dial_code: '+963',\r\n    code: 'SY',\r\n  },\r\n  {\r\n    name: 'Taiwan',\r\n    dial_code: '+886',\r\n    code: 'TW',\r\n  },\r\n  {\r\n    name: 'Tajikistan',\r\n    dial_code: '+992',\r\n    code: 'TJ',\r\n  },\r\n  {\r\n    name: 'Tanzania, United Republic of Tanzania',\r\n    dial_code: '+255',\r\n    code: 'TZ',\r\n  },\r\n  {\r\n    name: 'Thailand',\r\n    dial_code: '+66',\r\n    code: 'TH',\r\n  },\r\n  {\r\n    name: 'Timor-Leste',\r\n    dial_code: '+670',\r\n    code: 'TL',\r\n  },\r\n  {\r\n    name: 'Togo',\r\n    dial_code: '+228',\r\n    code: 'TG',\r\n  },\r\n  {\r\n    name: 'Tokelau',\r\n    dial_code: '+690',\r\n    code: 'TK',\r\n  },\r\n  {\r\n    name: 'Tonga',\r\n    dial_code: '+676',\r\n    code: 'TO',\r\n  },\r\n  {\r\n    name: 'Trinidad and Tobago',\r\n    dial_code: '+1868',\r\n    code: 'TT',\r\n  },\r\n  {\r\n    name: 'Tunisia',\r\n    dial_code: '+216',\r\n    code: 'TN',\r\n  },\r\n  {\r\n    name: 'Turkey',\r\n    dial_code: '+90',\r\n    code: 'TR',\r\n  },\r\n  {\r\n    name: 'Turkmenistan',\r\n    dial_code: '+993',\r\n    code: 'TM',\r\n  },\r\n  {\r\n    name: 'Turks and Caicos Islands',\r\n    dial_code: '+1649',\r\n    code: 'TC',\r\n  },\r\n  {\r\n    name: 'Tuvalu',\r\n    dial_code: '+688',\r\n    code: 'TV',\r\n  },\r\n  {\r\n    name: 'Uganda',\r\n    dial_code: '+256',\r\n    code: 'UG',\r\n  },\r\n  {\r\n    name: 'Ukraine',\r\n    dial_code: '+380',\r\n    code: 'UA',\r\n  },\r\n  {\r\n    name: 'United Arab Emirates',\r\n    dial_code: '+971',\r\n    code: 'AE',\r\n  },\r\n  {\r\n    name: 'United Kingdom',\r\n    dial_code: '+44',\r\n    code: 'GB',\r\n  },\r\n  {\r\n    name: 'United States',\r\n    dial_code: '+1',\r\n    code: 'US',\r\n  },\r\n  {\r\n    name: 'Uruguay',\r\n    dial_code: '+598',\r\n    code: 'UY',\r\n  },\r\n  {\r\n    name: 'Uzbekistan',\r\n    dial_code: '+998',\r\n    code: 'UZ',\r\n  },\r\n  {\r\n    name: 'Vanuatu',\r\n    dial_code: '+678',\r\n    code: 'VU',\r\n  },\r\n  {\r\n    name: 'Venezuela, Bolivarian Republic of Venezuela',\r\n    dial_code: '+58',\r\n    code: 'VE',\r\n  },\r\n  {\r\n    name: 'Vietnam',\r\n    dial_code: '+84',\r\n    code: 'VN',\r\n  },\r\n  {\r\n    name: 'Virgin Islands, British',\r\n    dial_code: '+1284',\r\n    code: 'VG',\r\n  },\r\n  {\r\n    name: 'Virgin Islands, U.S.',\r\n    dial_code: '+1340',\r\n    code: 'VI',\r\n  },\r\n  {\r\n    name: 'Wallis and Futuna',\r\n    dial_code: '+681',\r\n    code: 'WF',\r\n  },\r\n  {\r\n    name: 'Yemen',\r\n    dial_code: '+967',\r\n    code: 'YE',\r\n  },\r\n  {\r\n    name: 'Zambia',\r\n    dial_code: '+260',\r\n    code: 'ZM',\r\n  },\r\n  {\r\n    name: 'Zimbabwe',\r\n    dial_code: '+263',\r\n    code: 'ZW',\r\n  },\r\n]\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNull from 'lodash/isNull'\r\nimport isNil from 'lodash/isNil'\r\nimport find from 'lodash/find'\r\nimport startsWith from 'lodash/startsWith'\r\nimport { countryCodes } from '../country/countryCodes'\r\n\r\n// https://github.com/catamphetamine/libphonenumber-js\r\nimport {\r\n  parsePhoneNumberFromString,\r\n  ParseError,\r\n  getCountryCallingCode,\r\n  AsYouType,\r\n} from 'libphonenumber-js'\r\n\r\n// TODO: unit tests\r\n// - null & empty phone numbers\r\n\r\n/**\r\n * Tools to manipulate phone numbers.\r\n * Use https://github.com/seegno/google-libphonenumber, abstract of\r\n * https://github.com/googlei18n/libphonenumber\r\n */\r\nconst MIN_LENGHT_FOR_NUMBER = 3\r\n\r\nexport const formatPhoneNumberAsYouType = (number = null, iso = 'FR') => {\r\n  if (number === null) {\r\n    return null\r\n  }\r\n\r\n  const asYouType = new AsYouType(iso)\r\n\r\n  return {\r\n    input: asYouType.input(number),\r\n    country: asYouType.country,\r\n    number: asYouType.getNumber(),\r\n    nationalNumber: asYouType.getNationalNumber(),\r\n  }\r\n}\r\n\r\nexport const parse = number => {\r\n  try {\r\n    return parsePhoneNumberFromString(number)\r\n  } catch (error) {\r\n    if (error instanceof ParseError) {\r\n      // Not a phone number, non-existent country, etc.\r\n      console.log(error.message)\r\n    } else {\r\n      // throw error\r\n    }\r\n  }\r\n  return null\r\n}\r\n\r\nexport const formatPhoneNumber = (number = null) => {\r\n  if (number === null) {\r\n    return null\r\n  }\r\n\r\n  if (isNull(number) || number.length <= MIN_LENGHT_FOR_NUMBER) {\r\n    return number\r\n  }\r\n\r\n  const phoneNumber = parse(number)\r\n  if (phoneNumber) {\r\n    return phoneNumber.format('INTERNATIONAL')\r\n  }\r\n  return number\r\n}\r\n\r\nexport const isValidPhoneNumber = number => {\r\n  if (isNull(number) || number.length <= MIN_LENGHT_FOR_NUMBER) {\r\n    return false\r\n  }\r\n\r\n  const phoneNumber = parse(number)\r\n  if (phoneNumber) {\r\n    return phoneNumber.isValid()\r\n  }\r\n\r\n  return false\r\n}\r\n\r\n// we don't allow \"+33\" - it's considered as an empty phone number\r\n// to use in combination with isValidPhone to assure a not empty and valid phone number\r\nexport const isPhoneNotEmpty = phoneAsStringWithPrefix =>\r\n  phoneAsStringWithPrefix &&\r\n  getCountryDialCodeFromNumber(phoneAsStringWithPrefix) !== phoneAsStringWithPrefix\r\n\r\n/**\r\n *\r\n * @param number\r\n * @param countryIso\r\n * @returns {*}\r\n */\r\nexport const parseWithIso = (number, countryIso) => {\r\n  const countryCode = getCountryCallingCode(countryIso)\r\n  let parsedPhone = number\r\n\r\n  if (!isEmpty(number)) {\r\n    try {\r\n      parsedPhone = formatPhoneNumber(number)\r\n    } catch (e) {\r\n      // console.log(e)\r\n    }\r\n  }\r\n\r\n  return {\r\n    country_code: countryCode,\r\n    national_number: parsedPhone,\r\n  }\r\n}\r\n\r\nexport const getCountryIndicatorFromNumber = number => {\r\n  if (!isEmpty(number)) {\r\n    try {\r\n      const phoneNumber = parse(number)\r\n      return phoneNumber.countryCallingCode\r\n    } catch (e) {\r\n      console.log(e)\r\n    }\r\n  }\r\n  return null\r\n}\r\n\r\nexport const getCountryIsoForNumber = number => {\r\n  if (!isEmpty(number)) {\r\n    try {\r\n      const phoneNumber = parse(number)\r\n      return phoneNumber.country\r\n    } catch (e) {\r\n      // console.log(e)\r\n    }\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nexport const removeIndicatorOnPhoneNumber = phoneNumber => {\r\n  if (!isEmpty(phoneNumber)) {\r\n    const haveIndicator = phoneNumber.indexOf('+') !== -1\r\n\r\n    if (haveIndicator !== -1) {\r\n      const firstSpaceIndex = phoneNumber.indexOf(' ')\r\n      return phoneNumber.substring(firstSpaceIndex + 1)\r\n    }\r\n  }\r\n\r\n  return phoneNumber\r\n}\r\n\r\n/**\r\n * Inspired by https://github.com/PayMyTable/pmt_AppEngine/blob/develop/ws/src/main/java/com/paymytable/utils/PhoneUtils.java\r\n */\r\nexport const cleanForApi = phoneNumber => {\r\n  if (isNil(phoneNumber)) {\r\n    return ''\r\n  }\r\n  let cleanPhoneNumber = formatPhoneNumber(phoneNumber)\r\n\r\n  // Note: we use lodash/startsWith instead of cleanPhoneNumber.startsWith since IE does not handle\r\n  // it\r\n  // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\r\n\r\n  if (startsWith(cleanPhoneNumber, '+330')) {\r\n    cleanPhoneNumber = cleanPhoneNumber.replace('+330', '+33')\r\n  }\r\n\r\n  if (startsWith(cleanPhoneNumber, '06')) {\r\n    cleanPhoneNumber = cleanPhoneNumber.replace('06', '+336')\r\n  }\r\n\r\n  if (startsWith(cleanPhoneNumber, '07')) {\r\n    cleanPhoneNumber = cleanPhoneNumber.replace('07', '+337')\r\n  }\r\n\r\n  // remove all spaces\r\n  cleanPhoneNumber = cleanPhoneNumber.replace(new RegExp(' ', 'g'), '')\r\n  // remove all hyphen\r\n  cleanPhoneNumber = cleanPhoneNumber.replace(new RegExp('-', 'g'), '')\r\n\r\n  return isValidPhoneNumber(cleanPhoneNumber) ? cleanPhoneNumber : null\r\n}\r\n\r\nexport const getCountryCodes = () => countryCodes\r\n\r\nexport const getCountryFromCountryCode = countryCode => {\r\n  const country = find(getCountryCodes(), c => countryCode === c.code)\r\n  return !isNil(country) ? country : null\r\n}\r\n\r\nexport const getCountryDialCodeFromNumber = number => {\r\n  const country = find(getCountryCodes(), c => number.indexOf(c.dial_code) === 0)\r\n  return !isNil(country) ? country.dial_code : null\r\n}\r\n\r\nexport const getCountryCodeFromNumber = number => {\r\n  const country = find(getCountryCodes(), c => number.indexOf(c.dial_code) === 0)\r\n  return !isNil(country) ? country.code : null\r\n}\r\n\r\nexport const getCountryDialCodeFromCountryCode = countryCode => {\r\n  const country = find(getCountryCodes(), c => countryCode.indexOf(c.code) === 0)\r\n  return !isNil(country) ? country.dial_code : null\r\n}\r\n","//\r\n// Define predicates that can be used to validate forms\r\n//\r\n\r\nimport isString from 'lodash/isString'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport startsWith from 'lodash/startsWith'\r\n\r\nimport moment from 'moment'\r\n\r\nimport { isValidEmail as isValidEmailUtils } from 'pmt-utils/email'\r\nimport {\r\n  getCountryDialCodeFromNumber,\r\n  isValidPhoneNumber,\r\n  isPhoneNotEmpty as isPhoneNotEmptyUtils,\r\n} from 'pmt-utils/phone'\r\n\r\nexport * from './card'\r\nexport * from './locale'\r\n\r\nexport const notEmpty = obj => {\r\n  // working to check an empty string or a number (0 return true)\r\n  // for empty string, send default value to null to not have an error from your form init\r\n  return obj !== null && typeof obj !== 'undefined' && obj !== ''\r\n}\r\n\r\n// check an empty array\r\nexport const arrayNotEmpty = obj => obj !== null && typeof obj !== 'undefined' && obj.length > 0\r\n\r\nexport const isTrue = obj => obj === true\r\n\r\n/**\r\n * Example:\r\n * ```\r\n * [isGreaterThan(5)]\r\n * ```\r\n */\r\nexport const isGreaterThan = (length, orEqual) => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length > length : obj > length\r\n\r\nexport const isGreaterThanInclude = (length, orEqual) => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length >= length : obj >= length\r\n\r\nexport const isLessThan = length => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length > length : obj < length\r\n\r\nexport const isLessThanInclude = length => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length <= length : obj <= length\r\n\r\nexport const isBetween = (min, max) => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length < max && obj.length > min : obj < max && obj > min\r\n\r\nexport const isBetweenInclude = (min, max) => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length <= max && obj.length >= min : obj <= max && obj >= min\r\n\r\nexport const isExpirationDateMonthInFuture = () => (obj, data) =>\r\n  // moment().month() are zero indexed, so January is month 0, that's why\r\n  // it's a strict greater than comparison\r\n  data.expirationDateYear > moment().year() ||\r\n  (data.expirationDateYear === moment().year() && obj > moment().month())\r\n\r\nexport const isValidEmail = email => isValidEmailUtils(email)\r\n\r\nexport const isValidEmailOrEmpty = email => isEmpty(email) || isValidEmail(email)\r\n\r\n// if phone === getCountryCodeFromNumber(phone), then phone is empty so we can return true\r\nexport const isValidPhone = phone =>\r\n  !phone ||\r\n  getCountryDialCodeFromNumber(phone) === phone ||\r\n  (startsWith(phone, getCountryDialCodeFromNumber(phone)) && isValidPhoneNumber(phone))\r\n\r\nexport const isPhoneNotEmpty = phone => isPhoneNotEmptyUtils(phone)\r\n","module.exports = function _isPlaceholder(a) {\n  return a != null &&\n         typeof a === 'object' &&\n         a['@@functional/placeholder'] === true;\n};\n","var _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curry1(fn) {\n  return function f1(a) {\n    if (arguments.length === 0 || _isPlaceholder(a)) {\n      return f1;\n    } else {\n      return fn.apply(this, arguments);\n    }\n  };\n};\n","module.exports = function _identity(x) { return x; };\n","var _curry1 = require('./internal/_curry1');\nvar _identity = require('./internal/_identity');\n\n\n/**\n * A function that does nothing but return the parameter supplied to it. Good\n * as a default or placeholder function.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> a\n * @param {*} x The value to return.\n * @return {*} The input value, `x`.\n * @example\n *\n *      R.identity(1); //=> 1\n *\n *      var obj = {};\n *      R.identity(obj) === obj; //=> true\n * @symb R.identity(a) = a\n */\nmodule.exports = _curry1(_identity);\n","var _curry1 = require('./_curry1');\nvar _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curry2(fn) {\n  return function f2(a, b) {\n    switch (arguments.length) {\n      case 0:\n        return f2;\n      case 1:\n        return _isPlaceholder(a) ? f2\n             : _curry1(function(_b) { return fn(a, _b); });\n      default:\n        return _isPlaceholder(a) && _isPlaceholder(b) ? f2\n             : _isPlaceholder(a) ? _curry1(function(_a) { return fn(_a, b); })\n             : _isPlaceholder(b) ? _curry1(function(_b) { return fn(a, _b); })\n             : fn(a, b);\n    }\n  };\n};\n","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n *      _isArray([]); //=> true\n *      _isArray(null); //=> false\n *      _isArray({}); //=> false\n */\nmodule.exports = Array.isArray || function _isArray(val) {\n  return (val != null &&\n          val.length >= 0 &&\n          Object.prototype.toString.call(val) === '[object Array]');\n};\n","module.exports = function _isTransformer(obj) {\n  return typeof obj['@@transducer/step'] === 'function';\n};\n","var _isArray = require('./_isArray');\nvar _isTransformer = require('./_isTransformer');\n\n\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with one of the given method names, it will\n * execute that function (functor case). Otherwise, if it is a transformer,\n * uses transducer [xf] to return a new transformer (transducer case).\n * Otherwise, it will default to executing [fn].\n *\n * @private\n * @param {Array} methodNames properties to check for a custom implementation\n * @param {Function} xf transducer to initialize if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\nmodule.exports = function _dispatchable(methodNames, xf, fn) {\n  return function() {\n    if (arguments.length === 0) {\n      return fn();\n    }\n    var args = Array.prototype.slice.call(arguments, 0);\n    var obj = args.pop();\n    if (!_isArray(obj)) {\n      var idx = 0;\n      while (idx < methodNames.length) {\n        if (typeof obj[methodNames[idx]] === 'function') {\n          return obj[methodNames[idx]].apply(obj, args);\n        }\n        idx += 1;\n      }\n      if (_isTransformer(obj)) {\n        var transducer = xf.apply(null, args);\n        return transducer(obj);\n      }\n    }\n    return fn.apply(this, arguments);\n  };\n};\n","module.exports = function _map(fn, functor) {\n  var idx = 0;\n  var len = functor.length;\n  var result = Array(len);\n  while (idx < len) {\n    result[idx] = fn(functor[idx]);\n    idx += 1;\n  }\n  return result;\n};\n","module.exports = function _isString(x) {\n  return Object.prototype.toString.call(x) === '[object String]';\n};\n","var _curry1 = require('./_curry1');\nvar _isArray = require('./_isArray');\nvar _isString = require('./_isString');\n\n\n/**\n * Tests whether or not an object is similar to an array.\n *\n * @private\n * @category Type\n * @category List\n * @sig * -> Boolean\n * @param {*} x The object to test.\n * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise.\n * @example\n *\n *      _isArrayLike([]); //=> true\n *      _isArrayLike(true); //=> false\n *      _isArrayLike({}); //=> false\n *      _isArrayLike({length: 10}); //=> false\n *      _isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true\n */\nmodule.exports = _curry1(function isArrayLike(x) {\n  if (_isArray(x)) { return true; }\n  if (!x) { return false; }\n  if (typeof x !== 'object') { return false; }\n  if (_isString(x)) { return false; }\n  if (x.nodeType === 1) { return !!x.length; }\n  if (x.length === 0) { return true; }\n  if (x.length > 0) {\n    return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1);\n  }\n  return false;\n});\n","module.exports = (function() {\n  function XWrap(fn) {\n    this.f = fn;\n  }\n  XWrap.prototype['@@transducer/init'] = function() {\n    throw new Error('init not implemented on XWrap');\n  };\n  XWrap.prototype['@@transducer/result'] = function(acc) { return acc; };\n  XWrap.prototype['@@transducer/step'] = function(acc, x) {\n    return this.f(acc, x);\n  };\n\n  return function _xwrap(fn) { return new XWrap(fn); };\n}());\n","module.exports = function _arity(n, fn) {\n  /* eslint-disable no-unused-vars */\n  switch (n) {\n    case 0: return function() { return fn.apply(this, arguments); };\n    case 1: return function(a0) { return fn.apply(this, arguments); };\n    case 2: return function(a0, a1) { return fn.apply(this, arguments); };\n    case 3: return function(a0, a1, a2) { return fn.apply(this, arguments); };\n    case 4: return function(a0, a1, a2, a3) { return fn.apply(this, arguments); };\n    case 5: return function(a0, a1, a2, a3, a4) { return fn.apply(this, arguments); };\n    case 6: return function(a0, a1, a2, a3, a4, a5) { return fn.apply(this, arguments); };\n    case 7: return function(a0, a1, a2, a3, a4, a5, a6) { return fn.apply(this, arguments); };\n    case 8: return function(a0, a1, a2, a3, a4, a5, a6, a7) { return fn.apply(this, arguments); };\n    case 9: return function(a0, a1, a2, a3, a4, a5, a6, a7, a8) { return fn.apply(this, arguments); };\n    case 10: return function(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) { return fn.apply(this, arguments); };\n    default: throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n  }\n};\n","var _arity = require('./internal/_arity');\nvar _curry2 = require('./internal/_curry2');\n\n\n/**\n * Creates a function that is bound to a context.\n * Note: `R.bind` does not provide the additional argument-binding capabilities of\n * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Function\n * @category Object\n * @sig (* -> *) -> {*} -> (* -> *)\n * @param {Function} fn The function to bind to context\n * @param {Object} thisObj The context to bind `fn` to\n * @return {Function} A function that will execute in the context of `thisObj`.\n * @see R.partial\n * @example\n *\n *      var log = R.bind(console.log, console);\n *      R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}\n *      // logs {a: 2}\n * @symb R.bind(f, o)(a, b) = f.call(o, a, b)\n */\nmodule.exports = _curry2(function bind(fn, thisObj) {\n  return _arity(fn.length, function() {\n    return fn.apply(thisObj, arguments);\n  });\n});\n","var _isArrayLike = require('./_isArrayLike');\nvar _xwrap = require('./_xwrap');\nvar bind = require('../bind');\n\n\nmodule.exports = (function() {\n  function _arrayReduce(xf, acc, list) {\n    var idx = 0;\n    var len = list.length;\n    while (idx < len) {\n      acc = xf['@@transducer/step'](acc, list[idx]);\n      if (acc && acc['@@transducer/reduced']) {\n        acc = acc['@@transducer/value'];\n        break;\n      }\n      idx += 1;\n    }\n    return xf['@@transducer/result'](acc);\n  }\n\n  function _iterableReduce(xf, acc, iter) {\n    var step = iter.next();\n    while (!step.done) {\n      acc = xf['@@transducer/step'](acc, step.value);\n      if (acc && acc['@@transducer/reduced']) {\n        acc = acc['@@transducer/value'];\n        break;\n      }\n      step = iter.next();\n    }\n    return xf['@@transducer/result'](acc);\n  }\n\n  function _methodReduce(xf, acc, obj, methodName) {\n    return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc));\n  }\n\n  var symIterator = (typeof Symbol !== 'undefined') ? Symbol.iterator : '@@iterator';\n  return function _reduce(fn, acc, list) {\n    if (typeof fn === 'function') {\n      fn = _xwrap(fn);\n    }\n    if (_isArrayLike(list)) {\n      return _arrayReduce(fn, acc, list);\n    }\n    if (typeof list['fantasy-land/reduce'] === 'function') {\n      return _methodReduce(fn, acc, list, 'fantasy-land/reduce');\n    }\n    if (list[symIterator] != null) {\n      return _iterableReduce(fn, acc, list[symIterator]());\n    }\n    if (typeof list.next === 'function') {\n      return _iterableReduce(fn, acc, list);\n    }\n    if (typeof list.reduce === 'function') {\n      return _methodReduce(fn, acc, list, 'reduce');\n    }\n\n    throw new TypeError('reduce: list must be array or iterable');\n  };\n}());\n","module.exports = {\n  init: function() {\n    return this.xf['@@transducer/init']();\n  },\n  result: function(result) {\n    return this.xf['@@transducer/result'](result);\n  }\n};\n","var _curry2 = require('./_curry2');\nvar _xfBase = require('./_xfBase');\n\n\nmodule.exports = (function() {\n  function XMap(f, xf) {\n    this.xf = xf;\n    this.f = f;\n  }\n  XMap.prototype['@@transducer/init'] = _xfBase.init;\n  XMap.prototype['@@transducer/result'] = _xfBase.result;\n  XMap.prototype['@@transducer/step'] = function(result, input) {\n    return this.xf['@@transducer/step'](result, this.f(input));\n  };\n\n  return _curry2(function _xmap(f, xf) { return new XMap(f, xf); });\n}());\n","var _arity = require('./_arity');\nvar _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curryN(length, received, fn) {\n  return function() {\n    var combined = [];\n    var argsIdx = 0;\n    var left = length;\n    var combinedIdx = 0;\n    while (combinedIdx < received.length || argsIdx < arguments.length) {\n      var result;\n      if (combinedIdx < received.length &&\n          (!_isPlaceholder(received[combinedIdx]) ||\n           argsIdx >= arguments.length)) {\n        result = received[combinedIdx];\n      } else {\n        result = arguments[argsIdx];\n        argsIdx += 1;\n      }\n      combined[combinedIdx] = result;\n      if (!_isPlaceholder(result)) {\n        left -= 1;\n      }\n      combinedIdx += 1;\n    }\n    return left <= 0 ? fn.apply(this, combined)\n                     : _arity(left, _curryN(length, combined, fn));\n  };\n};\n","var _arity = require('./internal/_arity');\nvar _curry1 = require('./internal/_curry1');\nvar _curry2 = require('./internal/_curry2');\nvar _curryN = require('./internal/_curryN');\n\n\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n *   - `g(1)(2)(3)`\n *   - `g(1)(2, 3)`\n *   - `g(1, 2)(3)`\n *   - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n *   - `g(1, 2, 3)`\n *   - `g(_, 2, 3)(1)`\n *   - `g(_, _, 3)(1)(2)`\n *   - `g(_, _, 3)(1, 2)`\n *   - `g(_, 2)(1)(3)`\n *   - `g(_, 2)(1, 3)`\n *   - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n *      var sumArgs = (...args) => R.sum(args);\n *\n *      var curriedAddFourNumbers = R.curryN(4, sumArgs);\n *      var f = curriedAddFourNumbers(1, 2);\n *      var g = f(3);\n *      g(4); //=> 10\n */\nmodule.exports = _curry2(function curryN(length, fn) {\n  if (length === 1) {\n    return _curry1(fn);\n  }\n  return _arity(length, _curryN(length, [], fn));\n});\n","module.exports = function _has(prop, obj) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n","var _has = require('./_has');\n\n\nmodule.exports = (function() {\n  var toString = Object.prototype.toString;\n  return toString.call(arguments) === '[object Arguments]' ?\n    function _isArguments(x) { return toString.call(x) === '[object Arguments]'; } :\n    function _isArguments(x) { return _has('callee', x); };\n}());\n","var _curry1 = require('./internal/_curry1');\nvar _has = require('./internal/_has');\nvar _isArguments = require('./internal/_isArguments');\n\n\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @see R.keysIn, R.values\n * @example\n *\n *      R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\nmodule.exports = (function() {\n  // cover IE < 9 keys issues\n  var hasEnumBug = !({toString: null}).propertyIsEnumerable('toString');\n  var nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString',\n                            'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n  // Safari bug\n  var hasArgsEnumBug = (function() {\n    'use strict';\n    return arguments.propertyIsEnumerable('length');\n  }());\n\n  var contains = function contains(list, item) {\n    var idx = 0;\n    while (idx < list.length) {\n      if (list[idx] === item) {\n        return true;\n      }\n      idx += 1;\n    }\n    return false;\n  };\n\n  return typeof Object.keys === 'function' && !hasArgsEnumBug ?\n    _curry1(function keys(obj) {\n      return Object(obj) !== obj ? [] : Object.keys(obj);\n    }) :\n    _curry1(function keys(obj) {\n      if (Object(obj) !== obj) {\n        return [];\n      }\n      var prop, nIdx;\n      var ks = [];\n      var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n      for (prop in obj) {\n        if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n          ks[ks.length] = prop;\n        }\n      }\n      if (hasEnumBug) {\n        nIdx = nonEnumerableProps.length - 1;\n        while (nIdx >= 0) {\n          prop = nonEnumerableProps[nIdx];\n          if (_has(prop, obj) && !contains(ks, prop)) {\n            ks[ks.length] = prop;\n          }\n          nIdx -= 1;\n        }\n      }\n      return ks;\n    });\n}());\n","var _curry2 = require('./internal/_curry2');\nvar _dispatchable = require('./internal/_dispatchable');\nvar _map = require('./internal/_map');\nvar _reduce = require('./internal/_reduce');\nvar _xmap = require('./internal/_xmap');\nvar curryN = require('./curryN');\nvar keys = require('./keys');\n\n\n/**\n * Takes a function and\n * a [functor](https://github.com/fantasyland/fantasy-land#functor),\n * applies the function to each of the functor's values, and returns\n * a functor of the same shape.\n *\n * Ramda provides suitable `map` implementations for `Array` and `Object`,\n * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`.\n *\n * Dispatches to the `map` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * Also treats functions as functors and will compose them together.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => (a -> b) -> f a -> f b\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {Array} list The list to be iterated over.\n * @return {Array} The new list.\n * @see R.transduce, R.addIndex\n * @example\n *\n *      var double = x => x * 2;\n *\n *      R.map(double, [1, 2, 3]); //=> [2, 4, 6]\n *\n *      R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}\n * @symb R.map(f, [a, b]) = [f(a), f(b)]\n * @symb R.map(f, { x: a, y: b }) = { x: f(a), y: f(b) }\n * @symb R.map(f, functor_o) = functor_o.map(f)\n */\nmodule.exports = _curry2(_dispatchable(['fantasy-land/map', 'map'], _xmap, function map(fn, functor) {\n  switch (Object.prototype.toString.call(functor)) {\n    case '[object Function]':\n      return curryN(functor.length, function() {\n        return fn.call(this, functor.apply(this, arguments));\n      });\n    case '[object Object]':\n      return _reduce(function(acc, key) {\n        acc[key] = fn(functor[key]);\n        return acc;\n      }, {}, keys(functor));\n    default:\n      return _map(fn, functor);\n  }\n}));\n","var _curry1 = require('./_curry1');\nvar _curry2 = require('./_curry2');\nvar _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curry3(fn) {\n  return function f3(a, b, c) {\n    switch (arguments.length) {\n      case 0:\n        return f3;\n      case 1:\n        return _isPlaceholder(a) ? f3\n             : _curry2(function(_b, _c) { return fn(a, _b, _c); });\n      case 2:\n        return _isPlaceholder(a) && _isPlaceholder(b) ? f3\n             : _isPlaceholder(a) ? _curry2(function(_a, _c) { return fn(_a, b, _c); })\n             : _isPlaceholder(b) ? _curry2(function(_b, _c) { return fn(a, _b, _c); })\n             : _curry1(function(_c) { return fn(a, b, _c); });\n      default:\n        return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3\n             : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function(_a, _b) { return fn(_a, _b, c); })\n             : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function(_a, _c) { return fn(_a, b, _c); })\n             : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function(_b, _c) { return fn(a, _b, _c); })\n             : _isPlaceholder(a) ? _curry1(function(_a) { return fn(_a, b, c); })\n             : _isPlaceholder(b) ? _curry1(function(_b) { return fn(a, _b, c); })\n             : _isPlaceholder(c) ? _curry1(function(_c) { return fn(a, b, _c); })\n             : fn(a, b, c);\n    }\n  };\n};\n","var _curry3 = require('./internal/_curry3');\nvar _reduce = require('./internal/_reduce');\n\n\n/**\n * Returns a single item by iterating through the list, successively calling\n * the iterator function and passing it an accumulator value and the current\n * value from the array, and then passing the result to the next call.\n *\n * The iterator function receives two values: *(acc, value)*. It may use\n * [`R.reduced`](#reduced) to shortcut the iteration.\n *\n * The arguments' order of [`reduceRight`](#reduceRight)'s iterator function\n * is *(value, acc)*.\n *\n * Note: `R.reduce` does not skip deleted or unassigned indices (sparse\n * arrays), unlike the native `Array.prototype.reduce` method. For more details\n * on this behavior, see:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Description\n *\n * Dispatches to the `reduce` method of the third argument, if present. When\n * doing so, it is up to the user to handle the [`R.reduced`](#reduced)\n * shortcuting, as this is not implemented by `reduce`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig ((a, b) -> a) -> a -> [b] -> a\n * @param {Function} fn The iterator function. Receives two values, the accumulator and the\n *        current element from the array.\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.reduced, R.addIndex, R.reduceRight\n * @example\n *\n *      R.reduce(R.subtract, 0, [1, 2, 3, 4]) // => ((((0 - 1) - 2) - 3) - 4) = -10\n *                -               -10\n *               / \\              / \\\n *              -   4           -6   4\n *             / \\              / \\\n *            -   3   ==>     -3   3\n *           / \\              / \\\n *          -   2           -1   2\n *         / \\              / \\\n *        0   1            0   1\n *\n * @symb R.reduce(f, a, [b, c, d]) = f(f(f(a, b), c), d)\n */\nmodule.exports = _curry3(_reduce);\n","var _curry1 = require('./internal/_curry1');\nvar curryN = require('./curryN');\n\n\n/**\n * Returns a curried equivalent of the provided function. The curried function\n * has two unusual capabilities. First, its arguments needn't be provided one\n * at a time. If `f` is a ternary function and `g` is `R.curry(f)`, the\n * following are equivalent:\n *\n *   - `g(1)(2)(3)`\n *   - `g(1)(2, 3)`\n *   - `g(1, 2)(3)`\n *   - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n *   - `g(1, 2, 3)`\n *   - `g(_, 2, 3)(1)`\n *   - `g(_, _, 3)(1)(2)`\n *   - `g(_, _, 3)(1, 2)`\n *   - `g(_, 2)(1)(3)`\n *   - `g(_, 2)(1, 3)`\n *   - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (* -> a) -> (* -> a)\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curryN\n * @example\n *\n *      var addFourNumbers = (a, b, c, d) => a + b + c + d;\n *\n *      var curriedAddFourNumbers = R.curry(addFourNumbers);\n *      var f = curriedAddFourNumbers(1, 2);\n *      var g = f(3);\n *      g(4); //=> 10\n */\nmodule.exports = _curry1(function curry(fn) {\n  return curryN(fn.length, fn);\n});\n","module.exports = function _filter(fn, list) {\n  var idx = 0;\n  var len = list.length;\n  var result = [];\n\n  while (idx < len) {\n    if (fn(list[idx])) {\n      result[result.length] = list[idx];\n    }\n    idx += 1;\n  }\n  return result;\n};\n","module.exports = function _isObject(x) {\n  return Object.prototype.toString.call(x) === '[object Object]';\n};\n","var _curry2 = require('./_curry2');\nvar _xfBase = require('./_xfBase');\n\n\nmodule.exports = (function() {\n  function XFilter(f, xf) {\n    this.xf = xf;\n    this.f = f;\n  }\n  XFilter.prototype['@@transducer/init'] = _xfBase.init;\n  XFilter.prototype['@@transducer/result'] = _xfBase.result;\n  XFilter.prototype['@@transducer/step'] = function(result, input) {\n    return this.f(input) ? this.xf['@@transducer/step'](result, input) : result;\n  };\n\n  return _curry2(function _xfilter(f, xf) { return new XFilter(f, xf); });\n}());\n","var _curry2 = require('./internal/_curry2');\nvar _dispatchable = require('./internal/_dispatchable');\nvar _filter = require('./internal/_filter');\nvar _isObject = require('./internal/_isObject');\nvar _reduce = require('./internal/_reduce');\nvar _xfilter = require('./internal/_xfilter');\nvar keys = require('./keys');\n\n\n/**\n * Takes a predicate and a `Filterable`, and returns a new filterable of the\n * same type containing the members of the given filterable which satisfy the\n * given predicate. Filterable objects include plain objects or any object\n * that has a filter method such as `Array`.\n *\n * Dispatches to the `filter` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array} Filterable\n * @see R.reject, R.transduce, R.addIndex\n * @example\n *\n *      var isEven = n => n % 2 === 0;\n *\n *      R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]\n *\n *      R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nmodule.exports = _curry2(_dispatchable(['filter'], _xfilter, function(pred, filterable) {\n  return (\n    _isObject(filterable) ?\n      _reduce(function(acc, key) {\n        if (pred(filterable[key])) {\n          acc[key] = filterable[key];\n        }\n        return acc;\n      }, {}, keys(filterable)) :\n    // else\n      _filter(pred, filterable)\n  );\n}));\n","module.exports = function _arrayFromIterator(iter) {\n  var list = [];\n  var next;\n  while (!(next = iter.next()).done) {\n    list.push(next.value);\n  }\n  return list;\n};\n","module.exports = function _functionName(f) {\n  // String(x => x) evaluates to \"x => x\", so the pattern may not match.\n  var match = String(f).match(/^function (\\w*)/);\n  return match == null ? '' : match[1];\n};\n","var _curry2 = require('./internal/_curry2');\n\n\n/**\n * Returns true if its arguments are identical, false otherwise. Values are\n * identical if they reference the same memory. `NaN` is identical to `NaN`;\n * `0` and `-0` are not identical.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> a -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n *      var o = {};\n *      R.identical(o, o); //=> true\n *      R.identical(1, 1); //=> true\n *      R.identical(1, '1'); //=> false\n *      R.identical([], []); //=> false\n *      R.identical(0, -0); //=> false\n *      R.identical(NaN, NaN); //=> true\n */\nmodule.exports = _curry2(function identical(a, b) {\n  // SameValue algorithm\n  if (a === b) { // Steps 1-5, 7-10\n    // Steps 6.b-6.e: +0 != -0\n    return a !== 0 || 1 / a === 1 / b;\n  } else {\n    // Step 6.a: NaN == NaN\n    return a !== a && b !== b;\n  }\n});\n","var _curry1 = require('./internal/_curry1');\n\n\n/**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig (* -> {*}) -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n *      R.type({}); //=> \"Object\"\n *      R.type(1); //=> \"Number\"\n *      R.type(false); //=> \"Boolean\"\n *      R.type('s'); //=> \"String\"\n *      R.type(null); //=> \"Null\"\n *      R.type([]); //=> \"Array\"\n *      R.type(/[A-z]/); //=> \"RegExp\"\n *      R.type(() => {}); //=> \"Function\"\n */\nmodule.exports = _curry1(function type(val) {\n  return val === null      ? 'Null'      :\n         val === undefined ? 'Undefined' :\n         Object.prototype.toString.call(val).slice(8, -1);\n});\n","var _arrayFromIterator = require('./_arrayFromIterator');\nvar _functionName = require('./_functionName');\nvar _has = require('./_has');\nvar identical = require('../identical');\nvar keys = require('../keys');\nvar type = require('../type');\n\n\nmodule.exports = function _equals(a, b, stackA, stackB) {\n  if (identical(a, b)) {\n    return true;\n  }\n\n  if (type(a) !== type(b)) {\n    return false;\n  }\n\n  if (a == null || b == null) {\n    return false;\n  }\n\n  if (typeof a['fantasy-land/equals'] === 'function' || typeof b['fantasy-land/equals'] === 'function') {\n    return typeof a['fantasy-land/equals'] === 'function' && a['fantasy-land/equals'](b) &&\n           typeof b['fantasy-land/equals'] === 'function' && b['fantasy-land/equals'](a);\n  }\n\n  if (typeof a.equals === 'function' || typeof b.equals === 'function') {\n    return typeof a.equals === 'function' && a.equals(b) &&\n           typeof b.equals === 'function' && b.equals(a);\n  }\n\n  switch (type(a)) {\n    case 'Arguments':\n    case 'Array':\n    case 'Object':\n      if (typeof a.constructor === 'function' &&\n          _functionName(a.constructor) === 'Promise') {\n        return a === b;\n      }\n      break;\n    case 'Boolean':\n    case 'Number':\n    case 'String':\n      if (!(typeof a === typeof b && identical(a.valueOf(), b.valueOf()))) {\n        return false;\n      }\n      break;\n    case 'Date':\n      if (!identical(a.valueOf(), b.valueOf())) {\n        return false;\n      }\n      break;\n    case 'Error':\n      return a.name === b.name && a.message === b.message;\n    case 'RegExp':\n      if (!(a.source === b.source &&\n            a.global === b.global &&\n            a.ignoreCase === b.ignoreCase &&\n            a.multiline === b.multiline &&\n            a.sticky === b.sticky &&\n            a.unicode === b.unicode)) {\n        return false;\n      }\n      break;\n    case 'Map':\n    case 'Set':\n      if (!_equals(_arrayFromIterator(a.entries()), _arrayFromIterator(b.entries()), stackA, stackB)) {\n        return false;\n      }\n      break;\n    case 'Int8Array':\n    case 'Uint8Array':\n    case 'Uint8ClampedArray':\n    case 'Int16Array':\n    case 'Uint16Array':\n    case 'Int32Array':\n    case 'Uint32Array':\n    case 'Float32Array':\n    case 'Float64Array':\n      break;\n    case 'ArrayBuffer':\n      break;\n    default:\n      // Values of other types are only equal if identical.\n      return false;\n  }\n\n  var keysA = keys(a);\n  if (keysA.length !== keys(b).length) {\n    return false;\n  }\n\n  var idx = stackA.length - 1;\n  while (idx >= 0) {\n    if (stackA[idx] === a) {\n      return stackB[idx] === b;\n    }\n    idx -= 1;\n  }\n\n  stackA.push(a);\n  stackB.push(b);\n  idx = keysA.length - 1;\n  while (idx >= 0) {\n    var key = keysA[idx];\n    if (!(_has(key, b) && _equals(b[key], a[key], stackA, stackB))) {\n      return false;\n    }\n    idx -= 1;\n  }\n  stackA.pop();\n  stackB.pop();\n  return true;\n};\n","var _curry2 = require('./internal/_curry2');\nvar _equals = require('./internal/_equals');\n\n\n/**\n * Returns `true` if its arguments are equivalent, `false` otherwise. Handles\n * cyclical data structures.\n *\n * Dispatches symmetrically to the `equals` methods of both arguments, if\n * present.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> b -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n *      R.equals(1, 1); //=> true\n *      R.equals(1, '1'); //=> false\n *      R.equals([1, 2, 3], [1, 2, 3]); //=> true\n *\n *      var a = {}; a.v = a;\n *      var b = {}; b.v = b;\n *      R.equals(a, b); //=> true\n */\nmodule.exports = _curry2(function equals(a, b) {\n  return _equals(a, b, [], []);\n});\n","module.exports = function _reduced(x) {\n  return x && x['@@transducer/reduced'] ? x :\n    {\n      '@@transducer/value': x,\n      '@@transducer/reduced': true\n    };\n};\n","var _curry2 = require('./_curry2');\nvar _reduced = require('./_reduced');\nvar _xfBase = require('./_xfBase');\n\n\nmodule.exports = (function() {\n  function XAll(f, xf) {\n    this.xf = xf;\n    this.f = f;\n    this.all = true;\n  }\n  XAll.prototype['@@transducer/init'] = _xfBase.init;\n  XAll.prototype['@@transducer/result'] = function(result) {\n    if (this.all) {\n      result = this.xf['@@transducer/step'](result, true);\n    }\n    return this.xf['@@transducer/result'](result);\n  };\n  XAll.prototype['@@transducer/step'] = function(result, input) {\n    if (!this.f(input)) {\n      this.all = false;\n      result = _reduced(this.xf['@@transducer/step'](result, false));\n    }\n    return result;\n  };\n\n  return _curry2(function _xall(f, xf) { return new XAll(f, xf); });\n}());\n","var _curry2 = require('./internal/_curry2');\nvar _dispatchable = require('./internal/_dispatchable');\nvar _xall = require('./internal/_xall');\n\n\n/**\n * Returns `true` if all elements of the list match the predicate, `false` if\n * there are any that don't.\n *\n * Dispatches to the `all` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> Boolean\n * @param {Function} fn The predicate function.\n * @param {Array} list The array to consider.\n * @return {Boolean} `true` if the predicate is satisfied by every element, `false`\n *         otherwise.\n * @see R.any, R.none, R.transduce\n * @example\n *\n *      var equals3 = R.equals(3);\n *      R.all(equals3)([3, 3, 3, 3]); //=> true\n *      R.all(equals3)([3, 3, 1, 3]); //=> false\n */\nmodule.exports = _curry2(_dispatchable(['all'], _xall, function all(fn, list) {\n  var idx = 0;\n  while (idx < list.length) {\n    if (!fn(list[idx])) {\n      return false;\n    }\n    idx += 1;\n  }\n  return true;\n}));\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.validate = undefined;\n\nvar _identity = require('ramda/src/identity');\n\nvar _identity2 = _interopRequireDefault(_identity);\n\nvar _map = require('ramda/src/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nvar _reduce = require('ramda/src/reduce');\n\nvar _reduce2 = _interopRequireDefault(_reduce);\n\nvar _curry = require('ramda/src/curry');\n\nvar _curry2 = _interopRequireDefault(_curry);\n\nvar _filter = require('ramda/src/filter');\n\nvar _filter2 = _interopRequireDefault(_filter);\n\nvar _equals = require('ramda/src/equals');\n\nvar _equals2 = _interopRequireDefault(_equals);\n\nvar _all = require('ramda/src/all');\n\nvar _all2 = _interopRequireDefault(_all);\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\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 _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\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 *\n * @param {Function} successFn callback function in case of valid input\n * @param {Function} failFn callback function in case of invalid input\n * @param {Array} input\n * @returns {*}\n */\nvar transform = function transform(successFn, failFn, input) {\n  var valid = (0, _all2.default)((0, _equals2.default)(true), input);\n  return valid ? successFn() : failFn((0, _filter2.default)(function (a) {\n    return a !== true;\n  }, input));\n};\n\n/**\n *\n * @param {Function} predicate validation function to apply inputs on\n * @param {String|Function} errorMsg error message to return in case of fail\n * @param {*} value the actual value\n * @param {Object} inputs the input object - in case the predicate function needs access to dependent values\n * @returns {Boolean}\n */\n\nvar runPredicate = function runPredicate(_ref, value, inputs, field) {\n  var _ref2 = _slicedToArray(_ref, 2),\n      predicate = _ref2[0],\n      errorMsg = _ref2[1];\n\n  return predicate(value, inputs // eslint-disable-line no-nested-ternary\n  ) ? true : typeof errorMsg === 'function' ? errorMsg(value, field) : errorMsg;\n};\n\n/**\n *\n * @param {Function} successFn callback function in case of valid input\n * @param {Function} failFn callback function in case of invalid input\n * @param {Object} spec the rule object\n * @param {Object|Function} input the validation input data\n * @returns {{}}\n */\nvar validate = exports.validate = (0, _curry2.default)(function (successFn, failFn, spec, input) {\n  var inputFn = typeof input === 'function' ? input : function (key) {\n    return key ? input : input;\n  };\n  var keys = Object.keys(inputFn());\n  return (0, _reduce2.default)(function (result, key) {\n    var inputObj = inputFn(key);\n    var value = inputObj[key];\n    var predicates = spec[key];\n    if (Array.isArray(predicates)) {\n      return _extends({}, result, _defineProperty({}, key, transform(function () {\n        return successFn(value);\n      }, failFn, (0, _map2.default)(function (f) {\n        return runPredicate(f, value, inputObj, key);\n      }, predicates))));\n    } else if ((typeof predicates === 'undefined' ? 'undefined' : _typeof(predicates)) === 'object') {\n      return _extends({}, result, _defineProperty({}, key, validate(successFn, failFn, predicates, value)));\n    } else if (typeof predicates === 'function') {\n      var rules = predicates(value);\n      return _extends({}, result, _defineProperty({}, key, validate(successFn, failFn, rules, value)));\n    } else {\n      return _extends({}, result, _defineProperty({}, key, successFn([])));\n    }\n  }, {}, keys);\n}\n\n/**\n *\n * @param {Object} spec the rule object\n * @param {Object} input the validation input data\n * @returns {{}}\n */\n);var spected = validate(function () {\n  return true;\n}, _identity2.default);\n\nexports.default = spected;","module.exports = require('./forEach');\n","import { tr } from 'pmt-modules/i18n'\r\nimport forIn from 'lodash/forIn'\r\nimport spected from 'spected'\r\nimport isObject from 'lodash/isObject'\r\nimport isArray from 'lodash/isArray'\r\nimport each from 'lodash/each'\r\n\r\nconst trMessage = key => {\r\n  // Some strings are already translated, while legacy behavior gives the key to translate\r\n  // a key does not have a space, most of the strings have one\r\n  if (key.indexOf(' ') !== -1) {\r\n    return key\r\n  }\r\n\r\n  return tr(key)\r\n}\r\n\r\nconst validateValue = value => {\r\n  if (isArray(value)) {\r\n    // handle key that contains an array of objects\r\n    const isValid = value.length === 0\r\n\r\n    return {\r\n      isValid,\r\n      message: trMessage(value[0]),\r\n      messages: value,\r\n    }\r\n  } else if (isObject(value)) {\r\n    let isValid = true\r\n    each(value, (childValue, childName) => {\r\n      const newChildValue = validateValue(childValue)\r\n      if (newChildValue.isValid === false) {\r\n        isValid = false\r\n      }\r\n      value[childName] = newChildValue\r\n    })\r\n\r\n    return {\r\n      isValid,\r\n      ...value,\r\n    }\r\n  } else {\r\n    // simple value\r\n    //\r\n    if (value === true) {\r\n      return {\r\n        isValid: true,\r\n        message: null,\r\n        messages: [],\r\n      }\r\n    } else {\r\n      return {\r\n        isValid: false,\r\n        message: trMessage(value[0]),\r\n        messages: value,\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n//\r\n// Input:\r\n// - true\r\n// - [ \"error message\" ]\r\n//\r\n// Output:\r\n// {\r\n//   valid,\r\n//   message: '', // the first of messages\r\n//   messages: [],\r\n// }\r\n//\r\nconst formatValidator = validation => {\r\n  // calculate if the whole data isValid\r\n  let isValid = true\r\n\r\n  forIn(validation, (value, field) => {\r\n    const newValue = validateValue(value)\r\n\r\n    if (newValue.isValid === false) {\r\n      isValid = false\r\n    }\r\n\r\n    validation[field] = newValue\r\n  })\r\n\r\n  // add isValid boolean for convenience\r\n  validation.isValid = isValid\r\n\r\n  return validation\r\n}\r\n\r\n/**\r\n * Validate data with the given rules\r\n * @param  {Object} rules See spected documentation for the rules format\r\n * @param  {Object} data  The form data\r\n * @return {Object} See spected documentation for the returned format. Note that we add an 'isValid'\r\n *                      var for convenience\r\n */\r\nexport const validator = (rules, data) => {\r\n  // validate data with spected library\r\n  const validation = spected(rules, data)\r\n\r\n  return formatValidator(validation)\r\n}\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\nimport each from 'lodash/each'\r\n\r\nimport { getValidator, getFormOptions } from './config'\r\n\r\nconst DEFAULT_VALIDATE = {\r\n  isValid: true,\r\n}\r\n\r\nconst getFormState = state => state.form\r\nconst getFormTypeData = (state, props) => getFormState(state).get(props.formType)\r\nconst getFormType = (state, props) => props.formType\r\nconst getValidatorSelector = (formType, props) => getValidator(props.formType)\r\n\r\nexport const makeGetFormDataNotFormatted = () =>\r\n  createSelector([getFormTypeData, getFormType], (formState, formType) => {\r\n    if (isNil(formState)) {\r\n      return {}\r\n    }\r\n    let formData = formState.toJS().formData\r\n\r\n    if (!formData) {\r\n      formData = {}\r\n    }\r\n\r\n    formData.formType = formType\r\n\r\n    return formData\r\n  })\r\n\r\nexport const makeGetFormData = () =>\r\n  createSelector([makeGetFormDataNotFormatted(), getFormType], (formData, formType) => {\r\n    if (isNil(formData)) {\r\n      return {}\r\n    }\r\n    return formData\r\n  })\r\n\r\nconst getFormsDataArray = (state, props) => {\r\n  if (!props.formTypes) {\r\n    // FIXME: should not happend\r\n    return []\r\n  }\r\n\r\n  return props.formTypes.map(formType => ({\r\n    formType,\r\n    ...makeGetFormData()(state, { formType }),\r\n  }))\r\n}\r\n\r\nexport const makeGetFormsData = () =>\r\n  createSelector([getFormsDataArray], formsData => {\r\n    const formattedFormsData = {}\r\n    formsData.forEach(formData => {\r\n      formattedFormsData[formData.formType] = {\r\n        data: formData.data,\r\n        // TODO: put above ?\r\n        ...formData,\r\n      }\r\n    })\r\n\r\n    return formattedFormsData\r\n  })\r\n\r\nexport const makeGetFormOptions = () =>\r\n  createSelector([getFormTypeData], formTypeData => {\r\n    return formTypeData.toJS().options || {}\r\n  })\r\n\r\nexport const makeGetFormErrors = () =>\r\n  createSelector(\r\n    [makeGetFormDataNotFormatted(), getValidatorSelector, makeGetFormOptions()],\r\n    (formData, validator, formOptions) => {\r\n      const { formType } = formData\r\n\r\n      if (isNil(validator)) {\r\n        return DEFAULT_VALIDATE\r\n      }\r\n      const errors = validator(formData, formOptions)\r\n      // set formType again since validator override it\r\n      errors.formType = formType\r\n\r\n      // create invalidFields, an array of the field names that are not valid\r\n      errors.invalidFields = []\r\n      each(errors, (error, fieldName) => {\r\n        if (error.isValid === false) {\r\n          errors.invalidFields.push(fieldName)\r\n        }\r\n      })\r\n\r\n      return errors\r\n    }\r\n  )\r\n\r\nexport const makeIsFormValid = createSelector([makeGetFormErrors()], formErrors => {\r\n  return formErrors.isValid\r\n})\r\n\r\nexport const makeGetFormsErrors = () =>\r\n  createSelector([getFormsDataArray], formsData => {\r\n    // TODO: move to format\r\n    let isValid = true\r\n\r\n    const errors = {}\r\n    formsData.forEach(formData => {\r\n      const { formType } = formData\r\n      const validator = getValidator(formType)\r\n      const formOptions = getFormOptions(formType)\r\n\r\n      if (isNil(validator)) {\r\n        errors[formType] = DEFAULT_VALIDATE\r\n      } else {\r\n        const validation = validator(formData, formOptions)\r\n        if (!validation.isValid) {\r\n          isValid = false\r\n        }\r\n        errors[formType] = validation\r\n      }\r\n      // set formType again since validator override it\r\n      errors[formType].formType = formType\r\n    })\r\n\r\n    return {\r\n      isValid,\r\n      errors,\r\n    }\r\n  })\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React from 'react'\r\n\r\nimport clsx from 'clsx'\r\nimport { withStyles } from '../styles'\r\nimport Button from '@material-ui/core/Button'\r\n\r\nconst styles = theme => ({\r\n  buttonFlat: {\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n    borderRadius: 'none',\r\n    boxShadow: 'none',\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: '100%',\r\n    },\r\n  },\r\n  buttonFlatRaised: {\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n    background: theme.palette.primary.main,\r\n    border: 'none',\r\n    borderRadius: 'none',\r\n    boxShadow: 'none',\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: '100%',\r\n    },\r\n    '&:hover': {\r\n      background: theme.palette.primary.dark,\r\n    },\r\n  },\r\n  buttonFlatInactive: {\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n    background: theme.pmt.colors.white,\r\n    color: theme.pmt.colors.grey500,\r\n    border: `1px solid ${theme.pmt.colors.grey500}`,\r\n    borderRadius: 'none',\r\n    boxShadow: 'none',\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: '100%',\r\n    },\r\n    '&:hover': {\r\n      background: theme.pmt.colors.white,\r\n    },\r\n  },\r\n  buttonFlatWarning: {\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n    background: theme.pmt.colors.red800,\r\n    color: theme.pmt.colors.white,\r\n    border: 'none',\r\n    borderRadius: 'none',\r\n    boxShadow: 'none',\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: '100%',\r\n    },\r\n    '&:hover': {\r\n      background: theme.pmt.colors.red900,\r\n    },\r\n  },\r\n})\r\n\r\nclass ButtonFlat extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      warning,\r\n      inactive,\r\n      // raised will be replaced by contained.\r\n      raised,\r\n      contained,\r\n      className,\r\n      classes,\r\n      children,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    const classNames = warning\r\n      ? clsx(className, classes.buttonFlatWarning)\r\n      : inactive\r\n        ? clsx(className, classes.buttonFlatInactive)\r\n        : raised || contained\r\n          ? clsx(className, classes.buttonFlatRaised)\r\n          : clsx(className, classes.buttonFlat)\r\n\r\n    return (\r\n      <Button\r\n        className={classNames}\r\n        variant={raised || contained ? 'contained' : 'text'}\r\n        {...otherProps}\r\n      >\r\n        {children}\r\n      </Button>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ButtonFlat)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { CircularProgress } from 'pmt-ui/Progress'\r\nimport { trOptional } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  loadingBlockContainer: {\r\n    position: 'relative',\r\n    width: '100%',\r\n    height: '100%',\r\n    // minHeight: 50,\r\n  },\r\n  loadingBlock: {\r\n    left: 0,\r\n    top: 0,\r\n    backgroundColor: 'rgba(255, 255, 255, 0.54)',\r\n    zIndex: theme.zIndex.loader || 1000,\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    height: '100%',\r\n  },\r\n  circularProgress: {},\r\n})\r\n\r\nconst LoadingBlock = ({ size = 50, show = false, children = null, classes }) => {\r\n  if (!show) {\r\n    // it happens that the children need data to be rendered. This data is not available while the\r\n    // loading is made.\r\n    // But even if we don't display the children here because we are showing the loading, the children\r\n    // is build\r\n    // Passing the children as a function avoid to re-check the conditions to render it, that is mostly\r\n    // the same condition pass to the `show` prop.\r\n    if (isFunction(children)) {\r\n      return children()\r\n    }\r\n    return children\r\n  }\r\n\r\n  const loadingLabel = trOptional('global.loading') || 'Chargement en cours…'\r\n\r\n  return (\r\n    <div className={classes.loadingBlockContainer} style={{ minHeight: size }}>\r\n      <div className={classes.loadingBlock}>\r\n        <CircularProgress\r\n          size={size}\r\n          className={classes.circularProgress}\r\n          role=\"status\"\r\n          aria-label={loadingLabel}\r\n        />\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nLoadingBlock.propTypes = {\r\n  size: PropTypes.number,\r\n  show: PropTypes.bool,\r\n}\r\n\r\nexport default withStyles(styles)(LoadingBlock)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport LoadingBlock from './LoadingBlock'\r\n\r\nconst styles = theme => ({\r\n  loadingBlockWrapper: {\r\n    position: 'absolute',\r\n    width: '100%',\r\n    height: '100%',\r\n    zIndex: theme.zIndex.loader || 1000,\r\n    top: 0,\r\n    left: 0,\r\n  },\r\n  loadingBlock: {},\r\n  // visually hidden but still announced by screen readers\r\n  srOnly: {\r\n    position: 'absolute',\r\n    width: 1,\r\n    height: 1,\r\n    padding: 0,\r\n    margin: -1,\r\n    overflow: 'hidden',\r\n    clip: 'rect(0, 0, 0, 0)',\r\n    whiteSpace: 'nowrap',\r\n    border: 0,\r\n  },\r\n})\r\n\r\n/**\r\n * This wrapper comes above its first relative parent\r\n * Typically used to load a block or the entire page.\r\n */\r\nconst LoadingBlockWrapper = ({ show, size, children, classes }) => {\r\n  if (!show) {\r\n    return null\r\n  }\r\n\r\n  // span instead of div because we use it on table, and table can't contain div\r\n\r\n  return (\r\n    <span className={classes.loadingBlockWrapper} role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\r\n      <span className={classes.srOnly}>\r\n        {tr('global.a11y.loading', {\r\n          fr: 'Chargement en cours...',\r\n          context: '',\r\n          desc: 'Announced to screen readers while a loading block is shown',\r\n        })}\r\n      </span>\r\n      {children || <LoadingBlock show={show} className={classes.loadingBlock} size={size} />}\r\n    </span>\r\n  )\r\n}\r\n\r\nLoadingBlockWrapper.propTypes = {\r\n  show: PropTypes.bool.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(LoadingBlockWrapper)\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Button from 'pmt-ui/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    textAlign: 'center',\r\n    width: '100%',\r\n    display: 'flex',\r\n    // justifyContent: 'center',\r\n    // alignItems: 'center',\r\n    paddingTop: theme.spacing(3),\r\n    paddingBottom: theme.spacing(3),\r\n  },\r\n  cancelBtn: {\r\n    marginRight: 10,\r\n  },\r\n  submitBtn: {},\r\n})\r\n\r\nconst FormButtons = ({ classes, submit = {}, cancel = {}, onSubmit, onReset }) => (\r\n  <div className={classes.root}>\r\n    <Button\r\n      variant=\"contained\"\r\n      color=\"default\"\r\n      className={classes.cancelBtn}\r\n      disabled={cancel.disabled || false}\r\n      onClick={onReset}\r\n    >\r\n      {tr('global.cancel')}\r\n    </Button>\r\n    <Button\r\n      variant=\"contained\"\r\n      color=\"primary\"\r\n      className={classes.submitBtn}\r\n      disabled={submit.disabled || false}\r\n      onClick={onSubmit}\r\n    >\r\n      {tr('global.save')}\r\n    </Button>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(FormButtons)\r\n","import { ModalType, createShowDialogAction, createHideDialogAction } from 'pmt-modules/dialog'\r\n\r\nexport const displayErrorDialog = (errorMessage, options) => createShowDialogAction(\r\n  ModalType.ERROR,\r\n  {\r\n    errorMessage,\r\n    options\r\n  }\r\n)\r\n\r\nexport const hideErrorDialog = () => createHideDialogAction(\r\n  ModalType.ERROR,\r\n  {}\r\n)\r\n","function _setPrototypeOf(t, e) {\n  return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _setPrototypeOf(t, e);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nmodule.exports = _inheritsLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar setStatic = function setStatic(key, value) {\n  return function (BaseComponent) {\n    /* eslint-disable no-param-reassign */\n    BaseComponent[key] = value;\n    /* eslint-enable no-param-reassign */\n\n    return BaseComponent;\n  };\n};\n\nvar _default = setStatic;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _setStatic = _interopRequireDefault(require(\"./setStatic\"));\n\nvar setDisplayName = function setDisplayName(displayName) {\n  return (0, _setStatic.default)('displayName', displayName);\n};\n\nvar _default = setDisplayName;\nexports.default = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar getDisplayName = function getDisplayName(Component) {\n  if (typeof Component === 'string') {\n    return Component;\n  }\n\n  if (!Component) {\n    return undefined;\n  }\n\n  return Component.displayName || Component.name || 'Component';\n};\n\nvar _default = getDisplayName;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _getDisplayName = _interopRequireDefault(require(\"./getDisplayName\"));\n\nvar wrapDisplayName = function wrapDisplayName(BaseComponent, hocName) {\n  return hocName + \"(\" + (0, _getDisplayName.default)(BaseComponent) + \")\";\n};\n\nvar _default = wrapDisplayName;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = require(\"react\");\n\nvar _setDisplayName = _interopRequireDefault(require(\"./setDisplayName\"));\n\nvar _wrapDisplayName = _interopRequireDefault(require(\"./wrapDisplayName\"));\n\nvar shouldUpdate = function shouldUpdate(test) {\n  return function (BaseComponent) {\n    var factory = (0, _react.createFactory)(BaseComponent);\n\n    var ShouldUpdate =\n    /*#__PURE__*/\n    function (_Component) {\n      (0, _inheritsLoose2.default)(ShouldUpdate, _Component);\n\n      function ShouldUpdate() {\n        return _Component.apply(this, arguments) || this;\n      }\n\n      var _proto = ShouldUpdate.prototype;\n\n      _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n        return test(this.props, nextProps);\n      };\n\n      _proto.render = function render() {\n        return factory(this.props);\n      };\n\n      return ShouldUpdate;\n    }(_react.Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      return (0, _setDisplayName.default)((0, _wrapDisplayName.default)(BaseComponent, 'shouldUpdate'))(ShouldUpdate);\n    }\n\n    return ShouldUpdate;\n  };\n};\n\nvar _default = shouldUpdate;\nexports.default = _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 * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n  // SameValue algorithm\n  if (x === y) {\n    // Steps 1-5, 7-10\n    // Steps 6.b-6.e: +0 != -0\n    // Added the nonzero y check to make Flow happy, but it is redundant\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\n  } else {\n    // Step 6.a: NaN == NaN\n    return x !== x && y !== y;\n  }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n  if (is(objA, objB)) {\n    return true;\n  }\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  // Test for A's keys different from B.\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = shallowEqual;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _shallowEqual = _interopRequireDefault(require(\"fbjs/lib/shallowEqual\"));\n\nvar _default = _shallowEqual.default;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _shouldUpdate = _interopRequireDefault(require(\"./shouldUpdate\"));\n\nvar _shallowEqual = _interopRequireDefault(require(\"./shallowEqual\"));\n\nvar _setDisplayName = _interopRequireDefault(require(\"./setDisplayName\"));\n\nvar _wrapDisplayName = _interopRequireDefault(require(\"./wrapDisplayName\"));\n\nvar pure = function pure(BaseComponent) {\n  var hoc = (0, _shouldUpdate.default)(function (props, nextProps) {\n    return !(0, _shallowEqual.default)(props, nextProps);\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    return (0, _setDisplayName.default)((0, _wrapDisplayName.default)(BaseComponent, 'pure'))(hoc(BaseComponent));\n  }\n\n  return hoc(BaseComponent);\n};\n\nvar _default = pure;\nexports.default = _default;","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet NavigationClose = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n  </SvgIcon>\r\n);\r\nNavigationClose = pure(NavigationClose);\r\nNavigationClose.displayName = 'NavigationClose';\r\nNavigationClose.muiName = 'SvgIcon';\r\n\r\nexport default NavigationClose;\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Snackbar from '@material-ui/core/Snackbar'\r\nimport CloseIcon from '../svg-icons/navigation/close'\r\n// import Button from '@material-ui/core/Button'\r\nimport IconButton from '@material-ui/core/IconButton'\r\n\r\nconst styles = theme => ({\r\n  close: {\r\n    width: theme.spacing(4),\r\n    height: theme.spacing(4),\r\n  },\r\n})\r\n\r\nclass SnackbarContainer extends React.Component {\r\n  state = {\r\n    open: false,\r\n  }\r\n\r\n  handleShow = () => {\r\n    this.setState({\r\n      open: true,\r\n    })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.setState({\r\n      open: false,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { message, children, classes, autoHideDuration, action, withCloseAction } = this.props\r\n\r\n    let actions = [...(action || [])]\r\n    if (withCloseAction) {\r\n      actions.push(\r\n        <IconButton\r\n          key=\"close\"\r\n          aria-label=\"Close\"\r\n          color=\"inherit\"\r\n          className={classes.close}\r\n          onClick={this.handleClose}\r\n        >\r\n          <CloseIcon />\r\n        </IconButton>\r\n      )\r\n    }\r\n\r\n    return (\r\n      <React.Fragment>\r\n        {children({\r\n          onShow: this.handleShow,\r\n          open: this.state.open,\r\n        })}\r\n\r\n        <Snackbar\r\n          message={message}\r\n          action={action}\r\n          autoHideDuration={autoHideDuration}\r\n          open={this.state.open}\r\n          onClose={this.handleClose}\r\n        />\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nSnackbarContainer.defaultProps = {\r\n  autoHideDuration: 2000,\r\n  action: null,\r\n  withCloseAction: false,\r\n}\r\n\r\nSnackbarContainer.propTypes = {\r\n  message: PropTypes.string.isRequired,\r\n\r\n  withCloseAction: PropTypes.bool,\r\n}\r\n\r\nexport default withStyles(styles)(SnackbarContainer)\r\n","import React from 'react'\r\n\r\nimport Snackbar from 'pmt-ui/Snackbar'\r\n\r\nclass SnackbarError extends React.Component {\r\n  state = {\r\n    open: true,\r\n  }\r\n\r\n  handleRequestClose = () => {\r\n    this.setState({ open: false })\r\n    if (this.props.onClose) {\r\n      this.props.onClose()\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { errorMessage } = this.props\r\n\r\n    return (\r\n      <Snackbar\r\n        open={this.state.open}\r\n        onClose={this.handleRequestClose}\r\n        message={\r\n          <span id=\"message-id\" role=\"alert\" aria-live=\"assertive\">\r\n            {errorMessage}\r\n          </span>\r\n        }\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nexport default SnackbarError\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PropTypes from 'prop-types'\r\nimport { compose } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport invariant from 'invariant'\r\n\r\nimport isString from 'lodash/isString'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { displayErrorDialog } from './actions'\r\nimport SnackbarError from './SnackbarError'\r\n\r\nconst styles = theme => {\r\n  invariant(\r\n    !isNil(theme.pmt.status) && !isNil(theme.pmt.status.error),\r\n    `theme status error color is not defined`\r\n  )\r\n\r\n  return {\r\n    errorBlock: {\r\n      marginTop: 20,\r\n      color: theme.pmt.status.error,\r\n      textAlign: 'center',\r\n    },\r\n  }\r\n}\r\n\r\nconst DisplayMode = {\r\n  SNACKBAR: 'DISPLAY_MODE::SNACKBAR',\r\n  DIALOG: 'DISPLAY_MODE::DIALOG',\r\n  CUSTOM: 'DISPLAY_MODE::CUSTOM',\r\n}\r\n\r\n/**\r\n * error will be displayed with the color defined in theme: theme.pmt.status.error\r\n * be sure to set it properly in your config theme file\r\n */\r\nclass ErrorBlock extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.setMessage(props)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const newMessage = isEmpty(get(nextProps, 'error.localizedMessage'))\r\n      ? get(nextProps, 'error.message', null)\r\n      : tr(nextProps.error.localizedMessage)\r\n    if (this.message !== newMessage) {\r\n      this.setMessage(nextProps)\r\n    }\r\n  }\r\n\r\n  setMessage(props) {\r\n    if (!isNil(props.error)) {\r\n      if (isString(props.error)) {\r\n        this.message = props.error\r\n      } else {\r\n        this.message = isEmpty(get(props, 'error.localizedMessage'))\r\n          ? get(props, 'error.message', null)\r\n          : tr(props.error.localizedMessage)\r\n      }\r\n      if (props.mode === DisplayMode.DIALOG) {\r\n        props.displayErrorDialog(this.message, props.options)\r\n      }\r\n      this.message = this.message || tr('global.unknown_error')\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { mode, error, classes, customElement, options } = this.props\r\n\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n\r\n    switch (mode) {\r\n      // we don't need to render anything here, since it will be done via the setMessage func\r\n      case DisplayMode.DIALOG:\r\n        return null\r\n\r\n      case DisplayMode.SNACKBAR:\r\n        return <SnackbarError errorMessage={this.message} {...options || {}} />\r\n\r\n      case DisplayMode.CUSTOM:\r\n        return React.cloneElement(customElement, {\r\n          text: this.message,\r\n        })\r\n\r\n      default:\r\n        return <div className={classes.errorBlock}>{this.message}</div>\r\n    }\r\n  }\r\n}\r\n\r\nErrorBlock.defaultProps = {\r\n  mode: DisplayMode.DEFAULT,\r\n}\r\n\r\nErrorBlock.propTypes = {\r\n  error: PropTypes.object,\r\n\r\n  // way to display this error block\r\n  mode: PropTypes.string,\r\n\r\n  /**\r\n   * options can contain,\r\n   *\r\n   * for dialog:\r\n   *   - title: dialog title\r\n   *   - actions: dialog actions\r\n   *\r\n   * For snackbar:\r\n   *   - onClose\r\n   */\r\n  options: PropTypes.object,\r\n\r\n  // cutomElement to be passed with mode DisplayMode.CUSTOM\r\n  customElement: PropTypes.element,\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nconst ErrorBlockComponent = compose(\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      displayErrorDialog,\r\n    }\r\n  ),\r\n  withStyles(styles)\r\n)(ErrorBlock)\r\n\r\nErrorBlockComponent.Mode = DisplayMode\r\n\r\nexport default ErrorBlockComponent\r\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n *   return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n *   if (isGreeting(objValue) && isGreeting(othValue)) {\n *     return true;\n *   }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\nfunction isEqualWith(value, other, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  var result = customizer ? customizer(value, other) : undefined;\n  return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\n\nmodule.exports = isEqualWith;\n","var baseFlatten = require('./_baseFlatten'),\n    baseRest = require('./_baseRest'),\n    baseUniq = require('./_baseUniq'),\n    isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nmodule.exports = union;\n","import isEqualWith from 'lodash/isEqualWith'\r\nimport isObject from 'lodash/isObject'\r\nimport isArray from 'lodash/isArray'\r\nimport keys from 'lodash/keys'\r\nimport union from 'lodash/union'\r\nimport isNull from 'lodash/isNull'\r\n\r\nfunction formDataComparator(value1, value2) {\r\n  //\r\n  // Rule 1: null and empty array are considered equal\r\n  // because when we send an empty array to the backend, it is stored as null, and then returned as null\r\n  if (isNull(value1) && Array.isArray(value2) && value2.length === 0) {\r\n    return true\r\n  }\r\n  if (isNull(value2) && Array.isArray(value1) && value1.length === 0) {\r\n    return true\r\n  }\r\n\r\n  // Rule2: integer and their string representation are considered equal\r\n  if (\r\n    (typeof value1 === 'number' && typeof value2 === 'string' && String(value1) === value2) ||\r\n    (typeof value2 === 'number' && typeof value1 === 'string' && String(value2) === value1)\r\n  ) {\r\n    return true\r\n  }\r\n\r\n  // by default, use lodash isEqual\r\n  return undefined\r\n}\r\n\r\nexport function areFormDataLooselyEqual(obj1, obj2) {\r\n  return isEqualWith(obj1, obj2, formDataComparator)\r\n}\r\n\r\n/**\r\n * Recursively collect all differences between two values.\r\n * Returns an array of objects: { path, initial, current }.\r\n *\r\n * For debug only\r\n */\r\nexport function findAllDifferences(initial, current) {\r\n  const diffs = []\r\n\r\n  function recurse(a, b, path) {\r\n    // identical -> nothing to report\r\n    if (areFormDataLooselyEqual(a, b)) return\r\n\r\n    // If either side is not an object/array, it's a leaf difference\r\n    if (!isObject(a) || !isObject(b) || isArray(a) || isArray(b)) {\r\n      diffs.push({ path: path || '', initial: a, current: b })\r\n      return\r\n    }\r\n\r\n    // both are plain objects -> iterate all keys\r\n    const allKeys = union(keys(a), keys(b))\r\n    for (let k of allKeys) {\r\n      const nextPath = path ? `${path}.${k}` : `${k}`\r\n      recurse(a ? a[k] : undefined, b ? b[k] : undefined, nextPath)\r\n    }\r\n  }\r\n\r\n  recurse(initial, current, '')\r\n  return diffs\r\n}\r\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { getFormCustomActions } from 'pmt-modules/form/config'\r\nimport { areFormDataLooselyEqual } from 'pmt-modules/form/utils'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\n\r\nimport { initForm, updateForm, resetForm } from '../actions'\r\n\r\nimport { makeGetFormData, makeGetFormErrors, makeGetFormOptions } from '../selectors'\r\n\r\nclass FormContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    this.initialDefaultData = null\r\n  }\r\n\r\n  componentWillMount() {\r\n    if (\r\n      !isNull(this.props.defaultData) ||\r\n      // if the defaultData from props is null\r\n      // but the default data defined in the form creation (cf. createForm) is not null\r\n      // we need to init the form with those data\r\n      !isNull(this.props.formData)\r\n    ) {\r\n      const defaultData = {\r\n        ...this.props.formData, // default data defined on the form creation\r\n        ...this.props.defaultData, // given default data from props\r\n      }\r\n      this.props.initForm(this.props.formType, defaultData)\r\n      this.initialDefaultData = cloneDeep(defaultData)\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (isNull(prevProps.defaultData) && !isNull(this.props.defaultData)) {\r\n      const defaultData = {\r\n        ...this.props.formData, // default data defined on the form creation\r\n        ...this.props.defaultData, // given default data from props\r\n      }\r\n      this.props.initForm(this.props.formType, defaultData)\r\n      this.initialDefaultData = cloneDeep(defaultData)\r\n    }\r\n  }\r\n\r\n  handleChange = formData => {\r\n    this.props.updateForm(this.props.formType, formData)\r\n  }\r\n\r\n  handleReset = () => {\r\n    this.props.resetForm(this.props.formType, this.props.defaultData)\r\n  }\r\n\r\n  /**\r\n   * Put the current data as initial data (no more diff)\r\n   */\r\n  reinitForm = () => {\r\n    this.props.initForm(this.props.formType, this.props.formData)\r\n    this.initialDefaultData = cloneDeep(this.props.formData)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      formData,\r\n      formErrors,\r\n      formOptions,\r\n      WrappedComponent,\r\n      children,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    const propsToPass = {\r\n      formData,\r\n      formErrors,\r\n      formOptions,\r\n      formIsValid: formErrors.isValid,\r\n      // TODO deprecated, use formIsValid\r\n      isValid: formErrors.isValid,\r\n      onChange: this.handleChange,\r\n      onReset: this.handleReset,\r\n      hasDiff: !areFormDataLooselyEqual(this.initialDefaultData, formData),\r\n      reinitForm: this.reinitForm,\r\n      ...otherProps,\r\n    }\r\n\r\n    // For debug only\r\n    // keep commented\r\n    // uncomment only if you need to debug the hasDiff logic\r\n    /*\r\n    if (propsToPass.hasDiff === true) {\r\n      const diffs = findAllDifferences(this.initialDefaultData, formData)\r\n      console.log('FormContainer: form ' + this.props.formType + ' has diff:', diffs)\r\n    }\r\n     */\r\n\r\n    if (isFunction(children)) {\r\n      return children(propsToPass)\r\n    }\r\n\r\n    return <WrappedComponent {...propsToPass} />\r\n  }\r\n}\r\n\r\nFormContainer.defaultProps = {\r\n  defaultData: null,\r\n}\r\n\r\nFormContainer.propTypes = {\r\n  formType: PropTypes.string.isRequired,\r\n\r\n  /**\r\n   * Default data to use on form mounting\r\n   */\r\n  defaultData: PropTypes.object,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getFormData = makeGetFormData()\r\n  const getFormErrors = makeGetFormErrors()\r\n  const getFormOptions = makeGetFormOptions()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      formData: getFormData(state, props),\r\n      formErrors: getFormErrors(state, props),\r\n      formOptions: getFormOptions(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => {\r\n  const formCustomActions = getFormCustomActions(ownProps.formType)\r\n\r\n  return {\r\n    initForm: bindActionCreators(initForm, dispatch),\r\n    updateForm: bindActionCreators(updateForm, dispatch),\r\n    resetForm: bindActionCreators(resetForm, dispatch),\r\n    customActions: bindActionCreators(formCustomActions, dispatch),\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  mapDispatchToProps\r\n)(FormContainer)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport {\r\n  updateForm,\r\n} from '../actions'\r\n\r\nimport {\r\n  makeGetFormsData,\r\n  makeGetFormsErrors,\r\n} from '../selectors'\r\n\r\n\r\nclass FormsContainer extends React.Component {\r\n\r\n  handleChange = (formType, formData) => {\r\n    this.props.updateForm(formType, formData)\r\n  }\r\n\r\n  render() {\r\n    const { formsData, formsErrors, WrappedComponent, ...otherProps } = this.props\r\n    return (\r\n      <WrappedComponent\r\n        formsData={formsData}\r\n        formsErrors={formsErrors}\r\n        formsAreValid={formsErrors.isValid}\r\n        onChange={this.handleChange}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nFormsContainer.propTypes = {\r\n  formTypes: PropTypes.array.isRequired,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getFormsData = makeGetFormsData()\r\n  const getFormsErrors = makeGetFormsErrors()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      formsData: getFormsData(state, props),\r\n      formsErrors: getFormsErrors(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(makeMapStateToProps, {\r\n  updateForm,\r\n})(FormsContainer)\r\n","import React from 'react'\r\n\r\nimport FormContainer from './FormContainer'\r\n\r\n/**\r\n* Add the FormContainer as HOC for the given component\r\n* Requirements\r\n* - formType: FormType or Array of FormType\r\n*/\r\nconst withForm = (formType) => (\r\n  (WrappedComponent) => (\r\n    (props) => (\r\n      <FormContainer\r\n        formType={formType}\r\n        WrappedComponent={WrappedComponent}\r\n        {...props}\r\n      />\r\n    )\r\n  )\r\n)\r\n\r\nexport default withForm\r\n","import React from 'react'\r\n\r\nimport FormsContainer from './FormsContainer'\r\n\r\n/**\r\n* Add the FormsContainer as HOC for the given component\r\n* Requirements\r\n* - formType: FormType or Array of FormType\r\n*/\r\nconst withForms = (formTypes) => (\r\n  (WrappedComponent) => (\r\n    (props) => (\r\n      <FormsContainer\r\n        formTypes={formTypes}\r\n        WrappedComponent={WrappedComponent}\r\n        {...props}\r\n      />\r\n    )\r\n  )\r\n)\r\n\r\nexport default withForms\r\n","import invariant from 'invariant'\r\n\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport merge from 'lodash/merge'\r\n\r\nimport { validator } from './validation/validator'\r\n\r\nimport { isDev } from '../environment/getters'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nexport const DISABLE_FORM_DEV_DATA_QUERY_PARAM = 'disableFormDevData'\r\n\r\nconst DEFAULT_OPTIONS = {\r\n  customActions: {},\r\n  modifier: null,\r\n}\r\n\r\n/**\r\n *\r\n * @param  {FormType} type          the FormType\r\n * @param  {Object} validationRules object that define the validation rules\r\n * @param  {Object} defaultData     an object or a function that give the default data\r\n * @param  {Object} [devData={}]    the dev data to merge to the default data (on dev environment)\r\n *                                  can be a function or an object\r\n * @param  {Object} options         an object of optional options\r\n *                                    - reducer: mandatory to handle a customAction\r\n *\r\n *                                      const reducer = (data, action) => {\r\n *                                        switch (action.actionName) {\r\n *                                          case SpecificActions.ADD:\r\n *                                            return data\r\n *                                          default:\r\n *                                            return data\r\n *                                        }\r\n *                                     }\r\n *                                   - customActions: mandatory with reducer\r\n *                                   - modifier, like a formatter but modify the data before saving\r\n *                                     it on the state -> the data on the store is the right data\r\n *                                     while using the formatter returns the right data on the\r\n *                                     selector, but the formatted data on the state is one-state\r\n *                                     behind\r\n *\r\n * @return {[type]}                 the form:\r\n *                                  {\r\n *                                    type, // the FormType\r\n *                                    validator, // the validator for the validationRules\r\n *                                    getDefault, // a function that returns the default values\r\n *                                  }\r\n *\r\n * Note: you can set the 'DISABLE_FORM_DEV_DATA_QUERY_PARAM' query url paremeter to `true` to globally disable\r\n * dev data on form\r\n *\r\n */\r\nconst createForm = (type, validationRules, defaultData, devData = null, options = {}) => {\r\n  invariant(!isNil(type), 'form type is required')\r\n  invariant(isObject(validationRules), 'validationRules must be an object')\r\n  invariant(\r\n    isFunction(defaultData) || isNil(defaultData) || !isEmpty(defaultData),\r\n    'default data should not be empty'\r\n  )\r\n\r\n  const getDefault = () => {\r\n    const finalDefaultData = isFunction(defaultData) ? defaultData({ options }) : defaultData || {}\r\n    const finalDevData = isFunction(devData) ? devData({ options }) : devData\r\n\r\n    const disableDevData =\r\n      getQueryParam(DISABLE_FORM_DEV_DATA_QUERY_PARAM, window.location.url) === 'true' // as string since we take it from the url as a string\r\n\r\n    if (isDev() && !isNil(finalDevData) && !disableDevData) {\r\n      return merge(finalDefaultData, devData)\r\n    }\r\n\r\n    return finalDefaultData\r\n  }\r\n\r\n  return {\r\n    type,\r\n    validator: (data, options) =>\r\n      validator(isFunction(validationRules) ? validationRules(options) : validationRules, data),\r\n    getDefault: getDefault,\r\n    options: {\r\n      ...DEFAULT_OPTIONS,\r\n      ...options,\r\n    },\r\n  }\r\n}\r\n\r\nexport default createForm\r\n","//\r\n// To create a new form:\r\n// - add the form constant name on FormType.js (follow the `Tip: NEW_FORM_ABOVE`)\r\n// - register the form on the front (config/forms.js)\r\n//\r\n// Note:\r\n// You can set the `disableFormDevData` query parameter to false to disable dev default data.\r\n// see `createForm`\r\n//\r\nimport { getFormReducer, getFormModifier } from './config'\r\nimport { FormAction } from './actions'\r\n\r\nimport { DataCatcherAction, dataCatcherFormReducer } from '../dataCatcher'\r\n\r\nimport { FORM_CUSTOM_ACTION } from './createFormCustomAction'\r\nimport { DEFAULT_FORM_OPTIONS } from './constants'\r\n\r\nexport { default as FormType } from './FormType'\r\nexport * from './config'\r\nexport * from './validation'\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './components'\r\nexport * from './createForm'\r\n\r\nconst dataModifier = (data, formType) => {\r\n  const modifier = getFormModifier(formType)\r\n  return !modifier ? data : modifier(data)\r\n}\r\n\r\nlet DEFAULT_STATE = {}\r\nexport const formReducer = (state = DEFAULT_STATE, action) => {\r\n  switch (action.type) {\r\n    case FormAction.CREATE:\r\n      return state.mergeIn([action.formType], {\r\n        formData: dataModifier(action.data, action.formType),\r\n        options: DEFAULT_FORM_OPTIONS,\r\n      })\r\n\r\n    case FormAction.UPDATE:\r\n      return state.mergeIn([action.formType], {\r\n        formData: dataModifier(action.data, action.formType),\r\n      })\r\n\r\n    case FormAction.RESET:\r\n      const resetForm = (state, action) => {\r\n        if (action.withDefaultData) {\r\n          return state.mergeIn([action.formType], {\r\n            formData: dataModifier(action.data, action.formType),\r\n            options: action.options,\r\n          })\r\n        }\r\n\r\n        return state.mergeIn([action.formType], {\r\n          formData: dataModifier(action.data, action.formType),\r\n        })\r\n      }\r\n      return resetForm(state, action)\r\n\r\n    case FormAction.UPDATE_OPTIONS:\r\n      return state.mergeIn([action.formType, 'options'], action.options)\r\n\r\n    case FormAction.ACTIVATION:\r\n      return state.mergeIn([action.formType], {\r\n        options: {\r\n          isActivated: action.isActivated,\r\n        },\r\n      })\r\n\r\n    case FORM_CUSTOM_ACTION:\r\n      const reducer = getFormReducer(action.formType)\r\n      const data = reducer(state.get(action.formType).toJS(), action)\r\n      return state.mergeIn([action.formType], {\r\n        formData: dataModifier(data.formData, action.formType),\r\n        options: data.options,\r\n      })\r\n\r\n    case DataCatcherAction.POST_CATCHED_DATA:\r\n      return dataCatcherFormReducer(state, action)\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport invariant from 'invariant'\r\n\r\nlet _searches = []\r\nexport const registerSearches = (searches) => {\r\n  _searches = searches\r\n}\r\n\r\nexport const getSearches = (searches) => (\r\n  _searches\r\n)\r\n\r\n/**\r\n * @param  {string} searchType SearchType of the search to retrive\r\n * @return {SearchConfiguration} the configuration for the given SearchType\r\n */\r\nexport const getSearch = (searchType) => {\r\n  const search = find(_searches, (search) => searchType === search.type)\r\n\r\n  invariant(!isNil(search), 'search ' + searchType + ' not registered')\r\n\r\n  return search\r\n}\r\n\r\nexport const getFormatter = (searchType) => {\r\n  const search = getSearch(searchType)\r\n\r\n  const formatter = search.options.formatter\r\n\r\n  invariant((isNil(formatter) || isFunction(formatter)), 'search ' + searchType + ' has no formatter')\r\n\r\n  return formatter\r\n}\r\n\r\nexport const getSearchApiCallFunc = (searchType) => {\r\n  const search = getSearch(searchType)\r\n\r\n  const apiCallFunc = search.apiCallFunc\r\n  invariant(isFunction(apiCallFunc), 'search ' + searchType + ' has no apiCallFunc')\r\n\r\n  return apiCallFunc\r\n}\r\n","import { createAction } from '../redux'\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\nimport { getSearchApiCallFunc } from './config'\r\n\r\nexport const SearchAction = {\r\n  CREATE: 'SEARCH::CREATE',\r\n  UPDATE: 'SEARCH::UPDATE',\r\n  RESET: 'SEARCH::RESET',\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} TYPE The SearchType\r\n * @param {string} formType The SearchType\r\n * @param {any} data The form data\r\n */\r\nexport const initSearch = (searchType, data) =>\r\n  createAction(SearchAction.CREATE, {\r\n    searchType,\r\n    data,\r\n  })\r\n\r\n/**\r\n *\r\n * @param {string} TYPE The SearchType\r\n * @param {string} searchType The SearchType\r\n * @param {any} data The form data\r\n */\r\nexport const updateSearch = (searchType, data) =>\r\n  createAction(SearchAction.UPDATE, {\r\n    searchType,\r\n    data,\r\n  })\r\n\r\n/**\r\n *\r\n * @param {string} TYPE The SearchType\r\n * @param {string} searchType The SearchType\r\n * @param {any} data The form data\r\n */\r\nexport const resetSearch = (searchType, data) =>\r\n  createAction(SearchAction.RESET, {\r\n    searchType,\r\n    data,\r\n  })\r\n\r\nexport const GetSearchListAction = createApiEnumAction('SEARCH::GET')\r\n\r\nexport const getSearchAction = (searchType, props) =>\r\n  createApiCallAction(GetSearchListAction, getSearchApiCallFunc(searchType)(props), {\r\n    searchType,\r\n    props,\r\n  })\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getFormatter } from './config'\r\n\r\nconst getSearchState = (state) => state.search\r\nconst getSearchTypeData = (state, props) => getSearchState(state).get(props.searchType)\r\nconst getSearchType = (state, props) => props.searchType\r\n\r\nexport const makeGetSearchList = () => createSelector(\r\n  [ getSearchTypeData, getSearchType ],\r\n  (searchData, searchType) => {\r\n    if (isNil(searchData) || isNil(searchData.get('list'))) {\r\n      return []\r\n    }\r\n\r\n    const list = searchData.get('list').toJS()\r\n\r\n    const formatter = getFormatter(searchType)\r\n\r\n    if (formatter) {\r\n      return formatter(list)\r\n    }\r\n\r\n    return list\r\n  }\r\n)\r\n\r\nexport const makeIsFetchingSearchList = () => createSelector(\r\n  [ getSearchTypeData ],\r\n  (searchData) => {\r\n    if (isNil(searchData) || isNil(searchData.get('isFetching'))) {\r\n      return false\r\n    }\r\n\r\n    return searchData.get('isFetching')\r\n  }\r\n)\r\n\r\nexport const makeGetSearchError = () => createSelector(\r\n  [ getSearchTypeData ],\r\n  (searchData) => {\r\n    if (isNil(searchData) || isNil(searchData.get('error'))) {\r\n      return false\r\n    }\r\n\r\n    return searchData.get('error').toJS()\r\n  }\r\n)\r\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var flatten = require('./flatten'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var arrayMap = require('./_arrayMap'),\n    baseClone = require('./_baseClone'),\n    baseUnset = require('./_baseUnset'),\n    castPath = require('./_castPath'),\n    copyObject = require('./_copyObject'),\n    customOmitClone = require('./_customOmitClone'),\n    flatRest = require('./_flatRest'),\n    getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nmodule.exports = omit;\n","import clsx from 'clsx'\r\nimport invariant from 'invariant'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport PropTypes from 'prop-types'\r\nimport React from 'react'\r\n\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport InputAdornment from '@material-ui/core/InputAdornment'\r\nimport { withStyles } from '@material-ui/core/styles'\r\nimport TextField from '@material-ui/core/TextField'\r\n\r\nimport CloseIcon from '@material-ui/icons/Close'\r\nimport SearchIcon from '@material-ui/icons/Search'\r\n\r\nconst styles = theme => ({\r\n  search: {\r\n    position: 'relative',\r\n    marginLeft: 0,\r\n    width: '100%',\r\n    [theme.breakpoints.up('sm')]: {\r\n      width: 300,\r\n    },\r\n  },\r\n})\r\n\r\nclass Search extends React.Component {\r\n  state = {\r\n    query: '',\r\n  }\r\n\r\n  handleChange = value => {\r\n    this.setState({\r\n      query: value,\r\n    })\r\n\r\n    this.props.onChange(value)\r\n  }\r\n\r\n  render() {\r\n    const { className, label, classes, searchError } = this.props\r\n\r\n    if (!this.props.show) {\r\n      return <span />\r\n    }\r\n\r\n    invariant(!isEmpty(label), 'Search must have a label')\r\n\r\n    return (\r\n      <div className={clsx(classes.search, className)}>\r\n        <TextField\r\n          // type=\"search\"\r\n          // this might be more html5 but force an \"ugly\" native reset icon\r\n          fullWidth\r\n          placeholder={label}\r\n          value={this.state.query}\r\n          onChange={e => this.handleChange(e.target.value)}\r\n          error={searchError?.localizedMessage}\r\n          helperText={searchError?.localizedMessage}\r\n          InputProps={{\r\n            startAdornment: (\r\n              <InputAdornment position=\"start\">\r\n                <SearchIcon />\r\n              </InputAdornment>\r\n            ),\r\n            endAdornment: (\r\n              <InputAdornment position=\"end\">\r\n                <IconButton size=\"small\" onClick={() => this.handleChange('')}>\r\n                  <CloseIcon fontSize=\"small\" />\r\n                </IconButton>\r\n              </InputAdornment>\r\n            ),\r\n          }}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nSearch.defaultProps = {\r\n  label: '',\r\n}\r\n\r\nSearch.propTypes = {\r\n  show: PropTypes.bool.isRequired,\r\n  label: PropTypes.string,\r\n  className: PropTypes.string,\r\n  onChange: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(Search)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport invariant from 'invariant'\r\n\r\nimport isEqual from 'lodash/isEqual'\r\nimport merge from 'lodash/merge'\r\nimport omit from 'lodash/omit'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport { initSearch, updateSearch, resetSearch, getSearchAction } from '../actions'\r\nimport { makeGetSearchList, makeIsFetchingSearchList, makeGetSearchError } from '../selectors'\r\nimport Search from './Search'\r\n\r\nlet timeOutSearch\r\n\r\nclass SearchContainer extends React.Component {\r\n  state = {\r\n    active: false,\r\n  }\r\n\r\n  componentWillMount() {\r\n    this.props.initSearch(this.props.searchType)\r\n    if (this.props.runSearchAtMount) {\r\n      this.runSearch()\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (!isNull(nextProps.query) && nextProps.query !== this.props.query) {\r\n      this.onHandleChange(nextProps.query)\r\n    } else if (!isEqual(this.props.apiCallProps.body, nextProps.apiCallProps.body)) {\r\n      this.runSearch(null, nextProps)\r\n    }\r\n  }\r\n\r\n  runSearch = (query = null, props = this.props) => {\r\n    props.getSearchAction(props.searchType, {\r\n      body: merge(\r\n        {\r\n          query,\r\n        },\r\n        props.apiCallProps.body\r\n      ),\r\n      ...omit(props.apiCallProps, ['body']),\r\n    })\r\n  }\r\n\r\n  // We save a lot of api calls like that\r\n  static TIMEOUT_SIZE = 800\r\n\r\n  onHandleChange = query => {\r\n    this.props.updateSearch(this.props.searchType, { query })\r\n\r\n    clearTimeout(timeOutSearch)\r\n    if (query.length >= this.props.minLength) {\r\n      timeOutSearch = setTimeout(() => {\r\n        this.runSearch(query)\r\n        this.setState({\r\n          active: true,\r\n        })\r\n      }, SearchContainer.TIMEOUT_SIZE)\r\n\r\n      return\r\n    }\r\n\r\n    this.setState({\r\n      active: false,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { className, label, children, searchList, isFetchingSearchList, searchError, hideInput } =\r\n      this.props\r\n\r\n    invariant(isFunction(children), 'SearchContainer children must be a function')\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <Search\r\n          className={className}\r\n          show={!hideInput}\r\n          label={label}\r\n          onChange={query => {\r\n            this.onHandleChange(query)\r\n          }}\r\n          searchError={searchError}\r\n        />\r\n        {children({\r\n          searchActive: this.state.active,\r\n          searchList,\r\n          isFetchingSearchList,\r\n        })}\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nSearchContainer.defaultProps = {\r\n  hideInput: false,\r\n  runSearchAtMount: false,\r\n  query: null,\r\n\r\n  minLength: 3,\r\n}\r\n\r\nSearchContainer.propTypes = {\r\n  label: PropTypes.string,\r\n  className: PropTypes.string,\r\n  searchType: PropTypes.string.isRequired,\r\n  apiCallProps: PropTypes.object.isRequired,\r\n  hideInput: PropTypes.bool,\r\n\r\n  /**\r\n   * Run the search when mounting the component\r\n   * Used for search with paging and no query required\r\n   */\r\n  runSearchAtMount: PropTypes.bool,\r\n\r\n  /**\r\n   * Defines the query to use.\r\n   * The hideInput prop should be set to true in this case\r\n   */\r\n  query: PropTypes.string,\r\n\r\n  /**\r\n   * Min length of the query to run the search\r\n   */\r\n  minLength: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getSearchList = makeGetSearchList()\r\n  const isFetchingSearchList = makeIsFetchingSearchList()\r\n  const getSearchError = makeGetSearchError()\r\n\r\n  return {\r\n    searchList: getSearchList(state, props),\r\n    isFetchingSearchList: isFetchingSearchList(state, props),\r\n    searchError: getSearchError(state, props),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {\r\n  initSearch,\r\n  updateSearch,\r\n  resetSearch,\r\n  getSearchAction,\r\n})(SearchContainer)\r\n","import Immutable from 'immutable'\r\n\r\nimport { SearchAction, GetSearchListAction } from './actions'\r\n\r\nexport { default as SearchType } from './SearchType'\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './components'\r\nexport * from './config'\r\n\r\nlet DEFAULT_STATE = Immutable.fromJS({})\r\nexport const searchReducer = (state = DEFAULT_STATE, action) => {\r\n  switch (action.type) {\r\n    case SearchAction.CREATE:\r\n      return state.mergeIn([action.searchType], {\r\n        data: null,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n    case SearchAction.UPDATE:\r\n      return state.mergeIn([action.searchType], {\r\n        data: action.data,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n    case SearchAction.RESET:\r\n      return state.mergeIn([action.searchType], {\r\n        data: null,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n    case GetSearchListAction.REQUEST:\r\n      return state.mergeIn([action.data.searchType], {\r\n        list: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetSearchListAction.SUCCESS:\r\n      return state.mergeIn([action.data.searchType], {\r\n        list: action.response.data,\r\n        // TODO: replace by pagination\r\n        from: action.response.from,\r\n        size: action.response.size,\r\n        totalHit: action.response.totalHit,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetSearchListAction.FAILURE:\r\n      return state.mergeIn([action.data.searchType], {\r\n        list: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport invariant from 'invariant'\r\n\r\n// array of statistics groups (see createGroupStatistics)\r\nlet _statistics = []\r\n\r\nexport const registerStatisticsConfig = statistics => {\r\n  _statistics = statistics\r\n}\r\n\r\nexport const getStatisticsConfig = () => _statistics\r\n\r\n/**\r\n * @param  {string} statisticsGroupType StatisticsGroupType\r\n * @return {SearchConfiguration} the configuration for the given StatisticsGroupType\r\n */\r\nexport const getGroupStatistics = statisticsGroupType => {\r\n  const statistics = find(_statistics, statistics => statisticsGroupType === statistics.type)\r\n\r\n  invariant(!isNil(statistics), 'statistics group ' + statisticsGroupType + ' not registered')\r\n\r\n  return statistics\r\n}\r\n\r\n/**\r\n * @param  {string} statisticsGroupType StatisticsGroupType\r\n * @param  {string} statisticsType  type of the statistics to retrive\r\n * @return {SearchConfiguration} the configuration for the given StatisticsGroupType\r\n */\r\nexport const getStatistics = (statisticsGroupType, statisticsType) => {\r\n  const group = getGroupStatistics(statisticsGroupType)\r\n  const groupStatistics = find(group.statistics, statistics => statisticsType === statistics.type)\r\n\r\n  invariant(\r\n    !isNil(groupStatistics),\r\n    'statistics ' + statisticsType + ' not registered for group ' + statisticsGroupType\r\n  )\r\n\r\n  return groupStatistics\r\n}\r\n\r\nexport const getFormatter = (statisticsGroupType, statisticsType) => {\r\n  const statistics = getStatistics(statisticsGroupType, statisticsType)\r\n\r\n  const formatter = statistics.formatter\r\n\r\n  invariant(\r\n    isNil(formatter) || isFunction(formatter),\r\n    'statistics ' + statisticsType + ' has no formatter'\r\n  )\r\n\r\n  return formatter\r\n}\r\n\r\nexport const getStatisticsApiCallFunc = (statisticsGroupType, statisticsType) => {\r\n  const statistics = getStatistics(statisticsGroupType, statisticsType)\r\n\r\n  const apiCallFunc = statistics.apiCallFunc\r\n  invariant(isFunction(apiCallFunc), 'statistics ' + statisticsType + ' has no apiCallFunc')\r\n\r\n  return apiCallFunc\r\n}\r\n","import { createAction } from '../redux'\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\nimport { getStatisticsApiCallFunc } from './config'\r\n\r\nexport const GetStatisticsAction = createApiEnumAction('ORDER_STATS::GET')\r\n\r\nexport const getStatisticsAction = (statisticsGroupType, statisticsType, props) =>\r\n  createApiCallAction(\r\n    GetStatisticsAction,\r\n    getStatisticsApiCallFunc(statisticsGroupType, statisticsType)(props),\r\n    {\r\n      statisticsGroupType,\r\n      statisticsType,\r\n      props,\r\n      requestId: generateUUID(),\r\n    }\r\n  )\r\n\r\nexport const StatisticsAction = {\r\n  UPDATE: 'STATISTICS::UPDATE',\r\n  INIT_CONFIG: 'STATISTICS::INIT_CONFIG',\r\n}\r\n\r\nexport const updateStatisticsOptions = (statisticsGroupType, options) =>\r\n  createAction(StatisticsAction.UPDATE, {\r\n    statisticsGroupType,\r\n    options,\r\n  })\r\n\r\nexport const initStatisticsConfig = (statisticsGroupType, config) =>\r\n  createAction(StatisticsAction.INIT_CONFIG, {\r\n    statisticsGroupType,\r\n    config,\r\n  })\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet TrendingUp = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z\"/>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n  </SvgIcon>\r\n)\r\n\r\nTrendingUp = pure(TrendingUp)\r\nTrendingUp.displayName = 'TrendingUp'\r\nTrendingUp.pmtName = 'SvgIcon'\r\n\r\nexport default TrendingUp\r\n","export { default as template } from './template'\r\n\r\nexport const capitalizeFirstLetter = string => {\r\n  return string.charAt(0).toUpperCase() + string.slice(1)\r\n}\r\n\r\n// This function is used to insert interpreted spaces in string\r\n// In some cases, spaces are not interpreted so you need this function\r\n// to work this out\r\nexport const replaceSpaceWithUnbreakableUnicodeSpace = string => {\r\n  return string.replace(/ /g, '\\u00a0')\r\n}\r\n","import React from 'react'\r\nimport invariant from 'invariant'\r\nimport PropTypes from 'prop-types'\r\nimport clsx from 'clsx'\r\nimport forEach from 'lodash/forEach'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { capitalizeFirstLetter } from 'pmt-utils/string'\r\n\r\nimport { withStyles, withTheme } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => {\r\n  let stylesObject = {}\r\n  stylesObject['alignCenter'] = {\r\n    textAlign: 'center',\r\n  }\r\n  stylesObject['alignLeft'] = {\r\n    textAlign: 'left',\r\n  }\r\n  stylesObject['alignRight'] = {\r\n    textAlign: 'right',\r\n  }\r\n  stylesObject['defaultThemeTextColor'] = {\r\n    color: theme.palette.text.primary,\r\n  }\r\n\r\n  forEach(theme.pmt.typography.fonts, (value, key) => {\r\n    stylesObject[key] = value.style\r\n  })\r\n\r\n  return stylesObject\r\n}\r\n\r\n// This component is used to set our own font theme's styles for texts\r\n// property component - String - specify the HTML entity you want to wrap your children\r\n// property type - String - specify the type of font to get from theme\r\n// property align - String - align text (values : right - left - center)\r\n\r\nclass TypographyCustom extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      component,\r\n      type,\r\n      align,\r\n      skipColor,\r\n      classes,\r\n      className,\r\n      onClick,\r\n      theme,\r\n      html,\r\n      children,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    const alignDefault = align ? align : 'left'\r\n\r\n    invariant(\r\n      !isUndefined(classes[type]),\r\n      `The props type \"${type}\" specified for TypographyCustom does not exist in your theme`\r\n    )\r\n\r\n    const classNameCombined = clsx(\r\n      classes[type],\r\n      classes[`align${capitalizeFirstLetter(alignDefault)}`],\r\n      className,\r\n      {\r\n        [classes.defaultThemeTextColor]: !skipColor,\r\n      }\r\n    )\r\n\r\n    const Component = component\r\n      ? component\r\n      : theme.pmt.typography.fonts[type].component\r\n        ? theme.pmt.typography.fonts[type].component\r\n        : 'div'\r\n\r\n    const dangerouslySetInnerHTML = !isNil(html) ? { __html: html } : null\r\n\r\n    // we keep this solution in case we want to transmit\r\n    // the applied styled from TypographyCustom to an other component\r\n    // this is useless for text ;)\r\n    // we don't add the wrapper component because it duplicates code with same class\r\n    if (isFunction(children)) {\r\n      return children({\r\n        className: classNameCombined,\r\n        onClick,\r\n        dangerouslySetInnerHTML,\r\n        ...otherProps,\r\n      })\r\n    }\r\n\r\n    return (\r\n      <Component\r\n        className={classNameCombined}\r\n        onClick={onClick}\r\n        dangerouslySetInnerHTML={dangerouslySetInnerHTML}\r\n        {...otherProps}\r\n      >\r\n        {children}\r\n      </Component>\r\n    )\r\n  }\r\n}\r\n\r\nTypographyCustom.defaultProps = {\r\n  skipColor: false,\r\n}\r\n\r\nTypographyCustom.propTypes = {\r\n  component: PropTypes.string,\r\n  type: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n  align: PropTypes.string,\r\n  // if skipColor, the default theme text primary color is not applied\r\n  skipColor: PropTypes.bool,\r\n  className: PropTypes.string,\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default withTheme(withStyles(styles)(TypographyCustom))\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PropTypes from 'prop-types'\r\n\r\nimport clsx from 'clsx'\r\nimport { compose } from 'redux'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNull from 'lodash/isNull'\r\nimport keys from 'lodash/keys'\r\n\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport Paper from 'pmt-ui/Paper'\r\nimport TrendingUp from 'pmt-ui/svg-icons/action/trending-up'\r\nimport Tabs, { Tab } from 'pmt-ui/Tabs'\r\nimport Typography from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  header: {\r\n    background: theme.pmt.colors.lightGreen400,\r\n    paddingLeft: theme.spacing(1),\r\n    paddingRight: theme.spacing(1),\r\n  },\r\n  content: {\r\n    padding: theme.spacing(2),\r\n    position: 'relative',\r\n  },\r\n  icon: {\r\n    height: theme.spacing(2),\r\n    marginRight: theme.spacing(1),\r\n    width: theme.spacing(2),\r\n  },\r\n  title: {\r\n    color: theme.pmt.colors.white,\r\n    lineHeight: '48px',\r\n  },\r\n  tab: {\r\n    color: theme.pmt.colors.white,\r\n    minWidth: 50,\r\n  },\r\n  progress: {\r\n    marginTop: 20,\r\n    marginBottom: 20,\r\n  },\r\n  contentHasNoData: {\r\n    height: '100%',\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n  },\r\n})\r\n\r\nconst Graph = ({\r\n  changeFilter,\r\n  classes,\r\n  datasets,\r\n  icon,\r\n  filters,\r\n  filtersState,\r\n  labels,\r\n  options,\r\n  name,\r\n  type,\r\n  isFetching,\r\n}) => {\r\n  const hasData = !isEmpty(datasets) && !isEmpty(datasets[0].data)\r\n\r\n  return (\r\n    <Paper>\r\n      <div className={clsx(classes.header, 'u-overflowHidden')}>\r\n        <Typography className={`${classes.title} u-floatLeft`} variant=\"subtitle1\" align=\"left\">\r\n          {React.cloneElement(icon, {\r\n            className: classes.icon,\r\n          })}\r\n          {name}\r\n        </Typography>\r\n\r\n        {!isEmpty(filters) &&\r\n          !isNull(changeFilter) && (\r\n            <Tabs\r\n              className=\"u-floatRight\"\r\n              value={filtersState}\r\n              onChange={(e, filter) => changeFilter(filter)}\r\n            >\r\n              {keys(filters).map(filter => (\r\n                <Tab\r\n                  key={filter}\r\n                  className={classes.tab}\r\n                  value={filter}\r\n                  label={filters[filter].label}\r\n                />\r\n              ))}\r\n            </Tabs>\r\n          )}\r\n      </div>\r\n\r\n      <div className={clsx(classes.content, { [classes.contentHasNoData]: !hasData })}>\r\n        {isFetching ? (\r\n          <LoadingBlock classes={{ loadingBlockContainer: classes.progress }} show />\r\n        ) : !hasData ? (\r\n          <div>{tr('global.statistics.graph.no_data')}</div>\r\n        ) : (\r\n          React.cloneElement(type, {\r\n            data: {\r\n              labels,\r\n              datasets,\r\n            },\r\n            options,\r\n          })\r\n        )}\r\n      </div>\r\n    </Paper>\r\n  )\r\n}\r\n\r\nGraph.propTypes = {\r\n  changeFilter: PropTypes.func,\r\n  datasets: PropTypes.array.isRequired,\r\n  icon: PropTypes.element,\r\n  filters: PropTypes.object,\r\n  filtersState: PropTypes.string,\r\n  labels: PropTypes.array.isRequired,\r\n  options: PropTypes.object.isRequired,\r\n  name: PropTypes.string.isRequired,\r\n  type: PropTypes.element.isRequired,\r\n}\r\n\r\nGraph.defaultProps = {\r\n  icon: <TrendingUp />,\r\n}\r\n\r\nexport default compose(withStyles(styles))(Graph)\r\n","import { createSelector } from 'reselect'\r\nimport invariant from 'invariant'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getFormatter } from './config'\r\n\r\nconst getStatisticsState = state => state.statistics\r\nconst getStatisticsGroupType = (state, props) => {\r\n  invariant(!isEmpty(props.groupType), `Missing 'groupType' prop`)\r\n  return props.groupType\r\n}\r\nconst getStatisticsType = (state, props) => {\r\n  invariant(!isEmpty(props.type), `Missing 'type' prop`)\r\n  return props.type\r\n}\r\n\r\nconst makeGetStatisticsGroupTypeData = () =>\r\n  createSelector([getStatisticsState, getStatisticsGroupType], (statisticsState, groupType) => {\r\n    if (isNil(statisticsState) || isNil(statisticsState.get(groupType))) {\r\n      return null\r\n    }\r\n\r\n    return statisticsState.get(groupType)\r\n  })\r\n\r\nexport const makeGetStatisticsOptions = () =>\r\n  createSelector([makeGetStatisticsGroupTypeData()], statisticsData => {\r\n    if (isNil(statisticsData) || isNil(statisticsData.get('options'))) {\r\n      return null\r\n    }\r\n\r\n    return statisticsData.get('options').toJS()\r\n  })\r\n\r\nexport const makeGetStatisticsConfig = () =>\r\n  createSelector([makeGetStatisticsGroupTypeData()], statisticsData => {\r\n    if (isNil(statisticsData) || isNil(statisticsData.get('config'))) {\r\n      return null\r\n    }\r\n\r\n    return statisticsData.get('config').toJS()\r\n  })\r\n\r\n// returns the items for the stats\r\nexport const makeGetStatisticsItems = () =>\r\n  createSelector(\r\n    [\r\n      makeGetStatisticsGroupTypeData(),\r\n      getStatisticsGroupType,\r\n      getStatisticsType,\r\n      makeGetStatisticsOptions(),\r\n    ],\r\n    (groupStatisticsState, groupType, type, options) => {\r\n      if (isNil(groupStatisticsState)) {\r\n        return null\r\n      }\r\n\r\n      const statisticsData = groupStatisticsState.get(type)\r\n\r\n      if (isNil(statisticsData) || isNil(statisticsData.get('data'))) {\r\n        return null\r\n      }\r\n\r\n      if (isNil(statisticsData) || isNil(statisticsData.get('isFetching'))) {\r\n        return false\r\n      }\r\n\r\n      const isFetching = statisticsData.get('isFetching')\r\n\r\n      // if we are fetching the data, we don't want to return data:\r\n      // the options has changed, but not the data, so we would call the formatter with inconsistant\r\n      // data.\r\n      // avoid not necessary computing, that could lead to crashed due to the inconsistant data\r\n      if (isFetching) {\r\n        return null\r\n      }\r\n\r\n      const dataState = statisticsData.get('data')\r\n\r\n      if (!dataState) {\r\n        return null\r\n      }\r\n\r\n      const itemsState = dataState.get('items')\r\n\r\n      let data = null\r\n      if (!itemsState) {\r\n        // some requests, like Top up balance for day does not have items list but directly a json.\r\n        // we need to use this data\r\n        data = dataState.toJS()\r\n      } else {\r\n        // otherwise use items\r\n        data = itemsState.toJS()\r\n      }\r\n\r\n      // look for a formatter\r\n      const formatter = getFormatter(groupType, type)\r\n      if (formatter) {\r\n        return formatter(data, options)\r\n      }\r\n\r\n      return data\r\n    }\r\n  )\r\n\r\nexport const makeIsFetchingStatistics = () =>\r\n  createSelector(\r\n    [makeGetStatisticsGroupTypeData(), getStatisticsType],\r\n    (groupStatisticsState, type) => {\r\n      if (isNil(groupStatisticsState)) {\r\n        return null\r\n      }\r\n\r\n      const statisticsData = groupStatisticsState.get(type)\r\n\r\n      if (isNil(statisticsData) || isNil(statisticsData.get('isFetching'))) {\r\n        return false\r\n      }\r\n\r\n      return statisticsData.get('isFetching')\r\n    }\r\n  )\r\n\r\nexport const makeGetStatisticsError = () =>\r\n  createSelector(\r\n    [makeGetStatisticsGroupTypeData(), getStatisticsType],\r\n    (groupStatisticsState, type) => {\r\n      if (isNil(groupStatisticsState)) {\r\n        return null\r\n      }\r\n\r\n      const statisticsData = groupStatisticsState.get(type)\r\n\r\n      if (isNil(statisticsData) || isNil(statisticsData.get('error'))) {\r\n        return null\r\n      }\r\n\r\n      return statisticsData.get('error').toJS()\r\n    }\r\n  )\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isNull from 'lodash/isNull'\r\nimport moment from 'moment'\r\n\r\nimport { getStatisticsAction, updateStatisticsOptions } from '../actions'\r\n\r\nimport {\r\n  makeGetStatisticsItems,\r\n  makeIsFetchingStatistics,\r\n  makeGetStatisticsError,\r\n  makeGetStatisticsOptions,\r\n  makeGetStatisticsConfig,\r\n} from '../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give a restaurants group statistics\r\n *\r\n * Requirements:\r\n * - apiCallProps with rGroupId\r\n * - type defined in ../StatisticsGroupType\r\n *\r\n * see `withRestaurantNews`\r\n */\r\nclass StatisticsContainer extends React.Component {\r\n  componentWillMount() {\r\n    this.loadStatistics(this.props.options)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    /**\r\n     * check if options have changed\r\n     * this is used for imbricated calls to this container\r\n     * this will not impact first level container\r\n     * moment object have identifiers which invalidates isEqual\r\n     * so we use isSame when moment, isEqual otherwise to check if our options have changed\r\n     */\r\n    const res = Object.keys(nextProps.options).filter(option => {\r\n      // we don't want to reload on the API for every option changed.\r\n      // keysThatRunApiReload contains the options keys that must produce a reload\r\n      if (nextProps.config.keysThatRunApiReload.indexOf(option) === -1) {\r\n        return false\r\n      }\r\n\r\n      // this option is listed as an option that re-run the api calls once changed, verify it has\r\n      // changed\r\n\r\n      if (moment.isMoment(nextProps.options[option])) {\r\n        return !nextProps.options[option].isSame(this.props.options[option])\r\n      }\r\n      return !isEqual(nextProps.options[option], this.props.options[option])\r\n    })\r\n\r\n    if (res.length > 0 || !this.props.options) {\r\n      this.loadStatistics(nextProps.options)\r\n    }\r\n  }\r\n\r\n  loadStatistics(options = null) {\r\n    // group container didn't handle options yet\r\n    if (!this.props.options) {\r\n      return\r\n    }\r\n    this.props.getStatisticsAction(this.props.groupType, this.props.type, {\r\n      options: options || this.props.options,\r\n    })\r\n  }\r\n\r\n  handleChangeOptions = (options, reload = false) => {\r\n    !reload\r\n      ? this.props.updateStatisticsOptions(this.props.groupType, options)\r\n      : this.loadStatistics(options)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      className,\r\n      hideTimeRange,\r\n      isFetchingStatistics,\r\n      statistics,\r\n      errorStatistics,\r\n      children,\r\n      options,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    return (\r\n      !isNull(options) &&\r\n      children({\r\n        isFetchingStatistics,\r\n        statistics,\r\n        errorStatistics,\r\n        options,\r\n        onChangeOptions: this.handleChangeOptions,\r\n        ...otherProps,\r\n      })\r\n    )\r\n  }\r\n}\r\n\r\nStatisticsContainer.defaultProps = {}\r\n\r\nStatisticsContainer.propTypes = {\r\n  children: PropTypes.func.isRequired,\r\n\r\n  groupType: PropTypes.string.isRequired,\r\n  type: PropTypes.string.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getStatisticsItems = makeGetStatisticsItems()\r\n  const getIsFetching = makeIsFetchingStatistics()\r\n  const getError = makeGetStatisticsError()\r\n  const getOptions = makeGetStatisticsOptions()\r\n  const getConfig = makeGetStatisticsConfig()\r\n\r\n  return {\r\n    // TODO: rename statisticsItems\r\n    statistics: getStatisticsItems(state, props),\r\n    isFetchingStatistics: getIsFetching(state, props),\r\n    errorStatistics: getError(state, props),\r\n    options: getOptions(state, props),\r\n    config: getConfig(state, props),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {\r\n  getStatisticsAction,\r\n  updateStatisticsOptions,\r\n})(StatisticsContainer)\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\nexport const QueryParamType = {\r\n  STRING: 'STRING',\r\n  // can have 'subType' config: 'INTEGER'\r\n  ARRAY: 'ARRAY',\r\n  DATE: 'DATE',\r\n  BOOL: 'BOOL',\r\n  INTEGER: 'INTEGER',\r\n}\r\n\r\nexport const StatisticsPeriod = {\r\n  TODAY: 'TODAY',\r\n  LAST_SEVEN_DAYS: 'LAST_SEVEN_DAYS',\r\n  LAST_THIRTY_DAYS: 'LAST_THIRTY_DAYS',\r\n  LAST_QUARTER: 'LAST_QUARTER',\r\n  CUSTOM: 'CUSTOM',\r\n}\r\n\r\nexport const getStatisticsPeriodOptions = () => {\r\n  return [\r\n    {\r\n      label: tr('global.date.today'),\r\n      value: StatisticsPeriod.TODAY,\r\n    },\r\n    {\r\n      label: tr('global.date.last_seven_days'),\r\n      value: StatisticsPeriod.LAST_SEVEN_DAYS,\r\n    },\r\n    {\r\n      label: tr('global.date.last_thirty_days'),\r\n      value: StatisticsPeriod.LAST_THIRTY_DAYS,\r\n    },\r\n    {\r\n      label: tr('global.date.choose_period'),\r\n      value: StatisticsPeriod.CUSTOM,\r\n    },\r\n  ]\r\n}\r\n\r\nexport const getStatisticsPeriodLabel = period =>\r\n  getStatisticsPeriodOptions().find(periodOption => periodOption.value === period).label\r\n\r\nexport const getSalesFilterKeys = () => ({\r\n  HOUR: 'hour',\r\n  DAY: 'day',\r\n  WEEK: 'week',\r\n  MONTH: 'month',\r\n})\r\n\r\nexport const getSalesFilter = () => ({\r\n  hour: {\r\n    label: tr('global.date.hour'),\r\n    filter: 'DD/MM/YYYY HH:mm',\r\n  },\r\n  day: {\r\n    label: tr('global.date.day'),\r\n    filter: 'DD/MM/YYYY',\r\n  },\r\n  week: {\r\n    label: tr('global.date.week'),\r\n    filter: 'DD/MM/YYYY',\r\n  },\r\n  month: {\r\n    label: tr('global.date.month'),\r\n    filter: 'YYYY-MM',\r\n  },\r\n})\r\n","import moment from 'moment'\r\nimport invariant from 'invariant'\r\nimport isEqualWith from 'lodash/isEqualWith'\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport { QueryParamType, StatisticsPeriod } from './constants'\r\n\r\nexport const statisticsOptionsAreEqual = (config, options, optionsToCompare) => {\r\n  // no previous props, so nothing to compare with\r\n  if (!options || !optionsToCompare) {\r\n    return\r\n  }\r\n\r\n  const optionsAreEqual = isEqualWith(options, optionsToCompare, (options, optionsToCompare) =>\r\n    getQueryParamsConfig(config).every(queryParamConfig => {\r\n      const optionValue = options[queryParamConfig.name]\r\n      const optionValueToCompare = optionsToCompare[queryParamConfig.name]\r\n\r\n      switch (queryParamConfig.type) {\r\n        case QueryParamType.DATE:\r\n          return (\r\n            optionValue.format(queryParamConfig.dateFormat) ===\r\n            optionValueToCompare.format(queryParamConfig.dateFormat)\r\n          )\r\n\r\n        default:\r\n          return isEqual(optionValue, optionValueToCompare)\r\n      }\r\n    })\r\n  )\r\n  return optionsAreEqual\r\n}\r\n\r\n/**\r\n * keys of the options we must handle on the url and their config\r\n */\r\nexport const getQueryParamsConfig = config => {\r\n  return [\r\n    {\r\n      name: 'fromTime',\r\n      type: QueryParamType.DATE,\r\n      dateFormat: 'DD/MM/YYYY',\r\n    },\r\n    {\r\n      name: 'toTime',\r\n      type: QueryParamType.DATE,\r\n      dateFormat: 'DD/MM/YYYY',\r\n      endOfDay: true,\r\n    },\r\n    {\r\n      name: 'period',\r\n      type: QueryParamType.STRING,\r\n    },\r\n    ...(config && config.queryParamsConfig ? config.queryParamsConfig : []),\r\n  ]\r\n}\r\n\r\nconst getDefaultCustomValue = () => {\r\n  return {\r\n    fromTime: moment().startOf('day'),\r\n    toTime: moment().endOf('day'),\r\n  }\r\n}\r\n\r\nexport const getPeriodDates = (period, defaultCustomValue = getDefaultCustomValue()) => {\r\n  switch (period) {\r\n    case StatisticsPeriod.TODAY:\r\n      return {\r\n        fromTime: moment().startOf('day'),\r\n        toTime: moment().endOf('day'),\r\n      }\r\n\r\n    case StatisticsPeriod.LAST_SEVEN_DAYS:\r\n      return {\r\n        fromTime: moment()\r\n          .subtract(1, 'week')\r\n          .startOf('day'),\r\n        toTime: moment().endOf('day'),\r\n      }\r\n\r\n    case StatisticsPeriod.LAST_THIRTY_DAYS:\r\n      return {\r\n        fromTime: moment()\r\n          .subtract(29, 'days')\r\n          .startOf('day'),\r\n        toTime: moment().endOf('day'),\r\n      }\r\n\r\n    case StatisticsPeriod.CUSTOM:\r\n      return defaultCustomValue\r\n\r\n    default:\r\n      invariant(false, `Invalid period ${period}`)\r\n  }\r\n}\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport invariant from 'invariant'\r\nimport moment from 'moment'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { connect } from 'react-redux'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { updateStatisticsOptions, initStatisticsConfig } from '../actions'\r\nimport { makeGetStatisticsOptions, makeGetStatisticsConfig } from '../selectors'\r\nimport { updatePageQueries, Query } from 'pmt-modules/routing'\r\nimport { statisticsOptionsAreEqual, getQueryParamsConfig, getPeriodDates } from '../utils'\r\nimport { QueryParamType, StatisticsPeriod } from '../constants'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give a restaurants group statistics\r\n *\r\n * Requirements:\r\n * - groupType defined in ../StatisticsGroupType\r\n *\r\n * see `withRestaurantNews`\r\n */\r\nclass StatisticsGroupContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    const config = this.props.defaultConfig\r\n\r\n    const keysThatRunApiReload = this.getKeysThatRunApiReload(config)\r\n\r\n    // build options\r\n    // we take the default options and the options in the url\r\n    const options = {\r\n      ...this.props.defaultOptions,\r\n      ...this.getUrlOptions(getQueryParamsConfig(config)),\r\n    }\r\n\r\n    // handle period\r\n\r\n    const periodDates = getPeriodDates(\r\n      options.period,\r\n      // default dates when choosing custom, we want the current dates\r\n      {\r\n        fromTime: options.fromTime,\r\n        toTime: options.toTime,\r\n      }\r\n    )\r\n    options.fromTime = periodDates.fromTime\r\n    options.toTime = periodDates.toTime\r\n\r\n    // in some cases we can have a toTime on the url but not the fromTime (or the inverse). It\r\n    // could lead to invalid time range so we modify it here\r\n    if (options.fromTime.isAfter(options.toTime)) {\r\n      options.fromTime = moment(options.toTime)\r\n        .subtract(1, 'month')\r\n        .startOf('day')\r\n    }\r\n\r\n    config.keysThatRunApiReload = keysThatRunApiReload\r\n\r\n    this.handleInitConfigAndOptions(config, options)\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (!statisticsOptionsAreEqual(this.props.config, prevProps.options, this.props.options)) {\r\n      // options has changed, we want to update the url\r\n\r\n      // when options changes, we put them on the url\r\n      const queryParams = {}\r\n\r\n      getQueryParamsConfig(this.props.config).forEach(queryParamConfig => {\r\n        let value = this.props.options[queryParamConfig.name]\r\n\r\n        switch (queryParamConfig.type) {\r\n          case QueryParamType.DATE:\r\n            value = value.format(queryParamConfig.dateFormat)\r\n            break\r\n\r\n          case queryParamConfig.ARRAY:\r\n            value = value.join(',')\r\n            break\r\n\r\n          default:\r\n          // nothing to format\r\n        }\r\n\r\n        if (value !== null && value.length > 0) {\r\n          queryParams[queryParamConfig.name] = value\r\n        } else {\r\n          queryParams[queryParamConfig.name] = Query.REMOVE_ME\r\n        }\r\n      })\r\n\r\n      // if the period defined is not CUSTOM, we do not need to set the fromTime / toTime\r\n      if (!isEmpty(queryParams['period']) && queryParams['period'] !== StatisticsPeriod.CUSTOM) {\r\n        queryParams.fromTime = Query.REMOVE_ME\r\n        queryParams.toTime = Query.REMOVE_ME\r\n      }\r\n\r\n      this.props.updatePageQueries(queryParams)\r\n    }\r\n  }\r\n\r\n  // list of the keys that must run the api reload of the stats\r\n  // we always have a fromTime and a toTime\r\n  getKeysThatRunApiReload(config) {\r\n    return [\r\n      // put fromTime and toTime as keysThatRunApiReload by default\r\n      'fromTime',\r\n      'toTime',\r\n      'period',\r\n      ...(config && config.keysThatRunApiReload ? config.keysThatRunApiReload : []),\r\n    ]\r\n  }\r\n\r\n  /**\r\n   * Returns the options from the url.\r\n   * For now we handle only the options register on config.keysThatRunApiReload\r\n   */\r\n  getUrlOptions(queryParamsConfig) {\r\n    const urlOptions = {}\r\n\r\n    queryParamsConfig.forEach(queryParamConfig => {\r\n      let queryParam = getQueryParam(queryParamConfig.name)\r\n      if (queryParam) {\r\n        // transform dates\r\n        switch (queryParamConfig.type) {\r\n          case QueryParamType.DATE:\r\n            // Note: for a date, the config must add a dateFormat\r\n            invariant(\r\n              !isEmpty(queryParamConfig.dateFormat),\r\n              `'dateFormat' config requied for '${queryParamConfig.name}'`\r\n            )\r\n            queryParam = moment(queryParam, queryParamConfig.dateFormat).startOf('day')\r\n\r\n            // queryParamConfig accept an endOfDay bool for date QueryParamType.DATE\r\n            if (queryParamConfig.endOfDay === true) {\r\n              queryParam = queryParam.endOf('day')\r\n            }\r\n            break\r\n\r\n          case QueryParamType.INTEGER:\r\n            queryParam = parseInt(queryParam, 10)\r\n            break\r\n\r\n          case QueryParamType.ARRAY:\r\n            // an array on url is a string where each item is seperate with a ','\r\n            queryParam = queryParam.split(',')\r\n            if (queryParamConfig.subType && queryParamConfig.subType === QueryParamType.INTEGER) {\r\n              queryParam = queryParam.map(param => parseInt(param, 10))\r\n            }\r\n            break\r\n\r\n          default:\r\n          // no transformation required\r\n        }\r\n\r\n        urlOptions[queryParamConfig.name] = queryParam\r\n      }\r\n    })\r\n\r\n    // if the period defined is not CUSTOM, we will need to regenerate the fromTime / toTime\r\n    if (!isEmpty(urlOptions['period']) && urlOptions['period'] !== StatisticsPeriod.CUSTOM) {\r\n      urlOptions.fromTime = null\r\n      urlOptions.toTime = null\r\n    }\r\n\r\n    return urlOptions\r\n  }\r\n\r\n  handleInitConfigAndOptions = (config, options) => {\r\n    // Note: we could use options as defaultOptions but options contains the url default params\r\n    // and it would block us from reset all the filters\r\n\r\n    const defaultOptions = {\r\n      ...this.props.defaultOptions,\r\n      // copy default generated data on constructo\r\n      fromTime: options.fromTime,\r\n      toTime: options.toTime,\r\n      period: options.period,\r\n    }\r\n\r\n    this.props.initStatisticsConfig(this.props.groupType, {\r\n      ...config,\r\n      defaultOptions: { ...defaultOptions },\r\n    })\r\n\r\n    this.props.updateStatisticsOptions(this.props.groupType, {\r\n      ...options,\r\n    })\r\n  }\r\n\r\n  handleChangeOptions = options => {\r\n    this.props.updateStatisticsOptions(this.props.groupType, options)\r\n  }\r\n\r\n  handleChangeDateRange = dateRange => {\r\n    if (\r\n      this.props.options.fromTime.valueOf() !== dateRange[0].valueOf() ||\r\n      this.props.options.toTime.valueOf() !== dateRange[1].valueOf()\r\n    ) {\r\n      this.handleChangeOptions({\r\n        ...this.props.options,\r\n        period: StatisticsPeriod.CUSTOM,\r\n        fromTime: dateRange[0],\r\n        toTime: dateRange[1],\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { children, config, options } = this.props\r\n\r\n    if (!config || !options) {\r\n      // wait for default options to be processed\r\n      return null\r\n    }\r\n\r\n    return children({\r\n      options,\r\n      config,\r\n      onChangeOptions: this.handleChangeOptions,\r\n    })\r\n  }\r\n}\r\n\r\nStatisticsGroupContainer.defaultProps = {}\r\n\r\nStatisticsGroupContainer.propTypes = {\r\n  children: PropTypes.func.isRequired,\r\n\r\n  groupType: PropTypes.string.isRequired,\r\n\r\n  defaultOptions: PropTypes.object,\r\n\r\n  config: PropTypes.object,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getOptions = makeGetStatisticsOptions()\r\n  const getConfig = makeGetStatisticsConfig()\r\n\r\n  return {\r\n    options: getOptions(state, props),\r\n    config: getConfig(state, props),\r\n  }\r\n}\r\n\r\nStatisticsGroupContainer.QueryParamType = QueryParamType\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    initStatisticsConfig,\r\n    updateStatisticsOptions,\r\n    updatePageQueries,\r\n  }\r\n)(StatisticsGroupContainer)\r\n","import findIndex from 'lodash/findIndex'\r\nimport isNumber from 'lodash/isNumber'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\n\r\n// import manually the language files we need\r\n// TODO: do this dynamically\r\nimport 'moment/locale/fr'\r\nimport 'moment/locale/de'\r\nimport 'moment/locale/it'\r\nimport 'moment/locale/es'\r\n// en is imported by default\r\n\r\nimport { DAYS } from 'pmt-modules/api/constants'\r\nimport { getCurrentLanguageWithoutRegionCode } from 'pmt-modules/i18n/utils'\r\nimport { isOrderPlugin } from 'pmt-modules/environment'\r\n\r\nconst keys = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']\r\n\r\nconst MS_FORMAT = 'x'\r\n\r\nexport const DATE_FORMAT_MS = 'DD/MM/YY HH:mm:ss.SSS'\r\n\r\nexport const MINUTE_AS_MS = 60 * 1000\r\nexport const HOUR_AS_MS = 3600 * 1000\r\nexport const DAY_AS_MS = 86400 * 1000\r\n\r\n// we have set the warning 30 minutes before the last authorized order (delay is counted)\r\nexport const DELAY_TO_WARN_CLOSING_HOUR = MINUTE_AS_MS * 30\r\n\r\n// display duration in human readable.\r\n// eg. 3 minutes / a few seconds\r\nexport const formatDuration = (startDate, endDate) => {\r\n  let end = fromMs(endDate)\r\n  let start = fromMs(startDate)\r\n  let diff = end.diff(start)\r\n  const duration = moment.duration(diff)\r\n  return duration.locale(getCurrentLanguageWithoutRegionCode()).humanize()\r\n}\r\n\r\n// display duration in human readable.\r\n// eg. 3 minutes / a few seconds\r\nexport const formatDurationInSeconds = seconds => {\r\n  let diff = now().diff(seconds * 1000)\r\n  const duration = moment.duration(diff)\r\n  return duration.locale(getCurrentLanguageWithoutRegionCode()).humanize()\r\n}\r\n\r\nexport const fromMs = ms => moment(ms, MS_FORMAT).locale(getCurrentLanguageWithoutRegionCode())\r\n\r\nexport const parseDate = (date, format) =>\r\n  moment(date, format).locale(getCurrentLanguageWithoutRegionCode())\r\n\r\nexport const now = () => {\r\n  return moment()\r\n}\r\n\r\nexport const anyToDate = date => {\r\n  if (isNumber(date)) {\r\n    return fromMs(date)\r\n  }\r\n\r\n  if (isNil(date)) {\r\n    return moment()\r\n  }\r\n\r\n  return moment(date) // copy in order to not change the reference data.\r\n}\r\n\r\nexport const getMs = date => {\r\n  if (isNumber(date)) {\r\n    return fromMs(date)\r\n  }\r\n\r\n  const copiedDate = anyToDate(date)\r\n  return copiedDate.valueOf()\r\n}\r\n\r\nexport const millisecondsToMinutes = timestamp => {\r\n  return Math.round(timestamp / MINUTE_AS_MS)\r\n}\r\n\r\nexport const millisecondsToDays = timestamp => {\r\n  return Math.round(timestamp / DAY_AS_MS)\r\n}\r\n\r\n// DateParam: either a moment or an hour timestamp\r\n\r\n/**\r\n * The api use the english day names as keys.\r\n * We use this function to get the key for the given date.\r\n */\r\nexport const getDayKey = dateParam => {\r\n  const date = anyToDate(dateParam)\r\n  const dayIndex = date.day()\r\n\r\n  return keys[dayIndex]\r\n}\r\n\r\nexport const getDayIndexForKey = key => {\r\n  return findIndex(keys, k => k === key)\r\n}\r\n\r\nexport const getI18nDayNameForKey = key => {\r\n  const days = {\r\n    monday: moment.weekdays(1),\r\n    tuesday: moment.weekdays(2),\r\n    wednesday: moment.weekdays(3),\r\n    thursday: moment.weekdays(4),\r\n    friday: moment.weekdays(5),\r\n    saturday: moment.weekdays(6),\r\n    sunday: moment.weekdays(7),\r\n  }\r\n\r\n  return days[key]\r\n}\r\n\r\nexport const getI18nDayShortNameForKey = key => {\r\n  const days = {\r\n    monday: moment.weekdaysShort(1),\r\n    tuesday: moment.weekdaysShort(2),\r\n    wednesday: moment.weekdaysShort(3),\r\n    thursday: moment.weekdaysShort(4),\r\n    friday: moment.weekdaysShort(5),\r\n    saturday: moment.weekdaysShort(6),\r\n    sunday: moment.weekdaysShort(7),\r\n  }\r\n\r\n  return days[key]\r\n}\r\n\r\n/**\r\n * @param date1 Moment|number|MsTimestamp\r\n * @type {[type]}\r\n */\r\nexport const isSameDay = (date1Param, date2Param) => {\r\n  if (isNil(date1Param) || isNil(date1Param)) {\r\n    return false\r\n  }\r\n\r\n  const date1 = anyToDate(date1Param)\r\n  const date2 = anyToDate(date2Param)\r\n\r\n  return date1.isSame(date2, 'day') && date1.isSame(date2, 'month') && date1.isSame(date2, 'year')\r\n}\r\n\r\nexport const getHourFromMs = dateParam => parseInt(getMs(dateParam) / 1000 / 3600, 10) % 24\r\n\r\nexport const getMinuteFromMs = dateParam => parseInt(((getMs(dateParam) / 1000) % 3600) / 60, 10)\r\n\r\nexport const getMsFromHour = hour => parseInt(hour * HOUR_AS_MS, 10)\r\n\r\nexport const getMsFromMinute = minute => parseInt(minute * MINUTE_AS_MS, 10)\r\n\r\nexport const getHourAndMinuteFromMs = date => {\r\n  return {\r\n    hour: getHourFromMs(date),\r\n    minute: getMinuteFromMs(date),\r\n  }\r\n}\r\n\r\nexport const toStartOfDay = dateParam => {\r\n  const date = anyToDate(dateParam)\r\n  return moment(date)\r\n    .hour(0)\r\n    .minute(0)\r\n    .second(0)\r\n    .millisecond(0)\r\n}\r\n\r\n/**\r\n * @param date Moment|number|MsTimestamp\r\n */\r\nexport const isToday = dateParam => {\r\n  let date = anyToDate(dateParam)\r\n  return isSameDay(date, moment())\r\n}\r\n\r\n//\r\n// Format\r\n//\r\n\r\n// const formatTwoDigits = (number) => (\r\n//   number > 9 ? `${number}` : `0${number}`\r\n// )\r\n\r\nexport const formatHour = (dateParam, separator = 'h', shouldUseUtc = false) => {\r\n  let date = anyToDate(dateParam)\r\n\r\n  if (shouldUseUtc) {\r\n    date = date.utcOffset(0)\r\n  }\r\n\r\n  // if (isNumber(date)) {\r\n  //   return `${formatTwoDigits(getHourFromMs(date))}:${formatTwoDigits(getMinuteFromMs(date))}`\r\n  // }\r\n\r\n  return `${date.format('LT')}` // time format, depending on the locale (8:30 PM for english, 20.30 for German, 20h30 for French)\r\n}\r\n\r\nexport const formatDate = (dateParam, format = 'DD-MM-YYYY HH:mm') => {\r\n  const date = anyToDate(dateParam)\r\n\r\n  // https://paymytable.atlassian.net/browse/PP-1025\r\n  if (isOrderPlugin()) {\r\n    return date.utcOffset(0).format(format)\r\n  }\r\n\r\n  return date.format(format)\r\n}\r\n\r\nexport const todayWithHour = hourTimestamp =>\r\n  // /!\\ if you change this part:\r\n  // test the cases with summer time changing at 3am (when ordering D-1 for D, and D for D - D being the day with time change)\r\n  getDateWithHoursAndMinutes(moment(), hourTimestamp)\r\n\r\nexport const diff = (dateParam1, dateParam2, format = 'days') => {\r\n  const d1 = anyToDate(dateParam1)\r\n  const d2 = anyToDate(dateParam2)\r\n\r\n  return d2.diff(d1, format)\r\n}\r\n\r\n/**\r\n * get number of weekdays between two timestamp\r\n */\r\nexport const nbWeekdaysBetween = (d1, d2, isoWeekday) => {\r\n  d1 = moment(d1)\r\n  d2 = moment(d2)\r\n\r\n  var daysToAdd = (7 + isoWeekday - d1.isoWeekday()) % 7\r\n\r\n  var nextDay = d1.clone().add(daysToAdd, 'days')\r\n  if (nextDay.isAfter(d2)) {\r\n    return 0\r\n  }\r\n\r\n  var weeksBetween = d2.diff(nextDay, 'weeks')\r\n\r\n  return weeksBetween + 1\r\n}\r\n\r\nexport const getTimestampForHourWithDate = dateParam => {\r\n  const date = anyToDate(dateParam)\r\n  return (date.hour() * 3600 + date.minute() * 60) * 1000\r\n}\r\n\r\n/**\r\n * moment.js .day() use sunday as first day.\r\n * We use monday as first day on the API.\r\n * Use this function to convert.\r\n *\r\n * @link http://momentjs.com/docs/#/get-set/iso-weekday/\r\n */\r\nexport const getPmtDayIndex = dateParam => {\r\n  const date = anyToDate(dateParam)\r\n\r\n  // In moment: 7 is Monday or Sunday, depending of the iso weekday\r\n  // If the locale assigns Monday as the first day of the week, moment().weekday(0) will be Monday. If Sunday is the first day of the week, moment().weekday(0) will be Sunday.\r\n\r\n  /**\r\n   * isoWeekday: Gets or sets the ISO day of the week with 1 being Monday and 7 being Sunday.\r\n   * day: This method can be used to set the day of the week, with Sunday as 0 and Saturday as 6.\r\n   */\r\n  const day = date.day()\r\n\r\n  const daysMomentToPmt = {\r\n    '0': DAYS.SUNDAY,\r\n    '1': DAYS.MONDAY,\r\n    '2': DAYS.TUESDAY,\r\n    '3': DAYS.WEDNESDAY,\r\n    '4': DAYS.THURSDAY,\r\n    '5': DAYS.FRIDAY,\r\n    '6': DAYS.SATURDAY,\r\n  }\r\n\r\n  return daysMomentToPmt[day]\r\n}\r\n\r\n/**\r\n * Build a Moment with this date and this hours/minutes (from a hour-and-minute timestamp)\r\n *\r\n * /!\\ if you change this part:\r\n * test the cases with summer time changing at 3am (when ordering D-1 for D, and D for D - D being the day with time change)\r\n */\r\nexport const getDateWithHoursAndMinutes = (date, hourMinuteTimestamp) => {\r\n  let hours = Math.floor(hourMinuteTimestamp / 1000 / 60 / 60)\r\n  let minutes = Math.floor(hourMinuteTimestamp / 1000 / 60) - hours * 60\r\n\r\n  return moment(date)\r\n    .hours(hours)\r\n    .minutes(minutes)\r\n}\r\n\r\n/**\r\n * Convert timestamp to hour minute string format HH:mm\r\n */\r\nexport const timestampToHourMinuteAsString = timestamp => {\r\n  let hours = Math.floor(timestamp / 1000 / 60 / 60)\r\n  let minutes = Math.floor(timestamp / 1000 / 60) - hours * 60\r\n\r\n  hours = hours < 10 ? `0${hours}` : hours\r\n  minutes = minutes < 10 ? `0${minutes}` : minutes\r\n\r\n  return `${hours}:${minutes}`\r\n}\r\n\r\n/**\r\n * Convert hour minute string format HH:mm to timestamp\r\n */\r\nexport const hourMinuteAsStringToTimestamp = str => {\r\n  let [hours, minutes] = str.split(':')\r\n\r\n  hours = parseInt(hours, 10) * 60 * 60 * 1000\r\n  minutes = parseInt(minutes, 10) * 60 * 1000\r\n\r\n  return hours + minutes\r\n}\r\n\r\nexport const getCurrentMonth = () => moment().month()\r\nexport const getCurrentYear = () => moment().year()\r\nexport const getMonths = () => moment.months()\r\n","const CalendarMode = {\r\n  SINGLE: 'single',\r\n  MULTIPLE: 'multiple',\r\n  RANGE: 'range',\r\n}\r\n\r\nexport default CalendarMode\r\n","import React, { Component } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport each from 'lodash/each'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport isArray from 'lodash/isArray'\r\nimport moment from 'moment'\r\n\r\nimport { anyToDate } from 'pmt-utils/date'\r\n\r\n// import theme\r\n// airbnb.css\r\n// confetti.css\r\n// dark.css\r\n// light.css\r\n// material_blue.css\r\n// material_green.css\r\n// material_orange.css\r\n// material_red.css\r\n\r\nimport 'flatpickr/dist/themes/airbnb.css'\r\n\r\nimport CalendarMode from './CalendarMode'\r\n\r\n// could be dynamically imported if we want to reduce the bundle size\r\nimport Flatpickr from 'flatpickr'\r\n\r\nexport { default as CalendarMode } from './CalendarMode'\r\n\r\nconst hooks = ['onOpen', 'onMonthChange', 'onYearChange', 'onReady', 'onValueUpdate', 'onDayCreate']\r\n\r\nconst hooksToHandle = ['onChange', 'onClose']\r\n\r\n/**\r\n * see https://github.com/coderhaoxin/react-flatpickr/blob/master/lib/index.js\r\n * @type {Object}\r\n *\r\n *\r\n */\r\nclass Calendar extends Component {\r\n  static propTypes = {\r\n    defaultDate: PropTypes.string,\r\n\r\n    /**\r\n     * Can contains all the flatpickr options and hooks\r\n     * - https://chmln.github.io/flatpickr/options/\r\n     */\r\n    options: PropTypes.object,\r\n\r\n    //\r\n    // https://chmln.github.io/flatpickr/events/#hooks\r\n    //\r\n\r\n    onChange: PropTypes.func,\r\n    onOpen: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    onMonthChange: PropTypes.func,\r\n    onYearChange: PropTypes.func,\r\n    onReady: PropTypes.func,\r\n    onValueUpdate: PropTypes.func,\r\n    onDayCreate: PropTypes.func,\r\n\r\n    value: PropTypes.oneOfType([\r\n      PropTypes.string,\r\n      PropTypes.array,\r\n      PropTypes.object,\r\n      PropTypes.number,\r\n    ]),\r\n    children: PropTypes.any,\r\n  }\r\n\r\n  static defaultProps = {\r\n    options: {},\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.onReceiveProps(this.props, false)\r\n  }\r\n\r\n  componentWillReceiveProps(props) {\r\n    this.onReceiveProps(props, true)\r\n  }\r\n\r\n  onChange = (selectedDates, dateStr, instance) => {\r\n    if (this.props.onChange) {\r\n      this.notifyCalendarChangement(selectedDates, dateStr, instance, this.props.onChange)\r\n    }\r\n  }\r\n\r\n  onClose = (selectedDates, dateStr, instance) => {\r\n    if (this.props.onClose) {\r\n      this.node.blur && this.node.blur()\r\n      this.notifyCalendarChangement(selectedDates, dateStr, instance, this.props.onClose)\r\n    }\r\n  }\r\n\r\n  notifyCalendarChangement = (selectedDates, dateStr, instance, callback) => {\r\n    // mode can be: single, multiple, range\r\n    // default: single\r\n    if (this.props.options.mode && this.props.options.mode !== CalendarMode.SINGLE) {\r\n      callback(selectedDates.map(date => moment(date)))\r\n    } else {\r\n      callback(moment(selectedDates[0]))\r\n    }\r\n  }\r\n\r\n  onReceiveProps(props, isUpdate) {\r\n    // we mutate the options, so we clone it first\r\n    let options = cloneDeep(props.options)\r\n\r\n    if (!isUpdate) {\r\n      // add creation default options\r\n      options = {\r\n        ...options,\r\n      }\r\n    }\r\n\r\n    // Add prop hooks to options\r\n    each(hooks, hook => {\r\n      if (props[hook]) {\r\n        options[hook] = props[hook]\r\n      }\r\n    })\r\n\r\n    // register the hooks we handle on this component\r\n    each(hooksToHandle, hook => {\r\n      options[hook] = this[hook]\r\n    })\r\n\r\n    //\r\n    // Transform dates, we handle moment dates, but flatpickr handle only javascript date.\r\n    //\r\n\r\n    if (options.minDate) {\r\n      options.minDate = anyToDate(props.options.minDate)\r\n        .toDate()\r\n        .startOf('day')\r\n        .toDate()\r\n    }\r\n\r\n    if (options.maxDate) {\r\n      options.maxDate = anyToDate(props.options.maxDate)\r\n        .toDate()\r\n        .endOf('day')\r\n        .toDate()\r\n    }\r\n\r\n    if (options.defaultDate) {\r\n      options.defaultDate = anyToDate(props.options.defaultDate)\r\n        .startOf('day')\r\n        .toDate()\r\n    }\r\n\r\n    if (!this.flatpickr) {\r\n      // initialize flatpickr object\r\n      if (process.env.FEATURE_FLATPICKR) {\r\n        this.flatpickr = new Flatpickr(this.node, options)\r\n      } else {\r\n        throw new Error('Missing FEATURE_FLATPICKR feature flag')\r\n      }\r\n    } else {\r\n      const optionsKeys = Object.getOwnPropertyNames(options)\r\n\r\n      for (let index = optionsKeys.length - 1; index >= 0; index--) {\r\n        const key = optionsKeys[index]\r\n        let value = options[key]\r\n\r\n        // Hook handlers must be set as an array\r\n        if (hooks.indexOf(key) !== -1 && !isArray(value)) {\r\n          value = [value]\r\n        }\r\n\r\n        if (hooksToHandle.indexOf(key) !== -1 && !isArray(value)) {\r\n          value = [value]\r\n        }\r\n\r\n        this.flatpickr.set(key, value)\r\n      }\r\n    }\r\n\r\n    if (props.hasOwnProperty('value')) {\r\n      let values = null\r\n      if (!isArray(props.value)) {\r\n        values = anyToDate(props.value).toDate()\r\n      } else if (isArray(props.value)) {\r\n        values = props.value.map((value, index) => {\r\n          // force end of day to the selected end day\r\n          // Note: not seem to work, or work only on update, not for the first (defalut) value\r\n          // displayed\r\n          if (index === 1) {\r\n            if (this.props.options.mode === CalendarMode.RANGE && value) {\r\n              return anyToDate(value)\r\n                .endOf('day')\r\n                .toDate()\r\n            }\r\n          }\r\n\r\n          return anyToDate(value).toDate()\r\n        })\r\n      }\r\n\r\n      // setDate(date, triggerChange, dateStrFormat)#\r\n      // Sets the current selected date(s) todate, which can be a date string, a Date, or anArray\r\n      // of the Dates.\r\n      // Optionally, pass true as the second argument to force any onChange events to fire. And if\r\n      // you’re passing a date string with a format other than your dateFormat, provide a\r\n      // dateStrFormat e.g. \"m/d/Y\".\r\n      this.flatpickr.setDate(values, false)\r\n    }\r\n\r\n    if (props.open) {\r\n      this.flatpickr.open()\r\n    }\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    this.flatpickr.destroy()\r\n  }\r\n\r\n  render() {\r\n    // eslint-disable-next-line no-unused-vars\r\n    const { open, options, defaultDate, value, children, ...props } = this.props\r\n\r\n    // Don't pass hooks to dom node\r\n    each(hooks, hook => {\r\n      delete props[hook]\r\n    })\r\n\r\n    return options.wrap ? (\r\n      <div\r\n        {...props}\r\n        ref={node => {\r\n          this.node = node\r\n        }}\r\n      >\r\n        {children}\r\n      </div>\r\n    ) : (\r\n      <input\r\n        {...props}\r\n        style={{\r\n          visibility: 'hidden',\r\n          width: 0,\r\n          height: 0,\r\n        }}\r\n        ref={node => {\r\n          this.node = node\r\n        }}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nCalendar.Mode = CalendarMode\r\n\r\nexport default Calendar\r\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nmodule.exports = baseRange;\n","var baseRange = require('./_baseRange'),\n    isIterateeCall = require('./_isIterateeCall'),\n    toFinite = require('./toFinite');\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nmodule.exports = createRange;\n","var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Popover from 'pmt-ui/Popover'\r\n\r\nconst styles = theme => ({\r\n  header: {\r\n    textAlign: 'center',\r\n    marginTop: theme.spacing(1),\r\n    paddingLeft: theme.spacing(1),\r\n    paddingRight: theme.spacing(1),\r\n  },\r\n  popoverRoot: {\r\n    // maxHeight: '90vh',\r\n    overflow: 'hidden',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n})\r\n\r\n/**\r\n * Display the ListChooser as a popover.\r\n * It is displayed as a dialog on desktop screens.\r\n * It can be forced using the `ListChooser.type` prop with `ListChooserType.POPOVER` value\r\n */\r\n\r\nconst PopoverView = ({ anchorEl, open, header, content, classes, onClose }) => (\r\n  <Popover\r\n    open={open}\r\n    anchorEl={anchorEl}\r\n    onClose={onClose}\r\n    anchorOrigin={{\r\n      vertical: 'bottom',\r\n      horizontal: 'center',\r\n    }}\r\n    className={classes.popoverRoot}\r\n    transformOrigin={{\r\n      vertical: 'center',\r\n      horizontal: 'center',\r\n    }}\r\n  >\r\n    {header && <div className={classes.header}>{header}</div>}\r\n\r\n    {content}\r\n  </Popover>\r\n)\r\n\r\nexport default withStyles(styles)(PopoverView)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Dialog, { DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\n\r\nconst styles = theme => ({\r\n  dialogPaper: {\r\n    height: '80vh',\r\n    overflow: 'hidden',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    minWidth: '20vw',\r\n  },\r\n  dialogContent: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n})\r\n\r\n/**\r\n * Display the ListChooser as a dialog.\r\n * It is displayed as a dialog on small screens.\r\n * It can be forced using the `ListChooser.type` prop with `ListChooserType.DIALOG` value\r\n */\r\nconst DialogView = ({ anchorEl, open, header, content, classes, onClose }) => (\r\n  <Dialog\r\n    open={open}\r\n    onClose={onClose}\r\n    onBackdropClick={onClose}\r\n    classes={{\r\n      paper: classes.dialogPaper,\r\n    }}\r\n    disableBackdropClick={false}\r\n    disableEscapeKeyDown={false}\r\n  >\r\n    <DialogTitle>{header}</DialogTitle>\r\n\r\n    <DialogContent\r\n      classes={{\r\n        root: classes.dialogContent,\r\n      }}\r\n    >\r\n      {content}\r\n    </DialogContent>\r\n  </Dialog>\r\n)\r\n\r\nexport default withStyles(styles)(DialogView)\r\n","/**\r\n * The list chooser can be displayed in different type of views, defined here.\r\n *\r\n * See `ListChooser.type` prop to force the type.\r\n */\r\nexport default {\r\n  /**\r\n   * Display as popover. Default for desktop screens.\r\n   */\r\n  POPOVER: 'ListChooserType::POPOVER',\r\n\r\n  /**\r\n   * Display as a dialog. Default for non-desktop screens.\r\n   */\r\n  DIALOG: 'ListChooserType::DIALOG',\r\n}\r\n","/**\r\n * Default: null\r\n *\r\n * Defines different display possibilities for the Body\r\n */\r\nconst ViewType = {\r\n  // Must not be on 'multiple' mode.\r\n  // Will display a radio button next to the selected value\r\n  RADIO: 'radio',\r\n}\r\n\r\nexport default ViewType\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Button from 'pmt-ui/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    margin: `${theme.spacing(1)} auto`,\r\n  },\r\n})\r\n\r\nconst Pagination = ({ paging, onLoadMore, classes }) => {\r\n  if (paging && paging.cursors && paging.cursors.after) {\r\n    return (\r\n      <Button className={classes.root} onClick={() => onLoadMore(paging.cursors.after)}>\r\n        {tr('global.load_more')}\r\n      </Button>\r\n    )\r\n  }\r\n  return null\r\n}\r\nexport default withStyles(styles)(Pagination)\r\n","import warning from 'warning'\r\n\r\n/**\r\n * Returns a number whose value is limited to the given range.\r\n *\r\n * @param {number} value The value to be clamped\r\n * @param {number} min The lower boundary of the output range\r\n * @param {number} max The upper boundary of the output range\r\n * @returns {number} A number in the range [min, max]\r\n */\r\nfunction clamp(value, min, max) {\r\n  if (value < min) {\r\n    return min\r\n  }\r\n  if (value > max) {\r\n    return max\r\n  }\r\n  return value\r\n}\r\n\r\n/**\r\n * Converts a color object with type and values to a string.\r\n *\r\n * @param {object} color - Decomposed color\r\n * @param {string} color.type - One of, 'rgb', 'rgba', 'hsl', 'hsla'\r\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\r\n * @returns {string} A CSS color string\r\n */\r\nexport function convertColorToString(color) {\r\n  const { type, values } = color\r\n\r\n  if (type.indexOf('rgb') > -1) {\r\n    // Only convert the first 3 values to int (i.e. not alpha)\r\n    for (let i = 0; i < 3; i++) {\r\n      values[i] = parseInt(values[i], 10)\r\n    }\r\n  }\r\n\r\n  let colorString\r\n\r\n  if (type.indexOf('hsl') > -1) {\r\n    colorString = `${color.type}(${values[0]}, ${values[1]}%, ${values[2]}%`\r\n  } else {\r\n    colorString = `${color.type}(${values[0]}, ${values[1]}, ${values[2]}`\r\n  }\r\n\r\n  if (values.length === 4) {\r\n    colorString += `, ${color.values[3]})`\r\n  } else {\r\n    colorString += ')'\r\n  }\r\n\r\n  return colorString\r\n}\r\n\r\n/**\r\n * see http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript\r\n * @param color\r\n * @returns {String}\r\n */\r\nexport function uintColorToHexadecimal(color) {\r\n  return '#' + ('000000' + (color & 0xffffff).toString(16)).slice(-6)\r\n}\r\n\r\nexport function hexadecimalToUintColor(color) {\r\n  // remove '#'\r\n  if (color && color.length > 1 && color[0] === '#') {\r\n    color = color.slice(1, color.length)\r\n  }\r\n  return Number(parseInt(color, 16).toString(10))\r\n}\r\n\r\n/**\r\n * Converts a color from CSS hex format to CSS rgb format.\r\n *\r\n *  @param {string} color - Hex color, i.e. #nnn or #nnnnnn\r\n *  @returns {string} A CSS rgb color string\r\n */\r\nexport function convertHexToRGB(color) {\r\n  if (color.length === 4) {\r\n    let extendedColor = '#'\r\n    for (let i = 1; i < color.length; i++) {\r\n      extendedColor += color.charAt(i) + color.charAt(i)\r\n    }\r\n    color = extendedColor\r\n  }\r\n\r\n  const values = {\r\n    r: parseInt(color.substr(1, 2), 16),\r\n    g: parseInt(color.substr(3, 2), 16),\r\n    b: parseInt(color.substr(5, 2), 16),\r\n  }\r\n\r\n  return `rgb(${values.r}, ${values.g}, ${values.b})`\r\n}\r\n\r\n/**\r\n * Returns an object with the type and values of a color.\r\n *\r\n * Note: Does not support rgb % values and color names.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {{type, values: number[]}} A MUI color object\r\n */\r\nexport function decomposeColor(color) {\r\n  if (color.charAt(0) === '#') {\r\n    return decomposeColor(convertHexToRGB(color))\r\n  }\r\n\r\n  const marker = color.indexOf('(')\r\n\r\n  warning(\r\n    marker !== -1,\r\n    `Material-UI: The ${color} color was not parsed correctly,\r\n  because it has an unsupported format (color name or RGB %). This may cause issues in component rendering.`\r\n  )\r\n\r\n  const type = color.substring(0, marker)\r\n  let values = color.substring(marker + 1, color.length - 1).split(',')\r\n  values = values.map(value => parseFloat(value))\r\n\r\n  return { type, values }\r\n}\r\n\r\n/**\r\n * Calculates the contrast ratio between two colors.\r\n *\r\n * Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\r\n *\r\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {number} A contrast ratio value in the range 0 - 21 with 2 digit precision.\r\n */\r\nexport function getContrastRatio(foreground, background) {\r\n  const lumA = getLuminance(foreground)\r\n  const lumB = getLuminance(background)\r\n  const contrastRatio = (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05)\r\n\r\n  return Number(contrastRatio.toFixed(2)) // Truncate at two digits\r\n}\r\n\r\n/**\r\n * The relative brightness of any point in a color space,\r\n * normalized to 0 for darkest black and 1 for lightest white.\r\n *\r\n * Formula: https://www.w3.org/WAI/GL/wiki/Relative_luminance\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {number} The relative brightness of the color in the range 0 - 1\r\n */\r\nexport function getLuminance(color) {\r\n  color = decomposeColor(color)\r\n\r\n  if (color.type.indexOf('rgb') > -1) {\r\n    const rgb = color.values.map(val => {\r\n      val /= 255 // normalized\r\n      return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4)\r\n    })\r\n    return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3)) // Truncate at 3 digits\r\n  } else if (color.type.indexOf('hsl') > -1) {\r\n    return color.values[2] / 100\r\n  }\r\n}\r\n\r\n/**\r\n * Darken or lighten a colour, depending on its luminance.\r\n * Light colors are darkened, dark colors are lightened.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\r\nexport function emphasize(color, coefficient = 0.15) {\r\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient)\r\n}\r\n\r\n/**\r\n * Set the absolute transparency of a color.\r\n * Any existing alpha values are overwritten.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} value - value to set the alpha channel to in the range 0 -1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\r\nexport function fade(color, value) {\r\n  color = decomposeColor(color)\r\n  value = clamp(value, 0, 1)\r\n\r\n  if (color.type === 'rgb' || color.type === 'hsl') {\r\n    color.type += 'a'\r\n  }\r\n  color.values[3] = value\r\n\r\n  return convertColorToString(color)\r\n}\r\n\r\n/**\r\n * Darkens a color.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\r\nexport function darken(color, coefficient) {\r\n  color = decomposeColor(color)\r\n  coefficient = clamp(coefficient, 0, 1)\r\n\r\n  if (color.type.indexOf('hsl') > -1) {\r\n    color.values[2] *= 1 - coefficient\r\n  } else if (color.type.indexOf('rgb') > -1) {\r\n    for (let i = 0; i < 3; i++) {\r\n      color.values[i] *= 1 - coefficient\r\n    }\r\n  }\r\n  return convertColorToString(color)\r\n}\r\n\r\n/**\r\n * Lightens a color.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\r\nexport function lighten(color, coefficient) {\r\n  color = decomposeColor(color)\r\n  coefficient = clamp(coefficient, 0, 1)\r\n\r\n  if (color.type.indexOf('hsl') > -1) {\r\n    color.values[2] += (100 - color.values[2]) * coefficient\r\n  } else if (color.type.indexOf('rgb') > -1) {\r\n    for (let i = 0; i < 3; i++) {\r\n      color.values[i] += (255 - color.values[i]) * coefficient\r\n    }\r\n  }\r\n\r\n  return convertColorToString(color)\r\n}\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport find from 'lodash/find'\r\nimport isObject from 'lodash/isObject'\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport ViewType from '../ViewType'\r\nimport { LoadingBlock } from 'pmt-ui/LoadingBlock'\r\nimport List, { ListItem } from 'pmt-ui/List'\r\nimport TextField from 'pmt-ui/TextField'\r\nimport Typography from 'pmt-ui/Typography'\r\nimport Pagination from './Pagination'\r\nimport { lighten } from 'pmt-utils/theme/colorManipulator'\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\nimport Radio from 'pmt-ui/Radio'\r\n\r\nconst styles = theme => ({\r\n  body: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  listContainer: {\r\n    display: 'flex',\r\n    minHeight: 40,\r\n  },\r\n  list: {\r\n    overflowY: 'auto',\r\n    width: '100%',\r\n  },\r\n  fieldArea: {\r\n    margin: theme.spacing(1),\r\n    marginTop: 0,\r\n  },\r\n  itemSelectedNotMultiple: {\r\n    background: lighten(theme.palette.primary.light, 0.5),\r\n  },\r\n  itemMultipleCheckbox: {\r\n    width: 24,\r\n    height: 24,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n  itemSingleRadio: {\r\n    width: 24,\r\n    height: 24,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n})\r\n\r\nconst OptionSingle = ({ option, viewType, selected, classes }) => {\r\n  switch (viewType) {\r\n    case ViewType.RADIO:\r\n      return (\r\n        <span>\r\n          <Radio checked={selected} color=\"primary\" className={classes.itemSingleRadio} />\r\n          &nbsp;\r\n          {option.label}\r\n        </span>\r\n      )\r\n\r\n    default:\r\n      return <span>{option.label}</span>\r\n  }\r\n}\r\n\r\nconst Option = ({ option, optionRenderer, multiple, selected, viewType, classes, onClick }) => (\r\n  <ListItem\r\n    className={clsx({\r\n      [classes.itemSelectedNotMultiple]: selected && !multiple && viewType !== ViewType.RADIO,\r\n    })}\r\n    button\r\n    onClick={onClick}\r\n    disabled={option.disabled}\r\n  >\r\n    {optionRenderer ? (\r\n      optionRenderer(option)\r\n    ) : multiple ? (\r\n      <React.Fragment>\r\n        <Checkbox checked={selected} color=\"primary\" className={classes.itemMultipleCheckbox} />\r\n        {option.label}\r\n      </React.Fragment>\r\n    ) : (\r\n      <OptionSingle viewType={viewType} option={option} classes={classes} selected={selected} />\r\n    )}\r\n  </ListItem>\r\n)\r\n\r\n/**\r\n * View that display the content of the select view:\r\n * - a text field to search on the list (query)\r\n * - the list. It is filtered if there is any query\r\n */\r\nconst Body = ({\r\n  classes,\r\n  values,\r\n  comparator,\r\n  hasOptions,\r\n  filteredOptions,\r\n  query,\r\n  isFetching,\r\n  multiple,\r\n  onSelect,\r\n  handleQueryChange,\r\n  disableSearch,\r\n  paging,\r\n  onLoadMore,\r\n  viewType,\r\n}) => (\r\n  <div className={classes.body}>\r\n    {!disableSearch && (\r\n      <div className={classes.fieldArea}>\r\n        <TextField\r\n          autoComplete=\"off\"\r\n          autoFocus\r\n          label={tr('global.list_chooser.search')}\r\n          value={query}\r\n          onChange={handleQueryChange}\r\n          margin=\"normal\"\r\n          onKeyPress={event => {\r\n            // handle key enter press\r\n            if (event.key === 'Enter') {\r\n              event.preventDefault()\r\n              if (!isEmpty(filteredOptions)) {\r\n                onSelect(filteredOptions[0].value)\r\n              }\r\n            }\r\n          }}\r\n        />\r\n      </div>\r\n    )}\r\n\r\n    <div className={classes.listContainer}>\r\n      <LoadingBlock show={isFetching}>\r\n        {!hasOptions ? (\r\n          <div>\r\n            <Typography variant=\"caption\">{tr('global.list_chooser.no_data_available')}</Typography>\r\n          </div>\r\n        ) : isEmpty(filteredOptions) ? (\r\n          isEmpty(query) ? (\r\n            <div>\r\n              <Typography variant=\"caption\">{tr('global.list_chooser.search')}</Typography>\r\n            </div>\r\n          ) : (\r\n            <Typography variant=\"caption\">{tr('global.list_chooser.no_results')}</Typography>\r\n          )\r\n        ) : (\r\n          <List className={classes.list}>\r\n            {filteredOptions.map((option, index) => (\r\n              <Option\r\n                key={isObject(option.value) ? index : option.value}\r\n                classes={classes}\r\n                multiple={multiple}\r\n                option={option}\r\n                viewType={viewType}\r\n                selected={\r\n                  find(values, value => {\r\n                    if (!value) {\r\n                      // if value is null we check the option value is null\r\n                      return !option.value\r\n                    }\r\n\r\n                    // use comparator if exists and there is a value (avoir to check null on the\r\n                    // comparator)\r\n                    if (comparator && value) {\r\n                      return comparator(option.value, value)\r\n                    }\r\n\r\n                    if (value && value.id && option.value.id) {\r\n                      return value.id === option.value.id\r\n                    }\r\n\r\n                    return option.value === value\r\n                  }) !== undefined\r\n                }\r\n                onClick={() => onSelect(option.value)}\r\n              />\r\n            ))}\r\n          </List>\r\n        )}\r\n      </LoadingBlock>\r\n    </div>\r\n\r\n    <Pagination paging={paging} onLoadMore={onLoadMore} />\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(Body)\r\n","import React from 'react'\r\n\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\n/**\r\n * Content header view.\r\n * Display the title of the select view.\r\n */\r\nconst Header = ({ title }) =>\r\n  !title ? null : (\r\n    <Typography variant=\"body2\" component=\"header\">\r\n      {title}\r\n    </Typography>\r\n  )\r\n\r\nexport default Header\r\n","/*!\n * Fuse.js v3.2.1 - Lightweight fuzzy-search (http://fusejs.io)\n * \n * Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Fuse\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Fuse\"] = factory();\n\telse\n\t\troot[\"Fuse\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 8);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (obj) {\n  return !Array.isArray ? Object.prototype.toString.call(obj) === '[object Array]' : Array.isArray(obj);\n};\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar bitapRegexSearch = __webpack_require__(5);\nvar bitapSearch = __webpack_require__(7);\nvar patternAlphabet = __webpack_require__(4);\n\nvar Bitap = function () {\n  function Bitap(pattern, _ref) {\n    var _ref$location = _ref.location,\n        location = _ref$location === undefined ? 0 : _ref$location,\n        _ref$distance = _ref.distance,\n        distance = _ref$distance === undefined ? 100 : _ref$distance,\n        _ref$threshold = _ref.threshold,\n        threshold = _ref$threshold === undefined ? 0.6 : _ref$threshold,\n        _ref$maxPatternLength = _ref.maxPatternLength,\n        maxPatternLength = _ref$maxPatternLength === undefined ? 32 : _ref$maxPatternLength,\n        _ref$isCaseSensitive = _ref.isCaseSensitive,\n        isCaseSensitive = _ref$isCaseSensitive === undefined ? false : _ref$isCaseSensitive,\n        _ref$tokenSeparator = _ref.tokenSeparator,\n        tokenSeparator = _ref$tokenSeparator === undefined ? / +/g : _ref$tokenSeparator,\n        _ref$findAllMatches = _ref.findAllMatches,\n        findAllMatches = _ref$findAllMatches === undefined ? false : _ref$findAllMatches,\n        _ref$minMatchCharLeng = _ref.minMatchCharLength,\n        minMatchCharLength = _ref$minMatchCharLeng === undefined ? 1 : _ref$minMatchCharLeng;\n\n    _classCallCheck(this, Bitap);\n\n    this.options = {\n      location: location,\n      distance: distance,\n      threshold: threshold,\n      maxPatternLength: maxPatternLength,\n      isCaseSensitive: isCaseSensitive,\n      tokenSeparator: tokenSeparator,\n      findAllMatches: findAllMatches,\n      minMatchCharLength: minMatchCharLength\n    };\n\n    this.pattern = this.options.isCaseSensitive ? pattern : pattern.toLowerCase();\n\n    if (this.pattern.length <= maxPatternLength) {\n      this.patternAlphabet = patternAlphabet(this.pattern);\n    }\n  }\n\n  _createClass(Bitap, [{\n    key: 'search',\n    value: function search(text) {\n      if (!this.options.isCaseSensitive) {\n        text = text.toLowerCase();\n      }\n\n      // Exact match\n      if (this.pattern === text) {\n        return {\n          isMatch: true,\n          score: 0,\n          matchedIndices: [[0, text.length - 1]]\n        };\n      }\n\n      // When pattern length is greater than the machine word length, just do a a regex comparison\n      var _options = this.options,\n          maxPatternLength = _options.maxPatternLength,\n          tokenSeparator = _options.tokenSeparator;\n\n      if (this.pattern.length > maxPatternLength) {\n        return bitapRegexSearch(text, this.pattern, tokenSeparator);\n      }\n\n      // Otherwise, use Bitap algorithm\n      var _options2 = this.options,\n          location = _options2.location,\n          distance = _options2.distance,\n          threshold = _options2.threshold,\n          findAllMatches = _options2.findAllMatches,\n          minMatchCharLength = _options2.minMatchCharLength;\n\n      return bitapSearch(text, this.pattern, this.patternAlphabet, {\n        location: location,\n        distance: distance,\n        threshold: threshold,\n        findAllMatches: findAllMatches,\n        minMatchCharLength: minMatchCharLength\n      });\n    }\n  }]);\n\n  return Bitap;\n}();\n\n// let x = new Bitap(\"od mn war\", {})\n// let result = x.search(\"Old Man's War\")\n// console.log(result)\n\nmodule.exports = Bitap;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isArray = __webpack_require__(0);\n\nvar deepValue = function deepValue(obj, path, list) {\n  if (!path) {\n    // If there's no path left, we've gotten to the object we care about.\n    list.push(obj);\n  } else {\n    var dotIndex = path.indexOf('.');\n    var firstSegment = path;\n    var remaining = null;\n\n    if (dotIndex !== -1) {\n      firstSegment = path.slice(0, dotIndex);\n      remaining = path.slice(dotIndex + 1);\n    }\n\n    var value = obj[firstSegment];\n\n    if (value !== null && value !== undefined) {\n      if (!remaining && (typeof value === 'string' || typeof value === 'number')) {\n        list.push(value.toString());\n      } else if (isArray(value)) {\n        // Search each item in the array.\n        for (var i = 0, len = value.length; i < len; i += 1) {\n          deepValue(value[i], remaining, list);\n        }\n      } else if (remaining) {\n        // An object. Recurse further.\n        deepValue(value, remaining, list);\n      }\n    }\n  }\n\n  return list;\n};\n\nmodule.exports = function (obj, path) {\n  return deepValue(obj, path, []);\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function () {\n  var matchmask = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var minMatchCharLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n  var matchedIndices = [];\n  var start = -1;\n  var end = -1;\n  var i = 0;\n\n  for (var len = matchmask.length; i < len; i += 1) {\n    var match = matchmask[i];\n    if (match && start === -1) {\n      start = i;\n    } else if (!match && start !== -1) {\n      end = i - 1;\n      if (end - start + 1 >= minMatchCharLength) {\n        matchedIndices.push([start, end]);\n      }\n      start = -1;\n    }\n  }\n\n  // (i-1 - start) + 1 => i - start\n  if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n    matchedIndices.push([start, i - 1]);\n  }\n\n  return matchedIndices;\n};\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (pattern) {\n  var mask = {};\n  var len = pattern.length;\n\n  for (var i = 0; i < len; i += 1) {\n    mask[pattern.charAt(i)] = 0;\n  }\n\n  for (var _i = 0; _i < len; _i += 1) {\n    mask[pattern.charAt(_i)] |= 1 << len - _i - 1;\n  }\n\n  return mask;\n};\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar SPECIAL_CHARS_REGEX = /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g;\n\nmodule.exports = function (text, pattern) {\n  var tokenSeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : / +/g;\n\n  var regex = new RegExp(pattern.replace(SPECIAL_CHARS_REGEX, '\\\\$&').replace(tokenSeparator, '|'));\n  var matches = text.match(regex);\n  var isMatch = !!matches;\n  var matchedIndices = [];\n\n  if (isMatch) {\n    for (var i = 0, matchesLen = matches.length; i < matchesLen; i += 1) {\n      var match = matches[i];\n      matchedIndices.push([text.indexOf(match), match.length - 1]);\n    }\n  }\n\n  return {\n    // TODO: revisit this score\n    score: isMatch ? 0.5 : 1,\n    isMatch: isMatch,\n    matchedIndices: matchedIndices\n  };\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (pattern, _ref) {\n  var _ref$errors = _ref.errors,\n      errors = _ref$errors === undefined ? 0 : _ref$errors,\n      _ref$currentLocation = _ref.currentLocation,\n      currentLocation = _ref$currentLocation === undefined ? 0 : _ref$currentLocation,\n      _ref$expectedLocation = _ref.expectedLocation,\n      expectedLocation = _ref$expectedLocation === undefined ? 0 : _ref$expectedLocation,\n      _ref$distance = _ref.distance,\n      distance = _ref$distance === undefined ? 100 : _ref$distance;\n\n  var accuracy = errors / pattern.length;\n  var proximity = Math.abs(expectedLocation - currentLocation);\n\n  if (!distance) {\n    // Dodge divide by zero error.\n    return proximity ? 1.0 : accuracy;\n  }\n\n  return accuracy + proximity / distance;\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bitapScore = __webpack_require__(6);\nvar matchedIndices = __webpack_require__(3);\n\nmodule.exports = function (text, pattern, patternAlphabet, _ref) {\n  var _ref$location = _ref.location,\n      location = _ref$location === undefined ? 0 : _ref$location,\n      _ref$distance = _ref.distance,\n      distance = _ref$distance === undefined ? 100 : _ref$distance,\n      _ref$threshold = _ref.threshold,\n      threshold = _ref$threshold === undefined ? 0.6 : _ref$threshold,\n      _ref$findAllMatches = _ref.findAllMatches,\n      findAllMatches = _ref$findAllMatches === undefined ? false : _ref$findAllMatches,\n      _ref$minMatchCharLeng = _ref.minMatchCharLength,\n      minMatchCharLength = _ref$minMatchCharLeng === undefined ? 1 : _ref$minMatchCharLeng;\n\n  var expectedLocation = location;\n  // Set starting location at beginning text and initialize the alphabet.\n  var textLen = text.length;\n  // Highest score beyond which we give up.\n  var currentThreshold = threshold;\n  // Is there a nearby exact match? (speedup)\n  var bestLocation = text.indexOf(pattern, expectedLocation);\n\n  var patternLen = pattern.length;\n\n  // a mask of the matches\n  var matchMask = [];\n  for (var i = 0; i < textLen; i += 1) {\n    matchMask[i] = 0;\n  }\n\n  if (bestLocation !== -1) {\n    var score = bitapScore(pattern, {\n      errors: 0,\n      currentLocation: bestLocation,\n      expectedLocation: expectedLocation,\n      distance: distance\n    });\n    currentThreshold = Math.min(score, currentThreshold);\n\n    // What about in the other direction? (speed up)\n    bestLocation = text.lastIndexOf(pattern, expectedLocation + patternLen);\n\n    if (bestLocation !== -1) {\n      var _score = bitapScore(pattern, {\n        errors: 0,\n        currentLocation: bestLocation,\n        expectedLocation: expectedLocation,\n        distance: distance\n      });\n      currentThreshold = Math.min(_score, currentThreshold);\n    }\n  }\n\n  // Reset the best location\n  bestLocation = -1;\n\n  var lastBitArr = [];\n  var finalScore = 1;\n  var binMax = patternLen + textLen;\n\n  var mask = 1 << patternLen - 1;\n\n  for (var _i = 0; _i < patternLen; _i += 1) {\n    // Scan for the best match; each iteration allows for one more error.\n    // Run a binary search to determine how far from the match location we can stray\n    // at this error level.\n    var binMin = 0;\n    var binMid = binMax;\n\n    while (binMin < binMid) {\n      var _score3 = bitapScore(pattern, {\n        errors: _i,\n        currentLocation: expectedLocation + binMid,\n        expectedLocation: expectedLocation,\n        distance: distance\n      });\n\n      if (_score3 <= currentThreshold) {\n        binMin = binMid;\n      } else {\n        binMax = binMid;\n      }\n\n      binMid = Math.floor((binMax - binMin) / 2 + binMin);\n    }\n\n    // Use the result from this iteration as the maximum for the next.\n    binMax = binMid;\n\n    var start = Math.max(1, expectedLocation - binMid + 1);\n    var finish = findAllMatches ? textLen : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n    // Initialize the bit array\n    var bitArr = Array(finish + 2);\n\n    bitArr[finish + 1] = (1 << _i) - 1;\n\n    for (var j = finish; j >= start; j -= 1) {\n      var currentLocation = j - 1;\n      var charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n      if (charMatch) {\n        matchMask[currentLocation] = 1;\n      }\n\n      // First pass: exact match\n      bitArr[j] = (bitArr[j + 1] << 1 | 1) & charMatch;\n\n      // Subsequent passes: fuzzy match\n      if (_i !== 0) {\n        bitArr[j] |= (lastBitArr[j + 1] | lastBitArr[j]) << 1 | 1 | lastBitArr[j + 1];\n      }\n\n      if (bitArr[j] & mask) {\n        finalScore = bitapScore(pattern, {\n          errors: _i,\n          currentLocation: currentLocation,\n          expectedLocation: expectedLocation,\n          distance: distance\n        });\n\n        // This match will almost certainly be better than any existing match.\n        // But check anyway.\n        if (finalScore <= currentThreshold) {\n          // Indeed it is\n          currentThreshold = finalScore;\n          bestLocation = currentLocation;\n\n          // Already passed `loc`, downhill from here on in.\n          if (bestLocation <= expectedLocation) {\n            break;\n          }\n\n          // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n          start = Math.max(1, 2 * expectedLocation - bestLocation);\n        }\n      }\n    }\n\n    // No hope for a (better) match at greater error levels.\n    var _score2 = bitapScore(pattern, {\n      errors: _i + 1,\n      currentLocation: expectedLocation,\n      expectedLocation: expectedLocation,\n      distance: distance\n    });\n\n    // console.log('score', score, finalScore)\n\n    if (_score2 > currentThreshold) {\n      break;\n    }\n\n    lastBitArr = bitArr;\n  }\n\n  // console.log('FINAL SCORE', finalScore)\n\n  // Count exact matches (those with a score of 0) to be \"almost\" exact\n  return {\n    isMatch: bestLocation >= 0,\n    score: finalScore === 0 ? 0.001 : finalScore,\n    matchedIndices: matchedIndices(matchMask, minMatchCharLength)\n  };\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Bitap = __webpack_require__(1);\nvar deepValue = __webpack_require__(2);\nvar isArray = __webpack_require__(0);\n\nvar Fuse = function () {\n  function Fuse(list, _ref) {\n    var _ref$location = _ref.location,\n        location = _ref$location === undefined ? 0 : _ref$location,\n        _ref$distance = _ref.distance,\n        distance = _ref$distance === undefined ? 100 : _ref$distance,\n        _ref$threshold = _ref.threshold,\n        threshold = _ref$threshold === undefined ? 0.6 : _ref$threshold,\n        _ref$maxPatternLength = _ref.maxPatternLength,\n        maxPatternLength = _ref$maxPatternLength === undefined ? 32 : _ref$maxPatternLength,\n        _ref$caseSensitive = _ref.caseSensitive,\n        caseSensitive = _ref$caseSensitive === undefined ? false : _ref$caseSensitive,\n        _ref$tokenSeparator = _ref.tokenSeparator,\n        tokenSeparator = _ref$tokenSeparator === undefined ? / +/g : _ref$tokenSeparator,\n        _ref$findAllMatches = _ref.findAllMatches,\n        findAllMatches = _ref$findAllMatches === undefined ? false : _ref$findAllMatches,\n        _ref$minMatchCharLeng = _ref.minMatchCharLength,\n        minMatchCharLength = _ref$minMatchCharLeng === undefined ? 1 : _ref$minMatchCharLeng,\n        _ref$id = _ref.id,\n        id = _ref$id === undefined ? null : _ref$id,\n        _ref$keys = _ref.keys,\n        keys = _ref$keys === undefined ? [] : _ref$keys,\n        _ref$shouldSort = _ref.shouldSort,\n        shouldSort = _ref$shouldSort === undefined ? true : _ref$shouldSort,\n        _ref$getFn = _ref.getFn,\n        getFn = _ref$getFn === undefined ? deepValue : _ref$getFn,\n        _ref$sortFn = _ref.sortFn,\n        sortFn = _ref$sortFn === undefined ? function (a, b) {\n      return a.score - b.score;\n    } : _ref$sortFn,\n        _ref$tokenize = _ref.tokenize,\n        tokenize = _ref$tokenize === undefined ? false : _ref$tokenize,\n        _ref$matchAllTokens = _ref.matchAllTokens,\n        matchAllTokens = _ref$matchAllTokens === undefined ? false : _ref$matchAllTokens,\n        _ref$includeMatches = _ref.includeMatches,\n        includeMatches = _ref$includeMatches === undefined ? false : _ref$includeMatches,\n        _ref$includeScore = _ref.includeScore,\n        includeScore = _ref$includeScore === undefined ? false : _ref$includeScore,\n        _ref$verbose = _ref.verbose,\n        verbose = _ref$verbose === undefined ? false : _ref$verbose;\n\n    _classCallCheck(this, Fuse);\n\n    this.options = {\n      location: location,\n      distance: distance,\n      threshold: threshold,\n      maxPatternLength: maxPatternLength,\n      isCaseSensitive: caseSensitive,\n      tokenSeparator: tokenSeparator,\n      findAllMatches: findAllMatches,\n      minMatchCharLength: minMatchCharLength,\n      id: id,\n      keys: keys,\n      includeMatches: includeMatches,\n      includeScore: includeScore,\n      shouldSort: shouldSort,\n      getFn: getFn,\n      sortFn: sortFn,\n      verbose: verbose,\n      tokenize: tokenize,\n      matchAllTokens: matchAllTokens\n    };\n\n    this.setCollection(list);\n  }\n\n  _createClass(Fuse, [{\n    key: 'setCollection',\n    value: function setCollection(list) {\n      this.list = list;\n      return list;\n    }\n  }, {\n    key: 'search',\n    value: function search(pattern) {\n      this._log('---------\\nSearch pattern: \"' + pattern + '\"');\n\n      var _prepareSearchers2 = this._prepareSearchers(pattern),\n          tokenSearchers = _prepareSearchers2.tokenSearchers,\n          fullSearcher = _prepareSearchers2.fullSearcher;\n\n      var _search2 = this._search(tokenSearchers, fullSearcher),\n          weights = _search2.weights,\n          results = _search2.results;\n\n      this._computeScore(weights, results);\n\n      if (this.options.shouldSort) {\n        this._sort(results);\n      }\n\n      return this._format(results);\n    }\n  }, {\n    key: '_prepareSearchers',\n    value: function _prepareSearchers() {\n      var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n      var tokenSearchers = [];\n\n      if (this.options.tokenize) {\n        // Tokenize on the separator\n        var tokens = pattern.split(this.options.tokenSeparator);\n        for (var i = 0, len = tokens.length; i < len; i += 1) {\n          tokenSearchers.push(new Bitap(tokens[i], this.options));\n        }\n      }\n\n      var fullSearcher = new Bitap(pattern, this.options);\n\n      return { tokenSearchers: tokenSearchers, fullSearcher: fullSearcher };\n    }\n  }, {\n    key: '_search',\n    value: function _search() {\n      var tokenSearchers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var fullSearcher = arguments[1];\n\n      var list = this.list;\n      var resultMap = {};\n      var results = [];\n\n      // Check the first item in the list, if it's a string, then we assume\n      // that every item in the list is also a string, and thus it's a flattened array.\n      if (typeof list[0] === 'string') {\n        // Iterate over every item\n        for (var i = 0, len = list.length; i < len; i += 1) {\n          this._analyze({\n            key: '',\n            value: list[i],\n            record: i,\n            index: i\n          }, {\n            resultMap: resultMap,\n            results: results,\n            tokenSearchers: tokenSearchers,\n            fullSearcher: fullSearcher\n          });\n        }\n\n        return { weights: null, results: results };\n      }\n\n      // Otherwise, the first item is an Object (hopefully), and thus the searching\n      // is done on the values of the keys of each item.\n      var weights = {};\n      for (var _i = 0, _len = list.length; _i < _len; _i += 1) {\n        var item = list[_i];\n        // Iterate over every key\n        for (var j = 0, keysLen = this.options.keys.length; j < keysLen; j += 1) {\n          var key = this.options.keys[j];\n          if (typeof key !== 'string') {\n            weights[key.name] = {\n              weight: 1 - key.weight || 1\n            };\n            if (key.weight <= 0 || key.weight > 1) {\n              throw new Error('Key weight has to be > 0 and <= 1');\n            }\n            key = key.name;\n          } else {\n            weights[key] = {\n              weight: 1\n            };\n          }\n\n          this._analyze({\n            key: key,\n            value: this.options.getFn(item, key),\n            record: item,\n            index: _i\n          }, {\n            resultMap: resultMap,\n            results: results,\n            tokenSearchers: tokenSearchers,\n            fullSearcher: fullSearcher\n          });\n        }\n      }\n\n      return { weights: weights, results: results };\n    }\n  }, {\n    key: '_analyze',\n    value: function _analyze(_ref2, _ref3) {\n      var key = _ref2.key,\n          _ref2$arrayIndex = _ref2.arrayIndex,\n          arrayIndex = _ref2$arrayIndex === undefined ? -1 : _ref2$arrayIndex,\n          value = _ref2.value,\n          record = _ref2.record,\n          index = _ref2.index;\n      var _ref3$tokenSearchers = _ref3.tokenSearchers,\n          tokenSearchers = _ref3$tokenSearchers === undefined ? [] : _ref3$tokenSearchers,\n          _ref3$fullSearcher = _ref3.fullSearcher,\n          fullSearcher = _ref3$fullSearcher === undefined ? [] : _ref3$fullSearcher,\n          _ref3$resultMap = _ref3.resultMap,\n          resultMap = _ref3$resultMap === undefined ? {} : _ref3$resultMap,\n          _ref3$results = _ref3.results,\n          results = _ref3$results === undefined ? [] : _ref3$results;\n\n      // Check if the texvaluet can be searched\n      if (value === undefined || value === null) {\n        return;\n      }\n\n      var exists = false;\n      var averageScore = -1;\n      var numTextMatches = 0;\n\n      if (typeof value === 'string') {\n        this._log('\\nKey: ' + (key === '' ? '-' : key));\n\n        var mainSearchResult = fullSearcher.search(value);\n        this._log('Full text: \"' + value + '\", score: ' + mainSearchResult.score);\n\n        if (this.options.tokenize) {\n          var words = value.split(this.options.tokenSeparator);\n          var scores = [];\n\n          for (var i = 0; i < tokenSearchers.length; i += 1) {\n            var tokenSearcher = tokenSearchers[i];\n\n            this._log('\\nPattern: \"' + tokenSearcher.pattern + '\"');\n\n            // let tokenScores = []\n            var hasMatchInText = false;\n\n            for (var j = 0; j < words.length; j += 1) {\n              var word = words[j];\n              var tokenSearchResult = tokenSearcher.search(word);\n              var obj = {};\n              if (tokenSearchResult.isMatch) {\n                obj[word] = tokenSearchResult.score;\n                exists = true;\n                hasMatchInText = true;\n                scores.push(tokenSearchResult.score);\n              } else {\n                obj[word] = 1;\n                if (!this.options.matchAllTokens) {\n                  scores.push(1);\n                }\n              }\n              this._log('Token: \"' + word + '\", score: ' + obj[word]);\n              // tokenScores.push(obj)\n            }\n\n            if (hasMatchInText) {\n              numTextMatches += 1;\n            }\n          }\n\n          averageScore = scores[0];\n          var scoresLen = scores.length;\n          for (var _i2 = 1; _i2 < scoresLen; _i2 += 1) {\n            averageScore += scores[_i2];\n          }\n          averageScore = averageScore / scoresLen;\n\n          this._log('Token score average:', averageScore);\n        }\n\n        var finalScore = mainSearchResult.score;\n        if (averageScore > -1) {\n          finalScore = (finalScore + averageScore) / 2;\n        }\n\n        this._log('Score average:', finalScore);\n\n        var checkTextMatches = this.options.tokenize && this.options.matchAllTokens ? numTextMatches >= tokenSearchers.length : true;\n\n        this._log('\\nCheck Matches: ' + checkTextMatches);\n\n        // If a match is found, add the item to <rawResults>, including its score\n        if ((exists || mainSearchResult.isMatch) && checkTextMatches) {\n          // Check if the item already exists in our results\n          var existingResult = resultMap[index];\n          if (existingResult) {\n            // Use the lowest score\n            // existingResult.score, bitapResult.score\n            existingResult.output.push({\n              key: key,\n              arrayIndex: arrayIndex,\n              value: value,\n              score: finalScore,\n              matchedIndices: mainSearchResult.matchedIndices\n            });\n          } else {\n            // Add it to the raw result list\n            resultMap[index] = {\n              item: record,\n              output: [{\n                key: key,\n                arrayIndex: arrayIndex,\n                value: value,\n                score: finalScore,\n                matchedIndices: mainSearchResult.matchedIndices\n              }]\n            };\n\n            results.push(resultMap[index]);\n          }\n        }\n      } else if (isArray(value)) {\n        for (var _i3 = 0, len = value.length; _i3 < len; _i3 += 1) {\n          this._analyze({\n            key: key,\n            arrayIndex: _i3,\n            value: value[_i3],\n            record: record,\n            index: index\n          }, {\n            resultMap: resultMap,\n            results: results,\n            tokenSearchers: tokenSearchers,\n            fullSearcher: fullSearcher\n          });\n        }\n      }\n    }\n  }, {\n    key: '_computeScore',\n    value: function _computeScore(weights, results) {\n      this._log('\\n\\nComputing score:\\n');\n\n      for (var i = 0, len = results.length; i < len; i += 1) {\n        var output = results[i].output;\n        var scoreLen = output.length;\n\n        var currScore = 1;\n        var bestScore = 1;\n\n        for (var j = 0; j < scoreLen; j += 1) {\n          var weight = weights ? weights[output[j].key].weight : 1;\n          var score = weight === 1 ? output[j].score : output[j].score || 0.001;\n          var nScore = score * weight;\n\n          if (weight !== 1) {\n            bestScore = Math.min(bestScore, nScore);\n          } else {\n            output[j].nScore = nScore;\n            currScore *= nScore;\n          }\n        }\n\n        results[i].score = bestScore === 1 ? currScore : bestScore;\n\n        this._log(results[i]);\n      }\n    }\n  }, {\n    key: '_sort',\n    value: function _sort(results) {\n      this._log('\\n\\nSorting....');\n      results.sort(this.options.sortFn);\n    }\n  }, {\n    key: '_format',\n    value: function _format(results) {\n      var finalOutput = [];\n\n      if (this.options.verbose) {\n        this._log('\\n\\nOutput:\\n\\n', JSON.stringify(results));\n      }\n\n      var transformers = [];\n\n      if (this.options.includeMatches) {\n        transformers.push(function (result, data) {\n          var output = result.output;\n          data.matches = [];\n\n          for (var i = 0, len = output.length; i < len; i += 1) {\n            var item = output[i];\n\n            if (item.matchedIndices.length === 0) {\n              continue;\n            }\n\n            var obj = {\n              indices: item.matchedIndices,\n              value: item.value\n            };\n            if (item.key) {\n              obj.key = item.key;\n            }\n            if (item.hasOwnProperty('arrayIndex') && item.arrayIndex > -1) {\n              obj.arrayIndex = item.arrayIndex;\n            }\n            data.matches.push(obj);\n          }\n        });\n      }\n\n      if (this.options.includeScore) {\n        transformers.push(function (result, data) {\n          data.score = result.score;\n        });\n      }\n\n      for (var i = 0, len = results.length; i < len; i += 1) {\n        var result = results[i];\n\n        if (this.options.id) {\n          result.item = this.options.getFn(result.item, this.options.id)[0];\n        }\n\n        if (!transformers.length) {\n          finalOutput.push(result.item);\n          continue;\n        }\n\n        var data = {\n          item: result.item\n        };\n\n        for (var j = 0, _len2 = transformers.length; j < _len2; j += 1) {\n          transformers[j](result, data);\n        }\n\n        finalOutput.push(data);\n      }\n\n      return finalOutput;\n    }\n  }, {\n    key: '_log',\n    value: function _log() {\n      if (this.options.verbose) {\n        var _console;\n\n        (_console = console).log.apply(_console, arguments);\n      }\n    }\n  }]);\n\n  return Fuse;\n}();\n\nmodule.exports = Fuse;\n\n/***/ })\n/******/ ]);\n});\n//# sourceMappingURL=fuse.js.map","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isArray from 'lodash/isArray'\r\n\r\nimport invariant from 'invariant'\r\n\r\nimport { compose } from 'redux'\r\nimport withWidth from 'pmt-ui/utils/withWidth'\r\n\r\nimport PopoverView from './PopoverView'\r\nimport DialogView from './DialogView'\r\n\r\nimport ListChooserType from './ListChooserType'\r\nimport Body from './components/Body'\r\nimport Header from './components/Header'\r\nimport isString from 'lodash/isString'\r\n\r\n//could be dynamically imported if we want to reduce the bundle size,\r\n// but it is used in the render method, so /!\\ to not slow it down\r\nimport Fuse from 'pmt-utils/fuse'\r\n\r\nconst showAsPopoverBreakpoints = ['md', 'lg', 'xl']\r\n\r\nclass Content extends React.Component {\r\n  state = {\r\n    query: '',\r\n  }\r\n\r\n  shouldComponentUpdate(nextProps, nextState) {\r\n    return (\r\n      nextProps.open !== this.props.open ||\r\n      nextProps.value !== this.props.value ||\r\n      nextProps.options !== this.props.options ||\r\n      nextProps.isFetching !== this.props.isFetching ||\r\n      nextState.query !== this.state.query ||\r\n      nextProps.paging !== this.props.paging\r\n    )\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (!this.props.open && nextProps.open) {\r\n      // reset query if open the dialog\r\n      this.setState({\r\n        query: '',\r\n      })\r\n    }\r\n  }\r\n\r\n  getForType(type, viewProps) {\r\n    switch (type) {\r\n      case ListChooserType.POPOVER:\r\n        return <PopoverView {...viewProps} />\r\n\r\n      case ListChooserType.DIALOG:\r\n        return <DialogView {...viewProps} />\r\n\r\n      default:\r\n        invariant(false, `invalid ListChooserType ${type}`)\r\n    }\r\n  }\r\n\r\n  handleQueryChange = event => {\r\n    this.setState({\r\n      query: event.target.value,\r\n    })\r\n\r\n    if (this.props.onQueryChange) {\r\n      this.props.onQueryChange(event.target.value)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const props = this.props\r\n\r\n    let values = props.values || props.value\r\n\r\n    // transform to array\r\n    if (!isArray(values)) {\r\n      values = [values]\r\n    }\r\n\r\n    let filteredOptions = props.options\r\n\r\n    if (this.state.query.length > 0 && !this.props.disableFiltering) {\r\n      if (this.props.filteringWithContains) {\r\n        // \"contains\" search\r\n        filteredOptions = props.options.filter(\r\n          o =>\r\n            (o.value && isString(o.value) && o.value.includes(this.state.query)) ||\r\n            (o.label && isString(o.label) && o.label.includes(this.state.query)) ||\r\n            (o.search && isString(o.search) && o.search.includes(this.state.query))\r\n        )\r\n      } else {\r\n        // approximative search\r\n        const fuseOptions = {\r\n          shouldSort: true,\r\n          threshold: 0.6,\r\n          location: 0,\r\n          findAllMatches: false,\r\n          distance: 50,\r\n          maxPatternLength: 32,\r\n          minMatchCharLength: 1,\r\n          keys: ['label', 'value', 'search'],\r\n        }\r\n\r\n        // see https://sentry.io/share/issue/6924fc536e934857ba95ee033a45311e/\r\n        if (process.env.FEATURE_FUSE && !isEmpty(props.options)) {\r\n          const fuse = new Fuse(props.options, fuseOptions)\r\n          filteredOptions = fuse.search(this.state.query)\r\n        }\r\n      }\r\n    }\r\n\r\n    const viewProps = {\r\n      open: props.open,\r\n      anchorEl: props.anchorEl,\r\n      onClose: props.onClose,\r\n      header: props.title || props.label ? <Header title={props.title || props.label} /> : null,\r\n      content: (\r\n        <Body\r\n          values={values}\r\n          hasOptions={!isEmpty(props.options)}\r\n          filteredOptions={filteredOptions}\r\n          comparator={props.comparator}\r\n          query={this.state.query}\r\n          onSelect={props.onSelect}\r\n          handleQueryChange={this.handleQueryChange}\r\n          isFetching={props.isFetching}\r\n          disableSearch={props.disableSearch}\r\n          paging={props.paging}\r\n          onLoadMore={props.onLoadMore}\r\n          multiple={props.multiple}\r\n          viewType={props.viewType}\r\n        />\r\n      ),\r\n    }\r\n\r\n    const type = props.type\r\n\r\n    if (type !== null) {\r\n      return this.getForType(type, viewProps)\r\n    } else {\r\n      // on desktop, display as popover\r\n      if (showAsPopoverBreakpoints.indexOf(props.width) !== -1) {\r\n        return this.getForType(ListChooserType.POPOVER, viewProps)\r\n      }\r\n\r\n      return this.getForType(ListChooserType.DIALOG, viewProps)\r\n    }\r\n  }\r\n}\r\n\r\nContent.propTypes = {\r\n  /**\r\n   *\r\n   */\r\n  open: PropTypes.bool.isRequired,\r\n\r\n  /**\r\n   * Dom node of the element that displayed the content\r\n   */\r\n  anchorEl: PropTypes.object,\r\n\r\n  /**\r\n   * An optionnal title\r\n   * @type {[type]}\r\n   */\r\n  title: PropTypes.node,\r\n\r\n  /**\r\n   * Value or array of values that has been selected\r\n   */\r\n  value: PropTypes.any,\r\n\r\n  multiple: PropTypes.bool.isRequired,\r\n\r\n  /**\r\n   * Disable filtering of the list using the query state\r\n   * Set to true when the query / options filtering are handled by the parent.\r\n   */\r\n  disableFiltering: PropTypes.bool,\r\n\r\n  /**\r\n   * Switch the filtering mode to \"contains\".\r\n   * By default, false. So the filtering is done with fuse.js that makes an approximative search\r\n   */\r\n  filteringWithContains: PropTypes.bool,\r\n\r\n  /**\r\n   * Optionnal\r\n   *\r\n   * function that receive the option and returns the view to display for this option\r\n   * If not specified we display the option.label\r\n   */\r\n  optionRenderer: PropTypes.func,\r\n\r\n  /**\r\n   * Array of options to display\r\n   * {\r\n   *    label: 'label', // used for search and to be display if there is no optionRenderer prop\r\n   *    value: 0, // the value of the option\r\n   * }\r\n   */\r\n  options: PropTypes.array,\r\n\r\n  /**\r\n   * Function called when an option is selected.\r\n   * Take the option.value as parameter\r\n   */\r\n  onSelect: PropTypes.func.isRequired,\r\n\r\n  /**\r\n   * Function called when the user request to close the dialog\r\n   */\r\n  onClose: PropTypes.func.isRequired,\r\n\r\n  /**\r\n   * See ViewType\r\n   */\r\n  viewType: PropTypes.string,\r\n}\r\n\r\nexport default compose(withWidth())(Content)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet ContentClear = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n  </SvgIcon>\r\n)\r\nContentClear = pure(ContentClear)\r\nContentClear.displayName = 'ContentClear'\r\nContentClear.muiName = 'SvgIcon'\r\n\r\nexport default ContentClear\r\n","\r\nconst TextFieldSuffixType = {\r\n  CLEAR: 'TextFieldSuffixType::CLEAR',\r\n}\r\n\r\nexport default TextFieldSuffixType\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport invariant from 'invariant'\r\n\r\nimport ClearIcon from 'pmt-ui/svg-icons/content/clear'\r\nimport TextField from 'pmt-ui/TextField'\r\nimport { withTheme } from 'pmt-ui/styles'\r\n\r\nimport TextFieldSuffixType from './TextFieldSuffixType'\r\n\r\nclass TextFieldCustom extends React.Component {\r\n  state = {\r\n    focus: false,\r\n  }\r\n\r\n  // Component styles.\r\n  styles = {\r\n    // Make sure the field label is on the right.\r\n    label: {\r\n      right: 0,\r\n    },\r\n    // Allow absolute positioning within the field's wrapper.\r\n    // We need this to make the prefix show inline with the field.\r\n    fieldWrapper: {\r\n      position: 'relative',\r\n      display: 'inline-block',\r\n    },\r\n    prefix: {\r\n      position: 'absolute',\r\n      right: -10,\r\n      bottom: 0,\r\n      lineHeight: '29px',\r\n      fontSize: '15px',\r\n      cursor: 'pointer',\r\n      zIndex: 200,\r\n    },\r\n    clearIcon: {\r\n      color: this.props.theme.pmt.status.inactive,\r\n    },\r\n    prefixFocus: {\r\n      color: this.props.theme.palette.primary.main,\r\n    },\r\n  }\r\n\r\n  // Handle field change event, pass name and value to the onChange callback.\r\n  handleChange = (event, index) => {\r\n    if (this.props.onChange !== null) {\r\n      // Run callback with the name and value.\r\n      this.props.onChange(this.props.name, event.target.value)\r\n    }\r\n  }\r\n\r\n  toggleFocus(focus) {\r\n    this.setState({\r\n      focus,\r\n    })\r\n  }\r\n\r\n  handleFocus = () => {\r\n    this.toggleFocus(true)\r\n  }\r\n\r\n  handleBlur = () => {\r\n    this.toggleFocus(false)\r\n  }\r\n\r\n  componentWillMount() {\r\n    if (this.props.fullWidth) {\r\n      this.styles.fieldWrapper.display = 'block'\r\n    }\r\n  }\r\n\r\n  getSuffixForType(suffixType) {\r\n    switch (suffixType) {\r\n      case TextFieldSuffixType.CLEAR:\r\n        return (\r\n          // className clearIcon is useful to hide the icon and show it only on :hover\r\n          // to define with the parent makeStyles :\r\n          // listChooser:{\r\n          //     '& .clearIcon':{\r\n          //       visibility: 'hidden',\r\n          //     },\r\n          //     '&:hover .clearIcon':{\r\n          //       visibility: 'visible',\r\n          //     }\r\n          //   }\r\n          <span className=\"clearIcon\" style={this.styles.clearIcon}>\r\n            <ClearIcon />\r\n          </span>\r\n        )\r\n\r\n      default:\r\n        invariant(false, `invalid suffixType ${suffixType}`)\r\n    }\r\n  }\r\n\r\n  // Render component.\r\n  render() {\r\n    // Optional symbol prefix, example use: currency or percentage.\r\n    // TODO: prefix is a suffix, use suffix.\r\n    let prefix = this.props.prefix || this.props.suffix || ''\r\n    const prefixStyles = this.state.focus\r\n      ? { ...this.styles.prefix, ...this.styles.prefixFocus }\r\n      : this.styles.prefix\r\n\r\n    if (this.props.suffixType) {\r\n      prefix = this.getSuffixForType(this.props.suffixType)\r\n    }\r\n\r\n    return (\r\n      <div className={this.props.className}>\r\n        <label style={this.styles.fieldWrapper}>\r\n          <TextField\r\n            type=\"text\"\r\n            onClick={this.props.onClick}\r\n            label={this.props.label}\r\n            value={this.props.value}\r\n            onChange={this.handleChange}\r\n            onFocus={this.handleFocus}\r\n            onBlur={this.handleBlur}\r\n            name={this.props.name}\r\n            fullWidth={this.props.fullWidth}\r\n            disabled={this.props.disabled || false}\r\n            helperText={this.props.helperText}\r\n            required={this.props.required}\r\n          />\r\n\r\n          {prefix ? (\r\n            <span\r\n              style={prefixStyles}\r\n              onClick={event => {\r\n                if (!this.props.disabled && this.props.onSuffixClick) {\r\n                  event.preventDefault()\r\n                  event.stopPropagation()\r\n                  this.props.onSuffixClick(event)\r\n                }\r\n              }}\r\n            >\r\n              {prefix}\r\n            </span>\r\n          ) : null}\r\n        </label>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nTextFieldCustom.defaultProps = {\r\n  onChange: null,\r\n\r\n  suffixType: null,\r\n}\r\n\r\nTextFieldCustom.propTypes = {\r\n  /**\r\n   * @deprecated\r\n   * Use suffix\r\n   */\r\n  prefix: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n\r\n  suffix: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n\r\n  /**\r\n   * Event called when clicking on the text field\r\n   * @type {[type]}\r\n   */\r\n  onClick: PropTypes.func,\r\n\r\n  onSuffixClick: PropTypes.func,\r\n\r\n  /**\r\n   * Some generic suffix can be used directly by specifing this suffixType\r\n   */\r\n  suffixType: PropTypes.oneOf([TextFieldSuffixType.CLEAR]),\r\n}\r\n\r\n// hoc delete static, so we set our static on the hoc result\r\nconst TextFieldCustomWithHOC = withTheme(TextFieldCustom)\r\n\r\nTextFieldCustomWithHOC.SuffixType = TextFieldSuffixType\r\n\r\nexport default TextFieldCustomWithHOC\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport isNull from 'lodash/isNull'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isString from 'lodash/isString'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport TextFieldCustom from 'pmt-ui/TextFieldCustom'\r\nimport Chip from 'pmt-ui/Chip'\r\nimport { InputLabel } from 'pmt-ui/Input'\r\nimport { FormControl } from 'pmt-ui/Form'\r\nimport Button from 'pmt-ui/Button'\r\nimport clsx from 'clsx'\r\n\r\nconst styles = theme => ({\r\n  multipleViewRoot: {\r\n    width: '100%',\r\n  },\r\n  chipList: {\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n    paddingRight: theme.spacing(3),\r\n  },\r\n  chipListWithTitle: {\r\n    padding: '6px 24px 7px 0',\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  chipListNotEmpty: {\r\n    cursor: 'pointer',\r\n  },\r\n  chip: {\r\n    margin: theme.spacing(0.25),\r\n  },\r\n  label: {\r\n    width: '100%',\r\n    top: 0,\r\n    left: 0,\r\n    position: 'absolute',\r\n    transform: 'translate(0, 1.5px) scale(0.75)',\r\n    transformOrigin: 'top left',\r\n  },\r\n  value: {\r\n    '& input': {\r\n      cursor: 'pointer',\r\n    },\r\n  },\r\n})\r\n\r\nconst MultipleView = ({\r\n  label,\r\n  isFetching, // TODO: handle isFetching\r\n  helperText, // TODO: handle helperText\r\n  disabled,\r\n  required,\r\n  valueIconFormatter,\r\n  valueFormatter,\r\n  values,\r\n  classes,\r\n  onDeleteValue,\r\n  onOpen,\r\n  emptyRender,\r\n  alwaysDisplayAddButton,\r\n}) => (\r\n  <FormControl className={classes.multipleViewRoot}>\r\n    {!isEmpty(label) && (\r\n      <InputLabel className={classes.label} disabled={disabled}>\r\n        {label}\r\n        {/* handle required field */}\r\n        {required && <span>&thinsp;*</span>}\r\n      </InputLabel>\r\n    )}\r\n    {!isEmpty(values) ? (\r\n      <div\r\n        className={clsx(classes.chipList, classes.chipListNotEmpty, {\r\n          [classes.chipListWithTitle]: !isEmpty(label),\r\n        })}\r\n        onClick={onOpen}\r\n      >\r\n        {values.map((value, index) => (\r\n          <Chip\r\n            disabled={disabled}\r\n            className={classes.chip}\r\n            icon={!isNull(valueIconFormatter) ? valueIconFormatter(value) : null}\r\n            key={`${value}_${index}`}\r\n            label={valueFormatter(value)}\r\n            onDelete={() => !disabled && onDeleteValue(value)}\r\n          />\r\n        ))}\r\n        {alwaysDisplayAddButton && (\r\n          <Button\r\n            variant=\"outlined\"\r\n            color=\"primary\"\r\n            onClick={onOpen}\r\n            className={classes.chip}\r\n            disabled={disabled}\r\n          >\r\n            {tr('global.add')}\r\n          </Button>\r\n        )}\r\n      </div>\r\n    ) : (\r\n      <div\r\n        className={clsx(classes.chipList, {\r\n          [classes.chipListWithTitle]: !isEmpty(label),\r\n        })}\r\n      >\r\n        {emptyRender}\r\n      </div>\r\n    )}\r\n  </FormControl>\r\n)\r\n\r\n/**\r\n * Default view to display for the value\r\n * if not specified, we display:\r\n * - a TextField is there is only one value possible\r\n * - a list of chips (https://material-ui-1dab0.firebaseapp.com/demos/chips/) if there is multiple\r\n *   values possible\r\n */\r\nconst ValueView = ({\r\n  label,\r\n  required,\r\n  disabled,\r\n  clearable,\r\n  value,\r\n  multiple,\r\n  valueIconFormatter = null,\r\n  valueFormatter = null,\r\n  valueFormatterHandleNullValue = false,\r\n  classes,\r\n  helperText,\r\n  isFetching,\r\n  onDeleteValue,\r\n  onOpen,\r\n  emptyRender,\r\n  alwaysDisplayAddButton,\r\n}) => {\r\n  if (multiple) {\r\n    return (\r\n      <MultipleView\r\n        label={label}\r\n        required={required}\r\n        isFetching={isFetching}\r\n        disabled={disabled}\r\n        classes={classes}\r\n        valueIconFormatter={valueIconFormatter}\r\n        valueFormatter={valueFormatter}\r\n        values={value}\r\n        onDeleteValue={onDeleteValue}\r\n        onOpen={onOpen}\r\n        helperText={helperText}\r\n        emptyRender={emptyRender}\r\n        alwaysDisplayAddButton={alwaysDisplayAddButton}\r\n      />\r\n    )\r\n  } else {\r\n    // Note: TextFieldCustom does not handle null values, we need to pass an empty value to clear\r\n    // the field\r\n    const formattedValue =\r\n      !isNull(valueFormatter) && (!isNull(value) || valueFormatterHandleNullValue)\r\n        ? valueFormatter(value)\r\n        : value || ''\r\n\r\n    if (isString(formattedValue)) {\r\n      return (\r\n        <TextFieldCustom\r\n          className={clsx('u-sizeFullWidth', classes.value)}\r\n          label={isFetching ? tr('global.loading') : label}\r\n          fullWidth\r\n          value={formattedValue}\r\n          required={required}\r\n          disabled={disabled}\r\n          onClick={onOpen}\r\n          onSuffixClick={onDeleteValue}\r\n          onChange={null}\r\n          helperText={helperText}\r\n          suffixType={clearable ? TextFieldCustom.SuffixType.CLEAR : null}\r\n        />\r\n      )\r\n    } else {\r\n      return (\r\n        <div\r\n          className=\"u-sizeFullWidth\"\r\n          style={{ display: 'inline-block', cursor: 'pointer' }}\r\n          onClick={onOpen}\r\n        >\r\n          {formattedValue}\r\n        </div>\r\n      )\r\n    }\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ValueView)\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport Button from 'pmt-ui/Button'\r\n\r\n/**\r\n * View displayed on multiple mode, when there is no value selected.\r\n */\r\nconst EmptyValue = ({ show, label = tr('global.add'), onClickOpen, disabled }) =>\r\n  !show ? null : (\r\n    <Button variant=\"outlined\" color=\"primary\" onClick={onClickOpen} disabled={disabled}>\r\n      {label}\r\n    </Button>\r\n  )\r\n\r\nexport default EmptyValue\r\n","import React from 'react'\r\n\r\nimport PropTypes from 'prop-types'\r\n// import { findDOMNode } from 'react-dom'\r\n\r\nimport isNull from 'lodash/isNull'\r\nimport isArray from 'lodash/isArray'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport invariant from 'invariant'\r\n\r\nimport { toggleArrayValue } from 'pmt-utils/array'\r\n\r\nimport Content from './Content'\r\nimport ListChooserType from './ListChooserType'\r\nimport ValueView from './components/ValueView'\r\nimport EmptyValue from './components/EmptyValue'\r\n\r\nclass ListChooser extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // ref for our root object\r\n    this.root = null\r\n\r\n    this.state = {\r\n      open: false,\r\n    }\r\n  }\r\n\r\n  handleSelect = value => {\r\n    if (this.props.disabled) {\r\n      return\r\n    }\r\n\r\n    if (!this.props.multiple) {\r\n      this.props.onChange(value)\r\n      this.handleRequestClose()\r\n    } else {\r\n      this.props.onChange(toggleArrayValue(this.props.value, value))\r\n    }\r\n  }\r\n\r\n  handleClickOpen = () => {\r\n    if (this.props.disabled) {\r\n      return\r\n    }\r\n\r\n    this.setState({\r\n      open: true,\r\n    })\r\n  }\r\n\r\n  handleRequestClose = () => {\r\n    this.setState({\r\n      open: false,\r\n    })\r\n  }\r\n\r\n  handleDeleteValue = (valueToDelete = null) => {\r\n    const values = this.props.value\r\n\r\n    if (this.props.multiple) {\r\n      const newValues = values.filter(value => value !== valueToDelete)\r\n\r\n      this.props.onChange(newValues)\r\n    } else {\r\n      // not multiple mode, erase the value\r\n      this.props.onChange(null)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      className,\r\n      label,\r\n      labelButton,\r\n      value,\r\n      children,\r\n      title,\r\n      options,\r\n      // onChange,\r\n      // error, // TODO: handle\r\n      helperText,\r\n      type,\r\n      valueIconFormatter,\r\n      valueFormatter,\r\n      valueFormatterHandleNullValue,\r\n      multiple,\r\n      required,\r\n      disableFiltering,\r\n      isFetching,\r\n      comparator,\r\n      clearable,\r\n      disableSearch,\r\n      disabled,\r\n      paging,\r\n      onLoadMore,\r\n      viewType,\r\n      alwaysDisplayAddButton,\r\n      filteringWithContains,\r\n    } = this.props\r\n\r\n    invariant(\r\n      !multiple || !isNull(valueFormatter),\r\n      `[ListChooser] '${label}' valueFormatter required for multiple mode`\r\n    )\r\n    invariant(\r\n      !multiple || isArray(value),\r\n      `[ListChooser] '${label}' value '${value}' must be an array for multiple mode`\r\n    )\r\n\r\n    return (\r\n      <div className={className} ref={ref => (this.root = ref)}>\r\n        {children ? (\r\n          children({\r\n            onOpen: this.handleClickOpen,\r\n          })\r\n        ) : (\r\n          <ValueView\r\n            disabled={disabled}\r\n            multiple={multiple}\r\n            label={label}\r\n            value={value}\r\n            helperText={helperText}\r\n            isFetching={isFetching}\r\n            valueIconFormatter={valueIconFormatter}\r\n            valueFormatter={valueFormatter}\r\n            valueFormatterHandleNullValue={valueFormatterHandleNullValue}\r\n            onDeleteValue={this.handleDeleteValue}\r\n            required={required}\r\n            clearable={clearable}\r\n            onOpen={this.handleClickOpen}\r\n            emptyRender={\r\n              <EmptyValue\r\n                show={multiple && isEmpty(value)}\r\n                label={labelButton}\r\n                onClickOpen={this.handleClickOpen}\r\n                disabled={disabled}\r\n              />\r\n            }\r\n            alwaysDisplayAddButton={alwaysDisplayAddButton}\r\n          />\r\n        )}\r\n\r\n        <Content\r\n          type={type}\r\n          //anchorEl={findDOMNode(this.root)}\r\n          anchorEl={this.root}\r\n          open={this.state.open}\r\n          title={title}\r\n          value={value}\r\n          options={(options || []).filter(Boolean)}\r\n          onQueryChange={this.props.onQueryChange}\r\n          onClose={this.handleRequestClose}\r\n          onSelect={this.handleSelect}\r\n          disableFiltering={disableFiltering}\r\n          filteringWithContains={filteringWithContains}\r\n          isFetching={isFetching}\r\n          comparator={comparator}\r\n          disableSearch={disableSearch}\r\n          paging={paging}\r\n          onLoadMore={onLoadMore}\r\n          multiple={multiple}\r\n          viewType={viewType}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nListChooser.defaultProps = {\r\n  type: null,\r\n\r\n  multiple: false,\r\n\r\n  valueFormatter: null,\r\n\r\n  valueFormatterHandleNullValue: false,\r\n\r\n  onQueryChange: null,\r\n\r\n  required: false,\r\n\r\n  disableFiltering: false,\r\n\r\n  isFetching: false,\r\n\r\n  value: null,\r\n\r\n  clearable: false,\r\n\r\n  disableSearch: false,\r\n\r\n  filteringWithContains: false,\r\n\r\n  viewType: null,\r\n\r\n  alwaysDisplayAddButton: false,\r\n}\r\n\r\nListChooser.propTypes = {\r\n  /**\r\n   * Force the type of the list chooser.\r\n   * If not specified we display as popover on desktop, and as dialog on smaller screens.\r\n   */\r\n  type: PropTypes.oneOf([ListChooserType.POPOVER, ListChooserType.DIALOG]),\r\n\r\n  /**\r\n   * Array of option object:\r\n   * {\r\n   *    label: '',\r\n   *    value: ...,\r\n   * }\r\n   */\r\n  options: PropTypes.array,\r\n\r\n  /**\r\n   * Label to display on the default children view\r\n   */\r\n  label: PropTypes.string,\r\n\r\n  helperText: PropTypes.any,\r\n\r\n  /**\r\n   * @optionnal\r\n   * Name of the list selection view (dialog / popover)\r\n   */\r\n  title: PropTypes.string,\r\n\r\n  onChange: PropTypes.func.isRequired,\r\n\r\n  multiple: PropTypes.bool,\r\n\r\n  /**\r\n   * true to display a loader.\r\n   * Used when the options are loaded on the api via the query.\r\n   */\r\n  isFetching: PropTypes.bool,\r\n\r\n  /**\r\n   * Disable filtering of the list using the query state\r\n   * Set to true when the query / options filtering are handled by the parent.\r\n   */\r\n  disableFiltering: PropTypes.bool,\r\n\r\n  /**\r\n   * Switch the filtering mode to \"contains\".\r\n   * By default, false. So the filtering is done with fuse.js that makes an approximative search\r\n   */\r\n  filteringWithContains: PropTypes.bool,\r\n\r\n  /**\r\n   * One or multiple selected values\r\n   */\r\n  value: PropTypes.oneOfType([\r\n    PropTypes.string,\r\n    PropTypes.number,\r\n    PropTypes.array,\r\n    PropTypes.object,\r\n  ]),\r\n\r\n  /**\r\n   * @optionnal\r\n   *\r\n   * View to display for the value\r\n   * Must be a function, that will receive:\r\n   * - onOpen -> function to call to open the list view\r\n   *\r\n   * if not specified, we display:\r\n   * - a TextField is there is only one value possible\r\n   * - a list of chips (https://material-ui-1dab0.firebaseapp.com/demos/chips/) if there is multiple\r\n   *   values possible\r\n   */\r\n  children: PropTypes.func,\r\n\r\n  /**\r\n   * @optionnal if not in `multiple` mode\r\n   * formatted value to display on the default children view\r\n   */\r\n  valueFormatter: PropTypes.func,\r\n\r\n  /**\r\n   * By legacy, null value will not call the valueFormatter. Set this to true to force it.\r\n   */\r\n  valueFormatterHandleNullValue: PropTypes.bool,\r\n\r\n  /**\r\n   * @optionnal\r\n   *\r\n   * function to compare two options objects.\r\n   * Note that we handle comparaison between two objects that have an 'id' key.\r\n   * Used to compare the value and the option.\r\n   */\r\n  comparator: PropTypes.func,\r\n\r\n  /**\r\n   * Function called when the input query changed.\r\n   * Used when the query has to be known from the parent (ex: SearchListChooser)\r\n   */\r\n  onQueryChange: PropTypes.func,\r\n\r\n  /**\r\n   * If not required, a single choice can be removed, the onChange function will receive null.\r\n   */\r\n  required: PropTypes.bool,\r\n\r\n  clearable: PropTypes.bool,\r\n\r\n  /**\r\n   * Disable search\r\n   * Set to true if you don't want to display search option.\r\n   */\r\n  disableSearch: PropTypes.bool,\r\n\r\n  /**\r\n   * Disable possibility to choose on a list\r\n   */\r\n  disabled: PropTypes.bool,\r\n\r\n  /**\r\n   * In case the options could be paginated, we can pass a paging object and a `onLoadMore`\r\n   * prop\r\n   */\r\n  paging: PropTypes.object,\r\n\r\n  /**\r\n   * func (nextCursor)\r\n   *\r\n   * TODO: when we load more, the list will increase in size, but since we don't close / open\r\n   * the view, the Popover will not be resized.\r\n   * Note: it could be resolved by the material-ui v1 update\r\n   */\r\n  onLoadMore: PropTypes.func,\r\n\r\n  /**\r\n   * Allows to define the type of view to display on the Body\r\n   * see ViewType\r\n   */\r\n  viewType: PropTypes.string,\r\n\r\n  /**\r\n   * in 'multiple' mode, indicates that we want the \"add\" button to be always displayed (default: false => displayed only when no values are selected)\r\n   */\r\n  alwaysDisplayAddButton: PropTypes.bool,\r\n}\r\n\r\nexport default ListChooser\r\n","import React from 'react'\r\n\r\nimport moment from 'moment'\r\nimport range from 'lodash/range'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { InputLabel } from 'pmt-ui/Input'\r\nimport ListChooser from 'pmt-ui/ListChooser'\r\n\r\nimport { anyToDate } from 'pmt-utils/date'\r\n\r\nconst styles = {\r\n  root: {},\r\n  elements: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n  },\r\n  element: {\r\n    display: 'flex',\r\n    flexGrow: '1',\r\n    maxWidth: 50,\r\n    textAlign: 'center',\r\n  },\r\n}\r\n\r\nconst Day = ({ day, className, onChange }) => (\r\n  <ListChooser\r\n    title=\"Choisir le jour\"\r\n    label=\"Jour\"\r\n    value={day}\r\n    options={range(1, 31 + 1).map(day => ({\r\n      label: day,\r\n      value: day,\r\n    }))}\r\n    onChange={onChange}\r\n    className={className}\r\n  />\r\n)\r\n\r\nconst Month = ({ month, className, onChange }) => (\r\n  <ListChooser\r\n    title=\"Choisir le mois\"\r\n    label=\"Mois\"\r\n    value={month}\r\n    options={range(1, 12 + 1).map(month => ({\r\n      label: month,\r\n      value: month,\r\n    }))}\r\n    onChange={onChange}\r\n    className={className}\r\n  />\r\n)\r\n\r\nconst Year = ({ minYear, maxYear, year, className, onChange }) => (\r\n  <ListChooser\r\n    title={`Choisir l'année`}\r\n    label=\"Année\"\r\n    value={year}\r\n    options={range(minYear, maxYear)\r\n      .reverse()\r\n      .map(year => ({\r\n        label: year,\r\n        value: year,\r\n      }))}\r\n    onChange={onChange}\r\n    className={className}\r\n  />\r\n)\r\n\r\nclass InlineDate extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    this.state = this.calculateState(props)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    this.setState(this.calculateState(nextProps))\r\n  }\r\n\r\n  calculateState(props) {\r\n    const { value, options } = props\r\n\r\n    let date = value\r\n    if (!date && options.defaultValue) {\r\n      date = options.defaultValue\r\n    }\r\n\r\n    date = anyToDate(date)\r\n\r\n    const day = date.date()\r\n    const month = date.month() + 1 // index based 0\r\n    const year = date.year()\r\n\r\n    let minYear = 1900\r\n    if (options.minDate) {\r\n      minYear = anyToDate(options.minDate).year()\r\n    }\r\n\r\n    let maxYear = 2100\r\n    if (options.maxDate) {\r\n      maxYear = anyToDate(options.maxDate).year()\r\n    }\r\n\r\n    return {\r\n      day,\r\n      month,\r\n      year,\r\n      minYear,\r\n      maxYear,\r\n    }\r\n  }\r\n\r\n  handleChange = (day, month, year) => {\r\n    const date = moment()\r\n      .startOf('day')\r\n      .date(day)\r\n      .month(month - 1)\r\n      .year(year)\r\n    this.props.onChange(date)\r\n  }\r\n\r\n  render() {\r\n    const { classes, label, required } = this.props\r\n    const { day, month, year, minYear, maxYear } = this.state\r\n    try {\r\n      return (\r\n        <div className={classes.root}>\r\n          <InputLabel\r\n          // focused // force focus to be on top mode\r\n          >\r\n            {label}\r\n            {/* handle required field */}\r\n            {required && <span>&thinsp;*</span>}\r\n          </InputLabel>\r\n          <div className={classes.elements}>\r\n            <Day\r\n              className={classes.element}\r\n              day={day}\r\n              onChange={day => this.handleChange(day, month, year)}\r\n            />\r\n            <Month\r\n              className={classes.element}\r\n              month={month}\r\n              onChange={month => this.handleChange(day, month, year)}\r\n            />\r\n            <Year\r\n              className={classes.element}\r\n              minYear={minYear}\r\n              maxYear={maxYear}\r\n              year={year}\r\n              onChange={year => this.handleChange(day, month, year)}\r\n            />\r\n          </div>\r\n        </div>\r\n      )\r\n    } catch (e) {\r\n      console.error(e)\r\n    }\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(InlineDate)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport moment from 'moment'\r\nimport invariant from 'invariant'\r\nimport noop from 'lodash/noop'\r\n\r\nimport TextField from 'pmt-ui/TextField'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { formatDate } from 'pmt-utils/date'\r\n\r\nimport Calendar, { CalendarMode } from '../Calendar'\r\nimport InlineDate from './InlineDate'\r\n\r\nconst propDatesAreSame = (a, b) => (!a && !b) || (a && b && moment(a).isSame(b))\r\n\r\nconst getDateChangedErrorMsg = varName =>\r\n  `${varName} date has changed. Consider using 'momentObject.startOf('day').`\r\n\r\nconst styles = theme => ({\r\n  calendarContainer: {\r\n    position: 'relative',\r\n  },\r\n  calendar: {\r\n    position: 'absolute',\r\n    bottom: 0,\r\n    left: 0,\r\n  },\r\n})\r\n\r\n/**\r\n * DateField\r\n *\r\n *\r\n * Note: we don't handle the type 'CalendarMode.multiple' for the moment\r\n */\r\nclass DateField extends React.Component {\r\n  static DEFAULT_DATE_FORMAT = 'dddd DD MMMM YYYY'\r\n\r\n  state = {\r\n    displayCalendar: false,\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps, nextState) {\r\n    const { props } = this\r\n\r\n    //\r\n    // The following options can't be changed !\r\n    // Otherwise we get an infinite loop from flatpickr..\r\n    //\r\n\r\n    const defaultDateIsSame = propDatesAreSame(\r\n      nextProps.options.defaultDate,\r\n      props.options.defaultDate\r\n    )\r\n\r\n    const minDateIsSame = propDatesAreSame(nextProps.options.minDate, props.options.minDate)\r\n\r\n    const maxDateIsSame = propDatesAreSame(nextProps.options.maxDate, props.options.maxDate)\r\n\r\n    invariant(defaultDateIsSame, getDateChangedErrorMsg('defaultDate'))\r\n\r\n    invariant(minDateIsSame, getDateChangedErrorMsg('minDate'))\r\n\r\n    invariant(maxDateIsSame, getDateChangedErrorMsg('maxDate'))\r\n  }\r\n\r\n  shouldComponentUpdate(nextProps, nextState) {\r\n    const { props, state } = this\r\n\r\n    if (state.displayCalendar !== nextState.displayCalendar) {\r\n      return true\r\n    }\r\n\r\n    if (\r\n      props.value !== nextProps.value ||\r\n      (moment.isMoment(nextProps) && nextProps.value.isSame(props.value))\r\n    ) {\r\n      return true\r\n    }\r\n\r\n    return false\r\n  }\r\n\r\n  handleOpenCalendar = () => {\r\n    this.setState({\r\n      displayCalendar: true,\r\n    })\r\n  }\r\n\r\n  handleCloseCalendar = dates => {\r\n    this.setState({\r\n      displayCalendar: false,\r\n    })\r\n\r\n    this.handleChange(dates)\r\n  }\r\n\r\n  handleChange = dates => {\r\n    // force end of day to the selected end day\r\n    if (this.props.options.mode === CalendarMode.RANGE && dates[1]) {\r\n      dates[1] = dates[1].endOf('day')\r\n    }\r\n    this.props.onChange(dates)\r\n  }\r\n\r\n  renderInline() {\r\n    const { options, label, required, value } = this.props\r\n\r\n    return (\r\n      <InlineDate\r\n        value={value}\r\n        label={label}\r\n        required={required}\r\n        onChange={this.handleChange}\r\n        options={options}\r\n      />\r\n    )\r\n  }\r\n\r\n  renderCalendar() {\r\n    const { classes, onChange, options, label, renderValue, value, ...otherProps } = this.props\r\n\r\n    const open = this.state.displayCalendar && !options.inline\r\n\r\n    let formattedValue = null\r\n    if (!value) {\r\n      formattedValue = ''\r\n    } else if (renderValue) {\r\n      formattedValue = renderValue(value)\r\n    } else if (!options.mode || options.mode === 'single') {\r\n      formattedValue = formatDate(value, 'DD-MM-YYYY')\r\n    } else if (options.mode === CalendarMode.RANGE) {\r\n      formattedValue = `${formatDate(value[0], 'DD-MM-YYYY')} - ${formatDate(\r\n        value[1],\r\n        'DD-MM-YYYY'\r\n      )}`\r\n    } else {\r\n      invariant(false, 'mode not handled to format value')\r\n    }\r\n\r\n    return (\r\n      <div className={classes.calendarContainer}>\r\n        {this.props.children ? (\r\n          this.props.children({\r\n            openCalendar: this.handleOpenCalendar,\r\n            closeCalendar: this.handleCloseCalendar,\r\n          })\r\n        ) : (\r\n          <TextField\r\n            className=\"u-sizeFullWidth\"\r\n            label={label}\r\n            onClick={this.handleOpenCalendar}\r\n            value={formattedValue}\r\n            onChange={noop}\r\n          />\r\n        )}\r\n\r\n        {/* TODO: open calendar on modal on small screens */}\r\n        {/* {open && ( */}\r\n        <Calendar\r\n          className={classes.calendar}\r\n          open={open}\r\n          value={value}\r\n          options={{\r\n            ...options,\r\n            ...{\r\n              clickOpens: false,\r\n            },\r\n          }}\r\n          // Note: here onChange is called each time the user select a date, and cause infinite loop,\r\n          // so we use the onClose\r\n          // onChange={this.handleChange}\r\n          onClose={this.handleCloseCalendar}\r\n          {...otherProps}\r\n        />\r\n        {/* )} */}\r\n      </div>\r\n    )\r\n  }\r\n\r\n  render() {\r\n    switch (this.props.mode) {\r\n      case DateField.Mode.INLINE:\r\n        return this.renderInline()\r\n\r\n      case DateField.Mode.CALENDAR:\r\n        return this.renderCalendar()\r\n\r\n      default:\r\n        invariant(false, 'Invalid DateField mode')\r\n    }\r\n  }\r\n}\r\n\r\nDateField.Mode = {\r\n  /**\r\n   * Display the date field as a calendar\r\n   * In this mode the prop options is the options of flatpickr\r\n   * @type {String}\r\n   */\r\n  CALENDAR: 'calendar',\r\n\r\n  /**\r\n   * Display the date field as three list selector (day, month, year)\r\n   * In this mode the prop option can contains:\r\n   * - defaultDate\r\n   * - minDate\r\n   * - maxDate\r\n   */\r\n  INLINE: 'inline',\r\n}\r\n\r\nDateField.defaultProps = {\r\n  mode: DateField.Mode.CALENDAR,\r\n  required: false,\r\n  options: {\r\n    mode: 'single',\r\n  },\r\n}\r\n\r\n/**\r\n * TODO: handle:\r\n * - validation\r\n * - required\r\n * @type {Object}\r\n */\r\nDateField.propTypes = {\r\n  label: PropTypes.string.isRequired,\r\n\r\n  required: PropTypes.bool,\r\n\r\n  mode: PropTypes.oneOf([DateField.Mode.CALENDAR, DateField.Mode.INLINE]),\r\n\r\n  // param: moment date\r\n  onChange: PropTypes.func.isRequired,\r\n\r\n  /**\r\n   * In mode CALENDAR it  can contains all the flatpickr options and hooks\r\n   * - https://chmln.github.io/flatpickr/options/\r\n   * - https://chmln.github.io/flatpickr/events/#hooks\r\n   *\r\n   * Otherwise see DateField.Mode.INLINE (or the corresponding mode)\r\n   */\r\n  options: PropTypes.object.isRequired,\r\n\r\n  value: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\r\n}\r\n\r\nexport default withStyles(styles)(DateField)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport { updateStatisticsOptions } from '../actions'\r\nimport { makeGetStatisticsOptions, makeGetStatisticsConfig } from '../selectors'\r\nimport { statisticsOptionsAreEqual } from '../utils'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that handles the options for a statistics.\r\n * It retains the options modifications on its state.\r\n * We update them on the store only when the given function `onApplyOptions` is called.\r\n *\r\n * Requirements:\r\n * - groupType defined in ../StatisticsGroupType\r\n */\r\nclass StatisticsOptionsModifierContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.state = {\r\n      options: { ...props.options },\r\n      optionsChanged: false,\r\n      optionsAreDefault: this.areOptionsDefault(props, props.options),\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (!statisticsOptionsAreEqual(this.props.config, this.props.options, prevProps.options)) {\r\n      this.setState({\r\n        options: this.props.options,\r\n        optionsChanged: false,\r\n      })\r\n    }\r\n  }\r\n\r\n  areOptionsDefault(props, options) {\r\n    return isEqual(props.config.defaultOptions, options)\r\n  }\r\n\r\n  handleChangeOptions = options => {\r\n    this.setState({\r\n      options,\r\n      optionsChanged: true,\r\n      optionsAreDefault: this.areOptionsDefault(this.props, options),\r\n    })\r\n  }\r\n\r\n  handleApplyOptions = () => {\r\n    this.props.updateStatisticsOptions(this.props.groupType, this.state.options)\r\n  }\r\n\r\n  handleResetOptions = () => {\r\n    this.setState(\r\n      {\r\n        options: {\r\n          ...this.props.config.defaultOptions,\r\n        },\r\n        optionsChanged: true,\r\n        optionsAreDefault: true,\r\n      },\r\n      () => {\r\n        // directly apply options and reload data\r\n        this.handleApplyOptions()\r\n      }\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const { children, config } = this.props\r\n\r\n    const { options, optionsChanged, optionsAreDefault } = this.state\r\n\r\n    if (!options || !config) {\r\n      // wait for default options to be processed\r\n      return null\r\n    }\r\n\r\n    return children({\r\n      options,\r\n      config,\r\n      optionsChanged,\r\n      optionsAreDefault,\r\n      onChangeOptions: this.handleChangeOptions,\r\n      onApplyOptions: this.handleApplyOptions,\r\n      onResetOptions: this.handleResetOptions,\r\n    })\r\n  }\r\n}\r\n\r\nStatisticsOptionsModifierContainer.defaultProps = {}\r\n\r\nStatisticsOptionsModifierContainer.propTypes = {\r\n  children: PropTypes.func.isRequired,\r\n\r\n  groupType: PropTypes.string.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getOptions = makeGetStatisticsOptions()\r\n  const getConfig = makeGetStatisticsConfig()\r\n\r\n  return {\r\n    options: getOptions(state, props),\r\n    config: getConfig(state, props),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {\r\n  updateStatisticsOptions,\r\n})(StatisticsOptionsModifierContainer)\r\n","import Immutable from 'immutable'\r\nimport { createReducer } from '../redux'\r\n\r\nimport { GetStatisticsAction, StatisticsAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './components'\r\nexport * from './config'\r\nexport * from './constants'\r\nexport * from './utils'\r\nexport * from './selectors'\r\nexport { default as createStatistics } from './createStatistics'\r\nexport { default as createGroupStatistics } from './createGroupStatistics'\r\n\r\nexport { default as StatisticsGroupType } from './StatisticsGroupType'\r\n\r\nconst checkRequestId = reduceFunc => (state, action) => {\r\n  const requestId = state.getIn([\r\n    action.data.statisticsGroupType,\r\n    action.data.statisticsType,\r\n    'requestId',\r\n  ])\r\n\r\n  if (requestId === action.data.requestId) {\r\n    return reduceFunc(state, action)\r\n  }\r\n\r\n  console.debug(`Response ignore due to invalid requestId '${action.data.requestId}'`)\r\n  return state\r\n}\r\n\r\nlet DEFAULT_STATE = Immutable.fromJS({})\r\n\r\nexport const statisticsReducer = createReducer(DEFAULT_STATE, {\r\n  [StatisticsAction.UPDATE]: (state, action) =>\r\n    state.mergeIn(\r\n      [action.statisticsGroupType],\r\n      Immutable.fromJS({\r\n        options: action.options,\r\n      })\r\n    ),\r\n\r\n  [StatisticsAction.INIT_CONFIG]: (state, action) =>\r\n    state.mergeIn(\r\n      [action.statisticsGroupType],\r\n      Immutable.fromJS({\r\n        config: action.config,\r\n      })\r\n    ),\r\n\r\n  [GetStatisticsAction.REQUEST]: (state, action) =>\r\n    state\r\n      .mergeIn(\r\n        [action.data.statisticsGroupType],\r\n        Immutable.fromJS({\r\n          options: action.data.props.options,\r\n        })\r\n      )\r\n      .mergeIn([action.data.statisticsGroupType, action.data.statisticsType], {\r\n        data: null,\r\n        isFetching: true,\r\n        error: null,\r\n        //\r\n        // We keep an id of the last request run. We will ignore success / failure responses of old\r\n        // request (who don't have this requestId)\r\n        //\r\n        requestId: action.data.requestId,\r\n      }),\r\n\r\n  [GetStatisticsAction.SUCCESS]: checkRequestId((state, action) =>\r\n    state.mergeIn([action.data.statisticsGroupType, action.data.statisticsType], {\r\n      data: action.response,\r\n      isFetching: false,\r\n      error: null,\r\n    })\r\n  ),\r\n\r\n  [GetStatisticsAction.FAILURE]: checkRequestId((state, action) =>\r\n    state.mergeIn([action.data.statisticsGroupType, action.data.statisticsType], {\r\n      data: null,\r\n      isFetching: false,\r\n      error: action.error,\r\n    })\r\n  ),\r\n})\r\n","let _reducers = {}\r\n\r\nexport const registerReducers = reducers => {\r\n  _reducers = reducers\r\n}\r\n\r\nexport const getReducers = () => _reducers\r\n\r\nexport const registerEntities = entities => {\r\n  _reducers = {\r\n    ..._reducers,\r\n    entities,\r\n  }\r\n}\r\n\r\nexport const getEntities = () => _reducers.entities\r\n","import { createTransform } from 'redux-persist'\r\nimport each from 'lodash/each'\r\nimport Immutable from 'immutable'\r\nimport { immutable } from '@redux-devtools/serialize'\r\n\r\nimport { getEntities } from 'pmt-modules/reducers'\r\nimport Logger from 'pmt-utils/logger/index.js'\r\n\r\nconst PERSIST_EXPIRE_DEFAULT_KEY = 'persistExpiresAt'\r\nconst PERSIST_EXPIRE_DELAY_DEFAULT_KEY = 'persistExpireDelay'\r\n\r\n// Same serializer used by immutableTransform, so the default state we emit on\r\n// expiration is reconstructed as an Immutable structure by the next transform\r\n// in the chain (instead of a plain object that would break `.get()` calls).\r\nconst { stringify: immutableStringify } = immutable(Immutable)\r\n\r\nexport const createExpirationTransform = config => {\r\n  config = config || {}\r\n  config.expireKey = config.expireKey || PERSIST_EXPIRE_DEFAULT_KEY\r\n  config.expireDelayKey = config.expireDelayKey || PERSIST_EXPIRE_DELAY_DEFAULT_KEY\r\n\r\n  const dateToUnix = date => +(date.getTime() / 1000).toFixed(0)\r\n\r\n  // Builds the serialized state to store when an entry has expired.\r\n  // We must reset to the reducer's real initial state (correct Immutable shape,\r\n  // e.g. cart's `itemList`), otherwise a generic `{}` hard-overwrites the entity\r\n  // (hardSet reconciler) and later actions like ADD_TO_CART can't mutate it.\r\n  const getExpiredState = key => {\r\n    if (config.defaultState !== undefined) {\r\n      return Immutable.fromJS(config.defaultState)\r\n    }\r\n\r\n    const reducer = getEntities()[key]\r\n\r\n    if (typeof reducer === 'function') {\r\n      // Calling the reducer with `undefined` returns its initial state,\r\n      // already as an Immutable structure.\r\n      return reducer(undefined, { type: '@@REDUX_PERSIST_EXPIRE_RESET' })\r\n    }\r\n\r\n    // Last resort fallback.\r\n    return Immutable.Map()\r\n  }\r\n\r\n  const inbound = (state, key) => {\r\n    try {\r\n      const entity = getEntities()[key]\r\n      const options = (entity && entity.options) || {}\r\n\r\n      // Rolling expiration: compute the expiry timestamp NOW (at write time),\r\n      // so the delay always restarts from the last write instead of app start.\r\n      const delay = options[config.expireDelayKey]\r\n      // Legacy support: an already-computed absolute expiry date.\r\n      const absoluteExpiresAt = options[config.expireKey]\r\n\r\n      let expiresAt = null\r\n      if (delay != null) {\r\n        expiresAt = new Date(Date.now() + delay).toISOString()\r\n      } else if (absoluteExpiresAt) {\r\n        expiresAt = absoluteExpiresAt\r\n      }\r\n\r\n      console.info(\r\n        `createExpirationTransform: setting expirationDate for key \"${key}\" ${expiresAt} (local: ${new Date(expiresAt).toLocaleString()})`\r\n      )\r\n\r\n      if (expiresAt) {\r\n        const jsonState = JSON.parse(state)\r\n        jsonState.data = {\r\n          ...jsonState.data,\r\n          [config.expireKey]: expiresAt,\r\n        }\r\n        state = JSON.stringify(jsonState)\r\n      }\r\n\r\n      return state\r\n    } catch (error) {\r\n      Logger.error(`createExpirationTransform: inbound failed for key \"${key}\"`, error)\r\n      throw error\r\n    }\r\n  }\r\n\r\n  const outbound = (state, key) => {\r\n    if (!state) {\r\n      return state\r\n    }\r\n\r\n    try {\r\n      // --- SIMULATION: simulate an expired entry to reproduce the outbound crash ---\r\n      // Pass `config.simulateExpired = true` (or `config.simulateExpired = 'cart'` to target a specific key)\r\n      // to force the expiration branch below.\r\n      if (config.simulateExpired === true || config.simulateExpired === key) {\r\n        const parsed = JSON.parse(state)\r\n        // Yesterday, guaranteed to be in the past.\r\n        const expiredDate = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()\r\n        // The expire key lives inside `data` (see inbound), so it must be set\r\n        // there for the outbound expiration loop to pick it up.\r\n        parsed.data = {\r\n          ...parsed.data,\r\n          [config.expireKey]: expiredDate,\r\n        }\r\n        state = JSON.stringify(parsed)\r\n        console.log(\r\n          `createExpirationTransform: SIMULATING expired entry for key \"${key}\" (${expiredDate})`\r\n        )\r\n      }\r\n      // --- END SIMULATION ---\r\n\r\n      let isExpired = false\r\n      let expiredAt = null\r\n\r\n      each(JSON.parse(state), value => {\r\n        if (!value || typeof value !== 'object') {\r\n          return\r\n        }\r\n\r\n        if (!value.hasOwnProperty(config.expireKey)) {\r\n          return\r\n        }\r\n\r\n        var expireDate = value[config.expireKey]\r\n\r\n        if (!expireDate) {\r\n          return\r\n        }\r\n\r\n        if (dateToUnix(new Date(expireDate)) < dateToUnix(new Date())) {\r\n          isExpired = true\r\n          expiredAt = expireDate\r\n          // stop iterating, we already know the state is expired\r\n          return false\r\n        }\r\n      })\r\n\r\n      if (isExpired) {\r\n        const expiredDate = new Date(expiredAt)\r\n        const now = new Date()\r\n        console.warn(\r\n          `createExpirationTransform: outbound state expired for key \"${key}\", resetting to default state ` +\r\n            `(expired at ${expiredDate.toISOString()} (local: ${expiredDate.toLocaleString()}), ` +\r\n            `now ${now.toISOString()} (local: ${now.toLocaleString()}))`\r\n        )\r\n        // `state` is a serialized string at this point, and later transforms in\r\n        // the chain (e.g. immutableTransform) expect a string to parse. A plain\r\n        // JSON object would be parsed back as a plain object (no `.get`), while\r\n        // the real (non-expired) state is an Immutable KeyedIterable. So we\r\n        // serialize the reducer's initial (Immutable) state to stay consistent.\r\n        return immutableStringify(getExpiredState(key))\r\n      }\r\n    } catch (error) {\r\n      Logger.error(`createExpirationTransform: outbound failed for key \"${key}\"`, error)\r\n      throw error\r\n    }\r\n\r\n    return state\r\n  }\r\n\r\n  return createTransform(inbound, outbound)\r\n}\r\n\r\nexport default createExpirationTransform\r\n","import { combineReducers } from 'redux'\r\nimport { persistReducer } from 'redux-persist'\r\nimport storage from 'redux-persist/lib/storage' // defaults to localStorage for web and AsyncStorage for react-native\r\nimport hardSet from 'redux-persist/lib/stateReconciler/hardSet'\r\nimport immutableTransform from 'pmt-modules/redux/immutableTransform'\r\nimport { connectRouter } from 'connected-react-router'\r\n\r\nimport pickBy from 'lodash/pickBy'\r\nimport identity from 'lodash/identity'\r\n\r\nimport { uiReducer } from 'pmt-modules/reduxUi'\r\nimport uxReducer from './uxReducer'\r\nimport { formReducer } from '../../form'\r\nimport { searchReducer } from '../../search'\r\nimport { statisticsReducer } from '../../statistics'\r\n\r\nimport { i18nReducer } from 'pmt-modules/i18n'\r\nimport { getHistory } from 'pmt-modules/routing'\r\nimport Logger from 'pmt-utils/logger'\r\n\r\nimport { createExpirationTransform } from './reduxPersistTransformExpire'\r\n\r\n// In development, ?simulateStorageFull=1 lets the initial write succeed, then rejects later writes.\r\nconst simulateStorageFull =\r\n  import.meta.env.DEV &&\r\n  new URLSearchParams(window.location.search).get('simulateStorageFull') === '1'\r\nlet successfulWrites = 0\r\n\r\nconst loggingStorage = {\r\n  ...storage,\r\n  setItem: (key, value) => {\r\n    const write =\r\n      simulateStorageFull && successfulWrites >= 1\r\n        ? Promise.reject(new DOMException('Simulated storage quota exceeded', 'QuotaExceededError'))\r\n        : storage.setItem(key, value)\r\n\r\n    return write\r\n      .then(() => {\r\n        successfulWrites += 1\r\n      })\r\n      .catch(error => {\r\n        // adding in the debug log the approximative size of each key stored in the state\r\n        // so we can identify, if the failure is due to storage quota being exceeded, which key we may have to optimize\r\n        let keySizes = 'unavailable (could not inspect serialized state)'\r\n        try {\r\n          keySizes = Object.entries(JSON.parse(value))\r\n            .map(\r\n              ([stateKey, serializedState]) =>\r\n                `${stateKey}: ${(\r\n                  ((JSON.stringify(stateKey).length + 1 + JSON.stringify(serializedState).length) *\r\n                    2) /\r\n                  1024\r\n                ).toFixed(1)} KiB`\r\n            )\r\n            .join(', ')\r\n        } catch (inspectionError) {\r\n          // Preserve the original storage error even if the diagnostic payload cannot be parsed.\r\n        }\r\n\r\n        // we want any write failure to be sent to Sentry, so we can see that it failed, and understand why\r\n        Logger.error(\r\n          `redux-persist: failed to write storage key \"${key}\" (approximate UTF-16 sizes: ${keySizes}; total: ${(\r\n            (value.length * 2) /\r\n            1024\r\n          ).toFixed(1)} KiB)`,\r\n          error\r\n        )\r\n        throw error\r\n      })\r\n  },\r\n}\r\n\r\nconst persistConfig = {\r\n  key: 'root',\r\n  storage: loggingStorage,\r\n  stateReconciler: hardSet,\r\n  transforms: [\r\n    immutableTransform(),\r\n    // uncomment the `simulateExpired` option if you want to simulate a state expiration\r\n    createExpirationTransform({\r\n      // simulateExpired: 'orderPost', // force the \"orderPost\" key to behave as being expired\r\n    }),\r\n  ],\r\n  timeout: 10000, // 10s. default is 5s but we want to be sure that the rehydration is done before the app is rendered\r\n}\r\n\r\nconst configureRootReducer = appOptions => {\r\n  let reducers = {\r\n    router: connectRouter(getHistory()),\r\n    // entities are defined by the project with persistence set to false by default\r\n    // we use whitelist to persist only reducers with the option set in [project]/src/config/entities\r\n    entities: persistReducer(\r\n      {\r\n        ...persistConfig,\r\n        whitelist: Object.keys(appOptions.entities).filter(\r\n          reducerName =>\r\n            appOptions.entities[reducerName].options &&\r\n            appOptions.entities[reducerName].options.persist\r\n        ),\r\n      },\r\n      // It is an object, so we have to use combineReducers.\r\n      combineReducers(appOptions.entities)\r\n    ),\r\n\r\n    ux: uxReducer,\r\n    ui: uiReducer,\r\n    form: formReducer,\r\n    search: searchReducer,\r\n    statistics: statisticsReducer,\r\n\r\n    i18n: i18nReducer,\r\n  }\r\n\r\n  // remove null reducers\r\n  reducers = pickBy(reducers, identity)\r\n\r\n  return combineReducers(reducers)\r\n}\r\n\r\nexport default configureRootReducer\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nimport { createStore, compose } from 'redux'\r\n\r\nconst createStoreCustom = appOptions => {\r\n  // verify\r\n  if (process.env.__DEV__) {\r\n    appOptions.middlewares.forEach((middleware, index) => {\r\n      invariant(!isNil(middleware), `defined middleware is nil at index ${index}`)\r\n    })\r\n  }\r\n\r\n  let creators = []\r\n\r\n  if (!isEmpty(creators)) {\r\n    return compose(...creators)(createStore)\r\n  }\r\n\r\n  return createStore\r\n}\r\n\r\nexport default createStoreCustom\r\n","function createThunkMiddleware(extraArgument) {\n  return function (_ref) {\n    var dispatch = _ref.dispatch,\n        getState = _ref.getState;\n    return function (next) {\n      return function (action) {\n        if (typeof action === 'function') {\n          return action(dispatch, getState, extraArgument);\n        }\n\n        return next(action);\n      };\n    };\n  };\n}\n\nvar thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\n\nexport default thunk;","/**\r\n * middleware that catch any error while dispatching an action\r\n *\r\n *\r\n * @link https://blog.sentry.io/2016/08/24/redux-middleware-error-logging\r\n *\r\n * see https://github.com/captbaritone/raven-for-redux/blob/master/index.js\r\n *\r\n * https://github.com/ngokevin/redux-raven-middleware/blob/master/index.es6\r\n *\r\n */\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport isNil from 'lodash/isNil'\r\n\r\nconst crashReporter = store => next => action => {\r\n  try {\r\n    if (isNil(action)) {\r\n      Logger.warn('crashReporter', 'Action is nil')\r\n    } else {\r\n      return next(action) // dispatch\r\n    }\r\n  } catch (err) {\r\n    Logger.reduxException(err, action, store.getState())\r\n\r\n    throw err // re-throw error in order to be seen on console\r\n  }\r\n}\r\n\r\nexport default crashReporter\r\n","export const UnauthorizedAction = 'API::API_RESULT::UNAUTHORIZED'\r\n\r\nexport const unauthorized = error => ({\r\n  type: UnauthorizedAction,\r\n  error,\r\n})\r\n","// import Immutable from 'immutable'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nimport ApiManager from '../ApiManager'\r\n\r\nimport { REQUEST, TYPES, DATA, API_CALL } from '../constants'\r\nimport { unauthorized } from '../actions'\r\nimport { createMiddleware } from '../../redux'\r\nimport { isActionApiCall } from '../utils'\r\n\r\n// Fetches an API response. It is here we should normalizes the result JSON according to schema.\r\n// This would make every API response have the same shape, regardless of how nested it was.\r\nconst callApi = (request, schema) =>\r\n  new Promise((resolve, reject) => {\r\n    const success = (responseJsonContent, response) => {\r\n      resolve({ responseJsonContent, response })\r\n    }\r\n\r\n    const failure = apiError => {\r\n      reject(apiError)\r\n    }\r\n\r\n    request.success = success\r\n    request.failure = failure\r\n\r\n    ApiManager.run(request)\r\n  })\r\n\r\n// A Redux middleware that interprets actions with API_CALL info specified.\r\n// Performs the call and promises when such actions are dispatched.\r\nexport const apiMiddleware = createMiddleware(\r\n  isActionApiCall,\r\n  ({ getState, dispatch, next, action }) => {\r\n    const apiCall = action[API_CALL]\r\n\r\n    const request = apiCall[REQUEST]\r\n    const types = apiCall[TYPES]\r\n    const data = apiCall[DATA]\r\n\r\n    const { schema } = request\r\n\r\n    // if (!schema) {\r\n    //   throw new Error('Specify one of the exported Schemas.')\r\n    // }\r\n\r\n    if (!Array.isArray(types) || types.length !== 3) {\r\n      throw new Error('Expected an array of three action types.')\r\n    }\r\n\r\n    if (!types.every(type => typeof type === 'string')) {\r\n      throw new Error('Expected action types to be strings.')\r\n    }\r\n\r\n    const actionWith = data => {\r\n      const finalAction = Object.assign({}, action, data)\r\n      delete finalAction[API_CALL]\r\n      return finalAction\r\n    }\r\n\r\n    const [requestType, successType, failureType] = types\r\n    next(\r\n      actionWith({\r\n        type: requestType,\r\n        request: request,\r\n        data: data,\r\n      })\r\n    )\r\n\r\n    request.attemptRefreshOptions = {\r\n      // The next 3 parameters are simply the arguments of\r\n      // the middleware function\r\n      action,\r\n      next,\r\n      getState,\r\n      dispatch,\r\n      failureAction: unauthorized,\r\n      ...request.attemptRefreshOptions,\r\n    }\r\n\r\n    return callApi(request, schema)\r\n      .then(({ responseJsonContent, response }) =>\r\n        next(\r\n          actionWith({\r\n            type: successType,\r\n            response: responseJsonContent,\r\n            data: data,\r\n            responseData: {\r\n              status: response && response.status,\r\n              headers: response && response.headers,\r\n              ok: response && response.ok,\r\n              url: response && response.url,\r\n            },\r\n          })\r\n        )\r\n      )\r\n      .catch(apiError => {\r\n        // see oauth attemptRefresh\r\n        if (isFunction(request.attemptRefresh)) {\r\n          request.attemptRefresh(request.attemptRefreshOptions)(apiError)\r\n        }\r\n\r\n        next(\r\n          actionWith({\r\n            type: failureType,\r\n            error: apiError,\r\n            data: data,\r\n          })\r\n        )\r\n      })\r\n  }\r\n)\r\n","/**\r\n * Authentication mode\r\n * Caution: this is a bitfield\r\n */\r\nexport const AuthMode = {\r\n  NORMAL: 0,\r\n  LIGHT: 1,\r\n  INCOGNITO_ONLY: 2,\r\n}\r\n\r\n/**\r\n * Delay within token should force refresh before doing anything else\r\n */\r\nexport const ACCESS_TOKEN_DELAY_REFRESH = 1 * 60 * 1000 // 1 minutes\r\n\r\n/**\r\n * Delay within it is acceptable to refresh token in background\r\n */\r\nexport const ACCESS_TOKEN_DELAY_REFRESH_SOON = 3 * 60 * 1000 // 3 minutes\r\n\r\n/**\r\n * Refresh token lifetime. Used to expire cookie.\r\n */\r\nexport const REFRESH_TOKEN_LIFETIME = 13 * 24 * 60 * 60 * 1000 // 13 days\r\n\r\nexport const INCOGNITO_TOKEN_LIFETIME = 365 * 24 * 60 * 60 * 1000 // 365 days\r\n\r\nexport const StorageItem = {\r\n  ACCESS_TOKEN: 'STORAGE::ACCESS_TOKEN',\r\n}\r\n","import moment from 'moment'\r\n\r\nimport { getCookie, setCookie, deleteCookie } from 'pmt-modules/storage'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport {\r\n  ACCESS_TOKEN_DELAY_REFRESH,\r\n  ACCESS_TOKEN_DELAY_REFRESH_SOON,\r\n  REFRESH_TOKEN_LIFETIME,\r\n  INCOGNITO_TOKEN_LIFETIME,\r\n  StorageItem,\r\n} from '../constants'\r\n\r\nlet _clientId = null\r\n\r\nconst getCookieKey = () => `${StorageItem.ACCESS_TOKEN}::${_clientId}`\r\n\r\nexport const setClientId = clientId => (_clientId = clientId)\r\n\r\nexport const saveAccessToken = token => {\r\n  setCookie(getCookieKey(), JSON.stringify(token), REFRESH_TOKEN_LIFETIME)\r\n}\r\n\r\nexport const removeAccessToken = () => {\r\n  deleteCookie(getCookieKey())\r\n}\r\n\r\nexport const getAuthCookie = () => {\r\n  try {\r\n    return JSON.parse(getCookie(getCookieKey()))\r\n  } catch (e) {\r\n    return null\r\n  }\r\n}\r\n\r\n/**\r\n * default access token can be defined if is passed as GET query parameter\r\n * otherwise, we take the cookie access token\r\n */\r\nexport const getAuthorization = () => {\r\n  if (getQueryParam('access_token')) {\r\n    return `Bearer ${getQueryParam('access_token')}`\r\n  }\r\n\r\n  const cookie = getAuthCookie()\r\n\r\n  if (cookie && cookie.access_token) {\r\n    return `Bearer ${cookie.access_token}`\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * Check if token has expired or will expire within a short delay\r\n */\r\nexport const hasTokenExpired = (expirationMoment, now = moment()) =>\r\n  now.isAfter(expirationMoment) ||\r\n  moment(now)\r\n    .add(ACCESS_TOKEN_DELAY_REFRESH, 'ms')\r\n    .isAfter(expirationMoment)\r\n\r\n/**\r\n * Check if token has expired or will expire within a  relative short delay\r\n */\r\nexport const willTokenExpireSoon = (expirationMoment, now = moment()) =>\r\n  moment(now)\r\n    .add(ACCESS_TOKEN_DELAY_REFRESH_SOON, 'ms')\r\n    .isAfter(expirationMoment)\r\n\r\nlet _restaurantsGroupId = null\r\n\r\nexport const setRestaurantsGroupId = restaurantsGroupId =>\r\n  (_restaurantsGroupId = restaurantsGroupId)\r\n\r\nconst getUserLightCookieKey = () => `ul::${_restaurantsGroupId}`\r\n\r\nconst getIncognitoCookieKey = () => `incognito::${_restaurantsGroupId}`\r\n\r\nexport const saveUserLightCookie = user => {\r\n  setCookie(getUserLightCookieKey(), JSON.stringify(user), INCOGNITO_TOKEN_LIFETIME)\r\n}\r\n\r\nexport const saveIncognitoCookie = userId => {\r\n  setCookie(getIncognitoCookieKey(), JSON.stringify(userId), INCOGNITO_TOKEN_LIFETIME)\r\n}\r\n\r\nexport const removeUserLight = () => {\r\n  deleteCookie(getUserLightCookieKey())\r\n}\r\n\r\nexport const removeIncognitoCookie = () => {\r\n  deleteCookie(getIncognitoCookieKey())\r\n}\r\n\r\nexport const getUserLightCookie = () => {\r\n  try {\r\n    return JSON.parse(getCookie(getUserLightCookieKey()))\r\n  } catch (e) {\r\n    return null\r\n  }\r\n}\r\n\r\nexport const getIncognitoCookie = () => {\r\n  try {\r\n    return JSON.parse(getCookie(getIncognitoCookieKey()))\r\n  } catch (e) {\r\n    return null\r\n  }\r\n}\r\n","var baseProperty = require('./_baseProperty');\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nmodule.exports = asciiSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n  var result = reUnicode.lastIndex = 0;\n  while (reUnicode.test(string)) {\n    ++result;\n  }\n  return result;\n}\n\nmodule.exports = unicodeSize;\n","var asciiSize = require('./_asciiSize'),\n    hasUnicode = require('./_hasUnicode'),\n    unicodeSize = require('./_unicodeSize');\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n  return hasUnicode(string)\n    ? unicodeSize(string)\n    : asciiSize(string);\n}\n\nmodule.exports = stringSize;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArrayLike = require('./isArrayLike'),\n    isString = require('./isString'),\n    stringSize = require('./_stringSize');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n  if (collection == null) {\n    return 0;\n  }\n  if (isArrayLike(collection)) {\n    return isString(collection) ? stringSize(collection) : collection.length;\n  }\n  var tag = getTag(collection);\n  if (tag == mapTag || tag == setTag) {\n    return collection.size;\n  }\n  return baseKeys(collection).length;\n}\n\nmodule.exports = size;\n","export const stopIterationValues = ['fr', 'en']\r\n\r\nexport const checkAccessSecurityModes = {\r\n  TABLE_NUMBER: 'TABLE_NUMBER',\r\n  POS_CHECK_ID: 'POS_CHECK_ID',\r\n}\r\n\r\n// This, as the whole module, is a duplicate of ApiConsumer module because of legacy\r\nexport const AppConfigPresets = {\r\n  PLUGIN_ORDER: 'PLUGIN_ORDER',\r\n  DIGITAL_MENU: 'DIGITAL_MENU',\r\n}\r\n\r\nexport const defaultTexts = {\r\n  ORDER_PLUGIN: {\r\n    labelForOrderMode: {\r\n      '0': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '1': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '2': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n    },\r\n    titleForOrderMode: {\r\n      '0': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '1': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '2': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n    },\r\n    totalCartlabelForOrderMode: {\r\n      '0': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '1': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '2': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n    },\r\n  },\r\n}\r\n","import forEach from 'lodash/forEach'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport size from 'lodash/size'\r\n\r\nimport { stopIterationValues } from '../constants'\r\n\r\nconst containsStopIteration = object => {\r\n  let _return = false\r\n\r\n  forEach(object, (_obj, key) => {\r\n    if (stopIterationValues.indexOf(key) !== -1) {\r\n      _return = key\r\n    }\r\n  })\r\n\r\n  return _return\r\n}\r\n\r\nexport const reduceAppConfigTexts = (texts, locale) => {\r\n  const _locale = locale\r\n\r\n  const recursiveCall = object => {\r\n    let finalObject = object\r\n\r\n    for (let key in object) {\r\n      const _obj = object[key]\r\n      const hasKey = containsStopIteration(_obj)\r\n\r\n      // n'a pas de fr ou en\r\n      if (!hasKey) {\r\n        // objet n'est pas vide\r\n        if (size(_obj) > 0) {\r\n          finalObject = { ...finalObject, [key]: recursiveCall(_obj) }\r\n\r\n          // objet vide\r\n        } else {\r\n          finalObject = { ...finalObject, [key]: null }\r\n        }\r\n\r\n        // fr ou en présent\r\n      } else {\r\n        // variable existe avec la locale\r\n        if (!isUndefined(_obj[_locale])) {\r\n          finalObject = { ...finalObject, [key]: _obj[_locale] }\r\n\r\n          // variable n'existe pas\r\n        } else {\r\n          finalObject = { ...finalObject, [key]: null }\r\n        }\r\n      }\r\n    }\r\n\r\n    return finalObject\r\n  }\r\n\r\n  return recursiveCall(texts)\r\n}\r\n\r\nexport const formatTexts = (texts, locale) => reduceAppConfigTexts(texts, locale)\r\n","let _appConfig = {}\r\n\r\nexport const setDefaultAppConfig = appConfig => {\r\n  _appConfig = appConfig\r\n}\r\n\r\n// default {} since the backoffice does not have a default app config\r\nexport const getDefaultAppConfig = () => _appConfig || {}\r\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   if (_.isArray(objValue)) {\n *     return objValue.concat(srcValue);\n *   }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n  baseMerge(object, source, srcIndex, customizer);\n});\n\nmodule.exports = mergeWith;\n","import mergeWith from 'lodash/mergeWith'\r\nimport isNil from 'lodash/isNil'\r\nimport isArray from 'lodash/isArray'\r\nimport { getDefaultAppConfig } from './config'\r\n\r\n// mergeWith customizer when array, we don't want to merge, but to replace\r\nconst customizer = (objValue, srcValue) =>\r\n  isArray(objValue) && srcValue !== null ? srcValue : srcValue === null ? objValue : undefined\r\n\r\n/**\r\n * merge two config objects, using a customizer.\r\n * @param {object} defaultData\r\n * @param {object} currentData\r\n */\r\nexport const mergeConfigObject = (defaultData, currentData) =>\r\n  mergeWith(defaultData || {}, currentData || {}, customizer)\r\n\r\n/**\r\n * add default configs to the given config\r\n * @param {object} config base config\r\n */\r\nexport const mergeAppConfigWithDefault = (config = {}) => {\r\n  if (isNil(config)) {\r\n    config = {}\r\n  }\r\n  // Note: we don't handle default texts here since it is used to pass a config to our modules\r\n  // who don't requires texts.\r\n  // Plus we need a locale that we don't have here, and we could not change the app config texts if\r\n  // the locale change\r\n\r\n  // keys of the app config objects to apply defaults value to\r\n  const appConfigDefaultKeys = ['security', 'front', 'user']\r\n\r\n  let updatedConfig = config\r\n  appConfigDefaultKeys.forEach(key => {\r\n    updatedConfig[key] = mergeConfigObject(getDefaultAppConfig()[key], config[key], customizer)\r\n  })\r\n\r\n  return updatedConfig\r\n}\r\n","import invariant from 'invariant'\r\nimport isNaN from 'lodash/isNaN'\r\nimport { getLocale } from 'pmt-modules/i18n'\r\nimport { isKiosk } from 'pmt-modules/environment'\r\n\r\n/**\r\n * Currency is set as global var\r\n * we may set this for example when we fetch the restaurant\r\n * Default still remains as EUR\r\n */\r\nlet _currency = 'EUR'\r\n\r\nexport const setCurrency = currency => (_currency = currency)\r\n\r\n// deprecated, use formatPriceWithCurrency instead\r\n// this will allow to have 123$ or $123 depending on the locale, and so on\r\nexport const getCurrencySymbol = (currency = _currency) => {\r\n  switch (currency) {\r\n    case 'AED':\r\n      return 'د.إ'\r\n    case 'ALL':\r\n      return 'L'\r\n    case 'AMD':\r\n      return '֏'\r\n    case 'AOA':\r\n      return 'Kz'\r\n    case 'ARS':\r\n      return 'AR$'\r\n    case 'AUD':\r\n      return 'A$'\r\n    case 'AWG':\r\n      return 'ƒ'\r\n    case 'AZN':\r\n      return '₼'\r\n    case 'BAM':\r\n      return 'KM'\r\n    case 'BBD':\r\n      return 'Bds$'\r\n    case 'BDT':\r\n      return '৳'\r\n    case 'BGN':\r\n      return 'Лв'\r\n    case 'BHD':\r\n      return '.د.ب'\r\n    case 'BMD':\r\n      return '$'\r\n    case 'BND':\r\n      return 'B$'\r\n    case 'BOB':\r\n      return 'Bs.'\r\n    case 'BRL':\r\n      return 'R$'\r\n    case 'BSD':\r\n      return 'B$'\r\n    case 'BWP':\r\n      return 'P'\r\n    case 'BYN':\r\n      return 'Br'\r\n    case 'BZD':\r\n      return 'BZ$'\r\n    case 'CAD':\r\n      return 'C$'\r\n    case 'CHF':\r\n      return 'CHF'\r\n    case 'CLP':\r\n      return 'CLP$'\r\n    case 'CNH':\r\n      return '¥'\r\n    case 'CNY':\r\n      return '¥'\r\n    case 'COP':\r\n      return 'COL$'\r\n    case 'CRC':\r\n      return '₡'\r\n    case 'CUP':\r\n      return '₱'\r\n    case 'CVE':\r\n      return 'Esc'\r\n    case 'CZK':\r\n      return 'Kč'\r\n    case 'DJF':\r\n      return 'Fdj'\r\n    case 'DKK':\r\n      return 'kr'\r\n    case 'DOP':\r\n      return 'RD$'\r\n    case 'DZD':\r\n      return 'دج'\r\n    case 'EGP':\r\n      return 'E£'\r\n    case 'ETB':\r\n      return 'Br'\r\n    case 'EUR':\r\n      return '€'\r\n    case 'FJD':\r\n      return 'FJ$'\r\n    case 'FKP':\r\n      return '£'\r\n    case 'GBP':\r\n      return '£'\r\n    case 'GEL':\r\n      return '₾'\r\n    case 'GHS':\r\n      return 'GH₵'\r\n    case 'GIP':\r\n      return '£'\r\n    case 'GMD':\r\n      return 'D'\r\n    case 'GNF':\r\n      return 'FG'\r\n    case 'GTQ':\r\n      return 'Q'\r\n    case 'GYD':\r\n      return 'G$'\r\n    case 'HKD':\r\n      return 'HK$'\r\n    case 'HNL':\r\n      return 'L'\r\n    case 'HTG':\r\n      return 'G'\r\n    case 'HUF':\r\n      return 'Ft'\r\n    case 'IDR':\r\n      return 'Rp'\r\n    case 'ILS':\r\n      return '₪'\r\n    case 'INR':\r\n      return '₹'\r\n    case 'IQD':\r\n      return 'ع.د'\r\n    case 'ISK':\r\n      return 'kr'\r\n    case 'JMD':\r\n      return 'J$'\r\n    case 'JOD':\r\n      return 'JD'\r\n    case 'JPY':\r\n      return '¥'\r\n    case 'KES':\r\n      return 'KSh'\r\n    case 'KGS':\r\n      return 'сом'\r\n    case 'KHR':\r\n      return '៛'\r\n    case 'KMF':\r\n      return 'CF'\r\n    case 'KRW':\r\n      return '₩'\r\n    case 'KWD':\r\n      return 'KD'\r\n    case 'KYD':\r\n      return 'CI$'\r\n    case 'KZT':\r\n      return '₸'\r\n    case 'LAK':\r\n      return '₭'\r\n    case 'LBP':\r\n      return 'ل.ل'\r\n    case 'LKR':\r\n      return 'Rs'\r\n    case 'LYD':\r\n      return 'LD'\r\n    case 'MAD':\r\n      return 'د.م.'\r\n    case 'MDL':\r\n      return 'L'\r\n    case 'MKD':\r\n      return 'ден'\r\n    case 'MMK':\r\n      return 'K'\r\n    case 'MNT':\r\n      return '₮'\r\n    case 'MOP':\r\n      return 'MOP$'\r\n    case 'MRU':\r\n      return 'UM'\r\n    case 'MUR':\r\n      return '₨'\r\n    case 'MVR':\r\n      return 'Rf'\r\n    case 'MWK':\r\n      return 'MK'\r\n    case 'MXN':\r\n      return 'MX$'\r\n    case 'MYR':\r\n      return 'RM'\r\n    case 'MZN':\r\n      return 'MT'\r\n    case 'NAD':\r\n      return 'N$'\r\n    case 'NGN':\r\n      return '₦'\r\n    case 'NIO':\r\n      return 'C$'\r\n    case 'NOK':\r\n      return 'kr'\r\n    case 'NPR':\r\n      return '₨'\r\n    case 'NZD':\r\n      return 'NZ$'\r\n    case 'OMR':\r\n      return '﷼'\r\n    case 'PAB':\r\n      return 'B/.'\r\n    case 'PEN':\r\n      return 'S/'\r\n    case 'PGK':\r\n      return 'K'\r\n    case 'PHP':\r\n      return '₱'\r\n    case 'PKR':\r\n      return '₨'\r\n    case 'PLN':\r\n      return 'zł'\r\n    case 'PYG':\r\n      return '₲'\r\n    case 'QAR':\r\n      return '﷼'\r\n    case 'RON':\r\n      return 'lei'\r\n    case 'RSD':\r\n      return 'дин'\r\n    case 'RUB':\r\n      return '₽'\r\n    case 'RWF':\r\n      return 'FRw'\r\n    case 'SAR':\r\n      return '﷼'\r\n    case 'SBD':\r\n      return 'SI$'\r\n    case 'SCR':\r\n      return '₨'\r\n    case 'SEK':\r\n      return 'kr'\r\n    case 'SGD':\r\n      return 'S$'\r\n    case 'SHP':\r\n      return '£'\r\n    case 'SLE':\r\n      return 'Le'\r\n    case 'SOS':\r\n      return 'S'\r\n    case 'SRD':\r\n      return 'SR$'\r\n    case 'STN':\r\n      return 'Db'\r\n    case 'SVC':\r\n      return '$'\r\n    case 'SZL':\r\n      return 'L'\r\n    case 'THB':\r\n      return '฿'\r\n    case 'TND':\r\n      return 'د.ت'\r\n    case 'TOP':\r\n      return 'T$'\r\n    case 'TRY':\r\n      return '₺'\r\n    case 'TTD':\r\n      return 'TT$'\r\n    case 'TWD':\r\n      return 'NT$'\r\n    case 'TZS':\r\n      return 'TSh'\r\n    case 'UAH':\r\n      return '₴'\r\n    case 'UGX':\r\n      return 'USh'\r\n    case 'USD':\r\n      return '$'\r\n    case 'UYU':\r\n      return '$U'\r\n    case 'UZS':\r\n      return 'лв'\r\n    case 'VEF':\r\n      return 'Bs'\r\n    case 'VND':\r\n      return '₫'\r\n    case 'VUV':\r\n      return 'VT'\r\n    case 'WST':\r\n      return 'WS$'\r\n    case 'XAF':\r\n      return 'FCFA'\r\n    case 'XCD':\r\n      return 'EC$'\r\n    case 'XCG':\r\n      return 'XCG'\r\n    case 'XOF':\r\n      return 'CFA'\r\n    case 'XPF':\r\n      return '₣'\r\n    case 'YER':\r\n      return '﷼'\r\n    case 'ZAR':\r\n      return 'R'\r\n    case 'ZMW':\r\n      return 'ZK'\r\n    default:\r\n      return currency\r\n  }\r\n}\r\n\r\n/**\r\n * ISO_4217 format expected\r\n * @link https://www.wikiwand.com/en/ISO_4217\r\n */\r\nexport const Currencies = {\r\n  AED: 'AED', // UAE Dirham\r\n  ALL: 'ALL', // Albanian Lek\r\n  AMD: 'AMD', // Armenian Dram\r\n  AOA: 'AOA', // Angolan Kwanza\r\n  ARS: 'ARS', // Nuevo Argentine Peso\r\n  AUD: 'AUD', // Australian Dollar\r\n  AWG: 'AWG', // Aruban Guilder\r\n  AZN: 'AZN', // Azerbaijani manat\r\n  BAM: 'BAM', // Bosnia and Herzegovina Convertible Marks\r\n  BBD: 'BBD', // Barbados Dollar\r\n  BDT: 'BDT', // Bangladesh Taka\r\n  BGN: 'BGN', // New Bulgarian Lev\r\n  BHD: 'BHD', // Bahraini Dinar\r\n  BMD: 'BMD', // Bermudian Dollar\r\n  BND: 'BND', // Brunei Dollar\r\n  BOB: 'BOB', // Bolivia Boliviano\r\n  BRL: 'BRL', // Brazilian Real\r\n  BSD: 'BSD', // Bahamian Dollar\r\n  BWP: 'BWP', // Botswana Pula\r\n  BYN: 'BYN', // New Belarusian Ruble\r\n  BZD: 'BZD', // Belize Dollar\r\n  CAD: 'CAD', // Canadian Dollar\r\n  CHF: 'CHF', // Swiss Franc\r\n  CLP: 'CLP', // Chilean Peso\r\n  CNH: 'CNH', // Yuan Renminbi (offshore)\r\n  CNY: 'CNY', // Yuan Renminbi (onshore)\r\n  COP: 'COP', // Colombian Peso\r\n  CRC: 'CRC', // Costa Rican Colon\r\n  CUP: 'CUP', // Cuban Peso\r\n  CVE: 'CVE', // Cape Verdi Escudo\r\n  CZK: 'CZK', // Czech Koruna\r\n  DJF: 'DJF', // Djibouti Franc\r\n  DKK: 'DKK', // Danish Krone\r\n  DOP: 'DOP', // Dominican Republic Peso\r\n  DZD: 'DZD', // Algerian Dinar\r\n  EGP: 'EGP', // Egyptian Pound\r\n  ETB: 'ETB', // Ethiopian Birr\r\n  EUR: 'EUR', // Euro\r\n  FJD: 'FJD', // Fiji Dollar\r\n  FKP: 'FKP', // Falkland Islands Pound\r\n  GBP: 'GBP', // Pound Sterling\r\n  GEL: 'GEL', // Georgian Lari\r\n  GHS: 'GHS', // Ghanaian Cedi (3rd)\r\n  GIP: 'GIP', // Gibraltar Pound\r\n  GMD: 'GMD', // Gambia Delasi\r\n  GNF: 'GNF', // Guinea Franc\r\n  GTQ: 'GTQ', // Guatemala Quetzal\r\n  GYD: 'GYD', // Guyanese Dollar\r\n  HKD: 'HKD', // Hong Kong Dollar\r\n  HNL: 'HNL', // Honduras Lempira\r\n  HTG: 'HTG', // Haitian Gourde\r\n  HUF: 'HUF', // Hungarian Forint\r\n  IDR: 'IDR', // Indonesian Rupiah\r\n  ILS: 'ILS', // New Israeli Scheqel\r\n  INR: 'INR', // Indian Rupee\r\n  IQD: 'IQD', // Iraqi Dinar\r\n  ISK: 'ISK', // Iceland Krona\r\n  JMD: 'JMD', // Jamaican Dollar\r\n  JOD: 'JOD', // Jordanian Dinar\r\n  JPY: 'JPY', // Japanese Yen\r\n  KES: 'KES', // Kenyan Shilling\r\n  KGS: 'KGS', // Kyrgyzstan Som\r\n  KHR: 'KHR', // Cambodia Riel\r\n  KMF: 'KMF', // Comoro Franc\r\n  KRW: 'KRW', // South-Korean Won\r\n  KWD: 'KWD', // Kuwaiti Dinar\r\n  KYD: 'KYD', // Cayman Islands Dollar\r\n  KZT: 'KZT', // Kazakhstani Tenge\r\n  LAK: 'LAK', // Laos Kip\r\n  LBP: 'LBP', // Lebanese Pound\r\n  LKR: 'LKR', // Sri Lanka Rupee\r\n  LYD: 'LYD', // Libyan Dinar\r\n  MAD: 'MAD', // Moroccan Dirham\r\n  MDL: 'MDL', // Moldovia Leu\r\n  MKD: 'MKD', // Macedonian Denar\r\n  MMK: 'MMK', // Myanmar Kyat\r\n  MNT: 'MNT', // Mongolia Tugrik\r\n  MOP: 'MOP', // Macau Pataca\r\n  MRU: 'MRU', // Mauritania Ouguiya\r\n  MUR: 'MUR', // Mauritius Rupee\r\n  MVR: 'MVR', // Maldives Rufiyaa\r\n  MWK: 'MWK', // Malawi Kwacha\r\n  MXN: 'MXN', // Mexican Peso\r\n  MYR: 'MYR', // Malaysian Ringgit\r\n  MZN: 'MZN', // Mozambican Metical\r\n  NAD: 'NAD', // Namibian Dollar\r\n  NGN: 'NGN', // Nigerian Naira\r\n  NIO: 'NIO', // Nicaragua Cordoba Oro\r\n  NOK: 'NOK', // Norwegian Krone\r\n  NPR: 'NPR', // Nepalese Rupee\r\n  NZD: 'NZD', // New Zealand Dollar\r\n  OMR: 'OMR', // Rial Omani\r\n  PAB: 'PAB', // Panamanian Balboa\r\n  PEN: 'PEN', // Peruvian Nuevo Sol\r\n  PGK: 'PGK', // New Guinea Kina\r\n  PHP: 'PHP', // Philippine Peso\r\n  PKR: 'PKR', // Pakistan Rupee\r\n  PLN: 'PLN', // New Polish Zloty\r\n  PYG: 'PYG', // Paraguay Guarani\r\n  QAR: 'QAR', // Qatari Rial\r\n  RON: 'RON', // New Romanian Lei\r\n  RSD: 'RSD', // Serbian Dinar\r\n  RUB: 'RUB', // Russian Ruble\r\n  RWF: 'RWF', // Rwanda Franc\r\n  SAR: 'SAR', // Saudi Riyal\r\n  SBD: 'SBD', // Solomon Island Dollar\r\n  SCR: 'SCR', // Seychelles Rupee\r\n  SEK: 'SEK', // Swedish Krone\r\n  SGD: 'SGD', // Singapore Dollar\r\n  SHP: 'SHP', // St. Helena Pound\r\n  SLE: 'SLE', // Sierra Leone Leone\r\n  SOS: 'SOS', // Somalia Shilling\r\n  SRD: 'SRD', // Surinamese dollar\r\n  STN: 'STN', // Sao Tome & Principe Dobra\r\n  SVC: 'SVC', // El Salvador Colón\r\n  SZL: 'SZL', // Swaziland Lilangeni\r\n  THB: 'THB', // Thai Baht\r\n  TND: 'TND', // Tunisian Dinar\r\n  TOP: 'TOP', // Tonga Pa'anga\r\n  TRY: 'TRY', // New Turkish Lira\r\n  TTD: 'TTD', // Trinidad & Tobago Dollar\r\n  TWD: 'TWD', // New Taiwan Dollar\r\n  TZS: 'TZS', // Tanzanian Shilling\r\n  UAH: 'UAH', // Ukraine Hryvnia\r\n  UGX: 'UGX', // Uganda Shilling\r\n  USD: 'USD', // US Dollars\r\n  UYU: 'UYU', // Peso Uruguayo\r\n  UZS: 'UZS', // Uzbekistani Som\r\n  VEF: 'VEF', // Venezuelan Bolívar\r\n  VND: 'VND', // Vietnamese New Dong\r\n  VUV: 'VUV', // Vanuatu Vatu\r\n  WST: 'WST', // Samoan Tala\r\n  XAF: 'XAF', // CFA Franc BEAC\r\n  XCG: 'XCG', // Caribbean Guilder\r\n  XCD: 'XCD', // East Caribbean Dollar\r\n  XOF: 'XOF', // CFA Franc BCEAO\r\n  XPF: 'XPF', // CFP Franc\r\n  YER: 'YER', // Yemeni Rial\r\n  ZAR: 'ZAR', // South African Rand\r\n  ZMW: 'ZMW', // Zambian Kwacha\r\n}\r\n\r\nexport const getFloorAmount = amount => (Math.floor(amount * 100) / 100).toFixed(2)\r\n\r\n// this transforms the amount in a formatted string\r\nexport const getRoundAmount = amount => (Math.round(amount * 100) / 100).toFixed(2)\r\n\r\n// this rounds the amount (but it's still a number)\r\nexport const getRoundAmountNumber = amount => Math.round(amount * 100) / 100\r\n\r\nexport const getCeilAmount = amount => (Math.ceil(amount * 100) / 100).toFixed(2)\r\n\r\n// result sometimes goes from 9.7 to 969.9999999999999, so we round it.\r\nexport const getAmountInCents = amount => Math.round(amount * 100)\r\n\r\n// Helper: check if currency is a valid ISO 4217 code\r\nconst isValidCurrency = code => {\r\n  try {\r\n    new Intl.NumberFormat('en', { style: 'currency', currency: code })\r\n    return true\r\n  } catch {\r\n    return false\r\n  }\r\n}\r\n\r\nexport const formatPriceWithCurrency = (price, currency = _currency) => {\r\n  invariant(!isNaN(price), `${price} is not a number`)\r\n  let locale = getLocale() || 'fr'\r\n\r\n  // If unknown or invalid currency → use ¤\r\n  if (!currency || !isValidCurrency(currency)) {\r\n    return new Intl.NumberFormat(locale, {\r\n      style: 'currency',\r\n      currency: 'XXX', // ISO code for \"no currency\". should produce ¤ in most locales.\r\n      currencyDisplay: 'symbol',\r\n    })\r\n      .format(price)\r\n      .replace('XXX', multipleOrUnknownCurrency) // force ¤ if needed\r\n  }\r\n\r\n  if (currency === 'CHF') {\r\n    // for swiss amounts, we want to be sure the amount will be formatted in the \"swiss\" way,\r\n    // aka it-CH/de-CH/fr-CH, even if the user's browser is configured as  \"it\" or \"it_IT\"\r\n    // (because swiss people don't bother to configure computer/browser with the country-related locale,\r\n    // but complain when the formatting is not as they are used to)\r\n    if (locale.startsWith('it')) {\r\n      locale = 'it-CH'\r\n    }\r\n    if (locale.startsWith('fr')) {\r\n      locale = 'fr-CH'\r\n    }\r\n    if (locale.startsWith('de')) {\r\n      locale = 'de-CH'\r\n    }\r\n  }\r\n  return new Intl.NumberFormat(locale, {\r\n    style: 'currency',\r\n    currency: currency,\r\n    // we don't define minimumFractionDigits / maximumFractionDigits so the decimals will be defined based on the currency:\r\n    // Most currencies (e.g., USD, EUR) default to 2 decimal places.\r\n    // Currencies like ISK, JPY (without fractional units) default to 0 decimal places.\r\n    // Certain currencies like KWD (Kuwaiti Dinar) default to 3 decimal places.\r\n\r\n    // kiosk is using chrome 65, which reached its end of support on April 24, 2018.\r\n    currencyDisplay: isKiosk() ? 'symbol' : 'narrowSymbol', // to have $ and not US$ (= the daily-life symbol, and not the very-specific symbol). The ambiguity (between US$ and CA$, for example) should not be a problem, as the restaurant belongs to only one country, so the $ symbol is the one of this country\r\n  }).format(price)\r\n}\r\n\r\n/**\r\n * \"step\" value to use in an input of type \"number\"\r\n */\r\nexport const getStepValue = (currency = _currency) => {\r\n  // Use Intl.NumberFormat to determine the fraction digits for the selected currency\r\n  const formatter = new Intl.NumberFormat(undefined, {\r\n    style: 'currency',\r\n    currency: currency,\r\n  })\r\n  const fractionDigits = formatter.resolvedOptions().maximumFractionDigits\r\n\r\n  // Calculate the step based on fraction digits (e.g., 2 -> 0.01, 0 -> 1)\r\n  const stepValue = Math.pow(10, -fractionDigits)\r\n  return stepValue\r\n}\r\n\r\nexport const formatPrice = price => {\r\n  const priceAsFloat = price !== null ? parseFloat(price) : 0\r\n  return priceAsFloat.toLocaleString(getLocale() || 'fr', {\r\n    minimumFractionDigits: 2,\r\n    maximumFractionDigits: 2,\r\n  })\r\n}\r\n\r\nexport const formatPercent = v => `${v} %`\r\n\r\nexport const convertMillionPrice = price => parseFloat(price / 1000000)\r\n\r\nexport const formatMillionPrice = price => formatPrice(convertMillionPrice(price))\r\n\r\nexport const multipleOrUnknownCurrency = '¤'\r\n\r\nexport const formatMillionPriceWithCurrency = (price, currency = multipleOrUnknownCurrency) =>\r\n  formatPriceWithCurrency(convertMillionPrice(price), currency)\r\n\r\nexport const truncatePrice = price => {\r\n  return parseFloat(price.toFixed(2))\r\n}\r\n","import invariant from 'invariant'\r\nimport isArray from 'lodash/isArray'\r\nimport isNil from 'lodash/isNil'\r\nimport isString from 'lodash/isString'\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nconst createDeepFormatter = (itemFormatter, getChildren, updateChildren) => (item, props) => {\r\n  invariant(isFunction(itemFormatter), `'itemFormatter' must be a function`)\r\n  invariant(\r\n    isFunction(getChildren) || isString(getChildren),\r\n    `'getChildren' must be a function or a string`\r\n  )\r\n  // if getChildren is a string, no need of updateChildren\r\n  invariant(\r\n    isFunction(updateChildren) || isString(getChildren),\r\n    `'updateChildren' must be a function`\r\n  )\r\n\r\n  item = itemFormatter(item)\r\n\r\n  let children\r\n\r\n  if (isFunction(getChildren)) {\r\n    children = getChildren(item)\r\n  } else {\r\n    // getChildren is a string, that define the path to retrieve the children\r\n    children = item[getChildren]\r\n  }\r\n\r\n  if (!isNil(children)) {\r\n    // true if the children is an array, false otherwise\r\n    if (!isArray(children)) {\r\n      children = [children]\r\n    }\r\n\r\n    const deepFormatter = createDeepFormatter(itemFormatter, getChildren, updateChildren)\r\n\r\n    let formattedChildren = []\r\n    children.forEach(child => {\r\n      if (child) {\r\n        formattedChildren.push(deepFormatter(child, props))\r\n      }\r\n    })\r\n    if (isFunction(getChildren)) {\r\n      item = updateChildren(item, formattedChildren)\r\n    } else {\r\n      // getChildren is a string, that define the path to retrieve the children\r\n      item[getChildren] = formattedChildren\r\n    }\r\n  }\r\n\r\n  return item\r\n}\r\n\r\nexport default createDeepFormatter\r\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isArray from 'lodash/isArray'\r\n\r\nimport invariant from 'invariant'\r\n\r\nconst createFormatter = (...functions) => {\r\n  return (data, props = {}) => {\r\n    invariant(\r\n      isNil(props) || typeof props === 'object',\r\n      `createFormatter: format props must be an object not ${props}`\r\n    )\r\n\r\n    if (isNil(data)) {\r\n      return null\r\n    }\r\n\r\n    let res = isArray(data) ? [...data] : { ...data }\r\n\r\n    if (isEmpty(functions)) {\r\n      return res\r\n    }\r\n\r\n    functions.forEach(func => {\r\n      invariant(isFunction(func), 'invalid parameter pass to createFormatter')\r\n\r\n      const funcRes = func(res, props)\r\n\r\n      invariant(!isNil(funcRes), `[formatter] invalid return, data is nil on ${func}`)\r\n\r\n      res = funcRes\r\n    })\r\n\r\n    return res\r\n  }\r\n}\r\n\r\nexport default createFormatter\r\n","import isArray from 'lodash/isArray'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nconst createListFormatter = (itemFormatter, callback = null) => (list, props) => {\r\n  invariant(\r\n    isNil(props) || typeof props === 'object',\r\n    `createListFormatter: format props must be an object not ${props}`\r\n  )\r\n  invariant(\r\n    isArray(list),\r\n    `createListFormatter: list to format is not array ${JSON.stringify(list)}`\r\n  )\r\n  // TODO:\r\n  // invariant((callback === null || isFunction(list)), 'callback is not a function')\r\n\r\n  const listResult = (list || []).map(item => itemFormatter(item, props))\r\n\r\n  return callback ? callback(listResult) : listResult\r\n}\r\n\r\nexport default createListFormatter\r\n","import forEach from 'lodash/forEach'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nconst createMapFormatter = itemFormatter => (mapObject, props) => {\r\n  invariant(\r\n    isNil(props) || typeof props === 'object',\r\n    `createMapFormatter: format props must be an object not ${props}`\r\n  )\r\n\r\n  const res = {}\r\n  forEach(mapObject || {}, (item, key) => {\r\n    res[key] = itemFormatter(item, props)\r\n  })\r\n\r\n  return res\r\n}\r\n\r\nexport default createMapFormatter\r\n","var baseIndexOf = require('./_baseIndexOf'),\n    isArrayLike = require('./isArrayLike'),\n    isString = require('./isString'),\n    toInteger = require('./toInteger'),\n    values = require('./values');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n  collection = isArrayLike(collection) ? collection : values(collection);\n  fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n  var length = collection.length;\n  if (fromIndex < 0) {\n    fromIndex = nativeMax(length + fromIndex, 0);\n  }\n  return isString(collection)\n    ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n    : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nmodule.exports = includes;\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isFunction from 'lodash/isFunction'\r\nimport includes from 'lodash/includes'\r\n\r\nimport invariant from 'invariant'\r\n\r\nconst createSubObjectFormatter = (path, ...functions) => {\r\n  return (data, props = {}) => {\r\n    if (isNil(data)) {\r\n      return null\r\n    }\r\n\r\n    invariant(!includes(path, '.'), `invalid path ${path}, nested paths not handled.`)\r\n\r\n    let parentObject = { ...data }\r\n\r\n    if (isEmpty(functions)) {\r\n      return parentObject\r\n    }\r\n\r\n    functions.forEach(func => {\r\n      invariant(isFunction(func), 'invalid parameter pass to createSubObjectFormatter')\r\n\r\n      if (!isNil(parentObject[path])) {\r\n        const funcRes = func(parentObject[path], props)\r\n        invariant(!isNil(funcRes), `[formatter] invalid return, data is nil on ${func}`)\r\n        parentObject[path] = funcRes\r\n      }\r\n    })\r\n\r\n    return parentObject\r\n  }\r\n}\r\n\r\nexport default createSubObjectFormatter\r\n","export const UnavailabilityReason = {\r\n  ORDER_MODE: 'Order mode not available for this item',\r\n  OPENING_HOURS: 'Opening hours not available for this item',\r\n  AVAILABILITY_DATES: 'Dates not available for this item',\r\n  PRODUCTS_NOT_AVAILABLE_FOR_MENU_PART: \"Menu's part is not available\",\r\n  STOCK: 'Item has no stock',\r\n  EMPTY: 'Category is empty of product / menu / subcategory',\r\n  EMPTY_SUBCATEGORIES: 'Category only contains empty subcategories',\r\n  ALL_ITEMS_SHOULD_NOT_BE_DISPLAYED: 'All items should not be displayed',\r\n  ONE_MANDATORY_OPTION_NOT_AVAILABLE: \"One product's mandatory option is not available\",\r\n}\r\n\r\nexport const CatalogItemType = {\r\n  CATEGORY: 0,\r\n  MENU: 1,\r\n  PRODUCT: 2,\r\n}\r\n\r\n/**\r\n * Defines all the possible type values for a CartModifier's action\r\n */\r\nexport const CartModifierActionType = {\r\n  DISCOUNT_AMOUNT: 'DISCOUNT_AMOUNT',\r\n  DISCOUNT_PERCENTAGE: 'DISCOUNT_PERCENTAGE',\r\n}\r\n\r\nexport const CartModifierTargetType = {\r\n  /**\r\n   * a list of products, menus and/or categories\r\n   */\r\n  SPECIFIC_ITEMS: 'SPECIFIC_ITEMS',\r\n\r\n  /**\r\n   * all but a list of products, menus and/or categories\r\n   */\r\n  ALL_ITEMS_EXCEPT: 'ALL_ITEMS_EXCEPT',\r\n\r\n  /**\r\n   * on the shipping cost\r\n   */\r\n  SHIPPING_COST: 'SHIPPING_COST',\r\n\r\n  /**\r\n   * on the total of the cart\r\n   */\r\n  TOTAL: 'TOTAL',\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getForCurrentLocale } from 'pmt-modules/i18n'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { createSubObjectFormatter, createListFormatter, createFormatter } from 'pmt-utils/format'\r\nimport { CartModifierActionType, CartModifierTargetType } from '../constants'\r\n\r\nconst removeComplexCartModifier = cartModifiers => {\r\n  const newCartModifiers = (cartModifiers || []).filter(cartModifier => !cartModifier.complex)\r\n\r\n  return !isEmpty(newCartModifiers) ? newCartModifiers : null\r\n}\r\n\r\nexport const formatItemsCartModifiers = items => {\r\n  items = items.map(item => {\r\n    item.cartModifiers.list = removeComplexCartModifier(item.cartModifiers.list)\r\n    item.hasCartModifier = !isNil(item.cartModifiers.list)\r\n\r\n    if (item.hasCartModifier) {\r\n      item.cartModifiers.newPriceFormatted = formatPriceWithCurrency(item.cartModifiers.newPrice)\r\n      item.basePrice = item.price\r\n      item.basePriceFormatted = item.priceFormatted\r\n      item.price = item.cartModifiers.newPrice\r\n      item.priceFormatted = item.cartModifiers.newPriceFormatted\r\n    }\r\n    return item\r\n  })\r\n\r\n  return items\r\n}\r\n\r\nconst recursiveFormatSubcategoriesCartModifiers = category => {\r\n  if (!isEmpty(category.categories)) {\r\n    category.categories = category.categories.map(category => {\r\n      return recursiveFormatSubcategoriesCartModifiers(category)\r\n    })\r\n  }\r\n\r\n  category.items = formatItemsCartModifiers(category.items)\r\n\r\n  return category\r\n}\r\n\r\nexport const formatCartModifier = createFormatter(recursiveFormatSubcategoriesCartModifiers)\r\n\r\nexport const formatCartModifiers = createFormatter(\r\n  createSubObjectFormatter('categories', createListFormatter(formatCartModifier))\r\n)\r\n\r\nexport const formatModifier = createFormatter(modifier => {\r\n  modifier.name = getForCurrentLocale(modifier.localizedNames)\r\n  modifier.description = getForCurrentLocale(modifier.localizedDescriptions)\r\n\r\n  modifier.isAutomatic = modifier.automatic\r\n  modifier.isComplex = modifier.condition.itemCondition !== null\r\n  modifier.isTargetTypeTotal = modifier.target.type === CartModifierTargetType.TOTAL\r\n\r\n  if (modifier.action.type === CartModifierActionType.DISCOUNT_AMOUNT) {\r\n    modifier.action.valueFormatted = formatPriceWithCurrency(modifier.action.value)\r\n  } else if (modifier.action.type === CartModifierActionType.DISCOUNT_PERCENTAGE) {\r\n    modifier.action.valueFormatted = `${modifier.action.value} %`\r\n  }\r\n\r\n  return modifier\r\n})\r\n\r\nexport const formatModifiers = createFormatter(createListFormatter(formatModifier))\r\n","export const FeeSettingStatus = {\r\n  ENABLED: 'ENABLED',\r\n\r\n  DISABLED: 'DISABLED',\r\n}\r\n\r\nexport const FeeType = {\r\n  DELIVERY: 'DELIVERY',\r\n\r\n  SERVICE: 'SERVICE',\r\n}\r\n","import { getForCurrentLocale } from 'pmt-modules/i18n/'\r\n\r\nimport { formatPercent, formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\n\r\nimport { FeeSettingStatus, FeeType } from '../constants'\r\n\r\n//  {\r\n//   \"type\": \"DELIVERY\",\r\n//   \"name\": [\r\n//     {\r\n//       \"locale\": \"fr-FR\",\r\n//       \"text\": \"Frais de livraison\"\r\n//     },\r\n//     {\r\n//       \"locale\": \"en-US\",\r\n//       \"text\": \"Delivery price\"\r\n//     }\r\n//   ],\r\n//   \"amountIncludingTax\": 2.42,\r\n//   \"taxPercent\": 20,\r\n//   \"taxAmount\": 0.4\r\n// }\r\n\r\nconst formatOrderFee = orderFee => {\r\n  orderFee.isStatusEnabled = orderFee.status === FeeSettingStatus.ENABLED\r\n\r\n  orderFee.isTypeDelivery = orderFee.type === FeeType.DELIVERY\r\n  orderFee.isTypeService = orderFee.type === FeeType.SERVICE\r\n\r\n  orderFee.nameFormatted = getForCurrentLocale(orderFee.name)\r\n  // TODO: i18n\r\n  orderFee.typeFormatted = orderFee.type\r\n  orderFee.publicDescriptionFormatted = getForCurrentLocale(orderFee.publicDescription)\r\n\r\n  orderFee.amountIncludingTaxFormatted = formatPriceWithCurrency(orderFee.amountIncludingTax)\r\n\r\n  orderFee.minimumPriceForFreeFormatted = formatPriceWithCurrency(orderFee.minimumPriceForFree)\r\n\r\n  orderFee.taxPercentFormatted = formatPercent(orderFee.taxPercent)\r\n\r\n  orderFee.taxAmountFormatted = formatPercent(orderFee.taxAmount)\r\n\r\n  return orderFee\r\n}\r\n\r\nexport const formatOrderFees = createFormatter(createListFormatter(formatOrderFee))\r\n","import { getForCurrentLocale } from 'pmt-modules/i18n/'\r\n\r\nimport { formatPercent, formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\n\r\nimport { FeeSettingStatus, FeeType } from '../constants'\r\n\r\n//  \"fees\": [\r\n//     {\r\n//       \"type\": \"DELIVERY\", // DELIVERY / SERVICE\r\n//       \"status\": \"ENABLED\",\r\n//       \"name\": [\r\n//         {\r\n//           \"locale\": \"fr-FR\",\r\n//           \"text\": \"Frais de livraison\"\r\n//         },\r\n//         {\r\n//           \"locale\": \"en-US\",\r\n//           \"text\": \"Delivery\"\r\n//         }\r\n//       ],\r\n//       \"publicDescription\": [\r\n//         {\r\n//           \"locale\": \"fr-FR\",\r\n//           \"text\": \"Explication du pourquoi de la fee\"\r\n//         },\r\n//         {\r\n//           \"locale\": \"en-US\",\r\n//           \"text\": \"delivery fee explanation\"\r\n//         }\r\n//       ],\r\n//       \"privateComment\": \"comment for the pro only: why we do this\",\r\n//       \"settings\": {\r\n//         \"amountIncludingTax\": 4.42,\r\n//         \"taxPercent\": 20,\r\n//         \"minimumPriceForFree\": 20,\r\n//         \"filters\": {\r\n//           \"modes\": [\r\n//             2\r\n//           ]\r\n//         },\r\n//         \"posProductId\": null\r\n//       }\r\n//     }\r\n//   ]\r\n\r\nconst formatOrderSettingsFee = feeSetting => {\r\n  feeSetting.isStatusEnabled = feeSetting.status === FeeSettingStatus.ENABLED\r\n\r\n  feeSetting.isTypeDelivery = feeSetting.type === FeeType.DELIVERY\r\n  feeSetting.isTypeService = feeSetting.type === FeeType.SERVICE\r\n\r\n  feeSetting.nameFormatted = getForCurrentLocale(feeSetting.name)\r\n  feeSetting.publicDescriptionFormatted = getForCurrentLocale(feeSetting.publicDescription)\r\n\r\n  feeSetting.settings.amountIncludingTaxFormatted = formatPriceWithCurrency(\r\n    feeSetting.settings.amountIncludingTax\r\n  )\r\n  feeSetting.settings.minimumPriceForFreeFormatted = formatPriceWithCurrency(\r\n    feeSetting.settings.minimumPriceForFree\r\n  )\r\n  feeSetting.settings.taxPercentFormatted = formatPercent(feeSetting.settings.taxPercent)\r\n\r\n  feeSetting.settings.taxAmountFormatted = formatPercent(feeSetting.settings.taxAmount)\r\n\r\n  // minimum to 0 === no minimum\r\n  feeSetting.settings.hasMinimumPriceForFree = feeSetting.settings.minimumPriceForFree > 0\r\n\r\n  return feeSetting\r\n}\r\n\r\nexport const formatOrderSettingsFees = createFormatter(createListFormatter(formatOrderSettingsFee))\r\n","import get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nexport const generateFeesFromSettings = (orderSettingsFees, { orderMode, totalCartPrice }) => {\r\n  const fees = (orderSettingsFees || []).map(orderSettingsFee => {\r\n    //  {\r\n    //   \"type\": \"DELIVERY\",\r\n    //   \"name\": [\r\n    //     {\r\n    //       \"locale\": \"fr-FR\",\r\n    //       \"text\": \"Frais de livraison\"\r\n    //     },\r\n    //     {\r\n    //       \"locale\": \"en-US\",\r\n    //       \"text\": \"Delivery price\"\r\n    //     }\r\n    //   ],\r\n    //   \"amountIncludingTax\": 2.42,\r\n    //   \"taxPercent\": 20,\r\n    //   \"taxAmount\": 0.4\r\n    // }\r\n    const filterModes = get(orderSettingsFee, 'settings.filters.modes', [])\r\n    const shouldBeApplied =\r\n      orderSettingsFee.isStatusEnabled &&\r\n      (isEmpty(filterModes) || filterModes.indexOf(orderMode) >= 0) &&\r\n      (!orderSettingsFee.settings.hasMinimumPriceForFree ||\r\n        orderSettingsFee.settings.minimumPriceForFree > totalCartPrice)\r\n    return {\r\n      name: orderSettingsFee.name,\r\n      publicDescription: orderSettingsFee.publicDescription,\r\n      type: orderSettingsFee.type,\r\n\r\n      amountIncludingTax: orderSettingsFee.settings.amountIncludingTax,\r\n      hasMinimumPriceForFree: orderSettingsFee.settings.hasMinimumPriceForFree,\r\n      minimumPriceForFree: orderSettingsFee.settings.minimumPriceForFree,\r\n      taxAmount: orderSettingsFee.settings.taxAmount,\r\n      taxPercent: orderSettingsFee.settings.taxPercent,\r\n\r\n      shouldBeApplied,\r\n    }\r\n  })\r\n\r\n  return fees.filter(fee => fee.shouldBeApplied)\r\n}\r\n","import { createFormatter, createListFormatter } from 'pmt-utils/format'\r\nimport { formatPrice, formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\n// TODO: handle currency\r\nconst formatEntryPrice = entry => {\r\n  // entry price comes as a total price, so we divide quantity to get unit price\r\n  entry.unitPrice = entry.price / (entry.quantity || 1)\r\n  entry.unitPriceFormatted = formatPriceWithCurrency(entry.unitPrice || 0)\r\n\r\n  entry.priceFormatted = formatPrice(entry.price)\r\n  entry.priceWithCurrencyFormatted = formatPriceWithCurrency(entry.price)\r\n\r\n  return entry\r\n}\r\n\r\nconst formatEntry = createFormatter(formatEntryPrice)\r\n\r\nexport const formatEntries = createFormatter(createListFormatter(formatEntry))\r\n","import { createFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nimport { formatEntries } from './entry'\r\n\r\nconst formatTableNumber = check => {\r\n  // TODO\r\n  check.tableNumberLabel = `Table ${check.tableNumber}`\r\n  return check\r\n}\r\n\r\nconst formatTotal = check => {\r\n  check.totalFormatted = formatPriceWithCurrency(check.total, check.currency)\r\n  check.tips = check.tips || 0\r\n  check.totalWithoutTipsFormatted = formatPriceWithCurrency(\r\n    check.total - check.tips,\r\n    check.currency\r\n  )\r\n  check.outstandingBalanceFormatted = formatPriceWithCurrency(\r\n    check.outstandingBalance,\r\n    check.currency\r\n  )\r\n\r\n  check.hasOutstandingBalance = check.outstandingBalance > 0\r\n\r\n  check.hasOverPayment = check.outstandingBalance < 0\r\n  check.hasUnderPayment = check.outstandingBalance > 0 && check.outstandingBalance !== check.total\r\n\r\n  if (check.hasOverPayment) {\r\n    check.outstandingBalanceOverPaymentFormatted = formatPriceWithCurrency(\r\n      -check.outstandingBalance,\r\n      check.currency\r\n    )\r\n  }\r\n  if (check.hasUnderPayment) {\r\n    check.outstandingBalanceUnderPaymentFormatted = formatPriceWithCurrency(\r\n      check.outstandingBalance,\r\n      check.currency\r\n    )\r\n  }\r\n  return check\r\n}\r\n\r\nexport const formatCheck = createFormatter(\r\n  formatTableNumber,\r\n  formatTotal,\r\n  createSubObjectFormatter('entries', formatEntries)\r\n)\r\n","import isNil from 'lodash/isNil'\r\n\r\n/**\r\n * Data neeeded for 3DS v2\r\n *\r\n * https://www.notion.so/paymytable/Mangopay-3DS2-543d705dd4534a908b3dc1a64882e7a6.\r\n */\r\nexport const getAsyncPaymentBrowserInfo = () => ({\r\n  colorDepth: window.screen.colorDepth,\r\n  javaEnabled: navigator.javaEnabled(),\r\n  javascriptEnabled: true,\r\n  language: navigator.language || navigator.userLanguage,\r\n  screenHeight: window.screen.height,\r\n  screenWidth: window.screen.width,\r\n  timeZoneOffset: new Date().getTimezoneOffset().toString(),\r\n  userAgent: navigator.userAgent,\r\n})\r\n\r\n// taken from https://cdn.paymytable.com/outdatedBrowser.js (detectBrowser)\r\n// instead we could use https://github.com/lancedikson/bowser\r\n//\r\n// /!\\ do not use for audit, we fallback to the current user agent.\r\nexport const getBrowserInfo = () => {\r\n  var ua = navigator.userAgent,\r\n    tem,\r\n    M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || []\r\n  if (/trident/i.test(M[1])) {\r\n    tem = /\\brv[ :]+(\\d+)/g.exec(ua) || []\r\n    return { name: 'IE', version: tem[1] || '' }\r\n  }\r\n  if (M[1] === 'Chrome') {\r\n    tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/)\r\n    if (tem != null) return { name: tem[1].replace('OPR', 'Opera'), version: tem[2] }\r\n  }\r\n  M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']\r\n  if ((tem = ua.match(/version\\/(\\d+)/i)) != null) M.splice(1, 1, tem[1])\r\n  return { name: M[0], version: M[1] }\r\n}\r\n\r\n/**\r\n * Extracts the browser name and version number from the given user agent string.\r\n *\r\n * /!\\ since it is used for audit, we do not fallback to the current user agent.\r\n *\r\n * @param userAgent\r\n *            The user agent string to parse. If not specified, the contents of\r\n *            navigator.userAgent are parsed.\r\n * @param elements\r\n *            How many elements of the version number should be returned. A\r\n *            value of 0 means the whole version. If not specified, defaults to\r\n *            2 (major and minor release number).\r\n * @return A string containing the browser name and version number, or null if\r\n *         the user agent string is unknown.\r\n *\r\n * http://odyniec.net/blog/2010/09/decrypting-the-user-agent-string-in-javascript/\r\n */\r\nexport const identifyBrowserWithUserAgent = (userAgent, elements) => {\r\n  var regexps = {\r\n      Chrome: [/Chrome\\/(\\S+)/],\r\n      Firefox: [/Firefox\\/(\\S+)/],\r\n      MSIE: [/MSIE (\\S+);/],\r\n      Opera: [/Opera\\/.*?Version\\/(\\S+)/ /* Opera 10 */, /Opera\\/(\\S+)/ /* Opera 9 and older */],\r\n      Safari: [/Version\\/(\\S+).*?Safari\\//],\r\n    },\r\n    re,\r\n    m,\r\n    browser,\r\n    version\r\n\r\n  if (isNil(userAgent)) {\r\n    return null\r\n  }\r\n\r\n  if (elements === undefined || elements === null) {\r\n    elements = 2\r\n  } else if (elements === 0) {\r\n    elements = 1337\r\n  }\r\n\r\n  for (browser in regexps)\r\n    while ((re = regexps[browser].shift())) {\r\n      m = userAgent.match(re)\r\n      if (m) {\r\n        version = m[1].match(new RegExp('[^.]+(?:.[^.]+){0,' + --elements + '}'))[0]\r\n        return browser + ' ' + version\r\n      }\r\n    }\r\n\r\n  return null\r\n}\r\n","import { createFormatter } from 'pmt-utils/format'\r\nimport { formatPrice, formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nconst formatQuantity = item => {\r\n  let quantityFormatted = ''\r\n\r\n  if (item.share.enabled) {\r\n    quantityFormatted = `${item.share.multiplier}/${item.share.divider}`\r\n  } else {\r\n    quantityFormatted = item.quantity\r\n  }\r\n\r\n  item.quantityFormatted = quantityFormatted\r\n  return item\r\n}\r\n\r\n// TODO: handle currency\r\nconst formatItemPrice = item => {\r\n  item.totalFormatted = formatPrice(item.total)\r\n  item.unitPriceFormatted = formatPrice(item.unitPrice)\r\n  item.totalFormattedWithCurrency = formatPriceWithCurrency(item.total)\r\n  item.absoluteTotalFormattedWithCurrency = formatPriceWithCurrency(item.absoluteTotal)\r\n  item.unitPriceFormattedWithCurrency = formatPriceWithCurrency(item.unitPrice)\r\n  item = formatQuantity(item)\r\n  return item\r\n}\r\n\r\nconst formatEntry = createFormatter(formatItemPrice)\r\n\r\nexport const formatItemsMap = payment => {\r\n  const items = payment.items || {}\r\n  Object.keys(items).map(key => {\r\n    const item = items[key]\r\n    const formattedItem = formatEntry(item)\r\n    items[formattedItem.id] = formattedItem\r\n    return null\r\n  })\r\n\r\n  payment.items = items\r\n  return payment\r\n}\r\n","import { getAsyncPaymentBrowserInfo } from 'pmt-utils/browser'\r\nimport { createFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { formatItemsMap } from './item'\r\n\r\n// /!\\ We format UserCheck here not really a transaction/payment.\r\n\r\nexport const formatAmount = payment => {\r\n  payment.amount = Number(payment.amount || 0)\r\n  payment.amountFormatted = formatPriceWithCurrency(payment.amount, payment.currency)\r\n\r\n  if (!payment.tips && !payment.tip) {\r\n    payment.tips = 0\r\n  }\r\n  if (!payment.tips) {\r\n    payment.tips = payment.tip || 0\r\n  } else {\r\n    payment.tip = payment.tips || 0\r\n  }\r\n\r\n  payment.totalWithTipFormatted = formatPriceWithCurrency(\r\n    payment.amount + payment.tips,\r\n    payment.currency\r\n  )\r\n\r\n  payment.irlTotalAmount = Number(payment.irlTotalAmount || 0)\r\n  payment.totalIrlAmountFormatted = formatPriceWithCurrency(\r\n    payment.irlTotalAmount,\r\n    payment.currency\r\n  )\r\n\r\n  payment.pspTotalAmount = Number(payment.pspTotalAmount || 0)\r\n  payment.totalPspAmountFormatted = formatPriceWithCurrency(\r\n    payment.pspTotalAmount,\r\n    payment.currency\r\n  )\r\n\r\n  payment.vouchersTotalAmount = Number(payment.vouchersTotalAmount || 0)\r\n  payment.totalVouchersAmountFormatted = formatPriceWithCurrency(\r\n    payment.vouchersTotalAmount,\r\n    payment.currency\r\n  )\r\n\r\n  if (payment.share) {\r\n    payment.share.amountPerPersonFormatted = formatPriceWithCurrency(\r\n      payment.share.amountPerPerson,\r\n      payment.currency\r\n    )\r\n  }\r\n\r\n  payment.paymentType = payment.type\r\n\r\n  return payment\r\n}\r\n\r\n/**\r\n * Data neeeded for 3DS v2\r\n *\r\n * https://www.notion.so/paymytable/Mangopay-3DS2-543d705dd4534a908b3dc1a64882e7a6.\r\n */\r\nconst formatBrowserInfo = data => ({\r\n  ...data,\r\n  browserInfo: getAsyncPaymentBrowserInfo(),\r\n})\r\n\r\nexport const formatPayment = createFormatter(formatAmount, formatItemsMap, formatBrowserInfo)\r\n\r\nexport const formatPaymentMade = createFormatter(paymentMade => {\r\n  return {\r\n    ...paymentMade,\r\n    totalWithTipFormatted: formatPriceWithCurrency(\r\n      paymentMade.amount + paymentMade.tips,\r\n      paymentMade.currency\r\n    ),\r\n  }\r\n})\r\n","import isNil from 'lodash/isNil'\r\n\r\nexport { default } from './GeolocUtils'\r\n\r\n//https://stackoverflow.com/questions/27928/calculate-distance-between-two-latitude-longitude-points-haversine-formula\r\nexport const getDistanceFromLatLon = (lat1, lon1, lat2, lon2) => {\r\n  if (isNil(lat1) || isNil(lon1) || isNil(lat2) || isNil(lon2)) {\r\n    return null\r\n  }\r\n\r\n  var R = 6371 // Radius of the earth in km\r\n  var dLat = deg2rad(lat2 - lat1) // deg2rad below\r\n  var dLon = deg2rad(lon2 - lon1)\r\n  var a =\r\n    Math.sin(dLat / 2) * Math.sin(dLat / 2) +\r\n    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2)\r\n\r\n  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\r\n  var d = R * c // Distance in km\r\n\r\n  return d\r\n}\r\n\r\nexport const deg2rad = deg => {\r\n  return deg * (Math.PI / 180)\r\n}\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\nexport const RestaurantStatus = {\r\n  CREATED: 'CREATED',\r\n  ENABLED: 'ENABLED',\r\n  DISABLED: 'DISABLED',\r\n  ARCHIVED: 'ARCHIVED',\r\n}\r\n\r\nexport const getRestaurantStatusLabel = status => {\r\n  switch (status) {\r\n    case RestaurantStatus.CREATED:\r\n      return tr('global.restaurant.status.CREATED')\r\n    case RestaurantStatus.ENABLED:\r\n      return tr('global.restaurant.status.ENABLED')\r\n    case RestaurantStatus.DISABLED:\r\n      return tr('global.restaurant.status.DISABLED')\r\n    case RestaurantStatus.ARCHIVED:\r\n      return tr('global.restaurant.status.ARCHIVED')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getRestaurantStatusExplainationText = status => {\r\n  switch (status) {\r\n    case RestaurantStatus.CREATED:\r\n      return tr('global.restaurant.status.explain.CREATED')\r\n    case RestaurantStatus.ENABLED:\r\n      return tr('global.restaurant.status.explain.ENABLED')\r\n    case RestaurantStatus.DISABLED:\r\n      return tr('global.restaurant.status.explain.DISABLED')\r\n    case RestaurantStatus.ARCHIVED:\r\n      return tr('global.restaurant.status.explain.ARCHIVED')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const PspType = {\r\n  MANGOPAY: 'MANGOPAY',\r\n  PAYZEN: 'PAYZEN',\r\n  PAYGREEN: 'PAYGREEN',\r\n  SAFERPAY: 'SAFERPAY',\r\n  FAKE: 'FAKE',\r\n  ADYEN: 'ADYEN',\r\n  EPAY: 'EPAY',\r\n}\r\n\r\nexport const getPspTypeChoices = () => [\r\n  { label: 'MangoPay', value: PspType.MANGOPAY, deprecated: true },\r\n  { label: 'PayZen', value: PspType.PAYZEN, deprecated: true },\r\n  { label: 'PayGreen', value: PspType.PAYGREEN, deprecated: true },\r\n  // deprecated values\r\n  { label: 'Saferpay', value: PspType.SAFERPAY, deprecated: false },\r\n  { label: 'Adyen', value: PspType.ADYEN, deprecated: false },\r\n  { label: 'Epay', value: PspType.EPAY, deprecated: false },\r\n  { label: 'FAKE', value: PspType.FAKE, deprecated: false },\r\n]\r\n\r\nexport const getPspLabel = type => {\r\n  const choice = getPspTypeChoices().find(c => c.value === type)\r\n  return choice ? choice.label : type\r\n}\r\n\r\nexport const PosType = {\r\n  POS_DEMO: '',\r\n  POS_CASHPAD: 'cashpad',\r\n  POS_CSI: 'csi',\r\n  POS_IKENTOO: 'ikentoo',\r\n  POS_ORCHESTRA: 'orchestra',\r\n  POS_ORCHESTRA_V2: 'orchestra-v2',\r\n  POS_PAYMYTABLE: 'paymytable',\r\n  POS_TILLER: 'tiller',\r\n  POS_TCPOS: 'tcpos',\r\n  POS_TCPOS_7_1: 'tcpos7.1',\r\n  POS_TCPOS_7_4: 'tcpos7.4',\r\n  POS_ZELTY: 'zelty',\r\n  POS_SEQUOIASOFT: 'sequoiasoft',\r\n  POS_ORACLE: 'oracle',\r\n}\r\n\r\nexport const getPosTypeChoices = () => [\r\n  { label: 'PayMyTable', value: PosType.POS_PAYMYTABLE, deprecated: false },\r\n  { label: 'Tcpos 7.4+', value: PosType.POS_TCPOS_7_4, deprecated: false },\r\n  { label: 'Tcpos 7.1', value: PosType.POS_TCPOS_7_1, deprecated: false },\r\n  { label: 'Tcpos < 7.1', value: PosType.POS_TCPOS, deprecated: false },\r\n  { label: 'Demo', value: PosType.POS_DEMO, deprecated: false },\r\n  // deprecated values\r\n  { label: 'Cashpad', value: PosType.POS_CASHPAD, deprecated: true },\r\n  { label: 'CSI - CashSystemes', value: PosType.POS_CSI, deprecated: true },\r\n  { label: 'Ikentoo', value: PosType.POS_IKENTOO, deprecated: true },\r\n  { label: 'Oracle', value: PosType.POS_ORACLE, deprecated: true },\r\n  { label: 'Orchestra', value: PosType.POS_ORCHESTRA, deprecated: true },\r\n  { label: 'Orchestra v2', value: PosType.POS_ORCHESTRA_V2, deprecated: true },\r\n  { label: 'SequoiaSoft', value: PosType.POS_SEQUOIASOFT, deprecated: true },\r\n  { label: 'Tiller', value: PosType.POS_TILLER, deprecated: true },\r\n  { label: 'Zelty', value: PosType.POS_ZELTY, deprecated: true },\r\n]\r\n\r\nexport const getPosTypeLabel = type => {\r\n  const choice = getPosTypeChoices().find(c => c.value === type)\r\n  return choice ? choice.label : type\r\n}\r\n\r\nexport const RestaurantFeatures = {\r\n  ORDERS: 1, // Bit 0: 1 << 0 = 1\r\n  PAYMENT_AT_TABLE: 2, // Bit 1: 1 << 1 = 2\r\n}\r\n\r\nexport const hasFeature = (features, feature) => {\r\n  return (features & feature) === feature\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport keys from 'lodash/keys'\r\nimport moment from 'moment'\r\n\r\nimport { getMsFromHour, getMsFromMinute } from 'pmt-utils/date'\r\nimport { findOnArray } from 'pmt-utils/array'\r\nimport {\r\n  getDayKey,\r\n  getDayIndexForKey,\r\n  getI18nDayNameForKey,\r\n  getI18nDayShortNameForKey,\r\n  formatHour,\r\n  todayWithHour,\r\n} from 'pmt-utils/date'\r\n\r\nconst formatOpeningHours = (openingHours, manufactureDelay) =>\r\n  (openingHours || []).map(openingHour => ({\r\n    ...openingHour,\r\n    // FIXME: the formatted hour is displayed with one hour in more (11-23 instead of 10-22)\r\n    // if we don't use todayWithHour\r\n    formattedOpening: formatHour(todayWithHour(openingHour.opening)),\r\n    formattedClosing: formatHour(todayWithHour(openingHour.closing)),\r\n    closingWithManufactureDelay: openingHour.closing - manufactureDelay,\r\n    formattedClosingWithManufactureDelay: formatHour(\r\n      todayWithHour(openingHour.closing - manufactureDelay)\r\n    ),\r\n  }))\r\n\r\n/**\r\n * Transform openingHours to openingHoursList, an array\r\n *\r\n * Entry:\r\n *\r\n * ```\r\n * {\r\n * \"openingHours\": {\r\n *   \"monday\": [\r\n *     {\r\n *       \"opening\": 0,\r\n *       \"closing\": 12000,\r\n *     }\r\n *   ]\r\n * ```\r\n *\r\n * Result:\r\n *\r\n * ```\r\n * {\r\n *   \"openingHoursList\": [\r\n *      {\r\n *        \"dayKeyName\": \"monday\",\r\n *        \"dayName\": \"lundi\",\r\n *        \"day\": 1,\r\n *        \"isCurrentDay\": true,\r\n *        \"openingHours\": [\r\n *          {\r\n *            \"opening\": 0,\r\n *            \"closing\": 12000,\r\n *            \"formattedOpening\": \"09:00\",\r\n *            \"formattedClosing\": \"20:00\"\r\n *          }\r\n *        ],\r\n *      }\r\n *   ]\r\n * }\r\n * ```\r\n */\r\nconst formatOpeningHoursList = (openingHoursArray, manufactureDelay) => {\r\n  const today = moment()\r\n  const currentDayName = getDayKey(today)\r\n\r\n  return keys(openingHoursArray).map(dayKeyName => ({\r\n    dayKeyName: dayKeyName,\r\n    dayName: getI18nDayNameForKey(dayKeyName),\r\n    dayNameShort: getI18nDayShortNameForKey(dayKeyName),\r\n    dayIndex: getDayIndexForKey(dayKeyName),\r\n    openingHours: formatOpeningHours(openingHoursArray[dayKeyName], manufactureDelay),\r\n    isCurrentDay: currentDayName === dayKeyName,\r\n  }))\r\n}\r\n\r\nconst getNextOpening = (openingHoursList, date, maxNumberToCheck = 7) => {\r\n  const i = date.day()\r\n  const day = findOnArray(openingHoursList, day => day.dayIndex === i)\r\n\r\n  if (!isNil(day) && !isEmpty(day.openingHours)) {\r\n    return {\r\n      date,\r\n      // get first opening of the day\r\n      nextOpeningHour: day.openingHours[0],\r\n      ...day,\r\n    }\r\n  }\r\n\r\n  // only check next opening day for a week\r\n  if (maxNumberToCheck > 0) {\r\n    return getNextOpening(openingHoursList, date.add(1, 'd'), --maxNumberToCheck)\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * Require `formatOpeningHoursList`\r\n * Warning: data can either be the restaurant or directly orderSettings\r\n */\r\nexport const formatRestaurantOpeningHours = data => {\r\n  if (!data.manufactureDelay) {\r\n    data.manufactureDelay = 0\r\n  }\r\n  const delayAsHours = data.manufactureDelay / 1000 / 60 / 60\r\n\r\n  data.openingHoursList = formatOpeningHoursList(data.openingHours, data.manufactureDelay)\r\n  const now = moment()\r\n\r\n  data.willOpenLaterToday = false\r\n  data.isCurrentlyOpen = false\r\n  data.nextOpening = null\r\n\r\n  // opening hours have not been defined yet, don't bother to proceed\r\n  if (isEmpty(data.openingHoursList)) {\r\n    return data\r\n  }\r\n\r\n  const currentDay = findOnArray(data.openingHoursList, openingHour => openingHour.isCurrentDay)\r\n  // don't check currentDay opening if manufacture delay goes beyond anyway\r\n  if (delayAsHours < 24 && !isNil(currentDay) && !isEmpty(currentDay.openingHours)) {\r\n    const hours = now.format('HH')\r\n    const minutes = now.format('mm')\r\n    const seconds = now.format('ss')\r\n    const nowToCompare = getMsFromHour(hours) + getMsFromMinute(minutes) + seconds * 1000\r\n\r\n    currentDay.openingHours.forEach(openingHour => {\r\n      // Check for currentDay if we are in a range of opening hours\r\n      if (\r\n        nowToCompare >= openingHour.opening &&\r\n        nowToCompare <= openingHour.closing - data.manufactureDelay\r\n      ) {\r\n        data.currentOpeningHour = openingHour\r\n        data.isCurrentlyOpen = true\r\n      }\r\n      // Check for currentDay if we are in a range of opening hours later today, and we do not have\r\n      // set it yet. This will avoid overriding when restaurant have multiple openingHours.\r\n      else if (openingHour.opening > nowToCompare && !data.nextOpening) {\r\n        data.willOpenLaterToday = true\r\n        data.nextOpening = {\r\n          date: now,\r\n          nextOpeningHour: openingHour,\r\n          ...currentDay,\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  if (isEmpty(data.nextOpening)) {\r\n    // we don't have a nextOpening for today, so we start looking for next day\r\n    // BUT manufacture delay might be > 1 day, if so, we start directly at this point\r\n    let nextDay = null\r\n    if (delayAsHours >= 24) {\r\n      nextDay = moment().add(delayAsHours, 'hours')\r\n    } else {\r\n      nextDay = moment()\r\n        .add(1, 'days')\r\n        .startOf('day')\r\n    }\r\n\r\n    data.nextOpening = getNextOpening(data.openingHoursList, nextDay)\r\n  }\r\n\r\n  return data\r\n}\r\n","import { formatRestaurantOpeningHours } from './openingHours'\r\n\r\n/**\r\n * Require `formatOpeningHoursList`\r\n */\r\nexport const formatOrderSettings = restaurant => {\r\n  if (restaurant.orderSettings) {\r\n    restaurant.orderSettings = formatRestaurantOpeningHours(restaurant.orderSettings)\r\n\r\n    // in minutes\r\n    restaurant.orderSettings.manufactureDelayInMinutes =\r\n      restaurant.orderSettings.manufactureDelay / 1000 / 60\r\n\r\n    // in minutes\r\n    restaurant.orderSettings.deliverySettings.deliveryTimeInMinutes =\r\n      restaurant.orderSettings.deliverySettings.deliveryTimeSettings.fixTimeSettings.time /\r\n      1000 /\r\n      60\r\n  }\r\n\r\n  return restaurant\r\n}\r\n","\r\n/**\r\n * The different features handled by PayMyTable.\r\n * Multiple usages, such as restaurant's features, notification settings, etc.\r\n */\r\nconst Feature = {\r\n  PAYMENT: 1,\r\n\r\n  ORDER: 2,\r\n\r\n  BOOKING: 4,\r\n\r\n  NEWS: 8,\r\n\r\n  REVIEW: 16,\r\n}\r\n\r\nexport default Feature\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\n/**\r\n * Define all the different ways to pay a check\r\n */\r\nexport const PaymentType = {\r\n  /**\r\n   * Pay all the check\r\n   */\r\n  ALL: 1,\r\n\r\n  /**\r\n   * Pay a part of the check\r\n   * == DEVIDE\r\n   */\r\n  SHARE: 2,\r\n\r\n  /**\r\n   * Pay a specific amount of the check\r\n   */\r\n  AMOUNT: 3,\r\n\r\n  /**\r\n   * Pay for the attached entries\r\n   */\r\n  ENTRIES: 4,\r\n\r\n  /**\r\n   * distant payment request\r\n   */\r\n  DISTANT_PAYMENT: 5,\r\n\r\n  ORDER: 6,\r\n\r\n  /**\r\n   * Irl payment via TPE.\r\n   * Only a Restaurant can use this PaymentType.\r\n   */\r\n  IRL_CREDIT_CARD: 8,\r\n}\r\n\r\nexport const getPaymentTypeLabel = paymentType => {\r\n  switch (paymentType) {\r\n    case PaymentType.ALL:\r\n      return tr('global.PaymentType.ALL')\r\n    case PaymentType.SHARE:\r\n      return tr('global.PaymentType.SHARE')\r\n    case PaymentType.AMOUNT:\r\n      return tr('global.PaymentType.AMOUNT')\r\n    case PaymentType.ENTRIES:\r\n      return tr('global.PaymentType.ENTRIES')\r\n    case PaymentType.DISTANT_PAYMENT:\r\n      return tr('global.PaymentType.DISTANT_PAYMENT')\r\n    case PaymentType.ORDER:\r\n      return tr('global.PaymentType.ORDER')\r\n    case PaymentType.IRL_CREDIT_CARD:\r\n      return tr('global.PaymentType.IRL_CREDIT_CARD')\r\n    default:\r\n      return paymentType\r\n  }\r\n}\r\n\r\nexport default PaymentType\r\n","/**\r\n * http://stackoverflow.com/questions/1436438/how-do-you-set-clear-and-toggle-a-single-bit-in-javascript\r\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators\r\n */\r\n\r\nexport const isBitSet = (mask, flag) => {\r\n  return (flag & mask) !== 0\r\n}\r\n\r\nexport const setBit = (mask, flag) => {\r\n  return flag | mask\r\n}\r\n\r\nexport const toggleBit = (mask, flag) => {\r\n  return flag ^ mask\r\n}\r\n\r\nexport const removeBit = (mask, flag) => {\r\n  return flag & ~mask\r\n}\r\n","import { isBitSet } from 'pmt-utils/bit'\r\n\r\nimport { Feature } from '../constants'\r\n\r\nexport const formatFeatures = (object) => {\r\n  object.hasFeaturePayment = isBitSet(object.features, Feature.PAYMENT)\r\n  object.hasFeatureOrder = isBitSet(object.features, Feature.ORDER)\r\n  object.hasFeatureBooking = isBitSet(object.features, Feature.BOOKING)\r\n  object.hasFeatureNews = isBitSet(object.features, Feature.NEWS)\r\n  object.hasFeatureReview = isBitSet(object.features, Feature.REVIEW)\r\n\r\n  return object\r\n}\r\n","import find from 'lodash/find'\r\nimport { countryCodes } from './countryCodes'\r\n\r\nexport * from './countryCodes'\r\n\r\nexport const getCountryNameForCode = (countryCode) => {\r\n  let country = find(countryCodes, (country) => country.code === countryCode)\r\n\r\n  if (!country) {\r\n    return null\r\n  }\r\n\r\n  return country.name\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { PspType } from 'pmt-modules/restaurant/constants'\r\nimport { isProd } from 'pmt-modules/environment'\r\n\r\n// Note: all of this is duplicated on the API, maybe the API should serialize those for audit permissions?\r\n\r\nexport const getPspBoUrl = psp => {\r\n  switch (psp) {\r\n    case PspType.PAYGREEN:\r\n      if (isProd()) {\r\n        return 'https://paygreen.fr'\r\n      }\r\n      return 'https://sandbox.paygreen.fr'\r\n\r\n    case PspType.MANGOPAY:\r\n      if (isProd()) {\r\n        return 'https://dashboard.mangopay.com'\r\n      }\r\n      return 'https://dashboard.sandbox.mangopay.com'\r\n\r\n    case PspType.SAFERPAY:\r\n      // TODO: we can have saferpay tests on production..\r\n      if (isProd()) {\r\n        return 'https://www.saferpay.com/BO/'\r\n      }\r\n      return 'https://test.saferpay.com/BO/'\r\n\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const formatPspShopUrl = (psp, pspRestaurantId) => {\r\n  if (isEmpty(pspRestaurantId)) {\r\n    return ''\r\n  }\r\n  switch (psp) {\r\n    case PspType.MANGOPAY:\r\n      return getPspBoUrl(psp) + `/User/${pspRestaurantId}/Details`\r\n\r\n    case PspType.PAYGREEN:\r\n      return getPspBoUrl(psp) + `/shop/switch-current/id/${pspRestaurantId}`\r\n\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const formatPspUserUrl = pspUserId => {\r\n  if (isEmpty(pspUserId)) {\r\n    return ''\r\n  }\r\n  // TODO: we do not have the user's psp for now.. Maybe we could trick:\r\n  // only MangoPay has a pspUserId for now. For PayGreen we generate a big string. It could help\r\n  // differentiate both.\r\n  if (pspUserId && pspUserId.length < 15) {\r\n    // same as formatPspShopUrl\r\n    return getPspBoUrl(PspType.MANGOPAY) + `/User/${pspUserId}/Details`\r\n  }\r\n  return ''\r\n}\r\n\r\nexport const formatPspTransactionUrl = (psp, transactionId) => {\r\n  switch (psp) {\r\n    case PspType.PAYGREEN:\r\n      return getPspBoUrl(psp) + '/transactions/show-details/id/' + transactionId\r\n\r\n    case PspType.MANGOPAY:\r\n      return getPspBoUrl(psp) + '/PayIn/' + transactionId\r\n\r\n    case PspType.SAFERPAY:\r\n      return getPspBoUrl(psp) + '/Commerce/JournalOverview/Detail?gxid=' + transactionId\r\n\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const formatPspRefundUrl = (psp, refundId) => {\r\n  switch (psp) {\r\n    case PspType.PAYGREEN:\r\n      return getPspBoUrl(psp) + '/transactions/show-details/id/' + refundId\r\n\r\n    case PspType.MANGOPAY:\r\n      return getPspBoUrl(psp) + '/Refund/' + refundId\r\n\r\n    case PspType.SAFERPAY:\r\n      return getPspBoUrl(psp) + '/Commerce/JournalOverview/Detail?gxid=' + refundId\r\n\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n","import { createFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport { getCountryNameForCode } from 'pmt-utils/country'\r\nimport { formatPspShopUrl } from 'pmt-modules/psp/format'\r\n\r\nconst formatLegalRepresentative = legal => {\r\n  const representative = legal.representative\r\n\r\n  legal.hasRepresentative = !isNil(representative)\r\n\r\n  if (representative) {\r\n    const address = representative.address\r\n    representative.hasAddress =\r\n      !isEmpty(address) &&\r\n      (!isEmpty(address.street) || !isEmpty(address.postCode) || !isEmpty(address.city))\r\n    if (representative.hasAddress) {\r\n      representative.formattedAddress = `${address.street}, ${address.postCode} ${address.city}`\r\n    } else {\r\n      representative.formattedAddress = ''\r\n    }\r\n\r\n    representative.hasCountryOfResidence = !isEmpty(representative.countryOfResidence)\r\n    representative.countryOfResidenceLabel =\r\n      getCountryNameForCode(representative.countryOfResidence) || representative.countryOfResidence\r\n\r\n    representative.hasNationality = !isEmpty(representative.nationality)\r\n    representative.nationalityLabel =\r\n      getCountryNameForCode(representative.nationality) || representative.nationality\r\n  }\r\n\r\n  return legal\r\n}\r\n\r\nconst formatBank = (bank, props) => {\r\n  bank.pspShopUrl = formatPspShopUrl(props.restaurant.psp, bank.pspRestaurantId)\r\n\r\n  return bank\r\n}\r\n\r\nexport const formatLegal = createFormatter(\r\n  formatLegalRepresentative,\r\n  createSubObjectFormatter('bank', formatBank)\r\n)\r\n","import sortBy from 'lodash/sortBy'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { isBo, getApiUrl } from 'pmt-modules/environment'\r\nimport { createFormatter, createMapFormatter, createListFormatter } from 'pmt-utils/format'\r\nimport { getDistanceFromLatLon } from 'pmt-utils/geoloc'\r\nimport { formatDate } from 'pmt-utils/date'\r\nimport { PspType } from 'pmt-modules/restaurant/constants'\r\n\r\nimport { RestaurantStatus, getRestaurantStatusLabel } from '../constants'\r\n\r\nimport { formatRestaurantOpeningHours } from './openingHours'\r\nimport { formatOrderSettings } from './orderSettings'\r\nimport { formatFeatures } from '../../global'\r\nimport { formatLegal } from './formatLegal'\r\n\r\nconst formatAddress = restaurant => {\r\n  if (!restaurant.geoPt) {\r\n    restaurant.geoPt = {\r\n      latitude: 0,\r\n      longitude: 0,\r\n    }\r\n  }\r\n\r\n  const address = restaurant.address\r\n  if (!address) {\r\n    restaurant.address = {}\r\n  }\r\n  restaurant.hasAddress = !isEmpty(address?.street)\r\n  if (restaurant.hasAddress) {\r\n    restaurant.formattedAddress = `${address.street}, ${address.postCode} ${address.city}`\r\n  } else {\r\n    restaurant.formattedAddress = ``\r\n  }\r\n  return restaurant\r\n}\r\n\r\nconst formatDistance = (restaurant, { latitude, longitude }) => {\r\n  restaurant.geoPt.distance = null\r\n  restaurant.geoPt.distanceFormatted = null\r\n\r\n  if (!isNil(latitude) && !isNil(longitude)) {\r\n    const distance = getDistanceFromLatLon(\r\n      latitude,\r\n      longitude,\r\n      restaurant.geoPt.latitude,\r\n      restaurant.geoPt.longitude\r\n    )\r\n    restaurant.geoPt.distance = Math.round(distance * 1000)\r\n\r\n    if (distance < 1) {\r\n      restaurant.geoPt.distanceFormatted = `${Math.round(distance * 1000)}m`\r\n    } else {\r\n      restaurant.geoPt.distanceFormatted = `${Math.round(distance * 10) / 10}km`\r\n    }\r\n  }\r\n\r\n  return restaurant\r\n}\r\n\r\nconst sortByName = list => sortBy(list, [restaurant => restaurant.name.toLowerCase()], ['desc'])\r\n\r\nconst formatLogo = restaurant => {\r\n  restaurant.hasLogo = !isEmpty(restaurant.logo)\r\n  return restaurant\r\n}\r\n\r\nconst formatPicture = restaurant => {\r\n  restaurant.hasPicture = !isEmpty(restaurant.picture)\r\n  return restaurant\r\n}\r\n\r\nconst formatPsp = restaurant => {\r\n  restaurant.isPspMangoPay = restaurant.psp === PspType.MANGOPAY\r\n  restaurant.isPspPayZen = restaurant.psp === PspType.PAYZEN\r\n  restaurant.isPspPayGreen = restaurant.psp === PspType.PAYGREEN\r\n  restaurant.isPspSaferpay = restaurant.psp === PspType.SAFERPAY\r\n\r\n  return restaurant\r\n}\r\n\r\nconst formatData = restaurant => {\r\n  restaurant.isStatusEnabled = restaurant.status === RestaurantStatus.ENABLED\r\n  restaurant.isStatusDisabled = restaurant.status === RestaurantStatus.DISABLED\r\n  restaurant.isStatusCreated = restaurant.status === RestaurantStatus.CREATED\r\n  restaurant.isStatusArchived = restaurant.status === RestaurantStatus.ARCHIVED\r\n\r\n  restaurant.hasVoucherFeatureEnabled =\r\n    restaurant.voucherSettings && restaurant.voucherSettings.enableVouchers\r\n\r\n  // Deprecated: this property is not used anymore, but we keep it for backward compatibility\r\n  restaurant.hasPaymentWithCardPrint = false\r\n\r\n  if (isBo()) {\r\n    restaurant.hasExternalId =\r\n      !isNil(restaurant.externalId) &&\r\n      !isEmpty(restaurant.externalId) &&\r\n      // handle bug with populate data script that send \"null\" as a string instead of null\r\n      restaurant.externalId !== 'null'\r\n    restaurant.statusLabel = getRestaurantStatusLabel(restaurant.status)\r\n\r\n    restaurant.modificationDateFormatted = formatDate(\r\n      restaurant.modificationDate,\r\n      'DD/MM/YYYY HH:mm:ss'\r\n    )\r\n\r\n    restaurant.restaurantMenuLink = `${getApiUrl()}/restaurants/${\r\n      restaurant.id\r\n    }/menu?stocksSource=LOCAL_ONLY&menuSource=LOCAL_ONLY`\r\n  }\r\n\r\n  restaurant.hasTheme = !isNil(restaurant.theme)\r\n  return restaurant\r\n}\r\n\r\nexport const formatRestaurant = createFormatter(\r\n  formatRestaurantOpeningHours, // must be after `formatRestaurantOpeningHoursList`\r\n  formatData,\r\n  formatFeatures,\r\n  formatAddress,\r\n  formatDistance,\r\n  formatOrderSettings,\r\n  formatLogo,\r\n  formatPicture,\r\n  formatPsp,\r\n  restaurant => {\r\n    restaurant.legal = formatLegal(restaurant.legal, { restaurant })\r\n    return restaurant\r\n  }\r\n)\r\n\r\nexport const formatRestaurantsMap = createMapFormatter(formatRestaurant)\r\n\r\nexport const formatRestaurantList = createListFormatter(formatRestaurant)\r\n\r\nexport const formatSearchRestaurantsList = createFormatter(\r\n  formatRestaurantList,\r\n  sortByName,\r\n  list => {\r\n    return {\r\n      list,\r\n      counters: {\r\n        statusEnabled: list.filter(r => r.isStatusEnabled).length,\r\n        statusDisabled: list.filter(r => r.isStatusDisabled).length,\r\n        statusCreated: list.filter(r => r.isStatusCreated).length,\r\n        statusArchived: list.filter(r => r.isStatusArchived).length,\r\n      },\r\n    }\r\n  }\r\n)\r\n\r\n/* spec: https://www.notion.so/paymytable/Am-liorer-l-affichage-des-r-sultats-du-store-locator-2669fffd951f483280655bcbb2124fc6# */\r\nexport const formatRestaurantsListData = createFormatter(data => {\r\n  const Type = {\r\n    /**\r\n     * No geo pt data were found.\r\n     */\r\n    NO_GEO_PT: 'NO_GEO_PT',\r\n\r\n    /**\r\n     * Use the latitude/longitude infer from the ip address.\r\n     */\r\n    USE_IP: 'USE_IP',\r\n\r\n    /**\r\n     * Use the latitude/longitude of the specified restaurant\r\n     */\r\n    RESTAURANT_GEO_PT: 'RESTAURANT_GEO_PT',\r\n\r\n    /**\r\n     * Use the latitude/longitude given by the front\r\n     */\r\n    GIVEN_GEO_PT: 'GIVEN_GEO_PT',\r\n  }\r\n\r\n  data.isTypeNoGeoPt = data.type === Type.NO_GEO_PT\r\n  data.isTypeUseIp = data.type === Type.USE_IP\r\n  data.isTypeRestaurantGeoPt = data.type === Type.RESTAURANT_GEO_PT\r\n  data.isTypeGivenGeoPt = data.type === Type.GIVEN_GEO_PT\r\n\r\n  data.geoPtIsLowAccuracy = data.isTypeNoGeoPt || data.isTypeUseIp\r\n  data.geoPtUsed = data.isTypeUseIp || data.isTypeRestaurantGeoPt || data.isTypeGivenGeoPt\r\n  return data\r\n})\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\n/**\r\n * This corresponds to ThirdPartyTypeEnum from the API (it's the thirdparty type, not the thirdparty identifier)\r\n */\r\nexport const ThirdParty = {\r\n  LEGACY_PMT: 'LEGACY_PMT', // not a real Third Party, so several specific behaviours\r\n  DELIVEROO: 'DELIVEROO', // specificity : doesn't give the user infos\r\n  ZDP_STANDARD: 'ZDP_STANDARD', // a thirdparty of this type follows the ZDP standard (the API we defined)\r\n  UBER_EATS: 'UBER_EATS',\r\n}\r\n\r\nexport function getThirdPartyLabel(thirdParty) {\r\n  switch (thirdParty) {\r\n    case ThirdParty.LEGACY_PMT:\r\n      return tr('global.thirdparty.LEGACY_PMT')\r\n    case ThirdParty.DELIVEROO:\r\n      return tr('global.thirdparty.DELIVEROO')\r\n    case ThirdParty.ZDP_STANDARD:\r\n      return tr('global.thirdparty.ZDP_STANDARD') // aka LYVEAT as it's the only one using this standard\r\n    case ThirdParty.UBER_EATS:\r\n      return tr('global.thirdparty.UBER_EATS')\r\n    default:\r\n      return thirdParty\r\n  }\r\n}\r\n\r\nexport const UberEatsEnv = ['PREPROD', 'PROD_TEST', 'PROD']\r\n\r\nexport const DeliverooEnv = [\r\n  'PAYMYTABLE_SANDBOX',\r\n  'PAYMYTABLE_PROD',\r\n  // 'SEQUOIASOFT_TEST', should not be used anymore, so not displaying it in BO V2\r\n]\r\n","import isNil from 'lodash/isNil'\r\nimport get from 'lodash/get'\r\n\r\nconst getElement = (address_components, type, propertyToReturn) => {\r\n  const firstOccurence = address_components.filter(c => c.types.includes(type)).shift()\r\n  return get(firstOccurence, propertyToReturn, null) \r\n}\r\n\r\nexport const getAddressElementsFromGooglePlace = place => {\r\n\r\n  if (isNil(place)){\r\n    return null\r\n  }\r\n\r\n  const address_components = place.address_components\r\n\r\n  // street_address indicates a precise street address.\r\n  const preciseStreetAddress = getElement(address_components, \"street_address\", \"short_name\")\r\n  const streetNumber = getElement(address_components, \"street_number\", \"short_name\")\r\n  const route = getElement(address_components, \"route\", \"short_name\")\r\n\r\n  // streetNumber/route concatenation order depends of the country\r\n  // ex: 7 rue de Paris / Via Milano 7 / Berlin-Strasse 7\r\n  // we could extract it from formattedAddress, as being the first part before the first comma\r\n  // but it can be problematic as the formatted address can be of several forms:\r\n  // 7 rue de Paris, 75009 Paris, France\r\n  // 7 rue de Paris, 75009, Paris, France\r\n  // 7, rue de Paris, 75009 Paris, France\r\n  // Via Toledo, 123, 80135 Napoli NA, Italy\r\n  // so for now, if the street_address is not provided by Google, we use the street_number+route concatenation\r\n  // with an order depending of the country\r\n  const countryCode = getElement(address_components, \"country\", \"short_name\")\r\n  const streetConcatenation = countryCode === \"FR\" || countryCode === \"RE\" ? streetNumber + \" \"+ route : route + \" \"+ streetNumber\r\n\r\n  const street =  preciseStreetAddress || streetConcatenation\r\n  const postCode = getElement(address_components, \"postal_code\", \"short_name\")\r\n  const city = getElement(address_components, \"locality\", \"short_name\") || getElement(address_components, \"postal_town\", \"short_name\")\r\n  const country = getElement(address_components, \"country\", \"long_name\")\r\n  return {\r\n    street,\r\n    postCode,\r\n    city,\r\n    country,\r\n    formattedAddress: place.formatted_address\r\n  }\r\n}\r\n\r\n// deprecated, do not handle well all addresses (ex: french addresses with a comma between street number and street name, or italian addresses with a comma between street name and street number)\r\nexport const getAddressElementsFromFormattedAddress = formatted_address => {\r\n  const mainComponents = formatted_address.split(', ')\r\n\r\n  if (mainComponents.length !== 3 && mainComponents.length !== 4) {\r\n    return null\r\n  }\r\n\r\n  if (mainComponents.length === 3) {\r\n    const street = mainComponents[0]\r\n    const postCode = mainComponents[1].substr(0, mainComponents[1].indexOf(' '))\r\n    const city = mainComponents[1].split(/ (.+)/)[1]\r\n    const country = mainComponents[2]\r\n\r\n    return {\r\n      street,\r\n      postCode,\r\n      city,\r\n      country,\r\n      formattedAddress: formatted_address,\r\n    }\r\n  } else {\r\n    const street = mainComponents[0]\r\n    const city = mainComponents[1]\r\n    const postCode = mainComponents[2]\r\n    const country = mainComponents[3]\r\n\r\n    return {\r\n      street,\r\n      postCode,\r\n      city,\r\n      country,\r\n      formattedAddress: formatted_address,\r\n    }\r\n  }\r\n}\r\n\r\nexport const getGoogleMapsUrl = (position, zoom = 14) =>\r\n  `http://maps.google.com/maps?z=${zoom}&t=m&q=loc:${position.latitude}+${position.longitude}`\r\n","import React from 'react'\r\nimport clsx from 'clsx'\r\n\r\nimport Chip from '@material-ui/core/Chip'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  default: {\r\n    background: theme.pmt.status.white,\r\n    border: `1px solid #ccc!important`,\r\n  },\r\n  inactive: {\r\n    background: theme.pmt.status.inactive,\r\n  },\r\n  info: {\r\n    background: theme.pmt.status.info,\r\n    color: theme.pmt.colors.white,\r\n  },\r\n  valid: {\r\n    background: theme.pmt.status.valid,\r\n  },\r\n  warning: {\r\n    background: theme.pmt.status.warning,\r\n  },\r\n  error: {\r\n    background: theme.pmt.status.error,\r\n    color: theme.pmt.colors.white,\r\n  },\r\n}))\r\n\r\n/**\r\n * This component should not be used as is\r\n * It only provides Status Type enum\r\n * see app/components/StatusChip for details\r\n */\r\nconst StatusChip = ({ className, status, ...otherProps }) => {\r\n  const classes = useStyles()\r\n\r\n  return <Chip {...otherProps} className={clsx(className, classes[status])} />\r\n}\r\n\r\nStatusChip.Status = {\r\n  DEFAULT: 'default',\r\n  INACTIVE: 'inactive',\r\n  INFO: 'info',\r\n  VALID: 'valid',\r\n  WARNING: 'warning',\r\n  ERROR: 'error',\r\n}\r\n\r\nexport default StatusChip\r\n","const OrderMode = {\r\n  ON_SITE: 0,\r\n  TAKE_AWAY: 1,\r\n  DELIVERY: 2,\r\n}\r\n\r\nexport default OrderMode\r\n","const OrderStatus = {\r\n  CREATED: 'CREATED',\r\n  SENT: 'SENT',\r\n  RECEIVED: 'RECEIVED',\r\n  PRODUCING: 'PRODUCING',\r\n  READY: 'READY',\r\n  IN_DELIVERY: 'IN_DELIVERY',\r\n  DELIVERED: 'DELIVERED',\r\n  CANCELED: 'CANCELED',\r\n  FAILED: 'FAILED',\r\n}\r\n\r\nexport default OrderStatus\r\n","import keys from 'lodash/keys'\r\n\r\nimport StatusChip from 'pmt-ui/StatusChip'\r\n\r\nimport OrderMode from './OrderMode'\r\nimport OrderStatus from './OrderStatus'\r\nimport { tr } from '../../i18n/utils'\r\n\r\nexport { default as OrderMode } from './OrderMode'\r\n\r\nexport const PaymentFlowEnum = {\r\n  /**\r\n   * Full payment is to be made with the order\r\n   */\r\n  FULL_PAYMENT_WITH_ORDER: 'FULL_PAYMENT_WITH_ORDER',\r\n  /**\r\n   * Payment is to be made later\r\n   */\r\n  NO_PAYMENT_WITH_ORDER: 'NO_PAYMENT_WITH_ORDER',\r\n}\r\n\r\nexport function getPaymentFlowEnumLabel(paymentFlowEnum) {\r\n  switch (paymentFlowEnum) {\r\n    case PaymentFlowEnum.FULL_PAYMENT_WITH_ORDER:\r\n      return tr('global.order.PaymentFlowEnum.FULL_PAYMENT_WITH_ORDER')\r\n    case PaymentFlowEnum.NO_PAYMENT_WITH_ORDER:\r\n      return tr('global.order.PaymentFlowEnum.NO_PAYMENT_WITH_ORDER')\r\n    default:\r\n      return paymentFlowEnum\r\n  }\r\n}\r\n\r\nexport const OrderOnGoingStatus = [\r\n  OrderStatus.SENT,\r\n  OrderStatus.RECEIVED,\r\n  OrderStatus.PRODUCING,\r\n  OrderStatus.READY,\r\n  OrderStatus.IN_DELIVERY,\r\n]\r\n\r\nexport const getOrderStatusLabel = status => {\r\n  switch (status) {\r\n    case OrderStatus.CREATED:\r\n      return tr('global.order.status.CREATED')\r\n    case OrderStatus.SENT:\r\n      return tr('global.order.status.SENT')\r\n    case OrderStatus.RECEIVED:\r\n      return tr('global.order.status.RECEIVED')\r\n    case OrderStatus.PRODUCING:\r\n      return tr('global.order.status.PRODUCING')\r\n    case OrderStatus.READY:\r\n      return tr('global.order.status.READY')\r\n    case OrderStatus.IN_DELIVERY:\r\n      return tr('global.order.status.IN_DELIVERY')\r\n    case OrderStatus.DELIVERED:\r\n      return tr('global.order.status.DELIVERED')\r\n    case OrderStatus.CANCELED:\r\n      return tr('global.order.status.CANCELED')\r\n    case OrderStatus.FAILED:\r\n      return tr('global.order.status.FAILED')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getOrderStatusType = status => {\r\n  switch (status) {\r\n    case OrderStatus.CREATED:\r\n      return StatusChip.Status.WARNING\r\n    case OrderStatus.SENT:\r\n      // TODO: for now the API is using SENT, it does not set RECEIVED status when received by the POS\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.RECEIVED:\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.PRODUCING:\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.READY:\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.IN_DELIVERY:\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.DELIVERED:\r\n      return StatusChip.Status.VALID\r\n    case OrderStatus.CANCELED:\r\n      return StatusChip.Status.ERROR\r\n    case OrderStatus.FAILED:\r\n      return StatusChip.Status.ERROR\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getOrderModeLabel = mode => {\r\n  switch (mode) {\r\n    case OrderMode.ON_SITE:\r\n      return tr('global.order.mode.on_site')\r\n    case OrderMode.TAKE_AWAY:\r\n      return tr('global.order.mode.take_away')\r\n    case OrderMode.DELIVERY:\r\n      return tr('global.order.mode.delivery')\r\n    default:\r\n      //Logger.warning('OrderViewUtils', `getOrderModeLabel: invalid mode ${mode}`)\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const getOrderModeStr = mode => {\r\n  const modes = {\r\n    0: 'ON_SITE',\r\n    1: 'TAKE_AWAY',\r\n    2: 'DELIVERY',\r\n  }\r\n  return modes[mode]\r\n}\r\n\r\nexport const getOrderModeFromStr = modeStr => {\r\n  const modes = {\r\n    ON_SITE: 0,\r\n    TAKE_AWAY: 1,\r\n    DELIVERY: 2,\r\n  }\r\n  return modes[modeStr]\r\n}\r\n\r\nexport const getOrderModeLabelAsArray = () =>\r\n  keys(OrderMode).map(value => ({\r\n    label: getOrderModeLabel(OrderMode[value]),\r\n    value,\r\n  }))\r\n\r\nexport const ORDER_MINIMUM_AMOUNT = 0.5\r\n\r\nexport const OrderErrorCode = {\r\n  INVALID_DUE_DATE: '150',\r\n  RESTAURANT_DISABLED: '432',\r\n  ORDER_MODE_DISABLED: '151',\r\n  TABLE_NOT_FOUND: '402',\r\n}\r\n\r\n/**\r\n * Only used for display purpose\r\n * These values have no meaning in order data.\r\n * TODO: maybe the API should gives us this info.\r\n */\r\nexport const OrderPaymentStatus = {\r\n  NOT_PAID: 'NOT_PAID',\r\n  PAID: 'PAID',\r\n  UNDERPAYMENT: 'UNDERPAYMENT',\r\n  OVERPAYMENT: 'OVERPAYMENT',\r\n  PAID_THIRD_PARTY: 'PAID_THIRD_PARTY',\r\n}\r\n\r\nexport const getOrderPaymentStatusLabel = status => {\r\n  switch (status) {\r\n    case OrderPaymentStatus.NOT_PAID:\r\n      return tr('global.order.payment.status.NOT_PAID')\r\n    case OrderPaymentStatus.PAID:\r\n      return tr('global.order.payment.status.PAID')\r\n    case OrderPaymentStatus.UNDERPAYMENT:\r\n      return tr('global.order.payment.status.UNDERPAYMENT')\r\n    case OrderPaymentStatus.OVERPAYMENT:\r\n      return tr('global.order.payment.status.OVERPAYMENT')\r\n    case OrderPaymentStatus.PAID_THIRD_PARTY:\r\n      return tr('global.order.payment.status.PAID_THIRD_PARTY')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getOrderPaymentStatusType = status => {\r\n  switch (status) {\r\n    case OrderPaymentStatus.NOT_PAID:\r\n      return StatusChip.Status.INFO\r\n    case OrderPaymentStatus.PAID:\r\n    case OrderPaymentStatus.PAID_THIRD_PARTY:\r\n      return StatusChip.Status.VALID\r\n    case OrderPaymentStatus.UNDERPAYMENT:\r\n      return StatusChip.Status.ERROR\r\n    case OrderPaymentStatus.OVERPAYMENT:\r\n      return StatusChip.Status.WARNING\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const CancellingParty = {\r\n  MERCHANT: 'MERCHANT',\r\n  CUSTOMER: 'CUSTOMER',\r\n  THIRD_PARTY: 'THIRD_PARTY',\r\n  UNKNOWN: 'UNKNOWN',\r\n}\r\n\r\nexport const getCancellingPartyFormatted = cancellingParty => {\r\n  switch (cancellingParty) {\r\n    case CancellingParty.MERCHANT:\r\n      return tr('global.order.cancellingParty.MERCHANT')\r\n    case CancellingParty.CUSTOMER:\r\n      return tr('global.order.cancellingParty.CUSTOMER')\r\n    case CancellingParty.THIRD_PARTY:\r\n      return tr('global.order.cancellingParty.THIRD_PARTY')\r\n    case CancellingParty.UNKNOWN:\r\n      return tr('global.order.cancellingParty.UNKNOWN')\r\n    default:\r\n      return cancellingParty\r\n  }\r\n}\r\n\r\nexport const OrderItemTrackingType = {\r\n  ADDED_BY_MANUALLY_CONFIGURED_SUGGESTIONS: 'ADDED_BY_MANUALLY_CONFIGURED_SUGGESTIONS',\r\n  ADDED_BY_MANUALLY_CONFIGURED_UPSELLS: 'ADDED_BY_MANUALLY_CONFIGURED_UPSELLS',\r\n  ADDED_BY_AI_GENERATED_UPSELLS: 'ADDED_BY_AI_GENERATED_UPSELLS',\r\n}\r\n","import { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nconst formatAdmissionFee = admissionFee => {\r\n  admissionFee.amountIncludingTaxFormatted = formatPriceWithCurrency(\r\n    admissionFee.amountIncludingTax\r\n  )\r\n\r\n  return admissionFee\r\n}\r\n\r\nconst formatAdmissionFeesData = admissionFees => {\r\n  admissionFees.amountIncludingTaxFormatted = formatPriceWithCurrency(\r\n    admissionFees.amountIncludingTax\r\n  )\r\n\r\n  return admissionFees\r\n}\r\n\r\nexport const formatAdmissionFees = createFormatter(\r\n  formatAdmissionFeesData,\r\n  createSubObjectFormatter('fees', createListFormatter(formatAdmissionFee))\r\n)\r\n","import { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nexport const formatSubsidy = subsidy => {\r\n  subsidy.grantAmountFormatted = formatPriceWithCurrency(subsidy.grantAmount)\r\n  return subsidy\r\n}\r\n\r\nconst formatSubsidiesData = subsidies => {\r\n  subsidies.grantAmountFormatted = formatPriceWithCurrency(subsidies.grantAmount)\r\n  subsidies.hasSubsidies = subsidies.subsidies.length > 0\r\n  return subsidies\r\n}\r\n\r\nconst formatSubsidies = createFormatter(\r\n  formatSubsidiesData,\r\n  createSubObjectFormatter('subsidies', createListFormatter(formatSubsidy))\r\n)\r\n\r\nconst formatUserAccountPaymentData = userAccountPayment => {\r\n  userAccountPayment.grantAmountFormatted = formatPriceWithCurrency(userAccountPayment.grantAmount)\r\n\r\n  return userAccountPayment\r\n}\r\n\r\nexport const formatUserAccountPayment = createFormatter(\r\n  formatUserAccountPaymentData,\r\n  createSubObjectFormatter('subsidies', formatSubsidies)\r\n)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport capitalize from 'lodash/capitalize'\r\nimport get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\n\r\nimport { formatModifiers } from 'pmt-modules/catalog/format/cartModifiers'\r\nimport { isBo } from 'pmt-modules/environment'\r\nimport { formatOrderFees } from 'pmt-modules/fees'\r\nimport { formatCheck } from 'pmt-modules/payment/check/format'\r\nimport { formatAmount } from 'pmt-modules/payment/payment/format'\r\n\r\nimport { formatRestaurant } from 'pmt-modules/restaurant/format'\r\nimport { ThirdParty } from 'pmt-modules/thirdParty/constants'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { DATE_FORMAT_MS, formatDate, isToday } from 'pmt-utils/date'\r\nimport { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { getGoogleMapsUrl } from 'pmt-utils/google'\r\n\r\nimport {\r\n  OrderMode,\r\n  OrderPaymentStatus,\r\n  getCancellingPartyFormatted,\r\n  getOrderModeLabel,\r\n  getOrderPaymentStatusLabel,\r\n  getOrderPaymentStatusType,\r\n  getOrderStatusLabel,\r\n  getOrderStatusType,\r\n} from '../constants'\r\nimport OrderStatus from '../constants/OrderStatus'\r\n\r\nimport { formatAdmissionFees } from './formatAdmissionFees'\r\nimport { formatUserAccountPayment } from './formatUserAccountPayment'\r\n\r\nconst formatThirdParty = order => {\r\n  order.isFromThirdParty = order.thirdPartyIdentifier !== ThirdParty.LEGACY_PMT\r\n  order.isThirdPartyDeliveroo = order.thirdPartyIdentifier === ThirdParty.DELIVEROO\r\n  return order\r\n}\r\n\r\nconst formatOrderNumber = order => {\r\n  order.orderId = order.posDisplayId\r\n\r\n  if (!isEmpty(order.posDisplayId) && order.posDisplayId.length >= 3) {\r\n    // keep only the last 3 digits\r\n    // (because it must be easily memorizable by the user, and it must not cause any issue when printing the ticket)\r\n    // for TCPOS: this was previously done by the API, but now we want the full number in the OrderPaidEmail\r\n    // so we store the full number and do the truncation only when needed - aka here\r\n    order.truncOrderId = order.posDisplayId.substr(order.posDisplayId.length - 3)\r\n  } else {\r\n    order.truncOrderId = order.posDisplayId || order.posCheckNumber || 'N/A' // N/A when order failed\r\n  }\r\n\r\n  // /!\\ This was an atempt with bo v2. After rebase we use the truncOrderId above, defined for the\r\n  // web order front.\r\n  // let orderNumber = null\r\n  // const posCheckNumber = get(order, 'check.posCheckNumber', null)\r\n  // if (!isEmpty(posCheckNumber)) {\r\n  //   orderNumber = posCheckNumber.substr(posCheckNumber.length - 3)\r\n  // } else if (!isNil(order.id)) {\r\n  //   const orderIdAsString = order.id.toString()\r\n  //   orderNumber = orderIdAsString.substr(orderIdAsString.length - 3)\r\n  // }\r\n\r\n  // TODO: refactor orderNumber to posDisplayId\r\n  order.orderNumber = order.posDisplayId\r\n\r\n  order.hasOrderNumber = order.truncOrderId !== null\r\n\r\n  return order\r\n}\r\n\r\nconst formatDates = order => {\r\n  order.formattedDueDate = formatDate(order.dueDate, 'DD/MM/YY HH:mm')\r\n\r\n  // adding a more friendly format of formatted due date\r\n  // like \"Mercredi 5 février à 11:00\"\r\n  let dayText = formatDate(order.dueDate, 'dddd')\r\n  dayText = dayText.charAt(0).toUpperCase() + dayText.slice(1)\r\n  order.formattedDueDateTotal = tr('global.date_at', {\r\n    date: `${dayText} ${formatDate(order.dueDate, 'D MMMM')}`,\r\n    hour: formatDate(order.dueDate, 'HH:mm'),\r\n  })\r\n\r\n  const dueDate = moment(order.dueDate)\r\n\r\n  order.dueDateFormatted = null\r\n  const date = isToday(dueDate) ? tr('global.today') : dueDate.format('dddd D MMM')\r\n\r\n  order.dueDateFormatted = tr(`order.slots.dueDate.${order.mode}`, {\r\n    date,\r\n    dateCapitalized: capitalize(date),\r\n    time: dueDate.format('HH:mm'),\r\n  })\r\n\r\n  if (order.creationDate) {\r\n    order.creationDateFormatted = formatDate(order.creationDate, DATE_FORMAT_MS)\r\n  }\r\n\r\n  if (order.modificationDate) {\r\n    order.modificationDateFormatted = formatDate(order.modificationDate, DATE_FORMAT_MS)\r\n  }\r\n\r\n  if (order.limitRefundDate) {\r\n    order.limitRefundDateFormatted = formatDate(order.limitRefundDate)\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatOrderMode = order => {\r\n  order.orderModeLabel = getOrderModeLabel(order.mode)\r\n  order.isDeliveryMode = order.mode === OrderMode.DELIVERY\r\n  order.isOnSiteMode = order.mode === OrderMode.ON_SITE\r\n  order.isTakeAwayMode = order.mode === OrderMode.TAKE_AWAY\r\n  return order\r\n}\r\n\r\nconst formatStatus = order => {\r\n  if (isBo()) {\r\n    order.statusFormatted = getOrderStatusLabel(order.status)\r\n    order.statusType = getOrderStatusType(order.status)\r\n  }\r\n\r\n  order.isStatusCreated = order.status === OrderStatus.CREATED\r\n  order.isStatusSent = order.status === OrderStatus.SENT\r\n  order.isStatusReceived = order.status === OrderStatus.RECEIVED\r\n  order.isStatusProducing = order.status === OrderStatus.PRODUCING\r\n  order.isStatusReady = order.status === OrderStatus.READY\r\n  order.isStatusInDelivery = order.status === OrderStatus.IN_DELIVERY\r\n  order.isStatusDelivered = order.status === OrderStatus.DELIVERED\r\n  order.isStatusCanceled = order.status === OrderStatus.CANCELED\r\n  order.isStatusFailed = order.status === OrderStatus.FAILED\r\n\r\n  if (order.isStatusCanceled) {\r\n    order.cancellingPartyFormatted = getCancellingPartyFormatted(order.cancellingParty)\r\n  }\r\n\r\n  order.isFlowOnGoing =\r\n    !order.isStatusCanceled &&\r\n    !order.isStatusFailed &&\r\n    !order.isStatusDelivered &&\r\n    !order.isStatusCreated\r\n\r\n  order.isFlowFinished = !order.isFlowOnGoing\r\n  return order\r\n}\r\n\r\nconst formatOrderRestaurant = (order, props) => {\r\n  if (props.formattedRestaurantsMap) {\r\n    const restaurant = props.formattedRestaurantsMap[order.restaurantId]\r\n    if (restaurant) {\r\n      order.restaurant = formatRestaurant(restaurant)\r\n    }\r\n  }\r\n  return order\r\n}\r\n\r\nconst formatPrices = order => {\r\n  order.totalPriceFormatted = formatPriceWithCurrency(order.totalPrice, order.currency)\r\n  order.tipsFormatted = formatPriceWithCurrency(order.tips, order.currency)\r\n  order.cartTotalPriceFormatted = formatPriceWithCurrency(order.cartTotalPrice, order.currency)\r\n\r\n  const ON_SITE_PAYMENT_ID = 0 // TODO: still used?\r\n\r\n  const { userAccountPayment, irlPayment } = order\r\n\r\n  order.hasIrlPayment = !isNil(irlPayment)\r\n  order.hasUserAccountPayment = !isNil(userAccountPayment)\r\n  order.hasThirdPartyPayment = order.isFromThirdParty\r\n  order.hasPayment =\r\n    order.paymentId &&\r\n    order.paymentId !== ON_SITE_PAYMENT_ID &&\r\n    order.check && // when retrieving order on a list, we do not have the check loaded.\r\n    order.check.outstandingBalance !== order.check.total\r\n  order.isOnSitePayment =\r\n    !order.hasIrlPayment &&\r\n    !order.hasUserAccountPayment &&\r\n    !order.paymentId &&\r\n    (!order.check || order.check.outstandingBalance === order.check.total)\r\n\r\n  // TODO add payment when API will send it (order.payment !== null ? order.payment.amount : 0)\r\n  order.totalPaidPrice = 0\r\n  if (order.hasIrlPayment) {\r\n    // /!\\ order.payment is null in this case\r\n    order.totalPaidPrice += irlPayment.amount\r\n    irlPayment.amountFormatted = formatPriceWithCurrency(irlPayment.amount, order.currency)\r\n    irlPayment.totalWithTipFormatted = formatPriceWithCurrency(irlPayment.amount, order.currency) // no tips on irlPayment for now\r\n  }\r\n  if (order.hasUserAccountPayment) {\r\n    order.totalPaidPrice +=\r\n      userAccountPayment.amountFromAccount + get(userAccountPayment, 'subsidies.grantAmount', 0)\r\n    userAccountPayment.amountFromAccountFormatted = formatPriceWithCurrency(\r\n      userAccountPayment.amountFromAccount,\r\n      order.currency\r\n    )\r\n  }\r\n\r\n  if (order.hasPayment) {\r\n    order.totalPaidPrice += order.payment.amount + order.payment.tips\r\n  }\r\n\r\n  if (order.hasThirdPartyPayment) {\r\n    // TODO: reduce? for now we only have one payment.\r\n    // empty only on test payments\r\n    order.totalPaidPrice = !isEmpty(order.payments) ? order.payments[0].amount : 0\r\n  }\r\n\r\n  order.totalPaidPriceFormatted = formatPriceWithCurrency(order.totalPaidPrice, order.currency)\r\n\r\n  order.fees = formatOrderFees(order.fees)\r\n\r\n  // use only outstandingBalance to verify payment status\r\n  // see https://www.notion.so/paymytable/Am-liorer-le-label-Rester-payer-sur-la-vue-d-une-commande-d-un-client-780ca5bbe89040c1be821f7e804213bf\r\n  order.paymentStatus = null\r\n  const calculateIsFullyPaid = order => {\r\n    if (isNil(order.check)) {\r\n      return null // not really false, we just didn't loaded the data\r\n    }\r\n\r\n    if (order.hasThirdPartyPayment) {\r\n      order.paymentStatus = OrderPaymentStatus.PAID_THIRD_PARTY\r\n      return true\r\n    }\r\n\r\n    if (order.check.outstandingBalance === 0) {\r\n      order.paymentStatus = OrderPaymentStatus.PAID\r\n      return true\r\n    } else if (order.check.outstandingBalance < 0) {\r\n      order.paymentStatus = OrderPaymentStatus.OVERPAYMENT\r\n      order.isPaymentStatusOverPayment = true\r\n      return true\r\n    } else if (\r\n      order.check.outstandingBalance > 0 &&\r\n      order.check.outstandingBalance < order.totalPrice\r\n    ) {\r\n      order.paymentStatus = OrderPaymentStatus.UNDERPAYMENT\r\n      return false\r\n    } else if (order.check.outstandingBalance >= order.totalPrice) {\r\n      // this should never be superior but we never know\r\n      order.paymentStatus = OrderPaymentStatus.NOT_PAID\r\n      return false\r\n    }\r\n\r\n    return false\r\n  }\r\n  order.isFullyPaid = calculateIsFullyPaid(order)\r\n\r\n  order.paymentStatusLabel = getOrderPaymentStatusLabel(order.paymentStatus)\r\n  order.paymentStatusType = getOrderPaymentStatusType(order.paymentStatus)\r\n\r\n  return order\r\n}\r\n\r\nconst formatAmountFromAccount = order => {\r\n  if (!isNil(order.userAccountPayment)) {\r\n    order.userAccountPayment.amountFromAccountFormatted = formatPriceWithCurrency(\r\n      order.userAccountPayment.amountFromAccount,\r\n      order.currency\r\n    )\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatGrantAmount = order => {\r\n  if (!isNil(order.admissionFees)) {\r\n    order.admissionFees.amountIncludingTaxFormatted = formatPriceWithCurrency(\r\n      order.admissionFees.amountIncludingTax,\r\n      order.currency\r\n    )\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatSource = order => {\r\n  const source = order.source || {}\r\n\r\n  order.hasSource = !isNil(order.source)\r\n\r\n  source.isPlatformKiosk = source.platform === 'KIOSK'\r\n  source.hasIdentifier = !isEmpty(source.identifier)\r\n\r\n  order.source = source\r\n  return order\r\n}\r\n\r\nconst formatOrderUser = order => {\r\n  order.isLinkedToPayMyTableUser = !isNil(order.userId)\r\n  order.isLinkedToUser = !isNil(order.eater)\r\n\r\n  if (order.eater) {\r\n    order.eater.fullName = [order.eater.firstName, order.eater.lastName].filter(Boolean).join(' ')\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatAddress = order => {\r\n  const address = order.address\r\n\r\n  order.shouldHaveAddress = !order.isFromThirdParty\r\n  order.hasAddress = !isNil(address)\r\n  if (address) {\r\n    address.gmapLink = getGoogleMapsUrl({\r\n      latitude: address.geoPt.latitude,\r\n      longitude: address.geoPt.longitude,\r\n    })\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatData = order => {\r\n  order.hasTableNumber = !isEmpty(order.tableNumber)\r\n  // trick for \"at bar\": on site order with table number set to \"bar\"\r\n  order.isOnBar = order.hasTableNumber && order.tableNumber.toLowerCase() === 'bar'\r\n\r\n  order.hasFees = !isEmpty(order.fees)\r\n\r\n  if (order.check) {\r\n    order.check = formatCheck(order.check)\r\n  }\r\n\r\n  order.hasComment = !isEmpty(order.comment)\r\n  order.hasAdmissionFees = !isNil(order.admissionFees) && !isEmpty(order.admissionFees.fees)\r\n\r\n  return order\r\n}\r\n\r\nconst formatItems = order => {\r\n  order.menus = order.menus || []\r\n  order.products = order.products || []\r\n  order.items = order.menus.concat(order.products)\r\n\r\n  return order\r\n}\r\n\r\nconst formatOptionValue = (value, props = {}) => {\r\n  value.hasAdditionalPrice = value.additionalPrice !== 0\r\n  value.additionalPriceFormatted = formatPriceWithCurrency(value.additionalPrice, props.currency)\r\n  return value\r\n}\r\n\r\nconst formatOption = createFormatter(\r\n  createSubObjectFormatter('values', createListFormatter(formatOptionValue))\r\n)\r\n\r\nconst formatProduct = createFormatter(\r\n  createSubObjectFormatter('options', createListFormatter(formatOption)),\r\n  (product, props = {}) => {\r\n    product.hasComment = !isEmpty(product.comment)\r\n\r\n    if (props.fromMenu) {\r\n      product.additionalPriceFormatted = formatPriceWithCurrency(\r\n        product.additionalPrice,\r\n        props.currency\r\n      )\r\n    } else {\r\n      product.priceFormatted = formatPriceWithCurrency(product.price, props.currency)\r\n    }\r\n    return product\r\n  }\r\n)\r\n\r\nconst formatPart = createFormatter(\r\n  createSubObjectFormatter(\r\n    'products',\r\n    createListFormatter((product, props = {}) =>\r\n      formatProduct(product, { ...props, fromMenu: true })\r\n    )\r\n  )\r\n)\r\n\r\nconst formatMenu = createFormatter(\r\n  createSubObjectFormatter('parts', createListFormatter(formatPart)),\r\n  (menu, props = {}) => {\r\n    menu.priceFormatted = formatPriceWithCurrency(menu.price, props.currency)\r\n    return menu\r\n  }\r\n)\r\n\r\nconst formatDeliveryAddress = data => {\r\n  if (!isNil(data.address) && !isNil(data.address.id)) {\r\n    data.address.formattedAddress = `${data.address.street}, ${data.address.postCode} ${\r\n      data.address.city\r\n    }, ${data.address.country}`\r\n  }\r\n\r\n  return data\r\n}\r\n\r\nconst formatPayment = payment => {\r\n  return formatAmount(payment)\r\n}\r\n\r\nexport const formatOrder = createFormatter(\r\n  formatThirdParty,\r\n  formatOrderNumber,\r\n  formatDates,\r\n  formatOrderMode,\r\n  formatDeliveryAddress,\r\n  formatStatus,\r\n  formatOrderRestaurant,\r\n  formatPrices,\r\n  formatAmountFromAccount,\r\n  formatGrantAmount,\r\n  formatSource,\r\n  formatOrderUser,\r\n  formatAddress,\r\n  formatData,\r\n  createSubObjectFormatter('modifiers', formatModifiers),\r\n  createSubObjectFormatter('payment', formatPayment),\r\n  createSubObjectFormatter('fees', formatOrderFees),\r\n  (order, props = {}) => {\r\n    return createSubObjectFormatter('products', createListFormatter(formatProduct))(order, {\r\n      ...props,\r\n      currency: order.currency,\r\n    })\r\n  },\r\n  (order, props = {}) => {\r\n    return createSubObjectFormatter('menus', createListFormatter(formatMenu))(order, {\r\n      ...props,\r\n      currency: order.currency,\r\n    })\r\n  },\r\n  createSubObjectFormatter('userAccountPayment', formatUserAccountPayment),\r\n  createSubObjectFormatter('admissionFees', formatAdmissionFees),\r\n  formatItems\r\n)\r\n\r\nexport const formatOrders = createListFormatter(formatOrder)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport StatusChip from 'pmt-ui/StatusChip'\r\n\r\nexport const getApiConsumerListStateKey = withParents => `withParents_${withParents ?? false}`\r\n\r\nexport const ApiConsumerStatus = {\r\n  CREATED: 'CREATED',\r\n  ENABLED: 'ENABLED',\r\n  DISABLED: 'DISABLED',\r\n  ARCHIVED: 'ARCHIVED',\r\n}\r\n\r\nexport const getApiConsumerStatusLabel = status => {\r\n  switch (status) {\r\n    case ApiConsumerStatus.CREATED:\r\n      return tr('global.apiConsumer.status.label.CREATED')\r\n    case ApiConsumerStatus.ENABLED:\r\n      return tr('global.apiConsumer.status.label.ENABLED')\r\n    case ApiConsumerStatus.DISABLED:\r\n      return tr('global.apiConsumer.status.label.DISABLED')\r\n    case ApiConsumerStatus.ARCHIVED:\r\n      return tr('global.apiConsumer.status.label.ARCHIVED')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getApiConsumerStatusType = status => {\r\n  switch (status) {\r\n    case ApiConsumerStatus.CREATED:\r\n      return StatusChip.Status.INFO\r\n    case ApiConsumerStatus.ENABLED:\r\n      return StatusChip.Status.VALID\r\n    case ApiConsumerStatus.DISABLED:\r\n      return StatusChip.Status.WARNING\r\n    case ApiConsumerStatus.ARCHIVED:\r\n      return StatusChip.Status.INACTIVE\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const ApiConsumerPreset = {\r\n  PLUGIN_ORDER: 'PLUGIN_ORDER',\r\n\r\n  ORDER_THIRD_PARTY: 'ORDER_THIRD_PARTY',\r\n\r\n  DIGITAL_MENU: 'DIGITAL_MENU',\r\n\r\n  PLUGIN_BOOKING: 'PLUGIN_BOOKING',\r\n\r\n  /**\r\n   * top up, badge, history\r\n   */\r\n  WEB_CUSTOMER_CATERING: 'WEB_CUSTOMER_CATERING',\r\n\r\n  WEB_CUSTOMER_PAYMENT: 'WEB_CUSTOMER_PAYMENT',\r\n\r\n  WEB_CUSTOMER_OAUTH_AUTHORIZE: 'WEB_CUSTOMER_OAUTH_AUTHORIZE',\r\n\r\n  WEB_CUSTOMER_TOP_UP: 'WEB_CUSTOMER_TOP_UP',\r\n\r\n  WEB_CUSTOMER_ORDER: 'WEB_CUSTOMER_ORDER',\r\n\r\n  // unused for now\r\n  MOBILE_APP: 'MOBILE_APP',\r\n\r\n  KIOSK_ORDER: 'KIOSK_ORDER',\r\n\r\n  KIOSK_TOP_UP: 'KIOSK_TOP_UP',\r\n\r\n  // unused for now\r\n  KIOSK_ORDER_TOP_UP: 'KIOSK_ORDER_TOP_UP',\r\n\r\n  KIOSK_SELF_CHECKOUT: 'KIOSK_SELF_CHECKOUT',\r\n\r\n  // TODO: is it still used?\r\n  TABLET_PAYMENT_ORDER: 'TABLET_PAYMENT_ORDER',\r\n\r\n  POS: 'POS',\r\n\r\n  BACKOFFICE: 'BACKOFFICE',\r\n\r\n  /**\r\n   * web global website (Feedback, etc).\r\n   */\r\n  WEB_GLOBAL: 'WEB_GLOBAL',\r\n\r\n  /**\r\n   * For external scripts / APIs etc used by PMT. Better than using the OTHER preset which gives us\r\n   * no indication of the api consumer goal.\r\n   */\r\n  SCRIPT: 'SCRIPT',\r\n\r\n  /**\r\n   * For external scripts / APIs etc used by external. Better than using the OTHER preset which\r\n   * gives us no indication of the api consumer goal.\r\n   */\r\n  THIRD_PARTY: 'THIRD_PARTY',\r\n\r\n  /**\r\n   * Used mostly for:\r\n   *\r\n   * <ul>\r\n   *   <li>dev purposes, to avoid forcing the preset creation to implement a new feature.\r\n   *   <li>very specific api consumers that does not have a preset.\r\n   * </ul>\r\n   */\r\n  OTHER: 'OTHER',\r\n}\r\n\r\nexport const getApiConsumerPresetLabel = preset => {\r\n  switch (preset) {\r\n    case ApiConsumerPreset.PLUGIN_ORDER:\r\n      return tr('global.apiConsumer.preset.label.PLUGIN_ORDER')\r\n    case ApiConsumerPreset.ORDER_THIRD_PARTY:\r\n      return tr('global.apiConsumer.preset.label.ORDER_THIRD_PARTY')\r\n    case ApiConsumerPreset.DIGITAL_MENU:\r\n      return tr('global.apiConsumer.preset.label.DIGITAL_MENU')\r\n    case ApiConsumerPreset.PLUGIN_BOOKING:\r\n      return tr('global.apiConsumer.preset.label.PLUGIN_BOOKING')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_CATERING:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_CATERING')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_PAYMENT:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_PAYMENT')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_OAUTH_AUTHORIZE:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_OAUTH_AUTHORIZE')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_TOP_UP:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_TOP_UP')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_ORDER:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_ORDER')\r\n    case ApiConsumerPreset.MOBILE_APP:\r\n      return tr('global.apiConsumer.preset.label.MOBILE_APP')\r\n    case ApiConsumerPreset.KIOSK_ORDER:\r\n      return tr('global.apiConsumer.preset.label.KIOSK_ORDER')\r\n    case ApiConsumerPreset.KIOSK_TOP_UP:\r\n      return tr('global.apiConsumer.preset.label.KIOSK_TOP_UP')\r\n    case ApiConsumerPreset.KIOSK_ORDER_TOP_UP:\r\n      return tr('global.apiConsumer.preset.label.KIOSK_ORDER_TOP_UP')\r\n    case ApiConsumerPreset.KIOSK_SELF_CHECKOUT:\r\n      return tr('global.apiConsumer.preset.label.KIOSK_SELF_CHECKOUT')\r\n    case ApiConsumerPreset.TABLET_PAYMENT_ORDER:\r\n      return tr('global.apiConsumer.preset.label.TABLET_PAYMENT_ORDER')\r\n    case ApiConsumerPreset.POS:\r\n      return tr('global.apiConsumer.preset.label.POS')\r\n    case ApiConsumerPreset.BACKOFFICE:\r\n      return tr('global.apiConsumer.preset.label.BACKOFFICE')\r\n    case ApiConsumerPreset.WEB_GLOBAL:\r\n      return tr('global.apiConsumer.preset.label.WEB_GLOBAL')\r\n    case ApiConsumerPreset.SCRIPT:\r\n      return tr('global.apiConsumer.preset.label.SCRIPT')\r\n    case ApiConsumerPreset.THIRD_PARTY:\r\n      return tr('global.apiConsumer.preset.label.THIRD_PARTY')\r\n    case ApiConsumerPreset.OTHER:\r\n      return tr('global.apiConsumer.preset.label.OTHER')\r\n    default:\r\n      return preset\r\n  }\r\n}\r\n\r\nexport const getApiConsumerPresetExplaination = preset => {\r\n  switch (preset) {\r\n    case ApiConsumerPreset.PLUGIN_ORDER:\r\n      return tr('global.apiConsumer.preset.explaination.PLUGIN_ORDER')\r\n    case ApiConsumerPreset.ORDER_THIRD_PARTY:\r\n      return tr('global.apiConsumer.preset.explaination.ORDER_THIRD_PARTY')\r\n    case ApiConsumerPreset.DIGITAL_MENU:\r\n      return tr('global.apiConsumer.preset.explaination.DIGITAL_MENU')\r\n    case ApiConsumerPreset.PLUGIN_BOOKING:\r\n      return tr('global.apiConsumer.preset.explaination.PLUGIN_BOOKING')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_CATERING:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_CATERING')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_PAYMENT:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_PAYMENT')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_OAUTH_AUTHORIZE:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_OAUTH_AUTHORIZE')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_TOP_UP:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_TOP_UP')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_ORDER:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_ORDER')\r\n    case ApiConsumerPreset.MOBILE_APP:\r\n      return tr('global.apiConsumer.preset.explaination.MOBILE_APP')\r\n    case ApiConsumerPreset.KIOSK_ORDER:\r\n      return tr('global.apiConsumer.preset.explaination.KIOSK_ORDER')\r\n    case ApiConsumerPreset.KIOSK_TOP_UP:\r\n      return tr('global.apiConsumer.preset.explaination.KIOSK_TOP_UP')\r\n    case ApiConsumerPreset.KIOSK_ORDER_TOP_UP:\r\n      return tr('global.apiConsumer.preset.explaination.KIOSK_ORDER_TOP_UP')\r\n    case ApiConsumerPreset.KIOSK_SELF_CHECKOUT:\r\n      return tr('global.apiConsumer.preset.explaination.KIOSK_SELF_CHECKOUT')\r\n    case ApiConsumerPreset.TABLET_PAYMENT_ORDER:\r\n      return tr('global.apiConsumer.preset.explaination.TABLET_PAYMENT_ORDER')\r\n    case ApiConsumerPreset.POS:\r\n      return tr('global.apiConsumer.preset.explaination.POS')\r\n    case ApiConsumerPreset.BACKOFFICE:\r\n      return tr('global.apiConsumer.preset.explaination.BACKOFFICE')\r\n    case ApiConsumerPreset.WEB_GLOBAL:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_GLOBAL')\r\n    case ApiConsumerPreset.SCRIPT:\r\n      return tr('global.apiConsumer.preset.explaination.SCRIPT')\r\n    case ApiConsumerPreset.THIRD_PARTY:\r\n      return tr('global.apiConsumer.preset.explaination.THIRD_PARTY')\r\n    case ApiConsumerPreset.OTHER:\r\n      return tr('global.apiConsumer.preset.explaination.OTHER')\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const Front = {\r\n  PLUGIN_ORDER: 'PLUGIN_ORDER',\r\n  DIGITAL_MENU: 'DIGITAL_MENU',\r\n  KIOSK: 'KIOSK',\r\n  WEB_CUSTOMER: 'WEB_CUSTOMER',\r\n  PLUGIN_BOOKING: 'PLUGIN_BOOKING',\r\n  WEB_GLOBAL: 'WEB_GLOBAL',\r\n  BACKOFFICE: 'BACKOFFICE',\r\n  POS: 'POS',\r\n  SCRIPT: 'SCRIPT',\r\n  TABLET: 'TABLET',\r\n  THIRD_PARTY: 'THIRD_PARTY',\r\n  OTHER: 'OTHER',\r\n}\r\n\r\nexport const getFrontI18nLabelsDirectoryName = front => {\r\n  switch (front) {\r\n    case Front.KIOSK:\r\n      return 'pmt-web-kiosk'\r\n\r\n    case Front.WEB_CUSTOMER:\r\n      return 'pmt_web_customer'\r\n\r\n    case Front.PLUGIN_ORDER:\r\n    case Front.DIGITAL_MENU:\r\n      return 'pmt-order-plugin'\r\n\r\n    // override of the i18n labels is not implemented for those fronts yet (or is not relevant at all)\r\n    case Front.PLUGIN_BOOKING:\r\n    case Front.WEB_GLOBAL:\r\n    case Front.BACKOFFICE:\r\n    case Front.POS:\r\n    case Front.SCRIPT:\r\n    case Front.TABLET:\r\n    case Front.THIRD_PARTY:\r\n    case Front.OTHER:\r\n    default:\r\n      return null\r\n  }\r\n}\r\n\r\nexport const getFrontlabel = front => {\r\n  // TODO:\r\n  return front\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst getFrontPresets = () => ({\r\n  [Front.KIOSK]: [\r\n    ApiConsumerPreset.KIOSK_ORDER,\r\n    ApiConsumerPreset.KIOSK_ORDER_TOP_UP,\r\n    ApiConsumerPreset.KIOSK_SELF_CHECKOUT,\r\n    ApiConsumerPreset.KIOSK_TOP_UP,\r\n  ],\r\n  [Front.WEB_CUSTOMER]: [\r\n    ApiConsumerPreset.WEB_CUSTOMER_CATERING,\r\n    ApiConsumerPreset.WEB_CUSTOMER_OAUTH_AUTHORIZE,\r\n    ApiConsumerPreset.WEB_CUSTOMER_PAYMENT,\r\n    ApiConsumerPreset.WEB_CUSTOMER_TOP_UP,\r\n    ApiConsumerPreset.WEB_CUSTOMER_ORDER,\r\n  ],\r\n  [Front.PLUGIN_ORDER]: [ApiConsumerPreset.PLUGIN_ORDER, ApiConsumerPreset.WEB_CUSTOMER_ORDER],\r\n  [Front.DIGITAL_MENU]: [ApiConsumerPreset.DIGITAL_MENU],\r\n  [Front.PLUGIN_BOOKING]: [ApiConsumerPreset.PLUGIN_BOOKING],\r\n  [Front.WEB_GLOBAL]: [ApiConsumerPreset.WEB_GLOBAL],\r\n  [Front.BACKOFFICE]: [ApiConsumerPreset.BACKOFFICE],\r\n  [Front.POS]: [ApiConsumerPreset.POS],\r\n  [Front.SCRIPT]: [ApiConsumerPreset.SCRIPT],\r\n  [Front.TABLET]: [ApiConsumerPreset.TABLET],\r\n  [Front.THIRD_PARTY]: [ApiConsumerPreset.THIRD_PARTY, ApiConsumerPreset.ORDER_THIRD_PARTY],\r\n  [Front.OTHER]: [ApiConsumerPreset.OTHER],\r\n})\r\n\r\nexport const getPresetsForFront = front => {\r\n  return getFrontPresets()[front]\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const CheckAccessSecurityMode = {\r\n  POS_CHECK_ID: 'POS_CHECK_ID',\r\n  TABLE_NUMBER: 'TABLE_NUMBER',\r\n}\r\n\r\nexport const getCheckAccessSecurityModeLabel = mode => {\r\n  switch (mode) {\r\n    case CheckAccessSecurityMode.POS_CHECK_ID:\r\n      return tr('global.apiConsumer.checkAccessSecurityMode.POS_CHECK_ID')\r\n    case CheckAccessSecurityMode.TABLE_NUMBER:\r\n      return tr('global.apiConsumer.checkAccessSecurityMode.TABLE_NUMBER')\r\n    default:\r\n      return mode\r\n  }\r\n}\r\n\r\nexport const PagerCaptureModes = {\r\n  NUMERIC_PAD: 'NUMERIC_PAD',\r\n  SCANNER_2D: 'SCANNER_2D',\r\n  CONTACTLESS: 'CONTACTLESS',\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { OrderMode } from 'pmt-modules/order'\r\nimport { PagerCaptureModes } from 'pmt-modules/apiConsumer/constants'\r\n\r\nimport { createFormatter } from 'pmt-utils/format'\r\n\r\nimport { AppConfigPresets } from '../constants'\r\n\r\nconst formatOrderModes = appConfig => {\r\n  // when using Digital Menu preset, order settings are null\r\n  // so we use order modes but from digitalMenu settings\r\n  if (isEmpty(appConfig.order) && !isEmpty(appConfig.digitalMenu?.modes)) {\r\n    appConfig.order = {\r\n      modes: appConfig.digitalMenu.modes,\r\n    }\r\n  }\r\n\r\n  if (appConfig.order) {\r\n    let formattedDatas = {\r\n      hasOnSite: false,\r\n      hasTakeAway: false,\r\n      hasDelivery: false,\r\n    }\r\n\r\n    const modes = !isNil(appConfig.order.modes) ? appConfig.order.modes : []\r\n    modes.forEach(mode => {\r\n      switch (mode) {\r\n        case OrderMode.ON_SITE:\r\n          formattedDatas.hasOnSite = true\r\n          break\r\n        case OrderMode.TAKE_AWAY:\r\n          formattedDatas.hasTakeAway = true\r\n          break\r\n        case OrderMode.DELIVERY:\r\n          formattedDatas.hasDelivery = true\r\n          break\r\n        default:\r\n          break\r\n      }\r\n    })\r\n\r\n    appConfig.order.modesFormatted = { ...appConfig.order.modes, ...formattedDatas }\r\n  }\r\n\r\n  return appConfig\r\n}\r\n\r\nexport const formatOrderAppConfig = createFormatter(order => {\r\n  order.orderParamsForModes = {\r\n    [OrderMode.ON_SITE]: order.onSite,\r\n    [OrderMode.TAKE_AWAY]: order.takeAway,\r\n    [OrderMode.DELIVERY]: order.delivery,\r\n  }\r\n\r\n  order.hasPagerCaptureNumericPad =\r\n    order.pagerCaptureMode?.indexOf(PagerCaptureModes.NUMERIC_PAD) >= 0\r\n  order.hasPagerCaptureScanner2D =\r\n    order.pagerCaptureMode?.indexOf(PagerCaptureModes.SCANNER_2D) >= 0\r\n  order.hasPagerCaptureContactless =\r\n    order.pagerCaptureMode?.indexOf(PagerCaptureModes.CONTACTLESS) >= 0\r\n\r\n  return order\r\n})\r\n\r\nexport const formatAppConfig = createFormatter(formatOrderModes)\r\n\r\nexport const formatAppConfigPreset = createFormatter(data => {\r\n  data.isPluginOrder = data.preset === AppConfigPresets.PLUGIN_ORDER\r\n  data.isDigitalMenu = data.preset === AppConfigPresets.DIGITAL_MENU\r\n\r\n  return data\r\n})\r\n","import isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport Immutable from 'immutable'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { getCurrentSupportedLanguage } from 'pmt-modules/i18n'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\n\r\nimport { formatTexts } from './format/texts'\r\nimport { getDefaultAppConfig } from './config'\r\nimport { mergeConfigObject } from './utils'\r\nimport { formatAppConfig, formatOrderAppConfig, formatAppConfigPreset } from './format'\r\n\r\nconst getState = state => state.entities.appConfig\r\n\r\n// sometimes there is a weird state where the app config data is not immutable\r\n// we avoid crashes at the moment by forcing immutability\r\nconst getAppConfigState = createSelector([getState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return null\r\n  }\r\n\r\n  if (!isFunction(appConfigState.toJS)) {\r\n    console.log('state is not immutable')\r\n    return Immutable.fromJS(appConfigState)\r\n  }\r\n\r\n  return appConfigState\r\n})\r\n\r\nexport const isFetchingAppConfig = createSelector([getAppConfigState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return false\r\n  }\r\n\r\n  return appConfigState.get('isFetching', false)\r\n})\r\n\r\nexport const getAppConfigError = createSelector([getAppConfigState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return null\r\n  }\r\n\r\n  const error = appConfigState.get('error', null)\r\n  return isNil(error) ? null : error.toJS()\r\n})\r\n\r\nexport const getAppConfigData = createSelector([getAppConfigState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return null\r\n  }\r\n\r\n  const appConfigData = appConfigState.get('data', null)\r\n  if (isNil(appConfigData)) {\r\n    return null\r\n  }\r\n\r\n  // sometimes sentry is fired because toJS is not a function\r\n  // add some logs to see where this comes from\r\n  if (!isFunction(appConfigData.toJS)) {\r\n    Logger.warn('AppConfig', 'data is not immutable', {\r\n      appConfigState,\r\n      appConfigData,\r\n    })\r\n    return Immutable.fromJS(appConfigData)\r\n  }\r\n\r\n  return appConfigData\r\n})\r\n\r\nexport const getAppConfig = createSelector(\r\n  [getAppConfigData],\r\n  appConfigData => (isNil(appConfigData) ? null : formatAppConfig(appConfigData.toJS()))\r\n)\r\n\r\nexport const getOauthClient = createSelector([getAppConfigData], appConfigData => {\r\n  if (isNil(appConfigData)) {\r\n    return null\r\n  }\r\n\r\n  const auth = appConfigData.get('authentication', null)\r\n  if (!isNil(auth)) {\r\n    const oauth = auth.get('oauth2', null)\r\n\r\n    return !isNil(oauth) ? oauth.toJS() : null\r\n  }\r\n\r\n  return null\r\n})\r\n\r\nexport const getMergedConfig = (data, type) => {\r\n  if (isNil(data)) {\r\n    return getDefaultAppConfig()[type]\r\n  }\r\n\r\n  let typeConfig = data.get(type, null)\r\n  if (!isNil(typeConfig)) {\r\n    typeConfig = typeConfig.toJS()\r\n  }\r\n\r\n  return mergeConfigObject(getDefaultAppConfig()[type], typeConfig)\r\n}\r\nexport const getAppTexts = createSelector(\r\n  [getAppConfigData, getCurrentSupportedLanguage],\r\n  (appConfigData, locale) => formatTexts(getMergedConfig(appConfigData, 'texts'), locale)\r\n)\r\n\r\n/**\r\n * returns user settings of the current app config\r\n */\r\nexport const getUserSettings = createSelector([getAppConfigData], appConfigData =>\r\n  getMergedConfig(appConfigData, 'user')\r\n)\r\n\r\n/**\r\n * returns front settings of the current app config\r\n */\r\nexport const getFrontSettings = createSelector([getAppConfigData], appConfigData =>\r\n  getMergedConfig(appConfigData, 'front')\r\n)\r\n\r\n/**\r\n * returns order settings of the current app config\r\n */\r\nexport const getOrderSettings = createSelector([getAppConfigData], appConfigData =>\r\n  formatOrderAppConfig(getMergedConfig(appConfigData, 'order'))\r\n)\r\n\r\n/**\r\n * returns security settings of the current app config\r\n */\r\nexport const getSecuritySettings = createSelector([getAppConfigData], appConfigData =>\r\n  getMergedConfig(appConfigData, 'security')\r\n)\r\n\r\nexport const getAppConfigPreset = createSelector([getAppConfigState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return null\r\n  }\r\n\r\n  return formatAppConfigPreset({ preset: appConfigState.get('preset', null) })\r\n})\r\n","const ApiEndpoints = {\r\n  RESTAURANTS_GROUPS: '/restaurants-groups',\r\n\r\n  RESTAURANTS_GROUP: '/restaurants-groups/:restaurantsGroupId',\r\n  RESTAURANTS_GROUP_RESTAURANTS: '/restaurants-groups/restaurants',\r\n  RESTAURANTS_GROUP_HIERARCHY: '/restaurants-groups/hierarchy',\r\n\r\n  API_CONSUMERS: '/restaurants-groups/:restaurantsGroupId/api-consumers',\r\n  API_CONSUMERS_RESTAURANT: '/api-consumers/restaurants/:restaurantId',\r\n  API_CONSUMER: '/api-consumers/:apiConsumerId',\r\n  API_KEY: '/api-consumers/:apiConsumerId/apikey',\r\n  API_CONSUMER_VALIDATION: '/api-consumers/:apiConsumerId/validate',\r\n  CREATE_API_CONSUMER: '/api-consumers',\r\n\r\n  RESTAURANTS: '/restaurants',\r\n  RESTAURANT_LIST: '/restaurants',\r\n  RESTAURANT: '/restaurants/:restaurantId',\r\n  RESTAURANT_NEW_ARCHI: '/v1/pro/stores/:restaurantId/',\r\n\r\n  RESTAURANT_CHECKUP: '/checkup/restaurants',\r\n\r\n  RESTAURANT_DOCUMENTS_KYC: '/restaurants/:restaurantId/docs/kyc',\r\n\r\n  RESTAURANTS_GROUP_SEARCH_USERS: '/restaurants-groups/:rGroupId/users/search',\r\n\r\n  KIOSK_SETTINGS: '/restaurants/:restaurantId/kiosk-settings',\r\n\r\n  // TODO: add 's'\r\n  GET_CHECK_TABLE_NUMBER: '/restaurant/:restaurantId/table/:tableNumber/check',\r\n\r\n  GET_CHECK_POS_ID: '/restaurant/:restaurantId/pos-check-id/:posCheckId/check',\r\n\r\n  GET_CHECK: '/restaurants/:restaurantId/checks/:checkId',\r\n\r\n  PUT_MERGE_CHECKS: '/restaurants/:restaurantId/checks/merge',\r\n\r\n  GET_CHECK_CODE: '/restaurant/:restaurantId/code/:code/check',\r\n\r\n  RESTAURANT_USER_ACCOUNTS: '/restaurants/:restaurantId/user-accounts',\r\n\r\n  OAUTH_TOKEN: '/oauth/token',\r\n\r\n  OAUTH_AUTHORIZE_APP: '/oauth/authorize',\r\n\r\n  REGISTER: '/users',\r\n\r\n  USER_ME: '/users/me',\r\n\r\n  USER_ACCOUNTS: '/users/:userId/accounts',\r\n  USER_ACCOUNT: '/users/:userId/accounts/:userAccountId',\r\n  USER_ACCOUNT_TRANSACTIONS: '/users/:userId/accounts/:userAccountId/transactions',\r\n\r\n  USER_ADDRESSES: '/users/:userId/addresses',\r\n  USER_ADDRESS: '/users/:userId/addresses/:addressId',\r\n  USER_FORGOT_PASSWORD: '/users/password-recovery/recover',\r\n\r\n  RGROUP_USERS: '/restaurants-groups/:rGroupId/users',\r\n  RGROUP_USER: '/restaurants-groups/:rGroupId/users/:userId',\r\n\r\n  USERS: '/users',\r\n  USER: '/users/:userId',\r\n\r\n  DEPOSITS: '/deposits',\r\n  DEPOSIT: '/deposits/:depositId',\r\n\r\n  GET_PAYMENT: '/payments/:paymentId',\r\n  POST_PAYMENT_EMAIL: '/payments/:paymentId/email',\r\n  GET_PAYMENT_PDF_LINK: '/payments/:paymentId/pdf/link',\r\n  POST_PAYMENT: '/restaurant/:restaurantId/check/:checkId/payment',\r\n  GET_ASYNC_PAYMENT: '/payments/async/:paymentId',\r\n\r\n  HISTORY_USER_ORDERS: '/orders',\r\n  HISTORY_USER_BOOKINGS: '/bookings',\r\n  HISTORY_USER_PAYMENTS: '/payments',\r\n\r\n  PAYMENTS_HISTORY: '/payments',\r\n\r\n  ORDER_PREVIEW: '/orders-previews',\r\n\r\n  ORDERS: '/orders',\r\n  ORDERS_ON_GOING: '/orders/on-goings',\r\n  ORDERS_HISTORY: '/orders',\r\n\r\n  ORDER: '/orders/:orderId',\r\n\r\n  PRO_ME: '/pro/accounts/me',\r\n\r\n  PRO_ACCOUNTS: '/pro/accounts',\r\n\r\n  PRO_ACCOUNT: '/pro/accounts/:proAccountId',\r\n\r\n  PRO_DOMAINS: '/pro/domains',\r\n\r\n  PRO_DOMAIN: '/pro/domains/:domainId',\r\n\r\n  PRO_ME_DOMAINS: '/pro/accounts/me/domains',\r\n\r\n  PRO_ME_DOMAIN: '/pro/domains/:domainId',\r\n\r\n  PRO_ROLES: '/pro/roles',\r\n  PRO_ROLE: '/pro/roles/:roleId',\r\n\r\n  PRO_FORGOT_PASSWORD: '/pro/password-recovery/recover',\r\n\r\n  IMPORT_USER: '/restaurants-groups/:rGroupId/import/user-accounts',\r\n\r\n  /**\r\n   * Statistics\r\n   */\r\n  STATISTICS_ORDER: '/restaurants-groups/:restaurantsGroupId/stats/order/general-stats',\r\n  STATISTICS_DEPOSIT: '/restaurants-groups/:restaurantsGroupId/stats/deposit/general-stats',\r\n  STATISTICS_BALANCE_FOR_DAY: '/restaurants-groups/:restaurantsGroupId/stats/balance/for-day',\r\n\r\n  EXPORT_DEPOSITS: '/restaurants-groups/:restaurantsGroupId/export/deposits',\r\n  EXPORT_SUBSIDY_BILL: '/restaurants-groups/:restaurantsGroupId/export/subsidy-bill',\r\n  EXPORT_SALES: '/restaurants-groups/:restaurantsGroupId/export/sales',\r\n\r\n  EXPORT_RESTAURANTS_GROUP_DATA: '/restaurants-groups/:restaurantsGroupId/export',\r\n\r\n  /**\r\n   * CATALOG\r\n   */\r\n  MENU: '/restaurants/:restaurantId/menu',\r\n\r\n  /**\r\n   * CATALOG\r\n   */\r\n  CATALOG: '/restaurants/:restaurantId/catalog/v2',\r\n  UPSELLINGS: '/v1/user/upsell/store/:restaurantId',\r\n\r\n  //\r\n  //\r\n  //\r\n\r\n  ENTITY_HISTORY_LIST: '/history',\r\n  ENTITY_HISTORY: '/history/:entityHistoryId',\r\n  ENTITY_HISTORY_FOR_SESSION: '/history/sessions/:sessionId',\r\n\r\n  //\r\n  // Feedback\r\n  //\r\n  FEEDBACK_CAMPAIGNS: '/feedbacks/campaigns',\r\n  FEEDBACK_CAMPAIGN: '/feedbacks/campaigns/:feedbackCampaignId',\r\n  FEEDBACK_CAMPAIGN_EXPORT: '/feedbacks/campaigns/:feedbackCampaignId/export',\r\n  FEEDBACK_ANSWERS: '/feedbacks/campaigns/:feedbackCampaignId/answers',\r\n  FEEDBACK_ANSWER_TOKEN: '/feedbacks/answers/token/:feedbackAnswerToken',\r\n  FEEDBACK_RESUME_FOR_OBJECT: '/feedbacks/answers/:objectType/:objectId',\r\n  FEEDBACK_ANSWERS_USER: '/feedbacks/answers/users/:userId',\r\n\r\n  //\r\n  // Scheduled Actions\r\n  //\r\n  SCHEDULED_ACTIONS: '/scheduled-actions',\r\n  SCHEDULED_ACTION: '/scheduled-actions/:scheduledActionId',\r\n  SCHEDULED_ACTION_RUN: '/scheduled-actions/run/:scheduledActionId',\r\n\r\n  //\r\n  // Template\r\n  //\r\n  CUSTOMS_TEXTS: '/customs/texts-containers',\r\n  CUSTOMS_TEXTS_CONTAINER: '/customs/texts-containers/:containerId',\r\n  TEMPLATE_EMAIL_DATA: '/templates/preview/email/data',\r\n\r\n  //\r\n  // Audit\r\n  //\r\n  EVENTS_SEARCH: '/events/search',\r\n\r\n  EVENTS_SESSION: '/events/sessions/:sessionId',\r\n\r\n  AUDIT_LOGS_SEARCH: '/audit/logs/search',\r\n\r\n  //\r\n  //\r\n  //\r\n  FIREBASE_AUTH: '/firebase/auth',\r\n\r\n  //\r\n  //\r\n  //\r\n  PRO_NOTIFICATION_IDENTITIES: '/pro-notifications/identities',\r\n  PRO_NOTIFICATIONS: '/pro-notifications',\r\n  PRO_NOTIFICATION: '/pro-notifications/:proNotificationSettingId',\r\n\r\n  //\r\n  // Media\r\n  //\r\n  MEDIA: '/restaurants-groups/:rGroupId/media',\r\n  MEDIA_DETAIL: '/restaurants-groups/:rGroupId/media/:mediaId',\r\n  MEDIA_OPEN: '/restaurants-groups/:rGroupId/media/:mediaId/open',\r\n\r\n  //\r\n  //\r\n  //\r\n  API_ASYNC_SERVICE_DATA: '/service-async/:asyncServiceId',\r\n\r\n  //\r\n  // Payouts\r\n  //\r\n  PAYOUT: '/payouts/:payoutId',\r\n  PAYOUTS_LIST: '/payout/:rGroupId/list',\r\n  PAYOUTS_ERROR_LIST: '/payout/:rGroupId/list-errors',\r\n}\r\n\r\nexport default ApiEndpoints\r\n","import isNil from 'lodash/isNil'\r\n\r\nconst AuthErrors = {\r\n  POST: (requestOptions, json, response) => {\r\n    if (json.error) {\r\n      // refresh_token has expired\r\n      if (\r\n        !isNil(requestOptions.attemptRefresh) &&\r\n        json.error === 'invalid_grant' &&\r\n        !isNil(response) &&\r\n        response.status === 400\r\n      ) {\r\n        return 'global.login.error_refresh_token'\r\n      }\r\n\r\n      switch (json.error) {\r\n        case 'invalid_grant':\r\n          return 'global.login.global_error'\r\n\r\n        default:\r\n      }\r\n    }\r\n\r\n    return 'global.login.global_error'\r\n  },\r\n}\r\n\r\nexport default AuthErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport AuthErrors from '../errors/AuthErrors'\r\n\r\n/**\r\n *\r\n */\r\nconst AuthApi = {\r\n  /**\r\n   * OAuh2 token request with password grant type.\r\n   * @param  {string} username      the username (email)\r\n   * @param  {string} password      the password\r\n   * @param  {string} client_id     the oauth2 client public id\r\n   * @param  {string} client_secret the oauth2 client secret\r\n   */\r\n  postAuthPassword: (username, password, client_id, client_secret) => {\r\n    return {\r\n      type: 'POST',\r\n      isForm: true,\r\n      body: {\r\n        grant_type: 'password',\r\n        client_id,\r\n        client_secret,\r\n        username,\r\n        password,\r\n      },\r\n      headers: {\r\n        authorization: null, // force override global authorization\r\n      },\r\n      endpoint: ApiEndpoints.OAUTH_TOKEN,\r\n      errorHandler: AuthErrors.POST,\r\n    }\r\n  },\r\n\r\n  postRefreshToken: (refresh_token, client_id, client_secret) => {\r\n    return {\r\n      type: 'POST',\r\n      isForm: true,\r\n      body: {\r\n        grant_type: 'refresh_token',\r\n        client_id,\r\n        client_secret,\r\n        refresh_token,\r\n      },\r\n      headers: {\r\n        authorization: null, // force override global authorization\r\n      },\r\n      endpoint: ApiEndpoints.OAUTH_TOKEN,\r\n      errorHandler: AuthErrors.POST,\r\n    }\r\n  },\r\n}\r\n\r\nexport default AuthApi\r\n","const UserErrors = {\r\n  FORGOT_PASSWORD: {\r\n    default: 'global.forgot_password.unknown_email',\r\n  },\r\n  EDIT: {\r\n    101: 'Vous ne pouvez pas supprimer un email lié à ce compte convive',\r\n    default: \"Une erreur est survenue lors de la mise à jour de l'utilisateur.\",\r\n  },\r\n\r\n  POST_USER: {\r\n    100: 'global.post_user.email_already_used',\r\n    101: 'global.post_user.incomplete_profile',\r\n    103: 'global.post_user.cant_create_bank_account',\r\n    104: 'global.post_user.fid_already_used',\r\n    105: 'global.post_user.unknown_sponsorship',\r\n    106: 'global.post_user.cant_create_bank_wallet',\r\n    107: 'global.post_user.phone_already_used',\r\n    108: 'global.post_user.invalid_badge_id',\r\n    151: 'global.post_user.invalid_registration_code',\r\n    1026: 'global.post_user.user_light_set_password',\r\n    default: 'global.post_user.generic_error',\r\n  },\r\n}\r\n\r\nexport default UserErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport UserErrors from '../errors/UserErrors'\r\n\r\n// const loadCompagnies = (rGroupId, props, options, json, uids) => {\r\n//   // remove duplicates\r\n//   uids = uniqBy(uids, function (id) {\r\n//     return id;\r\n//   })\r\n\r\n//   // get difference between our uids list and the already loaded restaurants (props.restaurantIds)\r\n//   // to keep only the ids of the restaurants to load\r\n//   uids = differenceWith(uids, props.restaurantIds, isEqual)\r\n\r\n//   // there is no restaurant to load, we set default data and call success\r\n//   if (isEmpty(rids)) {\r\n//     json.restaurants = []\r\n//     json.restaurantIds = []\r\n//     options.success(json)\r\n//     return null\r\n//   }\r\n\r\n//   // we load the restaurants\r\n//   const getRestaurants = RestaurantApi.getRestaurants(json, uids)\r\n//   return getRestaurants\r\n// }\r\n\r\nconst transformUserFormDataToBody = user => ({\r\n  ...user,\r\n  birthdate: user.birthdate ? user.birthdate.valueOf() : null,\r\n})\r\n\r\nconst UserApi = {\r\n  getUserMe: () => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ME,\r\n      type: 'GET',\r\n    }\r\n  },\r\n\r\n  getRecoverPassword: email => ({\r\n    type: 'GET',\r\n    query: {\r\n      email,\r\n    },\r\n    headers: {\r\n      authorization: null,\r\n    },\r\n    endpoint: ApiEndpoints.USER_FORGOT_PASSWORD,\r\n    errorHandler: UserErrors.FORGOT_PASSWORD,\r\n  }),\r\n\r\n  /**\r\n   *  Get users list depending on rGroupId\r\n   *  props = {\r\n   *    - userIds: A list that describe the restaurants that we already loaded. We don't want\r\n   *    to load theme again.\r\n   *  }\r\n   */\r\n  getUserList: (rGroupId, nextCursor, limit) => ({\r\n    type: 'GET',\r\n    params: {\r\n      rGroupId,\r\n    },\r\n    query: {\r\n      loadAccounts: true,\r\n      cursor: nextCursor,\r\n      limit,\r\n    },\r\n    endpoint: ApiEndpoints.RGROUP_USERS,\r\n    // then: (options, json) => {\r\n    // let uids = json.data.map((user) => (user.id))\r\n    // return loadCompagnies(rGroupId, props, options, json, uids)\r\n    // }\r\n  }),\r\n\r\n  /**\r\n   *  Get user's orders list depending on rGroupId / userId\r\n   */\r\n  getOrdersList: (rGroupId, userId, nextCursor, limit) => ({\r\n    type: 'GET',\r\n    params: {\r\n      rGroupId,\r\n    },\r\n    query: {\r\n      userId,\r\n      cursor: nextCursor,\r\n      limit,\r\n    },\r\n    endpoint: ApiEndpoints.HISTORY_USER_ORDERS,\r\n  }),\r\n\r\n  getUser: (rGroupId, userId, loadAccounts = true) => ({\r\n    endpoint: ApiEndpoints.RGROUP_USER,\r\n    type: 'GET',\r\n    query: {\r\n      loadAccounts: loadAccounts,\r\n    },\r\n    params: {\r\n      rGroupId,\r\n      userId,\r\n    },\r\n  }),\r\n\r\n  getUserWithUnknownRestaurantsGroup: (userId, loadAccounts = true) => ({\r\n    endpoint: ApiEndpoints.USER,\r\n    type: 'GET',\r\n    query: {\r\n      loadAccounts: loadAccounts,\r\n    },\r\n    params: {\r\n      userId,\r\n    },\r\n  }),\r\n\r\n  postUser: (rGroupId, user) => ({\r\n    type: 'POST',\r\n    endpoint: ApiEndpoints.USERS,\r\n    // params: {\r\n    // rGroupId,\r\n    // },\r\n    body: transformUserFormDataToBody(user),\r\n  }),\r\n\r\n  putUser: user => ({\r\n    type: 'PUT',\r\n    endpoint: ApiEndpoints.RGROUP_USER,\r\n    params: {\r\n      rGroupId: user.restaurantsGroupId,\r\n      userId: user.id,\r\n    },\r\n    body: transformUserFormDataToBody(user),\r\n    errorHandler: UserErrors.EDIT,\r\n  }),\r\n\r\n  putProfile: user => ({\r\n    type: 'PUT',\r\n    endpoint: ApiEndpoints.USER,\r\n    params: {\r\n      userId: user.id,\r\n    },\r\n    query: {\r\n      sendPhoneVerificationCode: false,\r\n    },\r\n    body: transformUserFormDataToBody(user),\r\n    errorHandler: UserErrors.EDIT,\r\n  }),\r\n}\r\n\r\nexport default UserApi\r\n","import AuthApi from '../api/calls/AuthApi'\r\nimport UserApi from '../api/calls/UserApi'\r\n\r\nimport { createApiCallAction } from '../api/utils'\r\nimport { createApiEnumAction } from '../api/utils'\r\nimport createAction from '../redux/createAction'\r\n\r\nexport const AuthUserAction = createApiEnumAction('AUTH::USER')\r\n\r\n/**\r\n *\r\n * @param  {string} username\r\n * @param  {string} password\r\n * @param  {string} props     additionnal props that can be used by the middlewares.\r\n *                    - redirectTo: will redirect to the given url after the login success\r\n *                    - clientId: to override client id used in environnment\r\n *                    - clientSecret: to override client secret used in environnment\r\n */\r\nexport const authenticateUser = (username, password, props) => {\r\n  const clientId = props.clientId\r\n  const clientSecret = props.clientSecret\r\n\r\n  return createApiCallAction(\r\n    AuthUserAction,\r\n    AuthApi.postAuthPassword(username, password, clientId, clientSecret),\r\n    {\r\n      username,\r\n      password,\r\n      props,\r\n      client_id: clientId,\r\n      client_secret: clientSecret,\r\n    }\r\n  )\r\n}\r\n\r\nexport const ForgotPasswordAction = createApiEnumAction('AUTH::FORGOT_PASSWORD')\r\n\r\nexport const forgotPassword = username =>\r\n  createApiCallAction(ForgotPasswordAction, UserApi.getRecoverPassword(username), {\r\n    username,\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const LOGOUT_ACTION = 'LOGOUT'\r\n\r\nexport const logout = props =>\r\n  createAction(LOGOUT_ACTION, {\r\n    ...props,\r\n  })\r\n\r\nexport const SAVE_RAW_ACCESS_TOKEN_ACTION = 'AUTH::SAVE_RAW_ACCESS_TOKEN'\r\nexport const saveRawAccessToken = props =>\r\n  createAction(SAVE_RAW_ACCESS_TOKEN_ACTION, {\r\n    data: props,\r\n  })\r\n\r\nexport const CLEAN_AUTH_DATA = 'AUTH::CLEAN'\r\nexport const cleanAuthData = () => createAction(CLEAN_AUTH_DATA, {})\r\n","// TODO: fix crash if import with {}. see ../actions\r\nimport { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport AuthApi from 'pmt-modules/api/calls/AuthApi'\r\nimport { createAction } from 'pmt-modules/redux'\r\n\r\nexport const RefreshTokenFlowAction = {\r\n  RETRY_API_CALL: 'REFRESH_TOKEN_PROMISE::RETRY_API_CALL',\r\n  DONE: 'REFRESH_TOKEN_PROMISE::DONE',\r\n}\r\n\r\n// export const setAccessToken = ({ access_token, expires_in }) => ({\r\n//   type: RefreshTokenFlowAction.SET,\r\n//   access_token,\r\n//   expires_in,\r\n// })\r\n\r\n/**\r\n * Action used to re-run an action.\r\n * Previously, we just runned the action directly, but we didn't have a redux log, so now we use\r\n * this action, that will be logged and handle by our middleware\r\n */\r\nexport const retryApiCallAction = actionToRetry =>\r\n  createAction(RefreshTokenFlowAction.RETRY_API_CALL, {\r\n    actionToRetry,\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const RefreshAction = createApiEnumAction('AUTH::REFRESH')\r\n\r\n/**\r\n *\r\n * @param  {string} refreshToken  the refreshToken to use\r\n * @param  {object} oauthClient   the oauthClient to use with\r\n *                                  - client_id\r\n *                                  - client_secret\r\n * @param  {[type]} props         props to use\r\n *                                - then: function called by the middlewares handling this action.\r\n *                                  it notify the `attemptRefresh` of the response.\r\n *                                  the `attemptRefresh` will:\r\n *                                    - success: re-run the api calls that failed after updating the\r\n *                                    access_token\r\n *                                    - failure: redirect to the login page\r\n *                                    for both it will remove the refresh promise\r\n *                                    the `then` function take an object with:\r\n *                                      - error: boolean\r\n *                                      - response: the refresh token api call response (contains\r\n *                                      the token data)\r\n *\r\n */\r\nexport const refreshAction = (refreshToken, oauthClient, props) => {\r\n  return createApiCallAction(\r\n    RefreshAction,\r\n    AuthApi.postRefreshToken(\r\n      refreshToken,\r\n      oauthClient.clientId,\r\n      oauthClient.clientSecret,\r\n      props\r\n    ),\r\n    {\r\n      refresh_token: refreshToken,\r\n      props,\r\n      client_id: oauthClient.clientId,\r\n      client_secret: oauthClient.clientSecret,\r\n    }\r\n  )\r\n}\r\n\r\nexport const refreshActionDone = () => ({\r\n  type: RefreshTokenFlowAction.DONE,\r\n})\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { getAuthCookie, getUserLightCookie, getIncognitoCookie } from './utils'\r\n\r\nconst getAuthData = state => state.entities.auth\r\n\r\nexport const getAuthError = createSelector([getAuthData], authData => {\r\n  const error = authData.get('error', null)\r\n  return isNil(error) ? null : error.toJS()\r\n})\r\n\r\nexport const isFetchingAuth = createSelector([getAuthData], authData =>\r\n  authData.get('isFetching', false)\r\n)\r\n\r\nexport const getRefreshSucceded = createSelector([getAuthData], authData =>\r\n  authData.get('refreshSucceded')\r\n)\r\n\r\nexport const isRefreshingOauthToken = createSelector(\r\n  [getAuthData, isFetchingAuth],\r\n  (authData, isFetchingAuth) => isFetchingAuth && authData.get('isRefreshing') === true\r\n)\r\n\r\n// TODO: should be on utils, those are not selectors:\r\n\r\nexport const getAuth = () => getAuthCookie()\r\n\r\nexport const haveAuthCredentials = () =>\r\n  getAuthCookie() !== null || getUserLightCookie() !== null || getIncognitoCookie() !== null\r\n\r\nexport const getRefreshToken = () => {\r\n  const authCookie = getAuthCookie()\r\n  return isNil(authCookie) ? null : authCookie.refresh_token\r\n}\r\n\r\nexport const getAccessToken = () => {\r\n  const authCookie = getAuthCookie()\r\n  return isNil(authCookie) ? null : authCookie.access_token\r\n}\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nconst AppConfigApi = {\r\n  get: () => ({\r\n    endpoint: ApiEndpoints.API_CONSUMER,\r\n    params: {\r\n      apiConsumerId: 'mine',\r\n    },\r\n    query: {\r\n      loadSettings: true,\r\n    },\r\n    headers: {\r\n      authorization: null, // force override global authorization\r\n    },\r\n    type: 'GET',\r\n  }),\r\n}\r\n\r\nexport default AppConfigApi\r\n","import { createApiEnumAction, createApiCallAction, createTestApiCallAction } from '../api/utils'\r\n\r\nimport AppConfigApi from '../api/calls/AppConfigApi'\r\n\r\nimport { getAppConfigFixture } from './fixtures'\r\n\r\nexport const GetAppConfigAction = createApiEnumAction('APP_CONFIG::GET')\r\n\r\nexport const fetchAppConfig = () => createApiCallAction(GetAppConfigAction, AppConfigApi.get())\r\n\r\nexport const fetchAppConfigFixture = apiConsumer =>\r\n  createTestApiCallAction(GetAppConfigAction, true, {\r\n    data: {\r\n      apiConsumer,\r\n    },\r\n    response: getAppConfigFixture(),\r\n  })\r\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar compose = function compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  }, function (arg) {\n    return arg;\n  });\n};\n\nvar _default = compose;\nexports.default = _default;","import { createAction } from '../redux'\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const SET_API_GENERIC_INVALID = 'APP_SECURITY::SET_API_GENERIC_INVALID'\r\n\r\nexport const setApiGenericInvalid = error => createAction(SET_API_GENERIC_INVALID, { error })\r\n","export const API_INVALID_APP_TOKEN_ERROR_CODE = '10020'\r\nexport const API_INVALID_GEOLOCATION_ERROR_CODE = '10021'\r\nexport const API_INVALID_ON_SITE_SECURITY = '10023'\r\n\r\nexport const APP_TOKEN_QUERY_PARAM = 'at'\r\n","import { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport {\r\n  APP_TOKEN_QUERY_PARAM,\r\n  API_INVALID_GEOLOCATION_ERROR_CODE,\r\n  API_INVALID_APP_TOKEN_ERROR_CODE,\r\n  API_INVALID_ON_SITE_SECURITY,\r\n} from './constants'\r\n\r\nexport const isAppSecurityError = error =>\r\n  error &&\r\n  (error.code === API_INVALID_GEOLOCATION_ERROR_CODE ||\r\n    error.code === API_INVALID_APP_TOKEN_ERROR_CODE ||\r\n    error.code === API_INVALID_ON_SITE_SECURITY || \r\n    error.errorCode === \"MAINTENANCE_MODE\" || \r\n    error.errorCode === \"TOO_MANY_REQUESTS\")\r\n\r\nexport const getAppTokenCodeOnUrl = () => getQueryParam(APP_TOKEN_QUERY_PARAM)\r\n","import { createMiddleware } from '../redux'\r\n\r\nimport { isAppSecurityError } from './utils'\r\nimport { SET_API_GENERIC_INVALID, setApiGenericInvalid } from './actions'\r\n\r\nconst catchApiGenericError = action =>\r\n  // avoid infinite loop\r\n  action.type !== SET_API_GENERIC_INVALID && action.error && isAppSecurityError(action.error)\r\n\r\nconst apiGenericMiddleware = createMiddleware(catchApiGenericError, ({ dispatch, action }) => {\r\n  dispatch(setApiGenericInvalid(action.error))\r\n})\r\n\r\nexport const appSecurityMiddlewares = [apiGenericMiddleware]\r\n","// The ApiConsumer can define multiplee layers of security for an app to be handled by the API\r\n// - appToken\r\n// - geolocation\r\n//\r\n// This module handles the generic errors the API can return because of those security checks.\r\n//\r\n\r\nimport Immutable from 'immutable'\r\nimport { SET_API_GENERIC_INVALID } from './actions'\r\nimport { createReducer } from '../redux'\r\n\r\nexport * from './constants'\r\nexport * from './utils'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  error: null,\r\n})\r\n\r\nconst handleSetGenericInvalid = (state, action) =>\r\n  state.set('error', Immutable.fromJS(action.error))\r\n\r\nexport const appSecurityReducer = createReducer(DEFAULT_STATE, {\r\n  [SET_API_GENERIC_INVALID]: handleSetGenericInvalid,\r\n})\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet Error = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n    <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/>\r\n  </SvgIcon>\r\n);\r\nError = pure(Error);\r\nError.displayName = 'Error';\r\nError.muiName = 'SvgIcon';\r\n\r\nexport default Error;\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport PropTypes from 'prop-types'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNull from 'lodash/isNull'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { isAppSecurityError } from 'pmt-modules/appSecurity'\r\nimport { shouldUseAppConfig } from 'pmt-modules/environment'\r\n\r\nimport { fetchAppConfig } from '../actions'\r\nimport {\r\n  getAppConfig,\r\n  isFetchingAppConfig,\r\n  getAppConfigError,\r\n  getFrontSettings,\r\n  getOrderSettings,\r\n  getUserSettings,\r\n  getSecuritySettings,\r\n  getAppConfigPreset,\r\n} from '../selectors'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { LoadingBlock } from 'pmt-ui/LoadingBlock'\r\nimport IconError from 'pmt-ui/svg-icons/alert/error'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that fetch the app config and pass it to the children.\r\n *\r\n * Requirements:\r\n * -\r\n *\r\n * see `withAppConfig`\r\n *\r\n */\r\n\r\nconst styles = theme => ({\r\n  wrapper: {\r\n    position: 'relative',\r\n    height: '100%',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n    [theme.breakpoints.up('sm')]: {\r\n      padding: theme.spacing(2),\r\n    },\r\n  },\r\n  loadingBlock: {\r\n    background: theme.pmt.colors.white,\r\n    padding: theme.spacing(4),\r\n    minHeight: 400,\r\n  },\r\n  circularProgress: {\r\n    color: theme.pmt.loading.color,\r\n  },\r\n  errorLayout: {\r\n    background: theme.pmt.colors.grey91,\r\n    height: '100%',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    color: theme.pmt.colors.white,\r\n  },\r\n  errorIcon: {\r\n    fontSize: 128,\r\n    margin: `${theme.spacing(6)}px auto`,\r\n  },\r\n  errorTitle: {\r\n    whiteSpace: 'pre-line',\r\n    color: theme.pmt.colors.white,\r\n    textAlign: 'center',\r\n  },\r\n})\r\n\r\nconst Loading = ({ classes }) => (\r\n  <div className={classes.wrapper}>\r\n    <LoadingBlock\r\n      show\r\n      classes={{\r\n        loadingBlock: classes.loadingBlock,\r\n        circularProgress: classes.circularProgress,\r\n      }}\r\n    />\r\n  </div>\r\n)\r\n\r\nclass AppConfigContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n    this.loadAppConfig(this.props)\r\n  }\r\n\r\n  loadAppConfig(props) {\r\n    if (shouldUseAppConfig()) {\r\n      // avoid loading when we already have an error to avoid infinite loop\r\n      if (isNull(props.appConfig) && isNull(props.error) && !props.isFetchingAppConfig) {\r\n        props.fetchAppConfig()\r\n      }\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    this.loadAppConfig(this.props)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      AppConfigWrappedComponent,\r\n      isFetchingAppConfig,\r\n      isFetchingI18nPhrases,\r\n      appConfig,\r\n      classes,\r\n      error,\r\n      children,\r\n      ...other\r\n    } = this.props\r\n\r\n    if (isFetchingI18nPhrases) {\r\n      return <Loading classes={classes} />\r\n    }\r\n\r\n    if (!shouldUseAppConfig()) {\r\n      if (isFunction(children)) {\r\n        return children()\r\n      }\r\n      return children\r\n    }\r\n\r\n    // while we are fetching the appConfig, we return a loader\r\n    // so the user doesn't think it isn't loading anything\r\n    // we don't want to display the loading if the appConfig is null because of an appSecurity error\r\n    // we want to display the children, that will display the error\r\n    if (isFetchingAppConfig || (isNil(appConfig) && !isAppSecurityError(error))) {\r\n      // couldn't retrieve the app config and it is not an app security error.\r\n      // mostly because of an invalid api consumer\r\n      if (error && !isAppSecurityError(error)) {\r\n        Logger.error('API consumer', 'Invalid API consumer', this.props)\r\n        return (\r\n          <div className={classes.errorLayout}>\r\n            <IconError className={classes.errorIcon} />\r\n            <Typography variant=\"body2\" className={classes.errorTitle}>\r\n              {error.localizedMessage || error.message}\r\n            </Typography>\r\n          </div>\r\n        )\r\n      }\r\n      return <Loading classes={classes} />\r\n    }\r\n    if (isNil(AppConfigWrappedComponent)) {\r\n      return !isFunction(children)\r\n        ? React.cloneElement(children, {\r\n            isFetchingAppConfig,\r\n            appConfig,\r\n            ...other,\r\n          })\r\n        : children({\r\n            isFetchingAppConfig,\r\n            appConfig,\r\n            ...other,\r\n          })\r\n    }\r\n\r\n    return (\r\n      <AppConfigWrappedComponent\r\n        AppConfigWrappedComponent={null}\r\n        appConfig={appConfig}\r\n        isFetchingAppConfig={isFetchingAppConfig}\r\n        {...other}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nAppConfigContainer.propTypes = {\r\n  fetchAppConfig: PropTypes.func.isRequired,\r\n  isFetchingAppConfig: PropTypes.bool,\r\n  appConfig: PropTypes.object,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {\r\n    appConfig: getAppConfig(state),\r\n    appConfigPreset: getAppConfigPreset(state),\r\n    frontAppConfig: getFrontSettings(state),\r\n    orderAppConfig: getOrderSettings(state),\r\n    userAppConfig: getUserSettings(state),\r\n    securityAppConfig: getSecuritySettings(state),\r\n    isFetchingAppConfig: isFetchingAppConfig(state),\r\n    error: getAppConfigError(state),\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  connect(mapStateToProps, {\r\n    fetchAppConfig,\r\n  }),\r\n  withStyles(styles)\r\n)(AppConfigContainer)\r\n","import React from 'react'\r\n\r\nimport AppConfigContainer from './AppConfigContainer'\r\n\r\n/**\r\n * Add the AppConfigContainer as HOC for the given component\r\n */\r\nconst withAppConfig = AppConfigWrappedComponent => props => (\r\n  <AppConfigContainer\r\n    AppConfigWrappedComponent={AppConfigWrappedComponent}\r\n    {...props}\r\n  />\r\n)\r\n\r\nexport default withAppConfig\r\n","import { EventManager } from 'pmt-modules/event'\r\n\r\nEventManager.registerEvents({\r\n  //\r\n  // Dispatch the app config for the current api consumer\r\n  //\r\n  // Data:\r\n  // - appConfig: the app config for the current api consumer with default values set on it\r\n  //\r\n  // Note: we could send the appConfig without the default (the one given by the API)\r\n  // (see appConfig/middlewares#getAppConfigSuccess)\r\n  //\r\n  ON_GET_APP_CONFIG_SUCCESS: 'APP_CONFIG::GET_APP_CONFIG::SUCCESS',\r\n})\r\n","import invariant from 'invariant'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport forEach from 'lodash/forEach'\r\nimport isString from 'lodash/isString'\r\nimport isNumber from 'lodash/isNumber'\r\nimport isNil from 'lodash/isNil'\r\nimport { uintColorToHexadecimal, lighten, darken } from './colorManipulator'\r\n\r\n//\r\n// Returns an mui color\r\n// An mui color contains all the colors for the defined contrasts (font weight).\r\n// TODO: for now, we set the same color for every constrat..\r\n//\r\nexport const createMuiColor = (color, palette) => ({\r\n  main: color,\r\n  light: lighten(color, palette.tonalOffset),\r\n  dark: darken(color, palette.tonalOffset),\r\n  contrastText: palette.getContrastText(color),\r\n})\r\n\r\n/**\r\n * [createMuiTextColor description]\r\n * @param  {[type]} currentConfig [description]\r\n * @param  {[type]} newColor      [description]\r\n * @return {[type]}               [description]\r\n */\r\nexport const createMuiTextColor = (currentConfig, newConfig) => ({\r\n  ...currentConfig,\r\n  primary: !isNil(newConfig.primary)\r\n    ? isNumber(newConfig.primary) ? uintColorToHexadecimal(newConfig.primary) : newConfig.primary\r\n    : currentConfig.primary,\r\n  secondary: !isNil(newConfig.secondary)\r\n    ? isNumber(newConfig.secondary)\r\n      ? uintColorToHexadecimal(newConfig.secondary)\r\n      : newConfig.secondary\r\n    : currentConfig.secondary,\r\n})\r\n\r\n/**\r\n * Each key of the mui `palette` theme can be handled diffently\r\n * @param  {string} key   key of the `palette` object\r\n * @param  {string|object} color color as:\r\n *                        - an hexadecimal value\r\n *                        - an rgba string value\r\n */\r\nexport const createMuiValueForPalette = (key, currentConfig, newConfig, palette) => {\r\n  switch (key) {\r\n    case 'text':\r\n      return createMuiTextColor(currentConfig, newConfig)\r\n\r\n    case 'primary':\r\n      return createMuiColor(newConfig, palette)\r\n\r\n    case 'secondary':\r\n      return createMuiColor(newConfig, palette)\r\n\r\n    default:\r\n      invariant(false, 'mui palette key not handled')\r\n  }\r\n}\r\n\r\n/**\r\n * Example:\r\n *\r\n * ```\r\n *   const newPalette = createMuiPalette(currentTheme.palette, {\r\n *     primary: uintColorToHexadecimal(action.response.colors.actionBackgroundColor),\r\n *     secondary: uintColorToHexadecimal(action.response.colors.actionBackgroundColor),\r\n *     text: uintColorToHexadecimal(action.response.colors.fontColor),\r\n *   })\r\n * ```\r\n *\r\n * @param  {[type]} defaultPalette default palette of the theme\r\n * @param  {[type]} props          object that will override the palette:\r\n *                                    - key: key to override on the palette\r\n *                                    - value: the color set.\r\n *                                      - number, we parse it as hex and follow the same as a string\r\n *                                      - string, we use `createMuiColor` to create the different\r\n *                                       contrasts, otherwise we use the\r\n *                                      value\r\n * @return {[type]}                [description]\r\n */\r\nexport const createMuiPalette = (defaultPalette, props) => {\r\n  const palette = cloneDeep(defaultPalette)\r\n\r\n  forEach(props, (paletteValue, paletteKey) => {\r\n    let value = null\r\n\r\n    if (isNumber(paletteValue)) {\r\n      value = uintColorToHexadecimal(paletteValue)\r\n    } else if (isString(paletteValue)) {\r\n      invariant(paletteValue[0] === '#', 'invalid color')\r\n      value = paletteValue\r\n    } else {\r\n      value = paletteValue\r\n    }\r\n\r\n    palette[paletteKey] = createMuiValueForPalette(\r\n      paletteKey,\r\n      defaultPalette[paletteKey],\r\n      value,\r\n      defaultPalette\r\n    )\r\n  })\r\n\r\n  return palette\r\n}\r\n","import { createMuiPalette } from './palette'\r\n\r\n/**\r\n *\r\n * ```\r\n * const currentTheme = getCurrentTheme(getState())\r\n * const newTheme = createMuiThemeWithPmtRestaurantColors(currentTheme, action.response.colors)\r\n *\r\n * next(changeCurrentTheme(newTheme))\r\n * ```\r\n *\r\n * @param  {object} currentTheme current mui theme\r\n * @param  {object} colors       restaurant colors settings\r\n */\r\nexport const createMuiThemeWithPmtRestaurantColors = (currentTheme, colors) => {\r\n  const newPalette = createMuiPalette(currentTheme.palette, {\r\n    primary: colors.actionBackgroundColor,\r\n    secondary: colors.actionBackgroundColor,\r\n    text: {\r\n      primary: colors.fontColor,\r\n    }\r\n  })\r\n\r\n  const newTheme = {\r\n    ...currentTheme,\r\n    palette: newPalette,\r\n    pmt: {\r\n      ...currentTheme.pmt,\r\n      loading: {\r\n        ...currentTheme.pmt.loading,\r\n        color: colors.actionBackgroundColor,\r\n      }\r\n    }\r\n  }\r\n\r\n  return newTheme\r\n}\r\n\r\n/**\r\n *\r\n * ```\r\n * const currentTheme = getCurrentTheme(getState())\r\n * const newTheme = createMuiThemeWithPmtRGroupColors(currentTheme, action.response.theme)\r\n *\r\n * next(changeCurrentTheme(newTheme))\r\n * ```\r\n *\r\n * @param  {object} currentTheme current mui theme\r\n * @param  {object} theme        rGroup theme configuration\r\n */\r\nexport const createMuiThemeWithPmtRGroupColors = (currentTheme, theme) => {\r\n  let newPalette = null\r\n  if (!theme) {\r\n    newPalette = createMuiPalette(currentTheme.palette)\r\n  } else {\r\n    newPalette = createMuiPalette(currentTheme.palette, {\r\n      primary: theme.mainBackgroundColor,\r\n      secondary: theme.mainBackgroundColor,\r\n    })\r\n  }\r\n\r\n  const newTheme = {\r\n    ...currentTheme,\r\n    palette: newPalette,\r\n    pmt: {\r\n      ...currentTheme.pmt,\r\n      loading: {\r\n        ...currentTheme.pmt.loading,\r\n        color: theme.mainBackgroundColor,\r\n      }\r\n    }\r\n  }\r\n\r\n  return newTheme\r\n}\r\n","import forEach from 'lodash/forEach'\r\n\r\nimport { createFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { getForLocale } from 'pmt-utils/locale'\r\n\r\nexport const formatTexts = (texts, props) => {\r\n  let textsForCurrentLocale = {}\r\n\r\n  forEach(texts, ({ type, locales }) => {\r\n    const textForLocale = getForLocale(locales, props.locale)?.text || ''\r\n    textsForCurrentLocale[type] = textForLocale\r\n  })\r\n\r\n  return textsForCurrentLocale\r\n}\r\n\r\nexport const formatCustomTexts = createSubObjectFormatter('texts', createFormatter(formatTexts))\r\n","import { createSelector } from 'reselect'\r\n\r\nimport { getCurrentLanguageWithoutRegionCode } from 'pmt-modules/i18n'\r\nimport { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nimport { formatCustomTexts } from './format'\r\n\r\nconst customTextsSelectors = createSimpleSelector(state => state.entities.customTexts)\r\n\r\nexport const isFetchingCustomTexts = customTextsSelectors.isFetching\r\nexport const getCustomTextsData = createSelector(\r\n  [customTextsSelectors.getData, getCurrentLanguageWithoutRegionCode],\r\n  (customTexts, locale) => formatCustomTexts(customTexts, { locale })\r\n)\r\n\r\nexport const getCustomTextsError = customTextsSelectors.getError\r\n","import isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nimport createMiddleware from 'pmt-modules/redux/createMiddleware'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getCurrentTheme, changeCurrentTheme } from 'pmt-modules/theme'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { createMuiThemeWithPmtRGroupColors } from 'pmt-utils/theme/theme'\r\n\r\nimport { GetAppConfigAction } from './actions'\r\nimport { mergeAppConfigWithDefault } from './utils'\r\nimport { setTexts } from '../i18n'\r\nimport { getAppTexts } from './selectors'\r\n// noinspection ES6PreferShortImport (otherwise circular dependency)\r\nimport { getCustomTextsData } from '../customTexts/selectors'\r\n\r\nconst getAppConfigSuccess = createMiddleware(\r\n  GetAppConfigAction.SUCCESS,\r\n  ({ action, getState, dispatch, next }) => {\r\n    const appConfig = mergeAppConfigWithDefault(action.response.settings)\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_GET_APP_CONFIG_SUCCESS, {\r\n      appConfig,\r\n      // Note: we could send the appConfig without the default (the one given by the API)\r\n    })\r\n\r\n    // register kioskInteractor module regarding what has been set in app config\r\n    if (process.env.FEATURE_KIOSK) {\r\n      if (!isNil(appConfig.front.kiosk)) {\r\n        import('pmt-modules/kioskInteractor/config')\r\n          .then(({ registerKioskInteractor }) => {\r\n            registerKioskInteractor(appConfig.front.kiosk)\r\n          })\r\n      }\r\n    }\r\n\r\n    if (action.response.settings && action.response.settings.front) {\r\n      const frontSettings = action.response.settings.front\r\n      if (frontSettings && !isNil(frontSettings.theme)) {\r\n        const currentTheme = getCurrentTheme(getState())\r\n        const newTheme = createMuiThemeWithPmtRGroupColors(currentTheme, frontSettings.theme)\r\n\r\n        // if apiConsumer setting has extra custom css, we spread it in theme.pmt.appConfig\r\n        // this will then be used inside components\r\n        // (e.g. PartView title stickyness on custom integration with fixed header)\r\n        if (!isNil(frontSettings.theme.customCss)) {\r\n          invariant(!isNil(newTheme.pmt.appConfig), 'theme.pmt.appConfig should be defined')\r\n\r\n          newTheme.pmt.appConfig = {\r\n            ...newTheme.pmt.appConfig,\r\n            ...frontSettings.theme.customCss,\r\n          }\r\n        }\r\n\r\n        dispatch(changeCurrentTheme(newTheme))\r\n      } else {\r\n        Logger.warn(\r\n          'ApiConsumer settings theme',\r\n          `no theme found for api consumer ${action.response.name} ${action.response.id}`\r\n        )\r\n      }\r\n    }\r\n\r\n    // finalize action in order to wait it has fully ended (i.e: data is in reducer)\r\n    // so we can use the selectors after that\r\n    next(action)\r\n\r\n    // we set the texts after the action has been processed\r\n    // so we can access them from anywhere (especially in \"tr\" i18n function)\r\n    setTexts(getAppTexts(getState()), getCustomTextsData(getState()))\r\n  }\r\n)\r\n\r\nexport const appConfigMiddlewares = [getAppConfigSuccess]\r\n","//\r\n// This module store global configuration and data for the order plugin,\r\n// that don't requires their own module / reducer\r\n//\r\nimport Immutable from 'immutable'\r\n\r\nimport { GetAppConfigAction } from './actions'\r\n\r\nexport * from './components'\r\nexport * from './actions'\r\nexport * from './events'\r\nexport * from './constants'\r\nexport * from './selectors'\r\nexport * from './config'\r\nexport * from './format'\r\nexport * from './middlewares'\r\n\r\n//\r\n// The appConfig is set as default by the front.\r\n// It is given to our `Application` that call `setDefaultAppConfig`\r\n//\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  data: null,\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n})\r\n\r\nexport const appConfigReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case GetAppConfigAction.REQUEST:\r\n      return state.merge({\r\n        preset: null,\r\n        data: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetAppConfigAction.SUCCESS:\r\n      // appConfig is get by fetching apiConsumer settings\r\n      return state.merge({\r\n        preset: action.response.preset,\r\n        // set to empty object if null in order to know if fetch has successed\r\n        data: action.response.settings || {},\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetAppConfigAction.FAILURE:\r\n      return state.merge({\r\n        preset: null,\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import createMiddleware from 'pmt-modules/redux/createMiddleware'\r\n\r\nimport { RefreshTokenFlowAction } from './actions'\r\n\r\nconst retryApiCallMiddleware = createMiddleware(\r\n  RefreshTokenFlowAction.RETRY_API_CALL,\r\n  ({ action, dispatch }) => {\r\n    dispatch(action.actionToRetry)\r\n  }\r\n)\r\n\r\nexport const refreshTokenMiddlewares = [retryApiCallMiddleware]\r\n","import get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\n\r\nimport { isWebCustomer } from 'pmt-modules/environment'\r\nimport { GetAppConfigAction } from 'pmt-modules/appConfig'\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { getRoute, redirectTo, replaceWith } from 'pmt-modules/routing'\r\nimport { EventManager } from 'pmt-modules/event'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport Logger from 'pmt-utils/logger'\r\n\r\nimport { cleanAuthData } from './actions'\r\nimport { removeAccessToken } from './utils'\r\n\r\nimport { AuthUserAction, LOGOUT_ACTION, SAVE_RAW_ACCESS_TOKEN_ACTION } from './actions'\r\nimport { RefreshAction } from './refreshToken/actions'\r\nimport { refreshTokenMiddlewares } from './refreshToken/middlewares'\r\nimport {\r\n  setClientId,\r\n  saveAccessToken,\r\n  setRestaurantsGroupId,\r\n  removeUserLight,\r\n  removeIncognitoCookie,\r\n} from './utils'\r\n\r\nconst notifyTokenChanged = token => {\r\n  saveAccessToken(token)\r\n}\r\n\r\n/**\r\n * Intercepts LOGIN action and redirects to dashboard screen if the login succeeded\r\n * Otherwise just sends action to next middleware\r\n *\r\n * @returns {Function}\r\n */\r\nconst authMiddleware = createMiddleware(\r\n  AuthUserAction.SUCCESS,\r\n  ({ getState, dispatch, next, action }) => {\r\n    // first, we calculate the expiration date before saving it to localStorage\r\n    // we subtract 1 minute to take into consideration API response time\r\n    action.response.expiresAt = moment()\r\n      .add(action.response.expires_in, 'ms')\r\n      .subtract(1, 'm')\r\n      .valueOf()\r\n\r\n    // notify the token has changed\r\n    notifyTokenChanged(action.response)\r\n\r\n    // forget your other \"light\" authentications, you are now really authenticated !\r\n    removeUserLight()\r\n    removeIncognitoCookie()\r\n\r\n    Logger.setUserContext(Logger.UserContext.USER, action.data)\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_LOGIN_SUCCESS, {\r\n      user: action.data.username,\r\n    })\r\n\r\n    const props = action.data.props || {}\r\n\r\n    // get the page where to redirect\r\n    // we handle a `redirectTo` parameter to go back on the page that asked the user to logged in\r\n    const redirectToParam = props.redirectTo || getQueryParam('redirectTo')\r\n    if (!isEmpty(redirectToParam)) {\r\n      dispatch(replaceWith(decodeURIComponent(redirectToParam)))\r\n    }\r\n  }\r\n)\r\n\r\n//\r\n// update the token\r\n// middleware that notify `attemptRefresh` that the refresh action succeeded\r\n//\r\nconst refreshMiddlewareSuccess = createMiddleware(\r\n  RefreshAction.SUCCESS,\r\n  ({ getState, dispatch, next, action }) => {\r\n    // first, we calculate the expiration date before saving it to localStorage\r\n    // we subtract 1 minute to take into consideration API response time\r\n    action.response.expiresAt = moment()\r\n      .add(action.response.expires_in, 'ms')\r\n      .subtract(1, 'm')\r\n      .valueOf()\r\n\r\n    notifyTokenChanged(action.response)\r\n\r\n    // we send the response because `attemptRefresh` will re-run the api call, and need to update\r\n    // the access token.\r\n    if (!isNil(action.data.props.then)) {\r\n      action.data.props.then(getState(), true, action.response)\r\n    }\r\n  }\r\n)\r\n\r\n//\r\n// middleware that notify `attemptRefresh` that the refresh action failed.\r\n// It will redirect to the login page\r\n//\r\nconst refreshMiddlewareFailure = createMiddleware(\r\n  RefreshAction.FAILURE,\r\n  ({ getState, dispatch, next, action }) => {\r\n    // refresh token request has failed, clean everything and redirect to login\r\n    if (\r\n      !get(action, 'error.response.ok', false) &&\r\n      get(action, 'error.response.status', 400) === 400\r\n    ) {\r\n      // clean auth store\r\n      dispatch(cleanAuthData())\r\n      // refresh has failed and store is cleaned, we force redirect to login\r\n      if (isWebCustomer()) {\r\n        return dispatch(\r\n          redirectTo(getRoute('LOGIN'), null, { redirectTo: window.location.toString() })\r\n        )\r\n      } else {\r\n        return dispatch(redirectTo(getRoute('LOGIN')))\r\n      }\r\n    } else if (!isNil(get(action, 'data.props.then', null))) {\r\n      action.data.props.then(getState(), false)\r\n    }\r\n  }\r\n)\r\n\r\nconst logoutMiddleware = createMiddleware(LOGOUT_ACTION, () => {\r\n  removeAccessToken()\r\n  removeUserLight()\r\n  removeIncognitoCookie()\r\n})\r\n\r\nconst saveRawAccessTokenMiddleware = createMiddleware(\r\n  SAVE_RAW_ACCESS_TOKEN_ACTION,\r\n  ({ action, next }) => {\r\n    notifyTokenChanged(action.data)\r\n\r\n    return next(action)\r\n  }\r\n)\r\n\r\nconst getAppConfigSuccessMiddleware = createMiddleware(GetAppConfigAction.SUCCESS, ({ action }) => {\r\n  const settings = action.response.settings\r\n\r\n  if (\r\n    settings &&\r\n    settings.authentication &&\r\n    settings.authentication.oauth2 &&\r\n    settings.authentication.oauth2.clientId\r\n  ) {\r\n    setClientId(settings.authentication.oauth2.clientId)\r\n  }\r\n\r\n  const restaurantsGroupId = action.response.restaurantsGroupId\r\n  setRestaurantsGroupId(restaurantsGroupId)\r\n})\r\n\r\nexport const authMiddlewares = [\r\n  getAppConfigSuccessMiddleware,\r\n  authMiddleware,\r\n  logoutMiddleware,\r\n  refreshMiddlewareSuccess,\r\n  refreshMiddlewareFailure,\r\n  ...refreshTokenMiddlewares,\r\n  saveRawAccessTokenMiddleware,\r\n]\r\n","import { LOCATION_CHANGE } from 'pmt-modules/routing'\r\n\r\nimport Immutable from 'immutable'\r\n\r\nimport { removeAccessToken } from './utils'\r\n\r\nimport {\r\n  AuthUserAction,\r\n  CLEAN_AUTH_DATA,\r\n  LOGOUT_ACTION,\r\n  SAVE_RAW_ACCESS_TOKEN_ACTION,\r\n} from './actions'\r\n\r\nimport { RefreshAction, RefreshTokenFlowAction } from './refreshToken/actions'\r\n\r\nexport * from './utils'\r\nexport * from './constants'\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\n/**\r\n * Only actions results are store in state\r\n * Auth data is stored in current oauth clientId cookie\r\n */\r\nconst getDefaultState = () =>\r\n  Immutable.fromJS({\r\n    isFetching: false,\r\n    error: null,\r\n\r\n    // for Refresh.\r\n    refreshSucceded: false,\r\n  })\r\n\r\nexport const authReducer = (state = getDefaultState(), action) => {\r\n  switch (action.type) {\r\n    case LOCATION_CHANGE:\r\n      return state.merge({\r\n        error: null,\r\n      })\r\n\r\n    case AuthUserAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        error: null,\r\n        isRefresh: false,\r\n      })\r\n\r\n    case AuthUserAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        refreshSucceded: true,\r\n        error: null,\r\n      })\r\n\r\n    case AuthUserAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n\r\n    //\r\n    // refresh\r\n    //\r\n\r\n    case RefreshAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        refreshSucceded: null,\r\n        error: null,\r\n\r\n        // isRefreshing is set to true while we take the new token, and while we re-run the pending\r\n        // actions\r\n        // so we set it to false only in case of failure, since after the RefreshAction.SUCCESS\r\n        // will be followed by the re-run of the pending actions.\r\n        isRefreshing: true,\r\n      })\r\n\r\n    case RefreshAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        error: action.error,\r\n        refreshSucceded: false,\r\n        isRefreshing: false,\r\n      })\r\n\r\n    case RefreshAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        refreshSucceded: true,\r\n        error: null,\r\n      })\r\n\r\n    case RefreshTokenFlowAction.DONE:\r\n      return state.merge({\r\n        isRefreshing: false,\r\n      })\r\n\r\n    case LOGOUT_ACTION:\r\n      return state.merge({\r\n        isFetching: false,\r\n        refreshSucceded: false,\r\n        error: null,\r\n      })\r\n\r\n    /**\r\n     * Custom action to save raw access token passed as url param\r\n     */\r\n    case SAVE_RAW_ACCESS_TOKEN_ACTION:\r\n      return state.merge({\r\n        isFetching: false,\r\n        refreshSucceded: false,\r\n        error: null,\r\n      })\r\n\r\n    /**\r\n     * Clean auth store\r\n     * remove auth data from storage and return default state\r\n     */\r\n    case CLEAN_AUTH_DATA:\r\n      removeAccessToken()\r\n      return getDefaultState()\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { UnauthorizedAction } from '../actions'\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { redirectTo, getRoute, getConfigForRoute } from 'pmt-modules/routing'\r\nimport { getUserLightCookie } from 'pmt-modules/auth/utils'\r\nimport { getAppConfig } from 'pmt-modules/appConfig/selectors'\r\nimport { AuthMode } from 'pmt-modules/auth'\r\n\r\n/**\r\n * Handle 401\r\n */\r\nexport const unauthorizedMiddleware = createMiddleware(\r\n  UnauthorizedAction,\r\n  ({ next, dispatch, getState }) => {\r\n    // we redirect to the current page after the login is complete\r\n    const currentUrl = window.location.toString()\r\n\r\n    // if we are not already on login page\r\n    if (window.location.pathname !== '/login') {\r\n      const state = getState()\r\n      const authenticationMode = getAppConfig(state).authentication.mode\r\n      if (authenticationMode === AuthMode.NORMAL) {\r\n        if (getUserLightCookie()) {\r\n          // user is light, but should be normal => force Registering\r\n\r\n          // if their is a specific page for Registering, use it\r\n          if (getConfigForRoute('REGISTER')) {\r\n            next(redirectTo(getRoute('REGISTER'), null, { redirectTo: currentUrl }))\r\n          } else {\r\n            // use the register form in the login-or-register page\r\n            next(redirectTo(getRoute('LOGIN'), null, { redirectTo: currentUrl }))\r\n          }\r\n        } else {\r\n          next(redirectTo(getRoute('LOGIN'), null, { redirectTo: currentUrl }))\r\n        }\r\n      } else if (authenticationMode === AuthMode.LIGHT) {\r\n        // receive a 401 for example when in test mode and not logged in to acces a testMode restaurant\r\n        dispatch(redirectTo(getRoute('LOGIN'), null, { redirectTo: currentUrl }))\r\n      }\r\n    }\r\n  }\r\n)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getAuthProData = state => state.entities.authPro\r\n\r\nexport const getAuthProError = createSelector([getAuthProData], authProData => {\r\n  const error = authProData.get('error')\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n  return error.toJS()\r\n})\r\n\r\nexport const isFetchingAuthPro = createSelector(\r\n  [getAuthProData],\r\n  authProData => {\r\n    return authProData.get('isFetching') || false\r\n  }\r\n)\r\n\r\nexport const haveAuthProCredentials = createSelector(\r\n  [getAuthProData],\r\n  authProData => {\r\n    return authProData.get('auth') !== null\r\n  }\r\n)\r\n\r\nexport const isLoggedIn = createSelector([getAuthProData], authProData => {\r\n  const auth = authProData.get('auth')\r\n\r\n  return auth !== null\r\n})\r\n\r\nexport const getBasicToken = createSelector([getAuthProData], authProData => {\r\n  const authProState = authProData.get('auth')\r\n\r\n  if (isNil(authProState)) {\r\n    return null\r\n  }\r\n\r\n  return authProState\r\n})\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getAuthRestaurantData = state => state.entities.authRestaurant\r\n\r\nexport const getAuthRestaurantError = createSelector(\r\n  [getAuthRestaurantData],\r\n  authRestaurantData => {\r\n    const error = authRestaurantData.get('error')\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n    return error.toJS()\r\n  }\r\n)\r\n\r\nexport const isFetchingAuthRestaurant = createSelector(\r\n  [getAuthRestaurantData],\r\n  authRestaurantData => {\r\n    return authRestaurantData.get('isFetching') || false\r\n  }\r\n)\r\n\r\nexport const haveAuthRestaurantCredentials = createSelector(\r\n  [getAuthRestaurantData],\r\n  authRestaurantData => {\r\n    return authRestaurantData.get('auth') !== null\r\n  }\r\n)\r\n\r\nexport const isLoggedIn = createSelector([getAuthRestaurantData], authRestaurantData => {\r\n  const auth = authRestaurantData.get('auth')\r\n\r\n  return auth !== null\r\n})\r\n\r\nexport const getBasicToken = createSelector([getAuthRestaurantData], authRestaurantData => {\r\n  if (!authRestaurantData) {\r\n    return null\r\n  }\r\n\r\n  const authRestaurantState = authRestaurantData.get('auth')\r\n\r\n  if (isNil(authRestaurantState)) {\r\n    return null\r\n  }\r\n\r\n  return authRestaurantState\r\n})\r\n\r\nexport const getApiConsumer = createSelector([getAuthRestaurantData], authRestaurantData => {\r\n  if (isNil(authRestaurantData)) {\r\n    return null\r\n  }\r\n\r\n  const apiConsumer = authRestaurantData.get('apiConsumer')\r\n\r\n  if (isNil(apiConsumer)) {\r\n    return null\r\n  }\r\n\r\n  return apiConsumer\r\n})\r\n\r\nexport const getRestaurantId = createSelector([getAuthRestaurantData], authRestaurantData => {\r\n  if (isNil(authRestaurantData)) {\r\n    return null\r\n  }\r\n\r\n  const restaurantId = authRestaurantData.get('restaurantId')\r\n\r\n  if (isNil(restaurantId)) {\r\n    return null\r\n  }\r\n\r\n  return restaurantId\r\n})\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\nimport { API_CALL, REQUEST, TYPES } from 'pmt-modules/api/constants'\r\n\r\nimport {\r\n  RefreshAction,\r\n  refreshAction,\r\n  retryApiCallAction,\r\n  refreshActionDone,\r\n} from './actions'\r\n\r\n// refreshing action status\r\nlet _isRefreshingToken = false\r\n\r\n// stacked actions list to unstack after refreshing action\r\nlet _actions = []\r\n\r\nexport const clearAttemptRefresh = () => {\r\n  _isRefreshingToken = false\r\n  _actions = []\r\n}\r\n\r\n// if given action is refresh call action\r\nconst defaultIsRefreshCall = action =>\r\n  action[API_CALL][TYPES][0] === RefreshAction.REQUEST\r\n\r\nconst requestNewAccessToken = ({\r\n  dispatch,\r\n  next,\r\n  refreshAction,\r\n  refreshToken,\r\n  oauthClient,\r\n}) => {\r\n  // we are now refreshing, prevent any other refresh call\r\n  _isRefreshingToken = true\r\n\r\n  dispatch(\r\n    refreshAction(refreshToken, oauthClient, {\r\n      //\r\n      // We trick here to pass a callback to be called when the refresh token call has finished\r\n      //\r\n      then: (state, success, response) => {\r\n        // Refresh was successful\r\n        // call postRefreshToken\r\n        if (success) {\r\n          postRefreshToken({\r\n            error: false,\r\n            response,\r\n            actions: _actions,\r\n            dispatch,\r\n          })\r\n        } else {\r\n          postRefreshToken({\r\n            error: true,\r\n            response: null,\r\n            actions: _actions,\r\n            dispatch,\r\n          })\r\n        }\r\n      },\r\n    })\r\n  )\r\n}\r\n\r\n/**\r\n * When the refresh attempt is done, we fire all the actions that have been queued until\r\n * its completion. If, the refresh promise was unsuccessful we logout the user.\r\n */\r\nconst postRefreshToken = ({ response, error, actions, dispatch }) => {\r\n  if (!error) {\r\n    // no error, run all pending actions\r\n    actions.forEach(action => {\r\n      // We need to update the access token on the request\r\n      if (!isEmpty(action[API_CALL][REQUEST].headers.authorization)) {\r\n        action[API_CALL][REQUEST].headers.authorization = `Bearer ${\r\n          response.access_token\r\n        }`\r\n        // update the request with response for requestConfigurationMiddleware to use\r\n        // the most recent response and get the correct authData.expiresAt value\r\n        action[API_CALL][REQUEST].authData = response\r\n      }\r\n      dispatch(retryApiCallAction(action))\r\n    })\r\n  } else {\r\n    // TODO: dispatch error for every actions\r\n    // + do same for attempt refresh\r\n    actions.forEach(action => {\r\n      dispatch(error)\r\n    })\r\n  }\r\n\r\n  clearAttemptRefresh()\r\n  dispatch(refreshActionDone())\r\n}\r\n\r\nexport const queueActionForRefreshToken = ({\r\n  action,\r\n  dispatch,\r\n  next,\r\n  oauthClient,\r\n  refreshToken,\r\n}) => {\r\n  // current action is not a refresh call action, we stack it\r\n  if (!defaultIsRefreshCall(action)) {\r\n    _actions.push(action)\r\n  }\r\n\r\n  // we are not arleady refreshing, do it\r\n  if (!_isRefreshingToken) {\r\n    requestNewAccessToken({\r\n      dispatch,\r\n      next,\r\n      oauthClient,\r\n      refreshAction,\r\n      refreshToken,\r\n    })\r\n  }\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport { API_CALL, REQUEST, TYPES } from 'pmt-modules/api/constants'\r\nimport { getOauthClient } from 'pmt-modules/appConfig/selectors'\r\nimport { isWebCustomer, isEmbeddedFront } from 'pmt-modules/environment'\r\nimport { redirectTo, redirectToExternal, getRoute } from 'pmt-modules/routing'\r\n\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\nimport { CALLBACK_EVENTS, getQueryParam, getCallbackUri, removeUrlParameter } from 'pmt-utils/url'\r\n\r\nimport {\r\n  RefreshAction,\r\n  retryApiCallAction,\r\n  refreshAction as defaultRefreshActionCreator,\r\n  refreshActionDone,\r\n} from './actions'\r\nimport { getRefreshToken } from '../selectors'\r\nimport { cleanAuthData } from '../actions'\r\n\r\n//\r\n// Inspired by https://github.com/esbenp/redux-refresh-token\r\n//\r\n// see api.js\r\n// Called when a request fail.\r\n// if we have a 401, we try to refresh the token:\r\n// - if fail, the `unauthorized` action is called (see on api.js).\r\n// - if success, we update the token data and re-run the api call.\r\n//\r\n// Note that we handle 401 AFTER the call failed, we should also try to refresh the token before\r\n// it expires.\r\n//\r\n\r\nlet _refreshPromise = null\r\nlet _actions = []\r\n\r\nexport const clearAttemptRefresh = () => {\r\n  _refreshPromise = null\r\n  _actions = []\r\n}\r\n\r\nconst defaultIsRefreshCall = action => action[API_CALL][TYPES][0] === RefreshAction.REQUEST\r\n\r\nconst requestNewAccessToken = ({\r\n  dispatch,\r\n  next,\r\n  refreshActionCreator,\r\n  refreshToken,\r\n  oauthClient,\r\n  callback,\r\n}) => {\r\n  return new Promise((resolve, reject) => {\r\n    dispatch(\r\n      refreshActionCreator(refreshToken, oauthClient, {\r\n        //\r\n        // We trick here to pass a callback to be called when the refresh token call has finished\r\n        //\r\n        then: (state, success, response) => {\r\n          // Refresh was successful\r\n          let refreshPromise = _refreshPromise\r\n\r\n          // Refresh was successful\r\n          // call postRefreshToken\r\n          if (success) {\r\n            resolve({\r\n              refreshPromise,\r\n              error: false,\r\n              response,\r\n              actions: _actions,\r\n              dispatch,\r\n            })\r\n          } else {\r\n            resolve({\r\n              refreshPromise,\r\n              error: true,\r\n              response: null,\r\n              actions: _actions,\r\n              dispatch,\r\n            })\r\n          }\r\n        },\r\n      })\r\n    )\r\n  })\r\n}\r\n\r\nconst postRefreshToken = requestNewAccessTokenResponse => {\r\n  // When the refresh attempt is done, we fire all the actions that have been queued until\r\n  // its completion. If, the refresh promise was unsuccessful we logout the user.\r\n\r\n  const { refreshPromise, response, error, actions, dispatch } = requestNewAccessTokenResponse\r\n\r\n  if (!error) {\r\n    // no error, run all pending actions\r\n    actions.forEach(action => {\r\n      // We need to update the access token on the request\r\n      if (!isEmpty(action[API_CALL][REQUEST].headers.authorization)) {\r\n        action[API_CALL][REQUEST].headers.authorization = `Bearer ${response.access_token}`\r\n      }\r\n      dispatch(retryApiCallAction(action))\r\n    })\r\n  } else {\r\n    // error, dispatch the error that occurred when refreshing the token\r\n    if (!isNull(refreshPromise)) {\r\n      dispatch(refreshPromise.failureAction(error))\r\n    }\r\n  }\r\n\r\n  clearAttemptRefresh()\r\n  dispatch(refreshActionDone())\r\n}\r\n\r\nconst attemptRefresh = settings => {\r\n  const {\r\n    action,\r\n    failureAction, // action to use when the refresh token api call failed\r\n    isRefreshCall = defaultIsRefreshCall,\r\n    next,\r\n    refreshActionCreator = defaultRefreshActionCreator,\r\n    getState,\r\n    dispatch,\r\n    token,\r\n  } = settings\r\n\r\n  //\r\n  // Take the ApiError of the failed request\r\n  //\r\n  return apiError => {\r\n    const response = apiError.response\r\n    // keep both writings for retro compatibility\r\n    let accessToken = null\r\n    let callbackUri = null\r\n    if (isEmbeddedFront()) {\r\n      accessToken = getQueryParam('accessToken') || getQueryParam('access_token')\r\n      callbackUri = getQueryParam('callbackUri') || getQueryParam('callback_uri')\r\n    }\r\n\r\n    if (!response) {\r\n      return dispatch(failureAction(apiError))\r\n    }\r\n\r\n    // The API call returned unauthorized user (access token is expired)\r\n\r\n    // specific 401 for test mode handling, do not want to refresh a token, but redirect to login page\r\n    // 401 = we are not testing user OR we are not logged in, redirect to login page\r\n    if (\r\n      !response.ok &&\r\n      response.status === 401 &&\r\n      apiError.errorCode === 'TEST_MODE_UNAUTHORIZED'\r\n    ) {\r\n      dispatch(\r\n        redirectTo(getRoute('LOGIN'), null, {\r\n          redirectTo: window.location.toString(),\r\n          forTestMode: true,\r\n        })\r\n      )\r\n    } else if (\r\n      // TODO: && error contains \"The access token provided has expired.\" For now the API only gives\r\n      // message: \"Auth failed\". We should modify the API first.\r\n      !response.ok &&\r\n      response.status === 401 &&\r\n      // The refresh endpoint might return 401, so we skip the check here\r\n      // otherwise we get stuck in an infinite loop\r\n      !isRefreshCall(action) &&\r\n      // We should not run the refresh flow when no token was given to begin with\r\n      // (for instance Forgot Password, Login etc.)\r\n      typeof token === 'string' &&\r\n      token.length > 0 &&\r\n      // if callbackUri is not null, we don't want to attempt refresh on our own\r\n      callbackUri === null\r\n    ) {\r\n      const refreshToken = getRefreshToken(getState())\r\n      const oauthClient = getOauthClient(getState())\r\n\r\n      if (!refreshToken) {\r\n        // no refresh token..\r\n        dispatch(failureAction(apiError))\r\n      } else {\r\n        // We check if there is already dispatched a call to refresh the token,\r\n        // if so we can simply queue the call until the refresh request completes\r\n        _actions.push(action)\r\n\r\n        // no refresh token action ongoing, we create it\r\n        if (isNull(_refreshPromise)) {\r\n          _refreshPromise = requestNewAccessToken({\r\n            dispatch,\r\n            next,\r\n            refreshActionCreator,\r\n            refreshToken,\r\n            oauthClient,\r\n          }).then(postRefreshToken)\r\n\r\n          _refreshPromise.id = generateUUID()\r\n          _refreshPromise.failureAction = failureAction\r\n        }\r\n\r\n        return _refreshPromise\r\n      }\r\n      // we cannot refresh token on our own, the user has to login or let the callback uri handle the refresh\r\n    } else if (!response.ok && (response.status === 401 || response.status === 403)) {\r\n      // on web customer, when a callback has been given, we let the author made the refresh\r\n      if (isWebCustomer() && callbackUri) {\r\n        redirectToExternal(getCallbackUri(callbackUri, CALLBACK_EVENTS.INVALID_ACCESS_TOKEN))\r\n        return\r\n      }\r\n\r\n      // otherwise we remove access token provided from url and redirect user to login page\r\n      if (accessToken !== null || callbackUri !== null) {\r\n        const location = document.location.pathname + document.location.search\r\n        let redirectToParam = removeUrlParameter(location, 'accessToken')\r\n        redirectToParam = removeUrlParameter(location, 'access_token')\r\n\r\n        dispatch(cleanAuthData())\r\n        if (isWebCustomer()) {\r\n          dispatch(\r\n            redirectTo(getRoute('LOGIN'), null, {\r\n              redirectTo: redirectToParam || window.location.toString(),\r\n            })\r\n          )\r\n        } else {\r\n          dispatch(redirectTo(getRoute('LOGIN'), null, { redirectTo: redirectToParam }))\r\n        }\r\n      } else {\r\n        dispatch(failureAction(apiError))\r\n      }\r\n    }\r\n\r\n    // refreshMiddlewareFailure\r\n  }\r\n}\r\n\r\nexport default attemptRefresh\r\n","import isNil from 'lodash/isNil'\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport { hasTokenExpired, willTokenExpireSoon } from 'pmt-modules/auth/utils'\r\n\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { fromMs } from 'pmt-utils/date'\r\nimport { isRefreshingOauthToken, getAuth } from 'pmt-modules/auth/selectors'\r\nimport { RefreshAction, refreshAction } from 'pmt-modules/auth/refreshToken/actions'\r\nimport { queueActionForRefreshToken } from 'pmt-modules/auth/refreshToken/preAttemptRefresh'\r\nimport { getOauthClient } from 'pmt-modules/appConfig/selectors'\r\nimport attemptRefresh from 'pmt-modules/auth/refreshToken/attemptRefresh'\r\nimport { hasAuthEnabled } from 'pmt-modules/environment'\r\nimport { API_CALL, TYPES } from '../constants'\r\n\r\nexport { getAuthorization as getOauthBearerToken } from 'pmt-modules/auth/utils'\r\n\r\nexport const handleAccessToken = ({ request, action, dispatch, next, getState }) => {\r\n  // check if access token has expired or is going to expire soon\r\n  // handleExpiredToken will throw an exception when token as expired that we catch here\r\n  // in order to stop propagation but will continue otherwise\r\n  if (\r\n    hasAuthEnabled() &&\r\n    (request.headers.authorization !== null || action[API_CALL][TYPES][0] === RefreshAction.REQUEST)\r\n  ) {\r\n    const authData = request.authData || getAuth()\r\n\r\n    const shouldStopPropagation = handleExpiredToken({\r\n      request,\r\n      action,\r\n      getState,\r\n      dispatch,\r\n      next,\r\n      authData,\r\n    })\r\n    if (shouldStopPropagation) {\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n\r\n    //\r\n    // add oauth refresh token middleware\r\n    //\r\n    request.attemptRefresh = attemptRefresh\r\n    request.attemptRefreshOptions = {\r\n      // This is the current access token. If the user is not authenticated yet\r\n      // this can be null or undefined\r\n      token: !isNil(authData) ? authData.refresh_token : null,\r\n    }\r\n  } else {\r\n    request.attemptRefresh = null\r\n  }\r\n}\r\n\r\n/**\r\n * check if access token has expired or is going to expire soon\r\n * refresh it if needed and then process to\r\n *\r\n * @returns {bool} wether it should stop propagation or not\r\n */\r\nconst handleExpiredToken = ({ request, action, getState, dispatch, next, authData }) => {\r\n  const oauthClient = getOauthClient(getState())\r\n\r\n  if (!isNull(authData)) {\r\n    const refreshToken = authData.refresh_token\r\n    const expiration = fromMs(authData.expiresAt)\r\n\r\n    // if current action is not a refresh action,\r\n    // nor a getAppConfig action (meaning we're fetching oauth clientId/clientSecret)\r\n    if (action[API_CALL][TYPES][0] !== RefreshAction.REQUEST) {\r\n      if (hasTokenExpired(expiration)) {\r\n        // if token has already expired or is going to expire within 2 minutes\r\n        // we stack pending actions and call refresh token\r\n        // stacked actions will be unstacked after successful resfresh\r\n        queueActionForRefreshToken({\r\n          action,\r\n          dispatch,\r\n          next,\r\n          oauthClient,\r\n          refreshToken,\r\n        })\r\n\r\n        // stop middleware propgation for it not to next any other action\r\n        return true\r\n      } else if (willTokenExpireSoon(expiration)) {\r\n        // token is going to expire soon, we still have time to dispatch a refresh token action\r\n        // in the background in order to optimize answers time\r\n        // thus, we dispatch a refreshAction without any callback needed\r\n        if (!isRefreshingOauthToken(getState())) {\r\n          dispatch(\r\n            refreshAction(refreshToken, oauthClient, {\r\n              then: null,\r\n            })\r\n          )\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return false\r\n}\r\n","import merge from 'lodash/merge'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { getFrontSessionId, FRONT_SESSION_ID_HEADER } from 'pmt-modules/frontSession'\r\nimport { getApiUrl, getApiConsumer } from 'pmt-modules/environment'\r\n\r\nimport { getAppConfig } from 'pmt-modules/appConfig/selectors'\r\nimport { createIncognitoBasic, createUserLightBasic } from 'pmt-modules/api/utils'\r\nimport { AuthMode } from 'pmt-modules/auth'\r\nimport { getUserLightCookie, getIncognitoCookie } from 'pmt-modules/auth/utils'\r\nimport { isActionApiCall } from '../utils'\r\nimport { API_CALL, REQUEST } from '../constants'\r\n\r\n//could be dynamically imported if we want to reduce the bundle size, but it's not that big\r\nimport { getBasicToken } from 'pmt-modules/authPro/selectors'\r\n//could be dynamically imported if we want to reduce the bundle size, but it's not that big\r\nimport { getBasicToken as getRestaurantBasicToken } from 'pmt-modules/authRestaurant/selectors'\r\nimport { getOauthBearerToken, handleAccessToken } from './oauthUtils'\r\n\r\nconst getFinalApiUrl = (requestUrl = null) => {\r\n  if (!isEmpty(requestUrl)) {\r\n    return requestUrl\r\n  }\r\n\r\n  return getApiUrl()\r\n}\r\n\r\nconst getAuthorization = (state) => {\r\n  if (process.env.FEATURE_BO) {\r\n    return getBasicToken(state)\r\n  } else if (process.env.FEATURE_KIOSK) {\r\n    return getRestaurantBasicToken(state)\r\n  } else {\r\n    const authenticationSettings = getAppConfig(state)?.authentication\r\n    if (authenticationSettings && !isNil(authenticationSettings.mode)) {\r\n      return getAuthorizationFromModeAndCookies(authenticationSettings)\r\n    } else {\r\n      // default behaviour\r\n      return getOauthToken()\r\n    }\r\n  }\r\n}\r\n\r\nconst getOauthToken = () => {\r\n  const accessToken = getOauthBearerToken()\r\n  if (accessToken) {\r\n    return accessToken\r\n  }\r\n  return null\r\n}\r\n\r\nconst getAuthorizationFromModeAndCookies = (authenticationSettings) => {\r\n  if (authenticationSettings.mode === AuthMode.NORMAL) {\r\n    if (getOauthToken() != null) {\r\n      return getOauthToken()\r\n    } else if (authenticationSettings.allowIncognito && getIncognitoCookie()) {\r\n      return createIncognitoBasic(getIncognitoCookie())\r\n    }\r\n  } else if (authenticationSettings.mode === AuthMode.LIGHT) {\r\n    if (getOauthToken() != null) {\r\n      return getOauthToken()\r\n    } else if (getUserLightCookie() != null) {\r\n      return createUserLightBasic(getUserLightCookie().email)\r\n    } else if (authenticationSettings.allowIncognito && getIncognitoCookie()) {\r\n      return createIncognitoBasic(getIncognitoCookie())\r\n    }\r\n  } else if (authenticationSettings.mode === AuthMode.INCOGNITO_ONLY) {\r\n    // allow authenticated TEST user even on incognito_only apiConsumer\r\n    // so a user can use the login page to authenticate as TEST user, and access test restaurants\r\n    if (getOauthToken() != null) {\r\n      return getOauthToken()\r\n    } else if (getIncognitoCookie() != null) {\r\n      return createIncognitoBasic(getIncognitoCookie())\r\n    }\r\n  }\r\n  return null\r\n}\r\n\r\n/**\r\n * middleware to update the  api calls data\r\n */\r\nexport const requestConfigurationMiddleware = createMiddleware(\r\n  isActionApiCall,\r\n  ({ getState, dispatch, next, action }) => {\r\n    const apiCall = action[API_CALL]\r\n\r\n    const state = getState()\r\n    const request = apiCall[REQUEST]\r\n\r\n    //\r\n    // update headers\r\n    // Note: nil headers will be removed by the ApiManager.\r\n    //\r\n\r\n    const headers = {\r\n      'api-consumer': getApiConsumer(),\r\n      [FRONT_SESSION_ID_HEADER]: getFrontSessionId(),\r\n    }\r\n\r\n    const authorization = getAuthorization(state)\r\n    if (\r\n      authorization !== null &&\r\n      // verify we don't override config, handle both writing\r\n      isUndefined(headers.authorization) &&\r\n      isUndefined(headers.Authorization)\r\n    ) {\r\n      headers.authorization = authorization\r\n    }\r\n\r\n    // add param `withoutAuth` to force authorization to be null\r\n    if (request.withoutAuth === true) {\r\n      // handle both writing\r\n      headers.authorization = null\r\n      headers.Authorization = null\r\n    }\r\n\r\n    // merge our default headers, priority given to the request's headers.\r\n    request.headers = merge(headers, request.headers)\r\n\r\n    //\r\n    // set url\r\n    //\r\n    request.url = getFinalApiUrl(request.url)\r\n\r\n    if (!process.env.FEATURE_BO && !process.env.FEATURE_KIOSK) {\r\n      handleAccessToken({ request, action, dispatch, next, getState })\r\n    }\r\n\r\n    //\r\n    // set data\r\n    //\r\n\r\n    action[API_CALL][REQUEST] = request\r\n\r\n    return next(action)\r\n  }\r\n)\r\n","import { createMiddleware } from '../redux'\r\n\r\nimport { CHOOSE_LOCALE } from './actions'\r\n\r\nimport { saveLocaleToStorage } from './storage'\r\n\r\nexport const chooseLocaleMiddleware = createMiddleware(CHOOSE_LOCALE, ({ action }) => {\r\n  const { locale } = action\r\n\r\n  // save chosen language\r\n  saveLocaleToStorage(locale)\r\n\r\n  // retrieve messages\r\n  // dispatch(retrieveMessages(locale))\r\n\r\n  // for now reload the entire page since it is too difficult to update the whole app.\r\n  // We would have to:\r\n  // - reload top view to use the retrieved messages\r\n  // - make sure there is no local state that depends of the old/new locale\r\n  window.location.reload()\r\n})\r\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t(e.reduxLogger=e.reduxLogger||{})}(this,function(e){\"use strict\";function t(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function r(e,t){Object.defineProperty(this,\"kind\",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,\"path\",{value:t,enumerable:!0})}function n(e,t,r){n.super_.call(this,\"E\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0}),Object.defineProperty(this,\"rhs\",{value:r,enumerable:!0})}function o(e,t){o.super_.call(this,\"N\",e),Object.defineProperty(this,\"rhs\",{value:t,enumerable:!0})}function i(e,t){i.super_.call(this,\"D\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0})}function a(e,t,r){a.super_.call(this,\"A\",e),Object.defineProperty(this,\"index\",{value:t,enumerable:!0}),Object.defineProperty(this,\"item\",{value:r,enumerable:!0})}function f(e,t,r){var n=e.slice((r||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,n),e}function u(e){var t=\"undefined\"==typeof e?\"undefined\":N(e);return\"object\"!==t?t:e===Math?\"math\":null===e?\"null\":Array.isArray(e)?\"array\":\"[object Date]\"===Object.prototype.toString.call(e)?\"date\":\"function\"==typeof e.toString&&/^\\/.*\\//.test(e.toString())?\"regexp\":\"object\"}function l(e,t,r,c,s,d,p){s=s||[],p=p||[];var g=s.slice(0);if(\"undefined\"!=typeof d){if(c){if(\"function\"==typeof c&&c(g,d))return;if(\"object\"===(\"undefined\"==typeof c?\"undefined\":N(c))){if(c.prefilter&&c.prefilter(g,d))return;if(c.normalize){var h=c.normalize(g,d,e,t);h&&(e=h[0],t=h[1])}}}g.push(d)}\"regexp\"===u(e)&&\"regexp\"===u(t)&&(e=e.toString(),t=t.toString());var y=\"undefined\"==typeof e?\"undefined\":N(e),v=\"undefined\"==typeof t?\"undefined\":N(t),b=\"undefined\"!==y||p&&p[p.length-1].lhs&&p[p.length-1].lhs.hasOwnProperty(d),m=\"undefined\"!==v||p&&p[p.length-1].rhs&&p[p.length-1].rhs.hasOwnProperty(d);if(!b&&m)r(new o(g,t));else if(!m&&b)r(new i(g,e));else if(u(e)!==u(t))r(new n(g,e,t));else if(\"date\"===u(e)&&e-t!==0)r(new n(g,e,t));else if(\"object\"===y&&null!==e&&null!==t)if(p.filter(function(t){return t.lhs===e}).length)e!==t&&r(new n(g,e,t));else{if(p.push({lhs:e,rhs:t}),Array.isArray(e)){var w;e.length;for(w=0;w<e.length;w++)w>=t.length?r(new a(g,w,new i(void 0,e[w]))):l(e[w],t[w],r,c,g,w,p);for(;w<t.length;)r(new a(g,w,new o(void 0,t[w++])))}else{var x=Object.keys(e),S=Object.keys(t);x.forEach(function(n,o){var i=S.indexOf(n);i>=0?(l(e[n],t[n],r,c,g,n,p),S=f(S,i)):l(e[n],void 0,r,c,g,n,p)}),S.forEach(function(e){l(void 0,t[e],r,c,g,e,p)})}p.length=p.length-1}else e!==t&&(\"number\"===y&&isNaN(e)&&isNaN(t)||r(new n(g,e,t)))}function c(e,t,r,n){return n=n||[],l(e,t,function(e){e&&n.push(e)},r),n.length?n:void 0}function s(e,t,r){if(r.path&&r.path.length){var n,o=e[t],i=r.path.length-1;for(n=0;n<i;n++)o=o[r.path[n]];switch(r.kind){case\"A\":s(o[r.path[n]],r.index,r.item);break;case\"D\":delete o[r.path[n]];break;case\"E\":case\"N\":o[r.path[n]]=r.rhs}}else switch(r.kind){case\"A\":s(e[t],r.index,r.item);break;case\"D\":e=f(e,t);break;case\"E\":case\"N\":e[t]=r.rhs}return e}function d(e,t,r){if(e&&t&&r&&r.kind){for(var n=e,o=-1,i=r.path?r.path.length-1:0;++o<i;)\"undefined\"==typeof n[r.path[o]]&&(n[r.path[o]]=\"number\"==typeof r.path[o]?[]:{}),n=n[r.path[o]];switch(r.kind){case\"A\":s(r.path?n[r.path[o]]:n,r.index,r.item);break;case\"D\":delete n[r.path[o]];break;case\"E\":case\"N\":n[r.path[o]]=r.rhs}}}function p(e,t,r){if(r.path&&r.path.length){var n,o=e[t],i=r.path.length-1;for(n=0;n<i;n++)o=o[r.path[n]];switch(r.kind){case\"A\":p(o[r.path[n]],r.index,r.item);break;case\"D\":o[r.path[n]]=r.lhs;break;case\"E\":o[r.path[n]]=r.lhs;break;case\"N\":delete o[r.path[n]]}}else switch(r.kind){case\"A\":p(e[t],r.index,r.item);break;case\"D\":e[t]=r.lhs;break;case\"E\":e[t]=r.lhs;break;case\"N\":e=f(e,t)}return e}function g(e,t,r){if(e&&t&&r&&r.kind){var n,o,i=e;for(o=r.path.length-1,n=0;n<o;n++)\"undefined\"==typeof i[r.path[n]]&&(i[r.path[n]]={}),i=i[r.path[n]];switch(r.kind){case\"A\":p(i[r.path[n]],r.index,r.item);break;case\"D\":i[r.path[n]]=r.lhs;break;case\"E\":i[r.path[n]]=r.lhs;break;case\"N\":delete i[r.path[n]]}}}function h(e,t,r){if(e&&t){var n=function(n){r&&!r(e,t,n)||d(e,t,n)};l(e,t,n)}}function y(e){return\"color: \"+F[e].color+\"; font-weight: bold\"}function v(e){var t=e.kind,r=e.path,n=e.lhs,o=e.rhs,i=e.index,a=e.item;switch(t){case\"E\":return[r.join(\".\"),n,\"→\",o];case\"N\":return[r.join(\".\"),o];case\"D\":return[r.join(\".\")];case\"A\":return[r.join(\".\")+\"[\"+i+\"]\",a];default:return[]}}function b(e,t,r,n){var o=c(e,t);try{n?r.groupCollapsed(\"diff\"):r.group(\"diff\")}catch(e){r.log(\"diff\")}o?o.forEach(function(e){var t=e.kind,n=v(e);r.log.apply(r,[\"%c \"+F[t].text,y(t)].concat(P(n)))}):r.log(\"—— no diff ——\");try{r.groupEnd()}catch(e){r.log(\"—— diff end —— \")}}function m(e,t,r,n){switch(\"undefined\"==typeof e?\"undefined\":N(e)){case\"object\":return\"function\"==typeof e[n]?e[n].apply(e,P(r)):e[n];case\"function\":return e(t);default:return e}}function w(e){var t=e.timestamp,r=e.duration;return function(e,n,o){var i=[\"action\"];return i.push(\"%c\"+String(e.type)),t&&i.push(\"%c@ \"+n),r&&i.push(\"%c(in \"+o.toFixed(2)+\" ms)\"),i.join(\" \")}}function x(e,t){var r=t.logger,n=t.actionTransformer,o=t.titleFormatter,i=void 0===o?w(t):o,a=t.collapsed,f=t.colors,u=t.level,l=t.diff,c=\"undefined\"==typeof t.titleFormatter;e.forEach(function(o,s){var d=o.started,p=o.startedTime,g=o.action,h=o.prevState,y=o.error,v=o.took,w=o.nextState,x=e[s+1];x&&(w=x.prevState,v=x.started-d);var S=n(g),k=\"function\"==typeof a?a(function(){return w},g,o):a,j=D(p),E=f.title?\"color: \"+f.title(S)+\";\":\"\",A=[\"color: gray; font-weight: lighter;\"];A.push(E),t.timestamp&&A.push(\"color: gray; font-weight: lighter;\"),t.duration&&A.push(\"color: gray; font-weight: lighter;\");var O=i(S,j,v);try{k?f.title&&c?r.groupCollapsed.apply(r,[\"%c \"+O].concat(A)):r.groupCollapsed(O):f.title&&c?r.group.apply(r,[\"%c \"+O].concat(A)):r.group(O)}catch(e){r.log(O)}var N=m(u,S,[h],\"prevState\"),P=m(u,S,[S],\"action\"),C=m(u,S,[y,h],\"error\"),F=m(u,S,[w],\"nextState\");if(N)if(f.prevState){var L=\"color: \"+f.prevState(h)+\"; font-weight: bold\";r[N](\"%c prev state\",L,h)}else r[N](\"prev state\",h);if(P)if(f.action){var T=\"color: \"+f.action(S)+\"; font-weight: bold\";r[P](\"%c action    \",T,S)}else r[P](\"action    \",S);if(y&&C)if(f.error){var M=\"color: \"+f.error(y,h)+\"; font-weight: bold;\";r[C](\"%c error     \",M,y)}else r[C](\"error     \",y);if(F)if(f.nextState){var _=\"color: \"+f.nextState(w)+\"; font-weight: bold\";r[F](\"%c next state\",_,w)}else r[F](\"next state\",w);l&&b(h,w,r,k);try{r.groupEnd()}catch(e){r.log(\"—— log end ——\")}})}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},L,e),r=t.logger,n=t.stateTransformer,o=t.errorTransformer,i=t.predicate,a=t.logErrors,f=t.diffPredicate;if(\"undefined\"==typeof r)return function(){return function(e){return function(t){return e(t)}}};if(e.getState&&e.dispatch)return console.error(\"[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:\\n// Logger with default options\\nimport { logger } from 'redux-logger'\\nconst store = createStore(\\n  reducer,\\n  applyMiddleware(logger)\\n)\\n// Or you can create your own logger with custom options http://bit.ly/redux-logger-options\\nimport createLogger from 'redux-logger'\\nconst logger = createLogger({\\n  // ...options\\n});\\nconst store = createStore(\\n  reducer,\\n  applyMiddleware(logger)\\n)\\n\"),function(){return function(e){return function(t){return e(t)}}};var u=[];return function(e){var r=e.getState;return function(e){return function(l){if(\"function\"==typeof i&&!i(r,l))return e(l);var c={};u.push(c),c.started=O.now(),c.startedTime=new Date,c.prevState=n(r()),c.action=l;var s=void 0;if(a)try{s=e(l)}catch(e){c.error=o(e)}else s=e(l);c.took=O.now()-c.started,c.nextState=n(r());var d=t.diff&&\"function\"==typeof f?f(r,l):t.diff;if(x(u,Object.assign({},t,{diff:d})),u.length=0,c.error)throw c.error;return s}}}}var k,j,E=function(e,t){return new Array(t+1).join(e)},A=function(e,t){return E(\"0\",t-e.toString().length)+e},D=function(e){return A(e.getHours(),2)+\":\"+A(e.getMinutes(),2)+\":\"+A(e.getSeconds(),2)+\".\"+A(e.getMilliseconds(),3)},O=\"undefined\"!=typeof performance&&null!==performance&&\"function\"==typeof performance.now?performance:Date,N=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},P=function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}return Array.from(e)},C=[];k=\"object\"===(\"undefined\"==typeof global?\"undefined\":N(global))&&global?global:\"undefined\"!=typeof window?window:{},j=k.DeepDiff,j&&C.push(function(){\"undefined\"!=typeof j&&k.DeepDiff===c&&(k.DeepDiff=j,j=void 0)}),t(n,r),t(o,r),t(i,r),t(a,r),Object.defineProperties(c,{diff:{value:c,enumerable:!0},observableDiff:{value:l,enumerable:!0},applyDiff:{value:h,enumerable:!0},applyChange:{value:d,enumerable:!0},revertChange:{value:g,enumerable:!0},isConflict:{value:function(){return\"undefined\"!=typeof j},enumerable:!0},noConflict:{value:function(){return C&&(C.forEach(function(e){e()}),C=null),c},enumerable:!0}});var F={E:{color:\"#2196F3\",text:\"CHANGED:\"},N:{color:\"#4CAF50\",text:\"ADDED:\"},D:{color:\"#F44336\",text:\"DELETED:\"},A:{color:\"#2196F3\",text:\"ARRAY:\"}},L={level:\"log\",logger:console,logErrors:!0,collapsed:void 0,predicate:void 0,duration:!1,timestamp:!0,stateTransformer:function(e){return e},actionTransformer:function(e){return e},errorTransformer:function(e){return e},colors:{title:function(){return\"inherit\"},prevState:function(){return\"#9E9E9E\"},action:function(){return\"#03A9F4\"},nextState:function(){return\"#4CAF50\"},error:function(){return\"#F20404\"}},diff:!1,diffPredicate:void 0,transformer:void 0},T=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.dispatch,r=e.getState;return\"function\"==typeof t||\"function\"==typeof r?S()({dispatch:t,getState:r}):void console.error(\"\\n[redux-logger v3] BREAKING CHANGE\\n[redux-logger v3] Since 3.0.0 redux-logger exports by default logger with default settings.\\n[redux-logger v3] Change\\n[redux-logger v3] import createLogger from 'redux-logger'\\n[redux-logger v3] to\\n[redux-logger v3] import { createLogger } from 'redux-logger'\\n\")};e.defaults=L,e.createLogger=S,e.logger=T,e.default=T,Object.defineProperty(e,\"__esModule\",{value:!0})});\n","import isFunction from 'lodash/isFunction'\r\nimport invariant from 'invariant'\r\n\r\nimport thunk from 'redux-thunk'\r\nimport { routerMiddleware } from 'connected-react-router'\r\nimport { getHistory } from 'pmt-modules/routing'\r\nimport crashReporter from '../middleware/crashReporter'\r\nimport {\r\n  apiMiddleware,\r\n  unauthorizedMiddleware,\r\n  requestConfigurationMiddleware,\r\n} from '../../api/middlewares'\r\n\r\nimport { chooseLocaleMiddleware } from '../../i18n/middlewares'\r\n\r\nimport { isDev } from '../../environment'\r\n\r\n//could be dynamically imported if we want to reduce the bundle size\r\nimport { default as apiTestMiddleware } from 'pmt-modules/api/middlewares/apiTest'\r\n//could be dynamically imported if we want to reduce the bundle size\r\nimport { createLogger } from 'redux-logger'\r\n\r\nconst generateMiddlewares = (appOptions, appMiddlewares) => {\r\n  let middlewares = [\r\n    thunk,\r\n    requestConfigurationMiddleware,\r\n    apiMiddleware,\r\n    process.env.__DEV__ ? apiTestMiddleware : null,\r\n    unauthorizedMiddleware,\r\n    chooseLocaleMiddleware,\r\n    crashReporter,\r\n    process.env.__DEV__\r\n      ? createLogger(\r\n          // have to be before the apiMiddleware // only on dev // must be before reduxLogger and after thunk and api\r\n          { collapsed: true }\r\n        )\r\n      : null,\r\n    ...appMiddlewares, // work.. // FIXME: the router middleware has to be in the end, the actions made on middleware will not // only on dev, but requires to be at this specific place\r\n    //\r\n    //\r\n    // connected-react-router need this middleware to handle functions such as `push(location)`,\r\n    // `replace(loacation)`\r\n    // It handle actions creators that correspond with the history methods of the same name.\r\n    // see https://github.com/supasate/connected-react-router\r\n    //\r\n    // For reference they are defined as follows:\r\n    // push - Pushes a new location to history, becoming the current location.\r\n    // replace - Replaces the current location in history.\r\n    // go - Moves backwards or forwards a relative number of locations in history.\r\n    // goForward - Moves forward one location. Equivalent to go(1)\r\n    // goBack - Moves backwards one location. Equivalent to go(-1)\r\n    //\r\n    // Both push and replace take in a location descriptor, which can be an object describing the URL\r\n    // or a plain string URL.\r\n    //\r\n    routerMiddleware(getHistory()),\r\n  ].filter(elem => elem !== null)\r\n\r\n  if (isDev()) {\r\n    middlewares.forEach((middleware, index) => {\r\n      invariant(\r\n        isFunction(middleware),\r\n        `middleware is not a function at index ${index}\\n${middleware}`\r\n      )\r\n    })\r\n  }\r\n\r\n  return middlewares // remove null elements\r\n}\r\n\r\nexport default generateMiddlewares\r\n","import { applyMiddleware } from 'redux'\r\n\r\nimport createStoreCustom from './createStoreCustom'\r\nimport generateMiddlewares from './generateMiddlewares'\r\n\r\nconst configureStore = appOptions =>\r\n  createStoreCustom(appOptions)(\r\n    appOptions.rootReducer,\r\n    appOptions.preloadedState || {},\r\n    applyMiddleware(\r\n      ...generateMiddlewares(appOptions, [\r\n        ...(appOptions.prodMiddlewares || []),\r\n        ...(appOptions.middlewares || []),\r\n      ])\r\n    )\r\n  )\r\n\r\nexport default configureStore\r\n","\"use strict\";\n\nvar compose = require('redux').compose;\n\nexports.__esModule = true;\nexports.composeWithDevTools = (\n  typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?\n    window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ :\n    function() {\n      if (arguments.length === 0) return undefined;\n      if (typeof arguments[0] === 'object') return compose;\n      return compose.apply(null, arguments);\n    }\n);\n\nexports.devToolsEnhancer = (\n  typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ?\n    window.__REDUX_DEVTOOLS_EXTENSION__ :\n    function() { return function(noop) { return noop; } }\n);\n","import configureStoreProd from './configureStore.prod.js'\r\nimport configureStoreDev from './configureStore.dev.js'\r\n\r\nlet store = null\r\n\r\nconst configureStore = appOptions => {\r\n  if (store) {\r\n    return store\r\n  }\r\n\r\n  if (process.env.NODE_ENV === 'production') {\r\n    store = configureStoreProd(appOptions)\r\n  } else {\r\n    store = configureStoreDev(appOptions)\r\n  }\r\n\r\n  // Enable HMR for reducers only, not the store instance\r\n  if (import.meta.hot) {\r\n    import.meta.hot.accept(['./configureStore.prod.js', './configureStore.dev.js'], () => {\r\n      // Reducers will be updated without recreating the store\r\n    })\r\n  }\r\n\r\n  return store\r\n}\r\n\r\nexport default configureStore\r\n","import Logger from 'pmt-utils/logger'\r\nimport { getFromSession, saveToSession } from 'pmt-modules/storage'\r\n\r\n/**\r\n * sessionStorage key used to prevent infinite reload loops when recovering from a\r\n * chunk load error. Set before reloading; cleared on the next successful page load.\r\n */\r\nexport const CHUNK_ERROR_RELOAD_KEY = 'chunkErrorReloaded'\r\n\r\n/**\r\n * Detects whether an error is a chunk load failure, which typically occurs after a new\r\n * deployment when the browser tries to load a hashed JS chunk that no longer exists on\r\n * the server (e.g. index_8f2b9a1c.js replaced by index_91db3a6b.js).\r\n *\r\n * @param {*} error\r\n * @returns {boolean}\r\n */\r\nexport const isChunkLoadError = error => {\r\n  if (!error || typeof error !== 'object') return false\r\n  const message = error?.message || ''\r\n  return (\r\n    message.includes('Loading chunk') ||\r\n    message.includes('ChunkLoadError') ||\r\n    message.includes('Failed to fetch dynamically imported module') ||\r\n    message.includes('Importing a module script failed') ||\r\n    error.name === 'ChunkLoadError'\r\n  )\r\n}\r\n\r\n/**\r\n * Attempts to recover from a chunk load error by reloading the page once.\r\n *\r\n * Uses a sessionStorage flag to prevent an infinite reload loop when the error\r\n * persists after the first reload (e.g. a genuine network failure).\r\n *\r\n * @param {*} error - The error to check\r\n * @param {string} [context] - Optional label appended to the log message for traceability\r\n * @returns {boolean} true if a reload was triggered, false otherwise\r\n */\r\nexport const handleChunkError = (error, context = '') => {\r\n  if (!isChunkLoadError(error)) return false\r\n\r\n  const hasReloaded = getFromSession(CHUNK_ERROR_RELOAD_KEY)\r\n  if (!hasReloaded) {\r\n    const label = context ? ` [${context}]` : ''\r\n    Logger.warn(`Chunk load error detected${label}. Reloading...`, error)\r\n    saveToSession(CHUNK_ERROR_RELOAD_KEY, true)\r\n    window.location.reload()\r\n    return true\r\n  }\r\n\r\n  return false\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n  window.location.hostname === 'localhost' ||\r\n    // [::1] is the IPv6 localhost address.\r\n    window.location.hostname === '[::1]' ||\r\n    // 127.0.0.1/8 is considered localhost for IPv4.\r\n    window.location.hostname.match(\r\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n    )\r\n)\r\n\r\nexport default function register() {\r\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n    // The URL constructor is available in all browsers that support SW.\r\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location)\r\n    if (publicUrl.origin !== window.location.origin) {\r\n      // Our service worker won't work if PUBLIC_URL is on a different origin\r\n      // from what our page is served on. This might happen if a CDN is used to\r\n      // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n      return\r\n    }\r\n\r\n    window.addEventListener('load', () => {\r\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\r\n\r\n      if (!isLocalhost) {\r\n        // Is not local host. Just register service worker\r\n        registerValidSW(swUrl)\r\n      } else {\r\n        // This is running on localhost. Lets check if a service worker still exists or not.\r\n        checkValidServiceWorker(swUrl)\r\n      }\r\n    })\r\n  }\r\n}\r\n\r\nfunction registerValidSW(swUrl) {\r\n  navigator.serviceWorker\r\n    .register(swUrl)\r\n    .then(registration => {\r\n      registration.onupdatefound = () => {\r\n        const installingWorker = registration.installing\r\n        installingWorker.onstatechange = () => {\r\n          if (installingWorker.state === 'installed') {\r\n            if (navigator.serviceWorker.controller) {\r\n              // At this point, the old content will have been purged and\r\n              // the fresh content will have been added to the cache.\r\n              // It's the perfect time to display a \"New content is\r\n              // available; please refresh.\" message in your web app.\r\n              console.log('New content is available; please refresh.')\r\n            } else {\r\n              // At this point, everything has been precached.\r\n              // It's the perfect time to display a\r\n              // \"Content is cached for offline use.\" message.\r\n              console.log('Content is cached for offline use.')\r\n            }\r\n          }\r\n        }\r\n      }\r\n    })\r\n    .catch(error => {\r\n      console.error('Error during service worker registration:', error)\r\n    })\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl) {\r\n  // Check if the service worker can be found. If it can't reload the page.\r\n  fetch(swUrl)\r\n    .then(response => {\r\n      // Ensure service worker exists, and that we really are getting a JS file.\r\n      if (\r\n        response.status === 404 ||\r\n        response.headers.get('content-type').indexOf('javascript') === -1\r\n      ) {\r\n        // No service worker found. Probably a different app. Reload the page.\r\n        navigator.serviceWorker.ready.then(registration => {\r\n          registration.unregister().then(() => {\r\n            window.location.reload()\r\n          })\r\n        })\r\n      } else {\r\n        // Service worker found. Proceed as normal.\r\n        registerValidSW(swUrl)\r\n      }\r\n    })\r\n    .catch(() => {\r\n      console.log(\r\n        'No internet connection found. App is running in offline mode.'\r\n      )\r\n    })\r\n}\r\n\r\nexport function unregisterServiceWorker() {\r\n  if ('serviceWorker' in navigator) {\r\n    navigator.serviceWorker.ready.then(registration => {\r\n      registration.unregister()\r\n    })\r\n  }\r\n}\r\n","var _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\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\nimport React, { PureComponent } from 'react'; // eslint-disable-line import/no-unresolved\n// eslint-disable-line import/no-unresolved\n\n\nexport var PersistGate = function (_PureComponent) {\n  _inherits(PersistGate, _PureComponent);\n\n  function PersistGate() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, PersistGate);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = PersistGate.__proto__ || Object.getPrototypeOf(PersistGate)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n      bootstrapped: false\n    }, _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()).then(function () {\n            return _this.setState({ bootstrapped: true });\n          }).catch(function () {\n            return _this.setState({ bootstrapped: true });\n          });\n        } else {\n          _this.setState({ bootstrapped: true });\n        }\n        _this._unsubscribe && _this._unsubscribe();\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\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      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);\nPersistGate.defaultProps = {\n  loading: null\n};","import React from 'react'\r\n\r\nimport isString from 'lodash/isString'\r\nimport clsx from 'clsx'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { isProd } from 'pmt-modules/environment'\r\n\r\nimport Typography from 'pmt-ui/Typography'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Divider from 'pmt-ui/Divider'\r\n\r\nconst styles = theme => {\r\n  // sometimes the app crash and the theme.spacing not longer exists (mostly because it crashed\r\n  // before we creates the theme)\r\n  const spacing = theme.spacing ? theme.spacing : unit => 8 * unit\r\n  return {\r\n    root: {\r\n      background: '#fafafa',\r\n      height: '100%',\r\n      padding: spacing(3),\r\n      overflow: 'scroll',\r\n    },\r\n    title: {\r\n      paddingBottom: spacing(3),\r\n    },\r\n    infoBlock: {\r\n      maxWidth: 400,\r\n      margin: '0 auto',\r\n      textAlign: 'center',\r\n    },\r\n    pre: {\r\n      wordWrap: 'break-word',\r\n      whiteSpace: 'pre-wrap',\r\n    },\r\n    sentryId: {\r\n      backgroundColor: '#e74c3c',\r\n      fontWeight: 800,\r\n      color: 'white',\r\n      fontSize: 16,\r\n      padding: spacing(1),\r\n      margin: 10,\r\n    },\r\n    detailBlock: {\r\n      marginTop: spacing(3),\r\n    },\r\n    detailTitle: {\r\n      paddingTop: spacing(2),\r\n      paddingBottom: spacing(3),\r\n      cursor: 'pointer',\r\n    },\r\n    hidden: {\r\n      display: 'none',\r\n    },\r\n  }\r\n}\r\n\r\nclass ErrorOccurredView extends React.Component {\r\n  state = {\r\n    displayDetail: !isProd(),\r\n  }\r\n\r\n  displayData(data) {\r\n    if (!isString(data)) {\r\n      try {\r\n        return JSON.stringify(data, null, 4)\r\n      } catch (e) {}\r\n    }\r\n\r\n    return String(data)\r\n  }\r\n\r\n  render() {\r\n    const { error, info, sentryId, classes } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <Typography variant=\"h4\" className={classes.title}>\r\n          Une erreur est survenue\r\n        </Typography>\r\n\r\n        <div className={classes.infoBlock}>\r\n          {sentryId && (\r\n            <div>\r\n              <Typography variant=\"body2\">\r\n                Nos équipes on été prévenues du problèmes.\r\n                <br />\r\n                Veuillez trouver ci-dessous l'identifiant attaché à l'erreur :<br />\r\n              </Typography>\r\n\r\n              <div className={classes.sentryId}>{sentryId}</div>\r\n            </div>\r\n          )}\r\n        </div>\r\n\r\n        <div className={classes.detailBlock}>\r\n          <Divider />\r\n\r\n          <div\r\n            className={classes.detailTitle}\r\n            onClick={() => this.setState({ displayDetail: !this.state.displayDetail })}\r\n          >\r\n            <Typography variant=\"body2\">Détail</Typography>\r\n          </div>\r\n\r\n          <div\r\n            className={clsx({\r\n              [classes.hidden]: !this.state.displayDetail,\r\n            })}\r\n          >\r\n            <Grid spacing={2} container>\r\n              <Grid item xs={12} sm={6}>\r\n                <Typography variant=\"body2\" component=\"pre\" className={classes.pre}>\r\n                  {this.displayData(error.message)}\r\n                  {this.displayData(error.stack)}\r\n                </Typography>\r\n              </Grid>\r\n\r\n              {/* INFO */}\r\n\r\n              <Grid item xs={12} sm={6}>\r\n                <Typography variant=\"body2\" component=\"pre\" className={classes.pre}>\r\n                  {this.displayData(info.componentStack)}\r\n                </Typography>\r\n              </Grid>\r\n            </Grid>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ErrorOccurredView)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\nimport Logger from 'pmt-utils/logger'\r\nimport { CHUNK_ERROR_RELOAD_KEY, isChunkLoadError, handleChunkError } from 'pmt-utils/errorHandlers'\r\nimport { removeFromSession } from 'pmt-modules/storage'\r\n\r\nimport ErrorOccurredView from './components/ErrorOccurredView'\r\n\r\n/**\r\n * catch JavaScript errors anywhere in their child component tree, log those errors, and display a\r\n * fallback UI instead of the component tree that crashed. Error boundaries catch errors during\r\n * rendering, in lifecycle methods, and in constructors of the whole tree below them.\r\n *\r\n *\r\n * See https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html\r\n *\r\n */\r\nclass ErrorBoundary extends React.Component {\r\n  state = {\r\n    hasError: false,\r\n    error: null,\r\n    info: null,\r\n  }\r\n\r\n  componentDidCatch(error, info) {\r\n    // When a chunk load error is detected (e.g. after a new deployment invalidated old\r\n    // hashed chunks), automatically reload the page once to fetch the latest assets.\r\n    // The sessionStorage flag prevents an infinite reload loop if the error persists.\r\n    if (isChunkLoadError(error)) {\r\n      if (handleChunkError(error, 'ErrorBoundary')) {\r\n        return // reload triggered — skip setState to avoid a flash of the error UI\r\n      }\r\n      // Second failure after reload: clear the flag and fall through to show the error UI\r\n      removeFromSession(CHUNK_ERROR_RELOAD_KEY)\r\n    }\r\n\r\n    // Display fallback UI\r\n    this.setState({\r\n      hasError: true,\r\n      error,\r\n      info,\r\n    })\r\n\r\n    console.error(error)\r\n\r\n    // You can also log the error to an error reporting service\r\n    Logger.componentDidCatch(error, info)\r\n  }\r\n\r\n  render() {\r\n    if (this.state.hasError) {\r\n      // You can render any custom fallback UI\r\n      const errorView = this.props.errorView\r\n      if (errorView) {\r\n        return isFunction(errorView) ? errorView() : errorView\r\n      }\r\n\r\n      return (\r\n        <ErrorOccurredView\r\n          error={this.state.error}\r\n          info={this.state.info}\r\n          sentryId={Logger.lastEventId()}\r\n        />\r\n      )\r\n    }\r\n\r\n    return this.props.children\r\n  }\r\n}\r\n\r\nErrorBoundary.defaultProps = {\r\n  errorView: null,\r\n}\r\n\r\nErrorBoundary.propTypes = {\r\n  /**\r\n   * View to display when there is an error.\r\n   * By default we display the ErrorOccurredView that details the error.\r\n   */\r\n  errorView: PropTypes.node,\r\n}\r\n\r\nexport default ErrorBoundary\r\n","import React from 'react'\r\n\r\nconst Layout = ({ children }) => <div className=\"u-sizeFullHeight u-relative\">{children}</div>\r\n\r\nexport default Layout\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport PropTypes from 'prop-types'\r\nimport { withTheme } from 'pmt-ui/styles'\r\n\r\nfunction ThemeDefault(props) {\r\n  const {\r\n    theme: { id, ...theme },\r\n  } = props\r\n\r\n  return (\r\n    <pre>\r\n      {tr('registration.form.register.accept_cgu', {\r\n        context: `testContext`,\r\n        desc: 'test',\r\n        fr: \"J'accepte les CGU\",\r\n      })}\r\n      {JSON.stringify(theme, null, 2)}\r\n    </pre>\r\n  )\r\n}\r\n\r\nThemeDefault.propTypes = {\r\n  theme: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default withTheme(ThemeDefault)\r\n","\r\nexport const CardBasicActionType = {\r\n  /**\r\n   * Display an edit button\r\n   */\r\n  EDIT: 'edit',\r\n}\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet EditorModeEdit = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"/>\r\n  </SvgIcon>\r\n)\r\nEditorModeEdit = pure(EditorModeEdit)\r\nEditorModeEdit.displayName = 'EditorModeEdit'\r\nEditorModeEdit.muiName = 'SvgIcon'\r\n\r\nexport default EditorModeEdit\r\n","import React from 'react'\r\nimport invariant from 'invariant'\r\n\r\nimport isArray from 'lodash/isArray'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { CardBasicActionType } from '../constants'\r\n\r\nimport IconButton from 'pmt-ui/IconButton'\r\nimport EditorModeEditIcon from 'pmt-ui/svg-icons/editor/mode-edit'\r\n\r\n\r\nconst getCardBasicActionType = (action) => {\r\n  switch (action.type) {\r\n    case CardBasicActionType.EDIT:\r\n      return (\r\n        <IconButton\r\n          aria-label=\"edit\"\r\n          onClick={action.onClick}\r\n          {...action.props}\r\n        >\r\n          <EditorModeEditIcon\r\n          />\r\n        </IconButton>\r\n      )\r\n\r\n    default:\r\n      invariant(false, `invalid CardBasicActionType ${action.type}`)\r\n  }\r\n}\r\n\r\nconst Actions = ({ actions }) => {\r\n  if (actions === null || isEmpty(actions)) {\r\n    return null\r\n  }\r\n\r\n  actions = !isArray(actions) ? [ actions ] : actions\r\n\r\n  return (\r\n    <div>\r\n      {actions.map((action, index) => (\r\n        <div\r\n          key={index}\r\n        >\r\n          {action.component ? action.component : (\r\n            getCardBasicActionType(action)\r\n          )}\r\n        </div>\r\n      ))}\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default Actions\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport Card from '@material-ui/core/Card'\r\nimport CardHeader from '@material-ui/core/CardHeader'\r\nimport CardContent from '@material-ui/core/CardContent'\r\n\r\nimport Actions from './components/Actions'\r\n\r\nimport { CardBasicActionType } from './constants'\r\n\r\nconst styles = theme => ({\r\n  title: {\r\n    textAlign: 'left',\r\n  },\r\n  content: {\r\n    padding: `${theme.spacing(2)}px !important`,\r\n  },\r\n})\r\n\r\n/**\r\n * class CardBasic - Render the basic card\r\n * @params color {string} - define color of card\r\n * @params header {object} - contains header properties : {\r\n *   @property avatar {Component} - icon component\r\n *   @property title {string} - title value\r\n * }\r\n * @params content {DOM} - content value\r\n * @params className {string} - the external class given to the BasicCard component\r\n */\r\n\r\nclass CardBasic extends React.Component {\r\n  render() {\r\n    const { color, header, content, actions, className, classes } = this.props\r\n\r\n    return (\r\n      <Card className={className}>\r\n        <CardHeader\r\n          style={{\r\n            borderBottom: `4px solid ${color}`,\r\n          }}\r\n          avatar={header.avatar}\r\n          title={\r\n            <Typography variant=\"h5\" className={`${classes.title}`}>\r\n              {header.title}\r\n            </Typography>\r\n          }\r\n        />\r\n        <CardContent className={classes.content}>{content}</CardContent>\r\n\r\n        <Actions actions={actions} />\r\n      </Card>\r\n    )\r\n  }\r\n}\r\n\r\nCardBasic.ActionType = CardBasicActionType\r\n\r\nCardBasic.defaultProps = {\r\n  actions: null,\r\n}\r\n\r\nCardBasic.propTypes = {\r\n  /**\r\n   * Header bottom border color\r\n   */\r\n  color: PropTypes.any.isRequired,\r\n\r\n  /**\r\n   * - avatar -> icon (TODO: rename?)\r\n   * - title\r\n   */\r\n  header: PropTypes.object.isRequired,\r\n\r\n  /**\r\n   * Define the action(s) to put on the header.\r\n   * Can be directly an object, in case of single action, or an array\r\n   *\r\n   * Either:\r\n   * - type (cf CardBasic.ActionType)\r\n   * - onClick\r\n   * - props: props to pass to the component\r\n   *\r\n   * OR\r\n   * - component\r\n   *\r\n   */\r\n  actions: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\r\n\r\n  className: PropTypes.string,\r\n\r\n  content: PropTypes.any.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(CardBasic)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport Card from '@material-ui/core/Card'\r\nimport CardContent from '@material-ui/core/CardContent'\r\nimport CardHeader from '@material-ui/core/CardHeader'\r\n\r\nconst styles = theme => ({\r\n  content: {\r\n    padding: `${theme.spacing(2)}px !important`,\r\n  },\r\n})\r\n\r\n/**\r\n * class CardPostIt - Render the basic card\r\n * @params color {string} - define color of card\r\n * @params header {object} - contains header properties : {\r\n *   @property avatar {Component} - icon component\r\n *   @property title {string} - title value\r\n * }\r\n * @params content {DOM} - content value\r\n * @params cardClass {string} - the external class given to the BasicCard component\r\n */\r\n\r\nclass CardPostIt extends React.Component {\r\n  render() {\r\n    const { color, header, content, className, classes } = this.props\r\n\r\n    return (\r\n      <Card\r\n        style={{\r\n          color: color.font,\r\n          background: color.background,\r\n          borderLeft: `4px solid ${color.border}`,\r\n        }}\r\n        className={className}\r\n      >\r\n        <CardHeader\r\n          style={{\r\n            borderBottom: `1px solid ${color.border}`,\r\n          }}\r\n          avatar={header.avatar}\r\n          title={\r\n            <Typography\r\n              variant=\"h6\"\r\n              style={{\r\n                textAlign: 'left',\r\n                color: color.font,\r\n              }}\r\n            >\r\n              {header.title}\r\n            </Typography>\r\n          }\r\n        />\r\n        <CardContent className={classes.content}>{content}</CardContent>\r\n      </Card>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(CardPostIt)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Card from '@material-ui/core/Card'\r\nimport CardContent from '@material-ui/core/CardContent'\r\n\r\nconst styles = theme => ({\r\n  '@keyframes cardSlideIn': {\r\n    '0%': { opacity: 0, transform: 'translateY(12px)' },\r\n    '100%': { opacity: 1, transform: 'translateY(0)' },\r\n  },\r\n  root: {\r\n    animation: '$cardSlideIn 0.4s ease-out both',\r\n    overflow: 'visible',\r\n  },\r\n  content: {\r\n    padding: theme.pmt.modern.spacing.card,\r\n    '&:last-child': {\r\n      paddingBottom: theme.pmt.modern.spacing.card,\r\n    },\r\n  },\r\n})\r\n\r\n/**\r\n * CardSection - A semantically wrapped card section for content grouping.\r\n * Renders as <section> for accessibility, with ARIA label support.\r\n * Animates in with a subtle slide-up on mount.\r\n *\r\n * @param {React.ReactNode} children - Card content\r\n * @param {object} classes - JSS classes (injected by withStyles)\r\n * @param {string} className - Additional className\r\n * @param {string} ariaLabel - Accessible label for the section\r\n * @param {number} animationDelay - Animation delay in seconds (stagger cards)\r\n */\r\nconst CardSection = ({\r\n  children,\r\n  classes,\r\n  className,\r\n  ariaLabel,\r\n  animationDelay = 0,\r\n}) => (\r\n  <section aria-label={ariaLabel}>\r\n    <Card\r\n      className={classNames(classes.root, className)}\r\n      style={animationDelay ? { animationDelay: `${animationDelay}s` } : undefined}\r\n    >\r\n      <CardContent className={classes.content}>\r\n        {children}\r\n      </CardContent>\r\n    </Card>\r\n  </section>\r\n)\r\n\r\nexport default withStyles(styles)(CardSection)\r\n","import React from 'react'\r\n\r\nconst CardItem = ({ type, ...props }) => React.cloneElement(type, props)\r\n\r\nexport default CardItem\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet SocialPerson = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/>\r\n  </SvgIcon>\r\n);\r\nSocialPerson = pure(SocialPerson);\r\nSocialPerson.displayName = 'SocialPerson';\r\nSocialPerson.muiName = 'SvgIcon';\r\n\r\nexport default SocialPerson;\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\n\r\nimport { withStyles } from '../../styles'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nconst styles = theme => ({\r\n  st0: {\r\n    fill: '#96C522',\r\n  },\r\n  st1: {\r\n    fill: '#CACACA',\r\n  },\r\n  st2: {\r\n    fill: '#C9C9C9',\r\n    fillRule: 'evenodd',\r\n    clipRule: 'evenodd',\r\n  },\r\n  st3: {\r\n    fill: '#95C422',\r\n    fillRule: 'evenodd',\r\n    clipRule: 'evenodd',\r\n  },\r\n  st4: {\r\n    fill: '#CACACA',\r\n    fillRule: 'evenodd',\r\n    clipRule: 'evenodd',\r\n  }\r\n})\r\n\r\nlet LogoGrey = (props) => {\r\n  const { classes, ...otherProps } = props\r\n  return (\r\n    <SvgIcon {...otherProps}>\r\n      <g>\r\n        <path className={classes.st0} d=\"M62.2,21.6c1.1-0.4,2-0.8,2.8-1.4c0.8-0.5,1.5-1.2,2.1-1.9c0.5-0.8,0.8-1.6,0.8-2.6c0-0.7-0.2-1.3-0.5-1.9\r\n          c-0.3-0.6-0.7-1-1.2-1.5c-0.5-0.4-1.1-0.8-1.8-1.1c-0.7-0.3-1.3-0.6-2-0.8c-0.7-0.2-1.4-0.4-2.1-0.5c-0.7-0.1-1.3-0.3-1.8-0.3\r\n          c-0.6-0.1-1.3-0.2-2-0.2c-0.7-0.1-1.4-0.1-2-0.1c-1.1,0-2.1,0.1-3.2,0.2C50.1,9.6,49,9.8,48,10.1c-1.1,0.3-2.1,0.6-3.1,1\r\n          c-1,0.4-1.9,0.9-2.7,1.5c-0.1,0-0.2,0.1-0.3,0.2c-0.2,0.1-0.3,0.3-0.5,0.4c-0.2,0.2-0.3,0.3-0.5,0.5c-0.1,0.2-0.2,0.3-0.2,0.5\r\n          c0,0.2,0.2,0.4,0.7,0.4c0.2,0,0.3,0,0.6-0.1c0.2,0,0.5-0.1,0.9-0.3c0.4-0.1,0.9-0.3,1.5-0.5c0.6-0.2,1.5-0.5,2.5-0.9\r\n          c1.3-0.3,2.5-0.6,3.8-0.8c1.3-0.2,2.6-0.3,3.9-0.3c0.6,0,1.3,0,2.1,0.1c0.8,0.1,1.6,0.1,2.4,0.3c0.8,0.1,1.6,0.3,2.4,0.5\r\n          c0.8,0.2,1.5,0.5,2.1,0.8c0.6,0.3,1.1,0.7,1.5,1.1c0.4,0.4,0.6,0.9,0.6,1.4c0,0.7-0.2,1.3-0.7,1.8c-0.5,0.5-1.1,1-1.8,1.4\r\n          c-0.7,0.4-1.5,0.8-2.5,1.1c-0.9,0.3-1.8,0.6-2.7,0.8c-0.9,0.2-1.7,0.4-2.5,0.5c-0.8,0.1-1.4,0.2-1.8,0.3c0-0.3,0.1-0.6,0.2-1\r\n          c0.1-0.4,0.2-0.9,0.2-1.3c0.1-0.5,0.1-0.9,0.1-1.4c0-0.5,0-0.9-0.1-1.3c-0.1-0.4-0.3-0.7-0.5-0.9c-0.2-0.2-0.6-0.4-1-0.4\r\n          c-0.2,0-0.4,0.1-0.5,0.4c-0.1,0.3-0.2,0.7-0.3,1.1c-0.1,0.4-0.1,0.9-0.2,1.5c-0.1,0.5-0.1,1-0.1,1.5c0,0.5-0.1,1-0.1,1.4\r\n          c0,0.4-0.1,0.7-0.1,0.8c-0.8,0.1-1.6,0.2-2.4,0.3c-0.8,0.1-1.6,0.2-2.3,0.2c-0.3,0-0.7,0.1-1.3,0.2c-0.6,0.1-1.2,0.1-1.9,0.2\r\n          c-0.6,0.1-1.2,0.2-1.7,0.4c-0.5,0.1-0.7,0.3-0.7,0.5c0,0.2,0.1,0.3,0.4,0.4c0.3,0.1,0.6,0.1,0.9,0.2c0.4,0,0.8,0,1.2,0\r\n          c0.4,0,0.8,0,1.2-0.1c0.4,0,0.7-0.1,0.9-0.1c0.3,0,0.4,0,0.4,0c0.8-0.1,1.7-0.2,2.5-0.2c0.9-0.1,1.7-0.2,2.6-0.3\r\n          c0,1.5,0,4.4,0.1,5.5c0.1,1,0.2,1.9,0.5,2.6c0.1,0.3,0.2,0.5,0.4,0.5c0.3,0,0.5-0.3,0.7-0.8c0.2-0.5,0.3-1.2,0.5-1.9\r\n          c0.1-0.8,0.2-3.2,0.3-4c0.1-0.8,0.1-1.6,0.1-2.2c0.6-0.1,1.4-0.2,2.4-0.3c1-0.2,2-0.4,3-0.6C60.1,22.3,61.1,22,62.2,21.6z\"/>\r\n        <path className={classes.st0} d=\"M73.2,23.8c-0.2-0.1-0.5-0.2-0.8-0.2c-0.3,0-0.5,0.1-0.8,0.2c-0.2,0.1-0.4,0.3-0.4,0.6c0,0.2,0,0.4,0,0.6\r\n          c0,0.1,0,0.2-0.1,0.4c-0.1,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.2,0.8-0.3,1.2c-0.1,0.4-0.2,0.8-0.3,1.1c-0.1,0.3-0.2,0.6-0.3,0.8\r\n          c-0.1,0.2-0.2,0.3-0.3,0.2c-0.1,0-0.2-0.3-0.2-0.7c0-0.5,0-1,0.1-1.7c0.1-0.7,0.1-1.3,0.2-2.1c0.1-0.7,0.1-1.4,0.1-2.1\r\n          c0-0.2-0.1-0.4-0.3-0.5c-0.3-0.1-0.5-0.2-0.8-0.1c-0.3,0-0.6,0.1-0.8,0.3c-0.3,0.2-0.4,0.4-0.4,0.8c0,0.6,0,1.1,0,1.8\r\n          c0,0.3,0,0.5,0,0.8c0,0,0,0,0,0c0,0.2-0.1,0.5-0.3,1c-0.1,0.4-0.3,0.8-0.5,1.3c-0.2,0.4-0.3,0.8-0.5,1.1c-0.2,0.3-0.3,0.5-0.4,0.5\r\n          c-0.2,0-0.3-0.2-0.3-0.5c-0.1-0.4-0.1-0.8,0-1.3c0-0.5,0.1-1,0.1-1.6c0.1-0.5,0.1-1,0.2-1.4c0-0.3,0-0.5-0.2-0.7\r\n          c-0.1-0.2-0.3-0.3-0.5-0.4c-0.2-0.1-0.5-0.1-0.7-0.1c-0.2,0-0.4,0.1-0.6,0.3c-0.1-0.2-0.3-0.5-0.5-0.7c-0.2-0.2-0.5-0.3-0.7-0.4\r\n          c-0.7-0.1-1.4,0-1.9,0.3c-0.5,0.4-0.9,0.9-1.2,1.5c-0.3,0.6-0.5,1.4-0.6,2.2c-0.1,0.8-0.1,1.6,0,2.3c0.1,0.7,0.4,1.4,0.7,2\r\n          c0.3,0.6,0.8,0.9,1.4,1.1c0.3,0.1,0.7,0.1,1.1-0.1c0.4-0.2,0.8-0.5,1.1-0.9c0.3-0.4,0.5-0.8,0.7-1.3c0.3,0.5,0.7,0.9,1.3,1.1\r\n          c0.4,0.1,0.7,0.1,1-0.1c0.3-0.2,0.6-0.4,0.8-0.8c0.3-0.3,0.5-0.7,0.7-1.1c0,0,0,0,0,0c0,0.2,0,0.5,0.1,0.6c0.1,0.3,0.2,0.6,0.4,0.8\r\n          c0.2,0.2,0.4,0.4,0.7,0.5c0.3,0.1,0.5,0.2,0.8,0.1c0.3,0,0.5-0.1,0.7-0.3c0.4-0.4,0.6-0.8,0.8-1.4c0,0.7-0.1,1.4-0.1,2.1\r\n          c0,0.7-0.1,1.3-0.1,1.9c0,0.6-0.1,1.1-0.1,1.6c0,0.5-0.1,0.9-0.1,1.1c0,0.3,0.1,0.5,0.3,0.6c0.2,0,0.5,0,0.8-0.2\r\n          c0.3-0.2,0.6-0.4,0.9-0.7c0.3-0.3,0.4-0.7,0.4-1.1c0-0.2,0-0.5,0-1c0-0.5,0-1.1,0-1.7c0-0.7,0-1.4,0-2.2c0-0.8,0-1.5,0.1-2.3\r\n          c0-0.8,0.1-1.5,0.1-2.1c0-0.7,0.1-1.2,0.2-1.6C73.5,24.1,73.4,23.9,73.2,23.8z M63.3,28.2c-0.1,0.6-0.2,1.2-0.4,1.7\r\n          c-0.2,0.5-0.4,0.9-0.6,1.2c-0.2,0.3-0.5,0.5-0.7,0.4c-0.3,0-0.5-0.2-0.6-0.6c-0.1-0.4-0.2-0.8-0.2-1.3c0-0.5,0-1.1,0.1-1.6\r\n          c0.1-0.6,0.2-1.1,0.3-1.6c0.2-0.5,0.4-0.9,0.6-1.2c0.2-0.3,0.5-0.4,0.9-0.3c0.2,0,0.4,0.2,0.5,0.5c0.1,0.3,0.2,0.7,0.2,1\r\n          C63.4,27,63.4,27.6,63.3,28.2z\"/>\r\n      </g>\r\n      <g>\r\n        <path className={classes.st1} d=\"M101.9,11.3c-0.5,0-1.1,0.2-1.7,0.6c-0.6,0.4-1.2,0.9-1.7,1.5c-0.6,0.6-1.1,1.3-1.7,2.1\r\n          c-0.6,0.8-1.1,1.5-1.5,2.3c-0.5,0.8-0.9,1.5-1.3,2.2c-0.4,0.7-0.7,1.2-0.9,1.7c-0.5,0.9-1,1.9-1.6,3c-0.6,1.1-1.1,2-1.6,2.9\r\n          c-0.5,0.9-1.1,1.6-1.5,2.2c-0.5,0.6-0.9,0.9-1.3,0.9c-0.4,0-0.7-0.2-1.1-0.5c-0.3-0.3-0.7-0.7-1-1.1c-0.3-0.4-0.6-0.9-0.9-1.4\r\n          c-0.3-0.5-0.5-0.9-0.7-1.3v0c-0.7-1.3-1.4-2.6-2-3.7c-0.6-1.1-1.2-2.2-1.7-3.1c-0.6-0.9-1.2-1.8-1.8-2.5c-0.6-0.7-1.3-1.4-2.2-1.9\r\n          c0,0-0.1,0-0.2-0.1c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.2,0c-0.1,0-0.1,0.1-0.1,0.1c0,0.1,0.2,0.4,0.5,0.9\r\n          c0.3,0.4,0.7,0.9,1.1,1.5c0.4,0.6,0.9,1.2,1.3,1.8c0.4,0.6,0.7,1.3,0.9,1.8c-0.1,0.1-0.1,0.3-0.1,0.4c0,0.1,0,0.3,0,0.4\r\n          c-0.1,0.7-0.1,1.4-0.3,2.1c-0.1,0.7-0.2,1.5-0.4,2.2c-0.1,0.7-0.3,1.4-0.5,2.1c-0.2,0.7-0.4,1.3-0.6,1.9c-0.1,0.3-0.2,0.7-0.3,1\r\n          c-0.1,0.3-0.2,0.7-0.2,1.1c0,0.1,0.1,0.3,0.2,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.3,0.1,0.4,0.1c0.2,0,0.3,0,0.4,0\r\n          c0.7,0,1.2-0.3,1.5-0.9c0.5-0.8,0.8-1.7,0.9-2.6c0.1-0.9,0.2-1.8,0.2-2.8c0-0.3,0-0.7,0-1.1c0-0.4,0-1,0.1-1.8\r\n          c0.5,1.1,1,2.1,1.7,3.2c0.6,1.1,1.3,2.1,2,3.1c0.2,0.3,0.4,0.6,0.7,0.9c0.2,0.3,0.5,0.6,0.8,0.8c0.3,0.2,0.6,0.4,0.9,0.6\r\n          c0.3,0.2,0.7,0.2,1.1,0.2c0.7,0,1.4-0.3,2.1-0.9c0.7-0.6,1.4-1.3,2-2.2c0.6-0.9,1.3-1.9,1.9-3c0.6-1.1,1.2-2.2,1.7-3.3\r\n          c0.6-1.1,1.1-2.1,1.5-3c0.5-0.9,0.9-1.7,1.3-2.2c0,1-0.1,2-0.2,3.1c-0.1,1.1-0.2,2.1-0.2,3.1c0,0.4,0,0.9,0,1.5\r\n          c0,0.6,0.1,1.3,0.1,1.9c0.1,0.7,0.1,1.4,0.2,2c0.1,0.7,0.2,1.3,0.4,1.8c0.1,0.5,0.3,1,0.5,1.3c0.2,0.3,0.4,0.5,0.7,0.5\r\n          c0.2,0,0.4-0.1,0.6-0.2c0.2-0.1,0.3-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.3,0.1-0.5,0.1-0.8c0-0.5-0.1-1-0.2-1.5\r\n          c-0.1-0.6-0.2-1.1-0.3-1.6c-0.2-0.6-0.3-1.4-0.4-2.3c-0.1-0.9-0.2-1.9-0.3-2.9c-0.1-1.1-0.2-2.1-0.2-3.3c-0.1-1.1-0.1-2.3-0.2-3.4\r\n          c0.7-0.9,1.2-1.6,1.5-2.1c0.3-0.5,0.6-1,0.9-1.5c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.2,0.2-0.5,0.2-0.7c0-0.1,0-0.2-0.1-0.3\r\n          C102.1,11.4,102,11.3,101.9,11.3z\"/>\r\n        <path className={classes.st1} d=\"M108.1,23.8c-0.2-0.1-0.5-0.2-0.8-0.2c-0.3,0-0.5,0.1-0.8,0.2c-0.2,0.1-0.4,0.3-0.4,0.6c0,0.2,0,0.4,0,0.6\r\n          c0,0.1,0,0.2-0.1,0.4c-0.1,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.2,0.8-0.3,1.2c-0.1,0.4-0.2,0.8-0.3,1.1c-0.1,0.3-0.2,0.6-0.3,0.8\r\n          c-0.1,0.2-0.2,0.3-0.3,0.2c-0.1,0-0.2-0.3-0.2-0.7c0-0.5,0-1,0.1-1.7c0.1-0.7,0.1-1.3,0.2-2.1c0.1-0.7,0.1-1.4,0.2-2.1\r\n          c0-0.2-0.1-0.4-0.3-0.5c-0.3-0.1-0.5-0.2-0.8-0.1c-0.3,0-0.6,0.1-0.8,0.3c-0.3,0.2-0.4,0.4-0.4,0.8c0,0.6,0,1.1,0,1.8\r\n          c0,0.6,0,1.2,0,1.8c0,0.6,0,1.1,0,1.6c0,0.5,0.1,0.9,0.1,1.2c0.1,0.3,0.2,0.6,0.4,0.8c0.2,0.2,0.4,0.4,0.7,0.5\r\n          c0.3,0.1,0.5,0.2,0.8,0.1c0.3,0,0.5-0.1,0.7-0.3c0.4-0.4,0.6-0.8,0.8-1.4c0,0.7-0.1,1.4-0.1,2.1c0,0.7-0.1,1.3-0.1,1.9\r\n          c0,0.6-0.1,1.1-0.1,1.6c0,0.5-0.1,0.9-0.1,1.1c0,0.3,0.1,0.5,0.3,0.6c0.3,0,0.5,0,0.8-0.2c0.3-0.2,0.6-0.4,0.9-0.7\r\n          c0.3-0.3,0.4-0.7,0.4-1.1c0-0.2,0-0.5,0-1c0-0.5,0-1.1,0-1.7c0-0.7,0-1.4,0-2.2c0-0.8,0-1.5,0.1-2.3c0-0.8,0.1-1.5,0.1-2.1\r\n          c0-0.7,0.1-1.2,0.1-1.6C108.4,24.1,108.3,23.9,108.1,23.8z\"/>\r\n      </g>\r\n      <g>\r\n        <path className={classes.st0} d=\"M116.6,24.9c0-0.5,0-1.2,0-2c0-0.8,0-1.7-0.1-2.5c0-0.9-0.1-1.8-0.1-2.6c-0.1-0.9-0.1-1.6-0.2-2.2l6.7-0.2\r\n          c0.4,0,0.9,0,1.5,0c0.6,0,1.1,0,1.7-0.1c0.5,0,1-0.1,1.4-0.3c0.4-0.1,0.6-0.3,0.6-0.6c0-0.3-0.1-0.6-0.3-0.8\r\n          c-0.2-0.2-0.5-0.4-0.8-0.6c-0.3-0.2-0.6-0.3-0.9-0.3c-0.3-0.1-0.6-0.1-0.9-0.1c-1.5-0.1-2.9-0.1-4.4,0c-1.4,0.1-2.9,0.2-4.3,0.4\r\n          c-1.4,0.2-2.9,0.3-4.3,0.5c-1.4,0.2-2.8,0.4-4.2,0.5c-0.4,0.1-0.8,0.1-1.3,0.1c-0.5,0-1,0-1.5,0.1c-0.5,0.1-0.9,0.2-1.2,0.3\r\n          c-0.3,0.2-0.5,0.4-0.5,0.7c0,0.2,0.1,0.3,0.4,0.5c0.3,0.2,0.6,0.3,1.1,0.3c1.7,0,3.3,0,4.9-0.1c1.6-0.1,3.2-0.2,4.8-0.2\r\n          c-0.1,0.3-0.2,0.6-0.2,1c-0.1,0.4-0.1,0.9-0.2,1.6c-0.1,0.7-0.1,1.5-0.1,2.5c0,1-0.1,2.3-0.1,3.9c0,0.5,0,1-0.1,1.7\r\n          c-0.1,0.7-0.1,1.3-0.1,2c0,0.7,0,1.3,0,1.9c0,0.6,0.2,1.1,0.3,1.4c0.1,0.1,0.1,0.2,0.3,0.3c0.1,0.1,0.2,0.2,0.4,0.4\r\n          c0.1,0.1,0.3,0.2,0.4,0.3c0.2,0.1,0.3,0.1,0.4,0.1c0.2,0,0.3-0.2,0.4-0.5c0.1-0.3,0.2-0.8,0.3-1.3c0.1-0.5,0.1-1.1,0.2-1.7\r\n          c0-0.6,0.1-1.2,0.1-1.8c0-0.6,0-1.1,0-1.5C116.6,25.4,116.6,25.1,116.6,24.9z\"/>\r\n        <path className={classes.st0} d=\"M134.5,24.2c-0.4-0.4-0.8-0.6-1.4-0.6c-0.3,0-0.6,0.1-0.9,0.2c-0.2,0.1-0.5,0.3-0.6,0.5c0.1-0.7,0.1-1.4,0.2-2\r\n          c0.1-0.7,0.1-1.2,0.2-1.8c0-0.5,0.1-1,0.1-1.3c0-0.4,0.1-0.6,0.1-0.7c0.1-0.3,0-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.8-0.3\r\n          c-0.3,0-0.6,0.1-0.8,0.3c-0.3,0.2-0.4,0.5-0.4,1c0,0.2,0,0.6,0,1.2c0,0.6-0.1,1.3-0.1,2.1c0,0.8-0.1,1.7-0.2,2.6\r\n          c0,0.7-0.1,1.3-0.1,1.9c0,0.2-0.1,0.5-0.2,0.8c-0.1,0.4-0.3,0.8-0.5,1.3c-0.2,0.4-0.3,0.8-0.5,1.1c-0.2,0.3-0.3,0.5-0.4,0.5\r\n          c-0.2,0-0.3-0.2-0.3-0.5c-0.1-0.4-0.1-0.8,0-1.3c0-0.5,0.1-1,0.1-1.6c0.1-0.5,0.1-1,0.2-1.4c0-0.3,0-0.5-0.2-0.7\r\n          c-0.1-0.2-0.3-0.3-0.5-0.4c-0.2-0.1-0.5-0.1-0.7-0.1c-0.2,0-0.4,0.1-0.6,0.3c-0.1-0.2-0.3-0.5-0.5-0.7c-0.2-0.2-0.5-0.3-0.7-0.4\r\n          c-0.7-0.1-1.4,0-1.9,0.3c-0.5,0.4-0.9,0.9-1.2,1.5c-0.3,0.6-0.5,1.4-0.6,2.2c-0.1,0.8-0.1,1.6,0,2.3c0.1,0.7,0.4,1.4,0.7,2\r\n          c0.3,0.6,0.8,0.9,1.4,1.1c0.3,0.1,0.7,0.1,1.1-0.1c0.4-0.2,0.8-0.5,1.1-0.9c0.3-0.4,0.5-0.8,0.7-1.3c0.3,0.5,0.7,0.9,1.3,1.1\r\n          c0.4,0.1,0.7,0.1,1-0.1c0.3-0.2,0.6-0.4,0.8-0.8c0.1-0.1,0.2-0.3,0.3-0.5c0,0.6-0.1,1.2-0.1,1.6c0,0.3,0.1,0.5,0.3,0.6\r\n          c0.2,0.1,0.5,0.2,0.7,0.2c0.3,0,0.5-0.1,0.8-0.2c0.2-0.2,0.4-0.4,0.4-0.6v-0.9c0.3,0.4,0.7,0.5,1.3,0.5c0.6,0,1.1-0.2,1.6-0.6\r\n          c0.4-0.4,0.8-0.9,1-1.4c0.2-0.6,0.4-1.2,0.4-1.9c0.1-0.7,0-1.3-0.2-1.9C135.1,25.1,134.9,24.6,134.5,24.2z M125.3,28.2\r\n          c-0.1,0.6-0.2,1.2-0.4,1.7c-0.2,0.5-0.4,0.9-0.6,1.2c-0.2,0.3-0.5,0.5-0.7,0.4c-0.3,0-0.5-0.2-0.6-0.6c-0.1-0.4-0.2-0.8-0.2-1.3\r\n          c0-0.5,0-1.1,0.1-1.6c0.1-0.6,0.2-1.1,0.3-1.6c0.2-0.5,0.4-0.9,0.6-1.2c0.3-0.3,0.5-0.4,0.9-0.3c0.2,0,0.4,0.2,0.5,0.5\r\n          c0.1,0.3,0.2,0.7,0.2,1C125.4,27,125.4,27.6,125.3,28.2z M133.4,26.3c0,0.4,0,0.8-0.1,1.3c-0.1,0.5-0.1,0.9-0.3,1.3\r\n          c-0.1,0.4-0.2,0.7-0.4,0.9c-0.2,0.2-0.3,0.3-0.5,0.3c-0.3,0-0.5-0.2-0.6-0.5c-0.1-0.3-0.2-0.6-0.3-1c0-0.1,0-0.3,0-0.4\r\n          c0-0.1,0-0.3,0-0.4c0-0.3,0.1-0.7,0.2-1.1c0.1-0.4,0.2-0.7,0.4-1.1c0.1-0.3,0.3-0.6,0.5-0.7c0.2-0.2,0.4-0.2,0.6-0.2\r\n          c0.1,0,0.2,0.2,0.3,0.5C133.4,25.6,133.5,25.9,133.4,26.3z\"/>\r\n        <path className={classes.st0} d=\"M148.9,26.1c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1,0-0.2,0-0.4,0.1c-0.1,0.1-0.2,0.2-0.3,0.4c0,0.1-0.1,0.4-0.3,0.7\r\n          c-0.1,0.3-0.3,0.7-0.5,1c-0.2,0.4-0.4,0.8-0.7,1.2c-0.3,0.4-0.5,0.8-0.8,1.1c-0.3,0.3-0.6,0.5-0.9,0.7c-0.3,0.2-0.6,0.2-0.8,0.1\r\n          c-0.2-0.1-0.4-0.2-0.5-0.4c-0.1-0.2-0.2-0.5-0.2-0.8c-0.1-0.3-0.1-0.7-0.1-1.1c0-0.4,0-0.8,0.1-1.2c0.2,0,0.5-0.1,0.8-0.1\r\n          c0.3,0,0.6-0.1,0.9-0.2c0.3-0.1,0.5-0.2,0.8-0.3c0.2-0.1,0.4-0.3,0.6-0.5c0.2-0.3,0.3-0.6,0.3-1.1c0-0.5-0.1-0.9-0.3-1.4\r\n          c-0.2-0.4-0.5-0.8-0.9-1.2c-0.4-0.3-0.8-0.5-1.3-0.5c-0.5,0-1,0.3-1.4,0.8c-0.4,0.5-0.8,1.1-1,1.9c-0.2,0.4-0.3,0.9-0.4,1.4v0\r\n          c-0.1,0.2-0.2,0.5-0.4,1c-0.2,0.5-0.4,1.1-0.6,1.6c-0.2,0.6-0.4,1.1-0.6,1.5c-0.2,0.4-0.4,0.7-0.5,0.7c-0.2,0-0.3-0.3-0.4-0.8\r\n          c-0.1-0.5-0.1-1.2-0.1-2c0-0.8,0-1.7,0.1-2.7c0.1-1,0.1-1.9,0.2-2.8c0.1-0.9,0.2-1.7,0.3-2.4c0.1-0.7,0.2-1.2,0.2-1.4\r\n          c0.1-0.3,0-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.4,1c0,0.4,0,1.1-0.1,1.9\r\n          c-0.1,0.9-0.2,1.8-0.2,2.8c-0.1,1-0.1,2.1-0.2,3.2c0,1.1,0,2.1,0.1,2.9c0.1,0.9,0.3,1.6,0.6,2.2c0.3,0.6,0.7,0.9,1.2,0.9\r\n          c0.6,0,1.1-0.3,1.5-0.8c0.4-0.5,0.8-1.1,1.1-1.8c0-0.1,0.1-0.2,0.1-0.3c0.1,0.7,0.4,1.2,0.8,1.7c0.4,0.5,1,0.8,1.7,0.8\r\n          c0.6,0,1.1-0.1,1.6-0.4c0.5-0.3,0.9-0.6,1.3-1c0.4-0.4,0.7-0.8,1-1.3c0.3-0.5,0.5-0.9,0.7-1.4c0.2-0.4,0.3-0.8,0.4-1.2\r\n          c0.1-0.3,0.2-0.6,0.2-0.7C149,26.4,149,26.2,148.9,26.1z M144,24.5c0.2-0.5,0.3-0.7,0.5-0.8c0.1,0,0.2,0,0.2,0.2\r\n          c0.1,0.2,0.1,0.4,0.2,0.6c0,0.2,0,0.5,0,0.7c0,0.2-0.1,0.4-0.2,0.5c-0.1,0.2-0.3,0.3-0.5,0.3c-0.2,0.1-0.4,0.1-0.7,0.1\r\n          C143.7,25.5,143.8,24.9,144,24.5z\"/>\r\n        </g>\r\n      <rect x=\"14.2\" y=\"22.1\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.1665 40.3682)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.4\" y=\"22.1\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -3.991 40.5907)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.4\" y=\"22.3\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.2134 40.7662)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.4\" y=\"22.5\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.4359 40.9417)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.4\" y=\"22.3\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.2134 40.7662)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.2\" y=\"22.1\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.1665 40.3682)\" width=\"18.7\" height=\"1.5\"/>\r\n      <path className={classes.st2} d=\"M32.5,28.1c-0.1,0.7,2.1,1.3,2,2.2c-0.1,0.4-4.4,2.2-6,2.7C20,35.3,7.1,31.4,2.5,26.8c0.7-0.8,2-0.9,2.8-1.6\r\n        c-2.3-0.5-3.5,0.5-4.7,1.5c-0.3,1.8-0.5,3.4,0.7,4.1C1.5,30,1.1,28.5,1.8,28c-0.2,3.3,7.7,8.8,8.7,11.2c4.5,0.5,9.8,0.7,14.3,1.2\r\n        c2.8-2.2,10-6,10.6-9.1c0.1,0.9,0.4,1.6,0,2.8C37.8,32.3,36.5,27.8,32.5,28.1z M10.2,37c0.6-0.3,2.8-0.1,3.4,0.4\r\n        C13.2,38.3,10.5,37.6,10.2,37z\"/>\r\n      <path className={classes.st3} d=\"M33.1,15.1l-7.8-1.8c-0.7-0.2-1.4,0.3-1.6,1.1l-3.9,16.9c-0.1,0.5,0,1,0.3,1.3c3.8,0.3,7.5,0,10.6-1.1\r\n        c0,0,0,0,0,0L34,16.7C34.2,16,33.8,15.2,33.1,15.1z M22.1,32.1l-1.5-0.4L25,13.6l1.5,0.4L22.1,32.1z\"/>\r\n      <path className={classes.st4} d=\"M31.5,2C28.8,1.4,29,5.1,31,5.3C32.6,5.4,33.9,2.5,31.5,2z\"/>\r\n      <path className={classes.st2} d=\"M27.6,7.3c-1.2-0.1-1.4,2.2,0,2.2C28.8,9.5,29.3,7.5,27.6,7.3z\"/>\r\n      <path className={classes.st1} d=\"M14.7,19.7c1.8,1.5,0.9,7.3-0.2,11.8c0.9,0.3,1.8,0.5,2.5,0.7c1.1-8.9,3.1-20.2,3.9-28.4\r\n        C17.6,6.8,14.6,13.5,14.7,19.7z\"/>\r\n      <path className={classes.st1} d=\"M10.8,19.3c0.3-1.3,2.1-1.6,2.4-3.3c0.7-3.7-0.9-8.4-1.3-12.1c-0.3,1.8-0.1,4.7,0,7c0,1,0.5,2.2-0.3,2.8\r\n        c-0.9-0.4-0.5-1.8-0.5-2.7c-0.1-1.5-0.3-3.4-0.4-4.9c0-0.8,0.3-1.8-0.4-2.3c-0.1,1.5,0.1,3.2,0.1,4.8c0.1,1.8,0.3,3.8-0.4,5.2\r\n        c-1-1-0.4-3.1-0.5-4.9C9.4,7.6,9.3,5.5,9.2,4C8.5,4.4,8.8,5.5,8.8,6.3c0,2.2,0.2,5.5-0.3,7.4c-1-0.3-0.7-1.8-0.7-2.8\r\n        c0-2.3,0-4.6-0.3-6.8C7.5,7.7,5.8,13.8,7.4,17c0.5,1,1.6,1.2,2.1,2.1c0.1,3.3,0,7-0.1,10.5c0.8,0.3,1.7,0.6,2.7,1\r\n        c-0.5-2.7-0.7-5.7-1-8.7C11,21.1,10.7,20.1,10.8,19.3z\"/>\r\n    </SvgIcon>\r\n  )\r\n}\r\n\r\nLogoGrey = pure(LogoGrey)\r\nLogoGrey.displayName = 'LogoGrey'\r\nLogoGrey.pmtName = 'SvgIcon'\r\n\r\nexport default withStyles(styles)(LogoGrey)\r\n\r\n","import React from 'react'\r\nimport moment from 'moment'\r\n\r\nimport DateField from 'pmt-ui/DateField'\r\n\r\nconst getComponents = () => [\r\n  {\r\n    name: 'DateField INLINE',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n        <DateField\r\n          mode={DateField.Mode.INLINE}\r\n          label=\"Date de naissance\"\r\n          value={formData.birthdate}\r\n          onChange={birthdate => onChange({ ...formData, birthdate })}\r\n          validation={formErrors.birthdate}\r\n          options={{\r\n            defaultDate: moment().subtract(30, 'year').startOf('day'),\r\n            minDate: moment().subtract(100, 'year').startOf('day'),\r\n            maxDate: moment().subtract(12, 'year').startOf('day'),\r\n          }}\r\n        />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <DateField\r\n        mode={DateField.Mode.INLINE}\r\n        label=\"Date de naissance\"\r\n        value={moment()}\r\n        onChange={() => {}}\r\n        options={{\r\n          defaultDate: moment()\r\n            .subtract(30, 'year')\r\n            .startOf('day'),\r\n          minDate: moment()\r\n            .subtract(100, 'year')\r\n            .startOf('day'),\r\n          maxDate: moment()\r\n            .subtract(12, 'year')\r\n            .startOf('day'),\r\n        }}\r\n      />\r\n    ),\r\n  },\r\n  {\r\n    name: 'DateField CALENDAR',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n        <DateField\r\n          mode={DateField.Mode.CALENDAR}\r\n          value={formData.birthdate}\r\n          onChange={birthdate => onChange({ ...formData, birthdate })}\r\n          validation={formErrors.birthdate}\r\n          options={{\r\n            defaultDate: moment().subtract(30, 'year').startOf('day'),\r\n            minDate: moment().subtract(100, 'year').startOf('day'),\r\n            maxDate: moment().subtract(12, 'year').startOf('day'),\r\n          }}\r\n        />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <DateField\r\n        label=\"Calendar\"\r\n        mode={DateField.Mode.CALENDAR}\r\n        value={moment()}\r\n        onChange={() => {}}\r\n        options={{\r\n          defaultDate: moment()\r\n            .subtract(30, 'year')\r\n            .startOf('day'),\r\n          minDate: moment()\r\n            .subtract(100, 'year')\r\n            .startOf('day'),\r\n          maxDate: moment()\r\n            .subtract(12, 'year')\r\n            .startOf('day'),\r\n        }}\r\n      />\r\n    ),\r\n  },\r\n  {\r\n    name: 'Calendar CALENDAR inline',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n          <DateField\r\n            mode={DateField.Mode.CALENDAR}\r\n            label=\"Date de naissance\"\r\n            value={formData.dateRangeTest}\r\n            onChange={dateRangeTest => onChange({ ...formData, dateRangeTest })}\r\n            options={{\r\n              inline: true,\r\n              mode: 'range',\r\n            }}\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <DateField\r\n        mode={DateField.Mode.CALENDAR}\r\n        label=\"Date de naissance\"\r\n        value={moment()}\r\n        onChange={() => {}}\r\n        options={{\r\n          inline: true,\r\n          mode: 'range',\r\n        }}\r\n      />\r\n    ),\r\n  },\r\n]\r\n\r\nexport default {\r\n  title: 'Calendar',\r\n  getComponents: getComponents,\r\n}\r\n","const Allergen = {\r\n  BALSAM_OF_PERU: 'BALSAM_OF_PERU',\r\n  BUCKWHEAT: 'BUCKWHEAT',\r\n  CELERY: 'CELERY',\r\n  CHEESE: 'CHEESE',\r\n  CORN: 'CORN',\r\n  CRUSTACEAN: 'CRUSTACEAN',\r\n  EGG: 'EGG',\r\n  FISH: 'FISH',\r\n  FRUIT: 'FRUIT',\r\n  GARLIC: 'GARLIC',\r\n  LACTOSE: 'LACTOSE',\r\n  LUPINE: 'LUPINE',\r\n  MUSTARD: 'MUSTARD',\r\n  PEANUT: 'PEANUT',\r\n  POULTRY_MEAT: 'POULTRY_MEAT',\r\n  RED_MEAT: 'RED_MEAT',\r\n  RICE: 'RICE',\r\n  SESAME: 'SESAME',\r\n  SHELLFISH: 'SHELLFISH',\r\n  SOYA: 'SOYA',\r\n  SULPHITES: 'SULPHITES',\r\n  TARTRAZINE: 'TARTRAZINE',\r\n\r\n  // Gluten-related\r\n  GLUTEN: 'GLUTEN', // Generic\r\n  GLUTEN_OATS: 'GLUTEN_OATS',\r\n  GLUTEN_WHEAT: 'GLUTEN_WHEAT',\r\n  GLUTEN_KAMUT: 'GLUTEN_KAMUT',\r\n  GLUTEN_SPELT: 'GLUTEN_SPELT',\r\n  GLUTEN_GREEN_SPELT: 'GLUTEN_GREEN_SPELT',\r\n  GLUTEN_EINKORN: 'GLUTEN_EINKORN',\r\n  GLUTEN_RYE: 'GLUTEN_RYE',\r\n  GLUTEN_BARLEY: 'GLUTEN_BARLEY',\r\n  GLUTEN_EMMER: 'GLUTEN_EMMER',\r\n  GLUTEN_TRITICALE: 'GLUTEN_TRITICALE',\r\n\r\n  // Nuts-related\r\n  NUTS: 'NUTS', // Generic\r\n  NUTS_ALMONDS: 'NUTS_ALMONDS',\r\n  NUTS_HAZELNUTS: 'NUTS_HAZELNUTS',\r\n  NUTS_WALNUTS: 'NUTS_WALNUTS',\r\n  NUTS_CASHEW: 'NUTS_CASHEW',\r\n  NUTS_PECANS: 'NUTS_PECANS',\r\n  NUTS_BRAZIL: 'NUTS_BRAZIL',\r\n  NUTS_PISTACHES: 'NUTS_PISTACHES',\r\n  NUTS_MACADAMIA_OR_QUEENSLAND: 'NUTS_MACADAMIA_OR_QUEENSLAND',\r\n}\r\n\r\nexport default Allergen\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { countryCodes, getCountryNameForCode } from 'pmt-utils/country'\r\n\r\nimport ListChooser from 'pmt-ui/ListChooser'\r\n\r\nclass CountryChooser extends React.Component {\r\n  render() {\r\n    const { label, value = 'FR', onChange, error, helperText, ...otherProps } = this.props\r\n\r\n    const options = countryCodes.map(country => ({\r\n      label: country.name,\r\n      value: country.code,\r\n    }))\r\n\r\n    return (\r\n      <ListChooser\r\n        label={label}\r\n        title=\"Choisissez un pays\"\r\n        value={value}\r\n        valueFormatter={value => getCountryNameForCode(value) || ''}\r\n        options={options}\r\n        onChange={this.props.onChange}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nCountryChooser.propTypes = {\r\n  label: PropTypes.string.isRequired,\r\n\r\n  onChange: PropTypes.func.isRequired,\r\n\r\n  value: PropTypes.string,\r\n}\r\n\r\nexport default CountryChooser\r\n","const Diet = {\r\n  /**\r\n   * Default value, the user does not have specific diet preferences.\r\n   */\r\n  NONE: 'NONE',\r\n\r\n  /**\r\n   * Kosher foods are those that conform to the regulations of kashrut (Jewish dietary law).\r\n   * Food that may be consumed according to halakha (Jewish law) is termed kosher in english.\r\n   *\r\n   * The Torah permits only animal species which both chew the cud and have cloven hooves.\r\n   * Four animals are specifically identified as being forbidden for this reason; the hare,\r\n   * hyrax, camel, and pig – although the camel has two toes, and the hare and hyrax are hindgut\r\n   * fermenters rather than ruminants.\r\n   *\r\n   * The Torah lists winged creatures which may not be consumed, mainly birds of prey, fish-eating\r\n   * water-birds, and bats. The Torah permits any fish residing in \"the waters\" (seas and rivers)\r\n   * that has both fins and scales\r\n   *\r\n   * @link https://www.wikiwand.com/en/Kosher_foods\r\n   */\r\n  KOSHER: 'KOSHER',\r\n\r\n  /**\r\n   * is any object or action which is permissible to use or engage in, according to Islamic law.\r\n   * The term covers and designates food and drink as well as matters of daily life.\r\n   * It is one of five Ahkam—fard (compulsory), mustahabb (recommended), halal (allowed),\r\n   * makruh (disliked), haram (forbidden)—that define the morality of human action in Islam.\r\n   * The Dubai Chamber of Commerce estimated the global industry value of halal food consumer\r\n   * purchases to be US$1.1 trillion in 2013, accounting for 16.6 percent of the global food and\r\n   * beverage market, with an annual growth of 6.9 percent.\r\n   *\r\n   * @link https://www.wikiwand.com/en/Halal\r\n   */\r\n  HALAL: 'HALAL',\r\n\r\n  /**\r\n   * The practice of abstaining from the consumption of meat (red meat, poultry, seafood, and the\r\n   * flesh of any other animal), and may also include abstention from by-products of animal\r\n   * slaughter.\r\n   */\r\n  VEGETARIAN: 'VEGETARIAN',\r\n\r\n  /**\r\n   * Veganism is both the practice of abstaining from the use of animal products, particularly in\r\n   * diet, and an associated philosophy that rejects the commodity status of animals.\r\n   *\r\n   * Note: You can spot those guys if they tell you \"Hi, i'm vegan !\"\r\n   *\r\n   * Note: In this case, you can ask Hand to bring the flamethrower in order to deal with this\r\n   * infidel.\r\n   * Long life to the Meat King !\r\n   *\r\n   * (no dairy produce / eggs)\r\n   */\r\n  VEGAN: 'VEGAN',\r\n}\r\n\r\nexport default Diet\r\n","const Gender = {\r\n  NONE: 0,\r\n  MALE: 1,\r\n  FEMALE: 2,\r\n}\r\n\r\n\r\nexport default Gender\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Celery = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 16.5 2 C 15.671875 2 15 2.671875 15 3.5 C 15 3.738281 15.058594 3.957031 15.15625 4.15625 C 14.957031 4.058594 14.738281 4 14.5 4 C 13.671875 4 13 4.671875 13 5.5 C 13 5.960938 13.234375 6.351563 13.5625 6.625 C 12.648438 7.449219 11.175781 8.40625 9.59375 9.4375 C 9.285156 9.640625 4.824219 12.753906 3.96875 13.5625 C 3.863281 13.648438 3.769531 13.730469 3.6875 13.8125 C 1.816406 15.683594 1.816406 18.722656 3.6875 20.59375 C 5.558594 22.464844 8.699219 22.5625 10.46875 20.59375 C 13.203125 17.558594 15.898438 13.265625 17.25 11.34375 C 17.519531 11.742188 17.984375 12 18.5 12 C 19.191406 12 19.765625 11.511719 19.9375 10.875 C 20.109375 10.945313 20.300781 11 20.5 11 C 21.328125 11 22 10.328125 22 9.5 C 22 9.113281 21.863281 8.765625 21.625 8.5 C 21.863281 8.234375 22 7.886719 22 7.5 C 22 6.742188 21.445313 6.136719 20.71875 6.03125 C 20.898438 5.730469 21 5.375 21 5 C 21 3.894531 20.105469 3 19 3 C 18.625 3 18.269531 3.101563 17.96875 3.28125 C 17.863281 2.554688 17.257813 2 16.5 2 Z M 15 7.9375 C 14.636719 8.316406 9.933594 13.183594 7.75 15.1875 C 5.628906 17.136719 5.460938 15.1875 8.4375 12.65625 C 11.230469 10.28125 13.847656 8.933594 15 7.9375 Z M 15.875 9.65625 C 15.925781 9.691406 15.980469 9.722656 16.03125 9.75 C 14.886719 11.257813 13.03125 14.34375 11.25 16.625 C 8.292969 20.300781 7.3125 18.449219 8.25 17.40625 C 12.332031 12.867188 14.785156 10.597656 15.875 9.65625 Z \" />\r\n  </SvgIcon>\r\n)\r\nCelery = pure(Celery)\r\nCelery.displayName = 'Celery'\r\nCelery.muiName = 'SvgIcon'\r\n\r\nexport default Celery\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Cheese = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 8.546875 2.0019531 A 1.0001 1.0001 0 0 0 8.2792969 2.0507812 C 3.1839636 3.7477497 2.0253906 8.6191406 2.0253906 8.6191406 A 1.0001 1.0001 0 0 0 2 8.84375 L 2 19 A 1.0001 1.0001 0 0 0 3 20 L 21 20 A 1.0001 1.0001 0 0 0 22 19 L 22 9 A 1.0001 1.0001 0 0 0 21.435547 8.0996094 L 9.03125 2.0996094 A 1.0001 1.0001 0 0 0 8.546875 2.0019531 z M 8.6074219 4.1171875 L 16.636719 8 L 4.390625 8 C 4.9254567 6.8698858 6.1164914 5.0772748 8.6074219 4.1171875 z M 4 10 L 20 10 L 20 18 L 4 18 L 4 10 z M 14 11 A 2 2 0 0 0 12 13 A 2 2 0 0 0 14 15 A 2 2 0 0 0 16 13 A 2 2 0 0 0 14 11 z M 7.5 14 A 1.5 1.5 0 0 0 6 15.5 A 1.5 1.5 0 0 0 7.5 17 A 1.5 1.5 0 0 0 9 15.5 A 1.5 1.5 0 0 0 7.5 14 z\" />\r\n  </SvgIcon>\r\n)\r\nCheese = pure(Cheese)\r\nCheese.displayName = 'Cheese'\r\nCheese.muiName = 'SvgIcon'\r\n\r\nexport default Cheese\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Crab = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 5 2 C 3 2 2 3.789063 2 6 C 2 6.714844 2.101563 7.359375 2.3125 7.9375 C 2.125 8.242188 2.03125 8.613281 2.03125 9 C 2.03125 9.988281 2.746094 10.804688 3.6875 10.96875 L 6.4375 12.34375 C 6.328125 12.507813 6.234375 12.613281 6.125 12.78125 L 2.71875 12.03125 L 2.28125 13.96875 L 4.96875 14.5625 C 4.757813 14.898438 4.597656 15.160156 4.5 15.375 L 2.21875 16.03125 L 2.78125 17.96875 L 5.5625 17.1875 C 5.890625 17.433594 6.230469 17.660156 6.625 17.9375 L 4.28125 20.28125 L 5.71875 21.71875 L 8.3125 19.125 C 9.3125 19.816406 10.324219 20.507813 11 21 C 11.441406 21.320313 11.753906 21.46875 12.03125 21.46875 C 12.332031 21.46875 12.589844 21.300781 13 21 C 13.671875 20.507813 14.664063 19.792969 15.65625 19.09375 L 18.28125 21.71875 L 19.71875 20.28125 L 17.34375 17.90625 C 17.714844 17.644531 18.089844 17.378906 18.40625 17.15625 L 21.21875 17.96875 L 21.78125 16.03125 L 19.5625 15.40625 C 19.5 15.28125 19.453125 15.167969 19.34375 15 C 19.273438 14.890625 19.148438 14.691406 19.0625 14.5625 L 21.71875 13.96875 L 21.28125 12.03125 L 17.875 12.78125 C 17.761719 12.613281 17.671875 12.503906 17.5625 12.34375 L 20.28125 10.96875 C 21.253906 10.832031 22 10.007813 22 9 C 22 8.574219 21.851563 8.167969 21.625 7.84375 C 21.851563 7.289063 22 6.675781 22 6 C 22 3.789063 20.660156 2 19 2 L 19 6.375 L 15.71875 3.125 C 14.542969 4.300781 14.875 6.5 16.4375 8.0625 C 16.917969 8.542969 17.449219 8.886719 18 9.125 C 18.015625 9.363281 18.066406 9.574219 18.15625 9.78125 L 16.40625 10.65625 C 15.773438 9.886719 14.589844 9 12 9 C 9.382813 9 8.253906 9.945313 7.625 10.6875 L 5.84375 9.78125 C 5.933594 9.574219 5.984375 9.363281 6 9.125 C 6.550781 8.886719 7.113281 8.542969 7.59375 8.0625 C 9.15625 6.5 9.453125 4.300781 8.28125 3.125 L 5 6.40625 Z M 12 11 C 14.257813 11 14.773438 11.792969 15 12.125 L 15.40625 12.71875 C 15.953125 13.53125 16.730469 14.65625 17.28125 15.5 C 16.839844 15.8125 16.34375 16.191406 15.8125 16.5625 C 14.492188 17.492188 12.996094 18.527344 12 19.25 C 11.40625 18.820313 10.644531 18.304688 9.84375 17.75 C 8.769531 17.007813 7.578125 16.171875 6.71875 15.53125 C 7.230469 14.734375 8.355469 12.96875 8.9375 12.1875 C 9.246094 11.769531 9.824219 11 12 11 Z \" />\r\n  </SvgIcon>\r\n)\r\nCrab = pure(Crab)\r\nCrab.displayName = 'Crab'\r\nCrab.muiName = 'SvgIcon'\r\n\r\nexport default Crab\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Egg = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 9 2 C 6.898438 2 5.175781 3.484375 3.96875 5.40625 C 2.761719 7.328125 2 9.773438 2 12.1875 C 2 15.234375 3.339844 17.570313 5.21875 18.78125 C 6.5 20.628906 8.75 22 11.8125 22 C 14.226563 22 16.671875 21.238281 18.59375 20.03125 C 20.515625 18.824219 22 17.101563 22 15 C 22 12.898438 20.515625 11.175781 18.59375 9.96875 C 17.652344 9.375 16.566406 8.902344 15.4375 8.5625 C 14.941406 6.929688 14.175781 5.40625 13.15625 4.21875 C 12.058594 2.9375 10.636719 2 9 2 Z M 9 4 C 9.863281 4 10.804688 4.503906 11.65625 5.5 C 12.238281 6.179688 12.726563 7.078125 13.125 8.0625 C 12.691406 8.015625 12.25 8 11.8125 8 C 7.519531 8 4.808594 10.683594 4.15625 13.625 C 4.074219 13.179688 4 12.707031 4 12.1875 C 4 10.199219 4.664063 8.046875 5.65625 6.46875 C 6.648438 4.890625 7.898438 4 9 4 Z M 11.8125 10 C 13.800781 10 15.953125 10.664063 17.53125 11.65625 C 19.109375 12.648438 20 13.898438 20 15 C 20 16.101563 19.109375 17.351563 17.53125 18.34375 C 15.953125 19.335938 13.800781 20 11.8125 20 C 7.773438 20 6 17.371094 6 15 C 6 12.628906 7.773438 10 11.8125 10 Z \" />\r\n  </SvgIcon>\r\n)\r\nEgg = pure(Egg)\r\nEgg.displayName = 'Egg'\r\nEgg.muiName = 'SvgIcon'\r\n\r\nexport default Egg\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Fish = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 10 4 L 9.46875 8.03125 C 7.8125 8.796875 6.367188 9.855469 5.25 10.8125 C 4.539063 9.859375 3.386719 9.179688 2 9 L 2 17 C 3.464844 16.808594 4.679688 16.070313 5.375 15.03125 C 6.753906 16.023438 8.644531 17.082031 11 17.625 L 11 20 C 11 20 12.761719 19.625 14.21875 18 C 20.046875 17.878906 22 13 22 13 C 22 13 20.378906 8.164063 15.46875 7.1875 C 13.492188 4.769531 10 4 10 4 Z M 13.6875 9 C 17.3125 9 19.113281 11.601563 19.78125 12.90625 C 19.09375 13.992188 17.363281 16 14 16 C 10.46875 16 7.628906 14.269531 6 13 C 6 12.933594 5.972656 12.878906 5.96875 12.8125 C 7.175781 11.714844 8.867188 10.457031 10.6875 9.6875 L 12 9.25 C 12.5625 9.105469 13.125 9 13.6875 9 Z M 16.5 11 C 15.671875 11 15 11.671875 15 12.5 C 15 13.328125 15.671875 14 16.5 14 C 17.328125 14 18 13.328125 18 12.5 C 18 11.671875 17.328125 11 16.5 11 Z \" />\r\n  </SvgIcon>\r\n)\r\nFish = pure(Fish)\r\nFish.displayName = 'Fish'\r\nFish.muiName = 'SvgIcon'\r\n\r\nexport default Fish\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Lupine = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 23.132812 4.597656 C 23.84375 3.882812 24.132812 2.992188 23.941406 2.09375 C 23.773438 1.285156 23.296875 0.789062 23.242188 0.734375 C 22.949219 0.4375 22.195312 0 21.320312 0 C 20.601562 0 19.929688 0.292969 19.382812 0.84375 C 19.070312 1.160156 18.820312 1.660156 18.617188 2.398438 C 18.398438 2.097656 18.113281 1.851562 17.761719 1.667969 C 17.324219 1.4375 16.863281 1.355469 16.601562 1.355469 C 16.347656 1.355469 15.769531 1.457031 15.214844 1.835938 C 14.503906 2.320312 14.109375 3.085938 14.109375 3.988281 C 14.109375 4.210938 14.148438 4.539062 14.390625 5.066406 C 13.84375 4.699219 13.246094 4.59375 12.9375 4.59375 C 12.597656 4.59375 12.003906 4.75 11.503906 5.089844 C 10.765625 5.59375 10.359375 6.386719 10.359375 7.320312 C 10.359375 7.421875 10.367188 7.542969 10.398438 7.695312 C 9.976562 7.519531 9.566406 7.453125 9.3125 7.453125 C 8.546875 7.453125 6.445312 8.175781 6.445312 10.507812 C 6.445312 10.761719 6.492188 11.140625 6.777344 11.757812 C 6.667969 11.679688 6.550781 11.605469 6.429688 11.535156 C 5.683594 11.121094 4.996094 11.109375 4.921875 11.109375 C 4.097656 11.109375 1.828125 11.890625 1.828125 14.410156 C 1.828125 14.851562 1.957031 15.628906 3.0625 17.289062 C 3.449219 17.867188 3.832031 18.367188 4.039062 18.632812 L 0.273438 22.398438 C -0.0898438 22.765625 -0.0898438 23.359375 0.273438 23.726562 C 0.457031 23.910156 0.699219 24 0.9375 24 C 1.179688 24 1.417969 23.910156 1.601562 23.726562 L 5.304688 20.019531 C 5.582031 20.234375 6.042969 20.585938 6.570312 20.9375 C 8.230469 22.042969 9.007812 22.171875 9.449219 22.171875 C 9.96875 22.171875 10.386719 21.753906 10.386719 21.234375 C 10.386719 20.714844 9.96875 20.296875 9.449219 20.296875 C 9.429688 20.296875 8.980469 20.285156 7.625 19.382812 C 7.609375 19.375 7.597656 19.363281 7.582031 19.355469 C 9.125 18.992188 9.671875 18.589844 9.953125 18.3125 C 10.046875 18.21875 10.128906 18.128906 10.203125 18.039062 C 10.769531 18.363281 10.867188 19.039062 10.875 19.097656 C 10.886719 19.605469 11.300781 20.015625 11.8125 20.015625 C 12.332031 20.015625 12.75 19.597656 12.75 19.078125 C 12.75 18.722656 12.605469 18.117188 12.285156 17.5625 C 12.207031 17.429688 12.117188 17.300781 12.027344 17.183594 C 12.699219 17.503906 13.101562 17.554688 13.367188 17.554688 C 14.46875 17.554688 15.375 17.101562 15.914062 16.28125 C 16.289062 15.710938 16.421875 15.066406 16.421875 14.6875 C 16.421875 14.417969 16.332031 13.996094 16.144531 13.578125 C 16.347656 13.628906 16.507812 13.640625 16.632812 13.640625 C 17.613281 13.640625 18.421875 13.234375 18.910156 12.492188 C 19.242188 11.984375 19.359375 11.40625 19.359375 11.0625 C 19.359375 10.738281 19.234375 10.195312 18.90625 9.6875 C 19.503906 9.980469 19.863281 10.023438 20.101562 10.023438 C 21.050781 10.023438 21.828125 9.628906 22.300781 8.914062 C 22.621094 8.425781 22.734375 7.863281 22.734375 7.535156 C 22.734375 7.070312 22.46875 6.144531 21.710938 5.5625 C 21.738281 5.480469 21.757812 5.398438 21.777344 5.3125 C 22.410156 5.117188 22.847656 4.886719 23.132812 4.597656 Z M 21.441406 1.882812 C 21.660156 1.914062 21.847656 2.019531 21.921875 2.066406 C 21.976562 2.140625 22.082031 2.3125 22.113281 2.511719 C 22.144531 2.675781 22.140625 2.933594 21.804688 3.273438 C 21.792969 3.285156 21.703125 3.351562 21.441406 3.449219 C 21.332031 3.269531 21.214844 3.125 21.113281 3.023438 C 21.007812 2.917969 20.796875 2.757812 20.507812 2.617188 C 20.621094 2.285156 20.703125 2.175781 20.714844 2.164062 C 20.945312 1.933594 21.167969 1.847656 21.441406 1.882812 Z M 10.863281 13.296875 C 10.753906 13.320312 10.648438 13.339844 10.542969 13.355469 C 10.5625 13.257812 10.582031 13.15625 10.601562 13.050781 C 10.882812 11.644531 11.15625 11.339844 11.160156 11.339844 C 11.410156 11.085938 11.664062 10.964844 11.949219 10.964844 C 12 10.964844 12.050781 10.96875 12.101562 10.976562 C 12.390625 11.015625 12.628906 11.160156 12.699219 11.214844 C 12.742188 11.269531 12.90625 11.484375 12.957031 11.765625 C 12.996094 11.980469 12.996094 12.308594 12.5625 12.742188 C 12.5625 12.746094 12.261719 13.019531 10.863281 13.296875 Z M 15.242188 7.769531 C 15.519531 7.496094 15.742188 7.484375 15.90625 7.507812 C 16.109375 7.535156 16.28125 7.632812 16.347656 7.675781 C 16.398438 7.742188 16.496094 7.894531 16.527344 8.074219 C 16.550781 8.222656 16.546875 8.449219 16.238281 8.761719 C 16.070312 8.902344 15.488281 9.074219 14.796875 9.207031 C 14.933594 8.515625 15.105469 7.9375 15.242188 7.769531 Z M 18.824219 4.445312 C 19.066406 4.203125 19.261719 4.195312 19.402344 4.214844 C 19.582031 4.238281 19.734375 4.320312 19.796875 4.363281 C 19.824219 4.398438 19.863281 4.460938 19.898438 4.535156 C 19.890625 4.621094 19.898438 4.710938 19.917969 4.796875 C 19.925781 4.835938 19.9375 4.871094 19.949219 4.90625 C 19.925781 5.011719 19.859375 5.148438 19.695312 5.316406 C 19.539062 5.441406 19.035156 5.589844 18.425781 5.714844 C 18.546875 5.105469 18.699219 4.601562 18.824219 4.445312 Z M 16.234375 3.410156 C 16.375 3.300781 16.542969 3.25 16.617188 3.234375 C 16.730469 3.25 17.019531 3.316406 17.148438 3.59375 C 16.972656 3.914062 16.789062 4.402344 16.621094 5.1875 C 16.265625 4.660156 16.007812 4.183594 15.984375 3.980469 C 15.988281 3.644531 16.117188 3.5 16.234375 3.410156 Z M 12.519531 6.667969 C 12.683594 6.542969 12.875 6.488281 12.953125 6.472656 C 13.074219 6.488281 13.429688 6.5625 13.570312 6.90625 C 13.378906 7.253906 13.167969 7.800781 12.984375 8.71875 C 12.566406 8.105469 12.257812 7.542969 12.234375 7.316406 C 12.234375 7.019531 12.324219 6.816406 12.519531 6.667969 Z M 8.734375 9.589844 C 8.964844 9.414062 9.230469 9.347656 9.328125 9.332031 C 9.441406 9.339844 9.859375 9.40625 10.109375 9.761719 C 10.015625 9.839844 9.921875 9.921875 9.832031 10.011719 C 9.59375 10.25 9.265625 10.691406 8.957031 11.835938 C 8.335938 10.855469 8.320312 10.507812 8.320312 10.507812 C 8.320312 10.09375 8.453125 9.800781 8.734375 9.589844 Z M 4.214844 13.292969 C 4.503906 13.082031 4.824219 13 4.933594 12.984375 C 5.003906 12.992188 5.273438 13.03125 5.542969 13.191406 C 5.726562 13.296875 5.863281 13.433594 5.960938 13.601562 C 5.828125 13.703125 5.703125 13.8125 5.578125 13.9375 C 5.308594 14.207031 4.921875 14.730469 4.570312 16.164062 C 3.714844 14.867188 3.703125 14.429688 3.703125 14.410156 C 3.703125 13.90625 3.867188 13.550781 4.214844 13.292969 Z M 6.691406 17.628906 C 6.511719 17.667969 6.332031 17.699219 6.164062 17.726562 C 6.191406 17.558594 6.222656 17.378906 6.261719 17.195312 C 6.578125 15.601562 6.890625 15.273438 6.90625 15.261719 C 7.207031 14.957031 7.515625 14.8125 7.863281 14.8125 C 7.925781 14.8125 7.992188 14.816406 8.058594 14.828125 C 8.390625 14.875 8.65625 15.03125 8.757812 15.105469 C 8.765625 15.113281 8.769531 15.117188 8.777344 15.125 C 8.785156 15.132812 8.792969 15.140625 8.800781 15.144531 C 8.867188 15.230469 9.039062 15.472656 9.097656 15.789062 C 9.175781 16.203125 9.019531 16.59375 8.628906 16.984375 C 8.617188 17 8.289062 17.308594 6.691406 17.628906 Z M 14.335938 15.269531 C 14.214844 15.445312 13.980469 15.679688 13.367188 15.679688 C 13.363281 15.679688 12.996094 15.660156 11.9375 14.976562 C 13.175781 14.660156 13.644531 14.316406 13.890625 14.070312 C 13.949219 14.007812 14.007812 13.945312 14.0625 13.882812 C 14.4375 14.148438 14.53125 14.605469 14.542969 14.699219 C 14.539062 14.769531 14.5 15.03125 14.335938 15.269531 Z M 17.328125 11.484375 C 17.242188 11.605469 17.078125 11.765625 16.636719 11.765625 C 16.414062 11.746094 15.859375 11.4375 15.253906 11.027344 C 16.160156 10.847656 16.714844 10.640625 17.066406 10.453125 C 17.375 10.617188 17.464844 10.984375 17.480469 11.078125 C 17.472656 11.160156 17.429688 11.335938 17.328125 11.484375 Z M 20.71875 7.90625 C 20.671875 7.972656 20.546875 8.148438 20.109375 8.148438 C 19.910156 8.125 19.441406 7.875 18.921875 7.523438 C 19.699219 7.363281 20.1875 7.179688 20.511719 7.011719 C 20.761719 7.160156 20.839844 7.457031 20.855469 7.546875 C 20.847656 7.621094 20.808594 7.777344 20.71875 7.90625 Z M 20.71875 7.90625 \" />\r\n  </SvgIcon>\r\n)\r\nLupine = pure(Lupine)\r\nLupine.displayName = 'Lupine'\r\nLupine.muiName = 'SvgIcon'\r\n\r\nexport default Lupine\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Milk = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 10 2 C 9.476563 2 8.941406 2.183594 8.5625 2.5625 C 8.183594 2.941406 8 3.476563 8 4 L 8 5 C 8 5.398438 8.21875 5.757813 8.4375 6.09375 C 8.394531 6.15625 8.324219 6.183594 8.28125 6.25 C 7.898438 6.832031 7.515625 7.558594 7.1875 8.34375 C 6.53125 9.910156 6 11.605469 6 12.90625 L 6 19 C 6 20.644531 7.355469 22 9 22 L 15 22 C 16.644531 22 18 20.644531 18 19 L 18 12.90625 C 18 11.605469 17.46875 9.910156 16.8125 8.34375 C 16.484375 7.558594 16.101563 6.832031 15.71875 6.25 C 15.675781 6.183594 15.605469 6.15625 15.5625 6.09375 C 15.78125 5.757813 16 5.398438 16 5 L 16 4 C 16 3.476563 15.816406 2.941406 15.4375 2.5625 C 15.058594 2.183594 14.523438 2 14 2 Z M 10 4 L 14 4 L 14 5 L 10.03125 5 C 10.019531 5 10.011719 5 10 5 Z M 10.21875 7 L 13.78125 7 C 13.851563 7.074219 13.949219 7.199219 14.0625 7.375 C 14.335938 7.789063 14.640625 8.421875 14.9375 9.125 C 15.53125 10.535156 16 12.308594 16 12.90625 L 16 19 C 16 19.554688 15.554688 20 15 20 L 9 20 C 8.445313 20 8 19.554688 8 19 L 8 12.90625 C 8 12.308594 8.46875 10.535156 9.0625 9.125 C 9.359375 8.421875 9.664063 7.789063 9.9375 7.375 C 10.050781 7.199219 10.148438 7.074219 10.21875 7 Z \" />\r\n  </SvgIcon>\r\n)\r\nMilk = pure(Milk)\r\nMilk.displayName = 'Milk'\r\nMilk.muiName = 'SvgIcon'\r\n\r\nexport default Milk\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Mustard = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 10.851562 5.101562 L 11.507812 0.898438 L 12.492188 0.898438 L 13.148438 5.101562 Z M 10.851562 5.101562 \" />\r\n    <path\r\n      fill=\"none\"\r\n      d=\"M 12.238281 1.199219 L 12.800781 4.800781 L 11.203125 4.800781 L 11.765625 1.199219 L 12.238281 1.199219 M 12.75 0.601562 L 11.25 0.601562 L 10.5 5.398438 L 13.5 5.398438 Z M 12.75 0.601562 \"\r\n    />\r\n    <path\r\n      fill=\"none\"\r\n      d=\"M 9.300781 7.5 L 9.300781 6 C 9.300781 5.503906 9.703125 5.101562 10.199219 5.101562 L 13.800781 5.101562 C 14.296875 5.101562 14.699219 5.503906 14.699219 6 L 14.699219 7.5 Z M 9.300781 7.5 \"\r\n    />\r\n    <path d=\"M 13.800781 5.398438 C 14.128906 5.398438 14.398438 5.667969 14.398438 6 L 14.398438 7.199219 L 9.601562 7.199219 L 9.601562 6 C 9.601562 5.667969 9.871094 5.398438 10.199219 5.398438 L 13.800781 5.398438 M 13.800781 4.800781 L 10.199219 4.800781 C 9.535156 4.800781 9 5.335938 9 6 L 9 7.800781 L 15 7.800781 L 15 6 C 15 5.335938 14.464844 4.800781 13.800781 4.800781 Z M 13.800781 4.800781 \" />\r\n    <path\r\n      fill=\"none\"\r\n      d=\"M 8.398438 23.101562 C 7.902344 23.101562 7.5 22.695312 7.5 22.199219 L 7.5 8.398438 C 7.5 7.902344 7.902344 7.5 8.398438 7.5 L 15.601562 7.5 C 16.097656 7.5 16.5 7.902344 16.5 8.398438 L 16.5 22.199219 C 16.5 22.695312 16.097656 23.101562 15.601562 23.101562 Z M 8.398438 23.101562 \"\r\n    />\r\n    <path d=\"M 15.601562 7.800781 C 15.929688 7.800781 16.199219 8.070312 16.199219 8.398438 L 16.199219 22.199219 C 16.199219 22.53125 15.929688 22.800781 15.601562 22.800781 L 8.398438 22.800781 C 8.070312 22.800781 7.800781 22.53125 7.800781 22.199219 L 7.800781 8.398438 C 7.800781 8.070312 8.070312 7.800781 8.398438 7.800781 L 15.601562 7.800781 M 15.601562 7.199219 L 8.398438 7.199219 C 7.738281 7.199219 7.199219 7.738281 7.199219 8.398438 L 7.199219 22.199219 C 7.199219 22.863281 7.738281 23.398438 8.398438 23.398438 L 15.601562 23.398438 C 16.261719 23.398438 16.800781 22.863281 16.800781 22.199219 L 16.800781 8.398438 C 16.800781 7.738281 16.261719 7.199219 15.601562 7.199219 Z M 15.601562 7.199219 \" />\r\n  </SvgIcon>\r\n)\r\nMustard = pure(Mustard)\r\nMustard.displayName = 'Mustard'\r\nMustard.muiName = 'SvgIcon'\r\n\r\nexport default Mustard\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Nut = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M21.991,10.62c-0.122-2.068-1.515-3.813-2.441-4.758C20.239,5.169,21,4.154,21,2h-2c0,1.386-0.364,1.941-0.864,2.446 c-0.944-0.927-2.678-2.311-4.738-2.437c-1.507-0.085-2.884,0.481-4.105,1.703C9.111,3.894,9.01,4.137,9.003,4.39L9,4.387 C8.304,4.883,7.638,5.45,7.021,6.073C4.353,8.767,3,11.77,3,15c0,1.182,0.415,2.104,0.878,2.919 c-0.065,0.312-0.535,1.151-0.877,1.702l1.374,1.38c0.541-0.333,1.388-0.805,1.701-0.875C7.037,20.681,7.844,21,9,21 c3.129,0,6.174-1.405,8.808-4.063c0.268-0.271,1.098-1.14,1.578-1.956c0,0,0.002,0,0.002,0C19.454,14.993,19.52,15,19.586,15 c0.262,0,0.518-0.104,0.707-0.293C21.508,13.493,22.08,12.117,21.991,10.62z M16.386,15.529C14.137,17.8,11.583,19,9,19 c-0.756,0-1.234-0.2-1.998-0.649c-0.165-0.117-0.488-0.307-1.131-0.216c0.091-0.656-0.103-0.993-0.234-1.169 C5.243,16.277,5,15.702,5,15c0-2.685,1.158-5.214,3.441-7.52c0.387-0.39,0.801-0.744,1.224-1.078c0.555,1.194,1.553,2.86,3.315,4.62 c1.693,1.691,3.299,2.679,4.482,3.246C17.169,14.681,16.746,15.166,16.386,15.529z M19.267,12.86 c-0.889-0.316-2.798-1.18-4.873-3.252c-2.074-2.073-2.938-3.981-3.254-4.87c0.676-0.536,1.379-0.768,2.131-0.733 c2.151,0.126,4.036,2.483,4.054,2.505c0.049,0.063,0.105,0.12,0.168,0.17c0.024,0.019,2.375,1.927,2.501,4.059 C20.039,11.49,19.801,12.188,19.267,12.86z\" />\r\n  </SvgIcon>\r\n)\r\nNut = pure(Nut)\r\nNut.displayName = 'Nut'\r\nNut.muiName = 'SvgIcon'\r\n\r\nexport default Nut\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Peanut = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 13 3 C 11.558594 3 10.292969 3.757813 9.59375 4.90625 C 9.394531 5.234375 9.265625 5.601563 9.125 5.96875 C 8.578125 7.398438 7.398438 8.578125 5.96875 9.125 C 5.601563 9.265625 5.234375 9.394531 4.90625 9.59375 C 3.964844 10.164063 3.304688 11.109375 3.09375 12.21875 C 3.0625 12.347656 3.019531 12.484375 3.03125 12.625 C 3.042969 12.804688 3.195313 13 3.375 13 L 3.625 13 C 7.09375 13 8.46875 12.535156 9.75 11.90625 C 11.238281 11.175781 12.777344 9.019531 12.96875 6.71875 C 12.988281 6.878906 13 6.828125 13 7 C 13 9.121094 12.25 11.472656 10.28125 12.5625 C 9.679688 12.890625 8.171875 13.789063 4 14 L 3.5 14 C 3.378906 14 3.277344 14.054688 3.1875 14.125 C 3.078125 14.214844 3 14.339844 3 14.5 C 3 14.597656 3.058594 14.667969 3.09375 14.75 C 3.746094 16.195313 5.601563 17 7 17 C 12.519531 17 17 12.519531 17 7 C 17 4.789063 15.210938 3 13 3 Z M 16.9375 12.4375 C 16.273438 13.773438 15.320313 14.960938 14.15625 15.875 C 14.1875 15.890625 14.21875 15.890625 14.25 15.90625 C 15.53125 16.535156 16.90625 17 20.375 17 L 20.625 17 C 20.804688 17 20.957031 16.804688 20.96875 16.625 C 20.980469 16.484375 20.9375 16.347656 20.90625 16.21875 C 20.695313 15.109375 20.035156 14.164063 19.09375 13.59375 C 18.765625 13.394531 18.398438 13.265625 18.03125 13.125 C 17.628906 12.96875 17.277344 12.699219 16.9375 12.4375 Z M 13.4375 16.375 C 12.328125 17.097656 11.074219 17.609375 9.71875 17.84375 C 11.542969 19.785156 14.128906 21 17 21 C 18.398438 21 20.253906 20.195313 20.90625 18.75 C 20.941406 18.667969 21 18.597656 21 18.5 C 21 18.339844 20.921875 18.214844 20.8125 18.125 C 20.722656 18.054688 20.621094 18 20.5 18 L 20 18 C 15.828125 17.789063 14.320313 16.890625 13.71875 16.5625 C 13.621094 16.507813 13.527344 16.433594 13.4375 16.375 Z \" />\r\n  </SvgIcon>\r\n)\r\nPeanut = pure(Peanut)\r\nPeanut.displayName = 'Peanut'\r\nPeanut.muiName = 'SvgIcon'\r\n\r\nexport default Peanut\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Shellfish = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 9.3125 2.03125 C 7.824219 2.089844 5.96875 3.0625 6.59375 4.6875 L 9.09375 10.8125 L 5.3125 5.90625 C 3.8125 4.105469 1.101563 7.988281 3 9.1875 L 7.40625 12.8125 L 3.40625 11.1875 C 2.304688 10.789063 2.195313 11.511719 2.09375 11.8125 C 1.695313 13.113281 2.511719 14.414063 3.8125 14.8125 C 5.210938 15.210938 6.898438 15.988281 8.5 17.1875 C 10.101563 18.386719 10.304688 20.09375 11.90625 20.09375 L 12.09375 20.09375 C 13.59375 20.09375 13.898438 18.386719 15.5 17.1875 C 17.101563 15.988281 18.886719 15.3125 20.1875 14.8125 C 21.488281 14.3125 22.304688 13.011719 21.90625 11.8125 C 21.804688 11.511719 21.695313 10.789063 20.59375 11.1875 L 16.59375 12.8125 L 21 9.1875 C 22.898438 7.988281 20.210938 4.105469 18.8125 5.90625 L 15 10.8125 L 17.5 4.6875 C 18.398438 2.085938 13.101563 1.101563 13 3 L 12 8.6875 L 11 3 C 10.960938 2.289063 10.207031 1.996094 9.3125 2.03125 Z M 8 19 C 7.699219 19.199219 7.394531 19.898438 7.09375 20.5 C 6.695313 21.300781 7.199219 22 8 22 L 12 22 C 9.800781 22 9.300781 19 8 19 Z M 12 22 L 16 22 C 16.800781 22 17.304688 21.300781 16.90625 20.5 C 16.605469 19.898438 16.300781 19.199219 16 19 C 14.699219 19 14.199219 22 12 22 Z \" />\r\n  </SvgIcon>\r\n)\r\nShellfish = pure(Shellfish)\r\nShellfish.displayName = 'Shellfish'\r\nShellfish.muiName = 'SvgIcon'\r\n\r\nexport default Shellfish\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Sesame = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 17.9375 2 C 15.695313 1.960938 12.554688 2.382813 10.84375 4.09375 C 7.464844 7.472656 2.875 15.4375 2.875 15.4375 L 8.5625 21.125 C 8.5625 21.125 16.527344 16.53125 19.90625 13.15625 C 22.644531 10.417969 22.078125 3.984375 21.625 3.53125 C 21.175781 3.082031 20.636719 3.363281 20.1875 3.8125 C 20.632813 3.363281 20.917969 2.824219 20.46875 2.375 C 20.300781 2.207031 19.285156 2.023438 17.9375 2 Z M 17.65625 3.21875 C 18.015625 3.21875 18.28125 3.554688 18.28125 4.03125 C 18.28125 4.507813 17.65625 5.21875 17.65625 5.21875 C 17.65625 5.21875 17 4.597656 17 4.03125 C 17 3.464844 17.296875 3.21875 17.65625 3.21875 Z M 13.09375 4.34375 C 13.453125 4.34375 13.75 4.679688 13.75 5.15625 C 13.75 5.632813 13.09375 6.34375 13.09375 6.34375 C 13.09375 6.34375 12.46875 5.722656 12.46875 5.15625 C 12.46875 4.589844 12.734375 4.34375 13.09375 4.34375 Z M 15.375 4.5 C 15.914063 4.5 16.34375 5.003906 16.34375 5.71875 C 16.34375 6.433594 15.375 7.5 15.375 7.5 C 15.375 7.5 14.40625 6.570313 14.40625 5.71875 C 14.40625 4.867188 14.835938 4.5 15.375 4.5 Z M 19.96875 5.71875 C 20.445313 5.71875 20.78125 5.984375 20.78125 6.34375 C 20.78125 6.703125 20.535156 7 19.96875 7 C 19.402344 7 18.78125 6.34375 18.78125 6.34375 C 18.78125 6.34375 19.492188 5.71875 19.96875 5.71875 Z M 10.84375 6.625 C 11.203125 6.625 11.5 6.960938 11.5 7.4375 C 11.5 7.914063 10.84375 8.625 10.84375 8.625 C 10.84375 8.625 10.1875 8.003906 10.1875 7.4375 C 10.1875 6.871094 10.484375 6.625 10.84375 6.625 Z M 13.09375 6.75 C 13.632813 6.75 14.0625 7.253906 14.0625 7.96875 C 14.0625 8.683594 13.09375 9.75 13.09375 9.75 C 13.09375 9.75 12.125 8.820313 12.125 7.96875 C 12.125 7.117188 12.554688 6.75 13.09375 6.75 Z M 18.28125 7.65625 C 19 7.65625 19.5 8.085938 19.5 8.625 C 19.5 9.164063 19.132813 9.59375 18.28125 9.59375 C 17.429688 9.59375 16.5 8.625 16.5 8.625 C 16.5 8.625 17.566406 7.65625 18.28125 7.65625 Z M 8.5625 8.90625 C 8.921875 8.90625 9.21875 9.242188 9.21875 9.71875 C 9.21875 10.195313 8.5625 10.90625 8.5625 10.90625 C 8.5625 10.90625 7.90625 10.285156 7.90625 9.71875 C 7.90625 9.152344 8.203125 8.90625 8.5625 8.90625 Z M 10.84375 9.03125 C 11.382813 9.03125 11.8125 9.535156 11.8125 10.25 C 11.8125 10.964844 10.84375 12.03125 10.84375 12.03125 C 10.84375 12.03125 9.84375 11.101563 9.84375 10.25 C 9.84375 9.398438 10.304688 9.03125 10.84375 9.03125 Z M 16.03125 9.90625 C 16.746094 9.90625 17.21875 10.367188 17.21875 10.90625 C 17.21875 11.445313 16.882813 11.875 16.03125 11.875 C 15.179688 11.875 14.21875 10.90625 14.21875 10.90625 C 14.21875 10.90625 15.316406 9.90625 16.03125 9.90625 Z M 18.84375 10.25 C 19.320313 10.25 19.65625 10.546875 19.65625 10.90625 C 19.65625 11.265625 19.410156 11.53125 18.84375 11.53125 C 18.277344 11.53125 17.65625 10.90625 17.65625 10.90625 C 17.65625 10.90625 18.367188 10.25 18.84375 10.25 Z M 8.5625 11.3125 C 9.101563 11.3125 9.53125 11.816406 9.53125 12.53125 C 9.53125 13.246094 8.5625 14.3125 8.5625 14.3125 C 8.5625 14.3125 7.59375 13.382813 7.59375 12.53125 C 7.59375 11.679688 8.023438 11.3125 8.5625 11.3125 Z M 13.75 12.1875 C 14.46875 12.1875 14.96875 12.617188 14.96875 13.15625 C 14.96875 13.695313 14.601563 14.15625 13.75 14.15625 C 12.898438 14.15625 11.96875 13.15625 11.96875 13.15625 C 11.96875 13.15625 13.035156 12.1875 13.75 12.1875 Z M 16.5625 12.5 C 17.039063 12.5 17.375 12.796875 17.375 13.15625 C 17.375 13.515625 17.128906 13.8125 16.5625 13.8125 C 15.996094 13.8125 15.375 13.15625 15.375 13.15625 C 15.375 13.15625 16.085938 12.5 16.5625 12.5 Z M 6.28125 13.5625 C 6.820313 13.5625 7.28125 14.066406 7.28125 14.78125 C 7.28125 15.496094 6.28125 16.5625 6.28125 16.5625 C 6.28125 16.5625 5.3125 15.632813 5.3125 14.78125 C 5.3125 13.929688 5.742188 13.5625 6.28125 13.5625 Z M 11.46875 14.46875 C 12.1875 14.46875 12.6875 14.898438 12.6875 15.4375 C 12.6875 15.976563 12.320313 16.40625 11.46875 16.40625 C 10.617188 16.40625 9.6875 15.4375 9.6875 15.4375 C 9.6875 15.4375 10.753906 14.46875 11.46875 14.46875 Z M 14.28125 14.78125 C 14.757813 14.78125 15.09375 15.078125 15.09375 15.4375 C 15.09375 15.796875 14.847656 16.09375 14.28125 16.09375 C 13.714844 16.09375 13.09375 15.4375 13.09375 15.4375 C 13.09375 15.4375 13.804688 14.78125 14.28125 14.78125 Z M 2.3125 16 C 1.675781 16.636719 2.117188 17.652344 2.625 18.40625 C 3.054688 19.042969 2.980469 19.863281 2.4375 20.40625 L 2.3125 20.5625 L 3.4375 21.6875 L 3.5625 21.5625 C 4.105469 21.019531 4.957031 20.945313 5.59375 21.375 C 6.34375 21.882813 7.363281 22.324219 8 21.6875 Z M 9.21875 16.71875 C 9.9375 16.71875 10.4375 17.179688 10.4375 17.71875 C 10.4375 18.257813 10.070313 18.6875 9.21875 18.6875 C 8.367188 18.6875 7.4375 17.71875 7.4375 17.71875 C 7.4375 17.71875 8.503906 16.71875 9.21875 16.71875 Z \" />\r\n  </SvgIcon>\r\n)\r\nSesame = pure(Sesame)\r\nSesame.displayName = 'Sesame'\r\nSesame.muiName = 'SvgIcon'\r\n\r\nexport default Sesame\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Soy = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 20 2 C 19.210938 3.917969 17.332031 4.667969 16 6 C 14.296875 7.703125 14 10 14 10 C 11.019531 10 8.292969 12.75 8 14.96875 C 7.371094 15.078125 5.394531 15.332031 4 17 C 2.925781 18.285156 2 20.0625 2 20.96875 C 3.3125 22.28125 8.71875 22.40625 11 20.96875 C 11.835938 20.441406 12 20 12 20 C 16 20 19 16.324219 19 13 C 19 13 20.367188 12.601563 21.460938 10.4375 C 22.519531 8.335938 21.8125 3.8125 20 2 Z M 8.007813 19.902344 C 6.78125 20.386719 5.582031 20.140625 5.324219 19.347656 C 5.066406 18.558594 5.847656 17.523438 7.070313 17.039063 C 8.296875 16.554688 9.496094 16.804688 9.753906 17.59375 C 10.011719 18.382813 9.230469 19.417969 8.007813 19.902344 Z M 14.570313 16.429688 C 13.464844 17.257813 12.003906 17.175781 11.304688 16.242188 C 10.605469 15.308594 10.9375 13.882813 12.039063 13.054688 C 13.144531 12.226563 14.609375 12.3125 15.304688 13.246094 C 16.003906 14.175781 15.675781 15.605469 14.570313 16.429688 Z M 19.882813 9.152344 C 19.359375 10.359375 18.335938 11.03125 17.59375 10.65625 C 16.851563 10.28125 16.675781 8.996094 17.195313 7.789063 C 17.71875 6.582031 18.742188 5.90625 19.484375 6.285156 C 20.222656 6.660156 20.402344 7.945313 19.882813 9.152344 Z \" />\r\n  </SvgIcon>\r\n)\r\nSoy = pure(Soy)\r\nSoy.displayName = 'Soy'\r\nSoy.muiName = 'SvgIcon'\r\n\r\nexport default Soy\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Sulphites = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 22.570312 19.167969 L 15.613281 7.9375 L 15.613281 6.261719 C 15.613281 6.066406 15.453125 5.90625 15.257812 5.90625 C 15.0625 5.90625 14.902344 6.066406 14.902344 6.261719 L 14.902344 7.683594 L 9.097656 7.683594 L 9.097656 3.296875 L 14.902344 3.296875 L 14.902344 4.835938 C 14.902344 5.035156 15.0625 5.191406 15.257812 5.191406 C 15.453125 5.191406 15.613281 5.035156 15.613281 4.835938 L 15.613281 3.222656 C 16.289062 3.019531 16.785156 2.390625 16.785156 1.648438 C 16.785156 0.738281 16.042969 0 15.136719 0 L 8.863281 0 C 7.957031 0 7.214844 0.738281 7.214844 1.648438 C 7.214844 2.390625 7.710938 3.019531 8.386719 3.222656 L 8.386719 7.9375 L 3.566406 15.714844 C 3.464844 15.882812 3.515625 16.101562 3.683594 16.207031 C 3.847656 16.308594 4.070312 16.257812 4.171875 16.089844 L 6.105469 12.972656 C 7.75 13.121094 10.089844 14.074219 12.355469 15.003906 C 14.882812 16.039062 17.3125 17.03125 19 17.03125 C 19.480469 17.03125 19.898438 16.949219 20.246094 16.765625 L 21.964844 19.542969 C 22.441406 20.308594 22.464844 21.238281 22.023438 22.027344 C 21.585938 22.816406 20.785156 23.289062 19.878906 23.289062 L 4.121094 23.289062 C 3.214844 23.289062 2.414062 22.816406 1.976562 22.027344 C 1.535156 21.238281 1.558594 20.308594 2.035156 19.542969 L 3.25 17.582031 C 3.351562 17.414062 3.300781 17.191406 3.132812 17.089844 C 2.96875 16.984375 2.746094 17.039062 2.644531 17.203125 L 1.429688 19.167969 C 0.8125 20.15625 0.785156 21.355469 1.351562 22.375 C 1.917969 23.390625 2.953125 24 4.121094 24 L 19.878906 24 C 21.046875 24 22.082031 23.390625 22.648438 22.375 C 23.214844 21.355469 23.1875 20.15625 22.570312 19.167969 Z M 7.929688 1.648438 C 7.929688 1.132812 8.347656 0.710938 8.863281 0.710938 L 15.136719 0.710938 C 15.652344 0.710938 16.070312 1.132812 16.070312 1.648438 C 16.070312 2.164062 15.652344 2.582031 15.136719 2.582031 L 8.863281 2.582031 C 8.347656 2.582031 7.929688 2.164062 7.929688 1.648438 Z M 12.625 14.34375 C 10.460938 13.457031 8.234375 12.546875 6.519531 12.304688 L 8.941406 8.394531 L 15.058594 8.394531 L 19.871094 16.15625 C 18.585938 16.78125 15.429688 15.492188 12.625 14.34375 Z M 12.625 14.34375 \" />\r\n    <path d=\"M 8.871094 17.390625 C 9.210938 17.390625 9.390625 17.484375 9.535156 17.558594 C 9.621094 17.601562 9.699219 17.640625 9.78125 17.640625 C 10.035156 17.640625 10.144531 17.324219 10.144531 17.164062 C 10.144531 16.730469 9.34375 16.613281 8.871094 16.613281 C 8.089844 16.613281 7.25 16.964844 7.25 17.953125 C 7.25 18.835938 7.914062 19.132812 8.5 19.390625 C 8.960938 19.597656 9.363281 19.773438 9.363281 20.195312 C 9.363281 20.601562 8.992188 20.746094 8.648438 20.746094 C 8.246094 20.746094 8.027344 20.5625 7.851562 20.414062 C 7.738281 20.320312 7.644531 20.238281 7.53125 20.238281 C 7.308594 20.238281 7.132812 20.53125 7.132812 20.722656 C 7.132812 21.117188 7.792969 21.5625 8.675781 21.5625 C 9.65625 21.5625 10.265625 21.007812 10.265625 20.109375 C 10.265625 19.085938 9.511719 18.769531 8.910156 18.511719 C 8.503906 18.339844 8.152344 18.191406 8.152344 17.875 C 8.152344 17.566406 8.414062 17.390625 8.871094 17.390625 Z M 8.871094 17.390625 \" />\r\n    <path d=\"M 13.882812 20.011719 L 13.882812 18.175781 C 13.882812 17.1875 13.324219 16.644531 12.3125 16.644531 C 11.304688 16.644531 10.75 17.1875 10.75 18.175781 L 10.75 20.011719 C 10.75 21 11.304688 21.542969 12.3125 21.542969 C 13.324219 21.542969 13.882812 21 13.882812 20.011719 Z M 11.652344 18.175781 C 11.652344 17.691406 11.875 17.441406 12.3125 17.441406 C 12.75 17.441406 12.980469 17.695312 12.980469 18.175781 L 12.980469 20.011719 C 12.980469 20.492188 12.75 20.746094 12.3125 20.746094 C 11.875 20.746094 11.652344 20.5 11.652344 20.011719 Z M 11.652344 18.175781 \" />\r\n    <path d=\"M 15.277344 20.421875 C 14.820312 20.753906 14.347656 21.101562 14.347656 21.5625 L 14.347656 22.089844 C 14.347656 22.242188 14.546875 22.335938 14.683594 22.335938 L 16.621094 22.335938 C 16.753906 22.335938 16.867188 22.179688 16.867188 21.996094 C 16.867188 21.820312 16.753906 21.667969 16.621094 21.667969 L 15.132812 21.667969 L 15.132812 21.5625 C 15.132812 21.34375 15.417969 21.140625 15.753906 20.910156 C 16.246094 20.570312 16.859375 20.144531 16.859375 19.4375 C 16.859375 18.703125 16.21875 18.308594 15.613281 18.308594 C 14.839844 18.308594 14.417969 18.835938 14.417969 19.335938 C 14.417969 19.605469 14.53125 19.738281 14.765625 19.738281 C 15.019531 19.738281 15.160156 19.59375 15.160156 19.453125 C 15.160156 19.164062 15.328125 19 15.621094 19 C 15.953125 19 16.101562 19.230469 16.101562 19.460938 C 16.101562 19.820312 15.703125 20.113281 15.277344 20.421875 Z M 15.277344 20.421875 \" />\r\n    <path d=\"M 15.796875 14.328125 C 15.929688 14.417969 16.109375 14.40625 16.226562 14.304688 C 16.335938 14.210938 16.378906 14.054688 16.332031 13.921875 C 16.285156 13.777344 16.148438 13.675781 15.996094 13.675781 C 15.847656 13.675781 15.714844 13.769531 15.664062 13.90625 C 15.601562 14.058594 15.660156 14.238281 15.796875 14.328125 Z M 15.796875 14.328125 \" />\r\n    <path d=\"M 5.375 22.320312 C 5.511719 22.378906 5.675781 22.339844 5.773438 22.234375 C 5.875 22.121094 5.894531 21.957031 5.828125 21.824219 C 5.761719 21.699219 5.625 21.625 5.488281 21.636719 C 5.328125 21.648438 5.195312 21.765625 5.164062 21.921875 C 5.128906 22.085938 5.21875 22.257812 5.375 22.320312 Z M 5.375 22.320312 \" />\r\n    <path d=\"M 19.027344 18.535156 C 19.199219 18.804688 19.621094 18.703125 19.675781 18.398438 C 19.730469 18.078125 19.347656 17.859375 19.097656 18.0625 C 18.957031 18.175781 18.925781 18.386719 19.027344 18.535156 Z M 19.027344 18.535156 \" />\r\n    <path d=\"M 7.515625 14.980469 C 7.453125 14.839844 7.3125 14.75 7.160156 14.761719 C 7.003906 14.773438 6.871094 14.886719 6.835938 15.039062 C 6.765625 15.359375 7.140625 15.597656 7.398438 15.402344 C 7.527344 15.304688 7.574219 15.128906 7.515625 14.980469 Z M 7.515625 14.980469 \" />\r\n    <path d=\"M 10.054688 11.203125 C 9.933594 10.925781 9.53125 10.914062 9.402344 11.1875 C 9.335938 11.324219 9.367188 11.492188 9.476562 11.597656 C 9.589844 11.703125 9.757812 11.726562 9.890625 11.652344 C 10.050781 11.570312 10.121094 11.371094 10.054688 11.203125 Z M 10.054688 11.203125 \" />\r\n    <path d=\"M 11.394531 9.617188 C 11.269531 9.535156 11.097656 9.542969 10.976562 9.632812 C 10.863281 9.722656 10.816406 9.878906 10.855469 10.015625 C 10.898438 10.15625 11.023438 10.257812 11.167969 10.269531 C 11.324219 10.285156 11.472656 10.1875 11.53125 10.042969 C 11.589844 9.890625 11.53125 9.710938 11.394531 9.617188 Z M 11.394531 9.617188 \" />\r\n  </SvgIcon>\r\n)\r\nSulphites = pure(Sulphites)\r\nSulphites.displayName = 'Sulphites'\r\nSulphites.muiName = 'SvgIcon'\r\n\r\nexport default Sulphites\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Wheat = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 11.441406 5.878906 C 11.554688 6.007812 11.722656 6.082031 11.894531 6.082031 C 12.070312 6.082031 12.238281 6.007812 12.351562 5.878906 C 12.859375 5.304688 13.609375 4.25 13.609375 3.039062 C 13.609375 1.832031 12.859375 0.777344 12.351562 0.203125 C 12.238281 0.0742188 12.070312 0 11.898438 0 C 11.722656 0 11.554688 0.0742188 11.441406 0.199219 C 10.933594 0.777344 10.183594 1.832031 10.183594 3.039062 C 10.183594 4.246094 10.933594 5.304688 11.441406 5.878906 Z M 11.441406 5.878906 \" />\r\n    <path d=\"M 11.898438 9.835938 C 11.992188 9.839844 14.226562 9.925781 15.542969 8.664062 C 16.433594 7.808594 16.679688 6.554688 16.746094 5.800781 C 16.761719 5.636719 16.699219 5.46875 16.574219 5.351562 C 16.449219 5.234375 16.277344 5.171875 16.101562 5.1875 C 15.320312 5.25 14.007812 5.488281 13.117188 6.339844 C 12.132812 7.285156 11.933594 8.71875 11.898438 9.421875 C 11.863281 8.71875 11.664062 7.285156 10.679688 6.339844 C 9.789062 5.488281 8.476562 5.25 7.695312 5.1875 C 7.519531 5.171875 7.347656 5.234375 7.222656 5.351562 C 7.101562 5.472656 7.039062 5.636719 7.054688 5.804688 C 7.117188 6.554688 7.367188 7.808594 8.257812 8.664062 C 9.574219 9.925781 11.804688 9.839844 11.898438 9.835938 Z M 11.898438 9.835938 \" />\r\n    <path d=\"M 13.117188 10.867188 C 12.132812 11.8125 11.9375 13.246094 11.898438 13.949219 C 11.863281 13.246094 11.667969 11.8125 10.683594 10.867188 C 9.789062 10.015625 8.480469 9.777344 7.695312 9.714844 C 7.519531 9.703125 7.347656 9.761719 7.226562 9.878906 C 7.101562 10 7.039062 10.164062 7.054688 10.332031 C 7.121094 11.082031 7.367188 12.339844 8.257812 13.191406 C 9.574219 14.453125 11.804688 14.367188 11.898438 14.363281 C 11.992188 14.367188 14.226562 14.453125 15.542969 13.191406 C 16.433594 12.335938 16.679688 11.082031 16.746094 10.328125 C 16.757812 10.164062 16.695312 9.996094 16.574219 9.878906 C 16.449219 9.761719 16.277344 9.699219 16.101562 9.714844 C 15.320312 9.777344 14.007812 10.015625 13.117188 10.867188 Z M 13.117188 10.867188 \" />\r\n    <path d=\"M 13.117188 15.398438 C 12.132812 16.339844 11.9375 17.773438 11.898438 18.476562 C 11.863281 17.773438 11.667969 16.339844 10.683594 15.398438 C 9.789062 14.542969 8.480469 14.304688 7.695312 14.242188 C 7.523438 14.230469 7.351562 14.289062 7.226562 14.410156 C 7.101562 14.527344 7.039062 14.691406 7.054688 14.859375 C 7.121094 15.609375 7.367188 16.867188 8.257812 17.71875 C 9.15625 18.582031 10.488281 18.816406 11.265625 18.875 L 11.265625 22.136719 C 11.265625 22.507812 11.535156 22.808594 11.921875 22.808594 C 12.308594 22.808594 12.574219 22.507812 12.574219 22.136719 L 12.574219 18.871094 C 13.359375 18.808594 14.65625 18.566406 15.542969 17.71875 C 16.433594 16.867188 16.679688 15.609375 16.746094 14.859375 C 16.757812 14.691406 16.695312 14.527344 16.574219 14.410156 C 16.449219 14.289062 16.277344 14.230469 16.101562 14.242188 C 15.320312 14.304688 14.007812 14.542969 13.117188 15.398438 Z M 13.117188 15.398438 \" />\r\n  </SvgIcon>\r\n)\r\nWheat = pure(Wheat)\r\nWheat.displayName = 'Wheat'\r\nWheat.muiName = 'SvgIcon'\r\n\r\nexport default Wheat\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Tartrazine = props => (\r\n  <SvgIcon {...props}>\r\n    <text x=\"12\" y=\"12\" fontSize=\"10\" textAnchor=\"middle\" dominantBaseline=\"middle\">\r\n      E102\r\n    </text>\r\n  </SvgIcon>\r\n)\r\nTartrazine = pure(Tartrazine)\r\nTartrazine.displayName = 'Tartrazine'\r\nTartrazine.muiName = 'SvgIcon'\r\n\r\nexport default Tartrazine\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/rice/\r\nlet Rice = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M22,11H19.7C19.4,9.9 18.9,8.8 18.2,8L21.6,2.6L19.9,1.5L16.7,6.6C16.3,6.3 16,6.1 15.5,5.9L16.4,2.3L14.5,1.8L13.7,5.2C13.1,5.1 12.6,5 12,5C8.3,5 5.2,7.6 4.3,11H2C2,15.1 4.5,18.6 8,20.2V22H16V20.2C19.5,18.6 22,15.1 22,11M12,7C14.6,7 16.8,8.7 17.6,11H6.4C7.2,8.7 9.4,7 12,7Z\" />\r\n  </SvgIcon>\r\n)\r\nRice = pure(Rice)\r\nRice.displayName = 'Rice'\r\nRice.muiName = 'SvgIcon'\r\n\r\nexport default Rice\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/food-steak/\r\nlet RedMeat = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M11.9 2C8 2 4.9 5.4 5 9.3C5.1 11.9 6.6 14.1 8.7 15.2C10.1 15.9 11 17.3 11 18.8V19C11 20.7 12.3 22 14 22C18 22 19 17 19 9C19 9 19 2 11.9 2M14 20C13.4 20 13 19.6 13 19V18.8C13 16.6 11.7 14.5 9.7 13.4C8.1 12.6 7.1 11 7 9.2C7 7.9 7.5 6.5 8.4 5.5C9.3 4.5 10.6 4 11.8 4C16.7 4 17 8.2 17 9C17 18.9 15.3 20 14 20M15.8 7.6L8.3 10.3C8.1 10 8 9.6 8 9.1C8 8.4 8.2 7.8 8.5 7.1L13.7 5.2C14.9 5.8 15.5 6.7 15.8 7.6M12.9 15.1L15.7 14.1C15.6 15.6 15.3 16.7 15.1 17.4L13.8 17.9C13.8 16.9 13.5 16 12.9 15.1M16 9.2C16 10.4 16 11.5 15.9 12.4L11.9 13.9C11.4 13.4 10.8 12.9 10.1 12.6C9.7 12.4 9.3 12.1 9 11.8L16 9.2Z\" />\r\n  </SvgIcon>\r\n)\r\nRedMeat = pure(RedMeat)\r\nRedMeat.displayName = 'Red Meat'\r\nRedMeat.muiName = 'SvgIcon'\r\n\r\nexport default RedMeat\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/food-drumstick-outline/\r\nlet PoultryMeat = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M15.71 4C16.54 4 17.33 4.22 18 4.66C19.14 5.4 19.84 6.53 20 7.84C20.11 9.13 19.66 10.4 18.75 11.31C18.05 12 17.16 12.44 16.18 12.54C14.27 12.74 12.59 13.5 11.34 14.77C11.13 14.97 10.9 15 10.77 15C10.65 15 10.42 14.97 10.21 14.77L9.22 13.78C9.04 13.6 9 13.39 9 13.25C9 13 9.11 12.78 9.32 12.57C10.53 11.35 11.27 9.73 11.45 7.87C11.58 6.54 12.29 5.4 13.45 4.65C14.11 4.22 14.89 4 15.71 4M15.71 2C14.54 2 13.37 2.32 12.36 2.97C10.6 4.1 9.63 5.86 9.46 7.68C9.33 9 8.83 10.23 7.91 11.15L7.88 11.18C6.72 12.34 6.72 14.11 7.81 15.19L8.8 16.18C9.35 16.73 10.06 17 10.77 17S12.2 16.73 12.75 16.18C13.72 15.21 15 14.68 16.39 14.53C17.76 14.38 19.1 13.78 20.16 12.73C22.93 9.96 22.57 5.26 19.09 3C18.08 2.33 16.9 2 15.71 2M6.26 19.86C6.53 20.42 6.44 21.1 5.97 21.56C5.39 22.15 4.44 22.15 3.85 21.56C3.58 21.29 3.44 20.94 3.42 20.58C3.06 20.56 2.71 20.42 2.44 20.15C1.85 19.56 1.85 18.61 2.44 18.03C2.9 17.57 3.59 17.47 4.14 17.74L6.62 15.31C6.76 15.5 6.92 15.72 7.1 15.9L8.09 16.89C8.3 17.09 8.5 17.26 8.76 17.41L6.26 19.86Z\" />\r\n  </SvgIcon>\r\n)\r\nPoultryMeat = pure(PoultryMeat)\r\nPoultryMeat.displayName = 'Poultry Meat'\r\nPoultryMeat.muiName = 'SvgIcon'\r\n\r\nexport default PoultryMeat\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/fruit-grapes-outline/\r\nlet Fruit = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19 12C19 10.61 18.05 9.47 16.78 9.12C16.92 8.78 17 8.4 17 8C17 6.34 15.66 5 14 5C13.57 5 13.17 5.1 12.81 5.26C13 4.19 13.39 2.59 14.4 2.2L13.6 1C11.9 1.77 11.4 4.09 11.26 5.29C10.87 5.11 10.45 5 10 5C8.34 5 7 6.34 7 8C7 8.4 7.08 8.77 7.22 9.12C5.94 9.46 5 10.62 5 12C5 13.39 5.95 14.54 7.23 14.88C7.09 15.22 7 15.6 7 16C7 17.39 7.94 18.54 9.22 18.88C9.08 19.23 9 19.61 9 20C9 21.66 10.34 23 12 23S15 21.66 15 20C15 19.61 14.92 19.23 14.78 18.88C16.06 18.54 17 17.39 17 16C17 15.6 16.92 15.23 16.77 14.88C18.05 14.54 19 13.39 19 12M16.31 9.88V9.9H16.3L16.31 9.88M14 6.5C14.83 6.5 15.5 7.17 15.5 8S14.83 9.5 14 9.5 12.5 8.83 12.5 8 13.17 6.5 14 6.5M13.5 12C13.5 12.83 12.83 13.5 12 13.5S10.5 12.83 10.5 12 11.17 10.5 12 10.5 13.5 11.17 13.5 12M10 6.5C10.83 6.5 11.5 7.17 11.5 8S10.83 9.5 10 9.5 8.5 8.83 8.5 8 9.17 6.5 10 6.5M6.5 12C6.5 11.17 7.17 10.5 8 10.5S9.5 11.17 9.5 12 8.83 13.5 8 13.5 6.5 12.83 6.5 12M8.5 16C8.5 15.17 9.17 14.5 10 14.5S11.5 15.17 11.5 16 10.83 17.5 10 17.5 8.5 16.83 8.5 16M12 21.5C11.17 21.5 10.5 20.83 10.5 20S11.17 18.5 12 18.5 13.5 19.17 13.5 20 12.83 21.5 12 21.5M14 17.5C13.17 17.5 12.5 16.83 12.5 16S13.17 14.5 14 14.5 15.5 15.17 15.5 16 14.83 17.5 14 17.5M16 13.5C15.17 13.5 14.5 12.83 14.5 12S15.17 10.5 16 10.5 17.5 11.17 17.5 12 16.83 13.5 16 13.5Z\" />\r\n  </SvgIcon>\r\n)\r\nFruit = pure(Fruit)\r\nFruit.displayName = 'Fruit'\r\nFruit.muiName = 'SvgIcon'\r\n\r\nexport default Fruit\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/corn/\r\nlet Corn = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M11,12H8.82C9.62,12.5 10.35,13.07 11,13.68V12M7,11C7.27,5.88 9.37,2 12,2C14.66,2 16.77,5.94 17,11.12C18.5,10.43 20.17,10 22,10C16.25,12.57 18.25,22 12,22C6,22 7.93,12.57 2,10C3.82,10 5.5,10.4 7,11M11,11V9H8.24L8.03,11H11M11,8V6H9.05C8.8,6.6 8.6,7.27 8.43,8H11M11,5V3.3C10.45,3.63 9.95,4.22 9.5,5H11M12,3V5H13V6H12V8H14V9H12V11H15V12H12V14H14V15H12.23C13.42,16.45 14.15,18 14.32,19.23C15.31,17.56 15.96,14.84 16,11.76C15.94,7 14.13,3 12,3Z\" />\r\n  </SvgIcon>\r\n)\r\nCorn = pure(Corn)\r\nCorn.displayName = 'Corn'\r\nCorn.muiName = 'SvgIcon'\r\n\r\nexport default Corn\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://www.svgrepo.com/svg/205327/garlic (resized to 24x24)\r\nlet Garlic = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 10.648438 1.605469 C 10.425781 1.566406 10.21875 1.710938 10.179688 1.925781 C 9.628906 4.910156 8.488281 6.890625 7.378906 8.804688 C 6.054688 11.101562 4.800781 13.269531 4.800781 16.800781 C 4.800781 18.921875 5.730469 20.925781 7.347656 22.296875 C 7.425781 22.359375 7.515625 22.390625 7.609375 22.390625 C 7.722656 22.390625 7.835938 22.34375 7.914062 22.25 C 8.054688 22.082031 8.035156 21.828125 7.867188 21.6875 C 6.425781 20.464844 5.601562 18.6875 5.601562 16.800781 C 5.601562 13.484375 6.800781 11.40625 8.074219 9.203125 C 9.214844 7.230469 10.390625 5.191406 10.96875 2.074219 C 11.007812 1.855469 10.863281 1.648438 10.648438 1.605469 Z M 10.648438 1.605469 \" />\r\n    <path d=\"M 17.261719 17.203125 C 17.042969 17.171875 16.839844 17.320312 16.804688 17.539062 C 16.714844 18.117188 16.453125 18.601562 16.449219 18.609375 C 16.34375 18.800781 16.414062 19.042969 16.609375 19.152344 C 16.667969 19.183594 16.734375 19.199219 16.800781 19.199219 C 16.941406 19.199219 17.078125 19.125 17.148438 18.992188 C 17.164062 18.96875 17.484375 18.382812 17.59375 17.660156 C 17.628906 17.441406 17.480469 17.238281 17.261719 17.203125 Z M 17.261719 17.203125 \" />\r\n    <path d=\"M 16.734375 12.976562 C 16.609375 12.792969 16.363281 12.746094 16.179688 12.867188 C 15.996094 12.988281 15.945312 13.238281 16.066406 13.421875 C 16.785156 14.5 16.800781 15.589844 16.800781 15.601562 C 16.800781 15.820312 16.980469 16 17.199219 16 C 17.421875 16 17.601562 15.820312 17.601562 15.601562 C 17.601562 15.546875 17.589844 14.265625 16.734375 12.976562 Z M 16.734375 12.976562 \" />\r\n    <path d=\"M 19.960938 8.628906 C 17.988281 6.414062 15.953125 4.125 15.191406 0.320312 C 15.148438 0.105469 14.9375 -0.0351562 14.722656 0.0078125 C 14.503906 0.0507812 14.363281 0.261719 14.40625 0.480469 C 15.210938 4.492188 17.417969 6.972656 19.363281 9.160156 C 21.421875 11.476562 23.199219 13.472656 23.199219 16.800781 C 23.199219 20.328125 20.328125 23.199219 16.800781 23.199219 C 16.378906 23.199219 15.164062 23.136719 14.578125 22.84375 C 14.480469 22.792969 14.363281 22.785156 14.261719 22.824219 C 13.59375 23.074219 12.832031 23.199219 12 23.199219 C 11.160156 23.199219 10.398438 23.074219 9.742188 22.824219 C 9.65625 22.792969 9.5625 22.792969 9.472656 22.820312 C 8.351562 23.195312 7.210938 23.199219 7.199219 23.199219 C 3.671875 23.199219 0.800781 20.328125 0.800781 16.800781 C 0.800781 13.472656 2.578125 11.476562 4.636719 9.160156 C 6.441406 7.132812 8.484375 4.835938 9.410156 1.277344 C 9.476562 1.019531 9.53125 0.800781 10 0.800781 L 12.839844 0.800781 C 13.292969 4.648438 14.691406 7.0625 15.925781 9.203125 C 17.199219 11.40625 18.398438 13.484375 18.398438 16.800781 C 18.398438 18.691406 17.570312 20.472656 16.125 21.695312 C 15.957031 21.835938 15.933594 22.089844 16.078125 22.257812 C 16.21875 22.425781 16.46875 22.449219 16.640625 22.304688 C 18.265625 20.933594 19.199219 18.925781 19.199219 16.800781 C 19.199219 13.269531 17.945312 11.101562 16.621094 8.804688 C 15.324219 6.5625 13.984375 4.246094 13.597656 0.359375 C 13.578125 0.15625 13.40625 0 13.199219 0 L 10 0 C 8.914062 0 8.703125 0.8125 8.628906 1.097656 C 7.757812 4.445312 5.867188 6.574219 4.039062 8.628906 C 1.960938 10.964844 0 13.167969 0 16.800781 C 0 20.769531 3.230469 24 7.199219 24 C 7.25 24 8.390625 23.996094 9.59375 23.621094 C 10.308594 23.875 11.117188 24 12 24 C 12.863281 24 13.664062 23.875 14.382812 23.628906 C 15.28125 23.996094 16.734375 24 16.800781 24 C 20.769531 24 24 20.769531 24 16.800781 C 24 13.167969 22.039062 10.964844 19.960938 8.628906 Z M 19.960938 8.628906 \" />\r\n    <path d=\"M 5.320312 10.640625 L 5.917969 9.839844 C 6.050781 9.664062 6.015625 9.414062 5.839844 9.28125 C 5.664062 9.148438 5.410156 9.183594 5.28125 9.359375 L 4.679688 10.160156 C 4.546875 10.335938 4.582031 10.585938 4.761719 10.71875 C 4.832031 10.773438 4.914062 10.800781 5 10.800781 C 5.121094 10.800781 5.242188 10.746094 5.320312 10.640625 Z M 5.320312 10.640625 \" />\r\n    <path d=\"M 8.46875 10.179688 C 7.648438 11.410156 7.238281 12.621094 7.21875 12.671875 C 7.152344 12.882812 7.261719 13.109375 7.472656 13.179688 C 7.515625 13.195312 7.558594 13.199219 7.601562 13.199219 C 7.765625 13.199219 7.921875 13.09375 7.980469 12.925781 C 7.984375 12.914062 8.375 11.757812 9.132812 10.621094 C 9.253906 10.4375 9.207031 10.191406 9.023438 10.066406 C 8.835938 9.945312 8.589844 9.996094 8.46875 10.179688 Z M 8.46875 10.179688 \" />\r\n    <path d=\"M 20.054688 20.199219 C 19.816406 20.609375 19.402344 20.851562 19.398438 20.855469 C 19.210938 20.964844 19.144531 21.207031 19.253906 21.398438 C 19.328125 21.527344 19.460938 21.601562 19.601562 21.601562 C 19.667969 21.601562 19.738281 21.582031 19.800781 21.546875 C 19.824219 21.53125 20.394531 21.199219 20.746094 20.601562 C 20.855469 20.410156 20.792969 20.167969 20.601562 20.054688 C 20.410156 19.941406 20.167969 20.007812 20.054688 20.199219 Z M 20.054688 20.199219 \" />\r\n    <path d=\"M 2.304688 15.222656 C 2.09375 15.148438 1.867188 15.265625 1.796875 15.472656 C 1.359375 16.785156 1.78125 18.074219 1.796875 18.125 C 1.855469 18.292969 2.011719 18.402344 2.175781 18.402344 C 2.21875 18.402344 2.261719 18.394531 2.304688 18.378906 C 2.511719 18.308594 2.628906 18.082031 2.558594 17.875 C 2.554688 17.863281 2.203125 16.789062 2.558594 15.726562 C 2.628906 15.515625 2.511719 15.289062 2.304688 15.222656 Z M 2.304688 15.222656 \" />\r\n    <path d=\"M 21.621094 15.328125 C 21.675781 15.496094 21.832031 15.601562 22 15.601562 C 22.042969 15.601562 22.085938 15.59375 22.125 15.578125 C 22.335938 15.507812 22.449219 15.285156 22.378906 15.074219 C 22.363281 15.023438 21.953125 13.808594 21.132812 12.578125 C 21.011719 12.394531 20.761719 12.34375 20.578125 12.46875 C 20.394531 12.589844 20.34375 12.839844 20.46875 13.023438 C 21.226562 14.160156 21.617188 15.316406 21.621094 15.328125 Z M 21.621094 15.328125 \" />\r\n    <path d=\"M 11.792969 7.265625 L 11.996094 6.066406 C 12.03125 5.847656 11.882812 5.640625 11.664062 5.605469 C 11.445312 5.570312 11.242188 5.714844 11.207031 5.933594 L 11.003906 7.132812 C 10.96875 7.351562 11.117188 7.558594 11.335938 7.59375 C 11.355469 7.597656 11.378906 7.601562 11.402344 7.601562 C 11.59375 7.601562 11.761719 7.460938 11.792969 7.265625 Z M 11.792969 7.265625 \" />\r\n    <path d=\"M 11.199219 21.199219 C 11.230469 21.199219 11.265625 21.195312 11.296875 21.1875 C 11.511719 21.136719 11.640625 20.917969 11.589844 20.703125 C 11.585938 20.6875 11.199219 19.132812 11.199219 17.601562 C 11.199219 17.378906 11.019531 17.199219 10.800781 17.199219 C 10.578125 17.199219 10.398438 17.378906 10.398438 17.601562 C 10.398438 19.230469 10.792969 20.828125 10.8125 20.898438 C 10.855469 21.078125 11.019531 21.199219 11.199219 21.199219 Z M 11.199219 21.199219 \" />\r\n    <path d=\"M 10.804688 8.742188 C 10.40625 11.539062 10.398438 13.976562 10.398438 14 C 10.398438 14.222656 10.578125 14.398438 10.800781 14.398438 C 11.019531 14.398438 11.199219 14.222656 11.199219 14 C 11.199219 13.976562 11.203125 11.59375 11.59375 8.855469 C 11.628906 8.636719 11.476562 8.4375 11.257812 8.40625 C 11.035156 8.375 10.835938 8.523438 10.804688 8.742188 Z M 10.804688 8.742188 \" />\r\n  </SvgIcon>\r\n)\r\nGarlic = pure(Garlic)\r\nGarlic.displayName = 'Garlic'\r\nGarlic.muiName = 'SvgIcon'\r\n\r\nexport default Garlic\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/sprout-outline/\r\nlet Balsam = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M23,4.1V2.3L21.2,2.1C21.1,2.1 20.5,2 19.5,2C15.4,2 12.4,3.2 10.7,5.3C9.4,4.5 7.6,4 5.5,4C4.5,4 3.8,4.1 3.8,4.1L1.9,4.4L2,6.1C2.1,9.1 3.6,14.8 8.8,14.8C8.9,14.8 8.9,14.8 9,14.8V18.2C5.2,18.7 2,20 2,20V22H22V20C22,20 18.8,18.7 15,18.2V15C21.3,14.9 23,7.8 23,4.1M12,18C11.7,18 11.3,18 11,18V12.4C11,12.4 10.8,9 8,9C8,9 9.5,9.8 9.9,12.7C9.5,12.8 9.1,12.8 8.8,12.8C4.2,12.8 4,6.1 4,6.1C4,6.1 4.6,6 5.5,6C7.4,6 10.5,6.4 11.4,9.1C11.9,4.6 17,4 19.5,4C20.4,4 21,4.1 21,4.1C21,4.1 21,13.1 14.7,13.1C14.5,13.1 14.2,13.1 14,13.1C14,11.1 16,8.1 16,8.1C13,9.1 13,13 13,13V18C12.7,18 12.3,18 12,18Z\" />\r\n  </SvgIcon>\r\n)\r\nBalsam = pure(Balsam)\r\nBalsam.displayName = 'Balsam'\r\nBalsam.muiName = 'SvgIcon'\r\n\r\nexport default Balsam\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://www.svgrepo.com/svg/481611/buckwheat (resized to 24x24)\r\nlet Buckwheat = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 8.851562 11.089844 C 9.203125 11.054688 9.597656 11.007812 10.035156 10.945312 C 11.511719 10.734375 13.367188 10.34375 14.800781 9.691406 C 15.761719 9.257812 16.507812 8.707031 16.875 8.117188 C 17.46875 7.1875 17.769531 6.144531 17.769531 5.210938 C 17.769531 4.507812 17.601562 3.867188 17.285156 3.355469 C 16.964844 2.839844 16.5 2.433594 15.8125 2.167969 C 15.441406 2.027344 15.003906 1.933594 14.492188 1.902344 C 14.207031 2.164062 13.855469 2.53125 13.476562 2.988281 C 12.90625 3.667969 12.269531 4.527344 11.640625 5.496094 C 10.5625 7.15625 9.515625 9.140625 8.851562 11.089844 Z M 8.851562 11.089844 \" />\r\n    <path d=\"M 12.238281 1.953125 C 12.492188 1.652344 12.730469 1.390625 12.960938 1.148438 C 12.851562 1.078125 12.738281 1.015625 12.617188 0.964844 C 12.296875 0.828125 11.9375 0.757812 11.5625 0.757812 C 10.824219 0.757812 10.003906 1.03125 9.296875 1.535156 C 8.589844 2.042969 8 2.773438 7.679688 3.65625 C 7.4375 4.3125 7.332031 5.164062 7.332031 6.058594 C 7.332031 7.238281 7.511719 8.484375 7.714844 9.515625 C 8.910156 6.535156 10.75 3.738281 12.238281 1.953125 Z M 12.238281 1.953125 \" />\r\n    <path d=\"M 16.703125 14.066406 C 16.25 14.105469 15.859375 14.199219 15.523438 14.324219 C 15.0625 14.5 14.707031 14.742188 14.421875 15.035156 C 13.855469 15.613281 13.566406 16.425781 13.5625 17.367188 C 13.5625 18.304688 13.867188 19.34375 14.460938 20.277344 C 14.804688 20.828125 15.480469 21.347656 16.355469 21.765625 C 17.226562 22.183594 18.28125 22.507812 19.3125 22.742188 C 20.464844 23 21.59375 23.15625 22.4375 23.242188 C 21.371094 20.199219 19.382812 17.089844 17.859375 15.28125 C 17.414062 14.746094 17.003906 14.328125 16.703125 14.066406 Z M 16.703125 14.066406 \" />\r\n    <path d=\"M 23.652344 15.8125 C 23.332031 14.933594 22.742188 14.203125 22.035156 13.695312 C 21.328125 13.1875 20.507812 12.914062 19.773438 12.914062 C 19.394531 12.914062 19.039062 12.984375 18.714844 13.121094 C 18.566406 13.1875 18.429688 13.265625 18.292969 13.359375 C 18.546875 13.617188 18.8125 13.910156 19.09375 14.246094 C 19.710938 14.980469 20.382812 15.890625 21.046875 16.914062 C 21.984375 18.359375 22.902344 20.035156 23.601562 21.769531 C 23.8125 20.726562 24 19.433594 24 18.214844 C 24 17.320312 23.894531 16.472656 23.652344 15.8125 Z M 23.652344 15.8125 \" />\r\n    <path d=\"M 9.195312 15.230469 L 9.246094 15.402344 C 8.890625 15.507812 8.242188 15.808594 7.484375 16.257812 C 6.722656 16.707031 5.835938 17.304688 4.917969 18.011719 C 3.480469 19.113281 1.976562 20.488281 0.753906 21.953125 C 0.9375 21.996094 1.128906 22.039062 1.335938 22.085938 C 2.574219 22.351562 4.207031 22.617188 5.707031 22.617188 C 6.425781 22.617188 7.113281 22.554688 7.707031 22.417969 C 8.300781 22.28125 8.792969 22.066406 9.144531 21.785156 C 9.792969 21.28125 10.308594 20.664062 10.65625 20.019531 C 11.007812 19.375 11.1875 18.699219 11.1875 18.078125 C 11.1875 17.441406 11.007812 16.859375 10.613281 16.335938 C 10.304688 15.925781 9.847656 15.542969 9.195312 15.230469 Z M 9.195312 15.230469 \" />\r\n    <path d=\"M 6.667969 14.871094 C 7.140625 14.589844 7.570312 14.363281 7.960938 14.183594 C 7.742188 13.808594 7.445312 13.519531 7.082031 13.304688 C 6.617188 13.03125 6.03125 12.882812 5.402344 12.882812 C 4.1875 12.878906 2.84375 13.441406 1.964844 14.515625 C 1.546875 15.019531 1.179688 15.726562 0.894531 16.507812 C 0.605469 17.292969 0.386719 18.148438 0.230469 18.957031 C 0.132812 19.460938 0.0585938 19.9375 0 20.375 C 2.097656 18.019531 4.699219 16.035156 6.667969 14.871094 Z M 6.667969 14.871094 \" />\r\n  </SvgIcon>\r\n)\r\nBuckwheat = pure(Buckwheat)\r\nBuckwheat.displayName = 'Buckwheat'\r\nBuckwheat.muiName = 'SvgIcon'\r\n\r\nexport default Buckwheat\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport map from 'lodash/map'\r\n\r\nimport Diet from './Diet'\r\nimport Allergen from './Allergen'\r\nimport Gender from './Gender'\r\n\r\nimport Celery from 'pmt-ui/svg-icons/food/celery'\r\nimport Cheese from 'pmt-ui/svg-icons/food/cheese'\r\nimport Crab from 'pmt-ui/svg-icons/food/crab'\r\nimport Egg from 'pmt-ui/svg-icons/food/egg'\r\nimport Fish from 'pmt-ui/svg-icons/food/fish'\r\nimport Lupine from 'pmt-ui/svg-icons/food/lupine'\r\nimport Milk from 'pmt-ui/svg-icons/food/milk'\r\nimport Mustard from 'pmt-ui/svg-icons/food/mustard'\r\nimport Nut from 'pmt-ui/svg-icons/food/nut'\r\nimport Peanut from 'pmt-ui/svg-icons/food/peanuts'\r\nimport Shellfish from 'pmt-ui/svg-icons/food/shellfish'\r\nimport Sesame from 'pmt-ui/svg-icons/food/sesame'\r\nimport Soy from 'pmt-ui/svg-icons/food/soy'\r\nimport Sulphites from 'pmt-ui/svg-icons/food/sulphites'\r\nimport Wheat from 'pmt-ui/svg-icons/food/wheat'\r\nimport Tartrazine from 'pmt-ui/svg-icons/food/tartrazine'\r\nimport Rice from 'pmt-ui/svg-icons/food/rice'\r\nimport RedMeat from 'pmt-ui/svg-icons/food/red_meat'\r\nimport PoultryMeat from 'pmt-ui/svg-icons/food/poultry_meat'\r\nimport Fruit from 'pmt-ui/svg-icons/food/fruit'\r\nimport Corn from 'pmt-ui/svg-icons/food/corn'\r\nimport Garlic from 'pmt-ui/svg-icons/food/garlic'\r\nimport Balsam from 'pmt-ui/svg-icons/food/balsam'\r\nimport Buckwheat from 'pmt-ui/svg-icons/food/buckwheat'\r\n\r\nexport { default as Allergen } from './Allergen'\r\nexport { default as Diet } from './Diet'\r\nexport { default as Gender } from './Gender'\r\n\r\nexport const DEFAULT_BIRTHDATE = -2208988800000\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getGenderLabel = gender => {\r\n  switch (gender) {\r\n    case 0:\r\n      return tr('global.gender.NONE')\r\n    case 1:\r\n      return tr('global.gender.MALE')\r\n    case 2:\r\n      return tr('global.gender.FEMALE')\r\n\r\n    default:\r\n      return gender\r\n  }\r\n}\r\n\r\nexport const getGenderOptions = () =>\r\n  map(Gender, gender => ({\r\n    value: gender,\r\n    label: getGenderLabel(gender),\r\n  }))\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getDietLabel = diet => {\r\n  switch (diet) {\r\n    case Diet.NONE:\r\n      return tr('global.diet.NONE')\r\n    case Diet.KOSHER:\r\n      return tr('global.diet.KOSHER')\r\n    case Diet.HALAL:\r\n      return tr('global.diet.HALAL')\r\n    case Diet.VEGETARIAN:\r\n      return tr('global.diet.VEGETARIAN')\r\n    case Diet.VEGAN:\r\n      return tr('global.diet.VEGAN')\r\n    default:\r\n      return diet\r\n  }\r\n}\r\n\r\nexport const getDietsOptions = () =>\r\n  map(Diet, diet => ({\r\n    value: diet,\r\n    label: getDietLabel(diet),\r\n  }))\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getAllergenLabel = allergen => {\r\n  switch (allergen) {\r\n    case Allergen.BALSAM_OF_PERU:\r\n      return tr('global.allergen.BALSAM_OF_PERU')\r\n    case Allergen.BUCKWHEAT:\r\n      return tr('global.allergen.BUCKWHEAT')\r\n    case Allergen.CELERY:\r\n      return tr('global.allergen.CELERY')\r\n    case Allergen.CHEESE:\r\n      return tr('global.allergen.CHEESE')\r\n    case Allergen.CORN:\r\n      return tr('global.allergen.CORN')\r\n    case Allergen.CRUSTACEAN:\r\n      return tr('global.allergen.CRUSTACEAN')\r\n    case Allergen.EGG:\r\n      return tr('global.allergen.EGG')\r\n    case Allergen.FISH:\r\n      return tr('global.allergen.FISH')\r\n    case Allergen.FRUIT:\r\n      return tr('global.allergen.FRUIT')\r\n    case Allergen.GARLIC:\r\n      return tr('global.allergen.GARLIC')\r\n    case Allergen.LACTOSE:\r\n      return tr('global.allergen.LACTOSE')\r\n    case Allergen.LUPINE:\r\n      return tr('global.allergen.LUPINE')\r\n    case Allergen.MUSTARD:\r\n      return tr('global.allergen.MUSTARD')\r\n    case Allergen.PEANUT:\r\n      return tr('global.allergen.PEANUT')\r\n    case Allergen.POULTRY_MEAT:\r\n      return tr('global.allergen.POULTRY_MEAT')\r\n    case Allergen.RED_MEAT:\r\n      return tr('global.allergen.RED_MEAT')\r\n    case Allergen.RICE:\r\n      return tr('global.allergen.RICE')\r\n    case Allergen.SESAME:\r\n      return tr('global.allergen.SESAME')\r\n    case Allergen.SHELLFISH:\r\n      return tr('global.allergen.SHELLFISH')\r\n    case Allergen.SOYA:\r\n      return tr('global.allergen.SOYA')\r\n    case Allergen.SULPHITES:\r\n      return tr('global.allergen.SULPHITES')\r\n    case Allergen.TARTRAZINE:\r\n      return tr('global.allergen.TARTRAZINE')\r\n\r\n    case Allergen.GLUTEN:\r\n      return tr('global.allergen.GLUTEN')\r\n    case Allergen.GLUTEN_OATS:\r\n      return tr('global.allergen.GLUTEN_OATS')\r\n    case Allergen.GLUTEN_WHEAT:\r\n      return tr('global.allergen.GLUTEN_WHEAT')\r\n    case Allergen.GLUTEN_KAMUT:\r\n      return tr('global.allergen.GLUTEN_KAMUT')\r\n    case Allergen.GLUTEN_SPELT:\r\n      return tr('global.allergen.GLUTEN_SPELT')\r\n    case Allergen.GLUTEN_GREEN_SPELT:\r\n      return tr('global.allergen.GLUTEN_GREEN_SPELT')\r\n    case Allergen.GLUTEN_EINKORN:\r\n      return tr('global.allergen.GLUTEN_EINKORN')\r\n    case Allergen.GLUTEN_RYE:\r\n      return tr('global.allergen.GLUTEN_RYE')\r\n    case Allergen.GLUTEN_BARLEY:\r\n      return tr('global.allergen.GLUTEN_BARLEY')\r\n    case Allergen.GLUTEN_EMMER:\r\n      return tr('global.allergen.GLUTEN_EMMER')\r\n    case Allergen.GLUTEN_TRITICALE:\r\n      return tr('global.allergen.GLUTEN_TRITICALE')\r\n\r\n    case Allergen.NUTS:\r\n      return tr('global.allergen.NUTS')\r\n    case Allergen.NUTS_ALMONDS:\r\n      return tr('global.allergen.NUTS_ALMONDS')\r\n    case Allergen.NUTS_HAZELNUTS:\r\n      return tr('global.allergen.NUTS_HAZELNUTS')\r\n    case Allergen.NUTS_WALNUTS:\r\n      return tr('global.allergen.NUTS_WALNUTS')\r\n    case Allergen.NUTS_CASHEW:\r\n      return tr('global.allergen.NUTS_CASHEW')\r\n    case Allergen.NUTS_PECANS:\r\n      return tr('global.allergen.NUTS_PECANS')\r\n    case Allergen.NUTS_BRAZIL:\r\n      return tr('global.allergen.NUTS_BRAZIL')\r\n    case Allergen.NUTS_PISTACHES:\r\n      return tr('global.allergen.NUTS_PISTACHES')\r\n    case Allergen.NUTS_MACADAMIA_OR_QUEENSLAND:\r\n      return tr('global.allergen.NUTS_MACADAMIA_OR_QUEENSLAND')\r\n\r\n    default:\r\n      return allergen\r\n  }\r\n}\r\n\r\nexport const getAllergenIcon = allergen => {\r\n  switch (allergen) {\r\n    case Allergen.BALSAM_OF_PERU:\r\n      return <Balsam />\r\n    case Allergen.BUCKWHEAT:\r\n      return <Buckwheat />\r\n    case Allergen.CELERY:\r\n      return <Celery />\r\n    case Allergen.CHEESE:\r\n      return <Cheese />\r\n    case Allergen.CORN:\r\n      return <Corn />\r\n    case Allergen.CRUSTACEAN:\r\n      return <Crab />\r\n    case Allergen.EGG:\r\n      return <Egg />\r\n    case Allergen.FISH:\r\n      return <Fish />\r\n    case Allergen.FRUIT:\r\n      return <Fruit />\r\n    case Allergen.GARLIC:\r\n      return <Garlic />\r\n    case Allergen.LACTOSE:\r\n      return <Milk />\r\n    case Allergen.LUPINE:\r\n      return <Lupine />\r\n    case Allergen.MUSTARD:\r\n      return <Mustard />\r\n    case Allergen.PEANUT:\r\n      return <Peanut />\r\n    case Allergen.POULTRY_MEAT:\r\n      return <PoultryMeat />\r\n    case Allergen.RED_MEAT:\r\n      return <RedMeat />\r\n    case Allergen.RICE:\r\n      return <Rice />\r\n    case Allergen.SESAME:\r\n      return <Sesame />\r\n    case Allergen.SHELLFISH:\r\n      return <Shellfish />\r\n    case Allergen.SOYA:\r\n      return <Soy />\r\n    case Allergen.SULPHITES:\r\n      return <Sulphites />\r\n    case Allergen.TARTRAZINE:\r\n      return <Tartrazine />\r\n\r\n    case Allergen.GLUTEN:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_OATS:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_WHEAT:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_KAMUT:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_SPELT:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_GREEN_SPELT:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_EINKORN:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_RYE:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_BARLEY:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_EMMER:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_TRITICALE:\r\n      return <Wheat />\r\n\r\n    case Allergen.NUTS:\r\n      return <Nut />\r\n    case Allergen.NUTS_ALMONDS:\r\n      return <Nut />\r\n    case Allergen.NUTS_HAZELNUTS:\r\n      return <Nut />\r\n    case Allergen.NUTS_WALNUTS:\r\n      return <Nut />\r\n    case Allergen.NUTS_CASHEW:\r\n      return <Nut />\r\n    case Allergen.NUTS_PECANS:\r\n      return <Nut />\r\n    case Allergen.NUTS_BRAZIL:\r\n      return <Nut />\r\n    case Allergen.NUTS_PISTACHES:\r\n      return <Nut />\r\n    case Allergen.NUTS_MACADAMIA_OR_QUEENSLAND:\r\n      return <Nut />\r\n\r\n    default:\r\n      return null\r\n  }\r\n}\r\n\r\nexport const getAllergensOptions = () =>\r\n  map(Allergen, allergen => ({\r\n    value: allergen,\r\n    label: getAllergenLabel(allergen),\r\n    icon: getAllergenIcon(allergen),\r\n  }))\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const DEFAULT_DIETARY_PREFERENCES = {\r\n  diet: Diet.NONE,\r\n  allergens: [],\r\n}\r\n","import React, { Fragment } from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Chip from '@material-ui/core/Chip'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport { getAllergensOptions } from '../../constants'\r\n\r\nconst AllergenChooser = ({ value, onChange, limitTags = -1, ...otherProps }) => {\r\n  const allergensOptions = getAllergensOptions()\r\n\r\n  return (\r\n    <Autocomplete\r\n      fullWidth\r\n      multiple\r\n      limitTags={limitTags}\r\n      options={allergensOptions}\r\n      disableCloseOnSelect\r\n      getOptionLabel={({ label }) => label}\r\n      renderOption={(option, { selected }) => (\r\n        <Fragment>\r\n          <Checkbox size=\"small\" style={{ marginRight: 8 }} checked={selected} color=\"primary\" />\r\n          {option.label}\r\n        </Fragment>\r\n      )}\r\n      renderInput={params => (\r\n        <TextField {...params} variant=\"standard\" label={tr('global.allergen.chooser.label')} />\r\n      )}\r\n      renderTags={(tag, getTagProps) =>\r\n        tag.map((option, index) => (\r\n          <Chip {...getTagProps({ index })} icon={option.icon} label={option.label} />\r\n        ))\r\n      }\r\n      onChange={(e, newValues) => {\r\n        onChange(newValues.map(({ value }) => value))\r\n      }}\r\n      value={value.map(v => findOnArray(allergensOptions, option => option.value === v))}\r\n      {...otherProps}\r\n    />\r\n  )\r\n}\r\nexport default AllergenChooser\r\n","import React from 'react'\r\n\r\nimport Allergen from 'pmt-modules/user/constants/Allergen'\r\n\r\nimport CountryChooser from 'pmt-ui/CountryChooser'\r\nimport AllergenChooser from 'pmt-modules/user/components/AllergenChooser'\r\n\r\nconst getComponents = [\r\n  {\r\n    name: 'CountryChooser, single selection',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n          <CountryChooser\r\n            required\r\n            label='Pays de résidence'\r\n            className=\"u-sizeFullWidth\"\r\n            value={'FR'}\r\n            onChange={(country) => {}}\r\n            error={true}\r\n            helperText={'error'}\r\n          />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <CountryChooser\r\n        required\r\n        label=\"Pays de résidence\"\r\n        className=\"u-sizeFullWidth\"\r\n        value={'FR'}\r\n        onChange={country => {}}\r\n        error={true}\r\n        helperText={'error'}\r\n      />\r\n    ),\r\n  },\r\n  {\r\n    name: 'AllergenChooser, multiple selection',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n          <AllergenChooser\r\n            value={[\r\n              Allergen.PEANUT,\r\n              Allergen.EGG,\r\n            ]}\r\n            onChange={allergens => {}}\r\n          />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: <AllergenChooser value={[Allergen.PEANUT, Allergen.EGG]} onChange={allergens => {}} />,\r\n  },\r\n]\r\n\r\nexport default {\r\n  title: 'List Chooser',\r\n  components: getComponents,\r\n}\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet NavigationCheck = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\r\n  </SvgIcon>\r\n);\r\nNavigationCheck = pure(NavigationCheck);\r\nNavigationCheck.displayName = 'NavigationCheck';\r\nNavigationCheck.pmtName = 'SvgIcon';\r\n\r\nexport default NavigationCheck;","import React from 'react'\r\n\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Avatar from 'pmt-ui/Avatar'\r\nimport CheckIcon from 'pmt-ui/svg-icons/navigation/check'\r\nimport EditIcon from 'pmt-ui/svg-icons/editor/mode-edit'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    position: 'relative',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    flexGrow: 1,\r\n  },\r\n  separator: {\r\n    border: `0.5px solid ${theme.pmt.separator[400]}`,\r\n    width: '100%',\r\n  },\r\n  separatorRight: {\r\n    right: 0,\r\n    left: '50%',\r\n    marginLeft: 10,\r\n  },\r\n  separatorLeft: {\r\n    left: 0,\r\n    right: '50%',\r\n    marginRight: 10,\r\n  },\r\n  title: {\r\n    lineHeight: '20px',\r\n  },\r\n  current: {},\r\n  avatar: {\r\n    marginRight: 10,\r\n  },\r\n  avatarCurrent: {\r\n    marginRight: 10,\r\n    color: '#fff',\r\n    backgroundColor: theme.palette.primary.main,\r\n  },\r\n  avatarCheck: {\r\n    backgroundColor: theme.palette.primary.main,\r\n  },\r\n})\r\n\r\n/**\r\n * https://material.io/guidelines/components/steppers.html#steppers-types-of-steps\r\n */\r\nconst StepIcon = ({ step, index }) => {\r\n  if (step.done) {\r\n    if (step.editable) {\r\n      //\r\n      // Editable steps allow users to return later to edit a step. These are ideal for workflows\r\n      // that involve editing steps within a session.\r\n      //\r\n      return <EditIcon />\r\n    }\r\n\r\n    //\r\n    // Non-editable steps cannot be edited once completed.\r\n    // Non-editable steps should be used when:\r\n    // Users cannot edit a step later\r\n    // Step editing poses a distraction risk to form completion\r\n    //\r\n    return <CheckIcon />\r\n  }\r\n\r\n  if (step.icon) {\r\n    return step.icon\r\n  }\r\n\r\n  return <span>{index}</span>\r\n}\r\n\r\nconst StepAvatar = ({ step, isCurrent, classes, index }) => (\r\n  <Avatar\r\n    className={clsx(classes.avatar, {\r\n      [classes.avatarCurrent]: isCurrent,\r\n      [classes.avatarCheck]: step.done || false,\r\n    })}\r\n  >\r\n    <StepIcon step={step} index={index} />\r\n  </Avatar>\r\n)\r\n\r\nconst Step = ({ step, isCurrent, classes, index, isLast, onClick }) => (\r\n  <div\r\n    className={clsx(classes.root, {\r\n      [classes.current]: isCurrent,\r\n    })}\r\n    onClick={onClick}\r\n  >\r\n    {index !== 0 && <div className={clsx(classes.separator, classes.separatorLeft)} />}\r\n\r\n    <StepAvatar isCurrent={isCurrent} classes={classes} step={step} index={index} />\r\n\r\n    <div className={classes.title}>{step.title}</div>\r\n\r\n    {!isLast && <div className={clsx(classes.separator, classes.separatorRight)} />}\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(Step)\r\n","import React from 'react'\r\n\r\nconst StepContent = ({ show, children }) => (\r\n  !show ? null : (\r\n    <div>\r\n      {children}\r\n    </div>\r\n  )\r\n)\r\n\r\nexport default StepContent\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Step from './components/Step'\r\nimport StepContent from './components/StepContent'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n\r\n  },\r\n  header: {\r\n    position: 'relative',\r\n    justifyContent: 'space-between',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n  },\r\n})\r\n\r\n/**\r\n * See https://material.io/guidelines/components/steppers.html\r\n */\r\nconst Stepper = ({ current, steps, classes, onClick }) => (\r\n  <div\r\n    className={classes.root}\r\n  >\r\n    <div\r\n      className={classes.header}\r\n    >\r\n      {steps.map((step, index) => (\r\n        <Step\r\n          key={step.key}\r\n          index={index}\r\n          step={step}\r\n          isCurrent={current === step.key}\r\n          isLast={index === steps.length - 1}\r\n          test={index}\r\n          test2={steps.length - 1}\r\n          onClick={() => onClick && onClick(step.key)}\r\n        />\r\n      ))}\r\n    </div>\r\n    <div\r\n      className={classes.contentArea}\r\n    >\r\n      {steps.map((step, index) => (\r\n        <StepContent\r\n          key={step.key}\r\n          show={current === step.key}\r\n        >\r\n          {step.content}\r\n        </StepContent>\r\n      ))}\r\n    </div>\r\n  </div>\r\n)\r\n\r\nStepper.defaultProps = {\r\n  onClick: null,\r\n}\r\n\r\nStepper.propTypes = {\r\n  onClick: PropTypes.func,\r\n\r\n  /**\r\n   * key of the current step\r\n   */\r\n  current: PropTypes.any.isRequired,\r\n\r\n  /**\r\n  * Define the different steps\r\n  *\r\n  * ```\r\n  * [\r\n  *   {\r\n  *     key: Step.USER,\r\n  *     title: 'Title',\r\n  *     icon: // element, optionnal,\r\n  *     children: // react component\r\n  *     done: // boolean, display the step has done\r\n  *   },\r\n  * ]\r\n  * ```\r\n  */\r\n  steps: PropTypes.array.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(Stepper)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet AccountCardDetails = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M2,3H22C23.05,3 24,3.95 24,5V19C24,20.05 23.05,21 22,21H2C0.95,21 0,20.05 0,19V5C0,3.95 0.95,3 2,3M14,6V7H22V6H14M14,8V9H21.5L22,9V8H14M14,10V11H21V10H14M8,13.91C6,13.91 2,15 2,17V18H14V17C14,15 10,13.91 8,13.91M8,6A3,3 0 0,0 5,9A3,3 0 0,0 8,12A3,3 0 0,0 11,9A3,3 0 0,0 8,6Z\"/>\r\n  </SvgIcon>\r\n);\r\nAccountCardDetails = pure(AccountCardDetails);\r\nAccountCardDetails.displayName = 'AccountCardDetails';\r\nAccountCardDetails.muiName = 'SvgIcon';\r\n\r\nexport default AccountCardDetails;\r\n","import React from 'react'\r\n\r\nimport Stepper from 'pmt-ui/Stepper'\r\nimport AccountCardDetails from 'pmt-ui/svg-icons/communication/account-card-details'\r\n\r\nconst Step = {\r\n  USER: 'STEP::USER',\r\n  USER_ACCOUNT: 'STEP::USER_ACCOUNT',\r\n  TEST: 'STEP::TEST',\r\n  TEST2: 'STEP::TEST2',\r\n}\r\n\r\nconst getComponents = [\r\n  {\r\n    name: 'DateField INLINE',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n          <Stepper\r\n            current={Step.USER}\r\n            steps={[\r\n              {\r\n                key: Step.USER,\r\n                title: 'User',\r\n                icon: (\r\n                  <AccountCardDetails\r\n                    color={'inherit'}\r\n                  />\r\n                ),\r\n                content: (\r\n                  <div>CONTENT</div>\r\n                )\r\n              },\r\n              {\r\n                key: Step.USER_ACCOUNT,\r\n                title: 'User account',\r\n                done: true,\r\n                content: (\r\n                  <div>\r\n                    User account form\r\n                  </div>\r\n                ),\r\n              },\r\n              {\r\n                key: Step.TEST,\r\n                title: 'test',\r\n                done: false,\r\n                content: (\r\n                  <div>\r\n                    test\r\n                  </div>\r\n                ),\r\n              },\r\n              {\r\n                key: Step.TEST2,\r\n                title: 'test 2',\r\n                done: true,\r\n                editable: true,\r\n                content: (\r\n                  <div>\r\n                    test 2\r\n                  </div>\r\n                ),\r\n              },\r\n            ]}\r\n          />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <Stepper\r\n        current={Step.USER}\r\n        steps={[\r\n          {\r\n            key: Step.USER,\r\n            title: 'User',\r\n            icon: <AccountCardDetails color={'inherit'} />,\r\n            content: <div>CONTENT</div>,\r\n          },\r\n          {\r\n            key: Step.USER_ACCOUNT,\r\n            title: 'User account',\r\n            done: true,\r\n            content: <div>User account form</div>,\r\n          },\r\n          {\r\n            key: Step.TEST,\r\n            title: 'test',\r\n            done: false,\r\n            content: <div>test</div>,\r\n          },\r\n          {\r\n            key: Step.TEST2,\r\n            title: 'test 2',\r\n            done: true,\r\n            editable: true,\r\n            content: <div>test 2</div>,\r\n          },\r\n        ]}\r\n      />\r\n    ),\r\n  },\r\n]\r\n\r\nexport default {\r\n  title: 'Stepper',\r\n  components: getComponents,\r\n}\r\n","import React from 'react'\r\nimport map from 'lodash/map'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { FormGroup, FormControlLabel } from 'pmt-ui/Form'\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\n\r\nconst styles = theme => ({\r\n  resizer: {\r\n    maxWidth: '100%',\r\n    transition: 'width 0.4s cubic-bezier(0.680, -0.250, 0.265, 1.250)',\r\n  },\r\n})\r\n\r\nconst RENDER_TYPE = {\r\n  MOBILE: {\r\n    name: 'MOBILE',\r\n    label: 'Mobile',\r\n    resolution: 360,\r\n  },\r\n  TABLET: {\r\n    name: 'TABLET',\r\n    label: 'Tablette',\r\n    resolution: 1024,\r\n  },\r\n  DESKTOP: {\r\n    name: 'DESKTOP',\r\n    label: 'Ordinateur',\r\n    resolution: 1366,\r\n  },\r\n}\r\n\r\nclass Resizer extends React.Component {\r\n  state = {\r\n    renderType: RENDER_TYPE.DESKTOP,\r\n  }\r\n\r\n  handleChange(renderType) {\r\n    this.setState({\r\n      renderType,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { children, classes } = this.props\r\n\r\n    return (\r\n      <div\r\n        className={classes.resizer}\r\n        style={{ width: `${this.state.renderType.resolution}px` }}\r\n      >\r\n        <FormGroup row>\r\n          {map(RENDER_TYPE, renderType => {\r\n            return (\r\n              <FormControlLabel\r\n                control={\r\n                  <Checkbox\r\n                    color=\"primary\"\r\n                    checked={renderType.name === this.state.renderType.name}\r\n                    onChange={() => {\r\n                      this.handleChange(renderType)\r\n                    }}\r\n                  />\r\n                }\r\n                label={renderType.label}\r\n              />\r\n            )\r\n          })}\r\n        </FormGroup>\r\n        {children}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(Resizer)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport Resizer from './Resizer'\r\n\r\nconst styles = theme => ({\r\n  component: {\r\n    width: '100%',\r\n    marginBottom: theme.spacing(4),\r\n  },\r\n  title: {\r\n    textAlign: 'left',\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n})\r\n\r\nclass ComponentList extends React.Component {\r\n  generateComponent(componentList) {\r\n    const { classes } = this.props\r\n\r\n    return componentList.map((component, index) => (\r\n      <div key={index} className={classes.component}>\r\n        <Typography variant=\"subtitle1\" className={classes.title}>\r\n          {component.name}\r\n          <Typography variant=\"caption\">{component.definition}</Typography>\r\n        </Typography>\r\n        {component.resizer ? (\r\n          <Resizer selectedType={'DESKTOP'}>{component.render}</Resizer>\r\n        ) : (\r\n          <div>{component.render}</div>\r\n        )}\r\n      </div>\r\n    ))\r\n  }\r\n\r\n  render() {\r\n    const { list, classes } = this.props\r\n\r\n    return <div className={classes.componentList}>{this.generateComponent(list)}</div>\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ComponentList)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport ComponentList from './ComponentList'\r\n\r\nconst styles = theme => ({\r\n  app: {\r\n    width: '100%',\r\n    padding: theme.spacing(4),\r\n  },\r\n  section: {\r\n    width: '100%',\r\n    marginBottom: theme.spacing(8),\r\n  },\r\n  title: {\r\n    textAlign: 'left',\r\n    paddingBottom: theme.spacing(1),\r\n    marginBottom: theme.spacing(4),\r\n    borderBottom: `1px solid ${theme.pmt.colors.grey500}`,\r\n  },\r\n})\r\n\r\nclass SectionList extends React.Component {\r\n  generateSection(sectionList) {\r\n    const { classes } = this.props\r\n\r\n    return sectionList.map((section, index) => (\r\n      <div key={index} className={classes.section}>\r\n        <Typography variant=\"h6\" className={classes.title}>\r\n          {section.title}\r\n        </Typography>\r\n        <ComponentList\r\n          list={section.getComponents ? section.getComponents() : section.components}\r\n        />\r\n      </div>\r\n    ))\r\n  }\r\n\r\n  render() {\r\n    const { list, classes } = this.props\r\n\r\n    return <div className={classes.sectionList}>{this.generateSection(list)}</div>\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(SectionList)\r\n","import React from 'react'\r\nimport map from 'lodash/map'\r\n\r\nimport { withStyles, withTheme } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\nimport { CardBasic, CardPostIt } from 'pmt-ui/Card'\r\nimport SocialPerson from 'pmt-ui/svg-icons/social/person'\r\nimport LogoGrey from 'pmt-ui/svg-icons/pmt/LogoGrey'\r\n\r\nimport calendarPart from './parts/calendar'\r\nimport listChooserPart from './parts/listChooser'\r\nimport stepperPart from './parts/stepper'\r\n\r\nimport { SectionList } from '../../components'\r\n\r\nconst styles = theme => ({\r\n  app: {\r\n    width: '100%',\r\n    maxWidth: '1430px',\r\n    margin: '0 auto',\r\n    padding: theme.spacing(4),\r\n  },\r\n  logoContainer: {\r\n    textAlign: 'center',\r\n    marginBottom: theme.spacing(5),\r\n  },\r\n  logo: {\r\n    width: '100%',\r\n    maxWidth: 400,\r\n    height: 125,\r\n  },\r\n  title: {\r\n    textAlign: 'left',\r\n  },\r\n  introduction: {\r\n    marginTop: theme.spacing(5),\r\n    marginBottom: theme.spacing(5),\r\n  },\r\n  color: {\r\n    width: '100%',\r\n    height: 80,\r\n    textAlign: 'center',\r\n    lineHeight: '80px',\r\n  },\r\n  red400Background: {\r\n    backgroundColor: theme.pmt.colors.red400,\r\n  },\r\n  orange300Background: {\r\n    backgroundColor: theme.pmt.colors.orange300,\r\n  },\r\n  lightGreen400Background: {\r\n    backgroundColor: theme.pmt.colors.lightGreen400,\r\n  },\r\n  blue700Background: {\r\n    backgroundColor: theme.pmt.colors.blue700,\r\n  },\r\n  grey500Background: {\r\n    backgroundColor: theme.pmt.colors.grey500,\r\n  },\r\n  brown400Background: {\r\n    backgroundColor: theme.pmt.colors.brown400,\r\n  },\r\n  pink400Background: {\r\n    backgroundColor: theme.pmt.colors.pink400,\r\n  },\r\n  yellow400Background: {\r\n    backgroundColor: theme.pmt.colors.yellow400,\r\n  },\r\n})\r\n\r\nclass StyleGuidePage extends React.Component {\r\n  render() {\r\n    const { classes, theme } = this.props\r\n\r\n    const colorComponents = map(theme.pmt.colors, (color, index) => {\r\n      return {\r\n        name: index,\r\n        definition: `theme.pmt.colors.${index}`,\r\n        render: <div className={`${classes.color} ${classes[`${index}Background`]}`}>{index}</div>,\r\n      }\r\n    })\r\n\r\n    return (\r\n      <div className={classes.app}>\r\n        <div className={classes.logoContainer}>\r\n          <LogoGrey viewBox={'0 0 150 43.5'} className={classes.logo} />\r\n        </div>\r\n        <Typography variant=\"h5\" className={classes.title}>\r\n          PayMyTable's styleguide\r\n        </Typography>\r\n        <Typography variant=\"body2\" className={classes.introduction}>\r\n          Welcome to PayMyTable's styleguide. You will find here everything you need, from component\r\n          structure to rendering properties.\r\n          <br />\r\n          Have some fun discovering this great toolbox.\r\n          <br />\r\n          <br />\r\n          The props showed in example are not an exhaustive list. Don't hesitate to check the\r\n          component code.\r\n        </Typography>\r\n        <SectionList\r\n          list={[\r\n            {\r\n              title: 'Colors',\r\n              components: colorComponents,\r\n            },\r\n            {\r\n              title: 'Cards',\r\n              components: [\r\n                {\r\n                  name: 'Basic card',\r\n                  definition: '<CardBasic color={theme.pmt.colors.grey500} />',\r\n                  render: (\r\n                    <CardBasic\r\n                      color={theme.pmt.colors.grey500}\r\n                      header={{\r\n                        avatar: <SocialPerson viewBox={'0 0 24 24'} />,\r\n                        title: 'Title example',\r\n                      }}\r\n                      content={<div>Content example</div>}\r\n                    />\r\n                  ),\r\n                  resizer: true,\r\n                },\r\n                {\r\n                  name: 'Basic green card',\r\n                  definition: '<CardBasic color={theme.pmt.colors.lightGreen400} />',\r\n                  render: (\r\n                    <CardBasic\r\n                      color={theme.pmt.colors.lightGreen400}\r\n                      header={{\r\n                        avatar: <SocialPerson viewBox={'0 0 24 24'} />,\r\n                        title: 'Title example',\r\n                      }}\r\n                      content={<div>Content example</div>}\r\n                    />\r\n                  ),\r\n                  resizer: true,\r\n                },\r\n                {\r\n                  name: 'Post it card',\r\n                  definition: '<CardPostIt />',\r\n                  render: (\r\n                    <CardPostIt\r\n                      color={{\r\n                        background: theme.pmt.colors.primary50,\r\n                        border: theme.palette.primary.main,\r\n                        font: theme.palette.primary.main,\r\n                      }}\r\n                      header={{\r\n                        avatar: <SocialPerson viewBox={'0 0 24 24'} />,\r\n                        title: 'Title example',\r\n                      }}\r\n                      content={<div>Content example</div>}\r\n                    />\r\n                  ),\r\n                  resizer: true,\r\n                },\r\n              ],\r\n            },\r\n            calendarPart,\r\n            listChooserPart,\r\n            stepperPart,\r\n          ]}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withTheme(withStyles(styles)(StyleGuidePage))\r\n","import React from 'react'\r\n\r\n//\r\n//\r\n//\r\n\r\nconst Test = () => <React.Fragment />\r\n\r\nexport default Test\r\n","import { getRoute } from 'pmt-modules/routing'\r\n\r\nimport DevThemePage from '../../../dev/pages/theme'\r\nimport StyleguidePage from '../../../dev/pages/styleguide'\r\nimport TestPage from '../../../dev/pages/test'\r\n\r\nexport default [\r\n  {\r\n    definition: getRoute('DEV_THEME'),\r\n    handler: DevThemePage,\r\n  },\r\n  {\r\n    definition: getRoute('DEV_STYLEGUIDE'),\r\n    handler: StyleguidePage,\r\n  },\r\n  {\r\n    definition: getRoute('DEV_TEST'),\r\n    handler: TestPage,\r\n  },\r\n]\r\n","import devRoutesModule from './devRoutes.js'\r\n\r\nconst devRoutes = process.env.NODE_ENV === 'production' ? [] : devRoutesModule.default\r\n\r\nexport default devRoutes\r\n","import React from 'react'\r\n\r\nimport { Route, Switch } from 'react-router-dom'\r\nimport map from 'lodash/map'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nimport Layout from 'pmt-ui/Layout'\r\n\r\nimport { getQueryFromUri } from 'pmt-utils/url'\r\n\r\nimport devRoutes from './devRoutes'\r\n\r\n//\r\n// Take the appOptions provide by the projet and create the routes\r\n//\r\n\r\n// Allows to handle refacto from react-router v3 to v4, where routeParams does not long exists.\r\nconst createRouteContent = route => ({ location, ...props }) => {\r\n  const locationFinal = { ...location, query: getQueryFromUri(location.search) }\r\n  return React.createElement(route.handler, {\r\n    ...props,\r\n    location: locationFinal,\r\n    route: route.definition,\r\n    routeParams: props.match.params,\r\n    params: props.match.params,\r\n  })\r\n}\r\n\r\nconst generateRoute = route => {\r\n  invariant(!isNil(route.definition), `definition does not exists for ${route.handler}`)\r\n  invariant(!isNil(route.handler), `handler does not exists for ${route.definition.name}`)\r\n\r\n  if (!route.definition.disable) {\r\n    return (\r\n      <Route\r\n        exact\r\n        name={route.definition.name}\r\n        path={route.definition.path}\r\n        component={createRouteContent(route)}\r\n        key={route.definition.name}\r\n      />\r\n    )\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nconst configureRoutes = ({ routes }) => {\r\n  // do not keep disabled routes\r\n  const routesToGenerate = routes.filter(route => !route.disabled)\r\n\r\n  return (\r\n    <Layout>\r\n      <Switch>\r\n        {/* Routes created on pmt-modules/dev/pages that are globals and usefull in development */}\r\n        {map(devRoutes, generateRoute)}\r\n\r\n        {map(routesToGenerate, generateRoute)}\r\n      </Switch>\r\n    </Layout>\r\n  )\r\n}\r\n\r\nexport default configureRoutes\r\n","import React, { Suspense, lazy, useMemo } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Provider } from 'react-redux'\r\nimport { PersistGate } from 'redux-persist/integration/react'\r\nimport { persistStore } from 'redux-persist'\r\n\r\n// Lazy load components to improve startup time\r\nconst ConnectedRouter = lazy(() =>\r\n  import('connected-react-router').then(m => ({ default: m.ConnectedRouter }))\r\n)\r\nconst Content = lazy(() => import('./Content'))\r\n\r\nimport { getRoutes, getHistory } from 'pmt-modules/routing'\r\nimport ErrorBoundary from 'pmt-ui/ErrorBoundary'\r\nimport configureRoutes from './utils/configureRoutes'\r\n\r\nconst App = ({ store }) => {\r\n  const persistor = persistStore(store)\r\n\r\n  return (\r\n    <ErrorBoundary>\r\n      <Provider store={store}>\r\n        <PersistGate loading={null} persistor={persistor}>\r\n          <Suspense fallback={<div>Loading...</div>}>\r\n            <Content>\r\n              <ConnectedRouter history={getHistory()}>\r\n                {configureRoutes({ routes: getRoutes() })}\r\n              </ConnectedRouter>\r\n            </Content>\r\n          </Suspense>\r\n        </PersistGate>\r\n      </Provider>\r\n    </ErrorBoundary>\r\n  )\r\n}\r\n\r\nApp.propTypes = {\r\n  store: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default App\r\n","import { SdkRoutingEnum, Route } from 'pmt-modules/routing'\r\n\r\nconst RoutingEnum = {\r\n  ...SdkRoutingEnum,\r\n\r\n  ORDER__MODE: new Route('ORDER::MODE', '/mode', false),\r\n\r\n  ORDER__STORE_LOCATOR: new Route('ORDER::STORE_LOCATOR', '/store-locator', false),\r\n\r\n  ORDER__CATALOG: new Route('ORDER::CATALOG', '/restaurant/:restaurantId/catalog', false),\r\n\r\n  ORDER__CATEGORY: new Route(\r\n    'ORDER::CATEGORY',\r\n    '/restaurant/:restaurantId/catalog/:categoryId',\r\n    false\r\n  ),\r\n\r\n  ORDER__MENU: new Route('ORDER::MENU', '/restaurant/:restaurantId/catalog/menus/:menuId', false),\r\n\r\n  ORDER__PRODUCT: new Route(\r\n    'ORDER::PRODUCT',\r\n    '/restaurant/:restaurantId/catalog/products/:productId',\r\n    false\r\n  ),\r\n\r\n  ORDER__CART: new Route('ORDER::CART', '/cart', false),\r\n\r\n  ORDER__USER__ACCOUNT: new Route('ORDER::USER::ACCOUNT', '/users/:userId/account', true),\r\n\r\n  ORDER__DELIVERY_ADDRESS: new Route('ORDER::DELIVERY_ADDRESS', '/delivery-address', false),\r\n\r\n  ORDER__PAYMENT: new Route('ORDER::PAYMENT', '/payment', true),\r\n\r\n  ORDER__PAYMENT__VERIFICATION: new Route(\r\n    'ORDER::PAYMENT::VERIFICATION',\r\n    '/payment/verification',\r\n    true\r\n  ),\r\n\r\n  ORDER__CONFIRM: new Route('ORDER::CONFIRM', '/confirm', true),\r\n}\r\n\r\nexport default RoutingEnum\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass HomePage extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    props.redirectTo(getRoute('ORDER__MODE'))\r\n  }\r\n\r\n  render() {\r\n    return <div />\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {}\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    redirectTo,\r\n  }\r\n)(HomePage)\r\n","import { createAction } from '../redux'\r\n\r\nimport { getRoute, createRedirectToAction } from 'pmt-modules/routing'\r\n\r\nimport { ModalType, createShowDialogAction, createHideDialogAction } from 'pmt-modules/dialog'\r\n\r\nexport const OrderPluginAction = {\r\n  SET_FROM: 'ORDER_PLUGIN::SET_FROM',\r\n  SELECT_DAY: 'ORDER_PLUGIN::SELECT_DAY',\r\n  SELECT_SLOT: 'ORDER_PLUGIN::SELECT_SLOT',\r\n  RESET_DAY_AND_SLOT: 'ORDER_PLUGIN::RESET_DAY_AND_SLOT',\r\n  RESET_DUE_DATE: 'ORDER_PLUGIN::RESET_DUE_DATE',\r\n  SET_DUE_DATE_ASAP: 'ORDER_PLUGIN::SET_DUE_DATE_ASAP',\r\n  SET_TABLE_NUMBER: 'ORDER_PLUGIN::SET_TABLE_NUMBER',\r\n  DISABLE_TABLE_NUMBER_MODIFICATION: 'ORDER_PLUGIN::DISABLE_TABLE_NUMBER_MODIFICATION',\r\n  SET_POS_CHECK_ID: 'ORDER_PLUGIN::SET_POS_CHECK_ID',\r\n  SET_DELIVERY_ADDRESS: 'ORDER_PLUGIN::SET_DELIVERY_ADDRESS',\r\n  RESET_DELIVERY_ADDRESS: 'ORDER_PLUGIN::RESET_DELIVERY_ADDRESS',\r\n  SET_DELIVERY_ADDRESS_ERROR: 'ORDER_PLUGIN::SET_DELIVERY_ADDRESS_ERROR',\r\n  SET_SELECTED_CATEGORY: 'ORDER_PLUGIN::SET_SELECTED_CATEGORY',\r\n  SET_FIRST_SELECTED_CATEGORY: 'ORDER_PLUGIN::SET_FIRST_SELECTED_CATEGORY',\r\n  RESET_SELECTED_CATEGORY: 'ORDER_PLUGIN::RESET_SELECTED_CATEGORY',\r\n  SET_PARENT_CATEGORIES: 'ORDER_PLUGIN::SET_PARENT_CATEGORIES',\r\n  SET_CONFIGURATION_ERROR: 'ORDER_PLUGIN::SET_CONFIGURATION_ERROR',\r\n  DISPLAY_UPSELLING: 'ORDER_PLUGIN::DISPLAY_UPSELLING',\r\n  BACK_TO_STORE_LOCATOR: 'ORDER_PLUGIN::BACK_TO_STORE_LOCATOR',\r\n  RESET: 'ORDER_PLUGIN::RESET',\r\n  POST_ORDER_PREVIEW_AND_POST_ORDER_IF_SUCCEEDED:\r\n    'ORDER_PLUGIN::POST_ORDER_PREVIEW_AND_POST_ORDER_IF_SUCCEEDED',\r\n  ALCOHOL_ACCEPT: 'ALCOHOL_APPROVAL::ACCEPT', // register the fact that the user said he's authorized to buy alcohol\r\n  ALCOHOL_RESET: 'ALCOHOL_APPROVAL::RESET', // forget the fact that the user said he's authorized to buy alcohol\r\n}\r\n\r\nexport const setApiConsumer = apiConsumer =>\r\n  createAction(OrderPluginAction.SET_API_CONSUMER, {\r\n    apiConsumer,\r\n  })\r\n\r\n/**\r\n * @param {string} date - the date\r\n */\r\nexport const selectDay = date =>\r\n  createAction(OrderPluginAction.SELECT_DAY, {\r\n    date,\r\n  })\r\n\r\n/**\r\n * Reset the selected slot.\r\n *\r\n * @param {string} slot - the selected slot\r\n * @param {number} day - optional, to override the selected day.\r\n */\r\nexport const selectSlot = (slot, day = null) =>\r\n  createAction(OrderPluginAction.SELECT_SLOT, {\r\n    slot,\r\n    day,\r\n  })\r\n\r\nexport const resetDueDate = () => createAction(OrderPluginAction.RESET_DUE_DATE, {})\r\n\r\nexport const setDueDateAsap = () => createAction(OrderPluginAction.SET_DUE_DATE_ASAP, {})\r\n\r\n/**\r\n * Reset the selected day and slot's day used to generate the dueDate and the slot.\r\n *\r\n * TODO: should we modify the setFrontOrderDueDate middleware to reset the due date when this action\r\n * is made? For now we call resetDayAndSlot and resetDueDate() on the UnavailableDueDateDialog. We\r\n * fear to introduct side effect if we do this modification.\r\n */\r\nexport const resetDayAndSlot = () => createAction(OrderPluginAction.RESET_DAY_AND_SLOT, {})\r\n\r\n/**\r\n * @param {string} tableNumber - the selected tableNumber\r\n */\r\nexport const setTableNumber = tableNumber =>\r\n  createAction(OrderPluginAction.SET_TABLE_NUMBER, {\r\n    tableNumber,\r\n  })\r\n\r\nexport const disableTableNumberModification = () =>\r\n  createAction(OrderPluginAction.DISABLE_TABLE_NUMBER_MODIFICATION)\r\n\r\n/**\r\n * @param {string} posCheckId - the selected posCheckId\r\n */\r\nexport const setPosCheckId = posCheckId =>\r\n  createAction(OrderPluginAction.SET_POS_CHECK_ID, {\r\n    posCheckId,\r\n  })\r\n\r\n/**\r\n * e.g. this is set when a customer comes from webapp\r\n */\r\nexport const setFrom = from => createAction(OrderPluginAction.SET_FROM, { from })\r\n\r\n/**\r\n * @param {string} tableNumber - the selected tableNumber\r\n */\r\nexport const setDeliveryAddress = (id, name, complement, street, postCode, city, country) =>\r\n  createAction(OrderPluginAction.SET_DELIVERY_ADDRESS, {\r\n    id,\r\n    name,\r\n    complement,\r\n    street,\r\n    postCode,\r\n    city,\r\n    country,\r\n  })\r\n\r\nexport const resetDeliveryAddress = () => createAction(OrderPluginAction.RESET_DELIVERY_ADDRESS)\r\n\r\nexport const setDeliveryAddressError = value =>\r\n  createAction(OrderPluginAction.SET_DELIVERY_ADDRESS_ERROR, {\r\n    value,\r\n  })\r\n\r\n/**\r\n *\r\n * @param {*} category\r\n */\r\nexport const setSelectedCategory = category =>\r\n  createAction(OrderPluginAction.SET_SELECTED_CATEGORY, {\r\n    category,\r\n  })\r\n\r\n/**\r\n *\r\n * @param {*} firstSelectedCategory\r\n */\r\nexport const setFirstSelectedCategory = firstSelectedCategory =>\r\n  createAction(OrderPluginAction.SET_FIRST_SELECTED_CATEGORY, {\r\n    firstSelectedCategory,\r\n  })\r\n\r\n/**\r\n *\r\n * @param {*} category\r\n */\r\nexport const resetSelectedCategory = category =>\r\n  createAction(OrderPluginAction.RESET_SELECTED_CATEGORY, {})\r\n\r\n/**\r\n *\r\n * @param {*} parentCategories\r\n */\r\nexport const setParentCategories = parentCategories =>\r\n  createAction(OrderPluginAction.SET_PARENT_CATEGORIES, {\r\n    parentCategories,\r\n  })\r\n\r\n/**\r\n * @param {string} configurationError - text displayed in global layout / blocks order plugin\r\n */\r\nexport const setConfigurationError = configurationError =>\r\n  createAction(OrderPluginAction.SET_CONFIGURATION_ERROR, {\r\n    configurationError,\r\n  })\r\n\r\nexport const goBackToStoreLocator = () => createAction(OrderPluginAction.BACK_TO_STORE_LOCATOR, {})\r\n\r\nexport const redirectToCatalogPage = restaurantId =>\r\n  createRedirectToAction(getRoute('ORDER__CATALOG'), {\r\n    restaurantId,\r\n  })\r\n\r\nexport const redirectToCart = () => createRedirectToAction(getRoute('ORDER__CART'), {})\r\n\r\nexport const resetOrderPlugin = () => createAction(OrderPluginAction.RESET)\r\n\r\n/**\r\n * @param {*} product\r\n * @param {*} options\r\n *  - restaurantId: required since it is need by withMenu used on the ProductDialog page.\r\n *\r\n * Handle by the middleware of the `openProduct` action\r\n */\r\nexport const showProductDialog = (product, options) =>\r\n  createShowDialogAction(ModalType.ORDER_PLUGIN_PRODUCT_VIEW, {\r\n    product,\r\n    viewOptions: options,\r\n    // put in the root for withMenu\r\n    restaurantId: options.restaurantId,\r\n  })\r\n\r\nexport const hideProductDialog = () => createHideDialogAction(ModalType.ORDER_PLUGIN_PRODUCT_VIEW)\r\n\r\nexport const showUnavailableDueDateDialog = () =>\r\n  createShowDialogAction(ModalType.UNAVAILABLE_DUE_DATE)\r\n\r\nexport const hideUnavailableDueDateDialog = () =>\r\n  createHideDialogAction(ModalType.UNAVAILABLE_DUE_DATE)\r\n\r\nexport const showOrderModeDisabledDialog = () =>\r\n  createShowDialogAction(ModalType.ORDER_MODE_DISABLED)\r\n\r\nexport const hideOrderModeDisabledDialog = () =>\r\n  createHideDialogAction(ModalType.ORDER_MODE_DISABLED)\r\n\r\nexport const showRestaurantDisabledDialog = () =>\r\n  createShowDialogAction(ModalType.RESTAURANT_DISABLED)\r\n\r\nexport const hideRestaurantDisabledDialog = () =>\r\n  createHideDialogAction(ModalType.RESTAURANT_DISABLED)\r\n\r\nexport const showRestaurantClosedDialog = (orderContext, restaurant) =>\r\n  createShowDialogAction(ModalType.RESTAURANT_CLOSED, {\r\n    orderContext,\r\n    restaurant,\r\n  })\r\n\r\nexport const hideRestaurantClosedDialog = () => createHideDialogAction(ModalType.RESTAURANT_CLOSED)\r\n\r\nexport const showTableNotFoundDialog = restaurantId =>\r\n  createShowDialogAction(ModalType.TABLE_NOT_FOUND, {\r\n    restaurantId,\r\n  })\r\n\r\nexport const hideTableNotFoundDialog = () => createHideDialogAction(ModalType.TABLE_NOT_FOUND)\r\n\r\nexport const postOrderPreviewAndPostOrderIfSucceeded = () =>\r\n  createAction(OrderPluginAction.POST_ORDER_PREVIEW_AND_POST_ORDER_IF_SUCCEEDED, {})\r\n\r\nexport const saveAlcoholApproval = () => createAction(OrderPluginAction.ALCOHOL_ACCEPT, {})\r\n\r\nexport const forgetAlcoholApproval = () => createAction(OrderPluginAction.ALCOHOL_RESET, {})\r\n\r\nexport const showExpiredSessionDialog = restaurantId =>\r\n  createShowDialogAction(ModalType.EXPIRED_SESSION, {\r\n    restaurantId,\r\n  })\r\n\r\nexport const hideExpiredSessionDialog = () => createHideDialogAction(ModalType.EXPIRED_SESSION)\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nconst UserAddressApi = {\r\n  getList: userId => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ADDRESSES,\r\n      type: 'GET',\r\n      params: {\r\n        userId,\r\n      },\r\n    }\r\n  },\r\n\r\n  post: (userId, address) => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ADDRESSES,\r\n      type: 'POST',\r\n      params: {\r\n        userId,\r\n      },\r\n      body: address,\r\n    }\r\n  },\r\n\r\n  edit: (userId, addressId, address) => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ADDRESS,\r\n      type: 'PUT',\r\n      params: {\r\n        userId,\r\n        addressId,\r\n      },\r\n      body: address,\r\n    }\r\n  },\r\n\r\n  delete: (userId, addressId) => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ADDRESS,\r\n      type: 'DELETE',\r\n      params: {\r\n        userId,\r\n        addressId,\r\n      },\r\n    }\r\n  },\r\n}\r\n\r\nexport default UserAddressApi\r\n","import { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nimport UserAddressApi from '../api/calls/UserAddressApi'\r\n\r\nexport const FetchUserAddressListAction = createApiEnumAction('USER::USER_ADDRESS::GET')\r\n\r\nexport const fetchUserAddressList = userId =>\r\n  createApiCallAction(FetchUserAddressListAction, UserAddressApi.getList(userId), {\r\n    userId,\r\n  })\r\n\r\nexport const PostUserAddressAction = createApiEnumAction('USER::USER_ADDRESS::POST')\r\n\r\nexport const postUserAddress = (userId, address, { restaurant = null }) =>\r\n  createApiCallAction(PostUserAddressAction, UserAddressApi.post(userId, address), {\r\n    userId,\r\n    address,\r\n    restaurant,\r\n  })\r\n\r\nexport const EditUserAddressAction = createApiEnumAction('USER::USER_ADDRESS::EDIT')\r\n\r\nexport const editUserAddress = (userId, addressId, address) =>\r\n  createApiCallAction(EditUserAddressAction, UserAddressApi.edit(userId, addressId, address), {\r\n    userId,\r\n    addressId,\r\n    address,\r\n  })\r\n\r\nexport const DeleteUserAddressAction = createApiEnumAction('USER::USER_ADDRESS::DELETE')\r\n\r\nexport const deleteUserAddress = (userId, addressId) =>\r\n  createApiCallAction(DeleteUserAddressAction, UserAddressApi.delete(userId, addressId), {\r\n    userId,\r\n    addressId,\r\n  })\r\n","import isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\nimport { getDistanceFromLatLon } from 'pmt-utils/geoloc'\r\n\r\n// props.range must be in km\r\n// since the utils function returns km\r\nconst formatInRangeFlag = (address, props) => {\r\n  if (!isNil(props) && !isUndefined(props.origin) && !isUndefined(props.range)) {\r\n    const { origin, range } = props\r\n\r\n    address.isInRange = true\r\n    const rangeFromOrigin = getDistanceFromLatLon(\r\n      origin.latitude,\r\n      origin.longitude,\r\n      address.geoPt.latitude,\r\n      address.geoPt.longitude\r\n    )\r\n    if (rangeFromOrigin > range) {\r\n      address.isInRange = false\r\n    }\r\n  }\r\n\r\n  return address\r\n}\r\n\r\nexport const formatUserAddress = createFormatter(formatInRangeFlag)\r\n\r\nexport const formatUserAddressList = createListFormatter(formatUserAddress)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { formatUserAddressList } from './format'\r\n\r\nconst getUserAddress = state => state.entities.userAddress\r\nconst getUserAddressListOnProps = (state, props) => props.userAddressList\r\nconst getOriginOnProps = (state, props) => props.origin\r\nconst getRangeOnProps = (state, props) => props.range\r\n\r\n/**\r\n * Required props:\r\n */\r\nexport const isFetchingUserAddressList = createSelector([getUserAddress], userAddress => {\r\n  return userAddress.getIn(['list', 'isFetching'], false)\r\n})\r\n\r\nexport const getUserAddressList = createSelector([getUserAddress], userAddress => {\r\n  const userAddressList = userAddress.getIn(['list', 'data'], null)\r\n\r\n  if (!isNil(userAddressList)) {\r\n    return userAddressList.toJS()\r\n  }\r\n\r\n  return null\r\n})\r\n\r\nexport const makeGetUserAddressListInRange = () =>\r\n  createSelector(\r\n    [getUserAddressListOnProps, getOriginOnProps, getRangeOnProps],\r\n    (userAddressList, origin, range) => {\r\n      if (!isNil(userAddressList) && !isNil(origin) && !isNil(range)) {\r\n        const userAddressListFormatted = formatUserAddressList(userAddressList, {\r\n          origin,\r\n          range,\r\n        })\r\n\r\n        return userAddressListFormatted.filter(address => address.isInRange)\r\n      }\r\n\r\n      return null\r\n    }\r\n  )\r\n\r\nexport const makeGetUserAddressListOutOfRange = () =>\r\n  createSelector(\r\n    [getUserAddressListOnProps, getOriginOnProps, getRangeOnProps],\r\n    (userAddressList, origin, range) => {\r\n      if (!isNil(userAddressList) && !isNil(origin) && !isNil(range)) {\r\n        const userAddressListFormatted = formatUserAddressList(userAddressList, {\r\n          origin,\r\n          range,\r\n        })\r\n\r\n        return userAddressListFormatted.filter(address => !address.isInRange)\r\n      }\r\n\r\n      return null\r\n    }\r\n  )\r\n\r\nexport const isFetchingUserAddressPost = createSelector([getUserAddress], userAddress =>\r\n  userAddress.getIn(['post', 'isFetching'], false)\r\n)\r\n\r\nexport const getCreatedUserAddress = createSelector([getUserAddress], userAddress =>\r\n  userAddress.getIn(['post', 'data'], null)\r\n)\r\n\r\nexport const isFetchingUserAddressEdit = createSelector([getUserAddress], userAddress =>\r\n  userAddress.getIn(['edit', 'isFetching'], false)\r\n)\r\n\r\nexport const isFetchingUserAddressDelete = createSelector([getUserAddress], userAddress =>\r\n  userAddress.getIn(['delete', 'isFetching'], false)\r\n)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { fetchUserAddressList } from '../../actions'\r\n\r\nimport {\r\n  getUserAddressList,\r\n  makeGetUserAddressListInRange,\r\n  makeGetUserAddressListOutOfRange,\r\n  isFetchingUserAddressList,\r\n} from '../../selectors'\r\n\r\n/**\r\n * Container that fetch the address list for the given `userId` and pass it to the children.\r\n * The `children` must be a `Function as child component`.\r\n *\r\n * Requirements:\r\n * - userId, can be 'me'\r\n *\r\n */\r\nclass UserAddressListContainer extends React.Component {\r\n  componentWillMount() {\r\n    if (isNil(this.props.userAddressList)) {\r\n      this.loadUserAddressList(this.props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (nextProps.userId !== this.props.userId) {\r\n      this.loadUserAddressList(nextProps)\r\n    }\r\n  }\r\n\r\n  loadUserAddressList(props) {\r\n    props.fetchUserAddressList(props.userId)\r\n  }\r\n\r\n  render() {\r\n    const { children, ...otherProps } = this.props\r\n\r\n    return children({\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nUserAddressListContainer.propTypes = {\r\n  fetchUserAddressList: PropTypes.func.isRequired,\r\n  isFetchingUserAddressList: PropTypes.bool,\r\n  userAddressList: PropTypes.array,\r\n  userAddressListInRange: PropTypes.array,\r\n  userAddressListOutOfRange: PropTypes.array,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const userAddressList = getUserAddressList(state)\r\n  const getUserAddressListInRange = makeGetUserAddressListInRange()\r\n  const getUserAddressListOutOfRange = makeGetUserAddressListOutOfRange()\r\n\r\n  return {\r\n    userAddressList,\r\n    userAddressListInRange: getUserAddressListInRange(state, { ...props, userAddressList }),\r\n    userAddressListOutOfRange: getUserAddressListOutOfRange(state, { ...props, userAddressList }),\r\n    isFetchingUserAddressList: isFetchingUserAddressList(state),\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    fetchUserAddressList,\r\n  }\r\n)(UserAddressListContainer)\r\n","/**\r\n * street_address indicates a precise street address.\r\n * route indicates a named route (such as \"US 101\").\r\n * intersection indicates a major intersection, usually of two major roads.\r\n * political indicates a political entity. Usually, this type indicates a polygon of some civil administration.\r\n * country indicates the national political entity, and is typically the highest order type returned by the Geocoder.\r\n * administrative_area_level_1 indicates a first-order civil entity below the country level. Within the United States, these administrative levels are states. Not all nations exhibit these administrative levels. In most cases, administrative_area_level_1 short names will closely match ISO 3166-2 subdivisions and other widely circulated lists; however this is not guaranteed as our geocoding results are based on a variety of signals and location data.\r\n * administrative_area_level_2 indicates a second-order civil entity below the country level. Within the United States, these administrative levels are counties. Not all nations exhibit these administrative levels.\r\n * administrative_area_level_3 indicates a third-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.\r\n * administrative_area_level_4 indicates a fourth-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.\r\n * administrative_area_level_5 indicates a fifth-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.\r\n * colloquial_area indicates a commonly-used alternative name for the entity.\r\n * locality indicates an incorporated city or town political entity.\r\n * sublocality indicates a first-order civil entity below a locality. For some locations may receive one of the additional types: sublocality_level_1 to sublocality_level_5. Each sublocality level is a civil entity. Larger numbers indicate a smaller geographic area.\r\n * neighborhood indicates a named neighborhood\r\n * premise indicates a named location, usually a building or collection of buildings with a common name\r\n * subpremise indicates a first-order entity below a named location, usually a singular building within a collection of buildings with a common name\r\n * plus_code indicates an encoded location reference, derived from latitude and longitude. Plus codes can be used as a replacement for street addresses in places where they do not exist (where buildings are not numbered or streets are not named). See https://plus.codes for details.\r\n * postal_code indicates a postal code as used to address postal mail within the country.\r\n * natural_feature indicates a prominent natural feature.\r\n * airport indicates an airport.\r\n * park indicates a named park.\r\n * point_of_interest indicates a named point of interest. Typically, these \"POI\"s are prominent local entities that don't easily fit in another category, such as \"Empire State Building\" or \"Eiffel Tower\".\r\n * floor indicates the floor of a building address.\r\n * establishment typically indicates a place that has not yet been categorized.\r\n * landmark indicates a nearby place that is used as a reference, to aid navigation.\r\n * point_of_interest indicates a named point of interest.\r\n * parking indicates a parking lot or parking structure.\r\n * post_box indicates a specific postal box.\r\n * postal_town indicates a grouping of geographic areas, such as locality and sublocality, used for mailing addresses in some countries.\r\n * room indicates the room of a building address.\r\n * street_number indicates the precise street number.\r\n * bus_station, train_station and transit_station indicate the location of a bus, train or public transit stop.\r\n */\r\n\r\nexport const AUTHORIZED_ADDRESS_TYPES = ['premise', 'street_address', 'colloquial_area']\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { AUTHORIZED_ADDRESS_TYPES } from '../constants'\r\n\r\nexport const isAddressTypeValid = types =>\r\n  !isEmpty(types) ? AUTHORIZED_ADDRESS_TYPES.indexOf(types[0]) !== -1 : true\r\n","import Immutable from 'immutable'\r\n\r\nimport {\r\n  FetchUserAddressListAction,\r\n  PostUserAddressAction,\r\n  EditUserAddressAction,\r\n  DeleteUserAddressAction,\r\n} from './actions'\r\n\r\nimport {\r\n  updateArrayObject,\r\n} from 'pmt-utils/array'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './components'\r\nexport * from './middlewares'\r\nexport * from './constants'\r\nexport * from './utils'\r\n\r\n// Example of user address data\r\n// {\r\n//   list: {\r\n//     data: null,\r\n//     isFetching: false,\r\n//     error: null,\r\n//     lastUpdated: null,\r\n//   },\r\n//   post: {\r\n//     data: null,\r\n//     isFetching: false,\r\n//     error: null,\r\n//     lastUpdated: null,\r\n//   }\r\n// }\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  list: {\r\n    data: null,\r\n    isFetching: false,\r\n    error: null,\r\n    lastUpdated: null,\r\n  },\r\n  post: {\r\n    data: null,\r\n    isFetching: false,\r\n    error: null,\r\n    lastUpdated: null,\r\n  },\r\n  edit: {\r\n    isFetching: null,\r\n    error: null,\r\n  }\r\n})\r\n\r\nexport const userAddressReducer = (state = DEFAULT, action) => {\r\n\r\n  switch (action.type) {\r\n\r\n    case FetchUserAddressListAction.REQUEST:\r\n      return state.mergeIn(['list'], {\r\n        data: null,\r\n        isFetching: true,\r\n        error: null,\r\n      })\r\n\r\n    case FetchUserAddressListAction.SUCCESS:\r\n      return state.mergeIn(['list'], {\r\n        data: action.response,\r\n        isFetching: false,\r\n        error: null,\r\n        lastUpdated: new Date(),\r\n      })\r\n\r\n    case FetchUserAddressListAction.FAILURE:\r\n      return state.mergeIn(['list'], {\r\n        data: null,\r\n        isFetching: false,\r\n        error: action.error,\r\n        lastUpdated: new Date(),\r\n      })\r\n\r\n    case PostUserAddressAction.REQUEST:\r\n      return state.mergeIn(['post'], {\r\n        data: null,\r\n        isFetching: true,\r\n        error: null,\r\n      })\r\n\r\n    case PostUserAddressAction.SUCCESS:\r\n      state = state.mergeIn(['post'], {\r\n        data: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n      const stateDataWhenAdd = state.toJS()\r\n      stateDataWhenAdd.list.data.push(action.response)\r\n\r\n      return state.mergeIn(['list'], {\r\n        data: stateDataWhenAdd.list.data,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case PostUserAddressAction.FAILURE:\r\n      return state.mergeIn(['post'], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    case EditUserAddressAction.REQUEST:\r\n      return state.mergeIn(['edit'], {\r\n        isFetching: true,\r\n        error: null,\r\n      })\r\n\r\n    case EditUserAddressAction.SUCCESS:\r\n      state = state.mergeIn(['edit'], {\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n      const stateDataWhenEdit = state.toJS()\r\n      const userAddressListEdited = updateArrayObject(stateDataWhenEdit.list.data, action.response, action.response.id)\r\n\r\n      return state.mergeIn(['list'], {\r\n        data: userAddressListEdited,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case EditUserAddressAction.FAILURE:\r\n      return state.mergeIn(['edit'], {\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n\r\n    case DeleteUserAddressAction.REQUEST:\r\n      return state.mergeIn(['delete'], {\r\n        isFetching: true,\r\n        error: null,\r\n      })\r\n\r\n    case DeleteUserAddressAction.SUCCESS:\r\n      state = state.mergeIn(['delete'], {\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n      const stateDataWhenDelete = state.toJS()\r\n      const userAddressListCleaned = stateDataWhenDelete.list.data.filter(address => address.id !== action.data.addressId)\r\n\r\n      return state.mergeIn(['list'], {\r\n        data: userAddressListCleaned,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case DeleteUserAddressAction.FAILURE:\r\n      return state.mergeIn(['delete'], {\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","const CheckErrors = {\r\n  GET_CHECK: {\r\n    100: 'global.check.check_not_found',\r\n    default: 'global.check.check_not_found',\r\n  },\r\n  GET_CHECK_CODE: {\r\n    default: 'global.check.check_not_found',\r\n  },\r\n  PUT_MERGE_CHECKS: {\r\n    default: 'global.check.check_not_found',\r\n  },\r\n}\r\n\r\nexport default CheckErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nimport CheckErrors from '../errors/CheckErrors'\r\n\r\nconst CheckApi = {\r\n  getCheckWithTableNumber: (restaurantId, tableNumber) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n      tableNumber,\r\n    },\r\n    query: {},\r\n    endpoint: ApiEndpoints.GET_CHECK_TABLE_NUMBER,\r\n    errorHandler: CheckErrors.GET_CHECK,\r\n  }),\r\n\r\n  getCheckWithPosCheckId: (restaurantId, posCheckId) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n      posCheckId,\r\n    },\r\n    query: {},\r\n    endpoint: ApiEndpoints.GET_CHECK_POS_ID,\r\n    errorHandler: CheckErrors.GET_CHECK,\r\n  }),\r\n\r\n  getCheckWithCode: (restaurantId, code) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n      code,\r\n    },\r\n    query: {},\r\n    headers: {},\r\n    endpoint: ApiEndpoints.GET_CHECK_CODE,\r\n    errorHandler: CheckErrors.GET_CHECK_CODE,\r\n  }),\r\n\r\n  getCheck: (restaurantId, checkId) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n      checkId,\r\n    },\r\n    query: {},\r\n    endpoint: ApiEndpoints.GET_CHECK,\r\n    errorHandler: CheckErrors.GET_CHECK,\r\n  }),\r\n\r\n  putMergeChecks: (restaurantId, checkIdTarget, posCodeToMerge) => ({\r\n    type: 'PUT',\r\n    params: {\r\n      restaurantId,\r\n    },\r\n    body: {\r\n      posCodeToMerge,\r\n      checkIdTarget,\r\n    },\r\n    headers: {},\r\n    endpoint: ApiEndpoints.PUT_MERGE_CHECKS,\r\n    errorHandler: CheckErrors.PUT_MERGE_CHECKS,\r\n  }),\r\n}\r\n\r\nexport default CheckApi\r\n","import { createAction } from 'pmt-modules/redux'\r\n\r\nimport CheckApi from 'pmt-modules/api/calls/CheckApi'\r\nimport { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { createRedirectToAction, getRoute } from 'pmt-modules/routing'\r\n\r\nexport const GetCheckWithTableNumberAction = createApiEnumAction(\r\n  'PAYMENT::CHECK::GET_WITH_TABLE_NUMBER'\r\n)\r\n\r\nexport const redirectToPayment = restaurantId =>\r\n  createRedirectToAction(getRoute('PAYMENT_TABLE_NUMBER'), { restaurantId })\r\n\r\nexport const fetchCheckWithTableNumber = (restaurantId, tableNumber) =>\r\n  createApiCallAction(\r\n    GetCheckWithTableNumberAction,\r\n    CheckApi.getCheckWithTableNumber(restaurantId, tableNumber),\r\n    {\r\n      restaurantId,\r\n      tableNumber,\r\n    }\r\n  )\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const CheckAction = {\r\n  RESET: 'CHECK::RESET',\r\n}\r\n\r\nexport const resetCheck = () => createAction(CheckAction.RESET)\r\n\r\nexport const GetCheckWithPosCheckIdAction = createApiEnumAction(\r\n  'PAYMENT::CHECK::GET_WITH_POS_CHECK_ID'\r\n)\r\n\r\nexport const fetchCheckWithPosCheckId = (restaurantId, posCheckId) =>\r\n  createApiCallAction(\r\n    GetCheckWithPosCheckIdAction,\r\n    CheckApi.getCheckWithPosCheckId(restaurantId, posCheckId),\r\n    {\r\n      restaurantId,\r\n      posCheckId,\r\n    }\r\n  )\r\n\r\nexport const GetCheckAction = createApiEnumAction('PAYMENT::CHECK::GET')\r\nexport const GetRefreshCheckAction = createApiEnumAction('PAYMENT::CHECK::GET_REFRESH')\r\n\r\nexport const fetchCheck = (restaurantId, checkId) =>\r\n  createApiCallAction(GetCheckAction, CheckApi.getCheck(restaurantId, checkId), {\r\n    restaurantId,\r\n    checkId,\r\n  })\r\n\r\nexport const fetchRefreshCheck = (restaurantId, checkId, isFromCheck = false) =>\r\n  createApiCallAction(GetRefreshCheckAction, CheckApi.getCheck(restaurantId, checkId), {\r\n    restaurantId,\r\n    checkId,\r\n    isFromCheck,\r\n  })\r\n\r\nexport const GetCheckWithCodeAction = createApiEnumAction('PAYMENT::CHECK::GET_WITH_CODE')\r\n\r\nexport const fetchCheckWithCode = (restaurantId, code) =>\r\n  createApiCallAction(GetCheckWithCodeAction, CheckApi.getCheckWithCode(restaurantId, code), {\r\n    restaurantId,\r\n    code,\r\n  })\r\n\r\nexport const MergeCheckWithCodeAction = createApiEnumAction('PAYMENT::CHECK::MERGE_WITH_CODE')\r\n\r\nexport const mergeCheckWithCode = (restaurantId, posCheckId, code) =>\r\n  createApiCallAction(\r\n    MergeCheckWithCodeAction,\r\n    CheckApi.putMergeChecks(restaurantId, posCheckId, code),\r\n    {\r\n      restaurantId,\r\n      posCheckId,\r\n      code,\r\n    }\r\n  )\r\n\r\nexport const redirectToPay = (restaurantId, checkId) =>\r\n  createRedirectToAction(getRoute('PAYMENT_PAY'), { restaurantId, checkId })\r\n\r\nexport const redirectToCheckTotality = (restaurantId, checkId) =>\r\n  createRedirectToAction(getRoute('PAYMENT_PAY'), { restaurantId, checkId })\r\n\r\nexport const redirectToCheckShare = (restaurantId, checkId) =>\r\n  createRedirectToAction(getRoute('PAYMENT_SHARE'), { restaurantId, checkId })\r\n\r\nexport const redirectToCheckChoose = (restaurantId, checkId) =>\r\n  createRedirectToAction(getRoute('PAYMENT_CHOOSE'), { restaurantId, checkId })\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { formatCheck } from './format'\r\n\r\nconst getCheckData = state => state.entities.check\r\nconst getEntries = state => getCheckData(state).getIn(['check', 'entries'])\r\n\r\nexport const getCheckError = createSelector([getCheckData], checkData => {\r\n  const error = checkData.get('error')\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n  return error.toJS()\r\n})\r\n\r\nexport const isFetchingCheck = createSelector([getCheckData], checkData =>\r\n  checkData.get('isFetching', false)\r\n)\r\n\r\nexport const getCheck = createSelector([getCheckData], checkData => {\r\n  const check = checkData.get('check')\r\n\r\n  if (isNil(check)) {\r\n    return null\r\n  }\r\n\r\n  return formatCheck(check.toJS())\r\n})\r\n\r\nconst getIdOnProps = (state, props) => props.id\r\n\r\nexport const getEntryWithId = createSelector([getEntries, getIdOnProps], (entries, id) => {\r\n  const check = entries.find((value, key) => value.get('id') === id)\r\n\r\n  if (isNil(check)) {\r\n    return null\r\n  }\r\n\r\n  return check.toJS()\r\n})\r\n","import Immutable from 'immutable'\r\n\r\nimport {\r\n  CheckAction,\r\n  GetCheckWithCodeAction,\r\n  GetCheckWithTableNumberAction,\r\n  GetCheckWithPosCheckIdAction,\r\n  GetRefreshCheckAction,\r\n  GetCheckAction,\r\n  MergeCheckWithCodeAction,\r\n} from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\n\r\n/**\r\n *\r\n *\r\n */\r\nconst CHECK_DATA = {\r\n  check: null,\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n}\r\n\r\nexport const checkReducer = (state = Immutable.fromJS(CHECK_DATA), action) => {\r\n  switch (action.type) {\r\n    case CheckAction.RESET:\r\n      return state.merge(\r\n        Immutable.fromJS({\r\n          ...CHECK_DATA,\r\n        })\r\n      )\r\n\r\n    case GetCheckWithCodeAction.REQUEST:\r\n    case GetCheckWithTableNumberAction.REQUEST:\r\n    case GetCheckWithPosCheckIdAction.REQUEST:\r\n    case GetCheckAction.REQUEST:\r\n      return state.merge({\r\n        check: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetRefreshCheckAction.REQUEST:\r\n    case MergeCheckWithCodeAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetCheckWithCodeAction.SUCCESS:\r\n    case GetCheckWithTableNumberAction.SUCCESS:\r\n    case GetCheckWithPosCheckIdAction.SUCCESS:\r\n    case GetRefreshCheckAction.SUCCESS:\r\n    case GetCheckAction.SUCCESS:\r\n    case MergeCheckWithCodeAction.SUCCESS:\r\n      return state.merge({\r\n        check: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetCheckWithCodeAction.FAILURE:\r\n    case GetCheckWithTableNumberAction.FAILURE:\r\n    case GetCheckWithPosCheckIdAction.FAILURE:\r\n    case GetRefreshCheckAction.FAILURE:\r\n    case GetCheckAction.FAILURE:\r\n      return state.merge({\r\n        check: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    case MergeCheckWithCodeAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","// DEFAULT is used on order plugin store locator and when we do not need a specific id.\r\n// specific ID is used when we generate a user address. See order plugin components SearchAddress.\r\nexport const DEFAULT_GEOLOCATION_ID = 'DEFAULT_GEOLOCATION_ID'\r\n\r\nexport const GeolocationType = {\r\n  GEOCODING: 'GEOCODING',\r\n  REVERSE_GEOCODING: 'REVERSE_GEOCODING',\r\n}\r\n\r\nexport const GeolocationApi = {\r\n  GOOGLE_PLACES_API: 'PlacesApi',\r\n  GOUV_FR_ADRESSE_API: 'AdresseGouvFr',\r\n}\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\nimport { DEFAULT_GEOLOCATION_ID } from './constants'\r\n\r\n// TODO: all of this should be make selectors\r\n\r\nconst getGeolocation = state => state.entities.geolocation\r\n\r\nconst getGeolocationIdOnProps = (state, props) =>\r\n  // DEFAULT is used on order plugin store locator and when we do not need a specific id.\r\n  // specific ID is used when we generate a user address. See order plugin components SearchAddress.\r\n  isNil(props) || isNil(props.geolocationId) ? DEFAULT_GEOLOCATION_ID : props.geolocationId\r\n\r\nexport const getGeolocationIsFetching = createSelector(\r\n  [getGeolocation, getGeolocationIdOnProps],\r\n  (geolocationData, geolocationIdOnProps) => {\r\n    const geolocation = geolocationData.get(geolocationIdOnProps)\r\n    if (isNil(geolocation)) {\r\n      return false\r\n    }\r\n\r\n    return geolocation.get('isFetching', false)\r\n  }\r\n)\r\n\r\nexport const getGeolocationOrigin = createSelector(\r\n  [getGeolocation, getGeolocationIdOnProps],\r\n  (geolocationData, geolocationIdOnProps) => {\r\n    const geolocation = geolocationData.get(geolocationIdOnProps)\r\n    if (isNil(geolocation)) {\r\n      return null\r\n    }\r\n\r\n    return geolocation.get('origin', null)\r\n  }\r\n)\r\n\r\nexport const getGeolocationAddress = createSelector(\r\n  [getGeolocation, getGeolocationIdOnProps],\r\n  (geolocationData, geolocationIdOnProps) => {\r\n    const geolocation = geolocationData.get(geolocationIdOnProps)\r\n    if (isNil(geolocation)) {\r\n      return null\r\n    }\r\n\r\n    return geolocation.get('address', null)\r\n  }\r\n)\r\n\r\nexport const getGeolocationComputeAddress = createSelector(\r\n  [getGeolocation, getGeolocationIdOnProps],\r\n  (geolocationData, geolocationIdOnProps) => {\r\n    const geolocation = geolocationData.get(geolocationIdOnProps)\r\n\r\n    if (isNil(geolocation)) {\r\n      return null\r\n    }\r\n\r\n    const computeAdress= geolocation.get('computeAddress', null)\r\n    if (!computeAdress){\r\n      return null\r\n    }\r\n    return computeAdress.toJS()\r\n  }\r\n)\r\n\r\nexport const getGeolocationComputeAddressExtra = createSelector(\r\n  [getGeolocation, getGeolocationIdOnProps],\r\n  (geolocationData, geolocationIdOnProps) => {\r\n    const geolocation = geolocationData.get(geolocationIdOnProps)\r\n\r\n    if (isNil(geolocation)) {\r\n      return null\r\n    }\r\n\r\n    const computeAddressExtra = geolocation.get('computeAddressExtra', null)\r\n    if (!computeAddressExtra) {\r\n      return null\r\n    }\r\n\r\n    return computeAddressExtra.toJS()\r\n  }\r\n)\r\n\r\nexport const getGeolocationCoordinates = createSelector(\r\n  [getGeolocation, getGeolocationIdOnProps],\r\n  (geolocationData, geolocationIdOnProps) => {\r\n    const geolocation = geolocationData.get(geolocationIdOnProps)\r\n\r\n    if (isNil(geolocation)) {\r\n      return {\r\n        latitude: null,\r\n        longitude: null,\r\n      }\r\n    }\r\n\r\n    const geolocationForReal = geolocation.toJS()\r\n\r\n    if (isNil(geolocationForReal.latitude) || isNil(geolocationForReal.longitude)) {\r\n      return {\r\n        latitude: null,\r\n        longitude: null,\r\n      }\r\n    }\r\n\r\n    return {\r\n      latitude: geolocationForReal.latitude,\r\n      longitude: geolocationForReal.longitude,\r\n    }\r\n  }\r\n)\r\n\r\nexport const getGeolocationError = createSelector(\r\n  [getGeolocation, getGeolocationIdOnProps],\r\n  (geolocationData, geolocationIdOnProps) => {\r\n    const geolocation = geolocationData.get(geolocationIdOnProps)\r\n    if (isNil(geolocation)) {\r\n      return null\r\n    }\r\n\r\n    return geolocation.get('error', null)\r\n  }\r\n)\r\n","import isNil from 'lodash/isNil'\r\nimport forEach from 'lodash/forEach'\r\nimport map from 'lodash/map'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { filterDuplicates, existsOnArray, findOnArray } from 'pmt-utils/array'\r\n\r\nimport { formatRestaurant, formatRestaurantsMap, formatRestaurantsListData } from './format'\r\n\r\nexport const getRestaurantState = state => (isNil(state) ? null : state.entities.restaurant)\r\n\r\nconst getRestaurantIdOnProps = (state, props) => (isNil(props) ? null : props.restaurantId)\r\n\r\nexport const getRestaurantListData = createSelector([getRestaurantState], restaurantState => {\r\n  // retrieve restaurants from list data\r\n  const restaurantsListData = restaurantState.getIn(['list', 'data'])\r\n  return isNil(restaurantsListData) ? null : formatRestaurantsListData(restaurantsListData.toJS())\r\n})\r\n\r\n/**\r\n * Gives only the restaurants list loaded, updated with the restaurant's data loaded separatly.\r\n * We do not add restaurants that are not on the list, we just update the data.\r\n */\r\nexport const getRestaurantList = createSelector(\r\n  [getRestaurantListData, getRestaurantState],\r\n  (restaurantListData, restaurantState) => {\r\n    // retrieve restaurants from list data\r\n    let restaurantList = restaurantListData?.restaurants || []\r\n    // retrieve restaurants directly stored in state\r\n    let restaurants = restaurantState.toJS()\r\n    restaurants = map(restaurants, r => r.restaurant)\r\n      // filter list/post from state\r\n      .filter(Boolean)\r\n      // keep only the restaurants that are on our list\r\n      .filter(r => existsOnArray(restaurantList, r))\r\n\r\n    // filter duplicates\r\n    return filterDuplicates(\r\n      [...(restaurantList || []), ...restaurants],\r\n      r => r.id,\r\n      (restaurant, other) => other.modificationDate > restaurant.modificationDate\r\n    )\r\n  }\r\n)\r\n\r\n/**\r\n * Gives all the restaurants list loaded merged with the restaurants loaded seperatly\r\n */\r\nexport const getAllRestaurants = createSelector(\r\n  [getRestaurantListData, getRestaurantState],\r\n  (restaurantListData, restaurantState) => {\r\n    // retrieve restaurants from list data\r\n    let restaurantList = restaurantListData?.restaurants || []\r\n\r\n    // retrieve restaurants directly stored in state\r\n    let restaurants = restaurantState.toJS()\r\n    restaurants = map(restaurants, r => r.restaurant)\r\n      // filter list/post from state\r\n      .filter(Boolean)\r\n\r\n    // filter duplicates\r\n    return filterDuplicates(\r\n      [...(restaurantList || []), ...restaurants],\r\n      r => r.id,\r\n      (restaurant, other) => other.modificationDate > restaurant.modificationDate\r\n    )\r\n  }\r\n)\r\n\r\nexport const makeIsFetchingRestaurant = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      if (isNil(restaurants)) {\r\n        return null\r\n      }\r\n      const restaurantData = restaurants.get(restaurantId)\r\n      if (isNil(restaurantData)) {\r\n        return false\r\n      }\r\n\r\n      return restaurantData.get('isFetching')\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurantData = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      if (isNil(restaurants)) {\r\n        return null\r\n      }\r\n      const restaurantData = restaurants.get(restaurantId)\r\n      if (isNil(restaurantData)) {\r\n        return null\r\n      }\r\n      return restaurantData.toJS()\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurantError = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      if (isNil(restaurants)) {\r\n        return null\r\n      }\r\n\r\n      const restaurantData = restaurants.get(restaurantId)\r\n      if (isNil(restaurantData)) {\r\n        return null\r\n      }\r\n\r\n      const restaurantError = restaurantData.get('error')\r\n      if (isNil(restaurantError)) {\r\n        return null\r\n      }\r\n\r\n      return restaurantError.toJS()\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurant = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      if (isNil(restaurants)) {\r\n        return null\r\n      }\r\n      const restaurantData = restaurants.get(restaurantId)\r\n      if (isNil(restaurantData)) {\r\n        return null\r\n      }\r\n      const restaurant = restaurantData.get('restaurant')\r\n\r\n      if (isNil(restaurant)) {\r\n        return null\r\n      }\r\n      return formatRestaurant(restaurant.toJS())\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurantFromRestaurantList = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      const restaurantEntity = restaurants.toJS()\r\n      const restaurantList = restaurantEntity?.list?.data?.restaurants || []\r\n\r\n      const restaurantFromList = findOnArray(\r\n        restaurantList,\r\n        restaurant => restaurant.id === restaurantId\r\n      )\r\n      return restaurantFromList\r\n    }\r\n  )\r\n}\r\n\r\nexport const getLoadedRestaurantsIds = createSelector([getRestaurantState], restaurantsData => {\r\n  return restaurantsData.keySeq().toArray()\r\n})\r\n\r\nexport const getRestaurantMap = createSelector([getRestaurantState], restaurantsData => {\r\n  const restaurantsDataMap = restaurantsData.toJS()\r\n\r\n  const restaurantsMap = {}\r\n  forEach(restaurantsDataMap, (restaurantData, key) => {\r\n    restaurantsMap[key] = restaurantData.restaurant\r\n  })\r\n\r\n  return formatRestaurantsMap(restaurantsMap)\r\n})\r\n\r\nexport const getRestaurantPost = createSelector([getRestaurantState], restaurantData => {\r\n  if (isNil(restaurantData)) {\r\n    return null\r\n  }\r\n\r\n  const restaurantPost = restaurantData.getIn(['post', 'data'], null)\r\n  if (!isNil(restaurantPost)) {\r\n    return restaurantPost.toJS()\r\n  }\r\n\r\n  return null\r\n})\r\n\r\nexport const isFetchingRestaurantPost = createSelector([getRestaurantState], restaurantData => {\r\n  if (isNil(restaurantData)) {\r\n    return false\r\n  }\r\n\r\n  return restaurantData.getIn(['post', 'isFetching'], false)\r\n})\r\n\r\nexport const getRestaurantPostError = createSelector([getRestaurantState], restaurantData => {\r\n  const error = restaurantData.getIn(['post', 'error'])\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n\r\n  return error.toJS()\r\n})\r\n\r\nexport const isFetchingRestaurantList = createSelector([getRestaurantState], restaurantData => {\r\n  if (isNil(restaurantData)) {\r\n    return false\r\n  }\r\n\r\n  return restaurantData.getIn(['list', 'isFetching'], false)\r\n})\r\n\r\nexport const getRestaurantListError = createSelector([getRestaurantState], restaurantData => {\r\n  const error = restaurantData.getIn(['list', 'error'])\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n  return error.toJS()\r\n})\r\n","import { createAction } from '../redux'\r\n\r\nexport const OrderSettingsAction = {\r\n  SET_ORDER_SETTINGS: 'ORDER_SETTINGS::SET_ORDER_SETTINGS',\r\n  RESET_ORDER_SETTINGS: 'ORDER_SETTINGS::RESET_ORDER_SETTINGS',\r\n}\r\n\r\nexport const setOrderSettings = orderSettings =>\r\n  createAction(OrderSettingsAction.SET_ORDER_SETTINGS, {\r\n    orderSettings,\r\n  })\r\n\r\nexport const resetOrderSettings = () =>\r\n  createAction(OrderSettingsAction.RESET_ORDER_SETTINGS, {})\r\n","const PaymentStatus = {\r\n  CREATED: 'CREATED',\r\n  PAID: 'PAID',\r\n  PAID_NOT_REFUNDABLE: 'PAID_NOT_REFUNDABLE',\r\n  REFUNDED: 'REFUNDED',\r\n  FAILED: 'FAIL',\r\n  REFUND_FAILED: 'REFUND_FAILED',\r\n}\r\n\r\nexport default PaymentStatus\r\n","const TipsValueType = {\r\n  AMOUNT: 'AMOUNT',\r\n  PERCENTAGE: 'PERCENTAGE',\r\n}\r\n\r\nexport default TipsValueType\r\n","import StatusChip from 'pmt-ui/StatusChip'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PaymentStatus from './PaymentStatus'\r\n\r\nexport { default as PaymentStatus } from './PaymentStatus'\r\nexport { default as TipsValueType } from './TipsValueType'\r\n\r\nexport const getPaymentStatusLabel = status => {\r\n  switch (status) {\r\n    case PaymentStatus.CREATED:\r\n      return tr('global.PaymentStatus.CREATED')\r\n    case PaymentStatus.PAID:\r\n      return tr('global.PaymentStatus.PAID')\r\n    case PaymentStatus.REFUNDED:\r\n      return tr('global.PaymentStatus.REFUNDED')\r\n    case PaymentStatus.FAILED:\r\n      return tr('global.PaymentStatus.FAILED')\r\n    case PaymentStatus.PAID_NOT_REFUNDABLE:\r\n      return tr('global.PaymentStatus.PAID_NOT_REFUNDABLE')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n/**\r\n * IrlPayment, typocally used as order param\r\n */\r\nexport const IrlPaymentMethod = {\r\n  CASH: 'CASH',\r\n  CB: 'CB',\r\n  LUNCHEON_VOUCHER: 'LUNCHEON_VOUCHER',\r\n  COUPON: 'COUPON',\r\n  CHEQUE: 'CHEQUE',\r\n  OTHER: 'OTHER',\r\n}\r\n\r\nexport const getPaymentStatusType = status => {\r\n  switch (status) {\r\n    case PaymentStatus.CREATED:\r\n      return StatusChip.Status.DEFAULT\r\n    case PaymentStatus.PAID:\r\n      return StatusChip.Status.VALID\r\n    case PaymentStatus.REFUNDED:\r\n      return StatusChip.Status.WARNING\r\n    case PaymentStatus.FAILED:\r\n      return StatusChip.Status.ERROR\r\n    case PaymentStatus.PAID_NOT_REFUNDABLE:\r\n      return StatusChip.Status.WARNING\r\n    default:\r\n      return StatusChip.Status.DEFAULT\r\n  }\r\n}\r\n\r\n// TODO: move me on restaurant, please.\r\nexport const PaymentMethodsAllowed = {\r\n  IRL: 1,\r\n  CREDIT_CARD: 2,\r\n  USER_ACCOUNT: 4,\r\n  TRD: 8,\r\n}\r\n","// DeliveryTimeType : defines if the delivery time is a fixed time or adaptable\r\n// exmaples : a fixed 20min, no matter the period of the day\r\n// an adaptable is like 10 min during the morning, 40min at lunch and 20 at diner\r\nexport const DeliveryTimeType = {\r\n  FIXED: 0,\r\n  ADAPTABLE: 1,\r\n}\r\n\r\n// TODO: remove from here\r\nexport { PaymentMethodsAllowed } from 'pmt-modules/payment/constants'\r\n","import moment from 'moment'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getHourAndMinuteFromMs, isSameDay } from 'pmt-utils/date'\r\nimport { createFormatter } from 'pmt-utils/format'\r\n\r\nimport { PaymentMethodsAllowed } from '../constants'\r\n\r\nexport const formatPaymentMethodsAllowed = orderModeSettings => {\r\n  if (isNil(orderModeSettings)) {\r\n    return null\r\n  }\r\n\r\n  orderModeSettings.isIrlPaymentAllowed =\r\n    (PaymentMethodsAllowed.IRL & orderModeSettings.paymentMethodsAllowed) !== 0\r\n  orderModeSettings.isTRDPaymentAllowed =\r\n    (PaymentMethodsAllowed.TRD & orderModeSettings.paymentMethodsAllowed) !== 0\r\n  orderModeSettings.isCreditCardPaymentAllowed =\r\n    (PaymentMethodsAllowed.CREDIT_CARD & orderModeSettings.paymentMethodsAllowed) !== 0\r\n  orderModeSettings.isUserAccountPaymentAllowed =\r\n    (PaymentMethodsAllowed.USER_ACCOUNT & orderModeSettings.paymentMethodsAllowed) !== 0\r\n\r\n  orderModeSettings.isIrlPaymentOnlyAllowed =\r\n    PaymentMethodsAllowed.IRL === orderModeSettings.paymentMethodsAllowed\r\n  orderModeSettings.isCreditCardPaymentOnlyAllowed =\r\n    PaymentMethodsAllowed.CREDIT_CARD === orderModeSettings.paymentMethodsAllowed\r\n  orderModeSettings.isUserAccountPaymentOnlyAllowed =\r\n    PaymentMethodsAllowed.USER_ACCOUNT === orderModeSettings.paymentMethodsAllowed\r\n  orderModeSettings.isTRDPaymentOnlyAllowed =\r\n    PaymentMethodsAllowed.TRD === orderModeSettings.paymentMethodsAllowed\r\n\r\n  return orderModeSettings\r\n}\r\n\r\nexport const formatSlots = (slots, selectedSlot) => {\r\n  slots = slots.map(day => {\r\n    day.isToday = false\r\n\r\n    if (isSameDay(moment(), day.date)) {\r\n      day.isToday = true\r\n    }\r\n\r\n    day.slots = day.slots.map(slot => {\r\n      slot.hourData = getHourAndMinuteFromMs(slot.value)\r\n      slot.isSelected = !isNil(selectedSlot) && selectedSlot === slot.value\r\n\r\n      return slot\r\n    })\r\n\r\n    return day\r\n  })\r\n\r\n  return slots\r\n}\r\n\r\nexport const formatOrderSettings = createFormatter(formatSlots, formatPaymentMethodsAllowed)\r\n","import { createSelector } from 'reselect'\r\n\r\nimport { OrderMode } from 'pmt-modules/order'\r\n\r\nimport { formatPaymentMethodsAllowed } from './format'\r\n\r\nconst getOrderSettings = state => state.entities.orderSettings\r\n\r\nconst getModeOnProps = (state, props) => props.orderMode\r\n\r\nexport const getOrderSettingsData = createSelector([getOrderSettings], orderSettings => {\r\n  const orderSettingsData = orderSettings.toJS()\r\n\r\n  return orderSettingsData\r\n})\r\n\r\nexport const makeGetCurrentOrderSettings = () =>\r\n  createSelector([getOrderSettings, getModeOnProps], (orderSettings, mode) => {\r\n    const orderSettingsData = orderSettings.toJS()\r\n\r\n    let currentOrderSettings = null\r\n    switch (mode) {\r\n      case OrderMode.ON_SITE:\r\n        currentOrderSettings = orderSettingsData.onSiteSettings\r\n        break\r\n\r\n      case OrderMode.TAKE_AWAY:\r\n        currentOrderSettings = orderSettingsData.takeAwaySettings\r\n        break\r\n\r\n      case OrderMode.DELIVERY:\r\n        currentOrderSettings = orderSettingsData.deliverySettings\r\n        break\r\n\r\n      default:\r\n        return null\r\n    }\r\n\r\n    return formatPaymentMethodsAllowed(currentOrderSettings)\r\n  })\r\n\r\nexport const getOpeningHours = createSelector([getOrderSettings], orderSettings => {\r\n  const orderSettingsData = orderSettings.toJS()\r\n\r\n  return orderSettingsData.openingHours\r\n})\r\n","import isNil from 'lodash/isNil'\r\n\r\nimport { OrderMode } from 'pmt-modules/order/constants'\r\n\r\nimport { millisecondsToDays } from 'pmt-utils/date'\r\n\r\n/**\r\n * Return settings for orderMode received\r\n */\r\nexport const getOrderSettingsForMode = (\r\n  orderMode,\r\n  onSiteSettings,\r\n  takeAwaySettings,\r\n  deliverySettings\r\n) => {\r\n  switch (orderMode) {\r\n    case OrderMode.ON_SITE:\r\n      return onSiteSettings\r\n    case OrderMode.TAKE_AWAY:\r\n      return takeAwaySettings\r\n    case OrderMode.DELIVERY:\r\n      return deliverySettings\r\n    default:\r\n      return null\r\n  }\r\n}\r\n\r\n/**\r\n * Return maxTimeAhead as days for a specific mode\r\n */\r\nexport const getMaxTimeAheadAsDaysOnMode = (\r\n  mode,\r\n  onSiteSettings,\r\n  takeAwaySettings,\r\n  deliverySettings\r\n) => {\r\n  return getMaxTimeAheadAsDays(\r\n    getOrderSettingsForMode(mode, onSiteSettings, takeAwaySettings, deliverySettings)\r\n  )\r\n}\r\n\r\n/**\r\n * Return maxTimeAhead in days\r\n */\r\nexport const getMaxTimeAheadAsDays = modeSettings => {\r\n  if (isNil(modeSettings) || !modeSettings.enabled) {\r\n    return null\r\n  }\r\n\r\n  return millisecondsToDays(modeSettings.maxTimeAhead)\r\n}\r\n","import Logger from 'pmt-utils/logger'\r\nimport { MINUTE_AS_MS } from 'pmt-utils/date'\r\n\r\nimport { DeliveryTimeType } from '../constants'\r\n\r\nexport const getDeliveryTime = (deliverySettings, deliveryDistanceTime = MINUTE_AS_MS * 15) => {\r\n  switch (deliverySettings.deliveryTimeSettings.settingsType) {\r\n    case DeliveryTimeType.FIXED:\r\n      return deliverySettings.deliveryTimeSettings.fixTimeSettings.time\r\n\r\n    case DeliveryTimeType.ADAPTABLE:\r\n      return (\r\n        deliverySettings.deliveryTimeSettings.adaptableTimeSettings.deliveryManArrivalDuration +\r\n        deliveryDistanceTime\r\n      )\r\n\r\n    default:\r\n      Logger.warn(\r\n        'DELIVERY_TIME_ERROR',\r\n        `DeliveryTimeType is not known from us`,\r\n        deliverySettings.deliveryTimeSettings.settingsType\r\n      )\r\n      return deliverySettings.deliveryTimeSettings.fixTimeSettings.time || 60\r\n  }\r\n}\r\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n  return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","import Logger from 'pmt-utils/logger'\r\nimport each from 'lodash/each'\r\nimport concat from 'lodash/concat'\r\nimport uniq from 'lodash/uniq'\r\nimport sortBy from 'lodash/sortBy'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { DAYS } from 'pmt-modules/api/constants'\r\n\r\nimport { MINUTE_AS_MS, getMinuteFromMs } from 'pmt-utils/date'\r\n\r\n/**\r\n * /!\\ do not use moment to retrieve the day value, use getPmtDayIndex, since the given day by moment\r\n * is not the same according to the locale (fr / en).\r\n */\r\nexport const getForDay = (daysOfWeek, day) => {\r\n  if (isNil(daysOfWeek)) {\r\n    return []\r\n  }\r\n\r\n  switch (day) {\r\n    case DAYS.MONDAY:\r\n      return daysOfWeek.monday\r\n    case DAYS.TUESDAY:\r\n      return daysOfWeek.tuesday\r\n    case DAYS.WEDNESDAY:\r\n      return daysOfWeek.wednesday\r\n    case DAYS.THURSDAY:\r\n      return daysOfWeek.thursday\r\n    case DAYS.FRIDAY:\r\n      return daysOfWeek.friday\r\n    case DAYS.SATURDAY:\r\n      return daysOfWeek.saturday\r\n    case DAYS.SUNDAY:\r\n      return daysOfWeek.sunday\r\n    default:\r\n      Logger.error('No day of the week has been found for day ', day)\r\n      return []\r\n  }\r\n}\r\n\r\n/**\r\n * Warning: moment.js week start at sunday, not monday\r\n */\r\nexport const generateHoursForDay = (daysOfWeek, dayIndex, deliveryTime = 0) => {\r\n  const openingHoursForDay = getForDay(daysOfWeek, dayIndex)\r\n  let hours = []\r\n\r\n  each(openingHoursForDay, openingHour => {\r\n    // add delay when is delivery in order to be able to\r\n    // deliver after delay + opening and after delay + closing hour\r\n    let intervals = generateIntervals({\r\n      opening: openingHour.opening + deliveryTime,\r\n      closing: openingHour.closing + deliveryTime,\r\n    })\r\n\r\n    hours = concat(hours, intervals)\r\n  })\r\n\r\n  // delete doublons\r\n  let finalHours = uniq(hours)\r\n\r\n  // sort by date\r\n  finalHours = sortBy(finalHours, slot => slot)\r\n\r\n  finalHours = finalHours.map(hour => ({\r\n    value: hour,\r\n  }))\r\n\r\n  return finalHours\r\n}\r\n\r\nconst getNextInterval = time => {\r\n  const intervals = [0, 15, 30, 45, 60]\r\n\r\n  const minutesFromTime = getMinuteFromMs(time)\r\n\r\n  let nextInterval = 0\r\n  // go from opening to next valid intervals\r\n  for (let i = 0; i < intervals.length; i++) {\r\n    if (minutesFromTime > intervals[i] && minutesFromTime <= intervals[i + 1]) {\r\n      nextInterval = intervals[i + 1]\r\n      break\r\n    }\r\n  }\r\n\r\n  return time + (nextInterval - minutesFromTime) * MINUTE_AS_MS\r\n}\r\n\r\nexport const generateIntervals = (openingHour, minuteInterval = 15) => {\r\n  const intervalAsMs = minuteInterval * MINUTE_AS_MS\r\n\r\n  // start by adding opening time which might not be fall on an interval\r\n  const hours = [openingHour.opening]\r\n\r\n  // get the next interval\r\n  const nextInterval = getNextInterval(openingHour.opening)\r\n  hours.push(nextInterval)\r\n\r\n  // generate all intervals until closing\r\n  for (let i = nextInterval; i < openingHour.closing; i += intervalAsMs) {\r\n    hours.push(i)\r\n  }\r\n\r\n  // finall, add closing time which might not be fall on an interval\r\n  hours.push(openingHour.closing)\r\n\r\n  return hours\r\n}\r\n\r\nexport const isSlotInOpeningHours = (openingHours, slot, delay) => {\r\n  let isInOpeningHours = false\r\n\r\n  openingHours.every(hour => {\r\n    if (slot >= hour.opening && slot + delay <= hour.closing) {\r\n      isInOpeningHours = true\r\n      return false\r\n    }\r\n\r\n    return true\r\n  })\r\n\r\n  return isInOpeningHours\r\n}\r\n\r\nexport const getNextClosingHour = (hoursInMs, openingHours) => {\r\n  let closingHour = null\r\n\r\n  openingHours.every(hour => {\r\n    if (hoursInMs >= hour.opening && hoursInMs <= hour.closing) {\r\n      closingHour = hour.closing\r\n      return false\r\n    }\r\n\r\n    return true\r\n  })\r\n\r\n  if (isNil(closingHour)) {\r\n    return openingHours?.[openingHours.length - 1]?.closing || false\r\n  }\r\n\r\n  return closingHour\r\n}\r\n","import moment from 'moment'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport {\r\n  isSameDay,\r\n  getPmtDayIndex,\r\n  getMsFromHour,\r\n  getMsFromMinute,\r\n  getDateWithHoursAndMinutes,\r\n} from 'pmt-utils/date'\r\nimport { getDeliveryTime } from './delay'\r\nimport { generateHoursForDay, getForDay } from './openingHours'\r\nimport { getMaxTimeAheadAsDaysOnMode } from './mode'\r\nimport { OrderMode } from 'pmt-modules/order/constants'\r\n\r\nexport const generateSlotsForDate = (\r\n  openingHours,\r\n  date,\r\n  manufactureDelay = null,\r\n  deliveryTime = 0\r\n) => {\r\n  const isOpen = !isEmpty(getForDay(openingHours, getPmtDayIndex(date)))\r\n\r\n  let finalSlots = []\r\n  if (isOpen) {\r\n    const slots = getSlotsForDay(openingHours, getPmtDayIndex(date), deliveryTime)\r\n\r\n    // remove past slots\r\n    finalSlots = slots.filter(slot => {\r\n      // /!\\ if you change this part:\r\n      // test the cases with summer time changing at 3am (when ordering D-1 for D, and D for D - D being the day with time change)\r\n      const dateWithSlot = getDateWithHoursAndMinutes(date, slot.value)\r\n\r\n      // current slot is after now + manufacture + delivery delays\r\n      // TODO: atm we check for the end of day, but later we might want to\r\n      // move extra slots to the next day\r\n      return (\r\n        dateWithSlot.isAfter(moment().add(manufactureDelay + deliveryTime, 'ms')) &&\r\n        dateWithSlot.isBefore(moment(date).endOf('day'))\r\n      )\r\n    })\r\n  }\r\n\r\n  return {\r\n    date: moment(date).startOf('day'),\r\n    slots: finalSlots,\r\n  }\r\n}\r\n\r\n/**\r\n * Note: moment.js .day() use sunday as first day.\r\n * We use monday as first day on the API\r\n *\r\n * @param numberOfDays: 0 is just today 2 is today and the 2 following days\r\n */\r\nexport const generateSlotsForNextDays = (\r\n  startDay,\r\n  openingHours,\r\n  numberOfDays,\r\n  manufactureDelay = null,\r\n  deliveryTime = 0\r\n) => {\r\n  const slotsDates = []\r\n\r\n  for (let i = 0; i < numberOfDays + 1; i++) {\r\n    slotsDates.push(generateSlotsForDate(openingHours, startDay, manufactureDelay, deliveryTime))\r\n\r\n    // reset to start of day\r\n    startDay = startDay.add(1, 'days').startOf('day')\r\n  }\r\n\r\n  // remove days with no slots\r\n  const slots = slotsDates.filter(slotDate => !isEmpty(slotDate.slots))\r\n\r\n  return slots\r\n}\r\n\r\n/**\r\n * Warning: moment.js week start at sunday, not monday\r\n */\r\nexport const getSlotsForDay = (openingHours, dayIndex, deliveryTime = 0) =>\r\n  generateHoursForDay(openingHours, dayIndex, deliveryTime)\r\n\r\nexport const getRestaurantAvailabilities = (restaurant, mode) => {\r\n  const manufactureDelay = restaurant.orderSettings.manufactureDelay\r\n  if (isNil(manufactureDelay)) {\r\n    return null\r\n  }\r\n\r\n  let deliveryTime = 0\r\n  if (mode === OrderMode.DELIVERY) {\r\n    deliveryTime = getDeliveryTime(restaurant.orderSettings.deliverySettings)\r\n  }\r\n\r\n  let numberOfDays = getMaxTimeAheadAsDaysOnMode(\r\n    mode,\r\n    restaurant.orderSettings.onSiteSettings,\r\n    restaurant.orderSettings.takeAwaySettings,\r\n    restaurant.orderSettings.deliverySettings\r\n  )\r\n\r\n  // manufactureDelay is in milliseconds, transform it in days\r\n  const manufactureDelayAsDays = manufactureDelay / 60 / 60 / 24 / 1000\r\n  if (manufactureDelayAsDays > 0) {\r\n    numberOfDays = numberOfDays - manufactureDelayAsDays\r\n  }\r\n\r\n  const availabilities = generateSlotsForNextDays(\r\n    moment().add(manufactureDelay, 'ms'), // start calculation of slots for current date + manufacture delay\r\n    restaurant.orderSettings.openingHours,\r\n    numberOfDays,\r\n    manufactureDelay,\r\n    deliveryTime\r\n  )\r\n\r\n  return {\r\n    restaurant,\r\n    availabilities,\r\n  }\r\n}\r\n\r\nexport const isDueDateValid = (slotsList, dueDate, isAsap) => {\r\n  if (isAsap || isNil(dueDate)) {\r\n    return true\r\n  }\r\n\r\n  let isValid = false\r\n  const dueDateSlot =\r\n    getMsFromHour(parseInt(dueDate.format('HH'), 10)) +\r\n    getMsFromMinute(parseInt(dueDate.format('mm'), 10))\r\n\r\n  slotsList.forEach(slotList => {\r\n    if (isSameDay(slotList.date, dueDate)) {\r\n      slotList.slots.forEach(slot => {\r\n        if (dueDateSlot === slot.value) {\r\n          isValid = true\r\n        }\r\n      })\r\n    }\r\n  })\r\n\r\n  return isValid\r\n}\r\n","import isArray from 'lodash/isArray'\r\n\r\n// this function only works for one level object\r\nexport const filterObject = (object, valueToExclude) => {\r\n  let filteredObject = {}\r\n\r\n  for (const key in object) {\r\n    if (object[key] !== valueToExclude) {\r\n      filteredObject[key] = object[key]\r\n    }\r\n  }\r\n\r\n  return filteredObject\r\n}\r\n\r\nexport const filterByKey = (object, keyToExcludeParam) => {\r\n  const result = {}\r\n\r\n  const keysToExclude = isArray(keyToExcludeParam) ? keyToExcludeParam : [keyToExcludeParam]\r\n\r\n  for (const key in object) {\r\n    if (object.hasOwnProperty(key) && keysToExclude.indexOf(key) === -1) {\r\n      result[key] = object[key]\r\n    }\r\n  }\r\n\r\n  return result\r\n}\r\n","const RestaurantErrors = {\r\n  GET: {\r\n    107: 'global.get_restaurant.error.107',\r\n    108: 'global.get_restaurant.error.108',\r\n    109: 'global.get_restaurant.error.109',\r\n    1004: 'global.get_restaurant.error.1004',\r\n    1005: 'global.get_restaurant.error.1005',\r\n    1006: 'global.get_restaurant.error.1006',\r\n\r\n    closed: 'global.get_restaurant.error.closed',\r\n  },\r\n  POST: {\r\n    default: 'global.post_restaurant.default',\r\n    310: 'global.post_restaurant.error.310',\r\n    311: 'global.post_restaurant.error.311',\r\n  },\r\n  PUT: {\r\n    default: 'global.put_restaurant.default',\r\n  },\r\n  GET_LIST: {\r\n    100: 'global.get_restaurant_list.error.100',\r\n  },\r\n}\r\n\r\nexport default RestaurantErrors\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\nimport { filterObject } from 'pmt-utils/object'\r\n\r\nimport RestaurantErrors from 'pmt-modules/api/errors/RestaurantErrors'\r\n\r\nimport ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nconst RestaurantApi = {\r\n  /**\r\n   * There is no endoint to authenticate restaurant\r\n   * so we just make a call with authorization and apiConsumer\r\n   */\r\n  authRestaurant: (restaurantId, authorization, apiConsumer) => {\r\n    return {\r\n      type: 'GET',\r\n      params: {\r\n        restaurantId,\r\n      },\r\n      headers: {\r\n        authorization,\r\n        'api-consumer': apiConsumer,\r\n      },\r\n      endpoint: ApiEndpoints.RESTAURANT,\r\n    }\r\n  },\r\n\r\n  getRestaurant: (restaurantId, loadOrderSettings = true) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n    },\r\n    query: {\r\n      loadOrderSettings,\r\n    },\r\n    headers: {},\r\n    endpoint: ApiEndpoints.RESTAURANT,\r\n    errorHandler: RestaurantErrors.GET,\r\n  }),\r\n\r\n  /**\r\n   * To be chained with a request (.after param, see HistoryApi)\r\n   *\r\n   * @param  {object} data             the previous api call json data. We add restaurantIds and restaurants on it\r\n   * @param  {Array} restaurantIds    the restaurantIds to retrieve\r\n   * @param  {Array}  [restaurants=[]] the restaurants already retrieved\r\n   */\r\n  getRestaurants: (data, restaurantIds, restaurants = []) => {\r\n    const restaurantRequest = RestaurantApi.getRestaurant(restaurantIds[0])\r\n\r\n    data.restaurantIds = restaurantIds.slice(1)\r\n    data.restaurants = restaurants\r\n\r\n    restaurantRequest.data = data\r\n\r\n    restaurantRequest.then = (previousOptions, json) => {\r\n      const data = previousOptions.data\r\n      const restaurants = data.restaurants\r\n      restaurants.push(json)\r\n\r\n      if (isEmpty(data.restaurantIds)) {\r\n        // set data to return\r\n        // restaurantIds is empty, we recreate it\r\n        data.restaurantIds = restaurants.map(restaurant => restaurant.id)\r\n        data.restaurants = restaurants\r\n        previousOptions.success(data)\r\n        return null\r\n      } else {\r\n        return RestaurantApi.getRestaurants(data, data.restaurantIds, restaurants)\r\n      }\r\n    }\r\n\r\n    return restaurantRequest\r\n  },\r\n\r\n  postRestaurant: data => {\r\n    return {\r\n      type: 'POST',\r\n      body: data,\r\n      endpoint: ApiEndpoints.RESTAURANTS,\r\n      errorHandler: RestaurantErrors.POST,\r\n    }\r\n  },\r\n\r\n  updateRestaurant: (restaurantId, data) => {\r\n    return {\r\n      type: 'PUT',\r\n      params: {\r\n        restaurantId,\r\n      },\r\n      body: data,\r\n      endpoint: ApiEndpoints.RESTAURANT_NEW_ARCHI,\r\n      errorHandler: RestaurantErrors.PUT,\r\n    }\r\n  },\r\n\r\n  getRestaurantList: props => {\r\n    const defaultOptions = {\r\n      loadOrderSettings: true,\r\n      orderByDistance: true,\r\n      limit: 10,\r\n    }\r\n\r\n    let filteredQuery = filterObject(props.query, null)\r\n\r\n    return {\r\n      type: 'GET',\r\n      query: {\r\n        ...defaultOptions,\r\n        ...filteredQuery,\r\n        returnRestaurantsGeoPtList: true,\r\n      },\r\n      endpoint: ApiEndpoints.RESTAURANT_LIST,\r\n      errorHandler: RestaurantErrors.GET_LIST,\r\n    }\r\n  },\r\n\r\n  /**\r\n   * options - it can contain orderByDistance / loadOrderSettings attributes. Default values if not set is true\r\n   */\r\n  getRestaurantListByGeoPt: (latitude, longitude, options) => {\r\n    const defaultOptions = {\r\n      orderByDistance: true,\r\n      loadOrderSettings: true,\r\n      limit: 10,\r\n    }\r\n\r\n    const props = {\r\n      query: {\r\n        latitude,\r\n        longitude,\r\n        ...defaultOptions,\r\n        ...options,\r\n      },\r\n      errorHandler: RestaurantErrors.GET_LIST,\r\n    }\r\n\r\n    return RestaurantApi.getRestaurantList(props)\r\n  },\r\n\r\n  getRestaurantsByIds: props => ({\r\n    type: 'POST',\r\n    endpoint: '/restaurants-groups/:restaurantsGroupId/restaurants/search',\r\n    params: props.params,\r\n    body: props.body,\r\n  }),\r\n\r\n  getCheckup: payload => ({\r\n    type: 'POST',\r\n    endpoint: ApiEndpoints.RESTAURANT_CHECKUP,\r\n    body: payload,\r\n  }),\r\n}\r\n\r\nexport default RestaurantApi\r\n","import { redirectTo } from '../routing'\r\n\r\nimport { createAction } from '../redux'\r\n\r\nimport {\r\n  createApiCallAction,\r\n  createApiEnumAction,\r\n  // createTestApiCallAction,\r\n} from '../api/utils'\r\n\r\nimport { getRoute, openExternalLink } from '../routing'\r\nimport RestaurantApi from '../api/calls/RestaurantApi'\r\n\r\n// NOTE: comment when do not using it for debug\r\n// import { getRestaurantFixture } from '../../api/fixtures/restaurant'\r\n\r\nexport const GetRestaurantAction = createApiEnumAction('RESTAURANT::GET')\r\n\r\nexport const redirectToRestaurant = (restaurantId, queryParams) => (dispatch, getState) => {\r\n  return dispatch(redirectTo(getRoute('STORE_LOCATOR_RESTAURANT'), { restaurantId }, queryParams))\r\n}\r\n\r\nexport const fetchRestaurant = restaurantId =>\r\n  createApiCallAction(GetRestaurantAction, RestaurantApi.getRestaurant(restaurantId), {\r\n    restaurantId,\r\n  })\r\n\r\nexport const RefreshRestaurantAction = createApiEnumAction('RESTAURANT::REFRESH')\r\n\r\nexport const refreshRestaurant = (restaurantId, options) =>\r\n  createApiCallAction(RefreshRestaurantAction, RestaurantApi.getRestaurant(restaurantId), {\r\n    restaurantId,\r\n    options,\r\n  })\r\n\r\nexport const GetRestaurantsAction = createApiEnumAction('RESTAURANT::GET::MULTIPLE')\r\n\r\nexport const fetchRestaurants = restaurantIds =>\r\n  createApiCallAction(GetRestaurantsAction, RestaurantApi.getRestaurants(restaurantIds), {\r\n    restaurantIds,\r\n  })\r\n\r\nexport const PostRestaurantAction = createApiEnumAction('RESTAURANT::POST')\r\n\r\nexport const postRestaurant = data =>\r\n  createApiCallAction(PostRestaurantAction, RestaurantApi.postRestaurant(data), {\r\n    ...data,\r\n  })\r\n\r\nexport const PutRestaurantAction = createApiEnumAction('RESTAURANT::PUT')\r\n\r\nexport const putRestaurant = (restaurantId, data, useFormData = true) =>\r\n  createApiCallAction(\r\n    PutRestaurantAction,\r\n    RestaurantApi.updateRestaurant(restaurantId, data, useFormData),\r\n    {\r\n      restaurantId,\r\n      ...data,\r\n    }\r\n  )\r\n\r\nexport const GetRestaurantListAction = {\r\n  ...createApiEnumAction('RESTAURANT_LIST::GET'),\r\n  RESET: 'RESTAURANT_LIST::RESET',\r\n}\r\n\r\nexport const fetchRestaurantList = ({ useIP = false, restaurantId = null, limit = 10 }) =>\r\n  createApiCallAction(\r\n    GetRestaurantListAction,\r\n    RestaurantApi.getRestaurantList({ query: { useIP, restaurantId, limit } }),\r\n    {}\r\n  )\r\n\r\nexport const resetRestaurantList = () => createAction(GetRestaurantListAction.RESET, {})\r\n\r\nexport const GetRestaurantListByGeoPtAction = createApiEnumAction('RESTAURANT_LIST_BY_GEO_PT::GET')\r\n\r\nexport const fetchRestaurantListByGeoPt = (latitude, longitude, options = { limit: 10 }) =>\r\n  createApiCallAction(\r\n    GetRestaurantListByGeoPtAction,\r\n    RestaurantApi.getRestaurantListByGeoPt(latitude, longitude, options),\r\n    {\r\n      latitude,\r\n      longitude,\r\n      options,\r\n    }\r\n  )\r\n\r\n// using fixtures test. Spain with restrict 4g does not handle our awesome API :(\r\n// export const fetchRestaurant = (restaurantId) => createTestApiCallAction(\r\n//   GetRestaurantAction,\r\n//   true,\r\n//   {\r\n//     response: getRestaurantFixture(),\r\n//     data: {\r\n//       restaurantId,\r\n//     }\r\n//   }\r\n// )\r\n\r\nexport const RestaurantAction = {\r\n  SET: 'RESTAURANT::SET',\r\n  OPEN_MENU_PDF: 'RESTAURANT::OPEN_MENU_PDF',\r\n  OPEN_WEBSITE: 'RESTAURANT::OPEN_WEBSITE',\r\n}\r\n\r\nexport const setRestaurant = restaurant => createAction(RestaurantAction.SET, { restaurant })\r\n\r\nexport const openRestaurantWebsite = restaurant =>\r\n  createAction(RestaurantAction.OPEN_WEBSITE, { restaurant }, () => {\r\n    openExternalLink(restaurant.webSitePub)\r\n  })\r\n\r\nexport const openRestaurantMenuPdf = restaurant =>\r\n  createAction(RestaurantAction.OPEN_MENU_PDF, { restaurant }, () => {\r\n    openExternalLink(restaurant.menuPdf)\r\n  })\r\n","import isNil from 'lodash/isNil'\r\n\r\nimport createMiddleware from 'pmt-modules/redux/createMiddleware'\r\nimport { RestaurantAction } from 'pmt-modules/restaurant/actions'\r\n\r\nimport { setOrderSettings } from './actions'\r\n\r\nconst setOrderSettingsWhenHavingARestaurant = createMiddleware(\r\n  RestaurantAction.SET,\r\n  ({ dispatch, action }) => {\r\n    if (!isNil(action.restaurant)) {\r\n      const orderSettings = action.restaurant.orderSettings\r\n      dispatch(setOrderSettings(orderSettings))\r\n    }\r\n  }\r\n)\r\n\r\nexport const orderSettingsMiddlewares = [setOrderSettingsWhenHavingARestaurant]\r\n","//\r\n// This module store global configuration and data for the order plugin,\r\n// that don't requires their own module / reducer\r\n//\r\nimport Immutable from 'immutable'\r\n\r\nimport { OrderSettingsAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './constants'\r\nexport * from './format'\r\nexport * from './selectors'\r\nexport * from './utils'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\nexport const orderSettingsReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case OrderSettingsAction.SET_ORDER_SETTINGS:\r\n      return state.merge(action.orderSettings)\r\n\r\n    case OrderSettingsAction.RESET_ORDER_SETTINGS:\r\n      return state.set({})\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport {\r\n  formatOrderFees,\r\n  formatOrderSettingsFees,\r\n  generateFeesFromSettings,\r\n} from 'pmt-modules/fees'\r\nimport { getDefaultLocale } from 'pmt-modules/i18n'\r\nimport { formatOrder, OrderMode } from 'pmt-modules/order'\r\nimport {\r\n  getMaxTimeAheadAsDaysOnMode,\r\n  PaymentMethodsAllowed,\r\n  getDeliveryTime,\r\n} from 'pmt-modules/orderSettings'\r\nimport { getAsyncPaymentBrowserInfo } from 'pmt-utils/browser'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { millisecondsToMinutes } from 'pmt-utils/date'\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\n\r\nconst formatVoucher = data => ({\r\n  ...data,\r\n  formattedBalance: formatPriceWithCurrency(data.balanceInMonetaryUnit, data.currency),\r\n})\r\n\r\nconst formatVouchers = createListFormatter(formatVoucher)\r\n\r\nconst formatOrderProperties = (\r\n  data,\r\n  { cartData, orderAppConfig, orderSettings, orderPreview, orderPreviewVerifications }\r\n) => {\r\n  data.locale = isNil(data.locale) ? getDefaultLocale() : data.locale\r\n\r\n  data.isTakeAway = data.mode === OrderMode.TAKE_AWAY\r\n  data.isOnSite = data.mode === OrderMode.ON_SITE\r\n  data.isDelivery = data.mode === OrderMode.DELIVERY\r\n\r\n  data.isIrlMethod = data.paymentMethod === PaymentMethodsAllowed.IRL\r\n  data.isCreditCardMethod = data.paymentMethod === PaymentMethodsAllowed.CREDIT_CARD\r\n  data.isUserAccountMethod = data.paymentMethod === PaymentMethodsAllowed.USER_ACCOUNT\r\n  data.isTRDMethod = data.paymentMethod === PaymentMethodsAllowed.TRD\r\n\r\n  // we authorize the vouchers only on credit card payments\r\n  // (vouchers can be used IRL when doing IRL payment, but in this case they are handled directly by the restaurant at the cash desk, not by PMT)\r\n  data.areOnlineVouchersAllowed = data.isCreditCardMethod\r\n\r\n  if (!isNil(data.postedOrderData)) {\r\n    data.postedOrderData.orderData = formatOrder(data.postedOrderData.orderData)\r\n  }\r\n\r\n  if (!isNil(data.vouchers)) {\r\n    data.vouchers = formatVouchers(data.vouchers)\r\n    data.totalVoucherAmount = data.vouchers.reduce(\r\n      (total, voucher) => total + voucher.balanceInMonetaryUnit,\r\n      0\r\n    )\r\n  }\r\n\r\n  // this part seems deprecated\r\n  data.maxTimeAheadAsDaysForMode = null\r\n  if (!isNil(data.mode)) {\r\n    data.maxTimeAheadAsDaysForMode = getMaxTimeAheadAsDaysOnMode(\r\n      data.mode,\r\n      orderSettings.onSiteSettings,\r\n      orderSettings.takeAwaySettings,\r\n      orderSettings.deliverySettings\r\n    )\r\n  }\r\n\r\n  if (data.isDelivery && !isNil(orderSettings.deliverySettings)) {\r\n    data.deliveryTime = getDeliveryTime(orderSettings.deliverySettings)\r\n  } else {\r\n    data.deliveryTime = 0\r\n  }\r\n\r\n  // delay only contains the manufacture delay\r\n  data.delay = 0\r\n  if (!isNil(orderSettings.manufactureDelay) && !orderAppConfig.bypassManufactureDelay) {\r\n    data.delay = orderSettings.manufactureDelay\r\n  }\r\n  data.delayAndDeliveryFormattedAsMin = millisecondsToMinutes(data.delay + data.deliveryTime)\r\n\r\n  data.hasDelayOrDeliveryTime = data.delay + data.deliveryTime > 0\r\n\r\n  data.fees = formatOrderFees(\r\n    generateFeesFromSettings(formatOrderSettingsFees(orderSettings.orderFeeSettings || []), {\r\n      orderMode: data.mode,\r\n      totalCartPrice: cartData.totalCartPrice,\r\n    })\r\n  )\r\n\r\n  data.modifiers = get(orderPreview, 'modifiers', null)\r\n  data.admissionFees = get(orderPreview, 'admissionFees', null)\r\n  data.userAccount = get(orderPreviewVerifications, 'userAccount', null)\r\n\r\n  data.totalFees = data.fees.reduce((total, fee) => (total += fee.amountIncludingTax), 0)\r\n\r\n  data.totalModifiersOrder = (get(orderPreview, 'modifiersOrdered') || []).reduce(\r\n    (total, modifier) => (total += modifier.amount),\r\n    0\r\n  )\r\n\r\n  data.totalCartPrice = cartData.totalItemList\r\n\r\n  data.totalTaxAmount = get(orderPreview, 'totalTaxAmount', null)\r\n  data.totalTaxAmountFormatted = formatPriceWithCurrency(data.totalTaxAmount)\r\n\r\n  data.totalCartPriceAndFeesWithoutTaxes =\r\n    cartData.totalItemList +\r\n    data.totalFees +\r\n    data.totalModifiersOrder +\r\n    get(orderPreview, 'admissionFees.amountIncludingTax', 0) -\r\n    get(orderPreviewVerifications, 'userAccount.subsidies.grantAmount', 0)\r\n\r\n  data.totalCartPriceAndFeesWithoutTaxesFormatted = formatPriceWithCurrency(\r\n    data.totalCartPriceAndFeesWithoutTaxes\r\n  )\r\n\r\n  data.totalCartPriceAndFees =\r\n    cartData.totalItemList +\r\n    data.totalFees +\r\n    data.totalModifiersOrder +\r\n    get(orderPreview, 'admissionFees.amountIncludingTax', 0) -\r\n    get(orderPreviewVerifications, 'userAccount.subsidies.grantAmount', 0) +\r\n    (data.totalTaxAmount || 0)\r\n\r\n  data.totalCartPriceAndFeesFormatted = formatPriceWithCurrency(data.totalCartPriceAndFees)\r\n\r\n  data.totalCartPriceAndFeesAndTips = data.totalCartPriceAndFees + (data.tips || 0)\r\n  data.totalCartPriceAndFeesAndTipsFormatted = formatPriceWithCurrency(\r\n    data.totalCartPriceAndFeesAndTips\r\n  )\r\n\r\n  data.amountToPay = Math.max(\r\n    data.totalCartPriceAndFeesAndTips -\r\n      (data.areOnlineVouchersAllowed ? data.totalVoucherAmount : 0),\r\n    0\r\n  )\r\n  data.amountToPayFormatted = formatPriceWithCurrency(data.amountToPay)\r\n\r\n  return data\r\n}\r\n\r\n/**\r\n * Data neeeded for 3DS v2\r\n *\r\n * https://www.notion.so/paymytable/Mangopay-3DS2-543d705dd4534a908b3dc1a64882e7a6.\r\n */\r\nconst formatBrowserInfo = data => ({\r\n  ...data,\r\n  browserInfo: getAsyncPaymentBrowserInfo(),\r\n})\r\n\r\nconst formatPaymentProperties = data => ({\r\n  ...data,\r\n  payment: {\r\n    method: data.paymentMethod,\r\n    isIrlMethod: data.isIrlMethod,\r\n    isCreditCardMethod: data.isCreditCardMethod,\r\n    isTRDMethod: data.isTRDMethod,\r\n    isUserAccountMethod: data.isUserAccountMethod,\r\n  },\r\n})\r\n\r\nexport const formatOrderFrontProperties = createFormatter(\r\n  formatOrderProperties,\r\n  formatPaymentProperties,\r\n  formatBrowserInfo\r\n)\r\n\r\nconst formatOrderData = ({ orderFrontProperties, itemListForApi, userMe, comment }) => {\r\n  const userId = userMe ? userMe.id : null\r\n\r\n  // the attributes set to null here \"must be\"\r\n  // set in the specific fronts part (order plugin / order kiosk)\r\n\r\n  let data = {\r\n    ...itemListForApi,\r\n    dueDateMode: orderFrontProperties.dueDateMode,\r\n    mode: Number(orderFrontProperties.mode),\r\n    restaurantId: orderFrontProperties.restaurantId,\r\n    userId,\r\n    tableNumber: null,\r\n    posCheckId: null,\r\n    pagerId: orderFrontProperties.pagerId,\r\n    modifiers: orderFrontProperties.modifiers,\r\n    vouchers: orderFrontProperties.vouchers,\r\n    comment,\r\n    idempotencyKey: orderFrontProperties.idempotencyKey,\r\n    address: {\r\n      city: null,\r\n      complement: null,\r\n      country: null,\r\n      id: null,\r\n      name: null,\r\n      postCode: null,\r\n      street: null,\r\n    },\r\n    admissionFees: orderFrontProperties.admissionFees,\r\n    fees: orderFrontProperties.fees,\r\n    payment: null,\r\n    // since the API is implicit on the payment method, we add the chosen payment method on the front\r\n    // allow us to find errors / bad behaviour, such as a payment with user account at 0 being\r\n    // transformed to an on site payment.\r\n    paymentMethod: orderFrontProperties.paymentMethod,\r\n    browserInfo: orderFrontProperties.browserInfo,\r\n  }\r\n\r\n  if (!isNil(orderFrontProperties.dueDate)) {\r\n    data = { ...data, dueDate: orderFrontProperties.dueDate }\r\n  }\r\n\r\n  return data\r\n}\r\n\r\nexport const formatOrderFrontData = createFormatter(formatOrderData)\r\n","import { createApiCallAction, createApiEnumAction } from '../api/utils'\r\nimport createAction from '../redux/createAction'\r\n\r\nimport UserApi from '../api/calls/UserApi'\r\n\r\nexport const GetUserMeAction = createApiEnumAction('USER::ME::GET')\r\n\r\nexport const fetchUserMe = props =>\r\n  createApiCallAction(GetUserMeAction, UserApi.getUserMe(), {\r\n    props,\r\n  })\r\n\r\nexport const PutUserMeAction = createApiEnumAction('USER::ME::PUT')\r\n\r\n/**\r\n * Update user profile\r\n */\r\nexport const updateProfile = (user, props) =>\r\n  createApiCallAction(PutUserMeAction, UserApi.putProfile(user), {\r\n    user,\r\n    userId: user.id,\r\n    props,\r\n  })\r\n\r\nexport const UserMeActions = {\r\n  SET_USER: 'USER::ME::SET',\r\n}\r\n\r\nexport const setUserMe = user =>\r\n  createAction(UserMeActions.SET_USER, {\r\n    user,\r\n  })\r\n","import moment from 'moment'\r\n\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nconst formatAmount = userAccount => {\r\n  userAccount.amountFormatted = formatPriceWithCurrency(userAccount.amount)\r\n  return userAccount\r\n}\r\n\r\nconst formatExpirationDateAsHour = userAccount => {\r\n  userAccount.tokenExpirationDateAsHour = moment(userAccount.tokenExpirationDate).format('HH:mm')\r\n  return userAccount\r\n}\r\n\r\nexport const formatUserAccount = createFormatter(formatAmount, formatExpirationDateAsHour)\r\n\r\nexport const formatUserAccounts = createListFormatter(formatUserAccount)\r\n\r\nexport const formatUserUserAccounts = user => {\r\n  user.userAccount = null // default\r\n\r\n  if (user.userAccounts && user.userAccounts.length > 0) {\r\n    user.userAccounts = formatUserAccounts(user.userAccounts)\r\n\r\n    if (user.userAccounts) {\r\n      user.userAccount = user.userAccounts[0]\r\n    }\r\n  } else {\r\n    // avoid crashes on map array, default value.\r\n    user.userAccounts = []\r\n  }\r\n  return user\r\n}\r\n","import { createFormatter } from 'pmt-utils/format'\r\n\r\nimport { getDietLabel, getAllergenLabel } from '../constants'\r\n\r\nconst formatDiet = dietaryPreferences => {\r\n  dietaryPreferences.dietLabel = getDietLabel(dietaryPreferences.diet) || null\r\n  return dietaryPreferences\r\n}\r\n\r\nconst formatAllergens = dietaryPreferences => {\r\n  dietaryPreferences.allergensLabels = (dietaryPreferences.allergens || []).map(getAllergenLabel)\r\n  return dietaryPreferences\r\n}\r\n\r\nexport const formatDietaryPreferences = createFormatter(formatDiet, formatAllergens)\r\n","import { createFormatter } from 'pmt-utils/format'\r\n\r\nconst formatAllowContact = (marketing) => {\r\n  marketing.allowContactLabel = marketing.allowContact === true ? 'oui' : 'non'\r\n  return marketing\r\n}\r\n\r\nexport const formatMarketing = createFormatter(\r\n  formatAllowContact,\r\n)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { isBo } from 'pmt-modules/environment'\r\nimport { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\n\r\nimport { getCountryNameForCode } from 'pmt-utils/country'\r\n\r\nimport { formatDate } from 'pmt-utils/date'\r\n\r\nimport { formatPhoneNumber } from 'pmt-utils/phone'\r\nimport { formatPspUserUrl } from 'pmt-modules/psp/format'\r\n\r\nimport { formatUserUserAccounts } from '../../userAccount/format'\r\n\r\nimport { formatDietaryPreferences } from './dietaryPreferences'\r\n\r\nimport { formatMarketing } from './marketing'\r\n\r\nimport {\r\n  DEFAULT_BIRTHDATE,\r\n  DEFAULT_DIETARY_PREFERENCES,\r\n  getGenderLabel,\r\n  Gender,\r\n} from '../constants'\r\n\r\nexport const formatEmail = user => {\r\n  user.hasEmail = !isEmpty(user.email)\r\n  return user\r\n}\r\n\r\nexport const formatGender = user => {\r\n  user.genderLabel = getGenderLabel(user.gender || Gender.NONE)\r\n  return user\r\n}\r\n\r\nexport const formatBirthdate = user => {\r\n  user.isDefaultBirthdate = user.birthdate === DEFAULT_BIRTHDATE\r\n  user.birthdateFormatted = formatDate(user.birthdate, 'DD/MM/YYYY')\r\n\r\n  return user\r\n}\r\n\r\nconst formatUserDates = user => {\r\n  user.creationDateFormatted =\r\n    user.creationDate === 0 ? tr('global.not_available') : formatDate(user.creationDate)\r\n\r\n  user.lastActivityDateFormatted = formatDate(user.lastActivityDate)\r\n  return user\r\n}\r\n\r\nconst formatPhone = user => {\r\n  user.phoneFormatted =\r\n    user.phone === null ? tr('global.not_available') : formatPhoneNumber(user.phone)\r\n\r\n  return user\r\n}\r\n\r\nconst formatName = user => {\r\n  // api returns a fullName, but it is an odd and old value..\r\n  if (user.firstName && user.lastName) {\r\n    user.fullName = `${user.firstName} ${user.lastName}`\r\n  }\r\n  user.displayName = user.fullName || tr('user.anonymous')\r\n  return user\r\n}\r\n\r\nexport const formatLocales = user => {\r\n  user.nationalityLabel = getCountryNameForCode(user.nationality)\r\n  user.countryOfResidenceLabel =\r\n    user.countryOfResidence === null\r\n      ? tr('global.not_available')\r\n      : getCountryNameForCode(user.countryOfResidence)\r\n  user.countryLabel = getCountryNameForCode(user.country)\r\n\r\n  return user\r\n}\r\n\r\n/**\r\n * All users have the following as default dietary preferences, but not the older ones\r\n */\r\nconst createDietaryIfNull = user => {\r\n  if (!user.dietaryPreferences) {\r\n    user.dietaryPreferences = DEFAULT_DIETARY_PREFERENCES\r\n  }\r\n\r\n  return user\r\n}\r\n\r\nconst formatPsp = user => {\r\n  if (isBo()) {\r\n    // TODO: make pspUserId accessible on API for AuditPermissions\r\n    user.pspUserUrl = formatPspUserUrl(user.pspUserId)\r\n  }\r\n  return user\r\n}\r\n\r\nexport const formatUser = createFormatter(\r\n  formatEmail,\r\n  formatBirthdate,\r\n  formatGender,\r\n  formatPhone,\r\n  formatUserDates,\r\n  formatUserUserAccounts,\r\n  formatName,\r\n  formatLocales,\r\n  createDietaryIfNull,\r\n  formatPsp,\r\n  // sub objects\r\n  createSubObjectFormatter('dietaryPreferences', formatDietaryPreferences),\r\n  createSubObjectFormatter('marketing', formatMarketing),\r\n  user => {\r\n    user.isIncognito = user.userType === 'INCOGNITO'\r\n    return user\r\n  }\r\n)\r\n\r\nexport const formatUserList = createListFormatter(formatUser)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { formatUser } from 'pmt-modules/user/format'\r\nimport { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nconst getUserMeData = state => state.entities.userMe\r\n\r\nexport const isFetchingUserMe = createSelector([getUserMeData], userMeData => {\r\n  if (isNil(userMeData)) {\r\n    return false\r\n  }\r\n\r\n  return userMeData.get('isFetching')\r\n})\r\n\r\nexport const getUserMe = createSelector([getUserMeData], userMeData => {\r\n  if (isNil(userMeData)) {\r\n    return null\r\n  }\r\n  const userMe = userMeData.get('userMe')\r\n\r\n  if (isNil(userMe)) {\r\n    return null\r\n  }\r\n  return formatUser(userMe.toJS())\r\n})\r\n\r\nconst putUserMe = createSimpleSelector(state => state.entities.putUserMe)\r\n\r\nexport const isFetchingPutUserMe = putUserMe.isFetching\r\nexport const getDataputUserMe = putUserMe.getData\r\nexport const getErrorputUserMe = putUserMe.getError\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNull from 'lodash/isNull'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport { fetchUserMe } from '../../actions'\r\nimport { getUserMe, isFetchingUserMe } from '../../selectors'\r\n\r\nimport { getAuth, isFetchingAuth } from '../../../auth'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that fetch the current logged in user and pass it to the children.\r\n *\r\n * Requirements:\r\n * -\r\n *\r\n * see `withUserMe`\r\n *\r\n */\r\nclass UserMeContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (isNull(props.me)) {\r\n      this.loadUserMe(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n    if (nextProps.userId !== props.userId || (props.isFetchingAuth && !nextProps.isFetchingAuth)) {\r\n      this.loadUserMe(nextProps)\r\n    }\r\n  }\r\n\r\n  loadUserMe(props) {\r\n    if (\r\n      !props.isFetchingMe &&\r\n      !props.isFetchingAuth &&\r\n      (props.auth != null || getQueryParam('access_token'))\r\n    ) {\r\n      props.fetchUserMe()\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      UserMeWrappedComponent,\r\n      children,\r\n      isFetchingMe,\r\n      isFetchingAuth,\r\n      me,\r\n      ...other\r\n    } = this.props\r\n\r\n    if (UserMeWrappedComponent) {\r\n      return (\r\n        <UserMeWrappedComponent\r\n          UserMeWrappedComponent={null}\r\n          userId={'me'}\r\n          isFetchingMe={isFetchingMe || isFetchingAuth}\r\n          user={me}\r\n          me={me}\r\n          {...other}\r\n        />\r\n      )\r\n    }\r\n\r\n    return children({\r\n      userId: 'me',\r\n      isFetchingMe: isFetchingMe || isFetchingAuth,\r\n      me,\r\n      user: me,\r\n    })\r\n  }\r\n}\r\n\r\nUserMeContainer.propTypes = {\r\n  fetchUserMe: PropTypes.func.isRequired,\r\n  isFetchingMe: PropTypes.bool,\r\n  isFetchingAuth: PropTypes.bool,\r\n  me: PropTypes.object,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {\r\n    me: getUserMe(state, props),\r\n    isFetchingMe: isFetchingUserMe(state, props),\r\n    isFetchingAuth: isFetchingAuth(state),\r\n    auth: getAuth(state),\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    fetchUserMe,\r\n  }\r\n)(UserMeContainer)\r\n","import React from 'react'\r\n\r\nimport UserMeContainer from './index'\r\n\r\n/**\r\n * Add the UserMeContainer as HOC for the given component\r\n */\r\nconst withUserMe = (UserMeWrappedComponent) => {\r\n  return (props) => (\r\n    <UserMeContainer\r\n      UserMeWrappedComponent={UserMeWrappedComponent}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nexport default withUserMe\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { haveAuthCredentials } from '../../../auth'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that fetch the current logged in user and pass it to the children.\r\n *\r\n * Requirements:\r\n * -\r\n *\r\n * see `withUserMe`\r\n *\r\n */\r\nclass AuthStateContainer extends React.Component {\r\n  render() {\r\n    const { haveAuthCredentials, AuthWrappedComponent, ...otherProps } = this.props\r\n\r\n    if (AuthWrappedComponent) {\r\n      return <AuthWrappedComponent haveAuthCredentials={haveAuthCredentials} {...otherProps} />\r\n    }\r\n\r\n    return this.props.children({\r\n      haveAuthCredentials,\r\n    })\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {\r\n    haveAuthCredentials: haveAuthCredentials(state),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {})(AuthStateContainer)\r\n","import Immutable from 'immutable'\r\n\r\nimport { createSimpleReducer } from 'pmt-modules/redux'\r\n\r\nimport { GetUserMeAction, PutUserMeAction, UserMeActions } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './components'\r\nexport * from './selectors'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  userMe: null,\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n})\r\n\r\nexport const meReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case GetUserMeAction.REQUEST:\r\n      return state.merge({\r\n        userMe: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case PutUserMeAction.SUCCESS:\r\n    case GetUserMeAction.SUCCESS:\r\n      return state.merge({\r\n        userMe: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case UserMeActions.SET_USER:\r\n      return state.merge({\r\n        userMe: action.user,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetUserMeAction.FAILURE:\r\n      return state.merge({\r\n        userMe: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport const putUserMeReducer = createSimpleReducer(PutUserMeAction)\r\n","//\r\n// Utils around `Object.freeze`\r\n//\r\n\r\n/**\r\n * A pure function is a function where the return value is only determined by its input values, \r\n * without observable side effects.\r\n * \r\n * Example:\r\n * \r\n * ```javascript\r\n * // good \r\n * const myFunc = pureFunction((paramA) => {\r\n *    return paramA * 2\r\n * })\r\n * \r\n * // wrong\r\n * const myFunc = pureFunction((paramA) => {\r\n *    paramA = paramA * 2\r\n *    return paramA\r\n * })\r\n * ```\r\n * \r\n * It will throw an exception if the func given have side effects (modify the given parameters).\r\n * Use this for any function that should be pure (= should not have side effect).\r\n * \r\n * TODO: maybe make a function pure only in development?\r\n * \r\n * Freeze each parameter of the given func\r\n * @param {*} func \r\n */\r\nexport const pureFunction = (func) => (...args) => {\r\n  const newArgs = args.map(arg => Object.freeze(arg))\r\n  return func.apply(this, newArgs)\r\n}","/**\r\n * Transform OrderProduct and OrderMenu common data for the API.\r\n *\r\n * - options:\r\n *  - isMenuMode {boolean}\r\n */\r\nconst transformOrderItemForApi = (item, options = {}) => ({\r\n  id: item.id,\r\n  orderId: item.orderId,\r\n  // baseOrderId is not an api field, but we need it for reconciliation\r\n  // for a product: when in menu mode, we use the orderId as baseOrderId since it can't change\r\n  // in product mode or for a menu item, the baseOrderId has been set on\r\n  // `transformCartForApi#explodeItem`\r\n  baseOrderId: options.isMenuMode === true ? item.orderId : item.baseOrderId,\r\n  // TODO: handle\r\n  categoryId: item.categoryId || null,\r\n  // TODO: handle\r\n  categoryName: item.categoryName || null,\r\n  grantable: false, // only used by POS\r\n  name: item.name,\r\n  comment: item.comment,\r\n  basePrice: item.basePrice,\r\n  price: item.price,\r\n  // TODO: handle\r\n  conditionForModifierIds: item.conditionForModifierIds || [],\r\n  // TODO: handle\r\n  modifierIds: item.conditionForModifierIds || [],\r\n  dietaryInfo: item.dietaryInfo,\r\n  tracking: item.tracking,\r\n})\r\n\r\nexport default transformOrderItemForApi\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\nimport transformOrderItemForApi from './transformOrderItemForApi'\r\n\r\nconst transformOrderProductOptionValueForApi = ({\r\n  id,\r\n  name,\r\n  baseAdditionalPrice,\r\n  additionalPrice,\r\n  dietaryInfo,\r\n  orderId,\r\n}) => ({\r\n  id: id,\r\n  name: name,\r\n  baseAdditionalPrice: baseAdditionalPrice || 0,\r\n  additionalPrice: additionalPrice || 0,\r\n  dietaryInfo,\r\n  orderId,\r\n})\r\n\r\nconst transformOrderProductOptionValuesForApi = values =>\r\n  values\r\n    // keep only selected values\r\n    .filter(value => value.quantity > 0)\r\n    .map(value => transformOrderProductOptionValueForApi(value))\r\n\r\nconst transformOrderProductOptionForApi = option => {\r\n  const values = transformOrderProductOptionValuesForApi(option.values)\r\n  if (isEmpty(values)) {\r\n    return false\r\n  }\r\n\r\n  return {\r\n    id: option.id,\r\n    name: option.name,\r\n    orderId: option.orderId,\r\n    values,\r\n  }\r\n}\r\n\r\nconst transformOrderProductOptionsForApi = options => {\r\n  let optionsToReturn = []\r\n  // keep only valid options\r\n  options.filter(value => value.isValid).forEach(option => {\r\n    const optionTransformed = transformOrderProductOptionForApi(option)\r\n    if (optionTransformed) {\r\n      optionsToReturn.push(optionTransformed)\r\n    }\r\n  })\r\n\r\n  return optionsToReturn\r\n}\r\n/**\r\n * Transform OrderProduct data for the API.\r\n *\r\n * - options:\r\n *    - isMenuMode {boolean}\r\n */\r\nconst transformOrderProductForApi = (orderProduct, options) => ({\r\n  ...transformOrderItemForApi(orderProduct, options),\r\n  sequence: orderProduct.sequence || 0,\r\n  reclaimLater: orderProduct.reclaimLater || false,\r\n  options: transformOrderProductOptionsForApi(orderProduct.options),\r\n  baseAdditionalPrice: orderProduct.baseAdditionalPrice,\r\n  additionalPrice: orderProduct.additionalPrice,\r\n  // we don't have to handle the tax, only POS\r\n  tax: null,\r\n})\r\n\r\nexport default transformOrderProductForApi\r\n","import transformOrderItemForApi from './transformOrderItemForApi'\r\nimport transformOrderProductForApi from './transformOrderProductForApi'\r\n\r\nconst transformOrderProductsForApi = products =>\r\n  products\r\n  // keep only valid products\r\n  // use quantity and not `isValid` since a product can be valid, but not chosen \r\n  // (product withou options)\r\n  .filter(product => product.quantity > 0)\r\n  .map(product => transformOrderProductForApi(product, {\r\n    isMenuMode: true,\r\n  }))\r\n\r\nconst transformOrderMenuPartForApi = part => ({\r\n  id: part.id,\r\n  name: part.name,\r\n  products: transformOrderProductsForApi(part.products),\r\n})\r\n\r\nconst transformOrderMenuPartsForApi = parts =>\r\n  parts.map(part => transformOrderMenuPartForApi(part))\r\n\r\nconst transformOrderMenuForApi = orderMenu => ({\r\n  ...transformOrderItemForApi(orderMenu),\r\n  parts: transformOrderMenuPartsForApi(orderMenu.parts || []),\r\n})\r\n\r\nexport default transformOrderMenuForApi\r\n","import { generateUUID } from 'pmt-utils/uuid'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport { pureFunction } from 'pmt-utils/pure'\r\n\r\nimport transformOrderProductForApi from './transformOrderProductForApi'\r\nimport transformOrderMenuForApi from './transformOrderMenuForApi'\r\n\r\nconst explodeItem = item => {\r\n  const itemList = []\r\n  for (let i = 0; i < item.quantity; i++) {\r\n    // TODO: deep copy ?\r\n    const duplicateItem = cloneDeep(item)\r\n    // baseOrderId contains the orderId that we set on our front cart.\r\n    // we change the orderId to be unique, but want to keep a trace of its orderId on the cart,\r\n    // for the reconciliation\r\n    duplicateItem.baseOrderId = duplicateItem.orderId\r\n    // generate a new orderId for the duplicate items\r\n    if (i !== 0) {\r\n      duplicateItem.orderId = generateUUID()\r\n    }\r\n    itemList.push(duplicateItem)\r\n  }\r\n\r\n  return itemList\r\n}\r\n\r\nconst explodeItems = items =>\r\n  items.reduce((res, item) => {\r\n    // a product have a quantity > 1, we need to de-duplicate it\r\n    const devidedProducts = explodeItem(item)\r\n    return res.concat(devidedProducts)\r\n  }, [])\r\n\r\nconst transformProducts = products =>\r\n  explodeItems(products).map(product => transformOrderProductForApi(product))\r\n\r\nconst transformMenus = menus =>\r\n  explodeItems(menus).map(menu => transformOrderMenuForApi(menu))\r\n\r\nexport const transformCartItemsForApi = pureFunction(itemsListParam => {\r\n  const itemsList = cloneDeep(itemsListParam)\r\n  const cart = {\r\n    products: transformProducts(itemsList.filter(item => item.isProduct)),\r\n    menus: transformMenus(itemsList.filter(item => item.isMenu)),\r\n  }\r\n\r\n  return cart\r\n})\r\n\r\nexport const transformCartForApi = pureFunction(cart => {\r\n  const newCart = {\r\n    ...cart,\r\n    ...transformCartItemsForApi(cart.itemList),\r\n  }\r\n\r\n  // remove data that has been spread but we don't want\r\n  delete newCart.itemList\r\n  return newCart\r\n})\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nconst totalPriceFormatter = (orderProduct, props) => {\r\n  // Note: we use || 0 just in the following cases:\r\n  // - menu has broken null info\r\n  // - unit tests does not give the data since it is not required for the test, but required here\r\n  //   to format\r\n\r\n  orderProduct.totalPriceFormatted = formatPriceWithCurrency(orderProduct.totalPrice || 0)\r\n\r\n  orderProduct.totalPriceWithQuantity =\r\n    // re-use current totalPriceWithQuantity: the order preview can change the totalPrice (for\r\n    // example for promotion), we need to use the order preview data.\r\n    orderProduct.totalPriceWithQuantity ||\r\n    // in some unit tests contexts, the totalPriceWithQuantity has not been calculated yet\r\n    (orderProduct.totalPrice || 0) * (orderProduct.quantity || 0)\r\n\r\n  orderProduct.totalPriceWithQuantityFormatted = formatPriceWithCurrency(\r\n    orderProduct.totalPriceWithQuantity || 0\r\n  )\r\n  orderProduct.additionalPriceFormatted = formatPriceWithCurrency(orderProduct.additionalPrice || 0)\r\n\r\n  orderProduct.unitPriceFormatted = formatPriceWithCurrency(orderProduct.unitPrice || 0)\r\n\r\n  orderProduct.basePriceFormatted = formatPriceWithCurrency(orderProduct.basePrice || 0)\r\n\r\n  orderProduct.priceFormatted = formatPriceWithCurrency(orderProduct.price)\r\n\r\n  let selectedOptions = []\r\n  orderProduct.options.forEach(option => {\r\n    let selectedOption = {}\r\n    let optionValues = []\r\n    option.values.forEach(value => {\r\n      if (value.quantity > 0) {\r\n        optionValues.push(value)\r\n      }\r\n    })\r\n\r\n    if (!isEmpty(optionValues)) {\r\n      selectedOption.values = optionValues\r\n      selectedOptions.push(selectedOption)\r\n    }\r\n  })\r\n\r\n  orderProduct.optionsSelected = selectedOptions\r\n\r\n  return orderProduct\r\n}\r\n\r\nexport const orderProductFormatter = createFormatter(totalPriceFormatter)\r\n\r\nexport const orderProductsFormatter = createListFormatter(orderProductFormatter)\r\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = basePropertyOf;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","var deburrLetter = require('./_deburrLetter'),\n    toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n    rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n  rsUpper + '+' + rsOptContrUpper,\n  rsOrdUpper,\n  rsOrdLower,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","var asciiWords = require('./_asciiWords'),\n    hasUnicodeWord = require('./_hasUnicodeWord'),\n    toString = require('./toString'),\n    unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nmodule.exports = words;\n","var arrayReduce = require('./_arrayReduce'),\n    deburr = require('./deburr'),\n    words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\nmodule.exports = createCompounder;\n","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\nvar kebabCase = createCompounder(function(result, word, index) {\n  return result + (index ? '-' : '') + word.toLowerCase();\n});\n\nmodule.exports = kebabCase;\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n  var result = [];\n  baseEach(collection, function(value, index, collection) {\n    if (predicate(value, index, collection)) {\n      result.push(value);\n    }\n  });\n  return result;\n}\n\nmodule.exports = baseFilter;\n","var arrayFilter = require('./_arrayFilter'),\n    baseFilter = require('./_baseFilter'),\n    baseIteratee = require('./_baseIteratee'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': true },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n  var func = isArray(collection) ? arrayFilter : baseFilter;\n  return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","import isEqualWith from 'lodash/isEqualWith'\r\nimport filter from 'lodash/filter'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isNil from 'lodash/isNil'\r\nimport sortBy from 'lodash/sortBy'\r\nimport { CatalogItemType } from 'pmt-modules/catalog/constants'\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\n// get values and returns the values chosen (quantity > 0) sorted by id\r\nconst getChosenOptionValues = values =>\r\n  sortBy(filter(values, value => value.quantity !== 0), [value => value.id])\r\n\r\nexport const areProductOptionValuesEqual = (optionToCheck, optionToCompare) => {\r\n  // this function is used for cart (formatted order product)\r\n  // and for reconciliation (not formatted product coming from API)\r\n  // so we base the comparison on length and not on formatted added props \"nbChosenValues\"\r\n  if (optionToCheck.values.length !== optionToCompare.values.length) {\r\n    return false\r\n  }\r\n\r\n  const toCheckValues = getChosenOptionValues(optionToCheck.values)\r\n  const toCompareValues = getChosenOptionValues(optionToCompare.values)\r\n\r\n  if (toCompareValues.length !== toCheckValues.length) {\r\n    return false\r\n  }\r\n\r\n  const isEqual = isEqualWith(\r\n    toCheckValues,\r\n    toCompareValues,\r\n    (optionValuesToCheck, optionValuesToCompare) => {\r\n      //\r\n      // verify each option value\r\n      //\r\n      let i = 0\r\n      let length = optionValuesToCheck.length\r\n      while (i < length) {\r\n        const optionValueToCheck = optionValuesToCheck[i]\r\n        const optionValueToCompare = optionValuesToCompare[i]\r\n        const valueIsEqual =\r\n          optionValueToCheck.id === optionValueToCompare.id &&\r\n          optionValueToCheck.quantity === optionValueToCompare.quantity\r\n\r\n        if (!valueIsEqual) {\r\n          return false\r\n        }\r\n        ++i\r\n      }\r\n      return true\r\n    }\r\n  )\r\n\r\n  return isEqual\r\n}\r\n\r\n// check if products have same options selected\r\nexport const areProductOptionsEqual = (productToCheck, productToCompare) => {\r\n  if (productToCheck.options.length !== productToCompare.options.length) {\r\n    return false\r\n  }\r\n\r\n  let haveSameOptions = true\r\n  productToCheck.options.forEach(optionToCheck => {\r\n    if (haveSameOptions) {\r\n      const optionFound = findOnArray(productToCompare.options, optionToCompare => {\r\n        return (\r\n          optionToCheck.id === optionToCompare.id &&\r\n          optionToCheck.nbChosenValues === optionToCompare.nbChosenValues\r\n        )\r\n      })\r\n\r\n      if (isNil(optionFound)) {\r\n        haveSameOptions = false\r\n        return false // quit loop\r\n      } else {\r\n        haveSameOptions = areProductOptionValuesEqual(optionToCheck, optionFound)\r\n\r\n        if (!haveSameOptions) {\r\n          return false // quit loop\r\n        }\r\n      }\r\n    }\r\n  })\r\n\r\n  return haveSameOptions\r\n}\r\n\r\nexport const areProductModifiersEqual = (productToCheck, productToCompare) => {\r\n  return isEqual(sortBy(productToCheck.modifierIds), sortBy(productToCompare.modifierIds))\r\n}\r\n\r\n/**\r\n * check if a product (not from the cart) exists in cart\r\n *\r\n * /!\\ The data could not be the same from where the call is made (cart or order preview)\r\n * For example, from the cart, we do not have the selectedProducts\r\n */\r\nconst areSameProduct = (productToCheck, productToCompare) => {\r\n  if (productToCheck.type !== CatalogItemType.PRODUCT) {\r\n    return false\r\n  }\r\n\r\n  const checkOptions = productToCheck.options.length > 0 || productToCompare.options.length > 0\r\n  return (\r\n    productToCheck.id === productToCompare.id &&\r\n    productToCheck.comment === productToCompare.comment &&\r\n    productToCheck.price === productToCompare.price &&\r\n    productToCheck.reclaimLater === productToCompare.reclaimLater &&\r\n    areProductModifiersEqual(productToCheck, productToCompare) &&\r\n    (!checkOptions || areProductOptionsEqual(productToCheck, productToCompare))\r\n  )\r\n}\r\n\r\nexport default areSameProduct\r\n","/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n  return (array && array.length) ? array[0] : undefined;\n}\n\nmodule.exports = head;\n","import head from 'lodash/head'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\n\r\nexport const getFirstSelectableCategory = catalog => {\r\n  return head(catalog.categories)\r\n}\r\n\r\nconst recursiveGetParentCategory = (categories, parentsCategories) => {\r\n  let parentsCategoriesClone = cloneDeep(parentsCategories)\r\n  const parentCategory = parentsCategoriesClone.shift()\r\n\r\n  let parentCategoryFound = categories.filter(category => category.id === parentCategory.id)\r\n\r\n  if (\r\n    !isUndefined(parentCategoryFound) &&\r\n    !isEmpty(parentCategoryFound) &&\r\n    !isEmpty(parentsCategoriesClone)\r\n  ) {\r\n    parentCategoryFound = parentCategoryFound.pop()\r\n    parentCategoryFound = recursiveGetParentCategory(\r\n      parentCategoryFound.categories,\r\n      parentsCategoriesClone\r\n    )\r\n    if (!isUndefined(parentCategoryFound)) {\r\n      return parentCategoryFound\r\n    }\r\n  }\r\n\r\n  return parentsCategories[0]\r\n}\r\n\r\nconst recursiveGetCategoryWithId = (categoryId, category, foundCategory = null) => {\r\n  if (!isNil(category.categories) && !isEmpty(category.categories) && isNil(foundCategory)) {\r\n    category.categories.forEach(subCategory => {\r\n      if (subCategory.id === categoryId) {\r\n        foundCategory = subCategory\r\n      }\r\n    })\r\n  }\r\n\r\n  if (!isNil(category.categories) && !isEmpty(category.categories) && isNil(foundCategory)) {\r\n    category.categories.forEach(subCategory => {\r\n      if (!isNil(subCategory.categories) && !isEmpty(subCategory.categories)) {\r\n        foundCategory = recursiveGetCategoryWithId(categoryId, subCategory, foundCategory)\r\n      }\r\n    })\r\n  }\r\n\r\n  return foundCategory\r\n}\r\n\r\n// return either the selected category directly from catalog\r\n// or the selected category going to in each of its parents categories\r\nexport const getCategoryFromCatalog = (catalog, categoryId, parentCategories) => {\r\n  if (!isEmpty(parentCategories)) {\r\n    const parentCategoryOfCategorySelected = recursiveGetParentCategory(\r\n      catalog.categories,\r\n      parentCategories\r\n    )\r\n\r\n    if (parentCategoryOfCategorySelected.id === categoryId) {\r\n      return parentCategoryOfCategorySelected\r\n    } else if (parentCategoryOfCategorySelected.categories) {\r\n      let category = parentCategoryOfCategorySelected.categories\r\n        .filter(category => category.id === categoryId)\r\n        .pop()\r\n\r\n      if (category) {\r\n        // we don't return the category directly because it comes from parentCategories\r\n        // which can out of date (regarding the availabilities, for example)\r\n        // so we just use its id to get the category from the catalog (which is up to date with the availabilities)\r\n        return recursiveGetCategoryWithId(category.id, catalog)\r\n      }\r\n    }\r\n\r\n    return null\r\n  }\r\n\r\n  return recursiveGetCategoryWithId(categoryId, catalog)\r\n}\r\n\r\nexport const isCategoryEmpty = category => {\r\n  if (isEmpty(category.items) || isUndefined(category.items)) {\r\n    return true\r\n  }\r\n\r\n  return false\r\n}\r\n","import each from 'lodash/each'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nexport const recursiveFindItemFromCategory = (category, id, type) => {\r\n  let arrayItem = []\r\n\r\n  if (!category) {\r\n    return arrayItem\r\n  }\r\n\r\n  if (category.items) {\r\n    arrayItem = category.items.filter(item => item.id === id && item.type === type)\r\n  }\r\n\r\n  if (isEmpty(arrayItem)) {\r\n    if (category.categories) {\r\n      let foundFromSubcategories = null\r\n      each(category.categories, category => {\r\n        foundFromSubcategories = recursiveFindItemFromCategory(category, id, type)\r\n        if (!isNil(foundFromSubcategories)) {\r\n          return false\r\n        }\r\n      })\r\n\r\n      if (!isNil(foundFromSubcategories)) {\r\n        return foundFromSubcategories\r\n      }\r\n    } else {\r\n      return null\r\n    }\r\n  } else {\r\n    return arrayItem.pop()\r\n  }\r\n}\r\n\r\nexport const findItemFromSuggestion = (suggestion, id, type) => {\r\n  const arrayItem = suggestion.suggestedItems.filter(suggestedItem => suggestedItem.id === id && suggestedItem.type === type)\r\n\r\n  return isEmpty(arrayItem) ? null : arrayItem.pop()\r\n}\r\n","import each from 'lodash/each'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { recursiveFindItemFromCategory, findItemFromSuggestion } from './item'\r\nimport { CatalogItemType } from 'pmt-modules/catalog/constants'\r\n\r\nexport const getProductFromCatalog = (catalog, upsellingData, productId) => {\r\n  const productFromCategory = recursiveFindItemFromCategory(\r\n    catalog,\r\n    productId,\r\n    CatalogItemType.PRODUCT\r\n  )\r\n\r\n  if (isNil(productFromCategory)) {\r\n    let productFromSuggestion = null\r\n    each(catalog.suggestions, suggestion => {\r\n      productFromSuggestion = findItemFromSuggestion(suggestion, productId, CatalogItemType.PRODUCT)\r\n      if (!isNil(productFromSuggestion)) {\r\n        return false\r\n      }\r\n    })\r\n\r\n    if (isNil(productFromSuggestion)) {\r\n      if (!upsellingData.upsellingCategory) {\r\n        return null\r\n      }\r\n\r\n      const productFromUpselling = recursiveFindItemFromCategory(\r\n        upsellingData.upsellingCategory,\r\n        productId,\r\n        CatalogItemType.PRODUCT\r\n      )\r\n\r\n      if (!isNil(productFromUpselling)) {\r\n        return productFromUpselling\r\n      }\r\n\r\n      return null\r\n    } else {\r\n      return productFromSuggestion\r\n    }\r\n  } else {\r\n    return productFromCategory\r\n  }\r\n}\r\n","import each from 'lodash/each'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { recursiveFindItemFromCategory, findItemFromSuggestion } from './item'\r\nimport { CatalogItemType } from 'pmt-modules/catalog/constants'\r\n\r\nexport const getMenuFromCatalog = (catalog, upsellingData, menuId) => {\r\n  const menuFromCategory = recursiveFindItemFromCategory(catalog, menuId, CatalogItemType.MENU)\r\n\r\n  if (isNil(menuFromCategory)) {\r\n    let menuFromSuggestion = null\r\n    each(catalog.suggestions, suggestion => {\r\n      menuFromSuggestion = findItemFromSuggestion(suggestion, menuId, CatalogItemType.MENU)\r\n      if (!isNil(menuFromSuggestion)) {\r\n        return false\r\n      }\r\n    })\r\n\r\n    if (isNil(menuFromSuggestion)) {\r\n      if (!upsellingData.upsellingCategory) {\r\n        return null\r\n      }\r\n\r\n      const menuFromUpselling = recursiveFindItemFromCategory(\r\n        upsellingData.upsellingCategory,\r\n        menuId,\r\n        CatalogItemType.MENU\r\n      )\r\n\r\n      if (!isNil(menuFromUpselling)) {\r\n        return menuFromUpselling\r\n      }\r\n\r\n      return null\r\n    } else {\r\n      return menuFromSuggestion\r\n    }\r\n  } else {\r\n    return menuFromCategory\r\n  }\r\n}\r\n","import isNil from 'lodash/isNil'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nexport const removeItemsFromUpsellings = (upsellingCategory, itemsToRemove) => {\r\n  upsellingCategory.items = upsellingCategory.items.filter(item =>\r\n    isNil(findOnArray(itemsToRemove, itemToRemove => itemToRemove.id === item.id))\r\n  )\r\n\r\n  return upsellingCategory\r\n}\r\n","export const getCardModifierIdsFromCartModifierList = cartModifierList => {\r\n  let cartModifierIds = []\r\n  cartModifierList.forEach(cartModifier => {\r\n    cartModifierIds.push(cartModifier.id)\r\n  })\r\n\r\n  return cartModifierIds\r\n}\r\n","import { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { truncatePrice } from 'pmt-utils/currency'\r\n\r\nconst getOptionsTotalAdditionalPrice = options => {\r\n  let price = 0\r\n\r\n  options.forEach(option => {\r\n    option.values.forEach(option => {\r\n      price += option.additionalPrice * option.quantity\r\n    })\r\n  })\r\n\r\n  return price\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst formatValuesQuantity = option => {\r\n  option.nbChosenValues = option.values.reduce((nb, value) => nb + value.quantity, 0)\r\n  option.hasReachedMaxQuantity = option.nbChosenValues === option.quantityMax\r\n  option.hasReachedMinQuantity = option.nbChosenValues >= option.quantityMin\r\n\r\n  // an option is valid if\r\n  // - she is not mandatory\r\n  // - she is mandatory and hasReachedMinQuantity\r\n  option.isValid = false\r\n  if (!option.mandatory) {\r\n    option.isValid = true\r\n  } else {\r\n    // option isMandatory\r\n    if (option.hasReachedMinQuantity) {\r\n      option.isValid = true\r\n    }\r\n  }\r\n\r\n  return option\r\n}\r\n\r\n/**\r\n * Set orderProduct.isValid to true if all the options are valid.\r\n */\r\nconst isValidModifier = orderProduct => {\r\n  orderProduct.options = orderProduct.options || []\r\n\r\n  // a product isValid if all its options are valid\r\n  let isValid = true\r\n  let hasMandatoryOptions = false\r\n  orderProduct.options.forEach(option => {\r\n    if (option.mandatory) {\r\n      hasMandatoryOptions = true\r\n    }\r\n\r\n    if (!option.isValid) {\r\n      isValid = false\r\n      // quit forEach\r\n      return false\r\n    }\r\n  })\r\n  orderProduct.isValid = isValid\r\n  orderProduct.hasMandatoryOptions = hasMandatoryOptions\r\n\r\n  return orderProduct\r\n}\r\n\r\n/**\r\n * The modifier for an order product modified by the API.\r\n */\r\nconst totalPriceModifierForModifiedObject = orderProduct => {\r\n  orderProduct.totalPrice = truncatePrice(orderProduct.price)\r\n\r\n  // add options additional prices, the API does not set the real price on 'price'.\r\n  // it set the price without taking account of the additional prices.\r\n  let optionsTotalAdditionalPrice = getOptionsTotalAdditionalPrice(orderProduct.options)\r\n  // Note: Options additional prices should have the same modifier as the product.\r\n  // a 50% discount should apply to the additional price too.\r\n  // TODO: how can we handle that on the front ?\r\n  orderProduct.totalPrice += optionsTotalAdditionalPrice\r\n\r\n  orderProduct.totalPriceWithQuantity = orderProduct.totalPrice * (orderProduct.quantity || 0)\r\n\r\n  return orderProduct\r\n}\r\n\r\nconst totalPriceModifier = (orderProduct, props) => {\r\n  if (props.isOrderPreviewMode === true) {\r\n    // note: unit price is the price of the product on the catalog\r\n    // the price can be set differently on the order preview since it contains\r\n    // the real price of the product (with discounts, etc)\r\n    // we know there is a discount when the basePrice is not equals to the price\r\n\r\n    // unitPrice = normal price of the product, without any modifiers (front value)\r\n    // basePrice = normal price of the product, without any modifiers (api value)\r\n    // price = price of the product, once the modifiers are applied\r\n\r\n    return totalPriceModifierForModifiedObject(orderProduct)\r\n  }\r\n\r\n  // not in order preview mode\r\n\r\n  // the order product has been modified by the API, we don't calculate the totalPrice\r\n  // but take the totalPrice set on reconciliation\r\n  // TODO: what to do if we edit the product and modify additionalPrice ?\r\n  if (orderProduct.hasBeenModifiedByApi === true) {\r\n    return totalPriceModifierForModifiedObject(orderProduct)\r\n  }\r\n\r\n  if (props.isMenuMode === true) {\r\n    orderProduct.totalPrice = 0\r\n    orderProduct.totalPrice += orderProduct.additionalPrice || 0\r\n  } else {\r\n    orderProduct.totalPrice = truncatePrice(orderProduct.unitPrice)\r\n  }\r\n\r\n  // add options additional prices\r\n  let optionsTotalAdditionalPrice = getOptionsTotalAdditionalPrice(orderProduct.options)\r\n  orderProduct.totalPrice += optionsTotalAdditionalPrice\r\n\r\n  orderProduct.totalPriceWithQuantity = orderProduct.totalPrice * (orderProduct.quantity || 0)\r\n\r\n  return orderProduct\r\n}\r\n\r\nexport const optionModifier = createFormatter(formatValuesQuantity)\r\n\r\nconst optionsModifier = createListFormatter(optionModifier)\r\n\r\n//\r\n// Props:\r\n//    - isMenuMode: product is for a menu\r\n//\r\nexport const orderProductModifier = createFormatter(\r\n  createSubObjectFormatter('options', optionsModifier),\r\n  isValidModifier,\r\n  totalPriceModifier\r\n)\r\n\r\nexport const orderProductsModifier = createListFormatter(orderProductModifier)\r\n","import invariant from 'invariant'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport isNil from 'lodash/isNil'\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\n\r\nimport { CatalogItemType } from 'pmt-modules/catalog/constants'\r\nimport { getCardModifierIdsFromCartModifierList } from 'pmt-modules/catalog/utils'\r\nimport { orderProductModifier } from '../modifiers'\r\n\r\n// set initial properties to product that will be used for all treatments\r\n// = create an orderProduct\r\n// props:\r\n// - isFromMenu {boolean} true if we create the order product for a menu\r\n// - partId {string} Part id\r\nconst createOrderProductFromProduct = (product, props = {}) => {\r\n  const { options } = product\r\n\r\n  // spread to keep item formatted data\r\n  const orderProduct = cloneDeep(product)\r\n\r\n  orderProduct.isOrderProduct = true\r\n\r\n  orderProduct.orderId = generateUUID()\r\n  orderProduct.type = CatalogItemType.PRODUCT\r\n\r\n  orderProduct.grantable = false\r\n  orderProduct.modifierIds = []\r\n\r\n  if (orderProduct.hasCartModifier && !props.isMenuMode) {\r\n    orderProduct.modifierIds = getCardModifierIdsFromCartModifierList(\r\n      orderProduct.cartModifiers.list\r\n    )\r\n  }\r\n\r\n  orderProduct.sequence = product.defaultSequence\r\n\r\n  // ignore, handled by POS only\r\n  orderProduct.tax = null\r\n\r\n  // POS only\r\n  orderProduct.categoryId = null\r\n  orderProduct.categoryName = null\r\n\r\n  orderProduct.options = (options || []).map(option => {\r\n    option.orderId = generateUUID()\r\n\r\n    option.values = (option.values || []).map(value => {\r\n      value.orderId = generateUUID()\r\n      // set a quantity to 0, that means the value has not been selected\r\n      value.quantity = 0\r\n      value.baseAdditionalPrice = value.additionalPrice\r\n      return value\r\n    })\r\n\r\n    return option\r\n  })\r\n\r\n  if (props.isMenuMode !== true) {\r\n    const price = product.price\r\n\r\n    orderProduct.basePrice = product.hasCartModifier ? product.basePrice : price\r\n    orderProduct.price = price\r\n    orderProduct.unitPrice = price\r\n    orderProduct.additionalPrice = 0\r\n    orderProduct.baseAdditionalPrice = 0\r\n    orderProduct.totalPriceWithQuantity = orderProduct.unitPrice\r\n\r\n    orderProduct.quantity = 1\r\n  } else {\r\n    // when in a menu\r\n    const additionalPrice = product.additionalPrice || 0\r\n\r\n    orderProduct.basePrice = additionalPrice\r\n    orderProduct.price = additionalPrice\r\n    orderProduct.unitPrice = additionalPrice\r\n    orderProduct.baseAdditionalPrice = product.additionalPrice\r\n    orderProduct.additionalPrice = additionalPrice\r\n    orderProduct.totalPriceWithQuantity = additionalPrice\r\n\r\n    orderProduct.quantity = 0\r\n\r\n    invariant(!isNil(props.partId), 'product from menu needs a partId prop.')\r\n    orderProduct.fromPart = props.partId\r\n    invariant(!isNil(props.partCategoryId), 'product from menu needs a partCategoryId prop.')\r\n    orderProduct.fromCategory = props.partCategoryId\r\n  }\r\n\r\n  // call orderProductModifier to set all the data from the default data created above\r\n  return orderProductModifier(orderProduct)\r\n}\r\n\r\n/*\r\n * formatted product datas model in cart\r\n  {\r\n    orderId: generateUUID(),\r\n    id: product.id,\r\n    name: product.name,\r\n    isValid: true,\r\n    options: [\r\n      {\r\n        id: \"option.id\",\r\n        name: \"option.name\",\r\n        nbChosenValues: 1,\r\n        hasReachedMaxQuantity: true,\r\n        hasReachedMinQuantity: true,\r\n        values: [\r\n          {\r\n            quantity: 1,\r\n            id: \"optionChild.id\",\r\n            name: \"optionChild.name\",\r\n            additionalPrice: optionChild.additionalPrice,\r\n          },\r\n          etc...\r\n        ],\r\n      },\r\n      etc...\r\n    ],\r\n    availabilityHours: product.availabilityHours,\r\n    price: unitPrice,\r\n    totalPrice: unitPrice * quantity,\r\n    quantity: quantity,\r\n    comment: product.comment,\r\n    type: product.type,\r\n    hasOptions: true,\r\n  }\r\n*/\r\n\r\nexport default createOrderProductFromProduct\r\n","import { findOnArray } from 'pmt-utils/array'\r\nimport areSameProduct from './areSameProduct'\r\n\r\nexport { default as createOrderProductFromProduct } from './createOrderProductFromProduct'\r\n\r\nexport { default as areSameProduct } from './areSameProduct'\r\n\r\n// return a product set in cart\r\nexport const getProductFromCart = (itemCartList, product) =>\r\n  findOnArray(itemCartList, itemFromList => areSameProduct(itemFromList, product))\r\n\r\nexport const getProductFromCartWithOrderId = (itemCartList, orderId) =>\r\n  findOnArray(itemCartList, itemFromList => itemFromList.orderId === orderId)\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nexport const getParentCategoriesLeft = (category, parentCategories) => {\r\n  let parentCategoriesLeft = []\r\n  let found = false\r\n\r\n  parentCategories.forEach(parentCategory => {\r\n    if (!found && parentCategory.id !== category.id) {\r\n      parentCategoriesLeft.push(parentCategory)\r\n    } else {\r\n      found = true\r\n    }\r\n  })\r\n\r\n  return parentCategoriesLeft\r\n}\r\n\r\n// get the number of products chosen in part and all subcategories under\r\nconst recursivePartNbChosenValues = (part, nbChosenValues) => {\r\n  if (!isNil(part.categories) && !isEmpty(part.categories)) {\r\n    part.categories.forEach(category => {\r\n      nbChosenValues = recursivePartNbChosenValues(category, nbChosenValues)\r\n    })\r\n  }\r\n\r\n  if (!isNil(part.products)) {\r\n    nbChosenValues += part.products.reduce((nb, product) => {\r\n      return nb + product.quantity\r\n    }, 0)\r\n  }\r\n\r\n  return nbChosenValues\r\n}\r\n\r\nexport const getNbChosenValuesValuesFromPart = part => {\r\n  let nbChosenValues = 0\r\n  nbChosenValues = recursivePartNbChosenValues(part, nbChosenValues)\r\n\r\n  return nbChosenValues\r\n}\r\n\r\n// find a product in a part, recursively looping in the part subcategories\r\nconst recursiveFindPartProduct = (part, partProduct, partProductFound) => {\r\n  if (isNil(partProductFound) && !isNil(part.products)) {\r\n    partProductFound = findOnArray(part.products, product => product.id === partProduct.id)\r\n\r\n    if (isNil(partProductFound) && !isNil(part.categories) && !isEmpty(part.categories)) {\r\n      part.categories.forEach(partCategoryRoot => {\r\n        partProductFound = recursiveFindPartProduct(partCategoryRoot, partProduct, partProductFound)\r\n      })\r\n    }\r\n  }\r\n\r\n  return partProductFound\r\n}\r\n\r\nexport const getProductFromPart = (part, partProduct) => {\r\n  const partProductFound = recursiveFindPartProduct(part, partProduct, null)\r\n\r\n  return partProductFound\r\n}\r\n\r\n// find subcategories (partCategory) in a part, recursively looping in the part subcategories\r\nconst recursiveFindPartCategory = (part, partCategory, partCategoryFound) => {\r\n  if (isNil(partCategoryFound)) {\r\n    if (!isNil(part.categories) && !isEmpty(part.categories)) {\r\n      part.categories.forEach(partCategoryRoot => {\r\n        partCategoryFound = recursiveFindPartCategory(\r\n          partCategoryRoot,\r\n          partCategory,\r\n          partCategoryFound\r\n        )\r\n      })\r\n    }\r\n\r\n    if (part.id === partCategory.id) {\r\n      partCategoryFound = part\r\n    }\r\n  }\r\n\r\n  return partCategoryFound\r\n}\r\n\r\nexport const getCategoryFromPart = (part, partCategory) => {\r\n  const partCategoryFound = recursiveFindPartCategory(part, partCategory, null)\r\n\r\n  return partCategoryFound\r\n}\r\n\r\n// get every products selected in a category, looping in every sub-category recursively\r\nconst recursivePartCategorySelectedProducts = (partCategory, selectedProducts) => {\r\n  if (!isEmpty(partCategory.categories)) {\r\n    partCategory.categories.forEach(category => {\r\n      selectedProducts = recursivePartSelectedProducts(category, selectedProducts)\r\n    })\r\n  }\r\n\r\n  if (!isNil(partCategory.products)) {\r\n    selectedProducts = selectedProducts.concat(\r\n      partCategory.products.filter(product => {\r\n        // adding only the id of the part category that the product belongs to (else, reference problem)\r\n        // for PartView needs (unselect products from small post-its)\r\n        // TODO: why we add partCategory here and not on format ?\r\n        product.partCategory = { id: partCategory.id }\r\n        return product.quantity > 0\r\n      })\r\n    )\r\n  }\r\n\r\n  return selectedProducts\r\n}\r\n\r\n// get every products selected in a part, looping in every part recursively\r\nconst recursivePartSelectedProducts = (part, selectedProducts) => {\r\n  // searching on categories if the part has categories\r\n  if (!isEmpty(part.categories)) {\r\n    part.categories.forEach(category => {\r\n      selectedProducts = recursivePartCategorySelectedProducts(category, selectedProducts)\r\n    })\r\n  }\r\n\r\n  // use the part.products data\r\n  if (!isNil(part.products)) {\r\n    selectedProducts = selectedProducts.concat(\r\n      part.products.filter(product => {\r\n        // adding only the id of the part category that the product belongs to (else, reference problem)\r\n        // for PartView needs (unselect products from small post-its)\r\n        // there is no partCategory here, only a part\r\n        // TODO: why we add partCategory here and not on format ?\r\n        // TRICK: we set the partCategory the id of the part. Otherwise the front crash because this\r\n        //  value is needed.\r\n        // When from cart, there is no part.categories given, only part.products\r\n        // we use this to unselect a product from a part / part category.\r\n        product.partCategory = { id: part.id }\r\n        return product.quantity > 0\r\n      })\r\n    )\r\n  }\r\n\r\n  return selectedProducts\r\n}\r\n\r\nexport const getPartSelectedProducts = part => {\r\n  return recursivePartSelectedProducts(part, [])\r\n}\r\n","import isEqual from 'lodash/isEqual'\r\nimport isEqualWith from 'lodash/isEqualWith'\r\nimport each from 'lodash/each'\r\nimport sortBy from 'lodash/sortBy'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport { CatalogItemType } from 'pmt-modules/catalog/constants'\r\nimport { areSameProduct } from 'pmt-modules/orderProduct/utils'\r\nimport { getPartSelectedProducts } from 'pmt-modules/orderMenu/utils/category'\r\n\r\nexport const areMenuModifiersEqual = (menuToCheck, menuToCompare) => {\r\n  return isEqual(sortBy(menuToCheck.modifierIds), sortBy(menuToCompare.modifierIds))\r\n}\r\n\r\n// check if products contained in parts are equal\r\nexport const areMenuPartProductsEqual = (partToCheck, partToCompare) => {\r\n  if (partToCheck.nbChosenValues !== partToCompare.nbChosenValues) {\r\n    return false\r\n  }\r\n\r\n  const toCheckValues = getPartSelectedProducts(partToCheck)\r\n  const toCompareValues = getPartSelectedProducts(partToCompare)\r\n\r\n  if (toCompareValues.length !== toCheckValues.length) {\r\n    return false\r\n  }\r\n\r\n  const isEqual = isEqualWith(\r\n    toCheckValues,\r\n    toCompareValues,\r\n    (productsToCheck, productsToCompare) => {\r\n      //\r\n      // verify each option value\r\n      //\r\n      let i = 0\r\n      let length = productsToCheck.length\r\n      while (i < length) {\r\n        const productToCheck = productsToCheck[i]\r\n        const productToCompare = productsToCompare[i]\r\n        const productIsEqual = areSameProduct(productToCheck, productToCompare)\r\n\r\n        if (!productIsEqual) {\r\n          return false\r\n        }\r\n        ++i\r\n      }\r\n      return true\r\n    }\r\n  )\r\n\r\n  return isEqual\r\n}\r\n\r\n// check if menu parts are equal\r\nexport const areMenuPartsEqual = (menuToCheck, menuToCompare) => {\r\n  if (menuToCheck.parts.length !== menuToCompare.parts.length) {\r\n    return false\r\n  }\r\n\r\n  let haveSameParts = true\r\n  each(menuToCheck.parts, partToCheck => {\r\n    let partToCompare = findOnArray(\r\n      menuToCompare.parts,\r\n      partToCompare => partToCheck.id === partToCompare.id\r\n    )\r\n\r\n    if (!partToCompare) {\r\n      haveSameParts = false\r\n      return false\r\n    }\r\n\r\n    // in orderPreviewMode, we have the selectedProducts data\r\n    haveSameParts = areMenuPartProductsEqual(partToCheck, partToCompare)\r\n    if (!haveSameParts) {\r\n      haveSameParts = false\r\n      return false\r\n    }\r\n  })\r\n\r\n  return haveSameParts\r\n}\r\n\r\n/**\r\n * check if a menu (not from the cart) exists in cart\r\n *\r\n * /!\\ The data could not be the same from where the call is made (cart or order preview)\r\n * For example, from the cart, we do not have the selectedProducts\r\n */\r\nconst areSameMenu = (menuToCheck, menuToCompare) => {\r\n  if (menuToCheck.type !== CatalogItemType.MENU) {\r\n    return false\r\n  }\r\n\r\n  if (menuToCheck.id !== menuToCompare.id) {\r\n    return false\r\n  }\r\n\r\n  return (\r\n    areMenuPartsEqual(menuToCheck, menuToCompare) &&\r\n    areMenuModifiersEqual(menuToCheck, menuToCompare)\r\n  )\r\n}\r\n\r\nexport default areSameMenu\r\n","import { findOnArray } from 'pmt-utils/array'\r\n\r\nimport areSameMenu from './areSameMenu'\r\n\r\n// return a menu set in cart\r\nexport const getMenuFromCart = (itemCartList, menu) =>\r\n  findOnArray(itemCartList, itemFromList => areSameMenu(itemFromList, menu))\r\n\r\nexport const getMenuFromCartWithOrderId = (itemCartList, orderId) =>\r\n  findOnArray(itemCartList, itemFromList => itemFromList.orderId === orderId)\r\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\n// return isAutofillable for each menu part\r\nconst recursiveCheckPartIsAutofillable = (partCategory, hasFoundProduct) => {\r\n  let isAutofillable = true\r\n\r\n  if (!isEmpty(partCategory.categories)) {\r\n    partCategory.categories.forEach(partCategory => {\r\n      const result = recursiveCheckPartIsAutofillable(partCategory, hasFoundProduct)\r\n      isAutofillable = result.isAutofillable\r\n      hasFoundProduct = result.hasFoundProduct\r\n    })\r\n  }\r\n\r\n  if (isAutofillable) {\r\n    // if it is still fillable, we check that the product in the part has no options\r\n    if (isAutofillable && !isNil(partCategory.products)) {\r\n      if (hasFoundProduct) {\r\n        isAutofillable = false\r\n      } else {\r\n        hasFoundProduct = true\r\n        if (partCategory.products.length > 1) {\r\n          isAutofillable = false\r\n        } else {\r\n          partCategory.products.forEach(product => {\r\n            if (!isEmpty(product.options)) {\r\n              isAutofillable = false\r\n            }\r\n          })\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return {\r\n    isAutofillable,\r\n    hasFoundProduct,\r\n  }\r\n}\r\n\r\nconst isMenuAutofillable = menu => {\r\n  let isAutofillable = true\r\n\r\n  menu.parts.forEach(part => {\r\n    // we consider fillable a menu that has already a maximum product selected\r\n    // or a part that has a maximum of 1 and only one product inside\r\n    if (isAutofillable) {\r\n      if (\r\n        part.nbChosenValues !== part.max &&\r\n        (part.min !== 1 || part.max !== 1 || part.products.length > 1)\r\n      ) {\r\n        isAutofillable = false\r\n      } else if (part.nbChosenValues !== part.max) {\r\n        const result = recursiveCheckPartIsAutofillable(part, false)\r\n        isAutofillable = result.isAutofillable\r\n      }\r\n    }\r\n  })\r\n\r\n  return isAutofillable\r\n}\r\n\r\nexport default isMenuAutofillable\r\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\n// return filled part for each menu part\r\nconst recursiveGetFilledPart = partCategory => {\r\n  if (!isEmpty(partCategory.categories)) {\r\n    partCategory.categories = partCategory.categories.map(partCategory => {\r\n      return recursiveGetFilledPart(partCategory)\r\n    })\r\n  }\r\n\r\n  if (\r\n    !isNil(partCategory.products) &&\r\n    partCategory.nbChosenValues < partCategory.max &&\r\n    partCategory.min === 1\r\n      ? partCategory.max === 1\r\n      : false\r\n  ) {\r\n    partCategory.nbChosenValues = 1\r\n    partCategory.products = partCategory.products.map(product => {\r\n      product.quantity = 1\r\n      return product\r\n    })\r\n  }\r\n\r\n  return partCategory\r\n}\r\n\r\nconst getFilledMenu = menu => {\r\n  menu.parts = menu.parts.map(part => {\r\n    part = recursiveGetFilledPart(part)\r\n\r\n    return part\r\n  })\r\n\r\n  return menu\r\n}\r\n\r\nexport default getFilledMenu\r\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { orderProductsModifier } from 'pmt-modules/orderProduct/modifiers'\r\n\r\nimport { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { truncatePrice } from 'pmt-utils/currency'\r\n\r\nimport { getNbChosenValuesValuesFromPart } from '../utils/category'\r\n\r\n// get price from every subcategories in part\r\nconst recursiveGetPartsTotalPrice = (partCategory, partPrice) => {\r\n  if (!isEmpty(partCategory.categories)) {\r\n    partCategory.categories.forEach(partCategory => {\r\n      partPrice = recursiveGetPartsTotalPrice(partCategory, partPrice)\r\n    })\r\n  }\r\n\r\n  if (!isNil(partCategory.products)) {\r\n    partCategory.products.forEach(product => {\r\n      if (product.quantity > 0) {\r\n        partPrice += product.totalPriceWithQuantity\r\n      }\r\n    })\r\n  }\r\n\r\n  return partPrice\r\n}\r\n\r\nconst getPartsTotalPrice = parts => {\r\n  let price = 0\r\n\r\n  parts.forEach(part => {\r\n    let partPrice = 0\r\n    partPrice = recursiveGetPartsTotalPrice(part, partPrice)\r\n    part.totalPrice = partPrice\r\n    price += partPrice\r\n  })\r\n\r\n  return price\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst formatValuesQuantity = part => {\r\n  part.nbChosenValues = getNbChosenValuesValuesFromPart(part)\r\n  part.hasReachedMaxQuantity = part.nbChosenValues === part.max\r\n  part.hasReachedMinQuantity = part.nbChosenValues >= part.min\r\n\r\n  // a part is valid if\r\n  // - she is not mandatory\r\n  // - she is mandatory and hasReachedMinQuantity\r\n  part.isValid = false\r\n  if (!part.mandatory) {\r\n    part.isValid = true\r\n  } else {\r\n    // part is mandatory\r\n    if (part.hasReachedMinQuantity) {\r\n      part.isValid = true\r\n    }\r\n  }\r\n\r\n  return part\r\n}\r\n\r\n/**\r\n * Set orderMenu.isValid to true if all the parts are valid.\r\n */\r\nconst isValidModifier = orderMenu => {\r\n  // a product isValid if all its parts are valid\r\n  let isValid = true\r\n  if (!isUndefined(orderMenu.parts)) {\r\n    orderMenu.parts.forEach(part => {\r\n      if (!part.isValid) {\r\n        isValid = false\r\n        // quit forEach\r\n        return false\r\n      }\r\n    })\r\n  } else {\r\n    isValid = false\r\n  }\r\n  orderMenu.isValid = isValid\r\n\r\n  return orderMenu\r\n}\r\n\r\nconst totalPriceModifierForModifiedObject = orderMenu => {\r\n  orderMenu.totalPrice = truncatePrice(orderMenu.price)\r\n\r\n  // add parts additional prices, the API does not set the real price on 'price'.\r\n  // it set the price without taking account of the additional prices.\r\n  let partsTotalAdditionalPrice = getPartsTotalPrice(orderMenu.parts)\r\n\r\n  orderMenu.totalPrice += partsTotalAdditionalPrice\r\n\r\n  orderMenu.totalPriceWithQuantity = orderMenu.totalPrice * (orderMenu.quantity || 0)\r\n\r\n  return orderMenu\r\n}\r\n\r\nconst totalPriceModifier = (orderMenu, props) => {\r\n  if (props.isOrderPreviewMode === true) {\r\n    // note: unit price is the price of the product on the catalog\r\n    // the price can be set differently on the order preview since it contains\r\n    // the real price of the product (with discounts, etc)\r\n    // we know there is a discount when the basePrice is not equals to the price\r\n\r\n    // unitPrice = normal price of the product, without any modifiers (front value)\r\n    // basePrice = normal price of the product, without any modifiers (api value)\r\n    // price = price of the product, once the modifiers are applied\r\n\r\n    return totalPriceModifierForModifiedObject(orderMenu)\r\n  }\r\n\r\n  // not in order preview mode\r\n\r\n  // the order product has been modified by the API, we don't calculate the totalPrice\r\n  // but take the totalPrice set on reconciliation\r\n  // TODO: what to do if we edit the product and modify additionalPrice ?\r\n  if (orderMenu.hasBeenModifiedByApi === true) {\r\n    return totalPriceModifierForModifiedObject(orderMenu)\r\n  }\r\n\r\n  orderMenu.totalPrice = truncatePrice(orderMenu.price)\r\n\r\n  let partsTotalPrice = getPartsTotalPrice(orderMenu.parts)\r\n  orderMenu.totalPrice += partsTotalPrice\r\n\r\n  orderMenu.totalPriceWithQuantity = orderMenu.totalPrice * (orderMenu.quantity || 0)\r\n\r\n  return orderMenu\r\n}\r\n\r\n// apply modifiers to every products in every subcategories in part\r\nconst recursiveOrderProductsModifier = (partCategory, props) => {\r\n  if (!isNil(partCategory.categories) && !isEmpty(partCategory.categories)) {\r\n    partCategory.categories = partCategory.categories.map(category => {\r\n      return recursiveOrderProductsModifier(category, props)\r\n    })\r\n  }\r\n\r\n  if (!isNil(partCategory.products)) {\r\n    partCategory.products = orderProductsModifier(partCategory.products, props)\r\n  }\r\n\r\n  return partCategory\r\n}\r\n\r\nexport const partModifier = createFormatter(recursiveOrderProductsModifier, formatValuesQuantity)\r\n\r\nconst partsModifier = createListFormatter(partModifier)\r\n\r\n//\r\n// Props: None\r\n//\r\nexport const orderMenuModifier = createFormatter(\r\n  createSubObjectFormatter('parts', partsModifier),\r\n  isValidModifier,\r\n  totalPriceModifier\r\n)\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\nimport { findOnArray } from 'pmt-utils/array'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\n\r\nimport { getCardModifierIdsFromCartModifierList } from 'pmt-modules/catalog/utils'\r\nimport { createOrderProductFromProduct } from 'pmt-modules/orderProduct/utils'\r\n\r\nimport { orderMenuModifier } from '../modifiers'\r\n\r\n// create every order product in a menu part, recursively\r\nconst recursiveCreateOrderProductFromProductInPart = (part, partCategory) => {\r\n  if (!isEmpty(partCategory.categories)) {\r\n    partCategory.categories = partCategory.categories.map(partCategory => {\r\n      return recursiveCreateOrderProductFromProductInPart(part, partCategory)\r\n    })\r\n  }\r\n\r\n  if (!isNil(partCategory.products)) {\r\n    partCategory.products = partCategory.products\r\n      // do not add useless products\r\n      .map(product =>\r\n        createOrderProductFromProduct(product, {\r\n          isMenuMode: true,\r\n          partId: part.id,\r\n          partCategoryId: partCategory.id,\r\n        })\r\n      )\r\n  }\r\n\r\n  partCategory.rootCategory = findOnArray(partCategory.categories, 'root')\r\n  return partCategory\r\n}\r\n\r\nconst createOrderMenuFromMenu = menu => {\r\n  const { parts } = menu\r\n\r\n  // spread to keep item formatted data\r\n  const orderMenu = cloneDeep(menu)\r\n\r\n  orderMenu.isOrderMenu = true\r\n\r\n  orderMenu.orderId = generateUUID()\r\n\r\n  orderMenu.grantable = false\r\n  orderMenu.conditionForModifierIds = []\r\n  orderMenu.modifierIds = []\r\n\r\n  if (orderMenu.hasCartModifier) {\r\n    orderMenu.modifierIds = getCardModifierIdsFromCartModifierList(orderMenu.cartModifiers.list)\r\n  }\r\n\r\n  // POS only\r\n  orderMenu.categoryId = null\r\n  orderMenu.categoryName = null\r\n\r\n  // orderMenu.sequence = 0\r\n\r\n  orderMenu.parts = (parts || []).map(part => {\r\n    part = recursiveCreateOrderProductFromProductInPart(part, part)\r\n    return part\r\n  })\r\n\r\n  const price = menu.price\r\n\r\n  orderMenu.basePrice = menu.hasCartModifier ? menu.basePrice : price\r\n  orderMenu.price = price\r\n  orderMenu.unitPrice = price\r\n  orderMenu.totalPriceWithQuantity = orderMenu.unitPrice\r\n  orderMenu.quantity = 1\r\n\r\n  // Define the part currently displayed for the user\r\n  // orderMenu.currentPart = orderMenu.parts[0]\r\n\r\n  return orderMenuModifier(orderMenu, {\r\n    // for products\r\n    isMenuMode: true,\r\n  })\r\n}\r\n\r\n/*\r\n * formatted menu datas model to submit to cart\r\n  {\r\n    orderId: generateUUID(),\r\n    id: \"menu-id\",\r\n    name: \"menu.name\",\r\n    isValid: true,\r\n    parts: [\r\n      {\r\n        id: \"part.id\",\r\n        name: \"part.name\",\r\n        mandatory: true or false,\r\n        additionalPrice: part.additionalPrice,\r\n        min: part.min,\r\n        max: part.max,\r\n        nbChosenValues: 1,\r\n        hasReachedMaxQuantity: true,\r\n        hasReachedMinQuantity: true,\r\n        isValid: true,\r\n        products: [\r\n          // see ./product.js\r\n        ]\r\n      },\r\n      etc...\r\n    ]\r\n    availabilityHours: product.availabilityHours,\r\n    unitPrice: unitPrice,\r\n    quantity: quantity,\r\n    type: menu.type,\r\n  }\r\n*/\r\n\r\nexport default createOrderMenuFromMenu\r\n","import kebabCase from 'lodash/kebabCase'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { orderProductsFormatter } from 'pmt-modules/orderProduct/format'\r\n\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\n\r\nimport { getPartSelectedProducts } from '../utils'\r\n\r\n// generate and anchor to be used with links\r\n// Used to scroll to the part when selecting the part from a menu\r\nconst formatAnchor = part => {\r\n  part.anchor = kebabCase(part.name)\r\n\r\n  return part\r\n}\r\n\r\nconst formatSelectedItemsString = part => {\r\n  const itemsNames = []\r\n\r\n  part.selectedProducts.forEach(item => {\r\n    itemsNames.push(item.name)\r\n  })\r\n  part.selectedItemsString = itemsNames.join(', ')\r\n\r\n  return part\r\n}\r\n\r\n// add all selected products to the part from the part and all the part under\r\nconst recursiveOrderProductsFormatter = (partCategory, props) => {\r\n  if (!isEmpty(partCategory.categories)) {\r\n    partCategory.categories = partCategory.categories.map(category => {\r\n      return recursiveOrderProductsFormatter(category, props)\r\n    })\r\n  }\r\n\r\n  if (!isNil(partCategory.products)) {\r\n    partCategory.products = orderProductsFormatter(partCategory.products, props)\r\n  }\r\n  partCategory.selectedProducts = getPartSelectedProducts(partCategory)\r\n\r\n  return partCategory\r\n}\r\n\r\nexport const formatOrderMenuPart = createFormatter(\r\n  recursiveOrderProductsFormatter,\r\n  formatAnchor,\r\n  formatSelectedItemsString\r\n)\r\n\r\nexport const formatOrderMenuParts = createListFormatter(formatOrderMenuPart)\r\n","import isNil from 'lodash/isNil'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\n\r\nimport { createFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nimport { formatOrderMenuParts } from './part'\r\n\r\nconst totalPriceFormatter = (orderMenu, props) => {\r\n  // Note: we use || 0 just in the following cases:\r\n  // - menu has broken null info\r\n  // - unit tests does not give the data since it is not required for the test, but required here\r\n  //   to format\r\n\r\n  orderMenu.totalPriceFormatted = formatPriceWithCurrency(orderMenu.totalPrice || 0)\r\n\r\n  orderMenu.totalPriceWithQuantity =\r\n    // re-use current totalPriceWithQuantity: the order preview can change the totalPrice (for\r\n    // example for promotion), we need to use the order preview data.\r\n    orderMenu.totalPriceWithQuantity ||\r\n    // in some unit tests contexts, the totalPriceWithQuantity has not been calculated yet\r\n    (orderMenu.totalPrice || 0) * (orderMenu.quantity || 0)\r\n\r\n  orderMenu.totalPriceWithQuantityFormatted = formatPriceWithCurrency(\r\n    orderMenu.totalPriceWithQuantity || 0\r\n  )\r\n  orderMenu.unitPriceFormatted = formatPriceWithCurrency(orderMenu.price || 0)\r\n\r\n  orderMenu.unitPriceFormatted = formatPriceWithCurrency(orderMenu.unitPrice || 0)\r\n\r\n  orderMenu.basePriceFormatted = formatPriceWithCurrency(orderMenu.basePrice || 0)\r\n\r\n  orderMenu.priceFormatted = formatPriceWithCurrency(orderMenu.price || 0)\r\n\r\n  return orderMenu\r\n}\r\n\r\nconst formatOrderMenuSelectedProducts = orderMenu => {\r\n  let selectedProducts = []\r\n  orderMenu.parts.forEach(part => {\r\n    if (part.selectedProducts) {\r\n      selectedProducts = selectedProducts.concat(part.selectedProducts)\r\n    }\r\n  })\r\n  orderMenu.selectedProducts = selectedProducts\r\n\r\n  return orderMenu\r\n}\r\n\r\nconst formatNextPart = orderMenu => {\r\n  orderMenu.parts = orderMenu.parts || []\r\n  orderMenu.parts = orderMenu.parts.map((part, index) => {\r\n    let nextPart = null\r\n    let lastPart = orderMenu.parts.length === index + 1\r\n    orderMenu.parts.forEach((partFilter, indexFilter) => {\r\n      if (index < indexFilter || lastPart) {\r\n        if (\r\n          !partFilter.hasReachedMaxQuantity &&\r\n          (partFilter.nbChosenValues < partFilter.min || partFilter.min === 0) &&\r\n          isNil(nextPart) &&\r\n          partFilter.id !== part.id\r\n        ) {\r\n          nextPart = cloneDeep(partFilter)\r\n        }\r\n      }\r\n    })\r\n\r\n    part.nextPart = nextPart\r\n\r\n    return part\r\n  })\r\n\r\n  return orderMenu\r\n}\r\n\r\nexport const orderMenuFormatter = createFormatter(\r\n  totalPriceFormatter,\r\n  createSubObjectFormatter('parts', formatOrderMenuParts),\r\n  formatOrderMenuSelectedProducts,\r\n  formatNextPart\r\n)\r\n","import { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\n\r\nimport { orderProductFormatter } from 'pmt-modules/orderProduct/format'\r\nimport { orderMenuFormatter } from 'pmt-modules/orderMenu/format'\r\n\r\nexport const formatItem = item => {\r\n  if (item.isProduct) {\r\n    return orderProductFormatter(item)\r\n  } else if (item.isMenu) {\r\n    return orderMenuFormatter(item)\r\n  }\r\n  return item\r\n}\r\nexport const formatItemList = createListFormatter(formatItem)\r\n\r\n/**\r\n * we just move the selected products (all the products selected in the main & sub categories of part)\r\n * to replace the products in the main parts for order preview\r\n */\r\nexport const formatItemForOrderPreview = item => {\r\n  item = formatItem(item)\r\n\r\n  if (item.parts) {\r\n    item.parts = item.parts.map(part => {\r\n      part.products = part.selectedProducts\r\n      return part\r\n    })\r\n  }\r\n\r\n  return item\r\n}\r\n\r\nexport const formatItemListForOrderPreview = createListFormatter(formatItemForOrderPreview)\r\n\r\nexport const cartFormatter = createFormatter(createSubObjectFormatter('itemList', formatItemList))\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { transformCartForApi } from 'pmt-modules/orderPreview/utils/transformForApi/transformCartForApi'\r\n\r\nimport { formatPriceWithCurrency, getRoundAmountNumber } from 'pmt-utils/currency'\r\n\r\nimport { formatItemList, formatItemListForOrderPreview } from './format'\r\n\r\nconst getCart = state => state.entities.cart\r\n\r\nexport const getItemListFromCart = createSelector([getCart], cartData => {\r\n  let itemList = cartData.get('itemList')\r\n\r\n  return !isNil(itemList) ? formatItemList(itemList.toJS()) : []\r\n})\r\n\r\n// force reformat, so it will apply the current currency\r\nexport const forceGetItemListFromCart = state => {\r\n  const cartData = state.entities.cart\r\n  let itemList = cartData.get('itemList')\r\n  return !isNil(itemList) ? formatItemList(itemList.toJS()) : []\r\n}\r\n\r\nexport const getItemListFromCartForOrderPreview = createSelector([getCart], cartData => {\r\n  let itemList = cartData.get('itemList')\r\n\r\n  return !isNil(itemList) ? formatItemListForOrderPreview(itemList.toJS()) : []\r\n})\r\n\r\n/**\r\n * Returns the item list transformed for the API.\r\n */\r\nexport const getItemListForApi = createSelector([getItemListFromCartForOrderPreview], itemList => {\r\n  return transformCartForApi({\r\n    itemList,\r\n  })\r\n})\r\n\r\nexport function containsAlcohol(itemList) {\r\n  const productContainsAlcohol = p =>\r\n    p.containsAlcohol ||\r\n    (p.optionsSelected || []).some(option => option.values.some(v => v.containsAlcohol))\r\n\r\n  if (itemList.filter(p => p.isProduct).some(productContainsAlcohol)) {\r\n    return true\r\n  }\r\n  if (\r\n    itemList\r\n      .filter(p => p.isMenu)\r\n      .some(m => m.parts.some(part => part.selectedProducts.some(productContainsAlcohol)))\r\n  ) {\r\n    return true\r\n  }\r\n\r\n  return false\r\n}\r\n\r\n/**\r\n * Return cart data formatted\r\n */\r\nexport const getCartData = createSelector(\r\n  [forceGetItemListFromCart, getCart],\r\n  (itemList, cartData) => {\r\n    const data = {}\r\n\r\n    // -- total cartPrice\r\n    let totalCartPrice = 0\r\n\r\n    itemList.forEach(item => {\r\n      totalCartPrice += item.totalPriceWithQuantity\r\n    })\r\n\r\n    data.totalCartPrice = getRoundAmountNumber(totalCartPrice)\r\n    data.totalCartPriceFormatted = formatPriceWithCurrency(totalCartPrice)\r\n\r\n    // -- total item list\r\n    data.totalItemList = getRoundAmountNumber(\r\n      itemList.reduce((totalPrice, item) => (totalPrice += item.totalPriceWithQuantity), 0)\r\n    )\r\n    data.totalItemListFormatteed = formatPriceWithCurrency(data.totalItemList)\r\n\r\n    // -- hasItems\r\n    data.hasItems = !isEmpty(itemList)\r\n\r\n    data.comment = cartData.get('comment')\r\n    // --\r\n\r\n    data.minimumPrice = cartData.get('minimumPrice', 0)\r\n    data.minimumPriceFormatted = formatPriceWithCurrency(data.minimumPrice)\r\n\r\n    data.modificationDate = cartData.get('modificationDate')\r\n\r\n    data.comment = cartData.get('comment')\r\n\r\n    data.containsAlcohol = containsAlcohol(itemList)\r\n\r\n    return data\r\n  }\r\n)\r\n\r\nexport const getSuspendedDatas = createSelector([getCart], cartData => {\r\n  const suspendedItem = cartData.get('suspendedItem', null)\r\n  const suspendedActionType = cartData.get('suspendedActionType', null)\r\n\r\n  if (isNil(suspendedItem)) {\r\n    return null\r\n  }\r\n\r\n  return { suspendedItem: suspendedItem.toJS(), suspendedActionType }\r\n})\r\n","import createAction from '../redux/createAction'\r\n\r\nexport const OrderMenuAction = {\r\n  SELECT_MENU: 'ORDER_MENU_ACTION::SELECT_MENU',\r\n  EDIT_MENU: 'ORDER_MENU_ACTION::EDIT_MENU',\r\n  SELECT_PRODUCT: 'ORDER_MENU_ACTION::SELECT_PRODUCT',\r\n  UNSELECT_PRODUCT: 'ORDER_MENU_ACTION::UNSELECT_PRODUCT',\r\n  EDIT_PRODUCT: 'ORDER_MENU_ACTION::EDIT_PRODUCT',\r\n  UPDATE_PRODUCT: 'ORDER_MENU_ACTION::UPDATE_PRODUCT',\r\n  ADD_PRODUCT_ITEM: 'ORDER_MENU_ACTION::ADD_PRODUCT_ITEM',\r\n  ADD_PRODUCT: 'ORDER_MENU_ACTION::ADD_PRODUCT',\r\n  SET_CURRENT_PART: 'ORDER_MENU_ACTION::SET_CURRENT_PART',\r\n  SET_SELECTED_PART: 'ORDER_MENU_ACTION::SET_SELECTED_PART',\r\n  SET_PART_SELECTED_CATEGORY: 'ORDER_MENU_ACTION::SET_SELECTED_CATEGORY',\r\n  SET_PART_PARENT_CATEGORIES: 'ORDER_MENU_ACTION::SET_PARENT_CATEGORIES',\r\n}\r\n\r\n/**\r\n *\r\n * @param {*} menu\r\n * @param {*} options\r\n *    - restaurantId {string}\r\n */\r\nexport const selectMenu = (menu, options) =>\r\n  createAction(OrderMenuAction.SELECT_MENU, {\r\n    menu,\r\n    options: {\r\n      redirectToMenuPage: false,\r\n      isEditMode: false,\r\n      ...options,\r\n    },\r\n  })\r\n\r\n/**\r\n *\r\n * @param {*} menu\r\n * @param {*} options\r\n *    - restaurantId {string}\r\n *    - fromRoute\r\n */\r\nexport const editMenu = (orderMenu, options) =>\r\n  createAction(OrderMenuAction.EDIT_MENU, {\r\n    orderMenu,\r\n    // note: putting orderMenu as menu is a a trick, but it works for now\r\n    // To change: retrieve the menu and put in on the action on cart middlewares\r\n    // openEditItemMiddleware\r\n    menu: orderMenu,\r\n    options: {\r\n      redirectToMenuPage: true,\r\n      isEditMode: true,\r\n      ...options,\r\n    },\r\n  })\r\n\r\n/**\r\n *\r\n * @param {object} menu\r\n * @param {object} options\r\n *      - isMenuMode {boolean}\r\n *      - restaurantId {string} required.\r\n *      - orderMenu {object}\r\n *      - isEditMode {boolean}\r\n */\r\nexport const openMenu = (menu, options) =>\r\n  createAction(OrderMenuAction.SELECT_MENU, {\r\n    menu,\r\n    options: {\r\n      redirectToMenuPage: true,\r\n      ...options,\r\n    },\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\n/**\r\n * @param {*} part\r\n * @param {*} menu\r\n * @param {*} options\r\n *    - restaurantId {string}\r\n */\r\nexport const selectMenuProduct = (part, partCategory, product, options) =>\r\n  createAction(OrderMenuAction.SELECT_PRODUCT, {\r\n    part,\r\n    partCategory,\r\n    product,\r\n    options,\r\n  })\r\n\r\n/**\r\n * @param {*} part\r\n * @param {*} menu\r\n * @param {*} options\r\n *    - restaurantId {string}\r\n */\r\nexport const unselectMenuProduct = (part, partCategory, orderProduct, options) =>\r\n  createAction(OrderMenuAction.UNSELECT_PRODUCT, {\r\n    part,\r\n    partCategory,\r\n    orderProduct,\r\n    options,\r\n  })\r\n\r\n/**\r\n * @param {*} options\r\n *    - restaurantId {string}\r\n */\r\nexport const editMenuProduct = (part, partCategory, orderProduct, options) =>\r\n  createAction(OrderMenuAction.EDIT_PRODUCT, {\r\n    part,\r\n    partCategory,\r\n    orderProduct,\r\n    options,\r\n  })\r\n\r\nexport const addProductItemToMenu = (part, partCategory, item, options) =>\r\n  createAction(OrderMenuAction.ADD_PRODUCT_ITEM, {\r\n    part,\r\n    partCategory,\r\n    item,\r\n    options,\r\n  })\r\n\r\nexport const addOrderProductToMenu = (orderProduct, partId, partCategoryId) =>\r\n  createAction(OrderMenuAction.ADD_PRODUCT, {\r\n    orderProduct,\r\n    partId,\r\n    partCategoryId,\r\n  })\r\n\r\nexport const updateOrderProductToMenu = (orderProduct, partId, partCategoryId) =>\r\n  createAction(OrderMenuAction.UPDATE_PRODUCT, {\r\n    orderProduct,\r\n    partId,\r\n    partCategoryId,\r\n  })\r\n\r\n/**\r\n * Define the part currently displayed for the user\r\n */\r\nexport const setCurrentPart = part =>\r\n  createAction(OrderMenuAction.SET_CURRENT_PART, {\r\n    part,\r\n  })\r\n\r\nexport const setPartSelectedCategory = category =>\r\n  createAction(OrderMenuAction.SET_PART_SELECTED_CATEGORY, {\r\n    category,\r\n  })\r\n\r\nexport const resetPartSelectedCategory = () =>\r\n  createAction(OrderMenuAction.SET_PART_SELECTED_CATEGORY, {\r\n    category: null,\r\n  })\r\n\r\n/**\r\n *\r\n * @param {*} parentCategories\r\n */\r\nexport const setPartParentCategories = parentCategories =>\r\n  createAction(OrderMenuAction.SET_PART_PARENT_CATEGORIES, {\r\n    parentCategories,\r\n  })\r\nexport const resetPartParentCategories = () =>\r\n  createAction(OrderMenuAction.SET_PART_PARENT_CATEGORIES, {\r\n    parentCategories: [],\r\n  })\r\n","/**\r\n * Transform our menu data to be saved on our store:\r\n * - remove formatted data that can lead to infinite loops (reference chain)\r\n * - remove formatted data that takes too much memory\r\n *\r\n * Note: A better/generic solution could be to add and `__store_ignore_[KEY]` to our object format\r\n * data, and patch immutable.js to handle it. e.g on part data: `__store_ignore_nextPart`\r\n * Or: create an utils that takes the paths to remove.\r\n */\r\nconst transformOrderMenuForStore = orderMenu => {\r\n  const cartMenu = orderMenu\r\n\r\n  cartMenu.parts = cartMenu.parts.map(part => {\r\n    delete part.nextPart\r\n    return part\r\n  })\r\n\r\n  return cartMenu\r\n}\r\n\r\nexport default transformOrderMenuForStore\r\n","import createAction from '../redux/createAction'\r\n\r\nexport const OrderProductAction = {\r\n  SELECT_PRODUCT: 'ORDER_PRODUCT_ACTION::SELECT_PRODUCT',\r\n  SELECT_OPTION_VALUE: 'ORDER_PRODUCT_ACTION::SELECT_OPTION_VALUE',\r\n  SET_RECLAIM_LATER: 'ORDER_PRODUCT_ACTION::SET_RECLAIM_LATER',\r\n  UNSELECT_OPTION_VALUE: 'ORDER_PRODUCT_ACTION::UNSELECT_OPTION_VALUE',\r\n  UPDATE_COMMENT: 'ORDER_PRODUCT_ACTION::UPDATE_COMMENT',\r\n}\r\n\r\n/**\r\n *\r\n * @param {*} product\r\n * @param {*} options\r\n *    - isMenuMode {boolean} (false)\r\n *    - partId {Part} (null) to define if isMenuMode is true\r\n *    - restaurantId {string}\r\n *    - isEditMode {boolean} (false)\r\n *    - orderProduct {object} (null)\r\n */\r\nexport const openProduct = (product, options) =>\r\n  createAction(OrderProductAction.SELECT_PRODUCT, {\r\n    product,\r\n    viewOptions: {\r\n      isMenuMode: false,\r\n      partId: null,\r\n      partCategoryId: null,\r\n      restaurantId: '',\r\n      isEditMode: false,\r\n      orderProduct: null,\r\n      showDialog: true,\r\n      ...options,\r\n    },\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const selectOptionValue = (option, value) =>\r\n  createAction(OrderProductAction.SELECT_OPTION_VALUE, {\r\n    option,\r\n    value,\r\n  })\r\n\r\nexport const unselectOptionValue = (option, value) =>\r\n  createAction(OrderProductAction.UNSELECT_OPTION_VALUE, {\r\n    option,\r\n    value,\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const updateOrderProductComment = comment =>\r\n  createAction(OrderProductAction.UPDATE_COMMENT, {\r\n    comment,\r\n  })\r\n\r\nexport const setReclaimLater = isChecked =>\r\n  createAction(OrderProductAction.SET_RECLAIM_LATER, {\r\n    isChecked,\r\n  })\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport { orderProductFormatter } from './format'\r\n\r\nconst getState = (state, props) => state.entities.orderProduct\r\nconst getCatalogDataOnProps = (state, props) => props.catalog\r\n\r\nexport const makeGetSelectedProduct = () =>\r\n  createSelector([getState, getCatalogDataOnProps], (orderProductState, catalogData) => {\r\n    if (isNil(orderProductState) || isNil(catalogData)) {\r\n      return null\r\n    }\r\n\r\n    const selectedProduct = orderProductState.get('selectedProduct')\r\n\r\n    if (isNil(selectedProduct)) {\r\n      return null\r\n    }\r\n\r\n    const selectedProductId = selectedProduct.get('id')\r\n    if (isNil(selectedProductId)) {\r\n      return null\r\n    }\r\n\r\n    return findOnArray(catalogData.products, product => product.id === selectedProductId)\r\n  })\r\n\r\nexport const getOrderProduct = createSelector([getState], orderProductState => {\r\n  const orderProduct = orderProductState.get('orderProduct')\r\n\r\n  if (isNil(orderProduct)) {\r\n    return null\r\n  }\r\n\r\n  return orderProductFormatter(orderProduct.toJS())\r\n})\r\n\r\nexport const getViewOptions = createSelector([getState], orderProductState => {\r\n  const viewOptionsState = orderProductState.get('viewOptions')\r\n\r\n  if (isNil(viewOptionsState)) {\r\n    return null\r\n  }\r\n\r\n  return viewOptionsState.toJS()\r\n})\r\n","import Immutable from 'immutable'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport { findOnArray, updateArrayObject } from 'pmt-utils/array'\r\n\r\nimport { createReducer } from '../redux'\r\n\r\nimport { OrderProductAction } from './actions'\r\nimport { createOrderProductFromProduct } from './utils'\r\nimport { orderProductModifier } from './modifiers'\r\n\r\nexport * from './actions'\r\nexport * from './modifiers'\r\nexport * from './selectors'\r\nexport * from './utils'\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  orderProduct: null,\r\n  viewOptions: null,\r\n})\r\n\r\n//\r\n// state modifiers\r\n//\r\n\r\nconst updateOrderProduct = (state, orderProductUpdaterFunc) => {\r\n  return state.updateIn(['orderProduct'], orderProductState => {\r\n    return Immutable.fromJS(orderProductModifier(orderProductUpdaterFunc(orderProductState.toJS())))\r\n  })\r\n}\r\n\r\n/**\r\n * Allow to update an option value.\r\n * This function search for the option value, give it to the valueUpdatedFunc, and\r\n * save the updated date returned on the state\r\n *\r\n * @param {*} state\r\n * @param {*} action  - option\r\n *                    - value\r\n * @param {*} valueUpdaterFunc (option, value). Can modify option and value by reference\r\n */\r\nconst updateOptionValue = (state, action, valueUpdaterFunc) =>\r\n  updateOrderProduct(state, orderProduct => {\r\n    let options = orderProduct.options\r\n    if (isEmpty(options)) {\r\n      // TODO: error\r\n      return\r\n    }\r\n\r\n    const option = findOnArray(options, action.option.id)\r\n    const value = findOnArray(option.values, action.value.id)\r\n\r\n    // option and value will be modified by reference ont the func\r\n    valueUpdaterFunc(option, value)\r\n\r\n    option.values = updateArrayObject(option.values, value, value.id)\r\n\r\n    orderProduct.options = updateArrayObject(options, option, option.id)\r\n\r\n    return orderProduct\r\n  })\r\n\r\n//\r\n// reducer functions\r\n//\r\n\r\nconst selectProduct = (state, action) => {\r\n  if (isNil(action.product)) {\r\n    return state\r\n  }\r\n\r\n  return state\r\n    .set('selectedProduct', Immutable.fromJS(action.product))\r\n    .set(\r\n      'orderProduct',\r\n      Immutable.fromJS(\r\n        action.product.isOrderProduct === true\r\n          ? action.product // note: here product is already the orderProduct\r\n          : createOrderProductFromProduct(action.product, action.options)\r\n      )\r\n    )\r\n    .set('viewOptions', Immutable.fromJS(action.viewOptions))\r\n}\r\n\r\nconst selectOptionValue = (state, action) => {\r\n  return updateOptionValue(state, action, (option, value) => {\r\n    if (option.quantityMax === 1 && value.quantity === 0) {\r\n      // When the max is 1 and there is another value potentially selected\r\n      // we set the quantity to the value and remove the other selected values\r\n      option.values = option.values.map(value => {\r\n        value.quantity = 0\r\n        return value\r\n      })\r\n      value.quantity = 1\r\n    } else if (option.nbChosenValues < option.quantityMax) {\r\n      value.quantity += 1\r\n    }\r\n  })\r\n}\r\n\r\nconst unselectOptionValue = (state, action) => {\r\n  return updateOptionValue(state, action, (option, value) => {\r\n    if (value.quantity > 0) {\r\n      value.quantity -= 1\r\n    }\r\n  })\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst updateComment = (state, action) =>\r\n  updateOrderProduct(state, orderProduct => {\r\n    orderProduct.comment = action.comment\r\n    return orderProduct\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nconst setReclaimLater = (state, action) =>\r\n  updateOrderProduct(state, orderProduct => {\r\n    orderProduct.reclaimLater = action.isChecked\r\n    return orderProduct\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const orderProductReducer = createReducer(DEFAULT_STATE, {\r\n  [OrderProductAction.SELECT_PRODUCT]: selectProduct,\r\n  [OrderProductAction.SELECT_OPTION_VALUE]: selectOptionValue,\r\n  [OrderProductAction.SET_RECLAIM_LATER]: setReclaimLater,\r\n  [OrderProductAction.UNSELECT_OPTION_VALUE]: unselectOptionValue,\r\n  [OrderProductAction.UPDATE_COMMENT]: updateComment,\r\n})\r\n","import { createMiddleware } from 'pmt-modules/redux'\r\nimport { openProduct } from '../orderProduct'\r\n\r\nimport { OrderMenuAction } from './actions'\r\n\r\nconst openMenuProductMiddleware = createMiddleware(\r\n  OrderMenuAction.SELECT_PRODUCT,\r\n  ({ dispatch, action }) => {\r\n    if (!action.part.hasReachedMaxQuantity) {\r\n      dispatch(\r\n        openProduct(action.product, {\r\n          isMenuMode: true,\r\n          restaurantId: action.options.restaurantId,\r\n          partId: action.part.id,\r\n          partCategoryId: action.partCategory.id,\r\n          orderProduct: action.orderProduct,\r\n          redirectToMenuPage: false,\r\n        })\r\n      )\r\n    }\r\n  }\r\n)\r\n\r\nconst openEditMenuProductMiddleware = createMiddleware(\r\n  OrderMenuAction.EDIT_PRODUCT,\r\n  ({ dispatch, action }) => {\r\n    dispatch(\r\n      openProduct(action.orderProduct, {\r\n        isMenuMode: true,\r\n        restaurantId: action.options.restaurantId,\r\n        partId: action.part.id,\r\n        partCategoryId: action.partCategory.id,\r\n        orderProduct: action.orderProduct,\r\n        isEditMode: true,\r\n      })\r\n    )\r\n  }\r\n)\r\n\r\nexport const orderMenuMiddlewares = [openMenuProductMiddleware, openEditMenuProductMiddleware]\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { orderMenuFormatter } from './format'\r\n\r\nconst getState = (state, props) => state.entities.orderMenu\r\n\r\nexport const makeGetSelectedMenu = () =>\r\n  createSelector([getState], orderMenuState => {\r\n    if (isNil(orderMenuState)) {\r\n      return null\r\n    }\r\n\r\n    const selectedMenu = orderMenuState.get('selectedMenu')\r\n\r\n    if (isNil(selectedMenu)) {\r\n      return null\r\n    }\r\n\r\n    return selectedMenu.toJS()\r\n  })\r\n\r\nexport const getOrderMenu = createSelector([getState], orderMenuState => {\r\n  const orderMenu = orderMenuState.get('orderMenu')\r\n\r\n  if (isNil(orderMenu)) {\r\n    return null\r\n  }\r\n\r\n  return orderMenuFormatter(orderMenu.toJS(), {\r\n    // for products\r\n    isMenuMode: true,\r\n  })\r\n})\r\n\r\nexport const getViewOptions = createSelector([getState], orderMenuState => {\r\n  const viewOptionsState = orderMenuState.get('viewOptions')\r\n\r\n  if (isNil(viewOptionsState)) {\r\n    return null\r\n  }\r\n\r\n  return viewOptionsState.toJS()\r\n})\r\n\r\nexport const getPartSelectedCategory = createSelector([getState], orderMenuState => {\r\n  const selectedCategoryState = orderMenuState.get('selectedCategory')\r\n\r\n  if (isNil(selectedCategoryState)) {\r\n    return null\r\n  }\r\n\r\n  return selectedCategoryState.toJS()\r\n})\r\n\r\nexport const getPartParentCategories = createSelector([getState], orderMenuState => {\r\n  const parentCategoriesState = orderMenuState.get('parentCategories')\r\n\r\n  if (isNil(parentCategoriesState)) {\r\n    return []\r\n  }\r\n\r\n  return parentCategoriesState.toJS()\r\n})\r\n\r\nexport const getPartParentCategory = createSelector([getState], orderMenuState => {\r\n  const parentCategoriesState = orderMenuState.get('parentCategories')\r\n\r\n  if (isNil(parentCategoriesState)) {\r\n    return []\r\n  }\r\n\r\n  const parentCategories = parentCategoriesState.toJS()\r\n  return !isEmpty(parentCategories) ? parentCategories.pop() : parentCategories\r\n})\r\n","import Immutable from 'immutable'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { updateArrayObject } from 'pmt-utils/array'\r\n\r\nimport { createReducer } from '../redux'\r\n\r\nimport { OrderMenuAction } from './actions'\r\nimport { createOrderMenuFromMenu } from './utils'\r\nimport { orderMenuModifier } from './modifiers'\r\n\r\nimport { createOrderProductFromProduct } from 'pmt-modules/orderProduct/utils'\r\nimport transformOrderMenuForStore from 'pmt-modules/cart/utils/transformOrderMenuForStore'\r\n\r\nexport * from './actions'\r\nexport * from './middlewares'\r\nexport * from './modifiers'\r\nexport * from './selectors'\r\nexport * from './utils'\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  orderMenu: null,\r\n  selectedMenu: null,\r\n  // a set of the options to pass to the view:\r\n  // - isEditMode\r\n  viewOptions: null,\r\n\r\n  // handle subcategories in menu part\r\n  selectedCategory: null,\r\n  parentCategories: [],\r\n})\r\n\r\n//\r\n// state modifiers\r\n//\r\n\r\n// use to update all subcategories in menu parts\r\nconst recursiveUpdatePart = (part, action, func) => {\r\n  if (!isNil(part.categories) && !isEmpty(part.categories)) {\r\n    part.categories = part.categories.map(category => recursiveUpdatePart(category, action, func))\r\n  }\r\n\r\n  return func(part)\r\n}\r\n\r\nconst updateOrderMenu = (state, orderMenuUpdaterFunc) => {\r\n  return state.updateIn(['orderMenu'], orderMenuState => {\r\n    return Immutable.fromJS(\r\n      transformOrderMenuForStore(orderMenuModifier(orderMenuUpdaterFunc(orderMenuState.toJS())))\r\n    )\r\n  })\r\n}\r\n\r\n//\r\n// reducer functions\r\n//\r\n\r\nconst selectMenu = (state, action) => {\r\n  if (isNil(action.menu)) {\r\n    return state\r\n  }\r\n\r\n  return state\r\n    .set('selectedMenu', Immutable.fromJS(action.menu))\r\n    .set(\r\n      'orderMenu',\r\n      Immutable.fromJS(\r\n        transformOrderMenuForStore(\r\n          action.menu.isOrderMenu === true\r\n            ? action.menu // note: here menu is already the orderMenu\r\n            : createOrderMenuFromMenu(action.menu)\r\n        )\r\n      )\r\n    )\r\n    .set('viewOptions', Immutable.fromJS(action.options))\r\n}\r\n\r\nconst editMenu = (state, action) => {\r\n  return (\r\n    state\r\n      // Note: the menu is the same as the orderMenu (see the action)\r\n      .set('selectedMenu', Immutable.fromJS(transformOrderMenuForStore(action.menu)))\r\n      .set('orderMenu', Immutable.fromJS(transformOrderMenuForStore(action.orderMenu)))\r\n      .set('viewOptions', Immutable.fromJS(action.options))\r\n  )\r\n}\r\n\r\nconst addProduct = (state, action) =>\r\n  updateOrderMenu(state, orderMenu => {\r\n    orderMenu.parts = orderMenu.parts.map(part => {\r\n      part = recursiveUpdatePart(part, action, part => {\r\n        if (part.id === action.partCategoryId && !part.hasReachedMaxQuantity) {\r\n          const orderProduct = action.orderProduct\r\n          orderProduct.quantity = 1\r\n\r\n          part.products = updateArrayObject(part.products, orderProduct, action.orderProduct.id)\r\n        }\r\n\r\n        return part\r\n      })\r\n\r\n      return part\r\n    })\r\n\r\n    return orderMenu\r\n  })\r\n\r\nconst addProductItem = (state, action) =>\r\n  updateOrderMenu(state, orderMenu => {\r\n    orderMenu.parts = orderMenu.parts.map(part => {\r\n      part = recursiveUpdatePart(part, action, part => {\r\n        if (part.id === action.partCategory.id && !part.hasReachedMaxQuantity) {\r\n          const orderProduct = createOrderProductFromProduct(action.item, {\r\n            isMenuMode: true,\r\n            partId: part.id,\r\n            partCategoryId: action.partCategory.id,\r\n          })\r\n          orderProduct.quantity = 1\r\n\r\n          part.products = updateArrayObject(part.products, orderProduct, orderProduct.id)\r\n        }\r\n\r\n        return part\r\n      })\r\n\r\n      return part\r\n    })\r\n\r\n    return orderMenu\r\n  })\r\n\r\nconst updateProduct = (state, action) =>\r\n  updateOrderMenu(state, orderMenu => {\r\n    orderMenu.parts = orderMenu.parts.map(part => {\r\n      part = recursiveUpdatePart(part, action, part => {\r\n        if (part.id === action.partCategoryId) {\r\n          const orderProduct = action.orderProduct\r\n\r\n          part.products = updateArrayObject(\r\n            part.products,\r\n            orderProduct,\r\n            // update with orderId\r\n            p => orderProduct.orderId === p.orderId\r\n          )\r\n        }\r\n\r\n        return part\r\n      })\r\n\r\n      return part\r\n    })\r\n\r\n    return orderMenu\r\n  })\r\n\r\nconst unselectProduct = (state, action) =>\r\n  updateOrderMenu(state, orderMenu => {\r\n    orderMenu.parts = orderMenu.parts.map(part => {\r\n      part = recursiveUpdatePart(part, action, part => {\r\n        if (part.id === action.partCategory.id) {\r\n          const orderProduct = action.orderProduct\r\n\r\n          // put quantity to 0\r\n          orderProduct.quantity = 0\r\n\r\n          // put options values quantity to 0\r\n          orderProduct.options.map(option => {\r\n            option.values = option.values.map(value => {\r\n              value.quantity = 0\r\n              return value\r\n            })\r\n            return option\r\n          })\r\n\r\n          part.products = updateArrayObject(\r\n            part.products,\r\n            orderProduct,\r\n            // update with orderId\r\n            p => orderProduct.orderId === p.orderId\r\n          )\r\n        }\r\n\r\n        return part\r\n      })\r\n\r\n      return part\r\n    })\r\n\r\n    return orderMenu\r\n  })\r\n\r\nconst setCurrentPart = (state, action) =>\r\n  updateOrderMenu(state, orderMenu => {\r\n    orderMenu.currentPart = action.part\r\n    return orderMenu\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const setSelectedCategoryInPart = (state, action) =>\r\n  state.set('selectedCategory', Immutable.fromJS(action.category))\r\n\r\nexport const setParentCategoriesInPart = (state, action) =>\r\n  state.set('parentCategories', Immutable.fromJS(action.parentCategories))\r\n\r\nexport const orderMenuReducer = createReducer(DEFAULT_STATE, {\r\n  [OrderMenuAction.SELECT_MENU]: selectMenu,\r\n  [OrderMenuAction.EDIT_MENU]: editMenu,\r\n  [OrderMenuAction.ADD_PRODUCT]: addProduct,\r\n  [OrderMenuAction.UPDATE_PRODUCT]: updateProduct,\r\n  [OrderMenuAction.UNSELECT_PRODUCT]: unselectProduct,\r\n  [OrderMenuAction.ADD_PRODUCT_ITEM]: addProductItem,\r\n  [OrderMenuAction.SET_CURRENT_PART]: setCurrentPart,\r\n  [OrderMenuAction.SET_PART_SELECTED_CATEGORY]: setSelectedCategoryInPart,\r\n  [OrderMenuAction.SET_PART_PARENT_CATEGORIES]: setParentCategoriesInPart,\r\n})\r\n","import { createAction } from '../redux'\r\n\r\nimport { ModalType, createHideDialogAction } from '../dialog'\r\n\r\n/**\r\n * /!\\ Any new action should be added on OrderFrontActionsToResetIdEmpotency, to reset the idempotency\r\n */\r\nexport const CartAction = {\r\n  DISPLAY_CART: 'CART::DISPLAY',\r\n  //\r\n  // cart modififers actions\r\n  // see cartModifierActions below\r\n  //\r\n  ADD_TO_CART_FROM_SHORTCUT: 'CART::ADD_TO_CART_FROM_SHORTCUT',\r\n  ADD_ORDER_PRODUCT_TO_CART: 'CART::ADD_ORDER_PRODUCT_TO_CART',\r\n  UPDATE_ORDER_PRODUCT_ON_CART: 'CART::UPDATE_ORDER_PRODUCT_ON_CART',\r\n  ADD_ORDER_MENU_TO_CART: 'CART::ADD_ORDER_MENU_TO_CART',\r\n  UPDATE_ORDER_MENU_ON_CART: 'CART::UPDATE_ORDER_MENU_ON_CART',\r\n  REMOVE_FROM_CART: 'CART::REMOVE_FROM_CART',\r\n  DELETE_FROM_CART: 'CART::DELETE_FROM_CART',\r\n  DUPLICATE_ITEM_ON_CART: 'CART::DUPLICATE_ITEM_ON_CART',\r\n\r\n  //\r\n  // setters\r\n  //\r\n  SET_MODIFICATION_DATE: 'CART::SET_MODIFICATION_DATE',\r\n  SET_MINIMUM_PRICE: 'CART::SET_MINIMUM_PRICE',\r\n  UPDATE_COMMENT: 'CART::UPDATE_COMMENT',\r\n  SET_CART: 'CART::SET_CART',\r\n  SET_SUSPENDED_DATAS: 'CART::SET_SUSPENDED_DATAS',\r\n\r\n  //\r\n  //\r\n  //\r\n  EDIT_ITEM: 'CART::EDIT_ITEM',\r\n\r\n  //\r\n  //\r\n  //\r\n  RESET_CART: 'CART::RESET',\r\n}\r\n\r\n/**\r\n * List the cart actions that must trigger an idempotency reset.\r\n */\r\nexport const CartActionsToResetIdEmpotency = [\r\n  CartAction.ADD_TO_CART_FROM_SHORTCUT,\r\n  CartAction.ADD_ORDER_PRODUCT_TO_CART,\r\n  CartAction.UPDATE_ORDER_PRODUCT_ON_CART,\r\n  CartAction.ADD_ORDER_MENU_TO_CART,\r\n  CartAction.UPDATE_ORDER_MENU_ON_CART,\r\n  CartAction.REMOVE_FROM_CART,\r\n  CartAction.DELETE_FROM_CART,\r\n  CartAction.DUPLICATE_ITEM_ON_CART,\r\n\r\n  // CartAction.UPDATE_COMMENT,\r\n  CartAction.SET_CART,\r\n\r\n  CartAction.EDIT_ITEM,\r\n\r\n  CartAction.RESET_CART,\r\n]\r\n\r\n/**\r\n * Array of all cart actions that leads to a cart modifications.\r\n * Used for the catchCartActionMiddleware.\r\n */\r\nexport const cartModifierActions = [\r\n  CartAction.DISPLAY_CART,\r\n  CartAction.ADD_TO_CART_FROM_SHORTCUT,\r\n  CartAction.ADD_ORDER_PRODUCT_TO_CART,\r\n  CartAction.ADD_ORDER_MENU_TO_CART,\r\n  CartAction.UPDATE_ORDER_PRODUCT_ON_CART,\r\n  CartAction.UPDATE_ORDER_MENU_ON_CART,\r\n  CartAction.REMOVE_FROM_CART,\r\n  CartAction.DELETE_FROM_CART,\r\n  CartAction.DUPLICATE_ITEM_ON_CART,\r\n  CartAction.SET_SUSPENDED_DATAS,\r\n]\r\n\r\nexport const displayCart = () => createAction(CartAction.DISPLAY_CART)\r\n\r\nexport const addToCartFromShortcut = item =>\r\n  createAction(CartAction.ADD_TO_CART_FROM_SHORTCUT, {\r\n    item,\r\n  })\r\n\r\nexport const addOrderProductToCart = (orderProduct, options) =>\r\n  createAction(CartAction.ADD_ORDER_PRODUCT_TO_CART, {\r\n    orderProduct,\r\n    options,\r\n  })\r\n\r\nexport const updateOrderProductOnCart = orderProduct =>\r\n  createAction(CartAction.UPDATE_ORDER_PRODUCT_ON_CART, {\r\n    orderProduct,\r\n  })\r\n\r\nexport const addOrderMenuToCart = (orderMenu, options) =>\r\n  createAction(CartAction.ADD_ORDER_MENU_TO_CART, {\r\n    orderMenu,\r\n    options,\r\n  })\r\n\r\nexport const updateOrderMenuOnCart = orderMenu =>\r\n  createAction(CartAction.UPDATE_ORDER_MENU_ON_CART, {\r\n    orderMenu,\r\n  })\r\n\r\nexport const duplicateItemOnCart = item =>\r\n  createAction(CartAction.DUPLICATE_ITEM_ON_CART, {\r\n    item,\r\n  })\r\n\r\nexport const removeFromCart = item =>\r\n  createAction(CartAction.REMOVE_FROM_CART, {\r\n    item,\r\n  })\r\n\r\nexport const deleteFromCart = item =>\r\n  createAction(CartAction.DELETE_FROM_CART, {\r\n    item,\r\n  })\r\n\r\nexport const setModificationDate = date =>\r\n  createAction(CartAction.SET_MODIFICATION_DATE, {\r\n    date,\r\n  })\r\n\r\nexport const setMinimumPrice = minimumPrice =>\r\n  createAction(CartAction.SET_MINIMUM_PRICE, {\r\n    minimumPrice,\r\n  })\r\n\r\nexport const updateComment = comment =>\r\n  createAction(CartAction.UPDATE_COMMENT, {\r\n    comment,\r\n  })\r\n\r\nexport const setSuspendedDatas = (suspendedItem, suspendedActionType) =>\r\n  createAction(CartAction.SET_SUSPENDED_DATAS, {\r\n    suspendedItem,\r\n    suspendedActionType,\r\n  })\r\n\r\nexport const setCart = ({ itemList }) =>\r\n  createAction(CartAction.SET_CART, {\r\n    itemList,\r\n  })\r\n\r\n/**\r\n * @param {*} options\r\n *    - restaurantId {string}\r\n *    - fromRoute {Route} the route from where we edit the item. We will redirect to this route after\r\n *      the edit is done.\r\n */\r\nexport const editItem = (item, options) =>\r\n  createAction(CartAction.EDIT_ITEM, {\r\n    item,\r\n    options,\r\n  })\r\n\r\nexport const hideDeleteCartDialog = () => createHideDialogAction(ModalType.DELETE_CART)\r\n\r\nexport const resetCart = (doOrderPreview = true) =>\r\n  createAction(CartAction.RESET_CART, {\r\n    doOrderPreview,\r\n  })\r\n","import { updateArrayObject } from 'pmt-utils/array'\r\n\r\nimport { orderProductModifier } from 'pmt-modules/orderProduct/modifiers'\r\nimport { orderMenuModifier } from 'pmt-modules/orderMenu/modifiers'\r\nimport transformOrderMenuForStore from './transformOrderMenuForStore'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\n\r\n// check if an item (from cart) exists in cart\r\nexport const areSameItemFromCart = (productToCheck, productToCompare) => {\r\n  return productToCheck.orderId === productToCompare.orderId\r\n}\r\n\r\n// update an item on the itemCartList\r\n//\r\nexport const updateItem = (itemCartList, item) => {\r\n  // first we apply the modifiers on the item\r\n  let itemToUpdate = item\r\n  if (itemToUpdate.isMenu) {\r\n    itemToUpdate = transformOrderMenuForStore(orderMenuModifier(item))\r\n  } else if (itemToUpdate.isProduct) {\r\n    itemToUpdate = orderProductModifier(item)\r\n  }\r\n\r\n  return updateArrayObject(\r\n    itemCartList,\r\n    itemToUpdate,\r\n    itemFromCart =>\r\n      // we must consider that the item we update has the same orderId, and do not call\r\n      // areSameItemFromCart\r\n      itemFromCart.type === itemToUpdate.type && itemFromCart.orderId === itemToUpdate.orderId\r\n  )\r\n}\r\n\r\n// remove from item cart's list the selected item\r\nexport const deleteItemFromCart = (itemCartList, item) => {\r\n  const itemCartListCleaned = itemCartList.filter(\r\n    itemFromCart => itemFromCart.orderId !== item.orderId\r\n  )\r\n\r\n  if (itemCartListCleaned.length === itemCartList.length) {\r\n    Logger.warn('CART_ERROR', `Item to remove from cart not found. ID: ${item.id}`)\r\n  }\r\n\r\n  return itemCartListCleaned\r\n}\r\n","import { createAction } from '../redux'\r\n\r\nimport { ModalType, createShowDialogAction, createHideDialogAction } from '../dialog'\r\n\r\nexport const SuggestionActions = {\r\n  CREATE: 'SUGGESTION::CREATE',\r\n}\r\n\r\n/**\r\n * create a suggestion based on the pending item being added to cart\r\n * this is trigger in cart middleware\r\n */\r\nexport const createSuggestionFromItem = orderItem =>\r\n  createAction(SuggestionActions.CREATE, {\r\n    orderItem,\r\n  })\r\n\r\n/**\r\n * @param {*} orderItem item pending to be add to cart\r\n *\r\n * Handle by the middleware `addToCartMiddleware` in suggestion module\r\n */\r\nexport const showSuggestionDialog = orderItem =>\r\n  createShowDialogAction(ModalType.SUGGESTION_VIEW, {\r\n    orderItem,\r\n  })\r\n\r\nexport const hideSuggestionDialog = () => createHideDialogAction(ModalType.SUGGESTION_VIEW)\r\n","import { editMenu } from 'pmt-modules/orderMenu'\nimport { createOrderProductFromProduct, openProduct } from 'pmt-modules/orderProduct'\nimport { createMiddleware } from 'pmt-modules/redux'\nimport { createSuggestionFromItem, showSuggestionDialog } from 'pmt-modules/suggestion/actions'\n\nimport { CartAction } from './actions'\n\n/**\n * Intercepts only add to cart actions BEFORE\n * this is used to interact with cart before adding items (e.g. suggestions)\n */\nexport const addToCartMiddleware = createMiddleware(\n  [\n    CartAction.ADD_TO_CART_FROM_SHORTCUT,\n    CartAction.ADD_ORDER_PRODUCT_TO_CART,\n    CartAction.ADD_ORDER_MENU_TO_CART,\n  ],\n  ({ getState, dispatch, next, action }) => {\n    // check for skipSuggestion to ensure we don't reopen suggestion while adding current item\n    if (!action.options || !action.options.skipSuggestion) {\n      const item = action.item\n        ? createOrderProductFromProduct(action.item)\n        : action.orderProduct || action.orderMenu\n\n      if (item && item.hasSuggestion && !item.isSuggestedItem) {\n        // create suggestion store for current item\n        dispatch(createSuggestionFromItem(item))\n\n        dispatch(showSuggestionDialog(item))\n        // we are in suggestion modal, we don't want to add the item yet, so we stop propagation\n        return createMiddleware.STOP_PROPAGATION\n      }\n    }\n  }\n)\n\nconst openEditItemMiddleware = createMiddleware(CartAction.EDIT_ITEM, ({ dispatch, action }) => {\n  const item = action.item\n\n  if (item.isProduct) {\n    dispatch(\n      openProduct(item, {\n        showDialog: true,\n        isMenuMode: false,\n        restaurantId: action.options.restaurantId || null,\n        orderProduct: action.orderProduct,\n        isEditMode: true,\n        fromRoute: action.options.fromRoute,\n      })\n    )\n  } else if (item.isMenu) {\n    dispatch(\n      editMenu(item, {\n        restaurantId: action.options.restaurantId,\n        fromRoute: action.options.fromRoute,\n      })\n    )\n  }\n})\n\nexport const cartMiddlewares = [addToCartMiddleware, openEditItemMiddleware]\n","import invariant from 'invariant'\r\nimport Immutable, { fromJS } from 'immutable'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { createReducer } from 'pmt-modules/redux'\r\nimport { CatalogItemType } from 'pmt-modules/catalog/constants'\r\nimport { getMenuFromCart, getMenuFromCartWithOrderId } from 'pmt-modules/orderMenu'\r\nimport {\r\n  createOrderProductFromProduct,\r\n  getProductFromCart,\r\n  getProductFromCartWithOrderId,\r\n} from 'pmt-modules/orderProduct'\r\nimport transformOrderMenuForStore from './utils/transformOrderMenuForStore'\r\n// import { getCircularCulprit } from 'pmt-utils/data'\r\n\r\nimport { CartAction } from './actions'\r\nimport { updateItem, deleteItemFromCart } from './utils'\r\n\r\nexport * from './actions'\r\nexport * from './middlewares'\r\nexport * from './selectors'\r\n\r\nconst decreaseQuantity = object => {\r\n  object.quantity--\r\n  object.totalPriceWithQuantity = object.totalPriceWithQuantity - object.totalPrice\r\n}\r\n\r\nconst increaseQuantity = object => {\r\n  object.quantity++\r\n  object.totalPriceWithQuantity = object.totalPrice + object.totalPriceWithQuantity\r\n}\r\n\r\nconst addToCart = (itemListFromCart, item) => {\r\n  if (item.isProduct) {\r\n    let productFormatted = createOrderProductFromProduct(item)\r\n    let productFromCart = getProductFromCart(itemListFromCart, productFormatted)\r\n    // if product exists in cart\r\n    if (!isNil(productFromCart)) {\r\n      // increase its quantity\r\n      increaseQuantity(productFromCart)\r\n    } else {\r\n      // add it to cart\r\n      itemListFromCart.push(productFormatted)\r\n    }\r\n  } else {\r\n    Logger.warn('CART_ERROR', `Item's type to add from cart not found. ID: ${item.id}`)\r\n  }\r\n\r\n  return itemListFromCart\r\n}\r\n\r\n// only products use this way of adding item to cart\r\n// we have to format the given product because it's not formatted for being in cart\r\nconst addToCartFromShortcut = (state, action) => {\r\n  let itemListFromCart = state.get('itemList')\r\n  if (!isNil(itemListFromCart)) {\r\n    itemListFromCart = itemListFromCart.toJS()\r\n    let item = action.item\r\n\r\n    invariant(\r\n      item !== CatalogItemType.PRODUCT,\r\n      `${item.id} is not a product and try be added to cart from shortcut`\r\n    )\r\n\r\n    itemListFromCart = addToCart(itemListFromCart, item)\r\n\r\n    return state.mergeIn(['itemList'], fromJS(itemListFromCart))\r\n  }\r\n\r\n  return state\r\n}\r\n\r\nconst addOrderProductToCart = (state, action) => {\r\n  let itemListFromCart = state.get('itemList')\r\n  if (!isNil(itemListFromCart)) {\r\n    itemListFromCart = itemListFromCart.toJS()\r\n    const orderProduct = action.orderProduct\r\n\r\n    let productFromCart = getProductFromCart(itemListFromCart, orderProduct)\r\n    // if product exists in cart\r\n    if (!isNil(productFromCart)) {\r\n      // increase its quantity\r\n      increaseQuantity(productFromCart)\r\n    } else {\r\n      // add it to cart\r\n      itemListFromCart.push(orderProduct)\r\n    }\r\n\r\n    return state.mergeIn(['itemList'], fromJS(itemListFromCart))\r\n  }\r\n\r\n  return state\r\n}\r\n\r\nconst addOrderMenuToCart = (state, action) => {\r\n  let itemListFromCart = state.get('itemList')\r\n  if (!isNil(itemListFromCart)) {\r\n    // commented since in re-adds nextPart on menus previously selected.\r\n    itemListFromCart = itemListFromCart.toJS()\r\n    const orderMenu = transformOrderMenuForStore(action.orderMenu)\r\n\r\n    let menuFromCart = getMenuFromCart(itemListFromCart, orderMenu)\r\n\r\n    // if product exists in cart\r\n    if (!isNil(menuFromCart)) {\r\n      // increase its quantity\r\n      increaseQuantity(menuFromCart)\r\n    } else {\r\n      // push it\r\n      itemListFromCart.push(orderMenu)\r\n    }\r\n\r\n    // uncomment to debug circular references errors.\r\n    // try {\r\n    return state.mergeIn(['itemList'], fromJS(itemListFromCart))\r\n    // } catch (e) {\r\n    //   console.error(e)\r\n    //   console.log(itemListFromCart)\r\n    //   console.log(getCircularCulprit(itemListFromCart))\r\n    //   // avoid crashing the plugin, just log the error and return\r\n    //   return state\r\n    // }\r\n  }\r\n\r\n  return state\r\n}\r\n\r\nconst updateOrderMenuOnCart = (state, action) => {\r\n  let itemListFromCart = state.get('itemList')\r\n  if (!isNil(itemListFromCart)) {\r\n    itemListFromCart = itemListFromCart.toJS()\r\n\r\n    const orderMenu = transformOrderMenuForStore(action.orderMenu)\r\n\r\n    itemListFromCart = updateItem(itemListFromCart, orderMenu)\r\n    return state.mergeIn(['itemList'], fromJS(itemListFromCart))\r\n  }\r\n\r\n  return state\r\n}\r\n\r\nconst duplicateItemOnCart = (state, action) => {\r\n  let itemListFromCart = state.get('itemList')\r\n  if (!isNil(itemListFromCart)) {\r\n    itemListFromCart = itemListFromCart.toJS()\r\n    const item = action.item\r\n\r\n    if (item.isProduct) {\r\n      let productFromCart = getProductFromCartWithOrderId(itemListFromCart, item.orderId)\r\n      // if product exists in cart\r\n      if (!isNil(productFromCart)) {\r\n        // increase its quantity\r\n        increaseQuantity(productFromCart)\r\n      }\r\n    } else if (item.isMenu) {\r\n      let menuFromCart = getMenuFromCartWithOrderId(itemListFromCart, item.orderId)\r\n      // if menu exists in cart\r\n      if (!isNil(menuFromCart)) {\r\n        // increase its quantity\r\n        increaseQuantity(menuFromCart)\r\n      }\r\n    }\r\n\r\n    return state.mergeIn(['itemList'], fromJS(itemListFromCart))\r\n  }\r\n\r\n  return state\r\n}\r\n\r\nconst removeFromCart = (state, action) => {\r\n  let itemListFromCart = state.get('itemList')\r\n  if (!isNil(itemListFromCart)) {\r\n    itemListFromCart = itemListFromCart.toJS()\r\n    let item = action.item\r\n\r\n    let itemFromCart\r\n    switch (item.type) {\r\n      case CatalogItemType.PRODUCT:\r\n        itemFromCart = getProductFromCartWithOrderId(itemListFromCart, item.orderId)\r\n        break\r\n\r\n      case CatalogItemType.MENU:\r\n        itemFromCart = getMenuFromCartWithOrderId(itemListFromCart, item.orderId)\r\n        break\r\n\r\n      default:\r\n        Logger.warn('CART_ERROR', `Item's type to remove from cart not found. ID: ${item.id}`)\r\n    }\r\n\r\n    if (!isNil(itemFromCart)) {\r\n      decreaseQuantity(itemFromCart)\r\n    } else {\r\n      Logger.warn('CART_ERROR', `Item to remove from cart not found. ID: ${item.id}`)\r\n    }\r\n\r\n    return state.mergeIn(['itemList'], fromJS(itemListFromCart))\r\n  }\r\n\r\n  return state\r\n}\r\n\r\nconst deleteFromCart = (state, action) => {\r\n  let itemListFromCart = state.get('itemList')\r\n  if (!isNil(itemListFromCart)) {\r\n    itemListFromCart = itemListFromCart.toJS()\r\n    let item = action.item\r\n\r\n    itemListFromCart = deleteItemFromCart(itemListFromCart, item)\r\n    return state.setIn(['itemList'], fromJS(itemListFromCart))\r\n  }\r\n\r\n  return state\r\n}\r\n\r\nconst updateOrderProductOnCart = (state, action) => {\r\n  let itemListFromCart = state.get('itemList')\r\n  if (!isNil(itemListFromCart)) {\r\n    itemListFromCart = itemListFromCart.toJS()\r\n    const orderProduct = action.orderProduct\r\n    itemListFromCart = updateItem(itemListFromCart, orderProduct)\r\n    return state.mergeIn(['itemList'], fromJS(itemListFromCart))\r\n  }\r\n\r\n  return state\r\n}\r\n\r\nconst setModificationDate = (state, action) => state.set('modificationDate', action.date)\r\n\r\n// TODO: should be refactored to not be duplicated from orderSettings\r\nconst setMinimumPrice = (state, action) => state.set('minimumPrice', action.minimumPrice)\r\n\r\nconst updateComment = (state, action) => state.set('comment', action.comment)\r\n\r\nconst setSuspendedDatas = (state, action) =>\r\n  state\r\n    .set('suspendedItem', fromJS(action.suspendedItem))\r\n    .set('suspendedActionType', action.suspendedActionType)\r\n\r\nconst resetCart = state =>\r\n  state\r\n    .set('itemList', fromJS([]))\r\n    .set('modificationDate', null)\r\n    .set('comment', '')\r\n\r\nconst setCart = (state, action) => state.set('itemList', fromJS(action.itemList))\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  itemList: [],\r\n  suspendedItem: null,\r\n  suspendedActionType: null,\r\n  minimumPrice: 0,\r\n  modificationDate: null,\r\n  comment: '',\r\n})\r\n\r\nexport const cartReducer = createReducer(DEFAULT, {\r\n  [CartAction.ADD_TO_CART_FROM_SHORTCUT]: addToCartFromShortcut,\r\n  [CartAction.ADD_ORDER_PRODUCT_TO_CART]: addOrderProductToCart,\r\n  [CartAction.UPDATE_ORDER_PRODUCT_ON_CART]: updateOrderProductOnCart,\r\n  [CartAction.ADD_ORDER_MENU_TO_CART]: addOrderMenuToCart,\r\n  [CartAction.UPDATE_ORDER_MENU_ON_CART]: updateOrderMenuOnCart,\r\n  [CartAction.DUPLICATE_ITEM_ON_CART]: duplicateItemOnCart,\r\n  [CartAction.REMOVE_FROM_CART]: removeFromCart,\r\n  [CartAction.DELETE_FROM_CART]: deleteFromCart,\r\n  [CartAction.SET_MODIFICATION_DATE]: setModificationDate,\r\n  [CartAction.SET_MINIMUM_PRICE]: setMinimumPrice,\r\n  [CartAction.UPDATE_COMMENT]: updateComment,\r\n  [CartAction.SET_CART]: setCart,\r\n  [CartAction.SET_SUSPENDED_DATAS]: setSuspendedDatas,\r\n  [CartAction.RESET_CART]: resetCart,\r\n})\r\n","// return true if the success date is not the same as the last order preview send,\r\n// or if the date of sending the post order preview is earlier than the last modification of cart\r\nexport const isLastPreview = (date, sendDate, modificationDate) => {\r\n  if (sendDate !== date || sendDate <= modificationDate) {\r\n    // do nothing\r\n    return false\r\n  }\r\n\r\n  return true\r\n}\r\n","//\r\n// Listing of possible payment errors.\r\n//\r\n\r\nconst PaymentAsyncErrors = {\r\n  200: 'global.post_payment.error.200',\r\n  201: 'global.post_payment.error.201',\r\n  202: 'global.post_payment.error.202',\r\n  203: 'global.post_payment.error.203',\r\n}\r\n\r\nconst PaymentErrorsList = {\r\n  101: 'global.post_payment.error.101',\r\n  106: 'global.post_payment.error.106',\r\n  107: 'global.post_payment.error.107',\r\n  109: 'global.post_payment.error.109',\r\n  110: 'global.post_payment.error.110',\r\n  112: 'global.post_payment.error.112',\r\n  113: 'global.post_payment.error.113',\r\n  115: 'global.post_payment.error.115',\r\n  116: 'global.post_payment.error.116',\r\n  117: 'global.post_payment.error.117',\r\n  118: 'global.post_payment.error.118',\r\n  119: 'global.post_payment.error.119',\r\n  121: 'global.post_payment.error.121',\r\n  124: 'global.post_payment.error.124',\r\n  401: 'global.post_payment.error.401',\r\n  411: 'global.post_payment.error.411',\r\n\r\n  // user canceled async payment\r\n  // TODO: change i18n, this is not a 3DS in some cases: payment via iframe (TRD)\r\n  499: 'global.post_payment.error.custom.499',\r\n\r\n  ...PaymentAsyncErrors,\r\n  default: 'global.post_payment.error.default',\r\n}\r\n\r\nexport const PaymentPdfErrorsList = {\r\n  ...PaymentErrorsList,\r\n  default: 'global.get_payment_pdf.error.default',\r\n}\r\n\r\nexport default PaymentErrorsList\r\n","import PaymentErrorsList from './PaymentErrorsList'\r\n\r\nconst PaymentAsyncErrors = {\r\n  200: 'global.post_order.error.200',\r\n  201: 'global.post_order.error.201',\r\n  202: 'global.post_order.error.202',\r\n  203: 'global.post_order.error.203',\r\n}\r\n\r\n// TODO: I18n\r\nconst OrderErrors = {\r\n  POST: {\r\n    //\r\n    // Order errors\r\n    //\r\n    100: 'global.post_order.error.100',\r\n    102: 'global.post_order.error.102',\r\n    103: 'global.post_order.error.103',\r\n    104: 'global.post_order.error.104',\r\n    139: 'global.post_order.error.139',\r\n    141: 'global.post_order.error.141',\r\n    142: 'global.post_order.error.142',\r\n    150: 'global.post_order.error.150',\r\n    151: 'global.post_order.error.151',\r\n\r\n    180: 'global.post_order.error.180',\r\n\r\n    ...PaymentErrorsList,\r\n    ...PaymentAsyncErrors,\r\n\r\n    432: 'global.post_order.error.432',\r\n    default: 'global.post_order.error.default',\r\n  },\r\n}\r\n\r\nexport default OrderErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport OrderErrors from '../errors/OrderErrors'\r\n\r\nconst OrderPreviewApi = {\r\n  post: (\r\n    orderPreview,\r\n    {\r\n      applyCartModifiers = true,\r\n      getAdmissionFeesAmount = true,\r\n      getMaxGrantableAmount = true,\r\n      // verifyUserAccount = useful for catering\r\n      // but we don't have any catering customer anymore\r\n      // except BETC but they directly use the API\r\n      // AND we have a bug with CashPad where the verification fails even if the message says\r\n      // \"Missing customer id or external_id, a new customer will be created on order push\"\r\n      // aka. not a blocking error, so it should not make the OrderPreview fails\r\n      // (which is problematic now that we need the OrderPreview to be succeeded before we post the Order)\r\n      // => desactivating the userAccount verification when OrderPreview is made from our UI\r\n      verifyUserAccount = false,\r\n      postOrderIfSucceeded = false,\r\n    }\r\n  ) => ({\r\n    endpoint: ApiEndpoints.ORDER_PREVIEW,\r\n    query: {\r\n      applyCartModifiers,\r\n      getAdmissionFeesAmount,\r\n      getMaxGrantableAmount,\r\n      verifyUserAccount,\r\n      postOrderIfSucceeded,\r\n    },\r\n    type: 'POST',\r\n    body: orderPreview,\r\n    errorHandler: OrderErrors.POST,\r\n  }),\r\n}\r\n\r\nexport default OrderPreviewApi\r\n","import createAction from '../redux/createAction'\r\nimport OrderPreviewApi from 'pmt-modules/api/calls/OrderPreviewApi'\r\nimport {\r\n  createApiCallAction,\r\n  createApiEnumAction,\r\n  createTestApiCallAction,\r\n} from 'pmt-modules/api/utils'\r\n\r\nimport { transformCartForApi } from './utils/transformForApi/transformCartForApi'\r\n\r\nexport const PostOrderPreviewAction = {\r\n  ...createApiEnumAction('ORDER_PREVIEW::POST'),\r\n  RESET: 'ORDER_PREVIEW::RESET',\r\n  RESET_ERROR: 'ORDER_PREVIEW::RESET::ERROR',\r\n  SET_MODIFICATION_DATE: 'ORDER_PREVIEW::SET_MODIFICATION_DATE',\r\n}\r\n\r\n// options:\r\n// send to the API\r\n// - applyCartModifiers\r\n// - getAdmissionFeesAmount\r\n// - getMaxGrantableAmount\r\n// - verifyUserAccount\r\n// - postOrderIfSucceeded: automatically do a postOrder if the preview succeed.\r\nexport const postOrderPreview = (orderPreview, catalog, upsellingData, options = {}) => {\r\n  const sentOrderPreview = transformCartForApi(orderPreview)\r\n\r\n  return createApiCallAction(\r\n    PostOrderPreviewAction,\r\n    OrderPreviewApi.post(sentOrderPreview, options),\r\n    {\r\n      currentCart: orderPreview,\r\n      sentOrderPreview,\r\n      catalog,\r\n      upsellingData,\r\n      options,\r\n    }\r\n  )\r\n}\r\n\r\nexport const postOrderPreviewFixture = (orderPreview, catalog) => {\r\n  const sentOrderPreview = transformCartForApi(orderPreview)\r\n\r\n  return createTestApiCallAction(PostOrderPreviewAction, true, {\r\n    data: {\r\n      currentCart: orderPreview,\r\n      sentOrderPreview,\r\n      catalog,\r\n    },\r\n    response: sentOrderPreview,\r\n  })\r\n}\r\n\r\nexport const setOrderPreviewModificationDate = modificationDate =>\r\n  createAction(PostOrderPreviewAction.SET_MODIFICATION_DATE, {\r\n    modificationDate,\r\n  })\r\n\r\nexport const resetOrderPreview = () => createAction(PostOrderPreviewAction.RESET)\r\n\r\nexport const resetOrderPreviewError = () => createAction(PostOrderPreviewAction.RESET_ERROR)\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\nexport const ModifiersVerificationsReason = {\r\n  /**\r\n   * No CartModifier found for provided code\r\n   */\r\n  CODE_NOT_FOUND: 'CODE_NOT_FOUND',\r\n\r\n  /**\r\n   * CartModifier limit date is in the past\r\n   */\r\n  CART_MODIFIER_EXPIRED: 'CART_MODIFIER_EXPIRED',\r\n\r\n  /**\r\n   * The User needs to be logged-in\r\n   */\r\n  CART_MODIFIER_REQUIRES_USER_AUTHENTICATION: 'CART_MODIFIER_REQUIRES_USER_AUTHENTICATION',\r\n\r\n  /**\r\n   * In case there is already another CartModifier applied which hasn't been applied with a code OR if the CartModifier cannot be applied because its required conditions are not met\r\n   */\r\n  CART_MODIFIER_NOT_APPLICABLE: 'CART_MODIFIER_NOT_APPLICABLE',\r\n}\r\n\r\nexport const getVerificationsModifiersReasonLabel = reason => {\r\n  switch (reason) {\r\n    case ModifiersVerificationsReason.CODE_NOT_FOUND:\r\n      return tr('global.order.verifications.modifiers.reason.CODE_NOT_FOUND')\r\n    case ModifiersVerificationsReason.CART_MODIFIER_EXPIRED:\r\n      return tr('global.order.verifications.modifiers.reason.CART_MODIFIER_EXPIRED')\r\n    case ModifiersVerificationsReason.CART_MODIFIER_REQUIRES_USER_AUTHENTICATION:\r\n      return tr(\r\n        'global.order.verifications.modifiers.reason.CART_MODIFIER_REQUIRES_USER_AUTHENTICATION'\r\n      )\r\n    case ModifiersVerificationsReason.CART_MODIFIER_NOT_APPLICABLE:\r\n      return tr('global.order.verifications.modifiers.reason.CART_MODIFIER_NOT_APPLICABLE')\r\n    default:\r\n      return reason\r\n  }\r\n}\r\n","import isNil from 'lodash/isNil'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { createFormatter } from 'pmt-utils/format'\r\n\r\nexport const formatUserAccount = data => {\r\n  if (!isNil(data.userAccount)) {\r\n    data.userAccount.amountFormatted = formatPriceWithCurrency(data.userAccount.amount)\r\n    if (!isNil(data.userAccount.subsidies)) {\r\n      data.userAccount.subsidies.grantAmountFormatted = formatPriceWithCurrency(\r\n        data.userAccount.subsidies.grantAmount\r\n      )\r\n    }\r\n  }\r\n\r\n  return data\r\n}\r\n\r\nexport const formatVerifications = createFormatter(formatUserAccount)\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { formatOrder } from 'pmt-modules/order/format'\r\n\r\nimport { formatVerifications } from './format'\r\n\r\nconst getState = state => state.entities.orderPreview\r\n\r\nexport const getSendDate = createSelector([getState], state => state.get('sendDate'))\r\nexport const getModificationDate = createSelector([getState], state =>\r\n  state.get('modificationDate')\r\n)\r\n\r\nexport const isFetchingOrderPreview = createSelector([getState], state => state.get('isFetching'))\r\n\r\nexport const getOrderPreview = createSelector([getState], state => {\r\n  if (isNil(state)) {\r\n    return null\r\n  }\r\n  const order = state.get('order', null)\r\n  return order ? formatOrder(order) : null\r\n})\r\n\r\nexport const getOrderPreviewError = createSelector([getState], state => {\r\n  if (isNil(state)) {\r\n    return null\r\n  }\r\n  return state.get('error', null)\r\n})\r\n\r\nexport const getOrderPreviewVerifications = createSelector([getState], state => {\r\n  if (isNil(state)) {\r\n    return null\r\n  }\r\n  const verifications = state.get('verifications', null)\r\n  return verifications ? formatVerifications(verifications) : null\r\n})\r\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    arrayMap = require('./_arrayMap'),\n    baseUnary = require('./_baseUnary'),\n    cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      isCommon = true,\n      length = array.length,\n      result = [],\n      valuesLength = values.length;\n\n  if (!length) {\n    return result;\n  }\n  if (iteratee) {\n    values = arrayMap(values, baseUnary(iteratee));\n  }\n  if (comparator) {\n    includes = arrayIncludesWith;\n    isCommon = false;\n  }\n  else if (values.length >= LARGE_ARRAY_SIZE) {\n    includes = cacheHas;\n    isCommon = false;\n    values = new SetCache(values);\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee == null ? value : iteratee(value);\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var valuesIndex = valuesLength;\n      while (valuesIndex--) {\n        if (values[valuesIndex] === computed) {\n          continue outer;\n        }\n      }\n      result.push(value);\n    }\n    else if (!includes(values, computed, comparator)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseDifference;\n","var baseDifference = require('./_baseDifference'),\n    baseFlatten = require('./_baseFlatten'),\n    baseRest = require('./_baseRest'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    last = require('./last');\n\n/**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\nvar differenceWith = baseRest(function(array, values) {\n  var comparator = last(values);\n  if (isArrayLikeObject(comparator)) {\n    comparator = undefined;\n  }\n  return isArrayLikeObject(array)\n    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n    : [];\n});\n\nmodule.exports = differenceWith;\n","import isEqual from 'lodash/isEqual'\r\nimport sortBy from 'lodash/sortBy'\r\nimport forEach from 'lodash/forEach'\r\nimport isEqualWith from 'lodash/isEqualWith'\r\nimport { findOnArray } from 'pmt-utils/array'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nconst areProductOptionValuesEqual = (optionToCheck, optionToCompare) => {\r\n  const toCheckValues = optionToCheck.values\r\n  const toCompareValues = optionToCompare.values\r\n\r\n  if (toCompareValues.length !== toCheckValues.length) {\r\n    return false\r\n  }\r\n\r\n  const isEqual = isEqualWith(\r\n    toCheckValues,\r\n    toCompareValues,\r\n    (optionValuesToCheck, optionValuesToCompare) => {\r\n      //\r\n      // verify each option value\r\n      //\r\n      let i = 0\r\n      let length = optionValuesToCheck.length\r\n      while (i < length) {\r\n        const optionValueToCheck = optionValuesToCheck[i]\r\n        const optionValueToCompare = optionValuesToCompare[i]\r\n        const valueIsEqual = optionValueToCheck.id === optionValueToCompare.id\r\n\r\n        if (!valueIsEqual) {\r\n          return false\r\n        }\r\n        ++i\r\n      }\r\n      return true\r\n    }\r\n  )\r\n\r\n  return isEqual\r\n}\r\n\r\nconst areProductOptionsEqual = (productToCheck, productToCompare) => {\r\n  if (productToCheck.options.length !== productToCompare.options.length) {\r\n    return false\r\n  }\r\n\r\n  let haveSameOptions = true\r\n  forEach(productToCheck.options, optionToCheck => {\r\n    const optionFound = findOnArray(\r\n      productToCompare.options,\r\n      optionToCompare => optionToCheck.id === optionToCompare.id\r\n    )\r\n\r\n    if (isUndefined(optionFound)) {\r\n      haveSameOptions = false\r\n      return false // quit loop\r\n    }\r\n\r\n    haveSameOptions = areProductOptionValuesEqual(optionToCheck, optionFound)\r\n\r\n    if (!haveSameOptions) {\r\n      return false // quit loop\r\n    }\r\n  })\r\n\r\n  return haveSameOptions\r\n}\r\n\r\nconst areProductModifiersEqual = (productToCheck, productToCompare) => {\r\n  return isEqual(sortBy(productToCheck.modifierIds), sortBy(productToCompare.modifierIds))\r\n}\r\n\r\nconst areSameApiProduct = (productToCheck, productToCompare) => {\r\n  const checkOptions =\r\n    (productToCheck.options || []).length > 0 || (productToCompare.options || []).length > 0\r\n\r\n  return (\r\n    productToCheck.id === productToCompare.id &&\r\n    productToCheck.comment === productToCompare.comment &&\r\n    productToCheck.price === productToCompare.price &&\r\n    areProductModifiersEqual(productToCheck, productToCompare) &&\r\n    (!checkOptions || areProductOptionsEqual(productToCheck, productToCompare))\r\n  )\r\n}\r\n\r\nexport default areSameApiProduct\r\n","import isUndefined from 'lodash/isUndefined'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isEqualWith from 'lodash/isEqualWith'\r\nimport each from 'lodash/each'\r\nimport sortBy from 'lodash/sortBy'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport areSameApiProduct from './areSameApiProduct'\r\n\r\n// TODO: unit tests\r\n\r\nexport const areMenuModifiersEqual = (menuToCheck, menuToCompare) => {\r\n  return isEqual(sortBy(menuToCheck.modifierIds || []), sortBy(menuToCompare.modifierIds || []))\r\n}\r\n\r\n// check if products contained in parts are equal\r\nexport const areMenuPartProductsEqual = (partToCheck, partToCompare) => {\r\n  const toCheckValues = partToCheck.products\r\n  const toCompareValues = partToCompare.products\r\n\r\n  if (toCompareValues.length !== toCheckValues.length) {\r\n    return false\r\n  }\r\n\r\n  const isEqual = isEqualWith(\r\n    toCheckValues,\r\n    toCompareValues,\r\n    (productsToCheck, productsToCompare) => {\r\n      //\r\n      // verify each option value\r\n      //\r\n      let i = 0\r\n      let length = productsToCheck.length\r\n      while (i < length) {\r\n        const productToCheck = productsToCheck[i]\r\n        const productToCompare = productsToCompare[i]\r\n        const productIsEqual = areSameApiProduct(productToCheck, productToCompare)\r\n\r\n        if (!productIsEqual) {\r\n          return false\r\n        }\r\n        ++i\r\n      }\r\n      return true\r\n    }\r\n  )\r\n\r\n  return isEqual\r\n}\r\n\r\n// check if menu parts are equal\r\nexport const areMenuPartsEqual = (menuToCheck, menuToCompare) => {\r\n  if (menuToCheck.parts.length !== menuToCompare.parts.length) {\r\n    return false\r\n  }\r\n\r\n  let haveSameParts = true\r\n  each(menuToCheck.parts, partToCheck => {\r\n    let partFound = findOnArray(\r\n      menuToCompare.parts,\r\n      partToCompare => partToCheck.id === partToCompare.id\r\n    )\r\n\r\n    if (isUndefined(partFound)) {\r\n      haveSameParts = false\r\n      return false // quit loop\r\n    }\r\n\r\n    haveSameParts = areMenuPartProductsEqual(partToCheck, partFound)\r\n    if (!haveSameParts) {\r\n      return false // quit loop\r\n    }\r\n  })\r\n\r\n  return haveSameParts\r\n}\r\n\r\nconst areSameApiMenu = (menuToCheck, menuToCompare) => {\r\n  return (\r\n    menuToCheck.id === menuToCompare.id &&\r\n    areMenuPartsEqual(menuToCheck, menuToCompare) &&\r\n    areMenuModifiersEqual(menuToCheck, menuToCompare)\r\n  )\r\n}\r\n\r\nexport default areSameApiMenu\r\n","import invariant from 'invariant'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { orderProductModifier } from 'pmt-modules/orderProduct/modifiers'\r\nimport { createOrderProductFromProduct } from 'pmt-modules/orderProduct/utils'\r\nimport { getProductFromPart } from 'pmt-modules/orderMenu/utils'\r\nimport { getProductFromCatalog } from 'pmt-modules/catalog/utils'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\n//\r\n// Recreate an orderProduct for our front\r\n// Note: we need to merge product and menu from the api with our menu\r\n// but some items are modified by the API to include promotions.\r\n// So the data from the API is priotary\r\n// We create the items with our catalog and then spread each object and sub-object\r\n// with api's item\r\n//\r\n// - options:\r\n//    - isMenuMode\r\n//    - part\r\n//    - apiPart\r\n//    - tracking\r\n//\r\nconst reconciliateOrderProductFromApi = (apiOrderProduct, catalog, upsellingData, options = {}) => {\r\n  // remove data from the reconciliate algorithm\r\n  delete apiOrderProduct.orderIds\r\n  delete apiOrderProduct.baseOrderId\r\n\r\n  // the apiOrderProduct does not have the same data as our front data\r\n  // set the required data for our orderProductModifier to not mess with the data\r\n\r\n  // -- setting quantity on options values\r\n  // our front data contains all the options, and set a `quantity` to 1 on the values\r\n  // that has been selected\r\n  apiOrderProduct.options = apiOrderProduct.options.map(option => {\r\n    option.values = option.values.map(value => {\r\n      // set quantity to 1\r\n      value.quantity = 1\r\n      return value\r\n    })\r\n    return option\r\n  })\r\n\r\n  // take product from the catalog\r\n  let orderProduct\r\n\r\n  if (options.isMenuMode !== true) {\r\n    const catalogProduct = getProductFromCatalog(catalog, upsellingData, apiOrderProduct.id)\r\n\r\n    if (!catalogProduct) {\r\n      Logger.warn('Reconciliation', 'Product not found on catalog', {\r\n        apiOrderProduct,\r\n      })\r\n      return null\r\n    }\r\n\r\n    orderProduct = createOrderProductFromProduct(catalogProduct)\r\n  } else {\r\n    invariant(!isNil(options.part), 'options.part required with isMenuMode set to true')\r\n    orderProduct = getProductFromPart(options.part, apiOrderProduct)\r\n  }\r\n\r\n  orderProduct = {\r\n    ...orderProduct,\r\n    ...apiOrderProduct,\r\n    //\r\n    // merge options\r\n    //\r\n    options: isNil(orderProduct.options)\r\n      ? []\r\n      : orderProduct.options.map(option => {\r\n          // merge with api option\r\n          const apiOption = findOnArray(apiOrderProduct.options, o => o.id === option.id)\r\n\r\n          // option found on api data, values has been chosen\r\n          if (!isNil(apiOption)) {\r\n            option.values = option.values.map(value => {\r\n              // copy value to skip reference problems\r\n              const valueCopy = { ...value }\r\n\r\n              // merge with api option value\r\n              const apiOptionValue = findOnArray(apiOption.values, v => v.id === valueCopy.id)\r\n\r\n              if (!isNil(apiOptionValue)) {\r\n                // option value found on api data, value has been chosen\r\n                valueCopy.quantity = 1\r\n              } else {\r\n              }\r\n\r\n              return valueCopy\r\n            })\r\n          }\r\n\r\n          return option\r\n        }),\r\n  }\r\n\r\n  // generate orderId if don't have one\r\n\r\n  return orderProductModifier(orderProduct, {\r\n    isMenuMode: options.isMenuMode,\r\n    isOrderPreviewMode: true,\r\n  })\r\n}\r\n\r\nexport default reconciliateOrderProductFromApi\r\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\n\r\nimport { orderMenuModifier } from 'pmt-modules/orderMenu/modifiers'\r\nimport { createOrderMenuFromMenu, getProductFromPart } from 'pmt-modules/orderMenu/utils'\r\nimport { getMenuFromCatalog } from 'pmt-modules/catalog/utils'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\n\r\nimport { CatalogItemType } from 'pmt-modules/catalog/constants'\r\nimport reconciliateOrderProductFromApi from './reconciliateOrderProductFromApi'\r\n\r\n// this function is used to found the products returned by the api\r\n// inside every subcategories in the menu part\r\nconst recursiveRetrievePart = (part, apiPart, foundProducts, catalog, upsellingData) => {\r\n  let recursive = null\r\n\r\n  if (!isNil(part.categories) && !isEmpty(part.categories)) {\r\n    part.categories = part.categories.map(partCategory => {\r\n      recursive = recursiveRetrievePart(\r\n        partCategory,\r\n        apiPart,\r\n        foundProducts,\r\n        catalog,\r\n        upsellingData\r\n      )\r\n      foundProducts = recursive.foundProducts\r\n\r\n      return recursive.part\r\n    })\r\n  }\r\n\r\n  if (!isNil(part.products)) {\r\n    part.products = part.products.map(product => {\r\n      let productToReturn = product\r\n      let apiProductFound = null\r\n\r\n      apiPart.products.forEach(apiProduct => {\r\n        if (\r\n          isNil(apiProductFound) &&\r\n          // skip the multiple selection if a product is several times in a part (subpart contained)\r\n          isEmpty(foundProducts.filter(foundProduct => foundProduct.id === apiProduct.id))\r\n        ) {\r\n          // make sur the product exists in the part and is the same as the product to return\r\n          // if we don't check the last parameter above, we make every product of the part the same\r\n          const productFromPart = getProductFromPart(part, apiProduct)\r\n          const apiProductFound =\r\n            !isNil(productFromPart) && productFromPart.id === productToReturn.id\r\n              ? productFromPart\r\n              : null\r\n\r\n          if (!isNil(apiProductFound)) {\r\n            const reconciliatedProduct = reconciliateOrderProductFromApi(\r\n              apiProduct,\r\n              catalog,\r\n              upsellingData,\r\n              {\r\n                isMenuMode: true,\r\n                part,\r\n                apiPart,\r\n              }\r\n            )\r\n            reconciliatedProduct.quantity = 1\r\n\r\n            productToReturn = reconciliatedProduct\r\n            foundProducts.push(productToReturn)\r\n          }\r\n        }\r\n      })\r\n\r\n      return productToReturn\r\n    })\r\n  }\r\n\r\n  return {\r\n    part,\r\n    foundProducts,\r\n  }\r\n}\r\n\r\n//\r\n// Recreate an orderMenu for our front\r\n// Note: we need to merge menu and menu from the api with our menu\r\n// but some items are modified by the API to include promotions.\r\n// So the data from the API is priotary\r\n// We create the items with our catalog and then spread each object and sub-object\r\n// with api's item\r\n//\r\nconst reconciliateOrderMenuFromApi = (apiOrderMenu, catalog, upsellingData) => {\r\n  // remove data from the reconciliate algorithm\r\n  delete apiOrderMenu.orderIds\r\n  delete apiOrderMenu.baseOrderId\r\n\r\n  // take the menu from the catalog\r\n  const menu = getMenuFromCatalog(catalog, upsellingData, apiOrderMenu.id)\r\n\r\n  if (!menu) {\r\n    Logger.warn('Reconciliation', 'Menu not found on catalog', { apiOrderMenu })\r\n    // menu not found on catalog\r\n    return null\r\n  }\r\n\r\n  let orderMenu = createOrderMenuFromMenu(menu)\r\n\r\n  // add missing type\r\n  orderMenu.type = CatalogItemType.MENU\r\n\r\n  orderMenu = {\r\n    ...orderMenu,\r\n    ...apiOrderMenu,\r\n    parts: orderMenu.parts.map(part => {\r\n      const apiPart = apiOrderMenu.parts.filter(apiPart => apiPart.id === part.id).pop()\r\n\r\n      if (apiPart) {\r\n        const result = recursiveRetrievePart(part, apiPart, [], catalog, upsellingData)\r\n        return cloneDeep(result.part)\r\n      }\r\n\r\n      return part\r\n    }),\r\n  }\r\n\r\n  return orderMenuModifier(orderMenu, {\r\n    isOrderPreviewMode: true,\r\n  })\r\n}\r\n\r\nexport default reconciliateOrderMenuFromApi\r\n","import isNil from 'lodash/isNil'\r\nimport isNull from 'lodash/isNull'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport concat from 'lodash/concat'\r\nimport Logger from 'pmt-utils/logger'\r\nimport invariant from 'invariant'\r\nimport differenceWith from 'lodash/differenceWith'\r\nimport each from 'lodash/each'\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport { getOrderedArray, findOnArray, existsOnArray } from 'pmt-utils/array'\r\nimport { CatalogItemType } from 'pmt-modules/catalog/constants'\r\nimport { areSameProduct } from 'pmt-modules/orderProduct/utils'\r\nimport areSameApiProduct from '../areSameApiProduct'\r\nimport areSameApiMenu from '../areSameApiMenu'\r\nimport { areSameMenu } from 'pmt-modules/orderMenu/utils'\r\n\r\nimport reconciliateOrderProductFromApi from './reconciliateOrderProductFromApi'\r\nimport reconciliateOrderMenuFromApi from './reconciliateOrderMenuFromApi'\r\n// import { findIndexOnArray } from '../../../../../utils/src/array'\r\n\r\n/**\r\n * When sending an order the Api on the order-preview service, the Api can return a\r\n * differrent cart, because it applied promotions on it.\r\n * We need to take the returned cart (`apiCart`) and recreate a cart for our front.\r\n * We use the `currentCart` and `sentCart` to the API to help us reconciliate the\r\n * data and create the new cart.\r\n *\r\n * @param {Cart} apiCart\r\n * @param {Cart} currentCart\r\n * @param {Cart} sentCart\r\n * @param {Catalog} catalog\r\n * @param {UpsellingData} upsellingData\r\n */\r\nconst reconciliateOrderFromApi = (apiCart, currentCart, sentCart, catalog, upsellingData) => {\r\n  // temporary arrays to set apiCart products and menus reconciliate.\r\n  let products = []\r\n  let menus = []\r\n\r\n  //\r\n  // products\r\n  //\r\n\r\n  const apiCartProducts = cloneDeep(apiCart.products || [])\r\n\r\n  apiCartProducts.forEach(apiProduct => {\r\n    let product = null\r\n\r\n    // set type, required by `areSameProduct`\r\n    apiProduct.type = CatalogItemType.PRODUCT\r\n\r\n    // try to find an existing product\r\n    product = findOnArray(products, p => areSameProduct(apiProduct, p))\r\n\r\n    if (isNull(product)) {\r\n      // new product\r\n      apiProduct.quantity = 1\r\n      // orderIds contains all the orderId ids of duplicates products\r\n      apiProduct.orderIds = [apiProduct.orderId]\r\n      products.push(apiProduct)\r\n    } else {\r\n      // product already exists, update quantity\r\n      product.quantity++\r\n      // orderIds contains all the orderId ids of duplicates products\r\n      product.orderIds.push(apiProduct.orderId)\r\n    }\r\n  })\r\n\r\n  //\r\n  // products\r\n  //\r\n\r\n  const apiCartMenus = apiCart.menus || []\r\n\r\n  apiCartMenus.forEach(apiMenu => {\r\n    let menu = null\r\n\r\n    // set type, required by `areSameMenu`\r\n    apiMenu.type = CatalogItemType.MENU\r\n\r\n    // modify api data to have the data required for our functions, such as `areSameMenu`\r\n    // to work\r\n\r\n    apiMenu.parts = apiMenu.parts.map(part => {\r\n      if (!isNil(part.products)) {\r\n        part.products = part.products.map(product => {\r\n          // required for areSameMenu\r\n          // an api product has always a quantity of 1\r\n          product.quantity = 1\r\n\r\n          // required by areSameProduct on areSameMenu\r\n          product.type = CatalogItemType.PRODUCT\r\n\r\n          product.options = product.options.map(option => {\r\n            option.values = option.values.map(value => {\r\n              value.quantity = 1\r\n              return value\r\n            })\r\n            return option\r\n          })\r\n\r\n          return product\r\n        })\r\n      }\r\n      return part\r\n    })\r\n\r\n    // try to find an existing menu\r\n    menu = findOnArray(menus, p => areSameMenu(apiMenu, p))\r\n\r\n    if (isNull(menu)) {\r\n      // new product\r\n      apiMenu.quantity = 1\r\n      // orderIds contains all the orderId ids of duplicates menus\r\n      apiMenu.orderIds = [apiMenu.orderId]\r\n      menus.push(apiMenu)\r\n    } else {\r\n      // menu already exists, update quantity\r\n      menu.quantity++\r\n      // orderIds contains all the orderId ids of duplicates menus\r\n      menu.orderIds.push(apiMenu.orderId)\r\n    }\r\n  })\r\n\r\n  //\r\n  // merge products and menus on cart.itemList\r\n  //\r\n  let itemList = products.concat(menus)\r\n\r\n  // keep new items from apiCart in an array\r\n  let newItems = []\r\n\r\n  //\r\n  // replace orderId of reconciliate products by their original one\r\n  // Do not change concat order\r\n  //\r\n  const sentItems = concat(sentCart.products, sentCart.menus)\r\n\r\n  itemList = itemList.map(item => {\r\n    const sentItem = findOnArray(sentItems, sentItem => {\r\n      return item.orderId === sentItem.orderId\r\n    })\r\n\r\n    if (sentItem) {\r\n      item.hasBeenAddedByApi = false\r\n      item.tracking = sentItem.tracking\r\n\r\n      // item with orderId has been found on the sentCart\r\n      // baseOrderId contains the orderId of the item on our cart\r\n      const baseOrderId = sentItem.baseOrderId\r\n\r\n      // set the orderId we currently have on our cart\r\n      // item.orderId = baseOrderId\r\n      // problem: we set the baseOrderId as orderId. But: if we have two menu that are the same\r\n      // and one is modified by the API, the modified menu will have its orderId set as the same\r\n      // orderId as the non-modified one..\r\n      const itemForBaseId = findOnArray(sentItems, sentItem => baseOrderId === sentItem.orderId)\r\n\r\n      const comparator = itemForBaseId && itemForBaseId.parts ? areSameApiMenu : areSameApiProduct\r\n      if (itemForBaseId && comparator(item, itemForBaseId)) {\r\n        // the item is the same as the item sended to the api. The api didn't modified it.\r\n        // But base item returned by the API could have been changed\r\n        // retrieve item for the base order id that is returned by the api\r\n        const apiItemForBaseOrderId = findOnArray(itemList, item => item.orderId === baseOrderId)\r\n        const sameAsItsBase = apiItemForBaseOrderId && comparator(item, apiItemForBaseOrderId)\r\n        if (sameAsItsBase) {\r\n          item.orderId = baseOrderId\r\n        }\r\n\r\n        item.hasBeenModifiedByApi = false\r\n      } else {\r\n        item.hasBeenModifiedByApi = true\r\n        // keep current orderId since the object has been modified by the API\r\n      }\r\n    } else {\r\n      // not orderId found on the sentCart,\r\n      // it can be a new item generated by the API or an item degrouped and modified by the api\r\n      const hasBeenModifiedByApi = existsOnArray(\r\n        sentItems,\r\n        sentItem => item.orderId === sentItem.orderId\r\n      )\r\n\r\n      item.hasBeenAddedByApi = !hasBeenModifiedByApi\r\n      item.hasBeenModifiedByApi = hasBeenModifiedByApi\r\n\r\n      // keep trace of 'new' items\r\n      newItems.push(item)\r\n    }\r\n    return item\r\n  })\r\n\r\n  // remove item as are new for the moment\r\n  // they are on the newItems array\r\n  itemList = itemList.filter(item => !item.hasBeenAddedByApi)\r\n\r\n  //\r\n  // retrieve the items order of the itemList from currentCart\r\n  //\r\n\r\n  // order sent to the api, with first the products and then the menu\r\n  const sentOrderIdsInOrder = sentItems\r\n    .map(item => item.orderId)\r\n    // some items can be removed by the API, filter them\r\n    .filter(orderId => existsOnArray(itemList, item => item.orderId === orderId))\r\n\r\n  // order of the ids on the cart (merged products and menus)\r\n  const cartOrderIds = currentCart.itemList.map(item => item.orderId)\r\n\r\n  const itemListIds = itemList.map(item => item.orderId)\r\n\r\n  // will contains the order ids in the final order we want them to be\r\n  let orderIdsInOrder = []\r\n\r\n  each(cartOrderIds, cartOrderId => {\r\n    const sent = existsOnArray(sentOrderIdsInOrder, orderId => orderId === cartOrderId)\r\n    if (!sent) {\r\n      return\r\n    }\r\n\r\n    const itemExists = existsOnArray(itemListIds, orderId => orderId === cartOrderId)\r\n\r\n    // item is on our current cart but does not exists anymore (removed by the API / orderId changed)\r\n    if (!itemExists) {\r\n      return\r\n    }\r\n\r\n    orderIdsInOrder.push(cartOrderId)\r\n  })\r\n\r\n  // cartOrderIds now contains all the ids of our current cart\r\n  // let's add the ids that has been added since our current cart\r\n\r\n  // contains the ids we don't have on orderIdsInOrder yet (that are not in our current cart)\r\n  const diff = differenceWith(itemListIds, orderIdsInOrder, isEqual)\r\n\r\n  // simple way: we add our diff items in the end.\r\n  orderIdsInOrder = orderIdsInOrder.concat(diff)\r\n\r\n  // TODO: more complex way to add diff objects, by inserting them on the right places\r\n  // For now, the API never send new objects so we keep the simple way\r\n  //\r\n  // each(diff, toAddOrderId => {\r\n  //   const toAddItem = findOnArray(itemList, item => item.orderId === toAddOrderId)\r\n\r\n  //   // this item is not on our cart: it has been created when we pass the quantity > 1 to multiple\r\n  //   // items\r\n  //   // we need to find the item he was refering to (baseId)\r\n  //   // const referent = findOnArray(currentCart.itemList, item => item.orderId == toAddItem.baseOrderId)\r\n  //   const referentIndex = findIndexOnArray(currentCart.itemList, item => item.orderId == toAddItem.baseOrderId)\r\n  //   // we have the referentIndex, put this after the other items that refers to it\r\n\r\n  //   // referent is in the last position, or does not exists add our item in the end\r\n  //   if (referentIndex === currentCart.itemList.length || referentIndex === -1) {\r\n  //     orderIdsInOrder.push(toAddOrderId)\r\n  //   } else {\r\n  //     // debugger\r\n  //     // // TODO: add tests for this, never called actually\r\n  //     // let inserted = false\r\n  //     // for (let index = referentIndex; index < currentCart.length; index++) {\r\n  //     //   const item = currentCart.itemList[index]\r\n  //     //   const nextItem = index < currentCart.length ? currentCart.itemList[index + 1] : null\r\n  //     //   const itemIndexOnOrderIdsInOrder = findIndexOnArray(\r\n  //     //     orderIdsInOrder,\r\n  //     //     orderId => orderId === item.orderId\r\n  //     //   )\r\n  //     //   const nextItemIndexOnOrderIdsInOrder = findIndexOnArray(\r\n  //     //     orderIdsInOrder,\r\n  //     //     orderId => orderId === nextItem.orderId\r\n  //     //   )\r\n\r\n  //     //   // current item is a referent and next item is not or is but not put on orderIsInOrder yet,\r\n  //     //   // we insert our toAddItem after\r\n  //     //   if (\r\n  //     //     item.orderId === toAddItem.baseOrderId &&\r\n  //     //     (!nextItem ||\r\n  //     //       nextItem.baseOrderId !== toAddItem.baseOrderId ||\r\n  //     //       nextItemIndexOnOrderIdsInOrder === -1)\r\n  //     //   ) {\r\n  //     //     orderIdsInOrder.splice(itemIndexOnOrderIdsInOrder, 0, toAddOrderId)\r\n  //     //     inserted = true\r\n  //     //     break\r\n  //     //   }\r\n  //     // }\r\n  //     // if (!inserted) {\r\n  //     //   console.log('algo failed for ' + toAddOrderId)\r\n  //     //   orderIdsInOrder.push(toAddOrderId)\r\n  //     // }\r\n  //   }\r\n  // })\r\n\r\n  const newItemList = getOrderedArray(\r\n    orderIdsInOrder,\r\n    itemList,\r\n    (orderId, item) => orderId === item.orderId\r\n  )\r\n\r\n  invariant(newItemList.length === itemList.length, 'getOrderedArray missed items')\r\n\r\n  itemList = newItemList\r\n\r\n  //\r\n  // our itemList is now in the same order as our currentCart\r\n  // but we need to add the products created by the API\r\n  // for now, we just add them at the end.\r\n  // TODO: put them after a corresponding item ?\r\n  // in case the item is new because of a promotion,\r\n  // we want it close to the other grouped items\r\n  //\r\n  itemList = itemList.concat(newItems)\r\n\r\n  //\r\n  // recreate items front data for our cart\r\n  // Note: we need to merge product and menu from the api with our menu\r\n  // but some items are modified by the API to include promotions.\r\n  // So the data from the API is priotary\r\n  // We create the items with our catalog and then spread each object and sub-object\r\n  // with api's item\r\n  //\r\n  itemList = itemList\r\n    .map(item => {\r\n      switch (item.type) {\r\n        case CatalogItemType.PRODUCT:\r\n          return reconciliateOrderProductFromApi(item, catalog, upsellingData)\r\n\r\n        case CatalogItemType.MENU:\r\n          return reconciliateOrderMenuFromApi(item, catalog, upsellingData)\r\n\r\n        default:\r\n          Logger.warn('Reconciliation', `Item's type to add from cart not found. ID: ${item.id}`)\r\n          return null\r\n      }\r\n    })\r\n    .filter(item => item !== null)\r\n\r\n  const cart = {}\r\n  cart.itemList = itemList\r\n  // TODO: is there any more data to put on cart?\r\n\r\n  return cart\r\n}\r\n\r\nexport default reconciliateOrderFromApi\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { setCart, getItemListFromCart } from 'pmt-modules/cart'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\n\r\nimport { PostOrderPreviewAction } from './actions'\r\nimport { isLastPreview } from './utils'\r\nimport { getSendDate, getModificationDate } from './selectors'\r\nimport reconciliateOrderFromApi from './utils/reconciliateFromApi/reconciliateOrderFromApi'\r\n\r\nconst postOrderPreviewSuccess = createMiddleware(\r\n  PostOrderPreviewAction.SUCCESS,\r\n  ({ action, dispatch, getState }) => {\r\n    if (!isNil(action.response.order)) {\r\n      const sendDate = getSendDate(getState())\r\n      const modificationDate = getModificationDate(getState())\r\n      if (\r\n        isLastPreview(action.data.currentCart.sendDate, sendDate, modificationDate) &&\r\n        !isEmpty(getItemListFromCart(getState()))\r\n      ) {\r\n        const cart = reconciliateOrderFromApi(\r\n          action.response.order, // cartFromApi\r\n          action.data.currentCart,\r\n          action.data.sentOrderPreview,\r\n          action.data.catalog,\r\n          action.data.upsellingData\r\n        )\r\n\r\n        dispatch(setCart(cart, { fromOrderPreview: true }))\r\n      }\r\n    } else {\r\n      dispatch({\r\n        type: PostOrderPreviewAction.FAILURE,\r\n        response: action.response,\r\n      })\r\n\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n  }\r\n)\r\n\r\nconst postOrderPreviewFailure = createMiddleware(\r\n  PostOrderPreviewAction.FAILURE,\r\n  ({ action, dispatch, getState }) => {\r\n    Logger.warning('OrderPreview', \"order preview didn't succeed\", action.response)\r\n  }\r\n)\r\n\r\nexport const orderPreviewMiddlewares = [postOrderPreviewSuccess, postOrderPreviewFailure]\r\n","import Immutable from 'immutable'\r\nimport forEach from 'lodash/forEach'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { cartModifierActions } from 'pmt-modules/cart'\r\nimport { createReducer } from 'pmt-modules/redux'\r\n\r\nimport { isLastPreview } from './utils'\r\nimport { PostOrderPreviewAction } from './actions'\r\n\r\nexport * from './actions'\r\n// export * from './components'\r\nexport * from './constants'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  sendDate: null,\r\n  modificationDate: null,\r\n  order: null,\r\n  error: null,\r\n  isFetching: false,\r\n  verifications: null,\r\n})\r\n\r\nconst setIsFetching = state => state.set('isFetching', true)\r\n\r\nconst setReset = state => state.merge(DEFAULT)\r\n\r\nconst resetError = state => state.merge({ error: null, isFetching: false })\r\n\r\nconst setRequest = (state, action) => {\r\n  return state.merge({\r\n    sendDate: action.data.currentCart.sendDate,\r\n    isFetching: true,\r\n    error: null,\r\n  })\r\n}\r\n\r\nconst setSuccess = (state, action) => {\r\n  // if the success date is not the same as the last order preview send,\r\n  // or if the date of sending the post order preview is earlier than the last modification of cart\r\n  // we ignore it\r\n\r\n  // we get the send date from the state because if we do it earlier, the value is the previous send date\r\n  // and not the last one\r\n  const sendDate = state.get('sendDate', null)\r\n  const modificationDate = state.get('modificationDate', null)\r\n  if (!isLastPreview(action.data.currentCart.sendDate, sendDate, modificationDate)) {\r\n    return state\r\n  }\r\n\r\n  // else we can set the new order preview state with the response\r\n  return state\r\n    .set('verifications', action.response.verifications)\r\n    .set('order', action.response.order)\r\n    .set('error', null)\r\n    .set('isFetching', false)\r\n}\r\n\r\nconst setFailure = (state, action) => {\r\n  // if the failure date is not the same as the last order preview send,\r\n  // or if the date of sending the post order preview is earlier than the last modification of cart\r\n  // we ignore it\r\n  const sendDate = state.get('sendDate', null)\r\n  const modificationDate = state.get('modificationDate', null)\r\n  if (\r\n    !isUndefined(action.data) &&\r\n    !isLastPreview(action.data.currentCart.sendDate, sendDate, modificationDate)\r\n  ) {\r\n    return state\r\n  }\r\n\r\n  // else we can set the new error preview state with the response\r\n  return state\r\n    .set('order', null)\r\n    .set('verifications', null)\r\n    .set('error', action.error || action.response)\r\n    .set('isFetching', false)\r\n}\r\n\r\nconst setModificationDate = (state, action) =>\r\n  state.set('modificationDate', action.modificationDate)\r\n\r\nconst getCartActionReducer = () => {\r\n  const reducers = {}\r\n  forEach(cartModifierActions, action => {\r\n    reducers[action] = setIsFetching\r\n  })\r\n  return reducers\r\n}\r\n\r\nexport const orderPreviewReducer = createReducer(DEFAULT, {\r\n  [PostOrderPreviewAction.RESET]: setReset,\r\n  [PostOrderPreviewAction.RESET_ERROR]: resetError,\r\n  [PostOrderPreviewAction.REQUEST]: setRequest,\r\n  [PostOrderPreviewAction.SUCCESS]: setSuccess,\r\n  [PostOrderPreviewAction.FAILURE]: setFailure,\r\n  [PostOrderPreviewAction.SET_MODIFICATION_DATE]: setModificationDate,\r\n  ...getCartActionReducer(),\r\n})\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport { OrderMode } from 'pmt-modules/order/constants'\r\n\r\nimport { getGeolocationCoordinates } from 'pmt-modules/geolocation/selectors'\r\nimport {\r\n  getRestaurantListData,\r\n  getRestaurantList,\r\n  getAllRestaurants,\r\n} from 'pmt-modules/restaurant/selectors'\r\nimport { formatRestaurant } from 'pmt-modules/restaurant/format'\r\n\r\nimport { formatRestaurantList } from 'pmt-modules/restaurant/format'\r\nimport { formatOrderFrontProperties, formatOrderFrontData } from './format'\r\n\r\nimport { getOrderSettings as getAppConfigOrderSettings } from 'pmt-modules/appConfig'\r\nimport { getUserMe } from 'pmt-modules/userMe'\r\nimport { getCartData, getItemListForApi } from 'pmt-modules/cart/selectors'\r\nimport { getOrderPreview, getOrderPreviewVerifications } from 'pmt-modules/orderPreview'\r\nimport { getOrderSettingsData } from 'pmt-modules/orderSettings'\r\n\r\nconst getOrderFrontState = state => state.entities.orderFront\r\n\r\nconst getOrderFront = createSelector([getOrderFrontState], state => {\r\n  return state ? state.toJS() : state\r\n})\r\n\r\nconst getRestaurant = createSelector(\r\n  [getAllRestaurants, getOrderFront],\r\n  (restaurantList, orderFront) => {\r\n    const restaurant = findOnArray(\r\n      restaurantList,\r\n      restaurant => restaurant.id === orderFront.restaurantId\r\n    )\r\n\r\n    if (!restaurant) {\r\n      return null\r\n    }\r\n\r\n    return formatRestaurant(restaurant, {\r\n      mode: orderFront.mode,\r\n    })\r\n  }\r\n)\r\n\r\nexport const getMode = createSelector([getOrderFront], orderFront => orderFront.mode)\r\n\r\n/**\r\n * Get all the props that we might need for our order fronts\r\n */\r\nexport const getOrderProperties = createSelector(\r\n  [\r\n    getRestaurant,\r\n    getOrderFront,\r\n    getCartData,\r\n    getAppConfigOrderSettings,\r\n    getOrderSettingsData,\r\n    getOrderPreview,\r\n    getOrderPreviewVerifications,\r\n  ],\r\n  (\r\n    restaurant,\r\n    orderFront,\r\n    cartData,\r\n    orderAppConfig,\r\n    orderSettings,\r\n    orderPreview,\r\n    orderPreviewVerifications\r\n  ) => {\r\n    if (isNil(orderFront)) {\r\n      return null\r\n    }\r\n\r\n    orderFront.restaurant = restaurant\r\n\r\n    return formatOrderFrontProperties(orderFront, {\r\n      cartData,\r\n      orderAppConfig,\r\n      orderSettings,\r\n      orderPreview,\r\n      orderPreviewVerifications,\r\n    })\r\n  }\r\n)\r\n\r\n/**\r\n * Create a basic order body data for the API.\r\n * See postOrder action.\r\n *\r\n * Payment data, along with other specific data you may want to send\r\n * should be defined in each specific order front formatter\r\n */\r\nexport const getOrderFrontDatas = createSelector(\r\n  [getOrderProperties, getItemListForApi, getUserMe, getCartData],\r\n  (orderFrontProperties, itemListForApi, userMe, cartData) =>\r\n    formatOrderFrontData({\r\n      orderFrontProperties,\r\n      itemListForApi,\r\n      userMe,\r\n      comment: cartData.comment,\r\n    })\r\n)\r\n\r\n//\r\n//\r\n//\r\n\r\nconst getOrderIsDeliveryOnProps = (state, props) => {\r\n  return isNil(props) ? false : props.isDelivery\r\n}\r\n\r\nconst getModeOnProps = (state, props) => {\r\n  return isNil(props) ? null : props.mode\r\n}\r\n\r\nexport const makeGetOrderRestaurantListData = () =>\r\n  createSelector(\r\n    [\r\n      getRestaurantListData,\r\n      getRestaurantList,\r\n      getGeolocationCoordinates,\r\n      getOrderIsDeliveryOnProps,\r\n      getModeOnProps,\r\n    ],\r\n    (restaurantListData, restaurantList, geolocationCoordinates, orderIsDelivery, mode) => {\r\n      if (isEmpty(restaurantList)) {\r\n        return []\r\n      }\r\n\r\n      let restaurantListFormatted = formatRestaurantList(restaurantList, {\r\n        latitude: geolocationCoordinates.latitude,\r\n        longitude: geolocationCoordinates.longitude,\r\n        mode,\r\n      })\r\n\r\n      if (!isNil(mode)) {\r\n        restaurantListFormatted = restaurantListFormatted.filter(restaurant => {\r\n          return (\r\n            (restaurant.orderSettings.onSiteSettings.enabled && mode === OrderMode.ON_SITE) ||\r\n            (restaurant.orderSettings.takeAwaySettings.enabled && mode === OrderMode.TAKE_AWAY) ||\r\n            (restaurant.orderSettings.deliverySettings.enabled && mode === OrderMode.DELIVERY)\r\n          )\r\n        })\r\n      }\r\n\r\n      if (orderIsDelivery) {\r\n        restaurantListFormatted = restaurantListFormatted.filter(restaurant => {\r\n          return (\r\n            restaurant.orderSettings.deliverySettings.maxRangeInMeters >= restaurant.geoPt.distance\r\n          )\r\n        })\r\n      }\r\n\r\n      return {\r\n        ...restaurantListData,\r\n        restaurants: restaurantListFormatted,\r\n      }\r\n    }\r\n  )\r\n","import isNil from 'lodash/isNil'\r\n\r\nimport { createFormatter } from 'pmt-utils/format'\r\n\r\nconst formatRedirectUri = (frontSettings, params) => {\r\n  if (!isNil(frontSettings.redirectUri)) {\r\n    let url = frontSettings.redirectUri\r\n\r\n    if (url.indexOf(':restaurantId') > -1 && !isNil(params) && !isNil(params.restaurantId)) {\r\n      url = url.replace(':restaurantId', params.restaurantId)\r\n    }\r\n\r\n    if (url.indexOf(':tableNumber') > -1 && !isNil(params) && !isNil(params.tableNumber)) {\r\n      url = url.replace(':tableNumber', params.tableNumber)\r\n    }\r\n\r\n    if (url.indexOf(':posCheckId') > -1 && !isNil(params) && !isNil(params.posCheckId)) {\r\n      url = url.replace(':posCheckId', params.posCheckId)\r\n    }\r\n\r\n    if (url.indexOf(':at') > -1 && !isNil(params) && !isNil(params.at)) {\r\n      url = url.replace(':at', params.at)\r\n    }\r\n\r\n    frontSettings.redirectUri = url\r\n  }\r\n\r\n  return frontSettings\r\n}\r\n\r\nexport const formatAppConfigFrontSettings = createFormatter(formatRedirectUri)\r\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor;\n\n/**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\nfunction baseRepeat(string, n) {\n  var result = '';\n  if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n    return result;\n  }\n  // Leverage the exponentiation by squaring algorithm for a faster repeat.\n  // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n  do {\n    if (n % 2) {\n      result += string;\n    }\n    n = nativeFloor(n / 2);\n    if (n) {\n      string += string;\n    }\n  } while (n);\n\n  return result;\n}\n\nmodule.exports = baseRepeat;\n","var baseRepeat = require('./_baseRepeat'),\n    baseToString = require('./_baseToString'),\n    castSlice = require('./_castSlice'),\n    hasUnicode = require('./_hasUnicode'),\n    stringSize = require('./_stringSize'),\n    stringToArray = require('./_stringToArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil;\n\n/**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\nfunction createPadding(length, chars) {\n  chars = chars === undefined ? ' ' : baseToString(chars);\n\n  var charsLength = chars.length;\n  if (charsLength < 2) {\n    return charsLength ? baseRepeat(chars, length) : chars;\n  }\n  var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n  return hasUnicode(chars)\n    ? castSlice(stringToArray(result), 0, length).join('')\n    : result.slice(0, length);\n}\n\nmodule.exports = createPadding;\n","var createPadding = require('./_createPadding'),\n    stringSize = require('./_stringSize'),\n    toInteger = require('./toInteger'),\n    toString = require('./toString');\n\n/**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => '   abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\nfunction padStart(string, length, chars) {\n  string = toString(string);\n  length = toInteger(length);\n\n  var strLength = length ? stringSize(string) : 0;\n  return (length && strLength < length)\n    ? (createPadding(length - strLength, chars) + string)\n    : string;\n}\n\nmodule.exports = padStart;\n","import capitalize from 'lodash/capitalize'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport padStart from 'lodash/padStart'\r\nimport isNil from 'lodash/isNil'\r\nimport merge from 'lodash/merge'\r\nimport moment from 'moment'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport {\r\n  formatSlots,\r\n  getForDay,\r\n  getNextClosingHour,\r\n  getRestaurantAvailabilities,\r\n} from 'pmt-modules/orderSettings'\r\nimport {\r\n  DELAY_TO_WARN_CLOSING_HOUR,\r\n  getMsFromHour,\r\n  getMsFromMinute,\r\n  isToday,\r\n  getPmtDayIndex,\r\n  todayWithHour,\r\n} from 'pmt-utils/date'\r\n\r\nimport { createFormatter } from 'pmt-utils/format'\r\n\r\nconst formatData = (\r\n  data,\r\n  {\r\n    orderFrontProperties,\r\n    openingHours,\r\n    orderAppConfig,\r\n    orderPreviewVerifications,\r\n  }\r\n) => {\r\n  data = merge(data, cloneDeep(orderFrontProperties))\r\n\r\n  const orderParamsForMode = orderAppConfig.orderParamsForModes[data.mode]\r\n\r\n  // keep onSite at the moment, maybe we'll refactor that later\r\n  data.mustChooseTableNumber = data.isOnSite && orderAppConfig.hasTableNumber\r\n  data.isMissingTableNumber =\r\n    data.mustChooseTableNumber &&\r\n    isEmpty(data.tableNumber == null ? null : String(data.tableNumber))\r\n\r\n  data.canOrderUsingSlots = orderParamsForMode?.canOrderUsingSlots || false\r\n  data.isMissingSlot = data.canOrderUsingSlots && !data.isAsap && isNil(data.slot)\r\n\r\n  data.canOrderUsingAsap = orderParamsForMode?.canOrderUsingAsap || false\r\n  data.forceAsap = data.canOrderUsingAsap && !data.canOrderUsingSlots\r\n\r\n  if (!isNil(get(data, 'deliveryAddress.id', null))) {\r\n    data.deliveryAddress.formattedAddress = `${data.deliveryAddress.street}, ${\r\n      data.deliveryAddress.postCode\r\n    } ${data.deliveryAddress.city}, ${data.deliveryAddress.country}`\r\n  } else {\r\n    data.deliveryAddress = null\r\n  }\r\n\r\n  data.dueDateFormatted = null\r\n  if (!isNil(data.dueDate)) {\r\n    const date = isToday(data.dueDate)\r\n      ? tr('global.today')\r\n      : moment(data.dueDate).format('dddd D MMM')\r\n\r\n    data.dueDateFormatted = tr(`order.slots.dueDate.${data.mode}`, {\r\n      date,\r\n      dateCapitalized: capitalize(date),\r\n      time: moment(data.dueDate).format('HH:mm'),\r\n    })\r\n  }\r\n\r\n  let finalDueDate = null\r\n  if (!isNil(data.dueDate) || data.isAsap) {\r\n    finalDueDate = data.isAsap ? moment() : moment(data.dueDate)\r\n  }\r\n\r\n  data.closingHour = null\r\n  data.closingHourFormatted = null\r\n  if (!isNil(finalDueDate) && isToday(finalDueDate)) {\r\n    const now = moment()\r\n    const dueDateOpeningHours = getForDay(openingHours, getPmtDayIndex(now))\r\n    if (!isEmpty(dueDateOpeningHours)) {\r\n      const hoursInMs =\r\n        getMsFromHour(parseInt(now.format('HH'), 10)) +\r\n        getMsFromMinute(parseInt(now.format('mm'), 10))\r\n\r\n      data.closingHour = getNextClosingHour(hoursInMs, dueDateOpeningHours)\r\n\r\n      if (data.closingHour) {\r\n        const nowAndDelaysCumulated = moment().add(DELAY_TO_WARN_CLOSING_HOUR, 'ms')\r\n        const lastTimeToOrder = todayWithHour(data.closingHour - data.delay)\r\n        const time = todayWithHour(data.closingHour + data.deliveryTime)\r\n\r\n        if (data.delay < data.closingHour) {\r\n          data.closingHourFormatted = {\r\n            show: nowAndDelaysCumulated.isAfter(lastTimeToOrder),\r\n            time: {\r\n              time,\r\n              hourFormatted: padStart(time.hours(), 2, '0'),\r\n              minuteFormatted: padStart(time.minutes(), 2, '0'),\r\n            },\r\n            lastTimeToOrder: {\r\n              time: lastTimeToOrder,\r\n              hourFormatted: padStart(lastTimeToOrder.hours(), 2, '0'),\r\n              minuteFormatted: padStart(lastTimeToOrder.minutes(), 2, '0'),\r\n            },\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  //\r\n  // payment\r\n  //\r\n\r\n  // TODO: some or oneOf\r\n  const hasAPaymentMethodSelected = [\r\n    data.payment.isCreditCardMethod,\r\n    data.payment.isIrlMethod,\r\n    data.payment.isUserAccountMethod,\r\n    data.payment.isTRDMethod,\r\n  ].some(paymentMethod => paymentMethod === true)\r\n\r\n  const creditCardPaymentMethodIsSelectedAndValid =\r\n    data.payment.isCreditCardMethod\r\n\r\n  const hasPaymentWithCardPrint = orderFrontProperties?.restaurant?.hasPaymentWithCardPrint\r\n\r\n  const userAccountPaymentMethodIsSelectedAndValid =\r\n    data.payment.isUserAccountMethod &&\r\n    get(orderPreviewVerifications, 'userAccount.succeeded', false) === true\r\n\r\n  const trdPaymentMethodIsSelectedAndValid = data.payment.isTRDMethod\r\n\r\n  const paymentMethodIsSelectedAndValid =\r\n    hasAPaymentMethodSelected &&\r\n    (!data.payment.isCreditCardMethod ||\r\n      (!hasPaymentWithCardPrint || creditCardPaymentMethodIsSelectedAndValid)) &&\r\n    (!data.payment.isUserAccountMethod || userAccountPaymentMethodIsSelectedAndValid) &&\r\n    (!data.payment.isTRDMethod || trdPaymentMethodIsSelectedAndValid)\r\n\r\n  data.payment = {\r\n    ...data.payment,\r\n    hasAPaymentMethodSelected,\r\n    paymentMethodIsSelectedAndValid,\r\n    userAccountPaymentMethodIsSelectedAndValid,\r\n    creditCard: data.creditCard || null,\r\n    // creditCard: selectedCreditCard || null,\r\n  }\r\n\r\n  //\r\n  // slots\r\n  //\r\n\r\n  data.slots = null\r\n  if (!isNil(data.mode) && !isNil(data.delay) && !isNil(data.restaurant)) {\r\n    data.slots = formatSlots(\r\n      getRestaurantAvailabilities(data.restaurant, data.mode).availabilities,\r\n      data.slot // selectedSlot\r\n    )\r\n  }\r\n\r\n  // TODO: check if still necessay ... feels a bit awkward\r\n  // catalogDataOnprops.categories\r\n  //     .filter(category => category.id === firstSelectedCategory.id)\r\n  //     .pop()\r\n\r\n  return data\r\n}\r\n\r\nexport const formatOrderProperties = createFormatter(formatData)\r\n","import cloneDeep from 'lodash/cloneDeep'\r\nimport get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getQueryApiConsumer } from 'pmt-modules/environment'\r\nimport PaymentType from 'pmt-modules/global/constants/PaymentType'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/orderSettings'\r\nimport { getRoute } from 'pmt-modules/routing'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { getQueryParam, getAbsolutePath } from 'pmt-utils/url'\r\n\r\nconst generateCreditCardPayment = ({ amount, tips }) => {\r\n  // generate query params to be used through async payment callback url\r\n  const asyncPaymentSecureCallbackUrlQueryParams = {}\r\n  const apiVersion = getQueryParam('apiVersion')\r\n  if (!isEmpty(apiVersion)) {\r\n    asyncPaymentSecureCallbackUrlQueryParams.apiVersion = apiVersion\r\n  }\r\n\r\n  const simulate = getQueryParam('simulate')\r\n  if (!isEmpty(simulate)) {\r\n    asyncPaymentSecureCallbackUrlQueryParams.simulate = simulate\r\n  }\r\n\r\n  const apiConsumer = getQueryApiConsumer()\r\n  if (!isEmpty(apiConsumer)) {\r\n    asyncPaymentSecureCallbackUrlQueryParams.apiConsumer = apiConsumer\r\n  }\r\n\r\n  return {\r\n    amount,\r\n    tips,\r\n    type: PaymentType.ORDER,\r\n    method: PaymentMethodsAllowed.CREDIT_CARD,\r\n    supportAsyncPayment: true,\r\n    asyncPaymentData: {\r\n      redirectUrl: getAbsolutePath(\r\n        getRoute('ORDER__PAYMENT__VERIFICATION'),\r\n        asyncPaymentSecureCallbackUrlQueryParams\r\n      ),\r\n    },\r\n  }\r\n}\r\n\r\nconst generateUserAccountPayment = ({ orderPreview, orderPreviewVerifications }) => {\r\n  if (\r\n    get(orderPreview, 'userAccountPayment', null) &&\r\n    get(orderPreviewVerifications, 'userAccount', null)\r\n  ) {\r\n    const userAccount = orderPreviewVerifications.userAccount\r\n\r\n    return {\r\n      userAccountId: orderPreview.userAccountPayment.userAccountId,\r\n      amountFromAccount: orderPreview.totalPrice - userAccount.maxGrantableAmount,\r\n      amountFromAccountFormatted: formatPriceWithCurrency(\r\n        orderPreview.totalPrice - userAccount.maxGrantableAmount\r\n      ),\r\n      grantAmount: userAccount.maxGrantableAmount,\r\n      grantLabel: userAccount.grantLabel,\r\n      grantTax: orderPreview.userAccountPayment.grantTax,\r\n    }\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nconst generateTRDPayment = ({ amount, tips }) => {\r\n  // generate query params to be used through async payment callback url\r\n  const asyncPaymentSecureCallbackUrlQueryParams = {}\r\n\r\n  const apiVersion = getQueryParam('apiVersion')\r\n  if (!isEmpty(apiVersion)) {\r\n    asyncPaymentSecureCallbackUrlQueryParams.apiVersion = apiVersion\r\n  }\r\n\r\n  const simulate = getQueryParam('simulate')\r\n  if (!isEmpty(simulate)) {\r\n    asyncPaymentSecureCallbackUrlQueryParams.simulate = simulate\r\n  }\r\n\r\n  const apiConsumer = getQueryApiConsumer()\r\n  if (!isEmpty(apiConsumer)) {\r\n    asyncPaymentSecureCallbackUrlQueryParams.apiConsumer = apiConsumer\r\n  }\r\n\r\n  return {\r\n    amount,\r\n    tips,\r\n    type: PaymentType.ORDER,\r\n    method: PaymentMethodsAllowed.TRD,\r\n    supportAsyncPayment: true,\r\n    asyncPaymentData: {\r\n      redirectUrl: getAbsolutePath(\r\n        getRoute('ORDER__PAYMENT__VERIFICATION'),\r\n        asyncPaymentSecureCallbackUrlQueryParams\r\n      ),\r\n    },\r\n  }\r\n}\r\n\r\nexport const generateOrderData = ({\r\n  orderProperties,\r\n  orderFrontDatas,\r\n  orderPreview,\r\n  orderPreviewVerifications,\r\n}) => {\r\n  if (\r\n    isEmpty(orderFrontDatas) ||\r\n    (orderProperties.isDelivery && isNil(orderProperties.deliveryAddress))\r\n  ) {\r\n    console.info('No valid data, order data is removed')\r\n    return null\r\n  }\r\n\r\n  const data = cloneDeep(orderFrontDatas)\r\n\r\n  data.tableNumber = orderProperties.tableNumber\r\n  data.posCheckId = orderProperties.posCheckId\r\n  data.posCheckGuid = orderProperties.posCheckGuid\r\n  data.tips = orderProperties.tips\r\n  // will be recalculated by the API after the createOrder response, but we give them just in case the order fails\r\n  data.totalTaxAmount = orderProperties.totalTaxAmount\r\n\r\n  // display breath analyzer banner for french restaurants, following country policy.\r\n  data.withFrenchBreathAnalyzer = orderProperties.restaurant?.address?.country === 'FR'\r\n\r\n  data.address = null\r\n  if (orderProperties.isDelivery) {\r\n    data.address = orderProperties.deliveryAddress\r\n  }\r\n\r\n  // TODO: paymentMethod is reset by ???\r\n  switch (orderProperties.paymentMethod) {\r\n    case PaymentMethodsAllowed.CREDIT_CARD: // 2\r\n      data.payment = generateCreditCardPayment({\r\n        amount: orderProperties.totalCartPriceAndFees,\r\n        tips: orderProperties.tips,\r\n        orderFrontDatas,\r\n      })\r\n      break\r\n\r\n    case PaymentMethodsAllowed.USER_ACCOUNT: // 4\r\n      data.userAccountPayment = generateUserAccountPayment({\r\n        orderPreview,\r\n        orderPreviewVerifications,\r\n      })\r\n      break\r\n\r\n    case PaymentMethodsAllowed.TRD: // 8\r\n      data.payment = generateTRDPayment({\r\n        amount: orderProperties.totalCartPriceAndFees,\r\n        tips: orderProperties.tips,\r\n        orderFrontDatas,\r\n      })\r\n      break\r\n\r\n    default:\r\n  }\r\n\r\n  if (!isEmpty(orderProperties.vouchers) && orderProperties.areOnlineVouchersAllowed) {\r\n    data.payment = data.payment || {}\r\n    data.payment.voucherPayment = {\r\n      // we don't indicate the voucherProvider, we let the back use the one configured on the store\r\n      vouchers: orderProperties.vouchers.map(voucher => ({\r\n        providerVoucherCode: voucher.voucherCode,\r\n      })),\r\n    }\r\n  }\r\n\r\n  return data\r\n}\r\n","import { createSelector } from 'reselect'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getFrontSettings, getOrderSettings } from 'pmt-modules/appConfig'\r\nimport {\r\n  getOrderFrontDatas,\r\n  getOrderProperties as getOrderFrontProperties,\r\n} from 'pmt-modules/orderFront/selectors'\r\nimport { getOpeningHours, getOrderSettingsData } from 'pmt-modules/orderSettings'\r\nimport { getOrderPreview, getOrderPreviewVerifications } from 'pmt-modules/orderPreview/selectors'\r\n\r\nimport { formatOrderProperties, formatAppConfigFrontSettings } from './format'\r\nimport { generateOrderData } from './utils'\r\n\r\nconst getOrderPlugin = state => state.entities.orderPlugin\r\n\r\nexport const getOrderProperties = createSelector(\r\n  [\r\n    getOrderPlugin,\r\n    getOrderFrontProperties,\r\n    getOrderSettingsData,\r\n    getOpeningHours,\r\n    getOrderSettings,\r\n    getOrderPreviewVerifications,\r\n  ],\r\n  (\r\n    orderPluginData,\r\n    orderFrontProperties,\r\n    orderSettingsData,\r\n    openingHours,\r\n    orderAppConfig,\r\n    orderPreviewVerifications\r\n  ) =>\r\n    formatOrderProperties(orderPluginData.toJS(), {\r\n      orderFrontProperties,\r\n      orderSettingsData,\r\n      openingHours,\r\n      orderAppConfig,\r\n      orderPreviewVerifications,\r\n    })\r\n)\r\n\r\nexport const getOrderData = createSelector(\r\n  [getOrderProperties, getOrderFrontDatas, getOrderPreview, getOrderPreviewVerifications],\r\n  (orderProperties, orderFrontDatas, orderPreview, orderPreviewVerifications) =>\r\n    generateOrderData({\r\n      orderProperties,\r\n      orderFrontDatas,\r\n      orderPreview,\r\n      orderPreviewVerifications,\r\n    })\r\n)\r\n\r\nexport const getAppConfigFrontSettings = createSelector(\r\n  [getOrderProperties, getFrontSettings],\r\n  (orderProperties, frontSettings) => {\r\n    const restaurantId =\r\n      orderProperties.restaurantId || orderProperties.postedOrderData?.orderProperties?.restaurantId\r\n    const tableNumber =\r\n      orderProperties.tableNumber || orderProperties.postedOrderData?.orderProperties?.tableNumber\r\n    const posCheckId =\r\n      orderProperties.posCheckId || orderProperties.postedOrderData?.orderProperties?.posCheckId\r\n    return formatAppConfigFrontSettings(frontSettings, { restaurantId, tableNumber, posCheckId })\r\n  }\r\n)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getOrderProperties } from '../../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give all order's properties\r\n *\r\n */\r\nconst OrderPropertiesContainer = ({\r\n  OrderPropertiesWrappedComponent,\r\n  orderProperties,\r\n  children,\r\n  ...otherProps\r\n}) =>\r\n  isNil(OrderPropertiesWrappedComponent) ? (\r\n    children({\r\n      orderProperties,\r\n      restaurantId: orderProperties.restaurantId,\r\n      ...otherProps,\r\n    })\r\n  ) : (\r\n    <OrderPropertiesWrappedComponent\r\n      orderProperties={orderProperties}\r\n      restaurantId={orderProperties.restaurantId}\r\n      {...otherProps}\r\n    />\r\n  )\r\n\r\nconst mapStateToProps = state => ({\r\n  orderProperties: getOrderProperties(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {}\r\n)(OrderPropertiesContainer)\r\n","import React from 'react'\r\n\r\nimport OrderPropertiesContainer from './OrderPropertiesContainer'\r\n\r\n/**\r\n * Add the OrderPropertiesContainer as HOC for the given component\r\n */\r\nconst withOrderProperties = OrderPropertiesWrappedComponent => props => (\r\n  <OrderPropertiesContainer\r\n    OrderPropertiesWrappedComponent={OrderPropertiesWrappedComponent}\r\n    {...props}\r\n  />\r\n)\r\n\r\nexport default withOrderProperties\r\n","/**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\nfunction baseFindKey(collection, predicate, eachFunc) {\n  var result;\n  eachFunc(collection, function(value, key, collection) {\n    if (predicate(value, key, collection)) {\n      result = key;\n      return false;\n    }\n  });\n  return result;\n}\n\nmodule.exports = baseFindKey;\n","var baseFindKey = require('./_baseFindKey'),\n    baseForOwn = require('./_baseForOwn'),\n    baseIteratee = require('./_baseIteratee');\n\n/**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n *  else `undefined`.\n * @example\n *\n * var users = {\n *   'barney':  { 'age': 36, 'active': true },\n *   'fred':    { 'age': 40, 'active': false },\n *   'pebbles': { 'age': 1,  'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\nfunction findKey(object, predicate) {\n  return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn);\n}\n\nmodule.exports = findKey;\n","import moment from 'moment'\r\n\r\nimport { getMs } from 'pmt-utils/date'\r\n\r\n/**\r\n * The regex to validate an idempotency key.\r\n *\r\n * An idempotency key is a String with:\r\n * <ul>\r\n * <li>first a timestamp in milliseconds,\r\n * the timestamp has a length of 13, which run through 9999999999999ms = Saturday 20 November 2286 17:46:39.999\r\n * <li>then an underscore,\r\n * <li>then an alphanumeric 8 length string.\r\n *\r\n * Ex: 1528985071000_4d1y68y4\r\n *\r\n * With this rule, we can have up to 4^30 possibilities per milliseconds.\r\n */\r\nexport const generateIdempotencyKey = () => {\r\n  const idempotencyKey = `${getMs(moment())}_${Math.random()\r\n    .toString(32)\r\n    .slice(4)}`\r\n  const idempotencyRegex = new RegExp('^[0-9]{13}_[A-Za-z0-9]{8}$')\r\n\r\n  if (idempotencyRegex.test(idempotencyKey)) {\r\n    return idempotencyKey\r\n  } else {\r\n    return generateIdempotencyKey()\r\n  }\r\n}\r\n","import invariant from 'invariant'\r\nimport isNil from 'lodash/isNil'\r\nimport findKey from 'lodash/findKey'\r\n\r\nimport { HistoryType } from './constants'\r\nimport { TOP_UP_STATUS } from '../topUp/constants'\r\n\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nimport HistoryApi from '../api/calls/HistoryApi'\r\n\r\nexport const GetHistoryAction = createApiEnumAction('USER::HISTORY::GET')\r\n\r\nconst getHistoryApiForType = (userId, historyType, data, cursor, limit) => {\r\n  switch (historyType) {\r\n    case HistoryType.ORDER:\r\n      return HistoryApi.getOrders(userId, data, cursor, limit)\r\n    case HistoryType.BOOKING:\r\n      return HistoryApi.getBookings(userId, data, cursor, limit)\r\n    case HistoryType.PAYMENT:\r\n      return HistoryApi.getPayments(userId, data, cursor, limit)\r\n    case HistoryType.TOP_UP:\r\n      return HistoryApi.getTopUps(\r\n        userId,\r\n        data,\r\n        cursor,\r\n        limit,\r\n        findKey(TOP_UP_STATUS, o => o === TOP_UP_STATUS.SUCCEEDED)\r\n      )\r\n    case HistoryType.USER_TRANSACTIONS:\r\n      return HistoryApi.getPaymentsUserCheck(userId, data, cursor, limit)\r\n    case HistoryType.TRANSACTIONS:\r\n      // data:\r\n      // - userAccountId\r\n      invariant(!isNil(data.userAccountId), `required user account id`)\r\n      return HistoryApi.getTransactions(userId, data, cursor, limit)\r\n    default:\r\n      invariant(false, `invalid historyType ${historyType}`)\r\n  }\r\n}\r\n\r\n/**\r\n * @param  {string} userId\r\n * @param  {[type]} historyType\r\n * @param  {object} props        must contain:\r\n *                                - restaurantIds: the ids of the restaurants we already loaded\r\n * @param  {String} [cursor=''] the next cursor\r\n * @param  {Number} [limit=10]  the limit of items to retrieve\r\n */\r\nexport const fetchUserHistory = (userId, historyType, props, cursor = '', limit = 10) =>\r\n  createApiCallAction(\r\n    GetHistoryAction,\r\n    getHistoryApiForType(userId, historyType, props, cursor, limit),\r\n    {\r\n      userId,\r\n      historyType,\r\n      props,\r\n      cursor,\r\n      limit,\r\n    }\r\n  )\r\n","import Immutable from 'immutable'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport {\r\n  RestaurantAction,\r\n  GetRestaurantAction,\r\n  GetRestaurantListAction,\r\n  GetRestaurantListByGeoPtAction,\r\n  RefreshRestaurantAction,\r\n  PostRestaurantAction,\r\n} from './actions'\r\n\r\nimport { GetHistoryAction } from '../userHistory/actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\nexport * from './constants'\r\nexport * from './format'\r\n\r\n// Example of restaurant data\r\n// {\r\n//   restaurant: null,\r\n//   isFetching: false,\r\n//   lastUpdated: null,\r\n//   error: null,\r\n// }\r\n\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\nexport const restaurantReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case RestaurantAction.SET:\r\n      if (isNil(action.restaurant)) {\r\n        return state\r\n      }\r\n\r\n      return state.mergeIn([action.restaurant.id], {\r\n        restaurant: action.restaurant,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantAction.REQUEST:\r\n      return state.mergeIn([action.data.restaurantId], {\r\n        restaurant: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case RefreshRestaurantAction.SUCCESS:\r\n    case GetRestaurantAction.SUCCESS:\r\n      return state.mergeIn([action.response.id], {\r\n        restaurant: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantAction.FAILURE:\r\n      return state.mergeIn([action.data.restaurantId], {\r\n        restaurant: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    case RefreshRestaurantAction.REQUEST:\r\n      return state.mergeIn([action.data.restaurantId, 'isFetching'], true)\r\n\r\n    case PostRestaurantAction.REQUEST:\r\n      return state.mergeIn(['post'], {\r\n        data: action.response,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case PostRestaurantAction.SUCCESS:\r\n      return state.mergeIn(['post'], {\r\n        data: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case PostRestaurantAction.FAILURE:\r\n      return state.mergeIn(['post'], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    case GetRestaurantListAction.REQUEST:\r\n      return state.mergeIn(['list'], {\r\n        data: action.response,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListAction.SUCCESS:\r\n      return state.mergeIn(['list'], {\r\n        data: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListAction.FAILURE:\r\n      return state.mergeIn(['list'], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    case GetRestaurantListAction.RESET:\r\n      return state.mergeIn(['list'], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListByGeoPtAction.REQUEST:\r\n      return state.mergeIn(['list'], {\r\n        data: action.response,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListByGeoPtAction.SUCCESS:\r\n      return state.mergeIn(['list'], {\r\n        data: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListByGeoPtAction.FAILURE:\r\n      return state.mergeIn(['list'], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    // Should we really make this module dependant of userHistory?\r\n    // another method:\r\n    // middleware on userHistory that dispatch a new action for here\r\n    case GetHistoryAction.SUCCESS:\r\n      if (!action.response.restaurants) {\r\n        return state\r\n      }\r\n      action.response.restaurants.forEach(restaurant => {\r\n        state = state.mergeIn([restaurant.id], {\r\n          restaurant,\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: null,\r\n        })\r\n      })\r\n      return state\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { createAction } from '../redux'\r\n\r\nexport const OrderFrontAction = {\r\n  POST_ORDER: 'ORDER_FRONT::POST_ORDER',\r\n  SELECT_MODE: 'ORDER_FRONT::SELECT_MODE',\r\n  SELECT_TIPS: 'ORDER_FRONT::SELECT_TIPS',\r\n  SET_RESTAURANT_ID: 'ORDER_FRONT::SET_RESTAURANT_ID',\r\n  SET_IDEMPOTENCY_KEY: 'ORDER_FRONT::SET_IDEMPOTENCY_KEY',\r\n  SET_PAYMENT_METHOD: 'ORDER_FRONT::SET_PAYMENT_METHOD',\r\n  SET_DUE_DATE: 'ORDER_FRONT::SET_DUE_DATE',\r\n  DISPLAY_UPSELLING: 'ORDER_FRONT::DISPLAY_UPSELLING',\r\n  RESET: 'ORDER_FRONT::RESET',\r\n  RESET_FULL: 'ORDER_FRONT::RESET_FULL',\r\n  SET_LOCALE: 'ORDER_FRONT::SET_LOCALE',\r\n  SAVE_POSTED_ORDER_DATA: 'ORDER_FRONT::SAVE_POSTED_ORDER_DATA',\r\n  SET_PAGER_ID: 'ORDER_FRONT::SET_PAGER_ID',\r\n  ADD_MODIFIER_CODE: 'ORDER_FRONT::ADD_MODIFIER_CODE',\r\n  ADD_VOUCHER: 'ORDER_FRONT::ADD_VOUCHER',\r\n  DELETE_VOUCHER: 'ORDER_FRONT::DELETE_VOUCHER',\r\n  SET_VOUCHERS: 'ORDER_FRONT::SET_VOUCHERS',\r\n}\r\n\r\nexport const postOrder = (orderData, options) =>\r\n  createAction(OrderFrontAction.POST_ORDER, { orderData, options })\r\n\r\nexport const setIdempotencyKey = idempotencyKey =>\r\n  createAction(OrderFrontAction.SET_IDEMPOTENCY_KEY, { idempotencyKey })\r\n\r\nexport const setDueDate = dueDate => createAction(OrderFrontAction.SET_DUE_DATE, { dueDate })\r\n\r\nexport const selectMode = mode => createAction(OrderFrontAction.SELECT_MODE, { mode })\r\n\r\nexport const selectTips = tips => createAction(OrderFrontAction.SELECT_TIPS, { tips })\r\n\r\nexport const setRestaurantId = restaurantId =>\r\n  createAction(OrderFrontAction.SET_RESTAURANT_ID, { restaurantId })\r\n\r\nexport const setPaymentMethod = paymentMethod =>\r\n  createAction(OrderFrontAction.SET_PAYMENT_METHOD, { paymentMethod })\r\n\r\nexport const resetOrderFront = () => createAction(OrderFrontAction.RESET)\r\n\r\nexport const resetOrderFrontFull = () => createAction(OrderFrontAction.RESET_FULL)\r\n\r\nexport const displayUpselling = upsellingCategory =>\r\n  createAction(OrderFrontAction.DISPLAY_UPSELLING, { upsellingCategory })\r\n\r\nexport const setLocale = locale => createAction(OrderFrontAction.SET_LOCALE, { locale })\r\n\r\nexport const savePostedOrderData = data =>\r\n  createAction(OrderFrontAction.SAVE_POSTED_ORDER_DATA, {\r\n    data,\r\n  })\r\n\r\nexport const setPagerId = pagerId => createAction(OrderFrontAction.SET_PAGER_ID, { pagerId })\r\n\r\nexport const addModifierCode = code => createAction(OrderFrontAction.ADD_MODIFIER_CODE, { code })\r\n\r\nexport const addVoucher = voucher => createAction(OrderFrontAction.ADD_VOUCHER, { voucher })\r\n\r\nexport const setVouchers = vouchers => createAction(OrderFrontAction.SET_VOUCHERS, { vouchers })\r\n\r\nexport const deleteVoucher = index => createAction(OrderFrontAction.DELETE_VOUCHER, { index })\r\n","export const DueDateMode = {\r\n  /**\r\n   * Unknown mode. For old orders.\r\n   */\r\n  UNKNOWN: 'UNKNOWN',\r\n  /**\r\n   * The user has chosen ASAP.\r\n   */\r\n  ASAP: 'ASAP',\r\n  /**\r\n   * The user has chosen a specific slot.\r\n   */\r\n  SLOT: 'SLOT',\r\n}\r\n","// TODO: I18n\r\nconst CatalogErrors = {\r\n  GET: {\r\n    default: 'global.catalog.errors.default',\r\n  },\r\n}\r\n\r\nexport default CatalogErrors\r\n","import isNil from 'lodash/isNil'\r\n\r\nimport ApiEndpoints from '../config/ApiEndpoints'\r\nimport CatalogErrors from '../errors/CatalogErrors'\r\nimport { getDefaultLocale } from 'pmt-modules/i18n'\r\n\r\nconst CatalogSource = {\r\n  /**\r\n   * to use only the local menu information\r\n   */\r\n  LOCAL_ONLY: 'LOCAL_ONLY',\r\n\r\n  /**\r\n   * to use both local and POS menu information merged (can cause performance issues, depending on\r\n   * the POS).\r\n   */\r\n  LOCAL_AND_POS: 'LOCAL_AND_POS',\r\n\r\n  /**\r\n   * to use only the POS menu information (can cause performance issues, depending on the POS)\r\n   */\r\n  POS_ONLY: 'POS_ONLY',\r\n}\r\n\r\nconst CatalogApi = {\r\n  getCatalog: (restaurantId, date, mode) => {\r\n    let query = {\r\n      loadStocks: true,\r\n      menuSource: CatalogSource.LOCAL_ONLY,\r\n      loadCartModifiers: true,\r\n      mode,\r\n      locale: getDefaultLocale(), // locale coming from browser OR overriden by the queryParam \"l\"\r\n    }\r\n\r\n    if (!isNil(date)) {\r\n      query = { ...query, date }\r\n    }\r\n\r\n    return {\r\n      endpoint: ApiEndpoints.CATALOG,\r\n      type: 'GET',\r\n      params: {\r\n        restaurantId,\r\n      },\r\n      query,\r\n      errorHandler: CatalogErrors.GET,\r\n    }\r\n  },\r\n}\r\n\r\nexport default CatalogApi\r\n","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { createAction } from 'pmt-modules/redux'\r\nimport CatalogApi from 'pmt-modules/api/calls/CatalogApi'\r\nimport { ModalType, createShowDialogAction, createHideDialogAction } from 'pmt-modules/dialog'\r\n\r\nexport const GetCatalogAction = {\r\n  ...createApiEnumAction('CATALOG::GET'),\r\n  RESET: 'CATALOG::RESET',\r\n}\r\n\r\nexport const fetchCatalog = (restaurantId, dueDate, mode, options) =>\r\n  createApiCallAction(GetCatalogAction, CatalogApi.getCatalog(restaurantId, dueDate, mode), {\r\n    restaurantId,\r\n    dueDate,\r\n    mode,\r\n    ...options,\r\n  })\r\n\r\nexport const resetCatalog = () => createAction(GetCatalogAction.RESET, {})\r\n\r\nexport const CatalogAction = {\r\n  SET_SELECTED_CATEGORY: 'CATALOG::SET_SELECTED_CATEGORY',\r\n  RESET_SELECTED_CATEGORY: 'CATALOG::RESET_SELECTED_CATEGORY',\r\n  SET_PARENT_CATEGORIES: 'CATALOG::SET_PARENT_CATEGORIES',\r\n}\r\n\r\n/**\r\n *\r\n * @param {*} category\r\n */\r\nexport const selectCategory = category =>\r\n  createAction(CatalogAction.SET_SELECTED_CATEGORY, {\r\n    category,\r\n  })\r\nexport const resetSelectedCategory = () =>\r\n  createAction(CatalogAction.SET_SELECTED_CATEGORY, {\r\n    category: [],\r\n  })\r\n\r\n/**\r\n *\r\n * @param {*} parentCategories\r\n */\r\nexport const setParentCategories = parentCategories =>\r\n  createAction(CatalogAction.SET_PARENT_CATEGORIES, {\r\n    parentCategories,\r\n  })\r\nexport const resetParentCategories = () =>\r\n  createAction(CatalogAction.SET_PARENT_CATEGORIES, {\r\n    parentCategories: [],\r\n  })\r\n\r\n/**\r\n * @param {*} upsellingCategory item pending to be add to cart\r\n */\r\nexport const showUpsellingDialog = upsellingCategory =>\r\n  createShowDialogAction(ModalType.UPSELLING_VIEW, {\r\n    upsellingCategory,\r\n  })\r\n\r\nexport const hideUpsellingDialog = () => createHideDialogAction(ModalType.UPSELLING_VIEW)\r\n\r\nexport const RefreshCatalogAction = createApiEnumAction('CATALOG::REFRESH')\r\n\r\nexport const refreshCatalog = (restaurantId, dueDate, mode, options) =>\r\n  createApiCallAction(RefreshCatalogAction, CatalogApi.getCatalog(restaurantId, dueDate, mode), {\r\n    restaurantId,\r\n    dueDate,\r\n    mode,\r\n    ...options,\r\n  })\r\n\r\n/**\r\n * @param {*} item item\r\n */\r\nexport const showDietaryInfoDialog = item =>\r\n  createShowDialogAction(ModalType.DIETARY_INFO, {\r\n    item,\r\n  })\r\n\r\nexport const hideDietaryInfoDialog = () => createHideDialogAction(ModalType.DIETARY_INFO)\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport PaymentErrorsList from '../errors/PaymentErrorsList'\r\n\r\nconst AsyncPaymentApi = {\r\n  /**\r\n   * Retrieve a payment and ask to update its status.\r\n   * This call is made after an async payment is made.\r\n   * options authorization is used for user light calls\r\n   */\r\n  getAsyncPayment: (paymentId, options = {}, retry) => {\r\n    let headers = {}\r\n    if (options.authorization) {\r\n      headers.authorization = options.authorization\r\n    }\r\n\r\n    return {\r\n      endpoint: ApiEndpoints.GET_ASYNC_PAYMENT,\r\n      type: 'GET',\r\n      params: {\r\n        paymentId,\r\n      },\r\n      query: {\r\n        retry,\r\n      },\r\n      headers,\r\n      errorHandler: PaymentErrorsList,\r\n    }\r\n  },\r\n}\r\n\r\nexport default AsyncPaymentApi\r\n","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\n\r\nimport AsyncPaymentApi from 'pmt-modules/api/calls/AsyncPaymentApi'\r\n\r\n/**\r\n * Finalize an async payment\r\n */\r\nexport const GetAsyncPaymentAction = createApiEnumAction('GetAsyncPaymentAction')\r\n\r\n/**\r\n *\r\n * @param {long} paymentId Payment id\r\n * @param {Object} options\r\n * @param {int} retry increased at each getAsyncPayment. this is used to retry with increasing time\r\n * between each get.\r\n * @returns\r\n */\r\nexport const getAsyncPayment = (paymentId, options = {}, retry = 0) =>\r\n  createApiCallAction(\r\n    GetAsyncPaymentAction,\r\n    AsyncPaymentApi.getAsyncPayment(paymentId, options, retry),\r\n    {\r\n      paymentId,\r\n      ...options,\r\n      // must be after spread of the options, which contains the old retry value\r\n      retry,\r\n    }\r\n  )\r\n","export const AsyncPaymentCanceledResponseStatus = 499\r\nexport const AsyncPaymentRedirectToPspResponseStatus = 303\r\n\r\nexport const AsyncPaymentPendingStatus = [\r\n  '300', // The AsyncPaymentRedirectionData is still not received from the PSP\r\n  '301', // The AsyncPaymentRedirectionData has just been received from the PSP and the finalization\r\n]\r\n","import createMiddleware from 'pmt-modules/redux/createMiddleware'\r\n\r\nimport PaymentErrorsList from 'pmt-modules/api/errors/PaymentErrorsList'\r\nimport { PaymentStatus } from 'pmt-modules/payment/constants'\r\n\r\nimport { GetAsyncPaymentAction, getAsyncPayment } from './actions'\r\nimport { AsyncPaymentPendingStatus, AsyncPaymentCanceledResponseStatus } from './constants'\r\n\r\nfunction getTimeout(asyncPaymentRetry) {\r\n  // 2..10: every 2 seconds\r\n  if (asyncPaymentRetry < 5) {\r\n    return 2000\r\n  }\r\n  // 10..35: every 5 seconds\r\n  if (asyncPaymentRetry < 5 + 5) {\r\n    return 5000\r\n  }\r\n  // 35..125: 10 seconds\r\n  if (asyncPaymentRetry < 5 + 5 + 9) {\r\n    return 10000\r\n  }\r\n  // other: every 20 seconds\r\n  return 20000\r\n}\r\n\r\n/**\r\n * We get the payment after an async transaction in order to verify its status\r\n * on success, we redirect to payment confirmation page\r\n */\r\nconst getAsyncPaymentSuccess = createMiddleware(\r\n  GetAsyncPaymentAction.SUCCESS,\r\n  ({ action, dispatch, next }) => {\r\n    if (!action.response.isFinalized) {\r\n      setTimeout(() => {\r\n        const retry = action.data.retry + 1\r\n        dispatch(getAsyncPayment(action.data.paymentId, action.data, retry))\r\n      }, getTimeout(action.data.retry))\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n\r\n    // async payment is finalized\r\n\r\n    // check if objet is a payment or contains a payment with status failed\r\n    const statusFailed = [PaymentStatus.FAILED, PaymentStatus.REFUND_FAILED, PaymentStatus.REFUNDED]\r\n    if (action.response.payment && statusFailed.includes(action.response.payment.status)) {\r\n      next(action)\r\n\r\n      const defaultError = {\r\n        code: AsyncPaymentCanceledResponseStatus,\r\n        message: 'async payment canceled',\r\n        localizedMessage: PaymentErrorsList[AsyncPaymentCanceledResponseStatus],\r\n        response: {\r\n          ok: false,\r\n          status: AsyncPaymentCanceledResponseStatus,\r\n        },\r\n      }\r\n\r\n      const errorWithoutRefundData = action.response.payment?.errorModel || defaultError;\r\n\r\n      dispatch({\r\n        type: GetAsyncPaymentAction.FAILURE,\r\n        data: action.data,\r\n        error: {\r\n          ...errorWithoutRefundData,\r\n          refunded:  action.response.payment.status === PaymentStatus.REFUNDED\r\n        },\r\n      })\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n  }\r\n)\r\n\r\n/**\r\n * the async payment data verification has failed, retry\r\n */\r\nconst getAsyncPaymentFailure = createMiddleware(\r\n  GetAsyncPaymentAction.FAILURE,\r\n  ({ action, dispatch }) => {\r\n    if (action.error && AsyncPaymentPendingStatus.indexOf(action.error.code) >= 0) {\r\n      setTimeout(() => {\r\n        dispatch(getAsyncPayment(action.data.paymentId, action.data, action.data.retry + 1))\r\n      }, getTimeout(action.data.retry))\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n  }\r\n)\r\n\r\nexport const AsyncPaymentMiddlewares = [getAsyncPaymentSuccess, getAsyncPaymentFailure]\r\n","import get from 'lodash/get'\r\n\r\nimport { AsyncPaymentRedirectToPspResponseStatus } from './constants'\r\n\r\nexport const isAsyncPaymentRedirectToPspResponse = action =>\r\n  get(action, 'error.response.status', false) === AsyncPaymentRedirectToPspResponseStatus\r\n","import isNull from 'lodash/isNull'\r\n\r\nimport OrderErrors from '../errors/OrderErrors'\r\nimport ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nconst OrderApi = {\r\n  /**\r\n   * @param data see 'selectors getOrderData'\r\n   */\r\n  post: (data, options) => {\r\n    /**\r\n     * set authorization headers only if specified\r\n     * (this is used in user light case)\r\n     * otherwise this will be set in /config/getApiManagerOptions.js\r\n     */\r\n    let headers = {}\r\n    if (options && options.authorization) {\r\n      headers.authorization = options.authorization\r\n    }\r\n\r\n    return {\r\n      endpoint: ApiEndpoints.ORDERS,\r\n      headers,\r\n      query: {\r\n        // if true, the order will be accepted only if it comes fully paid, considering the potential grant amount (see **)\r\n        requireFullPayment: !isNull(data.payment),\r\n        // if true, the carts modifiers (aka promotions) available will be applied on the order (see ***)\r\n        applyCartModifiers: true,\r\n        // if false, the order won't be pushed to the POS and will remain local to our system (as some kind of notification to us)\r\n        pushToPos: true,\r\n      },\r\n      type: 'POST',\r\n      body: data,\r\n      errorHandler: OrderErrors.POST,\r\n    }\r\n  },\r\n\r\n  getDetail: orderId => ({\r\n    endpoint: ApiEndpoints.ORDER,\r\n    type: 'GET',\r\n    query: {\r\n      loadPayment: true,\r\n      loadCheck: true,\r\n    },\r\n    params: {\r\n      orderId,\r\n    },\r\n  }),\r\n\r\n  getRestaurantOnGoing: restaurantId => ({\r\n    endpoint: ApiEndpoints.ORDERS_ON_GOING,\r\n    type: 'GET',\r\n    query: {\r\n      restaurantId,\r\n      v2: true,\r\n    },\r\n  }),\r\n\r\n  getRestaurantHistory: (restaurantId, fromDate, toDate) => ({\r\n    endpoint: ApiEndpoints.ORDERS_HISTORY,\r\n    type: 'GET',\r\n    query: {\r\n      restaurantId,\r\n      fromTime: fromDate,\r\n      toTime: toDate,\r\n      v2: true,\r\n      filterBy: 'dueDate',\r\n    },\r\n  }),\r\n\r\n  putOrder: order => ({\r\n    endpoint: ApiEndpoints.ORDER,\r\n    headers: {\r\n      'restaurant-id': order.restaurantId,\r\n    },\r\n    type: 'PUT',\r\n    params: {\r\n      orderId: order.id,\r\n    },\r\n    body: order,\r\n  }),\r\n}\r\n\r\nexport default OrderApi\r\n","import createAction from '../redux/createAction'\r\nimport { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\n\r\nimport OrderApi from 'pmt-modules/api/calls/OrderApi'\r\n\r\nexport const PostOrderAction = {\r\n  ...createApiEnumAction('ORDER_POST::POST'),\r\n  RESET: 'ORDER_POST::POST::RESET',\r\n}\r\n\r\n/**\r\n *\r\n * @param {object} orderData see selectors#getOrderData\r\n *  - restaurantId\r\n *  - userId\r\n *  - cart: reconciliated cart\r\n *  -\r\n */\r\nexport const postOrder = (orderData, options = {}) => {\r\n  return createApiCallAction(PostOrderAction, OrderApi.post(orderData, options), {\r\n    orderData,\r\n    options,\r\n  })\r\n}\r\n\r\nexport const resetPostOrder = () => createAction(PostOrderAction.RESET)\r\n","import { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nimport { formatOrder } from 'pmt-modules/order/format'\r\n\r\nconst getOrderPost = state => state.entities.orderPost\r\n\r\nconst orderPostSelectors = createSimpleSelector(getOrderPost, formatOrder)\r\n\r\nexport const isFetchingOrderPost = orderPostSelectors.isFetching\r\nexport const getDataOrderPost = orderPostSelectors.getData\r\nexport const getErrorOrderPost = orderPostSelectors.getError\r\n","import Immutable from 'immutable'\r\n\r\nimport { createReducer } from 'pmt-modules/redux'\r\nimport { GetAsyncPaymentAction } from 'pmt-modules/asyncPayment'\r\n\r\nimport { PostOrderAction } from './actions'\r\nimport { isAsyncPaymentRedirectToPspResponse } from 'pmt-modules/asyncPayment/utils'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  data: null,\r\n  isFetching: false,\r\n  error: null,\r\n})\r\n\r\nconst handlePostOrderRequest = state =>\r\n  state.merge({\r\n    data: null,\r\n    isFetching: true,\r\n    error: null,\r\n  })\r\n\r\nconst handleFinalizeAsyncPaymentOrderRequest = state =>\r\n  state.merge({\r\n    isFetching: true,\r\n  })\r\n\r\nconst handlePostOrderSuccess = (state, action) =>\r\n  state.merge({\r\n    data: action.response,\r\n    isFetching: false,\r\n    error: null,\r\n  })\r\n\r\nconst handlePostOrderAsyncPaymentSuccess = (state, action) => {\r\n  if (action.response.isFinalized) {\r\n    state.merge({\r\n      data: {\r\n        ...action.response.linkedObject, // linkedObject is the order\r\n        payment: action.response.payment, // keep payment on order data\r\n      },\r\n      isFetching: false,\r\n      error: null,\r\n    })\r\n  }\r\n  return state\r\n}\r\n\r\nconst handlePostOrderFailure = (state, action) => {\r\n  if (isAsyncPaymentRedirectToPspResponse(action)) {\r\n    // receive a 303, which contains the order data, with the psp redirect data.\r\n    // but a 303 is considered as an error in our architecture\r\n    return state.merge({\r\n      data: action.error.body,\r\n      isFetching: false,\r\n      error: null,\r\n    })\r\n  } else {\r\n    // not a 303, we received a real error.\r\n    return state.merge({\r\n      data: null,\r\n      isFetching: false,\r\n      error: action.error,\r\n    })\r\n  }\r\n}\r\n\r\nconst handlePostOrderReset = state =>\r\n  state.merge({\r\n    data: null,\r\n    isFetching: false,\r\n    error: null,\r\n  })\r\n\r\nexport const orderPostReducer = createReducer(DEFAULT_STATE, {\r\n  [PostOrderAction.REQUEST]: handlePostOrderRequest,\r\n  [GetAsyncPaymentAction.REQUEST]: handleFinalizeAsyncPaymentOrderRequest,\r\n  [PostOrderAction.SUCCESS]: handlePostOrderSuccess,\r\n  [GetAsyncPaymentAction.SUCCESS]: handlePostOrderAsyncPaymentSuccess,\r\n  [PostOrderAction.FAILURE]: handlePostOrderFailure,\r\n  [GetAsyncPaymentAction.FAILURE]: handlePostOrderFailure,\r\n  [PostOrderAction.RESET]: handlePostOrderReset,\r\n})\r\n","// TODO: i18n.\r\nconst UserAccountErrors = {\r\n  EDIT: {\r\n    144: 'global.api.user_account.edit.144',\r\n    501: 'global.api.user_account.edit.501',\r\n    default:\r\n      \"Une erreur est survenue lors de la mise à jour du compte de l'utilisateur.\",\r\n  },\r\n}\r\n\r\nexport default UserAccountErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport UserAccountErrors from '../errors/UserAccountErrors'\r\n\r\nconst UserAccountApi = {\r\n  getUserAccounts: userId => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ACCOUNTS,\r\n      type: 'GET',\r\n      params: {\r\n        userId,\r\n      },\r\n    }\r\n  },\r\n\r\n  getUserAccount: (userId, userAccountId, refreshToken = false) => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ACCOUNT,\r\n      type: 'GET',\r\n      params: {\r\n        userId,\r\n        userAccountId,\r\n      },\r\n      query: {\r\n        refreshToken,\r\n      },\r\n    }\r\n  },\r\n\r\n  putUserAccount: (userId, userAccount) => ({\r\n    endpoint: ApiEndpoints.USER_ACCOUNT,\r\n    type: 'PUT',\r\n    params: {\r\n      userId,\r\n      userAccountId: userAccount.id,\r\n    },\r\n    body: userAccount,\r\n    errorHandler: UserAccountErrors.EDIT,\r\n  }),\r\n}\r\n\r\nexport default UserAccountApi\r\n","import createAction from '../redux/createAction'\r\n\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nimport UserAccountApi from '../api/calls/UserAccountApi'\r\n\r\nexport const UserAccountAction = {\r\n  RESET: 'USER_ACCOUNT::RESET',\r\n}\r\n\r\nexport const resetUserAccount = () => createAction(UserAccountAction.RESET)\r\n\r\nexport const FetchUserUserAccountsAction = createApiEnumAction('USER::USER_ACCOUNTS::GET')\r\n\r\nexport const fetchUserUserAccounts = userId =>\r\n  createApiCallAction(FetchUserUserAccountsAction, UserAccountApi.getUserAccounts(userId), {\r\n    userId,\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const FetchUserUserAccountAction = createApiEnumAction('USER::USER_ACCOUNT::GET')\r\n\r\nexport const fetchUserUserAccount = (userId, accountId, refreshToken = false) =>\r\n  createApiCallAction(\r\n    FetchUserUserAccountAction,\r\n    UserAccountApi.getUserAccount(userId, accountId, refreshToken),\r\n    {\r\n      userId,\r\n      accountId,\r\n      refreshToken,\r\n    }\r\n  )\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const UpdateUserAccountAction = createApiEnumAction('USER::USER_ACCOUNT::PUT')\r\n\r\nexport const updateUserAccount = (userId, userAccount) =>\r\n  createApiCallAction(UpdateUserAccountAction, UserAccountApi.putUserAccount(userId, userAccount), {\r\n    userId,\r\n    userAccount,\r\n    accountId: userAccount.id,\r\n  })\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { formatUserAccount, formatUserAccounts } from './format'\r\n\r\nimport { createSimpleSelector } from '../redux'\r\n\r\nconst getUserAccounts = state => state.entities.userAccounts\r\nconst getUserIdOnProps = (state, props) => props.userId\r\nconst getUserAccountIdOnProps = (state, props) => props.userAccountId\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeIsFetchingUserUserAccount = () =>\r\n  createSelector(\r\n    [getUserIdOnProps, getUserAccountIdOnProps, getUserAccounts],\r\n    (userId, userAccountId, userAccountsState) => {\r\n      const userAccountsData = userAccountsState.get(userId, null)\r\n      if (!isNil(userAccountsData)) {\r\n        const userAccounts = userAccountsData.get('list', null)\r\n        if (!isNil(userAccounts)) {\r\n          const userAccount = userAccounts[userAccountId]\r\n          if (!isNil(userAccount)) {\r\n            return userAccount.isFetching\r\n          }\r\n        }\r\n      }\r\n\r\n      return false\r\n    }\r\n  )\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeIsFetchingUserUserAccounts = () =>\r\n  createSelector([getUserIdOnProps, getUserAccounts], (userId, userAccountsState) => {\r\n    const userAccountsData = userAccountsState.get(userId)\r\n    if (isNil(userAccountsData)) {\r\n      return false\r\n    }\r\n\r\n    return userAccountsData.get('isFetching', false)\r\n  })\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeGetUserUserAccountsData = () =>\r\n  createSelector([getUserIdOnProps, getUserAccounts], (userId, userAccountsState) => {\r\n    const userAccountsData = userAccountsState.get(userId)\r\n    if (isNil(userAccountsData)) {\r\n      return null\r\n    }\r\n    return userAccountsData.toJS()\r\n  })\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeGetUserUserAccounts = () =>\r\n  createSelector([getUserIdOnProps, getUserAccounts], (userId, userAccountsState) => {\r\n    const userAccountsData = userAccountsState.get(userId)\r\n    if (isNil(userAccountsData)) {\r\n      return null\r\n    }\r\n\r\n    let userAccounts = userAccountsData.get('list')\r\n\r\n    if (isNil(userAccounts)) {\r\n      return null\r\n    }\r\n\r\n    userAccounts = Object.keys(userAccounts).map(userAccountId => userAccounts[userAccountId].data)\r\n\r\n    return formatUserAccounts(userAccounts)\r\n  })\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n * - userAccountId\r\n */\r\nexport const makeGetUserUserAccount = () =>\r\n  createSelector(\r\n    [getUserIdOnProps, getUserAccountIdOnProps, getUserAccounts],\r\n    (userId, userAccountId, userAccountsState) => {\r\n      const userAccountsData = userAccountsState.get(userId)\r\n      if (isNil(userAccountsData)) {\r\n        return null\r\n      }\r\n\r\n      let userAccounts = userAccountsData.get('list')\r\n\r\n      if (isNil(userAccounts)) {\r\n        return null\r\n      }\r\n\r\n      let userAccount = userAccounts[userAccountId]\r\n\r\n      if (isNil(userAccount)) {\r\n        return null\r\n      }\r\n\r\n      userAccount = userAccount.data\r\n\r\n      return formatUserAccount(userAccount)\r\n    }\r\n  )\r\n\r\n/**\r\n * For convenience, for now, we consider that the user will have only 1 UserAccount\r\n *\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeGetDefaultUserUserAccount = () =>\r\n  createSelector([getUserIdOnProps, getUserAccounts], (userId, userAccountsState) => {\r\n    const userAccountsData = userAccountsState.get(userId)\r\n    if (isNil(userAccountsData)) {\r\n      return null\r\n    }\r\n\r\n    let userAccounts = userAccountsData.get('list')\r\n\r\n    if (isNil(userAccounts)) {\r\n      return null\r\n    }\r\n\r\n    let userAccount = userAccounts[Object.keys(userAccounts)[0]]\r\n\r\n    if (isNil(userAccount)) {\r\n      return null\r\n    }\r\n\r\n    userAccount = userAccount.data\r\n\r\n    return formatUserAccount(userAccount)\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nconst updateUserAccountSelectors = createSimpleSelector(state => state.entities.updateUserAccount)\r\n\r\nexport const getUpdateUserAccountError = updateUserAccountSelectors.getError\r\nexport const getUpdateUserAccountData = updateUserAccountSelectors.getData\r\nexport const isFetchingUpdateUserAccount = updateUserAccountSelectors.isFetching\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport { fetchUserUserAccounts } from '../../actions'\r\n\r\nimport {\r\n  makeGetUserUserAccounts,\r\n  makeIsFetchingUserUserAccounts,\r\n  makeGetDefaultUserUserAccount,\r\n} from '../../selectors'\r\n\r\nimport { redirectTo, getRoute } from '../../../routing'\r\n\r\n/**\r\n * Container that fetch the credit cards for the given `userId` and pass it to the children.\r\n * The `children` must be a `Function as child component`.\r\n *\r\n * Requirements:\r\n * - userId, can be 'me'\r\n *\r\n */\r\nclass UserAccountsContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (\r\n      props.forceUpdate ||\r\n      ((isNull(props.userAccounts) || isNull(props.userAccounts[0])) &&\r\n        !props.isFetchingUserAccounts)\r\n    ) {\r\n      this.loadUserUserAccounts(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n    if (nextProps.userId !== props.userId && !props.isFetchingUserAccounts) {\r\n      this.loadUserUserAccounts(nextProps)\r\n    }\r\n  }\r\n\r\n  loadUserUserAccounts(props) {\r\n    props.fetchUserUserAccounts(props.userId)\r\n  }\r\n\r\n  render() {\r\n    const { isFetchingUserAccounts, userAccounts, userId, children, ...otherProps } = this.props\r\n\r\n    return children({\r\n      isFetchingUserAccounts,\r\n      userAccounts,\r\n      // in most cases, a user only have one user account\r\n      userAccount: userAccounts && userAccounts.length > 0 ? userAccounts[0] : null,\r\n      userId,\r\n      onRedirectToTopUp: () => {\r\n        this.props.redirectTo(getRoute('USER_TOP_UP'))\r\n      },\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nUserAccountsContainer.propTypes = {\r\n  fetchUserUserAccounts: PropTypes.func.isRequired,\r\n  isFetchingUserAccounts: PropTypes.bool,\r\n  userAccounts: PropTypes.array,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getUserAccounts = makeGetUserUserAccounts()\r\n  const getDefaultUserUserAccount = makeGetDefaultUserUserAccount()\r\n  const isFetchingUserAccounts = makeIsFetchingUserUserAccounts()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    const defaultUserAccount = getDefaultUserUserAccount(state, props)\r\n\r\n    return {\r\n      defaultUserAccount,\r\n      // Note: For now we handle only one UserAccount, so the userAccount is the default one\r\n      userAccount: defaultUserAccount,\r\n      userAccounts: getUserAccounts(state, props),\r\n      isFetchingUserAccounts: isFetchingUserAccounts(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchUserUserAccounts,\r\n    redirectTo,\r\n  }\r\n)(UserAccountsContainer)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { fetchUserUserAccount } from '../../actions'\r\n\r\nimport { makeGetUserUserAccount, makeIsFetchingUserUserAccount } from '../../selectors'\r\n\r\nimport { redirectTo, getRoute } from '../../../routing'\r\n\r\n/**\r\n * The `children` must be a `Function as child component`.\r\n *\r\n * Requirements:\r\n * - userId, can be 'me'\r\n *\r\n */\r\nclass UserAccountContainer extends React.Component {\r\n  componentWillMount() {\r\n    if (this.props.userAccount === null || this.props.refreshToken) {\r\n      this.loadUserAccount(this.props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (nextProps.userAccountId !== this.props.userAccountId) {\r\n      this.loadUserAccount(nextProps)\r\n    }\r\n  }\r\n\r\n  loadUserAccount(props) {\r\n    props.fetchUserUserAccount(props.userId, props.userAccountId, props.refreshToken)\r\n  }\r\n\r\n  render() {\r\n    const { isFetchingUserAccount, userAccount, userId, children, ...otherProps } = this.props\r\n\r\n    return children({\r\n      isFetchingUserAccount,\r\n      userAccount,\r\n      userId,\r\n      onRedirectToTopUp: () => {\r\n        this.props.redirectTo(getRoute('USER_TOP_UP'))\r\n      },\r\n      onLoadUserAccount: () => {\r\n        this.loadUserAccount(this.props)\r\n      },\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nUserAccountContainer.propTypes = {\r\n  fetchUserUserAccount: PropTypes.func.isRequired,\r\n  isFetchingUserAccount: PropTypes.bool,\r\n  userAccount: PropTypes.object,\r\n  refreshToken: PropTypes.bool,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nUserAccountContainer.defaultProps = {\r\n  refreshToken: false,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getUserAccount = makeGetUserUserAccount()\r\n  const isFetchingUserAccount = makeIsFetchingUserUserAccount()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      // Note: For now we handle only one UserAccount, so the userAccount is the default one\r\n      userAccount: getUserAccount(state, props),\r\n      isFetchingUserAccount: isFetchingUserAccount(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchUserUserAccount,\r\n    redirectTo,\r\n  }\r\n)(UserAccountContainer)\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nconst RestaurantsGroupApi = {\r\n  getRestaurantsGroup: (restaurantsGroupId, options = {}) => {\r\n    const headers = {}\r\n\r\n    if (options.withAuthorization === false) {\r\n      headers.Authorization = null\r\n    }\r\n\r\n    return {\r\n      endpoint: ApiEndpoints.RESTAURANTS_GROUP,\r\n      type: 'GET',\r\n      headers,\r\n      params: {\r\n        restaurantsGroupId,\r\n      },\r\n      query: {\r\n        loadChildren: options.loadChildren || false,\r\n        withArchived: options.withArchived || false,\r\n      },\r\n    }\r\n  },\r\n\r\n  postRestaurantsGroup: body => ({\r\n    endpoint: ApiEndpoints.RESTAURANTS_GROUPS,\r\n    type: 'POST',\r\n    body,\r\n  }),\r\n\r\n  searchUser: ({ body, params }) => {\r\n    return {\r\n      endpoint: ApiEndpoints.RESTAURANTS_GROUP_SEARCH_USERS,\r\n      type: 'POST',\r\n      params,\r\n      body: {\r\n        query: body.query,\r\n        companyId: body.companyId,\r\n      },\r\n    }\r\n  },\r\n\r\n  putGroupStoreList: (groupId, storesIds = []) => ({\r\n    endpoint: ApiEndpoints.RESTAURANTS_GROUP_RESTAURANTS,\r\n    type: 'PUT',\r\n    body: {\r\n      restaurantsGroupId: groupId,\r\n      restaurantsIds: storesIds,\r\n    },\r\n  }),\r\n\r\n  putGroupGroupList: (groupId, childrenIds = []) => ({\r\n    endpoint: ApiEndpoints.RESTAURANTS_GROUP_HIERARCHY,\r\n    type: 'PUT',\r\n    body: {\r\n      parentRestaurantsGroupId: groupId,\r\n      childrenIds,\r\n    },\r\n  }),\r\n\r\n  patchGroup: (groupId, body) => ({\r\n    endpoint: ApiEndpoints.RESTAURANTS_GROUP,\r\n    type: 'PATCH',\r\n    params: {\r\n      restaurantsGroupId: groupId,\r\n    },\r\n    body,\r\n  }),\r\n}\r\n\r\nexport default RestaurantsGroupApi\r\n","/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017-2022 Joachim Wester\n * MIT licensed\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function hasOwnProperty(obj, key) {\n    return _hasOwnProperty.call(obj, key);\n}\nexport function _objectKeys(obj) {\n    if (Array.isArray(obj)) {\n        var keys_1 = new Array(obj.length);\n        for (var k = 0; k < keys_1.length; k++) {\n            keys_1[k] = \"\" + k;\n        }\n        return keys_1;\n    }\n    if (Object.keys) {\n        return Object.keys(obj);\n    }\n    var keys = [];\n    for (var i in obj) {\n        if (hasOwnProperty(obj, i)) {\n            keys.push(i);\n        }\n    }\n    return keys;\n}\n;\n/**\n* Deeply clone the object.\n* https://jsperf.com/deep-copy-vs-json-stringify-json-parse/25 (recursiveDeepCopy)\n* @param  {any} obj value to clone\n* @return {any} cloned obj\n*/\nexport function _deepClone(obj) {\n    switch (typeof obj) {\n        case \"object\":\n            return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5\n        case \"undefined\":\n            return null; //this is how JSON.stringify behaves for array items\n        default:\n            return obj; //no need to clone primitives\n    }\n}\n//3x faster than cached /^\\d+$/.test(str)\nexport function isInteger(str) {\n    var i = 0;\n    var len = str.length;\n    var charCode;\n    while (i < len) {\n        charCode = str.charCodeAt(i);\n        if (charCode >= 48 && charCode <= 57) {\n            i++;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n/**\n* Escapes a json pointer path\n* @param path The raw pointer\n* @return the Escaped path\n*/\nexport function escapePathComponent(path) {\n    if (path.indexOf('/') === -1 && path.indexOf('~') === -1)\n        return path;\n    return path.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n/**\n * Unescapes a json pointer path\n * @param path The escaped pointer\n * @return The unescaped path\n */\nexport function unescapePathComponent(path) {\n    return path.replace(/~1/g, '/').replace(/~0/g, '~');\n}\nexport function _getPathRecursive(root, obj) {\n    var found;\n    for (var key in root) {\n        if (hasOwnProperty(root, key)) {\n            if (root[key] === obj) {\n                return escapePathComponent(key) + '/';\n            }\n            else if (typeof root[key] === 'object') {\n                found = _getPathRecursive(root[key], obj);\n                if (found != '') {\n                    return escapePathComponent(key) + '/' + found;\n                }\n            }\n        }\n    }\n    return '';\n}\nexport function getPath(root, obj) {\n    if (root === obj) {\n        return '/';\n    }\n    var path = _getPathRecursive(root, obj);\n    if (path === '') {\n        throw new Error(\"Object not found in root\");\n    }\n    return \"/\" + path;\n}\n/**\n* Recursively checks whether an object has any undefined values inside.\n*/\nexport function hasUndefined(obj) {\n    if (obj === undefined) {\n        return true;\n    }\n    if (obj) {\n        if (Array.isArray(obj)) {\n            for (var i_1 = 0, len = obj.length; i_1 < len; i_1++) {\n                if (hasUndefined(obj[i_1])) {\n                    return true;\n                }\n            }\n        }\n        else if (typeof obj === \"object\") {\n            var objKeys = _objectKeys(obj);\n            var objKeysLength = objKeys.length;\n            for (var i = 0; i < objKeysLength; i++) {\n                if (hasUndefined(obj[objKeys[i]])) {\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\nfunction patchErrorMessageFormatter(message, args) {\n    var messageParts = [message];\n    for (var key in args) {\n        var value = typeof args[key] === 'object' ? JSON.stringify(args[key], null, 2) : args[key]; // pretty print\n        if (typeof value !== 'undefined') {\n            messageParts.push(key + \": \" + value);\n        }\n    }\n    return messageParts.join('\\n');\n}\nvar PatchError = /** @class */ (function (_super) {\n    __extends(PatchError, _super);\n    function PatchError(message, name, index, operation, tree) {\n        var _newTarget = this.constructor;\n        var _this = _super.call(this, patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree })) || this;\n        _this.name = name;\n        _this.index = index;\n        _this.operation = operation;\n        _this.tree = tree;\n        Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain, see https://stackoverflow.com/a/48342359\n        _this.message = patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree });\n        return _this;\n    }\n    return PatchError;\n}(Error));\nexport { PatchError };\n","import { PatchError, _deepClone, isInteger, unescapePathComponent, hasUndefined } from './helpers.mjs';\nexport var JsonPatchError = PatchError;\nexport var deepClone = _deepClone;\n/* We use a Javascript hash to store each\n function. Each hash entry (property) uses\n the operation identifiers specified in rfc6902.\n In this way, we can map each patch operation\n to its dedicated function in efficient way.\n */\n/* The operations applicable to an object */\nvar objOps = {\n    add: function (obj, key, document) {\n        obj[key] = this.value;\n        return { newDocument: document };\n    },\n    remove: function (obj, key, document) {\n        var removed = obj[key];\n        delete obj[key];\n        return { newDocument: document, removed: removed };\n    },\n    replace: function (obj, key, document) {\n        var removed = obj[key];\n        obj[key] = this.value;\n        return { newDocument: document, removed: removed };\n    },\n    move: function (obj, key, document) {\n        /* in case move target overwrites an existing value,\n        return the removed value, this can be taxing performance-wise,\n        and is potentially unneeded */\n        var removed = getValueByPointer(document, this.path);\n        if (removed) {\n            removed = _deepClone(removed);\n        }\n        var originalValue = applyOperation(document, { op: \"remove\", path: this.from }).removed;\n        applyOperation(document, { op: \"add\", path: this.path, value: originalValue });\n        return { newDocument: document, removed: removed };\n    },\n    copy: function (obj, key, document) {\n        var valueToCopy = getValueByPointer(document, this.from);\n        // enforce copy by value so further operations don't affect source (see issue #177)\n        applyOperation(document, { op: \"add\", path: this.path, value: _deepClone(valueToCopy) });\n        return { newDocument: document };\n    },\n    test: function (obj, key, document) {\n        return { newDocument: document, test: _areEquals(obj[key], this.value) };\n    },\n    _get: function (obj, key, document) {\n        this.value = obj[key];\n        return { newDocument: document };\n    }\n};\n/* The operations applicable to an array. Many are the same as for the object */\nvar arrOps = {\n    add: function (arr, i, document) {\n        if (isInteger(i)) {\n            arr.splice(i, 0, this.value);\n        }\n        else { // array props\n            arr[i] = this.value;\n        }\n        // this may be needed when using '-' in an array\n        return { newDocument: document, index: i };\n    },\n    remove: function (arr, i, document) {\n        var removedList = arr.splice(i, 1);\n        return { newDocument: document, removed: removedList[0] };\n    },\n    replace: function (arr, i, document) {\n        var removed = arr[i];\n        arr[i] = this.value;\n        return { newDocument: document, removed: removed };\n    },\n    move: objOps.move,\n    copy: objOps.copy,\n    test: objOps.test,\n    _get: objOps._get\n};\n/**\n * Retrieves a value from a JSON document by a JSON pointer.\n * Returns the value.\n *\n * @param document The document to get the value from\n * @param pointer an escaped JSON pointer\n * @return The retrieved value\n */\nexport function getValueByPointer(document, pointer) {\n    if (pointer == '') {\n        return document;\n    }\n    var getOriginalDestination = { op: \"_get\", path: pointer };\n    applyOperation(document, getOriginalDestination);\n    return getOriginalDestination.value;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the {newDocument, result} of the operation.\n * It modifies the `document` and `operation` objects - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyOperation(document, jsonpatch._deepClone(operation))`.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return `{newDocument, result}` after the operation\n */\nexport function applyOperation(document, operation, validateOperation, mutateDocument, banPrototypeModifications, index) {\n    if (validateOperation === void 0) { validateOperation = false; }\n    if (mutateDocument === void 0) { mutateDocument = true; }\n    if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n    if (index === void 0) { index = 0; }\n    if (validateOperation) {\n        if (typeof validateOperation == 'function') {\n            validateOperation(operation, 0, document, operation.path);\n        }\n        else {\n            validator(operation, 0);\n        }\n    }\n    /* ROOT OPERATIONS */\n    if (operation.path === \"\") {\n        var returnValue = { newDocument: document };\n        if (operation.op === 'add') {\n            returnValue.newDocument = operation.value;\n            return returnValue;\n        }\n        else if (operation.op === 'replace') {\n            returnValue.newDocument = operation.value;\n            returnValue.removed = document; //document we removed\n            return returnValue;\n        }\n        else if (operation.op === 'move' || operation.op === 'copy') { // it's a move or copy to root\n            returnValue.newDocument = getValueByPointer(document, operation.from); // get the value by json-pointer in `from` field\n            if (operation.op === 'move') { // report removed item\n                returnValue.removed = document;\n            }\n            return returnValue;\n        }\n        else if (operation.op === 'test') {\n            returnValue.test = _areEquals(document, operation.value);\n            if (returnValue.test === false) {\n                throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n            }\n            returnValue.newDocument = document;\n            return returnValue;\n        }\n        else if (operation.op === 'remove') { // a remove on root\n            returnValue.removed = document;\n            returnValue.newDocument = null;\n            return returnValue;\n        }\n        else if (operation.op === '_get') {\n            operation.value = document;\n            return returnValue;\n        }\n        else { /* bad operation */\n            if (validateOperation) {\n                throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n            }\n            else {\n                return returnValue;\n            }\n        }\n    } /* END ROOT OPERATIONS */\n    else {\n        if (!mutateDocument) {\n            document = _deepClone(document);\n        }\n        var path = operation.path || \"\";\n        var keys = path.split('/');\n        var obj = document;\n        var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift\n        var len = keys.length;\n        var existingPathFragment = undefined;\n        var key = void 0;\n        var validateFunction = void 0;\n        if (typeof validateOperation == 'function') {\n            validateFunction = validateOperation;\n        }\n        else {\n            validateFunction = validator;\n        }\n        while (true) {\n            key = keys[t];\n            if (key && key.indexOf('~') != -1) {\n                key = unescapePathComponent(key);\n            }\n            if (banPrototypeModifications &&\n                (key == '__proto__' ||\n                    (key == 'prototype' && t > 0 && keys[t - 1] == 'constructor'))) {\n                throw new TypeError('JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README');\n            }\n            if (validateOperation) {\n                if (existingPathFragment === undefined) {\n                    if (obj[key] === undefined) {\n                        existingPathFragment = keys.slice(0, t).join('/');\n                    }\n                    else if (t == len - 1) {\n                        existingPathFragment = operation.path;\n                    }\n                    if (existingPathFragment !== undefined) {\n                        validateFunction(operation, 0, document, existingPathFragment);\n                    }\n                }\n            }\n            t++;\n            if (Array.isArray(obj)) {\n                if (key === '-') {\n                    key = obj.length;\n                }\n                else {\n                    if (validateOperation && !isInteger(key)) {\n                        throw new JsonPatchError(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\", \"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\", index, operation, document);\n                    } // only parse key when it's an integer for `arr.prop` to work\n                    else if (isInteger(key)) {\n                        key = ~~key;\n                    }\n                }\n                if (t >= len) {\n                    if (validateOperation && operation.op === \"add\" && key > obj.length) {\n                        throw new JsonPatchError(\"The specified index MUST NOT be greater than the number of elements in the array\", \"OPERATION_VALUE_OUT_OF_BOUNDS\", index, operation, document);\n                    }\n                    var returnValue = arrOps[operation.op].call(operation, obj, key, document); // Apply patch\n                    if (returnValue.test === false) {\n                        throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n                    }\n                    return returnValue;\n                }\n            }\n            else {\n                if (t >= len) {\n                    var returnValue = objOps[operation.op].call(operation, obj, key, document); // Apply patch\n                    if (returnValue.test === false) {\n                        throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n                    }\n                    return returnValue;\n                }\n            }\n            obj = obj[key];\n            // If we have more keys in the path, but the next value isn't a non-null object,\n            // throw an OPERATION_PATH_UNRESOLVABLE error instead of iterating again.\n            if (validateOperation && t < len && (!obj || typeof obj !== \"object\")) {\n                throw new JsonPatchError('Cannot perform operation at the desired path', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n            }\n        }\n    }\n}\n/**\n * Apply a full JSON Patch array on a JSON document.\n * Returns the {newDocument, result} of the patch.\n * It modifies the `document` object and `patch` - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyPatch(document, jsonpatch._deepClone(patch))`.\n *\n * @param document The document to patch\n * @param patch The patch to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return An array of `{newDocument, result}` after the patch\n */\nexport function applyPatch(document, patch, validateOperation, mutateDocument, banPrototypeModifications) {\n    if (mutateDocument === void 0) { mutateDocument = true; }\n    if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n    if (validateOperation) {\n        if (!Array.isArray(patch)) {\n            throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n        }\n    }\n    if (!mutateDocument) {\n        document = _deepClone(document);\n    }\n    var results = new Array(patch.length);\n    for (var i = 0, length_1 = patch.length; i < length_1; i++) {\n        // we don't need to pass mutateDocument argument because if it was true, we already deep cloned the object, we'll just pass `true`\n        results[i] = applyOperation(document, patch[i], validateOperation, true, banPrototypeModifications, i);\n        document = results[i].newDocument; // in case root was replaced\n    }\n    results.newDocument = document;\n    return results;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the updated document.\n * Suitable as a reducer.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @return The updated document\n */\nexport function applyReducer(document, operation, index) {\n    var operationResult = applyOperation(document, operation);\n    if (operationResult.test === false) { // failed test\n        throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n    }\n    return operationResult.newDocument;\n}\n/**\n * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error.\n * @param {object} operation - operation object (patch)\n * @param {number} index - index of operation in the sequence\n * @param {object} [document] - object where the operation is supposed to be applied\n * @param {string} [existingPathFragment] - comes along with `document`\n */\nexport function validator(operation, index, document, existingPathFragment) {\n    if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) {\n        throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, document);\n    }\n    else if (!objOps[operation.op]) {\n        throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n    }\n    else if (typeof operation.path !== 'string') {\n        throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, document);\n    }\n    else if (operation.path.indexOf('/') !== 0 && operation.path.length > 0) {\n        // paths that aren't empty string should start with \"/\"\n        throw new JsonPatchError('Operation `path` property must start with \"/\"', 'OPERATION_PATH_INVALID', index, operation, document);\n    }\n    else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') {\n        throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, document);\n    }\n    else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) {\n        throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, document);\n    }\n    else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) {\n        throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, document);\n    }\n    else if (document) {\n        if (operation.op == \"add\") {\n            var pathLen = operation.path.split(\"/\").length;\n            var existingPathLen = existingPathFragment.split(\"/\").length;\n            if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) {\n                throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, document);\n            }\n        }\n        else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') {\n            if (operation.path !== existingPathFragment) {\n                throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n            }\n        }\n        else if (operation.op === 'move' || operation.op === 'copy') {\n            var existingValue = { op: \"_get\", path: operation.from, value: undefined };\n            var error = validate([existingValue], document);\n            if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') {\n                throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, document);\n            }\n        }\n    }\n}\n/**\n * Validates a sequence of operations. If `document` parameter is provided, the sequence is additionally validated against the object document.\n * If error is encountered, returns a JsonPatchError object\n * @param sequence\n * @param document\n * @returns {JsonPatchError|undefined}\n */\nexport function validate(sequence, document, externalValidator) {\n    try {\n        if (!Array.isArray(sequence)) {\n            throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n        }\n        if (document) {\n            //clone document and sequence so that we can safely try applying operations\n            applyPatch(_deepClone(document), _deepClone(sequence), externalValidator || true);\n        }\n        else {\n            externalValidator = externalValidator || validator;\n            for (var i = 0; i < sequence.length; i++) {\n                externalValidator(sequence[i], i, document, undefined);\n            }\n        }\n    }\n    catch (e) {\n        if (e instanceof JsonPatchError) {\n            return e;\n        }\n        else {\n            throw e;\n        }\n    }\n}\n// based on https://github.com/epoberezkin/fast-deep-equal\n// MIT License\n// Copyright (c) 2017 Evgeny Poberezkin\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\nexport function _areEquals(a, b) {\n    if (a === b)\n        return true;\n    if (a && b && typeof a == 'object' && typeof b == 'object') {\n        var arrA = Array.isArray(a), arrB = Array.isArray(b), i, length, key;\n        if (arrA && arrB) {\n            length = a.length;\n            if (length != b.length)\n                return false;\n            for (i = length; i-- !== 0;)\n                if (!_areEquals(a[i], b[i]))\n                    return false;\n            return true;\n        }\n        if (arrA != arrB)\n            return false;\n        var keys = Object.keys(a);\n        length = keys.length;\n        if (length !== Object.keys(b).length)\n            return false;\n        for (i = length; i-- !== 0;)\n            if (!b.hasOwnProperty(keys[i]))\n                return false;\n        for (i = length; i-- !== 0;) {\n            key = keys[i];\n            if (!_areEquals(a[key], b[key]))\n                return false;\n        }\n        return true;\n    }\n    return a !== a && b !== b;\n}\n;\n","/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017-2021 Joachim Wester\n * MIT license\n */\nimport { _deepClone, _objectKeys, escapePathComponent, hasOwnProperty } from './helpers.mjs';\nimport { applyPatch } from './core.mjs';\nvar beforeDict = new WeakMap();\nvar Mirror = /** @class */ (function () {\n    function Mirror(obj) {\n        this.observers = new Map();\n        this.obj = obj;\n    }\n    return Mirror;\n}());\nvar ObserverInfo = /** @class */ (function () {\n    function ObserverInfo(callback, observer) {\n        this.callback = callback;\n        this.observer = observer;\n    }\n    return ObserverInfo;\n}());\nfunction getMirror(obj) {\n    return beforeDict.get(obj);\n}\nfunction getObserverFromMirror(mirror, callback) {\n    return mirror.observers.get(callback);\n}\nfunction removeObserverFromMirror(mirror, observer) {\n    mirror.observers.delete(observer.callback);\n}\n/**\n * Detach an observer from an object\n */\nexport function unobserve(root, observer) {\n    observer.unobserve();\n}\n/**\n * Observes changes made to an object, which can then be retrieved using generate\n */\nexport function observe(obj, callback) {\n    var patches = [];\n    var observer;\n    var mirror = getMirror(obj);\n    if (!mirror) {\n        mirror = new Mirror(obj);\n        beforeDict.set(obj, mirror);\n    }\n    else {\n        var observerInfo = getObserverFromMirror(mirror, callback);\n        observer = observerInfo && observerInfo.observer;\n    }\n    if (observer) {\n        return observer;\n    }\n    observer = {};\n    mirror.value = _deepClone(obj);\n    if (callback) {\n        observer.callback = callback;\n        observer.next = null;\n        var dirtyCheck = function () {\n            generate(observer);\n        };\n        var fastCheck = function () {\n            clearTimeout(observer.next);\n            observer.next = setTimeout(dirtyCheck);\n        };\n        if (typeof window !== 'undefined') { //not Node\n            window.addEventListener('mouseup', fastCheck);\n            window.addEventListener('keyup', fastCheck);\n            window.addEventListener('mousedown', fastCheck);\n            window.addEventListener('keydown', fastCheck);\n            window.addEventListener('change', fastCheck);\n        }\n    }\n    observer.patches = patches;\n    observer.object = obj;\n    observer.unobserve = function () {\n        generate(observer);\n        clearTimeout(observer.next);\n        removeObserverFromMirror(mirror, observer);\n        if (typeof window !== 'undefined') {\n            window.removeEventListener('mouseup', fastCheck);\n            window.removeEventListener('keyup', fastCheck);\n            window.removeEventListener('mousedown', fastCheck);\n            window.removeEventListener('keydown', fastCheck);\n            window.removeEventListener('change', fastCheck);\n        }\n    };\n    mirror.observers.set(callback, new ObserverInfo(callback, observer));\n    return observer;\n}\n/**\n * Generate an array of patches from an observer\n */\nexport function generate(observer, invertible) {\n    if (invertible === void 0) { invertible = false; }\n    var mirror = beforeDict.get(observer.object);\n    _generate(mirror.value, observer.object, observer.patches, \"\", invertible);\n    if (observer.patches.length) {\n        applyPatch(mirror.value, observer.patches);\n    }\n    var temp = observer.patches;\n    if (temp.length > 0) {\n        observer.patches = [];\n        if (observer.callback) {\n            observer.callback(temp);\n        }\n    }\n    return temp;\n}\n// Dirty check if obj is different from mirror, generate patches and update mirror\nfunction _generate(mirror, obj, patches, path, invertible) {\n    if (obj === mirror) {\n        return;\n    }\n    if (typeof obj.toJSON === \"function\") {\n        obj = obj.toJSON();\n    }\n    var newKeys = _objectKeys(obj);\n    var oldKeys = _objectKeys(mirror);\n    var changed = false;\n    var deleted = false;\n    //if ever \"move\" operation is implemented here, make sure this test runs OK: \"should not generate the same patch twice (move)\"\n    for (var t = oldKeys.length - 1; t >= 0; t--) {\n        var key = oldKeys[t];\n        var oldVal = mirror[key];\n        if (hasOwnProperty(obj, key) && !(obj[key] === undefined && oldVal !== undefined && Array.isArray(obj) === false)) {\n            var newVal = obj[key];\n            if (typeof oldVal == \"object\" && oldVal != null && typeof newVal == \"object\" && newVal != null && Array.isArray(oldVal) === Array.isArray(newVal)) {\n                _generate(oldVal, newVal, patches, path + \"/\" + escapePathComponent(key), invertible);\n            }\n            else {\n                if (oldVal !== newVal) {\n                    changed = true;\n                    if (invertible) {\n                        patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n                    }\n                    patches.push({ op: \"replace\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(newVal) });\n                }\n            }\n        }\n        else if (Array.isArray(mirror) === Array.isArray(obj)) {\n            if (invertible) {\n                patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n            }\n            patches.push({ op: \"remove\", path: path + \"/\" + escapePathComponent(key) });\n            deleted = true; // property has been deleted\n        }\n        else {\n            if (invertible) {\n                patches.push({ op: \"test\", path: path, value: mirror });\n            }\n            patches.push({ op: \"replace\", path: path, value: obj });\n            changed = true;\n        }\n    }\n    if (!deleted && newKeys.length == oldKeys.length) {\n        return;\n    }\n    for (var t = 0; t < newKeys.length; t++) {\n        var key = newKeys[t];\n        if (!hasOwnProperty(mirror, key) && obj[key] !== undefined) {\n            patches.push({ op: \"add\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(obj[key]) });\n        }\n    }\n}\n/**\n * Create an array of patches from the differences in two objects\n */\nexport function compare(tree1, tree2, invertible) {\n    if (invertible === void 0) { invertible = false; }\n    var patches = [];\n    _generate(tree1, tree2, patches, '', invertible);\n    return patches;\n}\n","export * from './module/core.mjs';\nexport * from './module/duplex.mjs';\nexport {\n    PatchError as JsonPatchError,\n    _deepClone as deepClone,\n    escapePathComponent,\n    unescapePathComponent\n} from './module/helpers.mjs';\n\n\n/**\n * Default export for backwards compat\n */\n\nimport * as core from './module/core.mjs';\nimport * as duplex from './module/duplex.mjs';\nimport {\n    PatchError as JsonPatchError,\n    _deepClone as deepClone,\n    escapePathComponent,\n    unescapePathComponent\n} from './module/helpers.mjs';\n\nexport default Object.assign({}, core, duplex, {\n    JsonPatchError,\n    deepClone,\n    escapePathComponent,\n    unescapePathComponent\n});","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport RestaurantsGroupApi from 'pmt-modules/api/calls/RestaurantsGroupApi'\r\nimport { compare } from 'fast-json-patch'\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const GetRestaurantsGroupAction = createApiEnumAction('RESTAURANTSGROUP::GET')\r\n\r\nconst DEFAULT_OPTIONS = {\r\n  // default false, to avoid missing it.\r\n  withAuthorization: false,\r\n}\r\n\r\nexport const PostRestaurantsGroupAction = createApiEnumAction('RESTAURANTSGROUP::POST')\r\nexport const postRestaurantsGroup = restaurantsGroup =>\r\n  createApiCallAction(\r\n    PostRestaurantsGroupAction,\r\n    RestaurantsGroupApi.postRestaurantsGroup(restaurantsGroup),\r\n    {\r\n      restaurantsGroup,\r\n    }\r\n  )\r\n\r\n/**\r\n *\r\n * @param {string|number} restaurantsGroupId can either be a string ('mine') or a number\r\n * @param {object} options\r\n */\r\nexport const fetchRestaurantsGroup = (restaurantsGroupId, options = DEFAULT_OPTIONS) =>\r\n  createApiCallAction(\r\n    GetRestaurantsGroupAction,\r\n    RestaurantsGroupApi.getRestaurantsGroup(restaurantsGroupId, options),\r\n    {\r\n      restaurantsGroupId,\r\n      options,\r\n    }\r\n  )\r\n\r\nexport const PutGroupStoreListAction = createApiEnumAction('GROUP::PUT::STORE_LIST')\r\n\r\nexport const putGroupStoreList = (groupId, storesIds) =>\r\n  createApiCallAction(\r\n    PutGroupStoreListAction,\r\n    RestaurantsGroupApi.putGroupStoreList(groupId, storesIds),\r\n    {\r\n      groupId,\r\n      storesIds,\r\n    }\r\n  )\r\n\r\nexport const PutGroupGroupListAction = createApiEnumAction('GROUP::PUT::GROUP_LIST')\r\n\r\nexport const putGroupChildrenGroupList = (parentGroupId, childrenIds) =>\r\n  createApiCallAction(\r\n    PutGroupGroupListAction,\r\n    RestaurantsGroupApi.putGroupGroupList(parentGroupId, childrenIds),\r\n    {\r\n      parentGroupId,\r\n      childrenIds,\r\n    }\r\n  )\r\n\r\nexport const PatchGroupAction = createApiEnumAction('GROUP::PATCH::GROUP')\r\n\r\nexport const patchGroup = (defaultData, formData) => {\r\n  if (process.env.FEATURE_BO) {\r\n    const body = compare(defaultData, formData)\r\n\r\n    return createApiCallAction(\r\n      PatchGroupAction,\r\n      RestaurantsGroupApi.patchGroup(defaultData.id, body),\r\n      {\r\n        restaurantsGroupId: defaultData.id,\r\n        defaultData,\r\n        formData,\r\n        body,\r\n      }\r\n    )\r\n  }\r\n}\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport keys from 'lodash/keys'\r\nimport map from 'lodash/map'\r\n\r\n/**\r\n * Defines the different possible type to display the history (on the web customer)\r\n */\r\nexport const FrontCateringHistoryType = {\r\n  PAY_MY_TABLE: 'PAY_MY_TABLE',\r\n  THIRD_PARTY: 'THIRD_PARTY',\r\n}\r\n\r\nexport const GroupType = {\r\n  USER: 'USER',\r\n  OTHER: 'OTHER',\r\n}\r\n\r\nexport const AcquirerType = {\r\n  MANGOPAY: 'MANGOPAY',\r\n  PAYGREEN: 'PAYGREEN',\r\n  FAKE: 'FAKE',\r\n  NONE: null,\r\n}\r\n\r\nexport const getAcquirerLabel = acquirer => {\r\n  switch (acquirer) {\r\n    case AcquirerType.MANGOPAY:\r\n      return 'MangoPay'\r\n    case AcquirerType.PAYGREEN:\r\n      return 'PayGreen'\r\n    case AcquirerType.FAKE:\r\n      return 'FAKE'\r\n    default:\r\n      return tr('global.none')\r\n  }\r\n}\r\n\r\nexport const UserManagerType = {\r\n  NONE: null,\r\n  TCPOS: 'tcpos',\r\n}\r\n\r\nexport const getUserManagerTypeLabel = type => {\r\n  switch (type) {\r\n    case UserManagerType.TCPOS:\r\n      return 'TCPOS'\r\n    default:\r\n      return tr('global.none')\r\n  }\r\n}\r\n\r\nexport const getGroupType = type => GroupType[type]\r\n\r\nexport const getGroupTypeLabel = type => {\r\n  switch (type) {\r\n    case GroupType.USER:\r\n      return tr('global.groups.type.user')\r\n    case GroupType.OTHER:\r\n      return tr('global.groups.type.other')\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const getGroupTypesLabelAsArray = () =>\r\n  keys(GroupType).map(value => ({\r\n    label: getGroupTypeLabel(value),\r\n    value,\r\n  }))\r\n\r\n/**\r\n * Enum of locales that are handled by PMT. Only those locales can be defined as used locales on our\r\n * configurations (such as RestaurantsGroup locales).\r\n */\r\nexport const PMTLocale = {\r\n  // languages without country\r\n  // so we can handle them if the TCPOS configuration gives us PIM item with localizedNames without the country code\r\n\r\n  // cf. LocaleFlag.getCountryForLocale to configure the flag to use for those country-less locales\r\n  sq: 'sq',\r\n  ar: 'ar',\r\n  be: 'be',\r\n  bg: 'bg',\r\n  ca: 'ca',\r\n  zh: 'zh',\r\n  hr: 'hr',\r\n  cs: 'cs',\r\n  da: 'da',\r\n  nl: 'nl',\r\n  en: 'en',\r\n  et: 'et',\r\n  fi: 'fi',\r\n  fr: 'fr',\r\n  de: 'de',\r\n  el: 'el',\r\n  iw: 'iw',\r\n  hi: 'hi',\r\n  hu: 'hu',\r\n  is: 'is',\r\n  in: 'in',\r\n  ga: 'ga',\r\n  it: 'it',\r\n  ja: 'ja',\r\n  ko: 'ko',\r\n  lv: 'lv',\r\n  lt: 'lt',\r\n  mk: 'mk',\r\n  ms: 'ms',\r\n  mt: 'mt',\r\n  no: 'no',\r\n  pl: 'pl',\r\n  pt: 'pt',\r\n  ro: 'ro',\r\n  ru: 'ru',\r\n  sr: 'sr',\r\n  sk: 'sk',\r\n  sl: 'sl',\r\n  es: 'es',\r\n  sv: 'sv',\r\n  th: 'th',\r\n  tr: 'tr',\r\n  uk: 'uk',\r\n  vi: 'vi',\r\n\r\n  // languages with country code\r\n  sq_AL: 'sq-AL',\r\n  ar_DZ: 'ar-DZ',\r\n  ar_BH: 'ar-BH',\r\n  ar_EG: 'ar-EG',\r\n  ar_IQ: 'ar-IQ',\r\n  ar_JO: 'ar-JO',\r\n  ar_KW: 'ar-KW',\r\n  ar_LB: 'ar-LB',\r\n  ar_LY: 'ar-LY',\r\n  ar_MA: 'ar-MA',\r\n  ar_OM: 'ar-OM',\r\n  ar_QA: 'ar-QA',\r\n  ar_SA: 'ar-SA',\r\n  ar_SD: 'ar-SD',\r\n  ar_SY: 'ar-SY',\r\n  ar_TN: 'ar-TN',\r\n  ar_AE: 'ar-AE',\r\n  ar_YE: 'ar-YE',\r\n  be_BY: 'be-BY',\r\n  bg_BG: 'bg-BG',\r\n  ca_ES: 'ca-ES',\r\n  zh_CN: 'zh-CN',\r\n  zh_SG: 'zh-SG',\r\n  zh_HK: 'zh-HK',\r\n  zh_TW: 'zh-TW',\r\n  hr_HR: 'hr-HR',\r\n  cs_CZ: 'cs-CZ',\r\n  da_DK: 'da-DK',\r\n  nl_BE: 'nl-BE',\r\n  nl_NL: 'nl-NL',\r\n  en_AU: 'en-AU',\r\n  en_CA: 'en-CA',\r\n  en_IN: 'en-IN',\r\n  en_IE: 'en-IE',\r\n  en_MT: 'en-MT',\r\n  en_NZ: 'en-NZ',\r\n  en_PH: 'en-PH',\r\n  en_SG: 'en-SG',\r\n  en_ZA: 'en-ZA',\r\n  en_GB: 'en-GB',\r\n  en_US: 'en-US',\r\n  et_EE: 'et-EE',\r\n  fi_FI: 'fi-FI',\r\n  fr_FR: 'fr-FR',\r\n  fr_BE: 'fr-BE',\r\n  fr_CA: 'fr-CA',\r\n  fr_LU: 'fr-LU',\r\n  fr_CH: 'fr-CH',\r\n  de_AT: 'de-AT',\r\n  de_DE: 'de-DE',\r\n  de_LU: 'de-LU',\r\n  de_CH: 'de-CH',\r\n  el_CY: 'el-CY',\r\n  el_GR: 'el-GR',\r\n  iw_IL: 'iw-IL',\r\n  hi_IN: 'hi-IN',\r\n  hu_HU: 'hu-HU',\r\n  is_IS: 'is-IS',\r\n  in_ID: 'in-ID',\r\n  ga_IE: 'ga-IE',\r\n  it_IT: 'it-IT',\r\n  it_CH: 'it-CH',\r\n  ja_JP: 'ja-JP',\r\n  ko_KR: 'ko-KR',\r\n  lv_LV: 'lv-LV',\r\n  lt_LT: 'lt-LT',\r\n  mk_MK: 'mk-MK',\r\n  ms_MY: 'ms-MY',\r\n  mt_MT: 'mt-MT',\r\n  no_NO: 'no-NO',\r\n  pl_PL: 'pl-PL',\r\n  pt_BR: 'pt-BR',\r\n  pt_PT: 'pt-PT',\r\n  ro_RO: 'ro-RO',\r\n  ru_RU: 'ru-RU',\r\n  sr_BA: 'sr-BA',\r\n  sr_ME: 'sr-ME',\r\n  sr_RS: 'sr-RS',\r\n  sk_SK: 'sk-SK',\r\n  sl_SI: 'sl-SI',\r\n  es_AR: 'es-AR',\r\n  es_BO: 'es-BO',\r\n  es_CL: 'es-CL',\r\n  es_CO: 'es-CO',\r\n  es_CR: 'es-CR',\r\n  es_DO: 'es-DO',\r\n  es_EC: 'es-EC',\r\n  es_SV: 'es-SV',\r\n  es_GT: 'es-GT',\r\n  es_HN: 'es-HN',\r\n  es_MX: 'es-MX',\r\n  es_NI: 'es-NI',\r\n  es_PA: 'es-PA',\r\n  es_PY: 'es-PY',\r\n  es_PE: 'es-PE',\r\n  es_PR: 'es-PR',\r\n  es_ES: 'es-ES',\r\n  es_US: 'es-US',\r\n  es_UY: 'es-UY',\r\n  es_VE: 'es-VE',\r\n  sv_SE: 'sv-SE',\r\n  th_TH: 'th-TH',\r\n  tr_TR: 'tr-TR',\r\n  uk_UA: 'uk-UA',\r\n  vi_VN: 'vi-VN',\r\n}\r\n\r\nexport const getLocales = () => map(PMTLocale, value => value)\r\n\r\nexport const PaymentMethodDetail = {\r\n  //\r\n  // GENERIC/DEFAULT VALUES\r\n  //\r\n\r\n  /**\r\n   * Default value to be use.\r\n   * <p>\r\n   * In general means that the payment service is still unknown (eg we didn't receive the payment infos yet)\r\n   */\r\n  UNKNOWN: 'UNKNOWN',\r\n  /**\r\n   * For payment method not supported.\r\n   * <p>\r\n   * In general means that the payment service is not known by PMT\r\n   */\r\n  OTHER: 'OTHER',\r\n\r\n  //\r\n  // CARDS\r\n  //\r\n\r\n  /**\r\n   * Generic card (eg if PSP doesn't support card brand separation like Mangopay)\r\n   */\r\n  CARD: 'CARD',\r\n  VISA: 'VISA',\r\n  MASTERCARD: 'MASTERCARD',\r\n  /**\r\n   * MasterCard's Debit only cards\r\n   */\r\n  MAESTRO: 'MAESTRO',\r\n  /**\r\n   * American Express\r\n   */\r\n  AMEX: 'AMEX',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/Diners_Club_International\">Diners Club International</a>\r\n   * AND <a href=\"https://en.wikipedia.org/wiki/Discover_Card\">Discover Card</a>.\r\n   * <p>\r\n   * Note: Those are linked because Saferpay keep them linked.\r\n   */\r\n  DINERS: 'DINERS',\r\n  /**\r\n   * PostFinance Card\r\n   * <p>\r\n   * Note: To see in the future but can be linked with {@link PaymentMethodDetailEnum#POSTFINANCE}\r\n   */\r\n  POSTCARD: 'POSTCARD',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/JCB_Co.,_Ltd\">Japan Credit Bureau</a>.\r\n   */\r\n  JCB: 'JCB',\r\n  /**\r\n   * MyOne is a local Swiss payment card\r\n   */\r\n  MYONE: 'MYONE',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/UnionPay\">UnionPay</a>, China\r\n   */\r\n  UNIONPAY: 'UNIONPAY',\r\n\r\n  //\r\n  // ONLINE PAYMENT SERVICES\r\n  //\r\n\r\n  PAYPAL: 'PAYPAL',\r\n  /**\r\n   * <a href=\"https://www.twint.ch/en/\">TWINT</a>,Switzerland’s payment app (also a bit present in Germany and France)\r\n   */\r\n  TWINT: 'TWINT',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/Klarna\">Klarna</a> |\r\n   * <a href=\"https://docs.saferpay.com/home/integration-guide/payment-methods/klarna-payments\">Klarna Payments</a>\r\n   */\r\n  KLARNA: 'KLARNA',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/Alipay\">Alipay</a>\r\n   */\r\n  ALIPAY: 'ALIPAY',\r\n  /**\r\n   * <a href=\"https://fr.wikipedia.org/wiki/Bancontact\">Bancontact</a>, Belgium\r\n   */\r\n  BANCONTACT: 'BANCONTACT',\r\n  /**\r\n   * <a href=\"https://docs.connect.worldline-solutions.com/payment-product/ePrzelewy/overview\">ePrzelewy</a>, Poland\r\n   */\r\n  EPRZELEWY: 'EPRZELEWY',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/Giropay\">Giropay</a>, Germany\r\n   */\r\n  GIROPAY: 'GIROPAY',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/IDEAL\">IDEAL</a>, Netherland\r\n   */\r\n  IDEAL: 'IDEAL',\r\n  /**\r\n   * PostFinance eFinance\r\n   * <p>\r\n   * Note: To see in the future but can be linked with {@link PaymentMethodDetailEnum#POSTCARD}\r\n   */\r\n  POSTFINANCE: 'POSTFINANCE',\r\n\r\n  //\r\n  // OTHER\r\n  //\r\n\r\n  TRD: 'TRD',\r\n  /**\r\n   * SEPA\r\n   */\r\n  DIRECTDEBIT: 'DIRECTDEBIT',\r\n  /**\r\n   * <a href=\"https://stripe.com/fr/legal/eps\">Electronic Payment Standard</a>, Austria\r\n   */\r\n  EPS: 'EPS',\r\n}\r\n\r\nexport const getPaymentMethodDetailLabel = paymentMethodDetail => {\r\n  switch (paymentMethodDetail) {\r\n    case PaymentMethodDetail.TRD:\r\n      return tr('global.payment.method.detail.TRD')\r\n    case PaymentMethodDetail.CARD:\r\n      return tr('global.payment.method.detail.CARD')\r\n    case PaymentMethodDetail.OTHER:\r\n      return tr('global.payment.method.detail.OTHER')\r\n    case PaymentMethodDetail.UNKNOWN:\r\n      return tr('global.payment.method.detail.UNKNOWN')\r\n    default:\r\n      return paymentMethodDetail\r\n  }\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport flatten from 'lodash/flatten'\r\nimport uniq from 'lodash/uniq'\r\nimport forEach from 'lodash/forEach'\r\nimport sortBy from 'lodash/sortBy'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { createFormatter, createListFormatter, createDeepFormatter } from 'pmt-utils/format'\r\n\r\nimport { FrontCateringHistoryType, GroupType } from '../constants'\r\n\r\nexport const formatLevel = rGroup => {\r\n  rGroup.isFirstLevel = rGroup.level === 1\r\n  rGroup.hasChildren = !isEmpty(rGroup.childrenIds)\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const formatType = rGroup => {\r\n  rGroup.isTypeUser = rGroup.type === GroupType.USER\r\n  rGroup.isTypeOther = rGroup.type === GroupType.OTHER\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const formatFrontSettings = rGroup => {\r\n  rGroup.frontSettings = rGroup.frontSettings || {}\r\n\r\n  // catering\r\n  rGroup.frontSettings.catering = rGroup.frontSettings.catering || {}\r\n\r\n  // catering history type\r\n  rGroup.frontSettings.catering.historyType =\r\n    rGroup.frontSettings.catering.historyType || FrontCateringHistoryType.PAY_MY_TABLE\r\n  rGroup.frontSettings.catering.isHistoryTypePayMyTable =\r\n    FrontCateringHistoryType.PAY_MY_TABLE === rGroup.frontSettings.catering.historyType\r\n  rGroup.frontSettings.catering.isHistoryTypeThirdParty =\r\n    FrontCateringHistoryType.THIRD_PARTY === rGroup.frontSettings.catering.historyType\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const sortSubRestaurantsGroups = rGroup => {\r\n  if (!isNil(rGroup.children)) {\r\n    rGroup.children = sortBy(rGroup.children, [rGroup => rGroup.name.toLowerCase()], ['desc'])\r\n  }\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const formatForgottenPasswordLink = rGroup => {\r\n  rGroup.forgottenPasswordLink =\r\n    !isNil(rGroup.userSettings) &&\r\n    !isNil(rGroup.userSettings.managementSettings) &&\r\n    !isNil(rGroup.userSettings.managementSettings.passwordRecoveryUrl)\r\n      ? rGroup.userSettings.managementSettings.passwordRecoveryUrl\r\n      : null\r\n\r\n  return rGroup\r\n}\r\n\r\nconst formatChildrenRestaurants = rGroup => {\r\n  let list = []\r\n  forEach(rGroup.children || [], child => {\r\n    list.push(child.restaurantsIds)\r\n  })\r\n  list = uniq(flatten(list))\r\n\r\n  if (!rGroup.restaurantsIds) {\r\n    debugger\r\n  }\r\n  rGroup.ownedRestaurantsIds = rGroup.restaurantsIds.filter(id => list.indexOf(id) < 0)\r\n\r\n  rGroup.hasRestaurants = !isEmpty(rGroup.restaurantsIds)\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const formatRestaurantsGroup = createFormatter(\r\n  formatLevel,\r\n  formatType,\r\n  sortSubRestaurantsGroups,\r\n  formatForgottenPasswordLink,\r\n  formatFrontSettings,\r\n  formatChildrenRestaurants\r\n)\r\n\r\nexport const formatRestaurantsGroupList = createListFormatter(formatRestaurantsGroup)\r\n\r\nexport const formatRestaurantsGroupWithChildren = createDeepFormatter(\r\n  formatRestaurantsGroup,\r\n  'children'\r\n)\r\n","import isNil from 'lodash/isNil'\r\nimport forEach from 'lodash/forEach'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nimport { formatRestaurantsGroupWithChildren } from './format'\r\n\r\nconst getState = state => state.entities.restaurantsGroup\r\n// handle restaurantsGroupId pass on props as a int, immutable data use keys as strings\r\nconst getRestaurantsGroupIdOnProps = (state, props) =>\r\n  props.restaurantsGroupId ? String(props.restaurantsGroupId) : props.restaurantsGroupId\r\n\r\nexport const getRestaurantsGroupListState = createSelector([getState], state => state.get('list'))\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getRestaurantsGroupsMap = createSelector(\r\n  [getRestaurantsGroupListState],\r\n  restaurantsGroups => {\r\n    let groups = (restaurantsGroups.toJS ? restaurantsGroups.toJS() : restaurantsGroups) || {}\r\n\r\n    const groupsMap = {}\r\n    forEach(groups, (restaurantsGroupData, restaurantsGroupId) => {\r\n      if (restaurantsGroupData.restaurantsGroup) {\r\n        groupsMap[restaurantsGroupId] = formatRestaurantsGroupWithChildren(\r\n          restaurantsGroupData.restaurantsGroup\r\n        )\r\n      }\r\n    })\r\n\r\n    return groupsMap\r\n  }\r\n)\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const makeIsFetchingRestaurantsGroup = () => {\r\n  return createSelector(\r\n    [getRestaurantsGroupIdOnProps, getRestaurantsGroupListState],\r\n    (restaurantsGroupId, restaurantsGroupListState) => {\r\n      const restaurantsGroupData = restaurantsGroupListState.get(restaurantsGroupId)\r\n      if (isNil(restaurantsGroupData)) {\r\n        return false\r\n      }\r\n\r\n      return restaurantsGroupData.get('isFetching')\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurantsGroup = () =>\r\n  createSelector(\r\n    [getRestaurantsGroupIdOnProps, getRestaurantsGroupListState],\r\n    (restaurantsGroupId, restaurantsGroupListState) => {\r\n      const restaurantsGroupData = restaurantsGroupListState.get(restaurantsGroupId)\r\n      if (isNil(restaurantsGroupData)) {\r\n        return null\r\n      }\r\n\r\n      const restaurantsGroup = restaurantsGroupData.get('restaurantsGroup')\r\n\r\n      if (isNil(restaurantsGroup)) {\r\n        return null\r\n      }\r\n      return formatRestaurantsGroupWithChildren(restaurantsGroup.toJS())\r\n    }\r\n  )\r\n\r\nexport const makeGetRawRestaurantsGroup = () =>\r\n  createSelector(\r\n    [getRestaurantsGroupIdOnProps, getRestaurantsGroupListState],\r\n    (restaurantsGroupId, restaurantsGroupListState) => {\r\n      const restaurantsGroupData = restaurantsGroupListState.get(restaurantsGroupId)\r\n      if (isNil(restaurantsGroupData)) {\r\n        return null\r\n      }\r\n\r\n      const restaurantsGroup = restaurantsGroupData.get('restaurantsGroup')\r\n\r\n      if (isNil(restaurantsGroup)) {\r\n        return null\r\n      }\r\n      return restaurantsGroup.toJS()\r\n    }\r\n  )\r\n\r\nexport const makeGetRestaurantsGroupError = () =>\r\n  createSelector(\r\n    [getRestaurantsGroupIdOnProps, getRestaurantsGroupListState],\r\n    (restaurantsGroupId, restaurantsGroupListState) => {\r\n      const restaurantsGroupData = restaurantsGroupListState.get(restaurantsGroupId)\r\n      if (isNil(restaurantsGroupData)) {\r\n        return null\r\n      }\r\n\r\n      const error = restaurantsGroupData.get('error')\r\n\r\n      return isNil(error) ? null : error.toJS()\r\n    }\r\n  )\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const isFetchingPutGroupStoreList = createSelector([getState], restaurantsGroup => {\r\n  const restaurantsGroupPut = restaurantsGroup.get('putStoreList')\r\n  return restaurantsGroupPut.get('isFetching', false)\r\n})\r\n\r\nexport const getPutGroupStoreListData = createSelector([getState], restaurantsGroup => {\r\n  const restaurantsGroupPut = restaurantsGroup.get('putStoreList')\r\n  return restaurantsGroupPut.get('data', null)\r\n})\r\n\r\nexport const isFetchingPutGroupGroupList = createSelector([getState], restaurantsGroup => {\r\n  const restaurantsGroupPut = restaurantsGroup.get('putGroupList')\r\n  return restaurantsGroupPut.get('isFetching', false)\r\n})\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getPutGroupGroupListData = createSelector([getState], restaurantsGroup => {\r\n  const restaurantsGroupPut = restaurantsGroup.get('putGroupList')\r\n  return restaurantsGroupPut.get('data', null)\r\n})\r\n\r\nconst postRestaurantsGroupSelectors = createSimpleSelector(\r\n  state => state.entities.postRestaurantsGroup\r\n)\r\n\r\nexport const isFetchingRestaurantsGroupPost = postRestaurantsGroupSelectors.isFetching\r\nexport const getRestaurantsGroupPost = postRestaurantsGroupSelectors.getData\r\nexport const getRestaurantsGroupPostError = postRestaurantsGroupSelectors.getError\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNull from 'lodash/isNull'\r\nimport isFunction from 'lodash/isFunction'\r\nimport { connect } from 'react-redux'\r\nimport { isBo } from 'pmt-modules/environment'\r\n\r\nimport { fetchRestaurantsGroup } from '../actions'\r\nimport {\r\n  makeGetRawRestaurantsGroup,\r\n  makeGetRestaurantsGroup,\r\n  makeGetRestaurantsGroupError,\r\n  makeIsFetchingRestaurantsGroup,\r\n} from '../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the restaurantsGroup and pass it to the children\r\n *\r\n * Requirements:\r\n * - restaurantsGroupId\r\n *\r\n * see `withRestaurantsGroup`\r\n *\r\n */\r\nclass RestaurantsGroupContainer extends React.Component {\r\n  // TODO: on api consumer list View, we load the same group multiple times.\r\n  // should we load on componentDidUpdate instead of constructor?\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    const isFetching = this.props.isFetchingRestaurantsGroup\r\n    const forceReload = this.props.forceReload === true\r\n\r\n    // handle when we already loaded the restaurants group, but we loaded it without its children,\r\n    // and now we want it with its children\r\n    const loadChildren =\r\n      !isNull(this.props.restaurantsGroup) &&\r\n      this.props.restaurantsGroup.children === null &&\r\n      this.props.options.loadChildren === true\r\n\r\n    const notLoadedYet = isNull(this.props.restaurantsGroup)\r\n\r\n    if (\r\n      // do not try to fetch it if we already doing it\r\n      !isFetching &&\r\n      (forceReload || loadChildren || notLoadedYet)\r\n    ) {\r\n      this.loadRestaurantsGroup(this.props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n    if (\r\n        (nextProps.restaurantsGroupId !== props.restaurantsGroupId &&\r\n      ((!props.restaurantsGroup || props.restaurantsGroup.id) && nextProps.restaurantsGroupId))\r\n        || (props.options.withArchived !== nextProps.options.withArchived)\r\n      // TODO: handle props.options.loadChildren !== nextProps.options.loadChildren\r\n    ) {\r\n      this.loadRestaurantsGroup(nextProps)\r\n    }\r\n  }\r\n\r\n  loadRestaurantsGroup(props) {\r\n    props.fetchRestaurantsGroup(props.restaurantsGroupId, {\r\n      withAuthorization: props.options.withAuthorization,\r\n      loadChildren: props.options.loadChildren,\r\n      withArchived: props.options.withArchived,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      RestaurantsGroupWrappedComponent,\r\n      isFetchingRestaurantsGroup,\r\n      rawRestaurantsGroup,\r\n      restaurantsGroup,\r\n      restaurantsGroupError,\r\n      restaurantsGroupId,\r\n      children,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    if (isFunction(children)) {\r\n      return children({\r\n        isFetchingRestaurantsGroup,\r\n        rawRestaurantsGroup,\r\n        restaurantsGroup,\r\n        restaurantsGroupError,\r\n      })\r\n    }\r\n\r\n    return (\r\n      <RestaurantsGroupWrappedComponent\r\n        isFetchingRestaurantsGroup={isFetchingRestaurantsGroup}\r\n        rawRestaurantsGroup={rawRestaurantsGroup}\r\n        restaurantsGroup={restaurantsGroup}\r\n        restaurantsGroupError={restaurantsGroupError}\r\n        restaurantsGroupId={restaurantsGroupId}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nRestaurantsGroupContainer.defaultProps = {\r\n  options: {\r\n    // default false, to avoid missing it. Default true for Bo because we always retrieve a\r\n    // RestaurantsGroup while we are logged in. On other fronts, we retrieve restaurants group for\r\n    // anonymous users too.\r\n    withAuthorization: isBo(),\r\n\r\n    loadChildren: false,\r\n  },\r\n}\r\n\r\nRestaurantsGroupContainer.propTypes = {\r\n  fetchRestaurantsGroup: PropTypes.func.isRequired,\r\n  isFetchingRestaurantsGroup: PropTypes.bool,\r\n  restaurantsGroup: PropTypes.object,\r\n\r\n  restaurantsGroupId: PropTypes.oneOfType([\r\n    PropTypes.string, // the id or 'mine'\r\n    PropTypes.number, // the id\r\n  ]),\r\n\r\n  /**\r\n   * Additional options, used for the component:\r\n   * - withAuthorization -> should be use the default Authorization or not ?\r\n   * Must be set to false when on a non logged in page.\r\n   */\r\n  options: PropTypes.object,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getRawRestaurantsGroup = makeGetRawRestaurantsGroup()\r\n  const getRestaurantsGroup = makeGetRestaurantsGroup()\r\n  const getRestaurantsGroupError = makeGetRestaurantsGroupError()\r\n  const isFetchingRestaurantsGroup = makeIsFetchingRestaurantsGroup()\r\n\r\n  const mapStateToProps = (state, props) => ({\r\n    restaurantsGroup: getRestaurantsGroup(state, props),\r\n    restaurantsGroupError: getRestaurantsGroupError(state, props),\r\n    rawRestaurantsGroup: getRawRestaurantsGroup(state, props),\r\n    isFetchingRestaurantsGroup: isFetchingRestaurantsGroup(state, props),\r\n  })\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchRestaurantsGroup,\r\n  }\r\n)(RestaurantsGroupContainer)\r\n","import React from 'react'\r\n\r\nimport RestaurantsGroupContainer from './RestaurantsGroupContainer'\r\n\r\n/**\r\n * Add the RestaurantsGroupContainer as HOC for the given component\r\n * Requirements\r\n * - restaurantsGroupId in props or routeParams\r\n */\r\nconst withRestaurantsGroupMine = (options = {}) => RestaurantsGroupWrappedComponent => {\r\n  return props => (\r\n    <RestaurantsGroupContainer\r\n      RestaurantsGroupWrappedComponent={RestaurantsGroupWrappedComponent}\r\n      restaurantsGroupId={'mine'}\r\n      {...props}\r\n      {...options}\r\n    />\r\n  )\r\n}\r\n\r\nexport default withRestaurantsGroupMine\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport Typography from 'pmt-ui/Typography'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport Button from 'pmt-ui/Button'\r\n\r\nconst LinkToPopUp = ({ show, onRedirectToTopUp }) =>\r\n  !show ? null : (\r\n    <Button\r\n      color=\"primary\"\r\n      variant=\"contained\"\r\n      style={{\r\n        width: '100%',\r\n      }}\r\n      onClick={onRedirectToTopUp}\r\n    >\r\n      {tr('global.user_account.top_up', {\r\n        fr: 'Recharger',\r\n        context: '',\r\n        desc: 'Button to top up displayed on user account',\r\n      })}\r\n    </Button>\r\n  )\r\n\r\nconst View = ({\r\n  isFetchingUserAccounts,\r\n  userAccount,\r\n  dislayLinkToTopUp,\r\n  onRedirectToTopUp,\r\n  balanceLabel,\r\n  restaurantsGroup,\r\n}) => (\r\n  <div className=\"u-textAlignCenter u-marginTop15 u-marginBottom15 u-paddingLeft20 u-paddingRight20 u-flex0\">\r\n    {!isFetchingUserAccounts && isEmpty(userAccount) ? (\r\n      <ErrorBlock\r\n        mode={ErrorBlock.Mode.SNACKBAR}\r\n        error={{\r\n          message: tr('global.user_account.error', {\r\n            restaurantsGroupName: restaurantsGroup && restaurantsGroup.name,\r\n          }),\r\n        }}\r\n      />\r\n    ) : (\r\n      <React.Fragment>\r\n        <Typography variant=\"body2\" className=\"u-fontSize18 u-uiTextMedium\">\r\n          {balanceLabel}\r\n        </Typography>\r\n\r\n        <Typography variant=\"body2\" element=\"div\" className=\"u-fontSize32 u-marginBottom15\">\r\n          {userAccount && userAccount.amountFormatted}\r\n        </Typography>\r\n      </React.Fragment>\r\n    )}\r\n\r\n    <LinkToPopUp show={dislayLinkToTopUp} onRedirectToTopUp={onRedirectToTopUp} />\r\n  </div>\r\n)\r\n\r\nexport default View\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withRestaurantsGroupMine } from 'pmt-modules/restaurantsGroup/components'\r\nimport UserAccountsContainer from '../UserAccountsContainer'\r\n\r\nimport View from './View'\r\n\r\nconst defaultBalanceLabel = 'global.user_account.my_credit'\r\n\r\nclass UserAccountRemainingView extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      userId,\r\n      forceUpdate = false,\r\n      dislayLinkToTopUp = false,\r\n      balanceLabel = defaultBalanceLabel,\r\n      restaurantsGroup,\r\n    } = this.props\r\n\r\n    return (\r\n      <UserAccountsContainer userId={userId} forceUpdate={forceUpdate}>\r\n        {props => (\r\n          <View\r\n            restaurantsGroup={restaurantsGroup}\r\n            dislayLinkToTopUp={dislayLinkToTopUp}\r\n            balanceLabel={tr(balanceLabel)}\r\n            {...props}\r\n          />\r\n        )}\r\n      </UserAccountsContainer>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withRestaurantsGroupMine()(UserAccountRemainingView)\r\n","import {\r\n  createApiEnumAction,\r\n  createApiCallAction,\r\n  //  createTestApiCallAction,\r\n} from '../api/utils'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport UserApi from '../api/calls/UserApi'\r\n\r\nimport { replaceWith, getRoute } from '../routing'\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const CreateUserPostUserAction = createApiEnumAction('CREATE_USER::POST_USER')\r\n\r\n/**\r\n *\r\n * @param  {[type]} rGroupId\r\n * @param  {[type]} user\r\n * @param  {Object} [props={}] can contains:\r\n *                             - companyId: default company for the user account\r\n */\r\nexport const postUser = (rGroupId, user, props = {}) => {\r\n  const userToSend = user\r\n\r\n  // the API allows a pro to create a user without an email, but it must be null, not empty\r\n  if (isEmpty(userToSend.email)) {\r\n    userToSend.email = null\r\n  }\r\n\r\n  return createApiCallAction(CreateUserPostUserAction, UserApi.postUser(rGroupId, userToSend), {\r\n    rGroupId,\r\n    userToSend,\r\n    props,\r\n  })\r\n}\r\n\r\n// export const postUser = (rGroupId, user) => createTestApiCallAction(\r\n// CreateUserPostUserAction,\r\n// // true,\r\n// false,\r\n// {\r\n//   data: {\r\n//     rGroupId,\r\n//     user,\r\n//   },\r\n//   response: {\r\n//     id: '5666904823824384',\r\n//     ...user\r\n//   },\r\n//   error: {\r\n//     code: '100',\r\n//     message: 'An error occurred',\r\n//   }\r\n// }\r\n// )\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const redirectToUserPage = (rGroupId, userId, userAccount = null) => {\r\n  const companyId = userAccount ? userAccount.externalInfo.companyId : null\r\n\r\n  //\r\n  // if the use has a company we redirect to the card on the company, otherwise, we display the\r\n  // default user card\r\n  //\r\n  let route = null\r\n  if (!isEmpty(companyId)) {\r\n    route = replaceWith(getRoute('BO_COMPANY_USER_CARD'), {\r\n      companyId,\r\n      userId,\r\n    })\r\n  } else {\r\n    route = replaceWith(getRoute('BO_USER_CARD'), {\r\n      userId,\r\n    })\r\n  }\r\n\r\n  return route\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const StepActions = {\r\n  REDIRECT_THIRD_STEP: 'REDIRECT::STEP::THIRD',\r\n}\r\n\r\n/**\r\n * Redirect to the third step.\r\n *\r\n */\r\nexport const redirectToUserCreationThirdStep = (rGroupId, user) =>\r\n  redirectToUserPage(rGroupId, user.id)\r\n","import { createSimpleSelector } from '../redux'\r\n\r\n//\r\n//\r\n//\r\n\r\nconst createUserPostUserSelectors = createSimpleSelector(\r\n  state => state.entities.userCreation.user\r\n)\r\n\r\nexport const isFetchingPostUser = createUserPostUserSelectors.isFetching\r\nexport const getDataPostUser = createUserPostUserSelectors.getData\r\nexport const getErrorPostUser = createUserPostUserSelectors.getError\r\n","import { createSimpleReducer } from '../redux'\r\n\r\nimport { combineReducers } from 'redux'\r\n\r\nimport {\r\n  CreateUserPostUserAction,\r\n} from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './constants'\r\nexport * from './middlewares'\r\nexport * from './selectors'\r\n\r\nconst userReducer = createSimpleReducer(CreateUserPostUserAction)\r\n\r\nexport const userCreationReducer = combineReducers({\r\n  user: userReducer,\r\n})\r\n","import Immutable from 'immutable'\r\n\r\nimport {\r\n  FetchUserUserAccountAction,\r\n  FetchUserUserAccountsAction,\r\n  UpdateUserAccountAction,\r\n  UserAccountAction,\r\n} from './actions'\r\n\r\nimport { createSimpleReducer } from '../redux'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './components'\r\nexport * from './middlewares'\r\n\r\n// Example of restaurant data\r\n// {\r\n//   cards: null,\r\n//   isFetching: false,\r\n//   lastUpdated: null,\r\n//   error: null,\r\n// }\r\n\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\n// TODO: since this is persisted, we persist 'isFetching' to false in some cases, so we never\r\n// try to load the user accounts. The front display an infinite loading.\r\n// we must set isFetching to false when rehydrating the state.\r\n// I think this bug exists on some other reducers\r\n// solutions?\r\n// - do not persist the root reducer, but persist each reducer, this would allow us to configure each\r\n// reducer persistance independantly.\r\n// - we should make reducers config to be persisted on the reducer file not on entities, via a configuration\r\n// - if the front wants to disable the behaviour, it can disable the config from entities.\r\n// - For now: we force the loading of the user accounts data when we arrive on the payment page, to\r\n// avoid having the infinite loading\r\nexport const userUserAccountsReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case UserAccountAction.RESET:\r\n      return DEFAULT\r\n\r\n    case FetchUserUserAccountsAction.REQUEST:\r\n      return state.merge({\r\n        [action.data.userId]: {\r\n          list: null,\r\n          isFetching: true,\r\n          lastUpdated: null,\r\n          error: null,\r\n        },\r\n      })\r\n\r\n    case FetchUserUserAccountsAction.SUCCESS:\r\n      return state\r\n        .merge({\r\n          [action.data.userId]: {\r\n            isFetching: false,\r\n            lastUpdated: new Date(),\r\n            error: null,\r\n          },\r\n        })\r\n        .setIn(\r\n          [action.data.userId, 'list'],\r\n          (action.response || []).reduce((acc, userAccount) => {\r\n            acc[userAccount.id] = {\r\n              data: userAccount,\r\n              isFetching: false,\r\n              lastUpdated: new Date(),\r\n              error: null,\r\n            }\r\n            return acc\r\n          }, {})\r\n        )\r\n\r\n    case FetchUserUserAccountsAction.FAILURE:\r\n      return state.merge({\r\n        [action.data.userId]: {\r\n          list: null,\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: action.error,\r\n        },\r\n      })\r\n\r\n    case FetchUserUserAccountAction.REQUEST:\r\n      return state.mergeIn([action.data.userId, 'list'], {\r\n        // we set data to its existing state because we don't want to lose data here\r\n        [action.data.accountId]: {\r\n          ...(state.get(action.data.userId).get('list', {})[action.data.accountId] || {}),\r\n          ...{\r\n            isFetching: true,\r\n            error: null,\r\n          },\r\n        },\r\n      })\r\n\r\n    case FetchUserUserAccountAction.SUCCESS:\r\n    case UpdateUserAccountAction.SUCCESS:\r\n      return state.setIn([action.data.userId, 'list'], {\r\n        [action.data.accountId]: {\r\n          data: action.response,\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: null,\r\n        },\r\n      })\r\n\r\n    case FetchUserUserAccountAction.FAILURE:\r\n      return state.setIn([action.data.userId, 'list'], {\r\n        [action.data.accountId]: {\r\n          data: null,\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: action.error,\r\n        },\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const updateUserAccountReducer = createSimpleReducer(UpdateUserAccountAction)\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\nimport createMiddleware from 'pmt-modules/redux/createMiddleware'\r\nimport { LOGOUT_ACTION } from 'pmt-modules/auth'\r\nimport { getItemListFromCart } from 'pmt-modules/cart'\r\nimport { showUpsellingDialog } from 'pmt-modules/catalog/actions'\r\nimport { removeItemsFromUpsellings } from 'pmt-modules/catalog/utils'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { setLocale } from 'pmt-modules/i18n'\r\nimport { postOrder, PostOrderAction } from 'pmt-modules/orderPost'\r\nimport { resetOrderPreview } from 'pmt-modules/orderPreview'\r\nimport { setUserMe } from 'pmt-modules/userMe'\r\nimport { resetUserAccount } from 'pmt-modules/userAccount'\r\nimport { generateIdempotencyKey } from 'pmt-utils/idempotency'\r\nimport { OrderFrontAction, setIdempotencyKey } from './actions'\r\n\r\nconst logoutMiddleware = createMiddleware(LOGOUT_ACTION, ({ dispatch }) => {\r\n  // user has logout\r\n  // we reset current user fetched data\r\n  dispatch(setUserMe(null))\r\n\r\n  // reset order preview in order to reset subsidy / admission fees\r\n  dispatch(resetOrderPreview())\r\n\r\n  // reset fetched user account\r\n  dispatch(resetUserAccount())\r\n})\r\n\r\nconst postOrderMiddleware = createMiddleware(\r\n  OrderFrontAction.POST_ORDER,\r\n  ({ action, dispatch }) => {\r\n    dispatch(postOrder(action.orderData, action.options))\r\n  }\r\n)\r\n\r\nconst displayUpsellingMiddleware = createMiddleware(\r\n  OrderFrontAction.DISPLAY_UPSELLING,\r\n  ({ action, dispatch, getState }) => {\r\n    const cartItems = getItemListFromCart(getState())\r\n    const upsellingCategory = removeItemsFromUpsellings(action.upsellingCategory, cartItems)\r\n\r\n    if (!isEmpty(upsellingCategory.items)) {\r\n      dispatch(showUpsellingDialog(upsellingCategory))\r\n    }\r\n  }\r\n)\r\n\r\nconst postOrderSuccessMiddleware = createMiddleware(\r\n  [PostOrderAction.SUCCESS],\r\n  ({ action, dispatch, getState }) => {\r\n    EventManager.dispatch(EventManager.Events.ON_PAYMENT_SUCCESS, {\r\n      order: action.response,\r\n    })\r\n  }\r\n)\r\n\r\nconst postOrderFailureMiddleware = createMiddleware(\r\n  [PostOrderAction.FAILURE],\r\n  ({ action, dispatch, getState }) => {\r\n    // The API found an order with the same idempotency key.\r\n    // The order is still processing, so we must wait.\r\n    if (action.error?.errorCode === 'IDEMPOTENCY_PROCESSING') {\r\n      // WAIT x seconds and retry post?\r\n    }\r\n    // The API found an order with the same idempotency key. This order is marked as failed.\r\n    // So we must try a new order. A new order must have a new idempotency key.\r\n    // but the data is not the same, so we must reload the idempotency key.\r\n    // this happens when we have not reload the idempotency key on our side.\r\n    if (action.error?.errorCode === 'INVALID_IDEMPOTENCY_DATA') {\r\n      dispatch(setIdempotencyKey(generateIdempotencyKey()))\r\n    }\r\n  }\r\n)\r\n\r\nconst setLocaleMiddleware = createMiddleware([OrderFrontAction.SET_LOCALE], ({ action }) => {\r\n  setLocale(action.locale)\r\n})\r\n\r\nconst resetOrderFrontMiddleware = createMiddleware([OrderFrontAction.RESET], ({ dispatch }) => {\r\n  // reset order preview in order to reset sendDate + subsidy / admission fees\r\n  dispatch(resetOrderPreview())\r\n})\r\n\r\nexport const orderFrontMiddlewares = [\r\n  logoutMiddleware,\r\n  postOrderMiddleware,\r\n  postOrderFailureMiddleware,\r\n  displayUpsellingMiddleware,\r\n  postOrderSuccessMiddleware,\r\n  resetOrderFrontMiddleware,\r\n  setLocaleMiddleware,\r\n]\r\n","//\r\n// This module store global configuration and data for every front doing order,\r\n// that don't requires their own module / reducer\r\n//\r\nimport Immutable, { fromJS } from 'immutable'\r\n\r\nimport { getDefaultLocale } from 'pmt-modules/i18n'\r\nimport { GetRestaurantAction } from 'pmt-modules/restaurant'\r\n\r\nimport { generateIdempotencyKey } from 'pmt-utils/idempotency'\r\nimport { CartActionsToResetIdEmpotency } from 'pmt-modules/cart'\r\n\r\nimport { OrderFrontAction } from './actions'\r\nimport { DueDateMode } from './constants'\r\n\r\nexport * from './actions'\r\nexport * from './format'\r\nexport * from './middlewares'\r\nexport * from './selectors'\r\n\r\n// DEFAULT is function here because we need to call\r\n// idempotencyKey utils function to generate it again\r\nconst DEFAULT = () => ({\r\n  lang: getDefaultLocale(),\r\n  idempotencyKey: generateIdempotencyKey(),\r\n  mode: null,\r\n  restaurantId: null,\r\n  paymentMethod: null,\r\n  hasAlreadyDisplayedUpselling: false,\r\n  dueDate: null,\r\n  dueDateMode: DueDateMode.ASAP, // default dueDate is always asap in our fronts\r\n  postedOrderData: null,\r\n  pagerId: null,\r\n  modifierCode: null,\r\n  vouchers: [],\r\n  tips: null,\r\n})\r\n\r\n/**\r\n * We must handle the cart actions, to reset the id empotency if\r\n */\r\nfunction handleCartAction(state, action) {\r\n  if (CartActionsToResetIdEmpotency.includes(action.type)) {\r\n    return state.merge({\r\n      idempotencyKey: generateIdempotencyKey(),\r\n    })\r\n  }\r\n\r\n  return state\r\n}\r\n\r\nexport const orderFrontReducer = (state = Immutable.fromJS(DEFAULT()), action) => {\r\n  switch (action.type) {\r\n    case GetRestaurantAction.SUCCESS:\r\n      return state.merge({\r\n        restaurantId: action.response.id,\r\n      })\r\n\r\n    case OrderFrontAction.SELECT_MODE:\r\n      return state.merge({\r\n        mode: action.mode,\r\n      })\r\n\r\n    case OrderFrontAction.SELECT_TIPS:\r\n      return state.merge({\r\n        tips: action.tips,\r\n        // change idempotency key when changing tips value, so the user can re-submit the payment\r\n        idempotencyKey: generateIdempotencyKey(),\r\n      })\r\n\r\n    case OrderFrontAction.SET_RESTAURANT_ID:\r\n      return state.merge({\r\n        restaurantId: action.restaurantId,\r\n      })\r\n\r\n    case OrderFrontAction.SET_IDEMPOTENCY_KEY:\r\n      return state.merge({\r\n        idempotencyKey: action.idempotencyKey,\r\n      })\r\n\r\n    case OrderFrontAction.SET_DUE_DATE:\r\n      return state.merge({\r\n        dueDate: action.dueDate,\r\n        dueDateMode: action.dueDate ? DueDateMode.SLOT : DueDateMode.ASAP,\r\n      })\r\n\r\n    case OrderFrontAction.SET_PAYMENT_METHOD:\r\n      return state.merge({\r\n        paymentMethod: action.paymentMethod,\r\n      })\r\n\r\n    case OrderFrontAction.RESET:\r\n      return state.merge(\r\n        Immutable.fromJS({\r\n          ...DEFAULT(),\r\n          dueDate: action.dueDate || null,\r\n          dueDateMode: action.dueDate ? DueDateMode.SLOT : DueDateMode.ASAP,\r\n          mode: state.get('mode'),\r\n          postedOrderData: state.get('postedOrderData'),\r\n          restaurantId: state.get('restaurantId'),\r\n        })\r\n      )\r\n\r\n    case OrderFrontAction.RESET_FULL:\r\n      return state.merge(\r\n        Immutable.fromJS({\r\n          ...DEFAULT(),\r\n          mode: state.get('mode'),\r\n        })\r\n      )\r\n\r\n    case OrderFrontAction.DISPLAY_UPSELLING:\r\n      return state.merge({\r\n        hasAlreadyDisplayedUpselling: true,\r\n      })\r\n\r\n    case OrderFrontAction.SET_LOCALE:\r\n      return state.merge({\r\n        locale: action.locale,\r\n      })\r\n\r\n    case OrderFrontAction.SAVE_POSTED_ORDER_DATA:\r\n      const existingData = state.get('postedOrderData')\r\n      if (existingData && existingData.getIn(['orderData', 'id']) === action.data.orderData.id) {\r\n        //We already have the same order data, no need to update the state and trigger a re-render\r\n        return state\r\n      }\r\n      return state.merge({\r\n        postedOrderData: action.data,\r\n      })\r\n\r\n    case OrderFrontAction.SET_PAGER_ID:\r\n      return state.merge({\r\n        pagerId: action.pagerId,\r\n      })\r\n\r\n    case OrderFrontAction.ADD_MODIFIER_CODE:\r\n      return state.merge({\r\n        modifierCode: action.code,\r\n      })\r\n\r\n    case OrderFrontAction.ADD_VOUCHER:\r\n      return state.update('vouchers', vouchers => vouchers.push(action.voucher))\r\n\r\n    case OrderFrontAction.DELETE_VOUCHER:\r\n      return state.update('vouchers', vouchers => {\r\n        return vouchers.delete(action.index)\r\n      })\r\n\r\n    case OrderFrontAction.SET_VOUCHERS:\r\n      return state.set('vouchers', fromJS(action.vouchers))\r\n\r\n    default:\r\n      return handleCartAction(state, action)\r\n  }\r\n}\r\n","import { createFormatter, createListFormatter } from 'pmt-utils/format'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nconst formatValueAdditionalPrice = value => {\r\n  value.additionalPriceFormatted = formatPriceWithCurrency(value.additionalPrice)\r\n  value.isOutOfStock = value.stock === 0\r\n  // add way to tests locked items: we allow to add them to cart if the testLockedBeforePayment query param is\r\n  value.disableAdd =\r\n    value.isOutOfStock === true && getQueryParam('testLockedBeforePayment') !== 'true'\r\n  return value\r\n}\r\n\r\nconst formatOptionValue = createFormatter(formatValueAdditionalPrice)\r\n\r\nexport const formatOptionValues = createListFormatter(formatOptionValue)\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\nimport { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\n\r\nimport { formatOptionValues } from './optionValue'\r\n\r\nconst formatValues = option => {\r\n  option.hasImageValue = option.values.some(o => !isEmpty(o.image))\r\n  return option\r\n}\r\n\r\nconst formatOption = createFormatter(\r\n  formatValues,\r\n  createSubObjectFormatter('values', formatOptionValues)\r\n)\r\n\r\nexport const formatOptions = createListFormatter(formatOption)\r\n","import forEach from 'lodash/forEach'\r\nimport get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport uniq from 'lodash/uniq'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { addToArray } from 'pmt-utils/array'\r\nimport { createFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nimport { formatOptions as formatProductOptions } from './options'\r\nimport { CatalogItemType } from '../constants'\r\n\r\nconst formatProductData = product => {\r\n  product.isProduct = true\r\n  product.isMenu = false\r\n  product.isCategory = false\r\n  product.type = CatalogItemType.PRODUCT\r\n\r\n  product.priceFormatted = formatPriceWithCurrency(product.price)\r\n  product.additionalPriceFormatted = formatPriceWithCurrency(product.additionalPrice)\r\n\r\n  product.comment = product.comment || ''\r\n  product.hasComment = !isEmpty(product.comment)\r\n\r\n  // used to know if we need to display the item directly on the detail view dialog\r\n  product.isComplexItem = product.options.length > 0 || product.reclaimLaterEnabled\r\n\r\n  // image\r\n  product.hasImage = !isEmpty(product.image)\r\n\r\n  // add way to tests locked items: we allow to add them to cart if the testLockedBeforePayment query param is\r\n  // set must be === false, here, do not check falsy values since available can be undefined\r\n  product.disableAdd =\r\n    product.available === false && getQueryParam('testLockedBeforePayment') !== 'true'\r\n\r\n  return product\r\n}\r\n\r\nconst formatOptions = product => {\r\n  product.hasOptions = !isEmpty(product.options)\r\n  product.options = formatProductOptions(product.options)\r\n  return product\r\n}\r\n\r\nconst formatDietaryInfo = product => {\r\n  const formattedAllergens = [...get(product, 'dietaryInfo.allergens', [])]\r\n  product.hasAllergens = !isEmpty(formattedAllergens)\r\n  product.hasOptionWithAllergens = false\r\n\r\n  // TODO: opti move to options formatting\r\n  // then search for one option with hasAllergens to true ?\r\n  forEach(product.options, option => {\r\n    option.hasAllergens = option.hasAllergens || false\r\n    forEach(option.values, value => {\r\n      if (!isEmpty(get(value, 'dietaryInfo.allergens'))) {\r\n        addToArray(formattedAllergens, get(value, 'dietaryInfo.allergens', []))\r\n        product.hasAllergens = true\r\n        product.hasOptionWithAllergens = true\r\n        option.hasAllergens = true\r\n      }\r\n    })\r\n  })\r\n\r\n  product.formattedAllergens = uniq(formattedAllergens)\r\n\r\n  return product\r\n}\r\n\r\nexport const formatProduct = createFormatter(formatProductData, formatOptions, formatDietaryInfo)\r\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport each from 'lodash/each'\r\nimport { addToArray } from 'pmt-utils/array'\r\n\r\n// we format products in a menu part recursively\r\n// so we format products inside all subcategories of all parts\r\nconst recursiveFormatProduct = (partCategory, formatProduct) => {\r\n  if (!isEmpty(partCategory.categories)) {\r\n    partCategory.categories = partCategory.categories.map(partCategory => {\r\n      return recursiveFormatProduct(partCategory, formatProduct)\r\n    })\r\n  }\r\n\r\n  if (!isNil(partCategory.products)) {\r\n    partCategory.products = partCategory.products.map(product => {\r\n      product = formatProduct(product)\r\n      return product\r\n    })\r\n  }\r\n\r\n  return partCategory\r\n}\r\n\r\nexport const mergeProductsAndMenus = (object, formatProduct = false, formatMenu = false) => {\r\n  let items = []\r\n  // pre-allocate items length\r\n  items.length =\r\n    (object.products ? object.products.length : 0) + (object.menus ? object.menus.length : 0)\r\n\r\n  if (object.isCategory) {\r\n    if (!isNil(object.products) && formatProduct) {\r\n      each(object.products, product => {\r\n        product = formatProduct(product)\r\n        items.push(product)\r\n      })\r\n    }\r\n\r\n    if (!isNil(object.menus) && formatMenu) {\r\n      each(object.menus, menu => {\r\n        menu = formatMenu(menu)\r\n        items.push(menu)\r\n      })\r\n    }\r\n\r\n    // order items by position value\r\n    object.items = items.sort((a, b) => a.position - b.position)\r\n\r\n    // then we order them by their availability\r\n    const itemsAvailable = object.items.filter(item => item.available)\r\n    const itemsUnavailable = object.items.filter(item => !item.available)\r\n    // warn: we modify itemsAvailable reference here.\r\n    object.items = addToArray(itemsAvailable, itemsUnavailable)\r\n  } else {\r\n    // if it is a menu part\r\n    if (!isNil(object.products) && formatProduct) {\r\n      object = recursiveFormatProduct(object, formatProduct)\r\n    }\r\n\r\n    let productsAvailable = []\r\n    let productsUnavailable = []\r\n    if (!isNil(object.products)) {\r\n      productsAvailable = object.products.filter(item => item.available)\r\n      productsUnavailable = object.products.filter(item => !item.available)\r\n    }\r\n\r\n    // warn: we modify productsAvailable reference here.\r\n    object.products = addToArray(productsAvailable, productsUnavailable)\r\n  }\r\n\r\n  return object\r\n}\r\n","import forEach from 'lodash/forEach'\r\nimport get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport uniq from 'lodash/uniq'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport { createFormatter, createSubObjectFormatter, createListFormatter } from 'pmt-utils/format'\r\nimport { addToArray } from 'pmt-utils/array'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nimport { formatProduct } from './product'\r\nimport { mergeProductsAndMenus } from './item'\r\nimport { CatalogItemType } from '../constants'\r\n\r\nconst orderFromAvailable = (categoryFirst, categorySecond) => {\r\n  return categoryFirst.available === categorySecond.available ? 0 : categoryFirst.available ? -1 : 1\r\n}\r\n\r\nconst recursiveFormatSubcategoriesProductsAndMenus = (category) => {\r\n  category.isProduct = false\r\n  category.isMenu = false\r\n  category.isCategory = true\r\n  category.type = CatalogItemType.CATEGORY\r\n\r\n  if (!isNil(category.categories) && !isEmpty(category.categories)) {\r\n    category.categories = category.categories.sort((categoryFirst, categorySecond) => {\r\n      return orderFromAvailable(categoryFirst, categorySecond)\r\n    })\r\n\r\n    category.categories = category.categories.map(recursiveFormatSubcategoriesProductsAndMenus)\r\n  }\r\n\r\n  let categoryTemp = mergeProductsAndMenus(category, formatProduct, formatMenu)\r\n\r\n  const itemsLength = !isNil(categoryTemp.items) ? categoryTemp.items.length : 0\r\n  const subcategoriesLength = !isNil(categoryTemp.categories) ? categoryTemp.categories.length : 0\r\n  categoryTemp.totalItemsAndSubcategories = itemsLength + subcategoriesLength\r\n\r\n  return categoryTemp\r\n}\r\n\r\nexport const formatCategory = createFormatter(recursiveFormatSubcategoriesProductsAndMenus)\r\nexport const formatCategories = createFormatter(\r\n  createSubObjectFormatter('categories', createListFormatter(formatCategory))\r\n)\r\n\r\n// Menu formatters\r\n// we move this code here because a menu part now is like a category,\r\n// so to stop circular depedency, we have to put it here\r\nconst formatPartProducts = (part) => mergeProductsAndMenus(part, formatProduct)\r\n\r\nconst formatPartCategory = (part) => {\r\n  if (part.rootCategory) {\r\n    let partFormatted = formatCategories(part.rootCategory, {\r\n      categories: part.rootCategory.categories,\r\n    })\r\n    if (!isNil(partFormatted.categories)) {\r\n      partFormatted.categories = partFormatted.categories.sort((categoryFirst, categorySecond) => {\r\n        return orderFromAvailable(categoryFirst, categorySecond)\r\n      })\r\n    }\r\n    partFormatted.id = part.id\r\n    partFormatted.name = part.name\r\n    partFormatted.mandatory = part.mandatory\r\n    partFormatted.min = part.min\r\n    partFormatted.max = part.max\r\n    partFormatted.additionalPrice = part.additionalPrice\r\n    part = partFormatted\r\n  }\r\n\r\n  return part\r\n}\r\n\r\nconst formatPart = createFormatter(formatPartCategory, formatPartProducts)\r\nexport const formatParts = createListFormatter(formatPart)\r\n\r\nconst formatMenuData = (menu) => {\r\n  menu.isMenu = true\r\n  menu.isProduct = false\r\n  menu.isCategory = false\r\n  menu.type = CatalogItemType.MENU\r\n\r\n  menu.priceFormatted = formatPriceWithCurrency(menu.price)\r\n\r\n  // used to know if we need to display the item directly on the detail view dialog\r\n  menu.isComplexItem = true\r\n\r\n  menu.hasImage = !isEmpty(menu.image)\r\n\r\n  menu.comment = menu.comment || ''\r\n  menu.hasComment = !isEmpty(menu.comment)\r\n\r\n  return menu\r\n}\r\n\r\nconst categoryHasAvailableItem = (category) => {\r\n  if (isNil(category)) {\r\n    return false\r\n  }\r\n\r\n  const hasAvailableItem = !isEmpty(category.items) && category.items.some((item) => item.available)\r\n  const hasAvailableSubcategory =\r\n    !isEmpty(category.categories) && category.categories.some(categoryHasAvailableItem)\r\n\r\n  return hasAvailableItem || hasAvailableSubcategory\r\n}\r\n\r\nconst isPartAvailable = (part) => {\r\n  const hasAvailableProduct = !isEmpty(part.products) && part.products.some((product) => product.available)\r\n  const hasAvailableCategory = !isEmpty(part.categories) && part.categories.some(categoryHasAvailableItem)\r\n\r\n  return hasAvailableProduct || hasAvailableCategory\r\n}\r\n\r\nconst computeMenuAvailabilityFromParts = (menu) => {\r\n  const hasUnavailableMandatoryPart =\r\n    !isEmpty(menu.parts) && menu.parts.some((part) => part.mandatory && !isPartAvailable(part))\r\n\r\n  if (hasUnavailableMandatoryPart) {\r\n    menu.available = false\r\n  }\r\n\r\n  // add way to tests locked items: we allow to add them to cart if the testLockedBeforePayment query param is\r\n  // set must be === false, here, do not check falsy values since available can be undefined\r\n  menu.disableAdd = menu.available === false && getQueryParam('testLockedBeforePayment') !== 'true'\r\n\r\n  return menu\r\n}\r\n\r\nconst formatDietaryInfoForPartCategory = (categories) => {\r\n  const allergens = []\r\n  forEach(categories, (category) => {\r\n    forEach(category.products, (product) => {\r\n      if (product.hasAllergens) {\r\n        addToArray(allergens, get(product, 'formattedAllergens', []))\r\n      }\r\n    })\r\n\r\n    if (!isEmpty(category.categories)) {\r\n      addToArray(allergens, formatDietaryInfoForPartCategory(category.categories))\r\n    }\r\n  })\r\n  return allergens\r\n}\r\n\r\nconst formatDietaryInfo = (menu) => {\r\n  const allergens = [...get(menu, 'dietaryInfo.allergens', [])]\r\n  menu.hasAllergens = !isEmpty(allergens)\r\n  menu.hasPartWithAllergens = false\r\n\r\n  forEach(menu.parts, (part) => {\r\n    part.hasAllergens = false\r\n    forEach(part.products, (product) => {\r\n      if (product.hasAllergens) {\r\n        part.hasAllergens = true\r\n        menu.hasPartWithAllergens = true\r\n        addToArray(allergens, get(product, 'formattedAllergens', []))\r\n      }\r\n    })\r\n\r\n    addToArray(allergens, formatDietaryInfoForPartCategory(part.categories))\r\n  })\r\n\r\n  menu.formattedAllergens = uniq(allergens)\r\n  menu.hasAllergens = !isEmpty(menu.formattedAllergens)\r\n\r\n  return menu\r\n}\r\n\r\nexport const formatMenu = createFormatter(\r\n  formatMenuData,\r\n  createSubObjectFormatter('parts', formatParts),\r\n  computeMenuAvailabilityFromParts,\r\n  formatDietaryInfo\r\n)\r\n","import concat from 'lodash/concat'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { formatProduct } from 'pmt-modules/catalog/format/product'\r\nimport { formatMenu } from 'pmt-modules/catalog/format/category'\r\nimport { CatalogItemType } from 'pmt-modules/catalog/constants'\r\n\r\nexport const mergeSuggestedProductsAndMenus = (suggestedProducts, suggestedMenus) => {\r\n  let suggestedItems = []\r\n\r\n  if (isNil(suggestedProducts) && isNil(suggestedMenus)) {\r\n    return suggestedItems\r\n  }\r\n\r\n  suggestedProducts = (suggestedProducts || []).map(product => {\r\n    product.type = CatalogItemType.PRODUCT\r\n    product = formatProduct(product)\r\n\r\n    return product\r\n  })\r\n  suggestedMenus = (suggestedMenus || []).map(menu => {\r\n    menu.type = CatalogItemType.MENU\r\n    menu = formatMenu(menu)\r\n\r\n    return menu\r\n  })\r\n\r\n  suggestedItems = concat(suggestedProducts, suggestedMenus).sort((a, b) => a.position > b.position)\r\n\r\n  return suggestedItems\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { createFormatter } from 'pmt-utils/format'\r\n\r\nimport { mergeSuggestedProductsAndMenus } from '../utils/suggestion'\r\n\r\nimport { formatItemsCartModifiers } from './cartModifiers'\r\n\r\nconst recursiveFlattenSuggestions = (category, o) => {\r\n  if (!isEmpty(category.categories)) {\r\n    category.categories.forEach(c => recursiveFlattenSuggestions(c, o))\r\n  }\r\n\r\n  category.items = category.items.map(item => {\r\n    let suggestedItems = mergeSuggestedProductsAndMenus(item.productsSuggested, item.menusSuggested)\r\n\r\n    item.suggestedItems = suggestedItems.filter(suggestedItem => suggestedItem.available)\r\n    item.hasSuggestion = !isNil(item.suggestedItems) && !isEmpty(item.suggestedItems)\r\n\r\n    if (item.hasSuggestion && !find(o.suggestions, { id: item.id })) {\r\n      o.suggestions.push({\r\n        id: item.id,\r\n        name: item.name,\r\n        suggestedItems: formatItemsCartModifiers(item.suggestedItems),\r\n      })\r\n    }\r\n    return item\r\n  })\r\n\r\n  return {\r\n    category,\r\n    suggestions: o.suggestions,\r\n  }\r\n}\r\n\r\nconst formatSuggestion = catalog => {\r\n  let o = {\r\n    category: {},\r\n    suggestions: [],\r\n  }\r\n\r\n  catalog.categories = catalog.categories.map(category => {\r\n    o = recursiveFlattenSuggestions(category, o)\r\n    return o.category\r\n  })\r\n\r\n  catalog.suggestions = o.suggestions\r\n\r\n  return catalog\r\n}\r\n\r\nexport const formatSuggestions = createFormatter(formatSuggestion)\r\n","import { formatCategories } from './category'\r\nimport { formatSuggestions } from './suggestions'\r\nimport { formatCartModifiers } from './cartModifiers'\r\n\r\nexport const formatCatalog = catalog => {\r\n  let formattedCatalog = catalog\r\n\r\n  // format catalog\r\n  formattedCatalog = formatCategories(formattedCatalog.rootCategory, {\r\n    categories: formattedCatalog.rootCategory.categories,\r\n  })\r\n\r\n  // removing main categories that are unavailable\r\n  formattedCatalog.categories = formattedCatalog.categories.filter(category => category.available)\r\n\r\n  formattedCatalog.restaurantId = catalog.restaurantId\r\n  formattedCatalog.mode = catalog.mode\r\n  // we receive an integer, but we have the due date as string\r\n  formattedCatalog.dueDate = catalog.date\r\n  formattedCatalog.cartModifiers = catalog.cartModifiers\r\n\r\n  // format catalog's suggestions\r\n  formattedCatalog = formatSuggestions(formattedCatalog, {\r\n    catalog: formattedCatalog,\r\n  })\r\n\r\n  // format catalog's cart modifiers\r\n  formattedCatalog = formatCartModifiers(formattedCatalog, {\r\n    catalog: formattedCatalog,\r\n  })\r\n\r\n  return formattedCatalog\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getOrderProperties } from 'pmt-modules/orderFront'\r\n\r\nimport { formatCatalog } from './format'\r\nimport { getFirstSelectableCategory, getCategoryFromCatalog } from './utils'\r\n\r\nconst getCatalogEntity = state => state.entities.catalog\r\n\r\nconst getCatalogDataOnProps = (state, props) => (!isNil(props) ? props.catalog : null)\r\nconst getCategoryIdOnProps = (state, props) => props.categoryId\r\nconst getParentCategoriesOnProps = (state, props) => props.parentCategories\r\n\r\nexport const getCatalogForMode = createSelector(\r\n  [getCatalogEntity, getOrderProperties],\r\n  (catalog, orderProperties) => {\r\n    if (isNil(catalog)) {\r\n      return null\r\n    }\r\n    return catalog.get(String(orderProperties.mode), null)\r\n  }\r\n)\r\n\r\nexport const getCatalogData = createSelector([getCatalogForMode], catalogForMode => {\r\n  if (catalogForMode) {\r\n    const catalog = catalogForMode.get('data', null)\r\n    if (catalog) {\r\n      return catalog.toJS()\r\n    }\r\n  }\r\n  return null\r\n})\r\n\r\nexport const getErrorCatalog = createSelector([getCatalogForMode], catalogForMode => {\r\n  const catalog = catalogForMode ? catalogForMode.get('error', null) : null\r\n  return isNil(catalog) ? null : catalog.toJS()\r\n})\r\n\r\nexport const isFetchingCatalog = createSelector(\r\n  [getCatalogForMode],\r\n  catalogForMode => (catalogForMode ? catalogForMode.get('isFetching', false) : false)\r\n)\r\n\r\nexport const getCatalogFormatted = createSelector([getCatalogData], catalogData => {\r\n  if (isNil(catalogData)) {\r\n    return null\r\n  }\r\n\r\n  return formatCatalog(catalogData)\r\n})\r\n\r\nexport const makeGetCategory = () =>\r\n  createSelector(\r\n    [getCatalogDataOnProps, getCategoryIdOnProps, getParentCategoriesOnProps],\r\n    (catalogData, categoryId, parentCategories) => {\r\n      if (isNil(catalogData) || isNil(categoryId)) {\r\n        return null\r\n      }\r\n\r\n      return getCategoryFromCatalog(catalogData, categoryId, parentCategories)\r\n    }\r\n  )\r\n\r\nexport const makeGetFirstSelectableCategory = () =>\r\n  createSelector(\r\n    [getCatalogDataOnProps],\r\n    catalogData => (isNil(catalogData) ? null : getFirstSelectableCategory(catalogData))\r\n  )\r\n\r\nexport const getSelectedCategory = createSelector([getCatalogEntity], catalog => {\r\n  const selectedCategory = catalog ? catalog.get('selectedCategory', null) : null\r\n\r\n  if (!isNil(selectedCategory)) {\r\n    return selectedCategory.toJS()\r\n  }\r\n\r\n  return null\r\n})\r\n\r\nexport const getParentCategories = createSelector([getCatalogEntity], catalog => {\r\n  const parentCategories = catalog ? catalog.get('parentCategories', []) : []\r\n\r\n  return isEmpty(parentCategories) ? [] : parentCategories.toJS()\r\n})\r\n\r\nexport const getCatalogLocale = createSelector(\r\n  [getCatalogForMode],\r\n  catalog => (catalog ? catalog.get('locale', null) : null)\r\n)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isEqual from 'lodash/isEqual'\r\nimport last from 'lodash/last'\r\n\r\nimport { getOrderProperties } from 'pmt-modules/orderPlugin/selectors'\r\nimport {\r\n  setSelectedCategory,\r\n  setFirstSelectedCategory,\r\n  setParentCategories,\r\n} from 'pmt-modules/orderPlugin/actions'\r\nimport { makeGetCategory, makeGetFirstSelectableCategory } from 'pmt-modules/catalog/selectors'\r\nimport { getOrderProduct } from 'pmt-modules/orderProduct/selectors'\r\n\r\nclass CategoryContainer extends React.PureComponent {\r\n  componentWillMount() {\r\n    const { category, orderPluginProperties, setSelectedCategory, setParentCategories } = this.props\r\n\r\n    if (!isNil(category)) {\r\n      setSelectedCategory(category)\r\n      setParentCategories(orderPluginProperties.parentCategories)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const {\r\n      category,\r\n      orderPluginProperties,\r\n      setParentCategories,\r\n      setSelectedCategory,\r\n      setFirstSelectedCategory,\r\n    } = this.props\r\n\r\n    if (\r\n      (!isNil(category) &&\r\n        !isNil(nextProps.category) &&\r\n        (nextProps.category.id !== category.id || !isEqual(category, nextProps.category))) ||\r\n      (isNil(category) && !isNil(nextProps.category))\r\n    ) {\r\n      setSelectedCategory(nextProps.category)\r\n\r\n      // if the previous parent category is the same as the next category selected\r\n      // we deduct that the user hit the back button of web browser\r\n      // we remove the last parent category\r\n      if (\r\n        !isNil(orderPluginProperties.parentCategories) &&\r\n        !isEmpty(orderPluginProperties.parentCategories)\r\n      ) {\r\n        const lastParentCategory = last(orderPluginProperties.parentCategories)\r\n        if (lastParentCategory.id === nextProps.category.id) {\r\n          const newParentCategories = orderPluginProperties.parentCategories.slice(0, -1)\r\n          setParentCategories(newParentCategories)\r\n        }\r\n      }\r\n    } else if (\r\n      isNil(category) &&\r\n      isNil(nextProps.category) &&\r\n      !isNil(nextProps.firstSelectableCategory) &&\r\n      isNil(nextProps.orderPluginProperties.selectedCategory)\r\n    ) {\r\n      setSelectedCategory(nextProps.firstSelectableCategory)\r\n      setFirstSelectedCategory(nextProps.firstSelectableCategory)\r\n      setParentCategories([])\r\n      // we check that we're not displaying a product or leaving one\r\n      // the first 2 conditions are to check when we're going from /catalog/:categoryId to /catalog\r\n    } else if (\r\n      !isNil(category) &&\r\n      isNil(nextProps.category) &&\r\n      !isNil(orderPluginProperties.firstSelectedCategory) &&\r\n      !isNil(nextProps.orderPluginProperties.selectedCategory)\r\n    ) {\r\n      setSelectedCategory(orderPluginProperties.firstSelectedCategory)\r\n      setParentCategories([])\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { CategoryWrappedComponent, categoryId, ...otherProps } = this.props\r\n    return <CategoryWrappedComponent categoryId={categoryId} {...otherProps} />\r\n  }\r\n}\r\n\r\nCategoryContainer.propTypes = {\r\n  categoryId: PropTypes.string,\r\n}\r\nconst mapStateToProps = (state, props) => {\r\n  const getCategory = makeGetCategory()\r\n  const getFirstSelectableCategory = makeGetFirstSelectableCategory()\r\n  const orderPluginProperties = getOrderProperties(state)\r\n\r\n  return {\r\n    category: getCategory(state, {\r\n      ...props,\r\n      parentCategories: orderPluginProperties.parentCategories,\r\n    }),\r\n    firstSelectableCategory: getFirstSelectableCategory(state, props),\r\n    orderPluginProperties,\r\n    orderProduct: getOrderProduct(state),\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    setSelectedCategory,\r\n    setFirstSelectedCategory,\r\n    setParentCategories,\r\n  }\r\n)(CategoryContainer)\r\n","import React from 'react'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport CategoryContainer from './CategoryContainer'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nconst getCategoryIdOnProps = props => {\r\n  const queryParam = getQueryParam('categoryId')\r\n  if (!isEmpty(queryParam)) {\r\n    return queryParam\r\n  }\r\n  if (!isNil(props.routeParams) && !isEmpty(props.routeParams.categoryId)) {\r\n    return props.routeParams.categoryId\r\n  }\r\n  if (!isNil(props.params) && !isEmpty(props.params.categoryId)) {\r\n    return props.params.categoryId\r\n  }\r\n  return isUndefined(props.categoryId) ? null : props.categoryId\r\n}\r\n\r\n/**\r\n * Add the RestaurantContainer as HOC for the given component\r\n * Requirements\r\n * - categoryId in props or routeParams\r\n */\r\nconst withCategory = CategoryWrappedComponent => {\r\n  return props => (\r\n    <CategoryContainer\r\n      CategoryWrappedComponent={CategoryWrappedComponent}\r\n      categoryId={getCategoryIdOnProps(props)}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nexport default withCategory\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getCategoryFromCatalog } from 'pmt-modules/catalog/utils'\r\nimport { makeGetFirstSelectableCategory } from 'pmt-modules/catalog/selectors'\r\n\r\nimport { getOrderProperties } from '../../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that returns the selected category from store\r\n *\r\n */\r\nclass SelectedCategoryContainer extends React.Component {\r\n  state = {\r\n    selectedCategoryFound: null,\r\n  }\r\n\r\n  // Here we need to define the category to be displayed.\r\n  // If the user changes the restaurant id in url, we need to select the right category\r\n  // even if a previous one on the previous restaurant was already selected.\r\n  // If we don't find a category from catalog we the selected one, we select the first selectable category.\r\n  componentWillReceiveProps(nextProps) {\r\n    const { catalog, firstSelectableCategory, orderPluginProperties } = nextProps\r\n\r\n    if (\r\n      !isNil(this.props.orderPluginProperties.selectedCategory) ||\r\n      (isNil(this.props.orderPluginProperties.selectedCategory) &&\r\n        !isNil(orderPluginProperties.selectedCategory))\r\n    ) {\r\n      if (!isNil(catalog) && !isNil(orderPluginProperties.selectedCategory)) {\r\n        const selectedCategoryFound = getCategoryFromCatalog(\r\n          catalog,\r\n          orderPluginProperties.selectedCategory.id,\r\n          orderPluginProperties.parentCategories\r\n        )\r\n\r\n        this.setState({\r\n          selectedCategoryFound: selectedCategoryFound || firstSelectableCategory,\r\n        })\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      children,\r\n      catalog,\r\n      parentCategories,\r\n      orderPluginProperties,\r\n      firstSelectableCategory,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    return children({\r\n      catalog,\r\n      selectedCategory:\r\n        this.state.selectedCategoryFound ||\r\n        orderPluginProperties.selectedCategory ||\r\n        firstSelectableCategory,\r\n      parentCategories: orderPluginProperties.parentCategories,\r\n      isSubCategory: !isEmpty(parentCategories),\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nSelectedCategoryContainer.propTypes = {\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getFirstSelectableCategory = makeGetFirstSelectableCategory()\r\n\r\n  return {\r\n    orderPluginProperties: getOrderProperties(state),\r\n    firstSelectableCategory: getFirstSelectableCategory(state, props),\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {}\r\n)(SelectedCategoryContainer)\r\n","import { createAction } from '../redux'\r\n\r\nimport { DEFAULT_GEOLOCATION_ID } from './constants'\r\n\r\nexport const GeolocationAction = {\r\n  INIT: 'GEOLOCATION::INIT',\r\n  SUCCESS: 'GEOLOCATION::SUCCESS',\r\n  FAILURE: 'GEOLOCATION::FAILURE',\r\n  SET_ADDRESS: 'GEOLOCATION::SET::ADDRESS',\r\n  SET_COMPUTE_ADDRESS: 'GEOLOCATION::SET::COMPUTE_ADDRESS',\r\n  SET_COMPUTE_ADDRESS_EXTRA: 'GEOLOCATION::SET::COMPUTE_ADDRESS_EXTRA',\r\n  SET_COORDINATES: 'GEOLOCATION::SET::COORDINATES',\r\n  RESET: 'GEOLOCATION::RESET::RESET',\r\n  RESET_COORDINATES: 'GEOLOCATION::RESET::COORDINATES',\r\n  RESET_FULL: 'GEOLOCATION::RESET::FULL',\r\n  RESET_ERROR: 'GEOLOCATION::RESET::ERROR',\r\n}\r\n\r\nexport const initGeolocation = (id = DEFAULT_GEOLOCATION_ID, origin) =>\r\n  createAction(GeolocationAction.INIT, {\r\n    id,\r\n    origin,\r\n  })\r\n\r\n/**\r\n * @param {string} successCallback The function called in case of success\r\n */\r\nexport const successGeolocation = (id = DEFAULT_GEOLOCATION_ID, latitude, longitude) =>\r\n  createAction(GeolocationAction.SUCCESS, {\r\n    id,\r\n    latitude,\r\n    longitude,\r\n  })\r\n\r\n/**\r\n * @param {string} failureCallback The function called in case of failure\r\n */\r\nexport const failureGeolocation = (id = DEFAULT_GEOLOCATION_ID, failureCallback) =>\r\n  createAction(GeolocationAction.FAILURE, {\r\n    id,\r\n    failureCallback,\r\n  })\r\n\r\nexport const setGeolocationAddress = (id = DEFAULT_GEOLOCATION_ID, address) =>\r\n  createAction(GeolocationAction.SET_ADDRESS, {\r\n    id,\r\n    address,\r\n  })\r\n\r\nexport const setGeolocationComputeAddress = (id = DEFAULT_GEOLOCATION_ID, computeAddress) =>\r\n  createAction(GeolocationAction.SET_COMPUTE_ADDRESS, {\r\n    id,\r\n    computeAddress,\r\n  })\r\n\r\nexport const setGeolocationComputeAddressExtra = (\r\n  id = DEFAULT_GEOLOCATION_ID,\r\n  computeAddressExtra\r\n) =>\r\n  createAction(GeolocationAction.SET_COMPUTE_ADDRESS_EXTRA, {\r\n    id,\r\n    computeAddressExtra,\r\n  })\r\n\r\nexport const resetGeolocation = (id = DEFAULT_GEOLOCATION_ID) =>\r\n  createAction(GeolocationAction.RESET, {\r\n    id,\r\n  })\r\n\r\nexport const resetFullGeolocation = () => createAction(GeolocationAction.RESET_FULL, {})\r\n\r\nexport const setGeolocationCoordinates = (id = DEFAULT_GEOLOCATION_ID, latitude, longitude) =>\r\n  createAction(GeolocationAction.SET_COORDINATES, {\r\n    id,\r\n    latitude,\r\n    longitude,\r\n  })\r\n\r\nexport const resetGeolocationCoordinates = (id = DEFAULT_GEOLOCATION_ID) =>\r\n  createAction(GeolocationAction.RESET_COORDINATES, {\r\n    id,\r\n  })\r\n\r\nexport const resetGeolocationError = () => createAction(GeolocationAction.RESET_ERROR, {})\r\n","import Immutable from 'immutable'\r\n\r\nimport { GeolocationAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './constants'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  // id: {\r\n  //   origin: null,\r\n  //   address: null,\r\n  //   geolocationAddress: null,\r\n  //   latitude: null,\r\n  //   longitude: null,\r\n  //   isFetching: false,\r\n  //   error: null,\r\n  // }\r\n})\r\n\r\nexport const geolocationReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case GeolocationAction.INIT:\r\n      return state.merge({\r\n        [action.id]: {\r\n          origin: action.origin,\r\n          isFetching: true,\r\n          latitude: null,\r\n          longitude: null,\r\n          address: null,\r\n          computeAddress: null,\r\n          computeAddressExtra: null,\r\n          error: null,\r\n        },\r\n      })\r\n\r\n    case GeolocationAction.SUCCESS:\r\n      return state.mergeDeep({\r\n        [action.id]: {\r\n          isFetching: false,\r\n          latitude: action.latitude,\r\n          longitude: action.longitude,\r\n          error: null,\r\n        },\r\n      })\r\n\r\n    case GeolocationAction.FAILURE:\r\n      return state.mergeDeep({\r\n        [action.id]: {\r\n          isFetching: false,\r\n          error: action.error,\r\n        },\r\n      })\r\n\r\n    case GeolocationAction.SET_ADDRESS:\r\n      return state.mergeDeep({\r\n        [action.id]: {\r\n          address: action.address,\r\n        },\r\n      })\r\n\r\n    case GeolocationAction.SET_COMPUTE_ADDRESS:\r\n      return state.mergeDeep({\r\n        [action.id]: {\r\n          computeAddress: action.computeAddress,\r\n        },\r\n      })\r\n\r\n    case GeolocationAction.SET_COMPUTE_ADDRESS_EXTRA:\r\n      return state.mergeDeep({\r\n        [action.id]: {\r\n          computeAddressExtra: action.computeAddressExtra,\r\n        },\r\n      })\r\n\r\n    case GeolocationAction.SET_COORDINATES:\r\n      return state.mergeDeep({\r\n        [action.id]: {\r\n          latitude: action.latitude,\r\n          longitude: action.longitude,\r\n        },\r\n      })\r\n\r\n    case GeolocationAction.RESET_COORDINATES:\r\n      return state.mergeDeep({\r\n        [action.id]: {\r\n          latitude: null,\r\n          longitude: null,\r\n        },\r\n      })\r\n\r\n    case GeolocationAction.RESET:\r\n      return state.mergeDeep({\r\n        [action.id]: {\r\n          address: null,\r\n          computeAddress: null,\r\n          computeAddressExtra: null,\r\n          latitude: null,\r\n          longitude: null,\r\n          origin: null,\r\n        },\r\n      })\r\n\r\n    case GeolocationAction.RESET_FULL:\r\n      return Immutable.fromJS({})\r\n\r\n    case GeolocationAction.RESET_ERROR:\r\n      return state.mergeDeep({\r\n        [action.id]: {\r\n          error: null,\r\n        },\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","export const fromApp = {\r\n  WEBAPP: 'webapp',\r\n}\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport { getAppConfig, getFrontSettings } from 'pmt-modules/appConfig'\r\nimport { saveRawAccessToken } from 'pmt-modules/auth'\r\nimport { OrderMode } from 'pmt-modules/order'\r\nimport { selectMode, setRestaurantId } from 'pmt-modules/orderFront'\r\nimport {\r\n  setGeolocationComputeAddress,\r\n  setGeolocationAddress,\r\n  setGeolocationCoordinates,\r\n} from 'pmt-modules/geolocation'\r\nimport { DEFAULT_GEOLOCATION_ID } from 'pmt-modules/geolocation/constants'\r\nimport { getAddressElementsFromFormattedAddress } from 'pmt-utils/google'\r\n\r\nimport {\r\n  setTableNumber,\r\n  disableTableNumberModification,\r\n  setPosCheckId,\r\n  setFrom,\r\n  setDueDateAsap,\r\n  setConfigurationError,\r\n} from '../../actions'\r\nimport { fromApp } from '../../constants'\r\nimport { getOrderProperties } from '../../selectors'\r\n\r\nclass OrderPluginUrlCheckerContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.mode = null\r\n    this.restaurantId = null\r\n    this.address = null\r\n    this.isAsap = null\r\n\r\n    const {\r\n      appConfig,\r\n      verifyRestaurantId,\r\n      verifyMode,\r\n      verifyLatLng,\r\n      verifyAddress,\r\n      verifyIsAsap,\r\n      verifyTableNumber,\r\n      verifyFrom,\r\n    } = props\r\n\r\n    if (!appConfig) {\r\n      // do not check if we don't have an appConfig provided\r\n      // when the appToken is invalid, there is no appConfig retrieved, but we need to render\r\n      return\r\n    }\r\n\r\n    if (verifyMode) {\r\n      this.checkMode()\r\n    }\r\n\r\n    this.checkAccessToken()\r\n\r\n    if (verifyLatLng) {\r\n      this.checkLatLng()\r\n    }\r\n\r\n    if (verifyAddress) {\r\n      this.checkAddress()\r\n    }\r\n\r\n    if (verifyRestaurantId) {\r\n      this.checkRestaurantId()\r\n    }\r\n\r\n    if (verifyIsAsap) {\r\n      this.checkIsAsap()\r\n    }\r\n\r\n    if (verifyTableNumber) {\r\n      this.checkTableNumber()\r\n    }\r\n\r\n    if (verifyFrom) {\r\n      this.checkFrom()\r\n    }\r\n  }\r\n\r\n  setLocalState = obj => {\r\n    this.setState(obj)\r\n  }\r\n\r\n  checkMode = () => {\r\n    const {\r\n      location,\r\n      appConfig,\r\n      orderPluginProperties,\r\n      selectMode,\r\n      redirectTo,\r\n      setConfigurationError,\r\n    } = this.props\r\n\r\n    // if the mode set in URL is not in the appConfig\r\n    if (\r\n      !isUndefined(location.query.mode) &&\r\n      appConfig.order.modes.indexOf(parseInt(location.query.mode, 10)) === -1\r\n    ) {\r\n      setConfigurationError(\r\n        \"Le mode de commande renseigné dans l'URL n'est pas disponible dans votre configuration\"\r\n      )\r\n      return false\r\n    }\r\n\r\n    const modeInQuery = isNil(location.query.mode) ? NaN : parseInt(location.query.mode, 10)\r\n\r\n    // if only one mode is in appConfig, we preselect it no matter what's in the URL\r\n    if (appConfig.order && appConfig.order.modes.length === 1) {\r\n      selectMode(appConfig.order.modes[0])\r\n      this.mode = appConfig.order.modes[0]\r\n\r\n      // if the user is on the modes page, we redirect on store locator\r\n      if (location.pathname === getRoute('ORDER__MODE').path) {\r\n        redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n      }\r\n\r\n      // if one mode is in query URL, we set this mode as selected\r\n    } else if (\r\n      (isNil(orderPluginProperties.mode) || orderPluginProperties.mode !== modeInQuery) &&\r\n      !isNaN(modeInQuery)\r\n    ) {\r\n      selectMode(modeInQuery)\r\n      this.mode = modeInQuery\r\n\r\n      // if the user is on the modes page, we redirect on store locator\r\n      if (location.pathname === getRoute('ORDER__MODE').path) {\r\n        redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n      }\r\n\r\n      // if nothing is filled in query URL and no selected mode, we redirect on mode page\r\n    } else if (isNil(orderPluginProperties.mode)) {\r\n      this.setState({\r\n        renderOrderPluginAppConfig: false,\r\n      })\r\n      redirectTo(getRoute('ORDER__MODE'))\r\n    }\r\n  }\r\n\r\n  checkRestaurantId = () => {\r\n    const {\r\n      location,\r\n      setRestaurantId,\r\n      setConfigurationError,\r\n      params,\r\n      orderPluginProperties,\r\n    } = this.props\r\n\r\n    // if its format isn't ok\r\n    if (\r\n      !isUndefined(location.query.restaurantId) &&\r\n      isNaN(parseInt(location.query.restaurantId, 10))\r\n    ) {\r\n      setConfigurationError(\"Le format de l'ID du restaurant renseigné est erroné\")\r\n\r\n      return false\r\n    } else {\r\n      const restaurantId = !isUndefined(location.query.restaurantId)\r\n        ? String(parseInt(location.query.restaurantId, 10))\r\n        : !isUndefined(params) && !isUndefined(params.restaurantId)\r\n          ? String(parseInt(params.restaurantId, 10))\r\n          : null\r\n\r\n      this.restaurantId = restaurantId\r\n\r\n      if (\r\n        isNil(orderPluginProperties.restaurantId) ||\r\n        orderPluginProperties.restaurantId !== restaurantId\r\n      ) {\r\n        setRestaurantId(restaurantId)\r\n      }\r\n    }\r\n  }\r\n\r\n  checkLatLng = () => {\r\n    const {\r\n      location,\r\n      orderPluginProperties,\r\n      setConfigurationError,\r\n      setGeolocationCoordinates,\r\n    } = this.props\r\n\r\n    if (!isUndefined(location.query.latitude) && !isUndefined(location.query.longitude)) {\r\n      const latInQuery = parseFloat(location.query.latitude)\r\n      const lngInQuery = parseFloat(location.query.longitude)\r\n\r\n      if (isNaN(latInQuery) || isNaN(lngInQuery)) {\r\n        setConfigurationError('Le format des latitudes/longitudes renseignées est erroné')\r\n        return\r\n      }\r\n\r\n      // if latitude and longitude are set correctly in URL\r\n      if (\r\n        (isNil(orderPluginProperties.lat) || orderPluginProperties.lat !== latInQuery) &&\r\n        (isNil(orderPluginProperties.lng) || orderPluginProperties.lng !== lngInQuery)\r\n      ) {\r\n        setGeolocationCoordinates(DEFAULT_GEOLOCATION_ID, latInQuery, lngInQuery)\r\n      }\r\n    }\r\n  }\r\n\r\n  checkAddress = () => {\r\n    const { location, setGeolocationAddress, setGeolocationComputeAddress } = this.props\r\n\r\n    if (!isUndefined(location.query.address)) {\r\n      const addressInQuery = isNil(location.query.address)\r\n        ? null\r\n        : location.query.address.split('+').join(' ')\r\n\r\n      // if latitude and longitude are set correctly in URL\r\n      if (!isNil(addressInQuery)) {\r\n        setGeolocationAddress(DEFAULT_GEOLOCATION_ID, decodeURIComponent(addressInQuery))\r\n        const formattedAddress = decodeURIComponent(addressInQuery)\r\n        const computeAddress = getAddressElementsFromFormattedAddress(formattedAddress)\r\n        setGeolocationComputeAddress(DEFAULT_GEOLOCATION_ID, computeAddress)\r\n\r\n        this.address = decodeURIComponent(addressInQuery)\r\n\r\n        return true\r\n      }\r\n    }\r\n  }\r\n\r\n  checkIsAsap = () => {\r\n    const { location, setDueDateAsap, setConfigurationError, redirectTo } = this.props\r\n\r\n    // if a restaurantId is set in the URL and its format is ok\r\n    if (!isNil(this.mode) && !isNil(this.restaurantId)) {\r\n      const queryIsAsap = location.query.isAsap || null\r\n\r\n      // if isAsap is set correctly in URL\r\n      if (!isNil(queryIsAsap)) {\r\n        if (queryIsAsap === 'true') {\r\n          setDueDateAsap()\r\n          this.isAsap = true\r\n\r\n          // if the user is on the modes page, we redirect on store locator\r\n          if (\r\n            location.pathname === getRoute('ORDER__MODE').path ||\r\n            location.pathname === getRoute('ORDER__STORE_LOCATOR').path\r\n          ) {\r\n            redirectTo(getRoute('ORDER__CATALOG'), {\r\n              restaurantId: this.restaurantId,\r\n            })\r\n          }\r\n\r\n          // if the format is wrong\r\n        } else {\r\n          setConfigurationError('Le format de isAsap renseigné est erroné')\r\n          return false\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  checkTableNumber = () => {\r\n    const {\r\n      location,\r\n      orderPluginProperties,\r\n      setTableNumber,\r\n      disableTableNumberModification,\r\n      setPosCheckId,\r\n      redirectTo,\r\n    } = this.props\r\n    let makeRedirect = false\r\n    const tableNumberInQuery = location.query.tableNumber\r\n    const posCheckIdInQuery = location.query.posCheckId\r\n\r\n    // if a table number is set in the URL and its format is ok\r\n    if (\r\n      (isNil(orderPluginProperties.tableNumber) ||\r\n        orderPluginProperties.tableNumber !== tableNumberInQuery) &&\r\n      !isNil(tableNumberInQuery)\r\n    ) {\r\n      makeRedirect = true\r\n      setTableNumber(tableNumberInQuery)\r\n      disableTableNumberModification()\r\n    }\r\n\r\n    // if a posCheckId is set in the URL and its format is ok\r\n    if (\r\n      (isNil(orderPluginProperties.posCheckId) ||\r\n        orderPluginProperties.posCheckId !== posCheckIdInQuery) &&\r\n      !isNil(posCheckIdInQuery)\r\n    ) {\r\n      makeRedirect = true\r\n      setPosCheckId(posCheckIdInQuery)\r\n      disableTableNumberModification()\r\n    }\r\n\r\n    if (\r\n      makeRedirect &&\r\n      (location.pathname === getRoute('ORDER__MODE').path ||\r\n        location.pathname === getRoute('ORDER__STORE_LOCATOR').path) &&\r\n      !isNil(this.mode) &&\r\n      parseInt(this.mode, 10) === OrderMode.ON_SITE &&\r\n      !isNil(this.restaurantId)\r\n    ) {\r\n      redirectTo(getRoute('ORDER__CATALOG'), {\r\n        restaurantId: this.restaurantId,\r\n      })\r\n    }\r\n  }\r\n\r\n  checkFrom = () => {\r\n    const { location, setFrom } = this.props\r\n    const from = location.query.from\r\n\r\n    if (!isNil(from)) {\r\n      setFrom(from)\r\n      this.from = from\r\n      if (from === fromApp.WEBAPP) {\r\n        disableTableNumberModification()\r\n      }\r\n    }\r\n  }\r\n\r\n  // when an accessToken is passed as query param, we store it\r\n  checkAccessToken = () => {\r\n    const { location, saveRawAccessToken } = this.props\r\n    const accessToken = location.query.accessToken\r\n\r\n    if (!isNil(accessToken)) {\r\n      saveRawAccessToken({\r\n        access_token: accessToken,\r\n        token_type: 'bearer',\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { children, ...otherProps } = this.props\r\n\r\n    if (isFunction(children)) {\r\n      return children({\r\n        ...otherProps,\r\n      })\r\n    }\r\n\r\n    return React.cloneElement(children, {\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nOrderPluginUrlCheckerContainer.defaultProps = {\r\n  verifyRestaurantId: false,\r\n  verifyMode: false,\r\n  verifyLatLng: false,\r\n  verifyAddress: false,\r\n  verifyIsAsap: false,\r\n  verifyTableNumber: false,\r\n  verifyFrom: false,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  appConfig: getAppConfig(state),\r\n  frontAppConfig: getFrontSettings(state),\r\n  orderPluginProperties: getOrderProperties(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    redirectTo,\r\n    saveRawAccessToken,\r\n    selectMode,\r\n    setDueDateAsap,\r\n    setConfigurationError,\r\n    setFrom,\r\n    setGeolocationAddress,\r\n    setGeolocationComputeAddress,\r\n    setGeolocationCoordinates,\r\n    setPosCheckId,\r\n    setRestaurantId,\r\n    setTableNumber,\r\n    disableTableNumberModification,\r\n  }\r\n)(OrderPluginUrlCheckerContainer)\r\n","export const UnavailabilityItemOrigin = {\r\n  MENU_UNAVAILABLE: 'MENU_UNAVAILABLE',\r\n  PART_UNAVAILABLE: 'PART_UNAVAILABLE',\r\n  PRODUCT_UNAVAILABLE: 'PRODUCT_UNAVAILABLE',\r\n  OPTION_UNAVAILABLE: 'OPTION_UNAVAILABLE',\r\n}\r\n\r\nexport const ORDER_PREVIEW_DELAY = 500\r\n","import { createAction } from '../redux'\r\n\r\nimport { ModalType, createHideDialogAction } from '../dialog'\r\n\r\nexport const CartDiffAction = {\r\n  SET_ITEM_LIST: 'CART_DIFF::SET_ITEM_LIST',\r\n  DELETE_ITEM_LIST: 'CART_DIFF::DELETE_ITEM_LIST',\r\n}\r\n\r\nexport const setCartDiffItemList = itemList =>\r\n  createAction(CartDiffAction.SET_ITEM_LIST, {\r\n    itemList,\r\n  })\r\n\r\nexport const deleteCartDiffItemList = () => createAction(CartDiffAction.DELETE_ITEM_LIST, {})\r\n\r\nexport const hideCartDiffDialog = () => createHideDialogAction(ModalType.CART_DIFF_ITEMS)\r\n","import { createSelector } from 'reselect'\r\n\r\nconst getCartDiff = state => state.entities.cartDiff\r\n\r\nexport const getItemList = createSelector([getCartDiff], cartDiffData =>\r\n  cartDiffData.get('itemList', null).toJS()\r\n)\r\n","import isNil from 'lodash/isNil'\r\n\r\nimport { getProductFromCatalog, getMenuFromCatalog } from 'pmt-modules/catalog/utils'\r\n\r\nexport const getUnavailableItemsFromCart = (cartItemList, catalog, upsellingData) => {\r\n  let unavailableItems = []\r\n  cartItemList.forEach(item => {\r\n    let itemFromCatalog = null\r\n    if (item.isProduct) {\r\n      itemFromCatalog = getProductFromCatalog(catalog, upsellingData, item.id)\r\n    } else {\r\n      itemFromCatalog = getMenuFromCatalog(catalog, upsellingData, item.id)\r\n    }\r\n\r\n    if (!isNil(itemFromCatalog) && !itemFromCatalog.available) {\r\n      unavailableItems.push(item)\r\n    }\r\n  })\r\n\r\n  return unavailableItems\r\n}\r\n\r\nexport const removeUnavailableItemsFromList = (cartItemList, unavailableItemList) => {\r\n  unavailableItemList.forEach(unavailableItem => {\r\n    cartItemList = cartItemList.filter(item => item.orderId !== unavailableItem.orderId)\r\n  })\r\n\r\n  return cartItemList\r\n}\r\n","import { formatCategory } from '../../catalog/format/category'\r\nimport { formatItemsCartModifiers } from '../../catalog/format/cartModifiers'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nexport const formatUpsellingData = upsellingData => {\r\n  upsellingData.upsellingCategories = upsellingData.upsellingCategories.map(category =>\r\n    formatCategory(category)\r\n  )\r\n\r\n  // clean empty categories\r\n  upsellingData.upsellingCategories = upsellingData.upsellingCategories.filter(\r\n    category => !isEmpty(category.items)\r\n  )\r\n\r\n  upsellingData.hasUpsellings = false\r\n  if (!isEmpty(upsellingData.upsellingCategories)) {\r\n    upsellingData.upsellingCategory = upsellingData.upsellingCategories[0]\r\n    upsellingData.upsellingCategory.items = upsellingData.upsellingCategory.items.filter(\r\n      item => item.available\r\n    )\r\n\r\n    if (!isEmpty(upsellingData.upsellingCategory.items)) {\r\n      upsellingData.hasUpsellings = true\r\n      upsellingData.upsellingCategory.items = formatItemsCartModifiers(\r\n        upsellingData.upsellingCategory.items\r\n      )\r\n    }\r\n  }\r\n\r\n  return upsellingData\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { getOrderProperties } from 'pmt-modules/orderFront'\r\n\r\nimport { formatUpsellingData } from './format'\r\n\r\nconst getUpsellingDataEntity = state => state.entities.upsellingData\r\n\r\nexport const getUpsellingDataForMode = createSelector(\r\n  [getUpsellingDataEntity, getOrderProperties],\r\n  (upsellingData, orderProperties) => {\r\n    if (isNil(upsellingData)) {\r\n      return null\r\n    }\r\n    return upsellingData.get(String(orderProperties.mode), null)\r\n  }\r\n)\r\n\r\nexport const getUpsellingData = createSelector([getUpsellingDataForMode], upsellingDataForMode => {\r\n  if (upsellingDataForMode) {\r\n    const upsellingData = upsellingDataForMode.get('data', null)\r\n    if (upsellingData) {\r\n      return upsellingData.toJS()\r\n    }\r\n  }\r\n  return null\r\n})\r\n\r\nexport const getErrorUpsells = createSelector([getUpsellingDataForMode], upsellingDataForMode => {\r\n  const upsellingData = upsellingDataForMode ? upsellingDataForMode.get('error', null) : null\r\n  return isNil(upsellingData) ? null : upsellingData.toJS()\r\n})\r\n\r\nexport const isFetchingUpsells = createSelector(\r\n  [getUpsellingDataForMode],\r\n  upsellingDataForMode =>\r\n    upsellingDataForMode ? upsellingDataForMode.get('isFetching', false) : false\r\n)\r\n\r\nexport const getUpsellingDataFormatted = createSelector([getUpsellingData], upsellingData => {\r\n  if (isNil(upsellingData)) {\r\n    return null\r\n  }\r\n\r\n  return formatUpsellingData(upsellingData)\r\n})\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nconst TemplateApi = {\r\n  getCustomTextsContainer: customTextsContainerId => ({\r\n    endpoint: ApiEndpoints.CUSTOMS_TEXTS_CONTAINER,\r\n    type: 'GET',\r\n    params: {\r\n      containerId: customTextsContainerId,\r\n    },\r\n  }),\r\n\r\n  postCustomTextsForGroup: restaurantsGroupId => ({\r\n    endpoint: ApiEndpoints.CUSTOMS_TEXTS,\r\n    type: 'POST',\r\n    query: {\r\n      restaurantsGroupId,\r\n    },\r\n    body: { texts: [] },\r\n  }),\r\n\r\n  postCustomTextsForRestaurant: restaurantId => ({\r\n    endpoint: ApiEndpoints.CUSTOMS_TEXTS,\r\n    type: 'POST',\r\n    query: {\r\n      restaurantId,\r\n    },\r\n    body: { texts: [] },\r\n  }),\r\n\r\n  putCustomTextsContainer: customTextsContainer => ({\r\n    endpoint: ApiEndpoints.CUSTOMS_TEXTS_CONTAINER,\r\n    type: 'PUT',\r\n    params: {\r\n      containerId: customTextsContainer.id,\r\n    },\r\n    body: { ...customTextsContainer },\r\n  }),\r\n\r\n  getEmailData: (template, restaurantsGroupId) => ({\r\n    endpoint: ApiEndpoints.TEMPLATE_EMAIL_DATA,\r\n    type: 'POST',\r\n    query: {\r\n      template,\r\n      restaurantsGroupId,\r\n    },\r\n    body: {}, // empty to use API templates data.\r\n  }),\r\n}\r\n\r\nexport default TemplateApi\r\n","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\n\r\nimport TemplateApi from 'pmt-modules/api/calls/TemplateApi'\r\n\r\nexport const GetCustomTextsAction = createApiEnumAction('CUSTOM_TEXTS::GET')\r\n\r\nexport const getCustomTexts = customTextsContainerId =>\r\n  createApiCallAction(\r\n    GetCustomTextsAction,\r\n    TemplateApi.getCustomTextsContainer(customTextsContainerId),\r\n    {\r\n      customTextsContainerId,\r\n    }\r\n  )\r\n","/** This should match the java UserType enum */\r\nconst UserType = {\r\n  NORMAL: 'NORMAL',\r\n  LIGHT: 'LIGHT',\r\n  INCOGNITO: 'INCOGNITO',\r\n}\r\n\r\nexport default UserType\r\n","import cloneDeep from 'lodash/cloneDeep'\r\nimport ApiEndpoints from '../config/ApiEndpoints'\r\nimport UserErrors from '../errors/UserErrors'\r\n\r\nimport { cleanForApi } from 'pmt-utils/phone'\r\nimport UserType from 'pmt-modules/user/constants/UserType'\r\n\r\nconst RegisterApi = {\r\n  postUser: user => {\r\n    const newUser = cloneDeep(user)\r\n    newUser.phone = cleanForApi((newUser.phone || '').replace(/ /g, ''))\r\n\r\n    return {\r\n      endpoint: ApiEndpoints.REGISTER,\r\n      type: 'POST',\r\n      body: newUser,\r\n      query: {\r\n        sendRegistrationEmail: false,\r\n        sendPhoneVerificationCode: false,\r\n      },\r\n      errorHandler: UserErrors.POST_USER,\r\n    }\r\n  },\r\n\r\n  postIncognitoUser: user => {\r\n    user.userType = UserType.INCOGNITO\r\n    return {\r\n      endpoint: ApiEndpoints.REGISTER,\r\n      type: 'POST',\r\n      body: user,\r\n      query: {\r\n        sendRegistrationEmail: false,\r\n        sendPhoneVerificationCode: false,\r\n      },\r\n      header: {\r\n        authorization: null,\r\n      },\r\n      errorHandler: UserErrors.POST_USER,\r\n    }\r\n  },\r\n\r\n  postUserLightUser: user => {\r\n    user.userType = UserType.LIGHT\r\n    return {\r\n      endpoint: ApiEndpoints.REGISTER,\r\n      type: 'POST',\r\n      body: user,\r\n      query: {\r\n        sendRegistrationEmail: false,\r\n        sendPhoneVerificationCode: false,\r\n      },\r\n      header: {\r\n        authorization: null,\r\n      },\r\n    }\r\n  },\r\n}\r\n\r\nexport default RegisterApi\r\n","import RegisterApi from '../api/calls/RegisterApi'\r\n\r\nimport {\r\n  createApiCallAction,\r\n  createApiEnumAction,\r\n  // createTestApiCallAction,\r\n} from '../api/utils'\r\n\r\nexport const RegisterUserAction = createApiEnumAction('REGISTRATION::REGISTER')\r\n\r\nexport const RegisterIncognitoUserAction = createApiEnumAction('REGISTRATION::REGISTER_INCOGNITO')\r\n\r\nexport const RegisterUserLightAction = createApiEnumAction('REGISTRATION::REGISTER_USER_LIGHT')\r\n\r\n// export const registerUserTest = (user) => createTestApiCallAction(\r\n//   RegisterUserAction,\r\n//   true,\r\n//   {\r\n//     data: { user },\r\n//   }\r\n// )\r\n\r\nexport const registerUser = (user, props) =>\r\n  createApiCallAction(RegisterUserAction, RegisterApi.postUser(user), {\r\n    user,\r\n    props,\r\n  })\r\n\r\nexport const registerAsIncognito = (user, props) =>\r\n  createApiCallAction(RegisterIncognitoUserAction, RegisterApi.postIncognitoUser(user), {\r\n    user,\r\n    props,\r\n  })\r\n\r\nexport const registerUserLight = (user, props) =>\r\n  createApiCallAction(RegisterUserLightAction, RegisterApi.postUserLightUser(user), {\r\n    user,\r\n    props,\r\n  })\r\n","import { authenticateUser, saveIncognitoCookie } from 'pmt-modules/auth'\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { EventManager } from 'pmt-modules/event'\r\n\r\nimport { RegisterUserAction, RegisterUserLightAction, RegisterIncognitoUserAction } from './actions'\r\nimport { removeIncognitoCookie, saveUserLightCookie } from '../auth'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { replaceWith } from 'pmt-modules/routing'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\n/**\r\n * Intercepts RegisterUserAction action. Redirects to login screen while running the oauth2\r\n * authentication flow.\r\n */\r\nconst registeredSuccessMiddleware = createMiddleware(\r\n  RegisterUserAction.SUCCESS,\r\n  ({ action, dispatch, next }) => {\r\n    EventManager.dispatch(EventManager.Events.ON_REGISTER_SUCCESS, {\r\n      user: action.response.email,\r\n    })\r\n\r\n    // oauth login\r\n    const { email, password } = action.data.user\r\n    dispatch(authenticateUser(email, password, action.data.props))\r\n    // we do not handle redirection-after-registration here, because it will be done by the middleware of AuthUserAction.SUCCESS\r\n  }\r\n)\r\n\r\nconst registeredIncognitoSuccessMiddleware = createMiddleware(\r\n  RegisterIncognitoUserAction.SUCCESS,\r\n  ({ getState, action, dispatch, next }) => {\r\n    saveIncognitoCookie(action.response.id)\r\n    // if we registered as Incognito, it means we were not already authenticated (as \"incognito\" authentication is proposed only when not already authenticated)\r\n    // so there is no cookies to remove\r\n\r\n    // we handle a `redirectTo` parameter to go back on the page that asked the user to logged in\r\n    if (redirectToRedirectToParamIfExists(dispatch)) {\r\n      // let the SUCCESS action reach the reducers / other middlewares (e.g. to set isFetching:false)\r\n      // before returning the marker, because returning a non-nil value from a middleware prevents\r\n      // createMiddleware from calling `next(action)` itself.\r\n      next(action)\r\n      return DID_REDIRECT_TO_PARAM\r\n    }\r\n    // else : maybe the user doesn't come from login page, for example because the mode is \"incognito only\"\r\n    // the redirection will then depend from the front (order plugin, web customer)\r\n    // so it will be handled in specific middlewares\r\n    // cf. orderPlugin/middlewares\r\n  }\r\n)\r\n\r\nconst registeredUserLightSuccessMiddleware = createMiddleware(\r\n  RegisterUserLightAction.SUCCESS,\r\n  ({ action, dispatch, next }) => {\r\n    saveUserLightCookie(action.response)\r\n    // maybe the user was incognito, and asked to create an account => now he is registered, he's not incognito anymore\r\n    removeIncognitoCookie()\r\n\r\n    if (redirectToRedirectToParamIfExists(dispatch)) {\r\n      // let the SUCCESS action reach the reducers / other middlewares (e.g. to set isFetching:false)\r\n      // before returning the marker, because returning a non-nil value from a middleware prevents\r\n      // createMiddleware from calling `next(action)` itself.\r\n      next(action)\r\n      return DID_REDIRECT_TO_PARAM\r\n    }\r\n  }\r\n)\r\n\r\n// we handle a `redirectTo` parameter to go back on the page that asked the user to logged in\r\n// returns true if a redirection was performed\r\nconst redirectToRedirectToParamIfExists = dispatch => {\r\n  const redirectToParam = getQueryParam('redirectTo')\r\n  if (!isEmpty(redirectToParam)) {\r\n    dispatch(replaceWith(decodeURIComponent(redirectToParam)))\r\n    return true\r\n  }\r\n  return false\r\n}\r\n\r\n// marker returned by the registration middlewares when they performed a `redirectTo` redirection.\r\n// It is returned as the middleware result so it propagates up through `next(action)` and lets\r\n// upstream middlewares (cf. orderPlugin/middlewares) know a redirection already happened.\r\nexport const DID_REDIRECT_TO_PARAM = 'DID_REDIRECT_TO_PARAM'\r\n\r\nexport const registrationMiddlewares = [\r\n  registeredSuccessMiddleware,\r\n  registeredIncognitoSuccessMiddleware,\r\n  registeredUserLightSuccessMiddleware,\r\n]\r\n","// https://davidwalsh.name/javascript-debounce-function\r\n// this function has been created because the debounce function\r\n// from lodash doesn't seem to work like we want to\r\n\r\nexport const debounce = (func, wait, immediate) => {\r\n  let timeout = null \r\n  return (...args) => {\r\n    const context = this\r\n\r\n    const later = () => {\r\n      timeout = null\r\n      if (!immediate) {\r\n        func.apply(context, args)\r\n      }\r\n    };\r\n    const callNow = immediate && !timeout\r\n    clearTimeout(timeout)\r\n    timeout = setTimeout(later, wait)\r\n    if (callNow) {\r\n      func.apply(context, args)\r\n    }\r\n  }\r\n}\r\n\r\nexport default debounce\r\n","// TODO: I18n\r\nconst AuthAppErrors = {\r\n  postAuthorize: {\r\n    // default: 'Erre',\r\n  },\r\n  getAuthorize: {\r\n    default: \"Impossible de récupérer l'app\",\r\n  },\r\n}\r\n\r\nexport default AuthAppErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport AuthAppErrors from '../errors/AuthAppErrors'\r\n\r\n/**\r\n *\r\n */\r\nconst AuthApi = {\r\n  getAuthorize: query => {\r\n    return {\r\n      type: 'GET',\r\n      withoutAuth: true,\r\n      headers: {\r\n        // remove Authorization to avoid bugs when the token is not valid anymore.\r\n        // we don't need to be authorize to get app info.\r\n        // Note: Must be a 'a' as first letter\r\n        authorization: '',\r\n      },\r\n      query,\r\n      endpoint: ApiEndpoints.OAUTH_AUTHORIZE_APP,\r\n      errorHandler: AuthAppErrors.getAuthorize,\r\n    }\r\n  },\r\n\r\n  /**\r\n   * OAuh2 app authorization request\r\n   *\r\n   * @param  {string} props. Required:\r\n   *                         - client_id\r\n   *                        Optionnal:\r\n   *                         - api-consumer\r\n   *                         - state\r\n   *                         - redirect_uri\r\n   */\r\n  postAuthorize: props => {\r\n    const { apiConsumer, ...bodyProps } = props\r\n\r\n    return {\r\n      type: 'POST',\r\n      body: bodyProps,\r\n      headers: {},\r\n      endpoint: ApiEndpoints.OAUTH_AUTHORIZE_APP,\r\n      errorHandler: AuthAppErrors.postAuthorize,\r\n    }\r\n  },\r\n}\r\n\r\nexport default AuthApi\r\n","import { createApiCallAction, createApiEnumAction } from '../../api/utils'\r\n\r\nimport AuthAppApi from '../../api/calls/AuthAppApi'\r\n\r\nexport const GetAppDataAction = createApiEnumAction(\r\n  'OAUTH::APP::AUTHORIZE::GET'\r\n)\r\n\r\n/**\r\n * @param  {object} props the GET /authorize props:\r\n *                        - client_id\r\n *                        - state\r\n *                        - redirect_uri\r\n */\r\nexport const fetchAuthorizeApp = props =>\r\n  createApiCallAction(GetAppDataAction, AuthAppApi.getAuthorize(props), {\r\n    props,\r\n  })\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getAppDataState = state => state.entities.authApp.appData\r\n\r\nexport const getAppDataError = createSelector(\r\n  [getAppDataState],\r\n  authDataState => {\r\n    const error = authDataState.get('error')\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n    return error.toJS()\r\n  }\r\n)\r\n\r\nexport const appDataIsFetching = createSelector(\r\n  [getAppDataState],\r\n  authDataState => {\r\n    return authDataState.get('isFetching')\r\n  }\r\n)\r\n\r\nexport const getAppData = createSelector([getAppDataState], authDataState => {\r\n  const data = authDataState.get('data')\r\n\r\n  if (isNil(data)) {\r\n    return null\r\n  }\r\n\r\n  return data.toJS()\r\n})\r\n","import { createApiCallAction, createApiEnumAction } from '../../api/utils'\r\n\r\nimport AuthAppApi from '../../api/calls/AuthAppApi'\r\n\r\nexport const PostAuthorizeAppAction = createApiEnumAction(\r\n  'OAUTH::APP::AUTHORIZE::POST'\r\n)\r\n\r\nexport const postAuthorizeApp = props =>\r\n  createApiCallAction(PostAuthorizeAppAction, AuthAppApi.postAuthorize(props), {\r\n    props,\r\n  })\r\n","import Immutable from 'immutable'\r\n\r\nimport { GetAppDataAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\n/**\r\n * The data given by the API to display the 'authorize app' view.\r\n */\r\nconst DEFAULT_APP_DATA = Immutable.fromJS({\r\n  isFetching: false,\r\n  data: null,\r\n  error: null,\r\n})\r\n\r\nexport const appDataReducer = (state = DEFAULT_APP_DATA, action) => {\r\n  switch (action.type) {\r\n    case GetAppDataAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        data: null,\r\n      })\r\n\r\n    case GetAppDataAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: action.response,\r\n        error: null,\r\n      })\r\n\r\n    case GetAppDataAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: null,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getAuthorizeState = state => state.entities.authApp.authorize\r\n\r\nexport const getAuthorizeAppData = createSelector([getAuthorizeState], authorizeState => {\r\n  const data = authorizeState.get('data', null)\r\n  if (isNil(data)) {\r\n    return null\r\n  }\r\n  return data.toJS()\r\n})\r\n\r\nexport const fetchAuthorizeAppError = createSelector([getAuthorizeState], authorizeState => {\r\n  const error = authorizeState.get('error', null)\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n  return error.toJS()\r\n})\r\n\r\nexport const isFetchingAuthorizeApp = createSelector([getAuthorizeState], authorizeState =>\r\n  authorizeState.get('isFetching', false)\r\n)\r\n","import Immutable from 'immutable'\r\n\r\nimport { PostAuthorizeAppAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './middlewares'\r\nexport * from './selectors'\r\n\r\n/**\r\n * the data given by the API once the user authorized (or not) the app.\r\n */\r\nconst DEFAULT_AUTHORIZE_DATA = Immutable.fromJS({\r\n  isFetching: false,\r\n  data: null,\r\n  error: null,\r\n})\r\n\r\nexport const authorizeAppReducer = (state = DEFAULT_AUTHORIZE_DATA, action) => {\r\n  switch (action.type) {\r\n    case PostAuthorizeAppAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        data: null,\r\n      })\r\n\r\n    case PostAuthorizeAppAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: action.response,\r\n        error: null,\r\n      })\r\n\r\n    case PostAuthorizeAppAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: null,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","/*\r\n* This module handles OAuth2 Application login.\r\n*\r\n* Summary:\r\n* - The client (mobile app, etc) display our /authorize page\r\n* - we ask the user if it authorize the app to use its account\r\n* - if yes, we generate a `code` (authorization code)\r\n* - we redirect to the client's `redirect_uri` with the code as query param\r\n*\r\n* Grant types support by draft 20\r\n*\r\n* The Authorization Code grant type is used when the client wants to request access to protected\r\n* resources on behalf of another user (i.e. a 3rd party). This is the grant type most often\r\n* associated with OAuth.\r\n*\r\n* The authorization code grant should be very familiar if you’ve ever signed into a web app using\r\n* your Facebook or Google account.\r\n*\r\n* The authorization code grant type is used to obtain both access tokens and refresh tokens and\r\n* is optimized for confidential clients. Since this is a redirection-based flow, the client must\r\n* be capable of interacting with the resource owner’s user-agent (typically a web browser) and\r\n* capable of receiving incoming requests (via redirection) from the authorization server.\r\n*\r\n* The reddit documentation can help to understand:\r\n* https://github.com/reddit/reddit/wiki/OAuth2\r\n*\r\n* <pre>\r\n* +----------+\r\n* | Resource |\r\n* |   Owner  |\r\n* |          |\r\n* +----------+\r\n*      ^\r\n*      |\r\n*     (B)\r\n* +----|-----+          Client Identifier      +---------------+\r\n* |         -+----(A)-- & Redirection URI ---.|               |\r\n* |  User-   |                                 | Authorization |\r\n* |  Agent  -+----(B)-- User authenticates --.|     Server    |\r\n* |          |                                 |               |\r\n* |         -+----(C)-- Authorization Code ---<|               |\r\n* +-|----|---+                                 +---------------+\r\n*   |    |                                         ^      v\r\n*   (A)  (C)                                       |      |\r\n*   |    |                                         |      |\r\n*   ^    v                                         |      |\r\n* +---------+                                      |      |\r\n* |         |>---(D)-- Authorization Code ---------'      |\r\n* |  Client |          & Redirection URI                  |\r\n* |         |                                             |\r\n* |         |<---(E)----- Access Token -------------------'\r\n* +---------+       (w/ Optional Refresh Token)\r\n* </pre>\r\n*\r\n* Note: The lines illustrating steps (A), (B), and (C) are broken into two parts as they pass\r\n* through the user-agent.\r\n*\r\n* A - The client initiates the flow by directing the resource owner’s user-agent to the\r\n* authorization endpoint. The client includes its client identifier, requested scope, local\r\n* state, and a redirection URI to which the authorization server will send the user-agent back\r\n* once access is granted (or denied).\r\n*\r\n* B - The authorization server authenticates the resource owner (via the user-agent) and\r\n* establishes whether the resource owner grants or denies the client’s access request.\r\n*\r\n* C - Assuming the resource owner grants access, the authorization server redirects the\r\n* user-agent back to the client using the redirection URI provided earlier (in the request or\r\n* during client registration). The redirection URI includes an authorization code and any local\r\n* state provided by the client earlier.\r\n*\r\n* D  - The client requests an access token from the authorization server’s token endpoint by\r\n* including the authorization code received in the previous step. When making the request, the\r\n* client authenticates with the authorization server. The client includes the redirection URI\r\n* used to obtain the authorization code for verification.\r\n*\r\n* E - The authorization server authenticates the client, validates the authorization code, and\r\n* ensures that the redirection URI received matches the URI used to redirect the client in step\r\n* (C). If valid, the authorization server responds back with an access token and, optionally, a\r\n* refresh token.\r\n*\r\n* Flow:\r\n*\r\n* <p> ---- Part1:\r\n*\r\n* The client will redirect the user to the authorization server with the following parameters in\r\n* the query string:\r\n*\r\n* - response_type with the value 'code'\r\n*\r\n* - client_id with the client identifier\r\n*\r\n* - redirect_uri with the client redirect URI. This parameter is optional, but if not send the\r\n* user will be redirected to a pre-registered redirect URI.\r\n*\r\n* - scope a space delimited list of scopes\r\n*\r\n* - state with a CSRF token. This parameter is optional but highly recommended. You should store\r\n* the value of the CSRF token in the user’s session to be validated when they return.\r\n*\r\n* - All of these parameters will be validated by the authorization server. </p>\r\n*\r\n* <p> The user will then be asked to login to the authorization server and approve the client. If\r\n* the user approves the client they will be redirected from the authorization server to the\r\n* client’s redirect URI with the following parameters in the query string:\r\n*\r\n* - code with the authorization code\r\n*\r\n* - state with the state parameter sent in the original request. You should compare this value\r\n* with the value stored in the user’s session to ensure the authorization code obtained is in\r\n* response to requests made by this client rather than another client application. </p>\r\n*\r\n* <p> ---- Part2:\r\n*\r\n* The client will now send a POST request to the authorization server with the following\r\n* parameters:\r\n*\r\n* - grant_type with the value of authorization_code - client_id with the client identifier -\r\n* client_secret with the client secret - redirect_uri with the same redirect URI the user was\r\n* redirect back to - code with the authorization code from the query string\r\n*\r\n* The authorization server will respond with a JSON object containing the following properties:\r\n*\r\n* - token_type with the value Bearer - expires_in with an integer representing the TTL of the\r\n* access token - access_token a JWT signed with the authorization server’s private key -\r\n* refresh_token an encrypted payload that can be used to refresh the access token when it\r\n* expires. </p>\r\n*/\r\nimport { appDataReducer } from './getApp'\r\n\r\nimport { authorizeAppReducer } from './authorizeApp'\r\n\r\nimport { combineReducers } from 'redux'\r\n\r\nexport * from './actions'\r\nexport * from './authorizeApp'\r\nexport * from './getApp'\r\n\r\nexport const authAppReducer = combineReducers({\r\n  appData: appDataReducer,\r\n  authorize: authorizeAppReducer,\r\n})\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ActionVisibility = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"/>\r\n  </SvgIcon>\r\n);\r\nActionVisibility = pure(ActionVisibility);\r\nActionVisibility.displayName = 'ActionVisibility';\r\nActionVisibility.muiName = 'SvgIcon';\r\n\r\nexport default ActionVisibility;\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ActionVisibilityOff = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"/>\r\n  </SvgIcon>\r\n);\r\nActionVisibilityOff = pure(ActionVisibilityOff);\r\nActionVisibilityOff.displayName = 'ActionVisibilityOff';\r\nActionVisibilityOff.muiName = 'SvgIcon';\r\n\r\nexport default ActionVisibilityOff;\r\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","export default function(e,n){return n=n||{},new Promise(function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(s.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||\"get\",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},s.onerror=r,s.withCredentials=\"include\"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)})}\n//# sourceMappingURL=unfetch.module.js.map\n","module.exports = self.fetch || (self.fetch = require('unfetch').default || require('unfetch'));\n","/**\n * Known potential responses from the remote API.\n *\n * https://haveibeenpwned.com/api/v3#PwnedPasswords\n *\n */\n/** @internal */\nvar OK = {\n    status: 200\n};\n/** @internal */\nvar BAD_REQUEST = {\n    status: 400,\n    body: 'The hash prefix was not in a valid format'\n};\n\nexport { BAD_REQUEST, OK };\n//# sourceMappingURL=responses2.js.map\n","import fetch from 'isomorphic-unfetch';\nimport { BAD_REQUEST } from './responses2.js';\n\n/**\n * Fetches data from the supplied API endpoint.\n *\n * HTTP status code 200 returns plain text (data found).\n * HTTP status code 400 throws an Error (bad request).\n *\n * @internal\n * @private\n * @param {string} endpoint the API endpoint to query\n * @param {object} [options] a configuration object\n * @param {string} [options.baseUrl] a custom base URL for the\n * pwnedpasswords.com API endpoints (default: `https://api.pwnedpasswords.com`)\n * @param {string} [options.userAgent] a custom string to send as the User-Agent\n * field in the request headers (default: `hibp <version>`)\n * @returns {Promise<string>} a Promise which resolves to the data resulting\n * from the query, or rejects with an Error\n */\nvar fetchFromApi = (function (endpoint) {\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref$baseUrl = _ref.baseUrl, baseUrl = _ref$baseUrl === void 0 ? 'https://api.pwnedpasswords.com' : _ref$baseUrl, _ref$userAgent = _ref.userAgent, userAgent = _ref$userAgent === void 0 ? undefined : _ref$userAgent;\n    var config = Object.assign({}, userAgent ? {\n        headers: {\n            'User-Agent': userAgent\n        }\n    } : {});\n    var url = \"\".concat(baseUrl.replace(/\\/$/g, '')).concat(endpoint);\n    return fetch(url, config).then(function (res) {\n        if (res.ok)\n            return res.text();\n        if (res.status === BAD_REQUEST.status) {\n            return res.text().then(function (text) {\n                throw new Error(text);\n            });\n        }\n        throw new Error(res.statusText);\n    });\n});\n\nexport default fetchFromApi;\n//# sourceMappingURL=fetchFromApi2.js.map\n","import 'isomorphic-unfetch';\nimport './responses2.js';\nimport fetchFromApi from './fetchFromApi2.js';\n\n/**\n * An object representing an exposed password hash suffix (corresponding to a\n * given hash prefix) and how many times it occurred in the Pwned Passwords\n * repository.\n *\n * @typedef {object} PwnedPasswordSuffix\n * @property {string} suffix\n * @property {number} count\n */\n/**\n * Fetches the SHA-1 hash suffixes for the given 5-character SHA-1 hash prefix.\n *\n * When a password hash with the same first 5 characters is found in the Pwned\n * Passwords repository, the API will respond with an HTTP 200 and include the\n * suffix of every hash beginning with the specified prefix, followed by a count\n * of how many times it appears in the data set. This function parses the\n * response and returns a more structured format.\n *\n * @param {string} prefix the first 5 characters of a SHA-1 password hash (case\n * insensitive)\n * @param {object} [options] a configuration object\n * @param {string} [options.baseUrl] a custom base URL for the\n * pwnedpasswords.com API endpoints (default: `https://api.pwnedpasswords.com`)\n * @param {string} [options.userAgent] a custom string to send as the User-Agent\n * field in the request headers (default: `hibp <version>`)\n * @returns {Promise<PwnedPasswordSuffix[]>} a Promise which resolves to an\n * array of objects, each containing the `suffix` that when matched with the\n * prefix composes the complete hash, and a `count` of how many times it appears\n * in the breached password data set, or rejects with an Error\n *\n * @example\n * pwnedPasswordRange('5BAA6')\n *   .then(results => {\n *     // results will have the following shape:\n *     // [\n *     //   { suffix: \"003D68EB55068C33ACE09247EE4C639306B\", count: 3 },\n *     //   { suffix: \"012C192B2F16F82EA0EB9EF18D9D539B0DD\", count: 1 },\n *     //   ...\n *     // ]\n *   })\n * @example\n * const suffix = '1E4C9B93F3F0682250B6CF8331B7EE68FD8';\n * pwnedPasswordRange('5BAA6')\n *   // filter to matching suffix\n *   .then(results => results.filter(row => row.suffix === suffix))\n *   // return count if match, 0 if not\n *   .then(results => (results[0] ? results[0].count : 0))\n *   .catch(err => {\n *     // ...\n *   });\n * @see https://haveibeenpwned.com/api/v3#SearchingPwnedPasswordsByRange\n * @alias module:pwnedPasswordRange\n */\nvar pwnedPasswordRange = function pwnedPasswordRange(prefix) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return fetchFromApi(\"/range/\".concat(encodeURIComponent(prefix)), options) // create array from lines of text in response body\n        .then(function (data) {\n        return data.split('\\n');\n    }) // convert into array of objects containing suffix and count for each line\n        .then(function (results) {\n        return results.map(function (row) {\n            return {\n                suffix: row.split(':')[0],\n                count: parseInt(row.split(':')[1], 10)\n            };\n        });\n    });\n};\n\nexport default pwnedPasswordRange;\n//# sourceMappingURL=pwnedPasswordRange.js.map\n","/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\r\n/*  SHA-1 implementation in JavaScript | (c) Chris Veness 2002-2010 | www.movable-type.co.uk      */\r\n/*   - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html                             */\r\n/*         http://csrc.nist.gov/groups/ST/toolkit/examples.html                                   */\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\r\n\r\nvar Sha1 = {} // Sha1 namespace\r\n\r\n/**\r\n * Generates SHA-1 hash of string\r\n *\r\n * @param {String} msg                String to be hashed\r\n * @param {Boolean} [utf8encode=true] Encode msg as UTF-8 before generating hash\r\n * @returns {String}                  Hash of msg as hex character string\r\n */\r\nSha1.hash = function(msg, utf8encode) {\r\n  utf8encode = typeof utf8encode == 'undefined' ? true : utf8encode\r\n\r\n  // convert string to UTF-8, as SHA only deals with byte-streams\r\n  if (utf8encode) msg = Utf8.encode(msg)\r\n\r\n  // constants [§4.2.1]\r\n  var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]\r\n\r\n  // PREPROCESSING\r\n\r\n  msg += String.fromCharCode(0x80) // add trailing '1' bit (+ 0's padding) to string [§5.1.1]\r\n\r\n  // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1]\r\n  var l = msg.length / 4 + 2 // length (in 32-bit integers) of msg + ‘1’ + appended length\r\n  var N = Math.ceil(l / 16) // number of 16-integer-blocks required to hold 'l' ints\r\n  var M = new Array(N)\r\n\r\n  for (var i = 0; i < N; i++) {\r\n    M[i] = new Array(16)\r\n    for (var j = 0; j < 16; j++) {\r\n      // encode 4 chars per integer, big-endian encoding\r\n      M[i][j] =\r\n        (msg.charCodeAt(i * 64 + j * 4) << 24) |\r\n        (msg.charCodeAt(i * 64 + j * 4 + 1) << 16) |\r\n        (msg.charCodeAt(i * 64 + j * 4 + 2) << 8) |\r\n        msg.charCodeAt(i * 64 + j * 4 + 3)\r\n    } // note running off the end of msg is ok 'cos bitwise ops on NaN return 0\r\n  }\r\n  // add length (in bits) into final pair of 32-bit integers (big-endian) [§5.1.1]\r\n  // note: most significant word would be (len-1)*8 >>> 32, but since JS converts\r\n  // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators\r\n  M[N - 1][14] = ((msg.length - 1) * 8) / Math.pow(2, 32)\r\n  M[N - 1][14] = Math.floor(M[N - 1][14])\r\n  M[N - 1][15] = ((msg.length - 1) * 8) & 0xffffffff\r\n\r\n  // set initial hash value [§5.3.1]\r\n  var H0 = 0x67452301\r\n  var H1 = 0xefcdab89\r\n  var H2 = 0x98badcfe\r\n  var H3 = 0x10325476\r\n  var H4 = 0xc3d2e1f0\r\n\r\n  // HASH COMPUTATION [§6.1.2]\r\n\r\n  var W = new Array(80)\r\n  var a, b, c, d, e\r\n  for (let i = 0; i < N; i++) {\r\n    // 1 - prepare message schedule 'W'\r\n    for (let t = 0; t < 16; t++) W[t] = M[i][t]\r\n    for (let u = 16; u < 80; u++) W[u] = Sha1.ROTL(W[u - 3] ^ W[u - 8] ^ W[u - 14] ^ W[u - 16], 1)\r\n\r\n    // 2 - initialise five working variables a, b, c, d, e with previous hash value\r\n    a = H0\r\n    b = H1\r\n    c = H2\r\n    d = H3\r\n    e = H4\r\n\r\n    // 3 - main loop\r\n    for (let v = 0; v < 80; v++) {\r\n      var s = Math.floor(v / 20) // seq for blocks of 'f' functions and 'K' constants\r\n      var T = (Sha1.ROTL(a, 5) + Sha1.f(s, b, c, d) + e + K[s] + W[v]) & 0xffffffff\r\n      e = d\r\n      d = c\r\n      c = Sha1.ROTL(b, 30)\r\n      b = a\r\n      a = T\r\n    }\r\n\r\n    // 4 - compute the new intermediate hash value\r\n    H0 = (H0 + a) & 0xffffffff // note 'addition modulo 2^32'\r\n    H1 = (H1 + b) & 0xffffffff\r\n    H2 = (H2 + c) & 0xffffffff\r\n    H3 = (H3 + d) & 0xffffffff\r\n    H4 = (H4 + e) & 0xffffffff\r\n  }\r\n\r\n  return (\r\n    Sha1.toHexStr(H0) +\r\n    Sha1.toHexStr(H1) +\r\n    Sha1.toHexStr(H2) +\r\n    Sha1.toHexStr(H3) +\r\n    Sha1.toHexStr(H4)\r\n  )\r\n}\r\n\r\n//\r\n// function 'f' [§4.1.1]\r\n//\r\nSha1.f = function(s, x, y, z) {\r\n  switch (s) {\r\n    case 0:\r\n      return (x & y) ^ (~x & z) // Ch()\r\n    case 1:\r\n      return x ^ y ^ z // Parity()\r\n    case 2:\r\n      return (x & y) ^ (x & z) ^ (y & z) // Maj()\r\n    case 3:\r\n      return x ^ y ^ z // Parity()\r\n    default:\r\n      return null\r\n  }\r\n}\r\n\r\n//\r\n// rotate left (circular left shift) value x by n positions [§3.2.5]\r\n//\r\nSha1.ROTL = function(x, n) {\r\n  return (x << n) | (x >>> (32 - n))\r\n}\r\n\r\n//\r\n// hexadecimal representation of a number\r\n//   (note toString(16) is implementation-dependant, and\r\n//   in IE returns signed numbers when used on full words)\r\n//\r\nSha1.toHexStr = function(n) {\r\n  var s = '',\r\n    v\r\n  for (var i = 7; i >= 0; i--) {\r\n    v = (n >>> (i * 4)) & 0xf\r\n    s += v.toString(16)\r\n  }\r\n  return s\r\n}\r\n\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\r\n/*  Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple          */\r\n/*              single-byte character encoding (c) Chris Veness 2002-2010                         */\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\r\n\r\nvar Utf8 = {} // Utf8 namespace\r\n\r\n/**\r\n * Encode multi-byte Unicode string into utf-8 multiple single-byte characters\r\n * (BMP / basic multilingual plane only)\r\n *\r\n * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars\r\n *\r\n * @param {String} strUni Unicode string to be encoded as UTF-8\r\n * @returns {String} encoded string\r\n */\r\nUtf8.encode = function(strUni) {\r\n  // use regular expressions & String.replace callback function for better efficiency\r\n  // than procedural approaches\r\n  var strUtf = strUni.replace(\r\n    /[\\u0080-\\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz\r\n    function(c) {\r\n      var cc = c.charCodeAt(0)\r\n      return String.fromCharCode(0xc0 | (cc >> 6), 0x80 | (cc & 0x3f))\r\n    }\r\n  )\r\n  strUtf = strUtf.replace(\r\n    /[\\u0800-\\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz\r\n    function(c) {\r\n      var cc = c.charCodeAt(0)\r\n      return String.fromCharCode(0xe0 | (cc >> 12), 0x80 | ((cc >> 6) & 0x3f), 0x80 | (cc & 0x3f))\r\n    }\r\n  )\r\n  return strUtf\r\n}\r\n\r\n/**\r\n * Decode utf-8 encoded string back into multi-byte Unicode characters\r\n *\r\n * @param {String} strUtf UTF-8 string to be decoded back to Unicode\r\n * @returns {String} decoded string\r\n */\r\nUtf8.decode = function(strUtf) {\r\n  // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!\r\n  var strUni = strUtf.replace(\r\n    /[\\u00e0-\\u00ef][\\u0080-\\u00bf][\\u0080-\\u00bf]/g, // 3-byte chars\r\n    function(c) {\r\n      // (note parentheses for precence)\r\n      var cc =\r\n        ((c.charCodeAt(0) & 0x0f) << 12) |\r\n        ((c.charCodeAt(1) & 0x3f) << 6) |\r\n        (c.charCodeAt(2) & 0x3f)\r\n      return String.fromCharCode(cc)\r\n    }\r\n  )\r\n  strUni = strUni.replace(\r\n    /[\\u00c0-\\u00df][\\u0080-\\u00bf]/g, // 2-byte chars\r\n    function(c) {\r\n      // (note parentheses for precence)\r\n      var cc = ((c.charCodeAt(0) & 0x1f) << 6) | (c.charCodeAt(1) & 0x3f)\r\n      return String.fromCharCode(cc)\r\n    }\r\n  )\r\n  return strUni\r\n}\r\n\r\nexport default Sha1\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport debounce from 'lodash/debounce'\r\nimport find from 'lodash/find'\r\nimport { pwnedPasswordRange } from 'hibp'\r\nimport sha1 from 'pmt-utils/security/sha1'\r\n\r\n/**\r\n * see https://haveibeenpwned.com/API/v2#SearchingPwnedPasswordsByRange\r\n */\r\nclass HibpPasswordRangeContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    const { password, minLength } = props\r\n\r\n    this.state = {\r\n      isPwned: false,\r\n      count: 0,\r\n      isFetching: !isEmpty(password) && password.length >= minLength,\r\n    }\r\n  }\r\n\r\n  componentDidMount() {\r\n    if (!isEmpty(this.props.password) && this.props.password.length >= this.props.minLength) {\r\n      this.check(this.props.password)\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (prevProps.password !== this.props.password) {\r\n      this.check(this.props.password)\r\n    }\r\n  }\r\n\r\n  check = debounce(password => {\r\n    if (isEmpty(password) || password.length < this.props.minLength) {\r\n      this.setState({\r\n        isPwned: false,\r\n        count: 0,\r\n        isFetching: false,\r\n      })\r\n      return\r\n    }\r\n\r\n    const shaValue = sha1.hash(password)\r\n    const prefix = shaValue.substring(0, 5).toUpperCase()\r\n    const suffix = shaValue.substring(5).toUpperCase()\r\n\r\n    this.setState({\r\n      isFetching: true,\r\n    })\r\n\r\n    pwnedPasswordRange(prefix).then(results => {\r\n      const pwdData = find(results, data => data.suffix === suffix)\r\n\r\n      const isPwned = pwdData !== undefined\r\n\r\n      this.setState({\r\n        isPwned,\r\n        count: isPwned ? pwdData.count : 0,\r\n        isFetching: false,\r\n      })\r\n    })\r\n  }, 300)\r\n\r\n  render() {\r\n    const { children } = this.props\r\n    const { isPwned, count, isFetching } = this.state\r\n\r\n    return children({\r\n      isPwned,\r\n      count,\r\n      isFetching,\r\n    })\r\n  }\r\n}\r\n\r\nHibpPasswordRangeContainer.defaultProps = {\r\n  minLength: 4,\r\n}\r\n\r\nHibpPasswordRangeContainer.propTypes = {\r\n  children: PropTypes.func.isRequired,\r\n\r\n  password: PropTypes.string,\r\n\r\n  /**\r\n   * min length after which we begin to test the password\r\n   */\r\n  minLength: PropTypes.number,\r\n}\r\n\r\nexport default HibpPasswordRangeContainer\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ActionInfoOutline = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zM11 9h2V7h-2v2z\"/>\r\n  </SvgIcon>\r\n);\r\nActionInfoOutline = pure(ActionInfoOutline);\r\nActionInfoOutline.displayName = 'ActionInfoOutline';\r\nActionInfoOutline.muiName = 'SvgIcon';\r\n\r\nexport default ActionInfoOutline;\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ErrorOutline = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\r\n    <path d=\"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"/>\r\n  </SvgIcon>\r\n);\r\nErrorOutline = pure(ErrorOutline);\r\nErrorOutline.displayName = 'ErrorOutline';\r\nErrorOutline.muiName = 'SvgIcon';\r\n\r\nexport default ErrorOutline;\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport clsx from 'clsx'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n  },\r\n  container: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    width: '100%',\r\n  },\r\n  icon: {\r\n    display: 'flex',\r\n    marginRight: theme.spacing(1),\r\n  },\r\n  variant_contained: {}, // nothing\r\n  variant_text: {\r\n    background: 'none!important',\r\n    border: 'none!important',\r\n    '& *': {\r\n      color: 'inherit',\r\n    },\r\n  },\r\n})\r\n\r\nconst MessageBlock = ({ classes, className, icon, variant = 'contained', text, ...otherProps }) => (\r\n  <div\r\n    className={clsx(\r\n      classes.root,\r\n      className,\r\n      clsx({\r\n        [classes.variant_contained]: variant === 'contained',\r\n        [classes.variant_text]: variant === 'text',\r\n      })\r\n    )}\r\n    {...otherProps}\r\n  >\r\n    <div className={classes.container}>\r\n      {icon && <div className={classes.icon}>{icon}</div>}\r\n      {text}\r\n    </div>\r\n  </div>\r\n)\r\n\r\nMessageBlock.propTypes = {\r\n  // icon element\r\n  icon: PropTypes.element,\r\n\r\n  // text to display, can be a string or an element\r\n  // e.g.: <Typography />\r\n  text: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,\r\n\r\n  variant: PropTypes.string,\r\n}\r\n\r\nconst toExport = withStyles(styles)(MessageBlock)\r\n\r\ntoExport.Error = ({ error, ...otherProps }) => (\r\n  <ErrorBlock\r\n    error={error}\r\n    mode={ErrorBlock.Mode.CUSTOM}\r\n    customElement={<toExport type={MessageBlock.Type.ERROR} />}\r\n    {...otherProps}\r\n  />\r\n)\r\nexport default toExport\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport InfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\nimport ErrorOutline from 'pmt-ui/svg-icons/action/error-outline'\r\nimport MessageBlockSdk from 'pmt-ui/MessageBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nconst styles = theme => ({\r\n  root: {},\r\n  errorRoot: {\r\n    color: theme.pmt.status.error,\r\n  },\r\n  infoRoot: {\r\n    color: theme.pmt.status.info,\r\n  },\r\n  warningRoot: {\r\n    color: theme.pmt.status.warning,\r\n  },\r\n})\r\n\r\nconst Type = {\r\n  INFO: 'TYPE::INFO',\r\n  ERROR: 'TYPE::ERROR',\r\n  WARNING: 'TYPE::WARNING',\r\n}\r\n\r\n/**\r\n * error will be displayed with the color defined in theme: theme.pmt.status.error\r\n * be sure to set it properly in your config theme file\r\n */\r\nconst MessageBlock = ({ classes, type, text }) => {\r\n  switch (type) {\r\n    case Type.ERROR:\r\n      return (\r\n        <MessageBlockSdk\r\n          classes={{\r\n            root: clsx(classes.root, classes.errorRoot),\r\n          }}\r\n          icon={<ErrorOutline />}\r\n          text={\r\n            <TypographyCustom skipColor type=\"164\">\r\n              {text}\r\n            </TypographyCustom>\r\n          }\r\n        />\r\n      )\r\n    case Type.WARNING:\r\n      return (\r\n        <MessageBlockSdk\r\n          classes={{\r\n            root: clsx(classes.root, classes.warningRoot),\r\n          }}\r\n          icon={<ErrorOutline />}\r\n          text={\r\n            <TypographyCustom skipColor type=\"164\">\r\n              {text}\r\n            </TypographyCustom>\r\n          }\r\n        />\r\n      )\r\n\r\n    case Type.INFO:\r\n    default:\r\n      return (\r\n        <MessageBlockSdk\r\n          classes={{\r\n            root: clsx(classes.root, classes.infoRoot),\r\n          }}\r\n          icon={<InfoOutline />}\r\n          text={\r\n            <TypographyCustom skipColor type=\"164\">\r\n              {text}\r\n            </TypographyCustom>\r\n          }\r\n        />\r\n      )\r\n  }\r\n}\r\n\r\nMessageBlock.defaultProps = {\r\n  type: Type.INFO,\r\n}\r\n\r\nMessageBlock.propTypes = {\r\n  // type of message block to display\r\n  type: PropTypes.string,\r\n\r\n  // text to display\r\n  text: PropTypes.string,\r\n}\r\n\r\nconst MessageBlockComponent = withStyles(styles)(MessageBlock)\r\n\r\nMessageBlockComponent.Type = Type\r\n\r\nexport default MessageBlockComponent\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport Input, { InputLabel, InputAdornment } from '../Input'\r\nimport TextField from '../TextField'\r\nimport { FormHelperText } from 'pmt-ui/Form'\r\nimport IconButton from '../IconButton'\r\nimport Visibility from '../svg-icons/action/visibility'\r\nimport VisibilityOff from '../svg-icons/action/visibility-off'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { makeStyles, withStyles } from 'pmt-ui/styles'\r\n\r\nimport HibpPasswordRangeContainer from 'pmt-modules/hibp/container/HibpPasswordRangeContainer'\r\n\r\n//could be dynamically imported if we want to reduce the bundle size\r\nimport MessageBlock from 'app/components/MessageBlock'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    marginTop: theme.spacing(2),\r\n  },\r\n}))\r\n\r\nconst HibpPasswordView = ({\r\n  password,\r\n  pwnedText,\r\n  displayIsSecureMessage = true,\r\n  displayCheckSecure = true,\r\n  minPasswordLength = 8,\r\n}) => {\r\n  const classes = useStyles()\r\n\r\n  // Kiosk doesn't need HIBP here, and thus, not message block either\r\n\r\n  return (\r\n    <HibpPasswordRangeContainer password={password}>\r\n      {({ isPwned, isFetching }) => {\r\n        if (isFetching) {\r\n          if (displayCheckSecure && !process.env.FEATURE_KIOSK) {\r\n            return (\r\n              <MessageBlock\r\n                classes={{ root: classes.root }}\r\n                type={MessageBlock.Type.INFO}\r\n                text={tr('security.hibp.pwned.checking')}\r\n              />\r\n            )\r\n          }\r\n          return null\r\n        }\r\n\r\n        if (isPwned && !process.env.FEATURE_KIOSK) {\r\n          return (\r\n            <MessageBlock\r\n              classes={{ root: classes.root }}\r\n              type={MessageBlock.Type.WARNING}\r\n              text={pwnedText}\r\n            />\r\n          )\r\n        }\r\n\r\n        const isTooSmall = isEmpty(password) || password.length < minPasswordLength\r\n        if (displayIsSecureMessage && !isTooSmall && !process.env.FEATURE_KIOSK) {\r\n          return (\r\n            <MessageBlock\r\n              classes={{ root: classes.root }}\r\n              type={MessageBlock.Type.INFO}\r\n              text={tr('security.hibp.pwned.is_secure')}\r\n            />\r\n          )\r\n        }\r\n        return null\r\n      }}\r\n    </HibpPasswordRangeContainer>\r\n  )\r\n}\r\n\r\nconst securityStyles = theme => ({\r\n  helperTextInfo: {\r\n    color: `${theme.pmt.status.info} !important`,\r\n  },\r\n  helperTextWarning: {\r\n    color: `${theme.pmt.status.warning} !important`,\r\n  },\r\n  notchedOutlineInfo: {\r\n    borderColor: `${theme.pmt.status.info} !important`,\r\n  },\r\n  notchedOutlineWarning: {\r\n    borderColor: `${theme.pmt.status.warning} !important`,\r\n  },\r\n})\r\n\r\nclass PasswordField extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // we don't think we can have > 10 password fields on a same page, so this should work\r\n    this.key = Math.random() * 100 + 1\r\n  }\r\n\r\n  state = {\r\n    showPassword: false,\r\n  }\r\n\r\n  handleClickShowPassword = () => {\r\n    this.setState({\r\n      showPassword: !this.state.showPassword,\r\n    })\r\n  }\r\n\r\n  // Handle field change event, pass name and value to the onChange callback.\r\n  handleChange = event => {\r\n    this.props.onChange(event)\r\n  }\r\n\r\n  //compute which message/color to display in place of the regular helperText,\r\n  getSecurityHelperState = ({ isPwned, isFetching }) => {\r\n    const { classes, helperText, error, value, minPasswordLength = 8 } = this.props\r\n\r\n    if (error && helperText) {\r\n      return { helperText, helperTextClassName: null, outlineClassName: null }\r\n    }\r\n\r\n    if (process.env.FEATURE_KIOSK) {\r\n      return { helperText, helperTextClassName: null, outlineClassName: null }\r\n    }\r\n\r\n    if (isFetching) {\r\n      return {\r\n        helperText: tr('security.hibp.pwned.checking'),\r\n        helperTextClassName: classes.helperTextInfo,\r\n        outlineClassName: null,\r\n      }\r\n    }\r\n\r\n    if (isPwned) {\r\n      return {\r\n        helperText: tr('security.hibp.pwned.should_choose_another'),\r\n        helperTextClassName: classes.helperTextWarning,\r\n        outlineClassName: classes.notchedOutlineWarning,\r\n      }\r\n    }\r\n\r\n    const isTooSmall = isEmpty(value) || value.length < minPasswordLength\r\n    if (!isTooSmall) {\r\n      return {\r\n        helperText: tr('security.hibp.pwned.is_secure'),\r\n        helperTextClassName: classes.helperTextInfo,\r\n        outlineClassName: classes.notchedOutlineInfo,\r\n      }\r\n    }\r\n\r\n    return { helperText, helperTextClassName: null, outlineClassName: null }\r\n  }\r\n\r\n  renderOutlinedTextField = ({ helperText, helperTextClassName, outlineClassName } = {}) => {\r\n    const {\r\n      label,\r\n      value,\r\n      name,\r\n      fullWidth,\r\n      disabled,\r\n      error,\r\n      startAdornment,\r\n      helperText: _rawHelperText,\r\n      classes: _classes,\r\n      checkSecurity: _checkSecurity,\r\n      variant: _variant,\r\n      minPasswordLength: _minPasswordLength,\r\n      ...props\r\n    } = this.props\r\n\r\n    const key = `adornment-password_${this.key}`\r\n\r\n    const visibilityToggle = (\r\n      <InputAdornment position=\"end\">\r\n        <IconButton\r\n          aria-label=\"Toggle password visibility\"\r\n          onClick={this.handleClickShowPassword}\r\n        >\r\n          {this.state.showPassword ? <Visibility /> : <VisibilityOff />}\r\n        </IconButton>\r\n      </InputAdornment>\r\n    )\r\n\r\n    return (\r\n      <TextField\r\n        variant=\"outlined\"\r\n        id={key}\r\n        name={name}\r\n        label={label}\r\n        type={this.state.showPassword ? 'text' : 'password'}\r\n        value={value}\r\n        fullWidth={fullWidth || false}\r\n        disabled={disabled || false}\r\n        error={error}\r\n        helperText={helperText}\r\n        FormHelperTextProps={helperTextClassName ? { className: helperTextClassName } : undefined}\r\n        InputProps={{\r\n          startAdornment,\r\n          endAdornment: visibilityToggle,\r\n          classes: outlineClassName ? { notchedOutline: outlineClassName } : undefined,\r\n        }}\r\n        onChange={this.handleChange}\r\n        {...props}\r\n      />\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      value,\r\n      className,\r\n      helperText,\r\n      classes,\r\n      checkSecurity = false,\r\n      variant,\r\n      startAdornment,\r\n      minPasswordLength,\r\n      ...props\r\n    } = this.props\r\n\r\n    const key = `adornment-password_${this.key}`\r\n\r\n    const visibilityToggle = (\r\n      <InputAdornment position=\"end\">\r\n        <IconButton\r\n          aria-label=\"Toggle password visibility\"\r\n          onClick={this.handleClickShowPassword}\r\n        >\r\n          {this.state.showPassword ? <Visibility /> : <VisibilityOff />}\r\n        </IconButton>\r\n      </InputAdornment>\r\n    )\r\n\r\n    if (variant === 'outlined') {\r\n      if (checkSecurity) {\r\n        return (\r\n          <div className={className}>\r\n            <HibpPasswordRangeContainer password={value}>\r\n              {hibpState => this.renderOutlinedTextField(this.getSecurityHelperState(hibpState))}\r\n            </HibpPasswordRangeContainer>\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return <div className={className}>{this.renderOutlinedTextField({ helperText })}</div>\r\n    }\r\n\r\n    return (\r\n      <div className={className}>\r\n        <InputLabel htmlFor={key}>{this.props.label}</InputLabel>\r\n        <Input\r\n          id={key}\r\n          name={this.props.name}\r\n          type={this.state.showPassword ? 'text' : 'password'}\r\n          value={value}\r\n          fullWidth={this.props.fullWidth || false}\r\n          disabled={this.props.disabled || false}\r\n          onChange={this.handleChange}\r\n          startAdornment={startAdornment}\r\n          endAdornment={visibilityToggle}\r\n          {...props}\r\n        />\r\n        {helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n        {checkSecurity && (\r\n          <HibpPasswordView\r\n            password={value}\r\n            pwnedText={tr('security.hibp.pwned.should_choose_another')}\r\n          />\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(securityStyles)(PasswordField)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\nimport Menu from '@material-ui/core/Menu'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\n\r\nclass MenuView extends React.Component {\r\n  state = {\r\n    anchorEl: null,\r\n    id: generateUUID(),\r\n  }\r\n\r\n  handleClick = event => {\r\n    this.setState({ anchorEl: event.currentTarget })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.setState({ anchorEl: null })\r\n  }\r\n\r\n  render() {\r\n    const { anchorEl } = this.state\r\n    const { children, button } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        {React.cloneElement(button, {\r\n          'aria-owns': anchorEl ? this.state.id : null,\r\n          'aria-haspopup': 'true',\r\n          onClick: this.handleClick,\r\n        })}\r\n        <Menu\r\n          id={this.state.id}\r\n          anchorEl={anchorEl}\r\n          open={Boolean(anchorEl)}\r\n          onClose={this.handleClose}\r\n        >\r\n          {children({\r\n            onClose: this.handleClose,\r\n          })}\r\n        </Menu>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nMenuView.propTypes = {\r\n  button: PropTypes.node.isRequired,\r\n}\r\n\r\nMenuView.MenuItem = MenuItem\r\n\r\nexport default MenuView\r\n","export default \"__VITE_ASSET__B1U7nfPf__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ae'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300732f'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='red'%20d='M0%200h220v480H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__85xt6jpi__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ag'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ag-a'%3e%3cpath%20fill-opacity='.7'%20d='M-79.7%200H603v512H-79.7z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23ag-a)'%20transform='translate(74.7)scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M-79.7%200H603v512H-79.7z'/%3e%3cpath%20fill='%23000001'%20d='M-79.6%200H603v204.8H-79.7z'/%3e%3cpath%20fill='%230072c6'%20d='M21.3%20203.2h480v112h-480z'/%3e%3cpath%20fill='%23ce1126'%20d='M603%20.1V512H261.6L603%200zM-79.7.1V512h341.3L-79.7%200z'/%3e%3cpath%20fill='%23fcd116'%20d='M440.4%20203.3%20364%20184l64.9-49-79.7%2011.4%2041-69.5-70.7%2041L332.3%2037l-47.9%2063.8-19.3-74-21.7%2076.3-47.8-65%2013.7%2083.2L138.5%2078l41%2069.5-77.4-12.5%2063.8%2047.8L86%20203.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-ai'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='ai-b'%20fill='%23f90'%20d='M271%2087c1.5%203.6%206.5%207.6%207.8%209.6-1.7%202-2%201.8-1.8%205.4%203-3.1%203-3.5%205-3%204.2%204.2.8%2013.3-2.8%2015.3-3.4%202.1-2.8%200-8%202.6%202.3%202%205.1-.3%207.4.3%201.2%201.5-.6%204.1.4%206.7%202-.2%201.8-4.3%202.2-5.8%201.5-5.4%2010.4-9.1%2010.8-14.1%201.9-.9%203.7-.3%206%201-1.1-4.6-4.9-4.6-5.9-6-2.4-3.7-4.5-7.8-9.6-9-3.8-.7-3.5.3-6-1.4-1.6-1.2-6.3-3.4-5.5-1.6'/%3e%3c/defs%3e%3cclipPath%20id='ai-a'%3e%3cpath%20d='M0%200v120h373.3v120H320zm320%200H160v280H0v-40z'/%3e%3c/clipPath%3e%3cpath%20fill='%23012169'%20d='M0%200h640v480H0z'/%3e%3cpath%20stroke='%23fff'%20stroke-width='50'%20d='m0%200%20320%20240m0-240L0%20240'/%3e%3cpath%20stroke='%23c8102e'%20stroke-width='30'%20d='m0%200%20320%20240m0-240L0%20240'%20clip-path='url(%23ai-a)'/%3e%3cpath%20stroke='%23fff'%20stroke-width='75'%20d='M160%200v280M0%20120h373.3'/%3e%3cpath%20stroke='%23c8102e'%20stroke-width='50'%20d='M160%200v280M0%20120h373.3'/%3e%3cpath%20fill='%23012169'%20d='M0%20240h320V0h106.7v320H0z'/%3e%3cpath%20fill='%23fff'%20d='M424%20191.8c0%2090.4%209.7%20121.5%2029.3%20142.5a179.4%20179.4%200%200%200%2035%2030%20179.7%20179.7%200%200%200%2035-30c19.5-21%2029.3-52.1%2029.3-142.5-14.2%206.5-22.3%209.7-34%209.5a78.4%2078.4%200%200%201-30.3-9.5%2078.4%2078.4%200%200%201-30.3%209.5c-11.7.2-19.8-3-34-9.5'/%3e%3cg%20transform='matrix(1.96%200%200%202.002%20-40.8%2062.9)'%3e%3cuse%20xlink:href='%23ai-b'/%3e%3ccircle%20cx='281.3'%20cy='91.1'%20r='.8'%20fill='%23fff'%20fill-rule='evenodd'/%3e%3c/g%3e%3cg%20transform='matrix(-.916%20-1.77%201.733%20-.935%20563.4%20829)'%3e%3cuse%20xlink:href='%23ai-b'/%3e%3ccircle%20cx='281.3'%20cy='91.1'%20r='.8'%20fill='%23fff'%20fill-rule='evenodd'/%3e%3c/g%3e%3cg%20transform='matrix(-1.01%201.716%20-1.68%20-1.031%20925.4%20-103.2)'%3e%3cuse%20xlink:href='%23ai-b'/%3e%3ccircle%20cx='281.3'%20cy='91.1'%20r='.8'%20fill='%23fff'%20fill-rule='evenodd'/%3e%3c/g%3e%3cpath%20fill='%239cf'%20d='M440%20315.1a78%2078%200%200%200%2013.3%2019.2%20179.4%20179.4%200%200%200%2035%2030%20180%20180%200%200%200%2035-30%2078%2078%200%200%200%2013.2-19.2z'/%3e%3cpath%20fill='%23fdc301'%20d='M421.2%20188.2c0%2094.2%2010.2%20126.6%2030.6%20148.5a187%20187%200%200%200%2036.5%2031.1%20186.3%20186.3%200%200%200%2036.4-31.1c20.4-21.9%2030.6-54.3%2030.6-148.5-14.8%206.8-23.3%2010.1-35.5%2010-11-.3-22.6-5.7-31.5-10-9%204.3-20.6%209.7-31.5%2010-12.3.1-20.7-3.2-35.6-10m4%205c14%206.5%2022%209.6%2033.5%209.4a76.4%2076.4%200%200%200%2029.6-9.4c8.4%204%2019.3%209.2%2029.6%209.4%2011.5.2%2019.4-3%2033.4-9.4%200%2089-9.6%20119.6-28.8%20140.2a176%20176%200%200%201-34.2%2029.4%20175.6%20175.6%200%200%201-34.3-29.4c-19.2-20.6-28.7-51.3-28.7-140.2z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BdaKJLV4__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-am'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23d90012'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%230033a0'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23f2a800'%20d='M0%20320h640v160H0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ao'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='red'%20d='M0%200h640v243.6H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20236.4h640V480H0z'/%3e%3c/g%3e%3cpath%20fill='%23ffec00'%20fill-rule='evenodd'%20d='M228.7%20148.2c165.2%2043.3%2059%20255.6-71.3%20167.2l-8.8%2013.6c76.7%2054.6%20152.6%2010.6%20174-46.4%2022.2-58.8-7.6-141.5-92.6-150z'/%3e%3cpath%20fill='%23ffec00'%20fill-rule='evenodd'%20d='m170%20330.8%2021.7%2010.1-10.2%2021.8-21.7-10.2zm149-99.5h24v24h-24zm-11.7-38.9%2022.3-8.6%208.7%2022.3-22.3%208.7zm-26-29.1%2017.1-16.9%2016.9%2017-17%2016.9zm-26.2-39.8%2022.4%208.4-8.5%2022.4-22.4-8.4zM316%20270l22.3%208.9-9%2022.2-22.2-8.9zm-69.9%2070%2022-9.3%209.5%2022-22%209.4zm-39.5%202.8h24v24h-24zm41.3-116-20.3-15-20.3%2014.6%208-23-20.3-15h24.5l8.5-22.6%207.8%2022.7%2024.7-.3-19.6%2015.3z'/%3e%3cpath%20fill='%23fe0'%20fill-rule='evenodd'%20d='M336%20346.4c-1.2.4-6.2%2012.4-9.7%2018.2l3.7%201c13.6%204.8%2020.4%209.2%2026.2%2017.5a7.9%207.9%200%200%200%2010.2.7s2.8-1%206.4-5c3-4.5%202.2-8-1.4-11.1-11-8-22.9-14-35.4-21.3'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M365.3%20372.8a4.3%204.3%200%201%201-8.7%200%204.3%204.3%200%200%201%208.6%200zm-21.4-13.6a4.3%204.3%200%201%201-8.7%200%204.3%204.3%200%200%201%208.7%200m10.9%207a4.3%204.3%200%201%201-8.7%200%204.3%204.3%200%200%201%208.7%200'/%3e%3cpath%20fill='%23fe0'%20fill-rule='evenodd'%20d='M324.5%20363.7c-42.6-24.3-87.3-50.5-130-74.8-18.7-11.7-19.6-33.4-7-49.9%201.2-2.3%202.8-1.8%203.4-.5%201.5%208%206%2016.3%2011.4%2021.5A5288%205288%200%200%201%20334%20345.6c-3.4%205.8-6%2012.3-9.5%2018z'/%3e%3cpath%20fill='%23ffec00'%20fill-rule='evenodd'%20d='m297.2%20305.5%2017.8%2016-16%2017.8-17.8-16z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='3'%20d='m331.5%20348.8-125-75.5m109.6%2058.1L274%20304.1m18.2%2042.7L249.3%20322'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-aq'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%233a7dce'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M157.7%20230.8c-3.5-7.8-3.5-7.8-3.5-15.6-1.8%200-2%20.3-3%200-1.1-.3-1.5%207.2-4.8%205.8-.5-.8%202.4-6.2-.7-8.5-1-.7.2-5.2-.2-7.2%200%200-4%202.4-7-5.8-1.5-2.2-3.5%202-3.5%202s.9%202.4-.7%203c-2.2-1.8-3.9-.8-6.7-3.4-2.8-2.5.6-5.4-4.8-7.5%203.5-9.8%203.5-7.9%2012.2-11.8-5.2-4-5.2-4-8.7-9.8-5.2-2-7-4-12.2-7.8-7-9.9-10.5-29.5-10.5-43.2%204.4-4.6%2010.5%2015.7%2019.2%2021.6l12.2%205.9c7%203.9%208.7%207.8%2014%2011.7l15.6%206c7%205.8%2010.5%2013.6%2015.7%2015.6%205.7%200%206.8-3.7%208.6-3.9%2010.3-.6%2015.5-2%2017.5-5.5%202.1-2.8%207%201.6%2021-4.3l-1.7-7.9s3.7-3.4%208.7-2c-.1-3.5-.5-13%204.5-17.4-3-3.5%201.8-9%202-10.7-1.4-8.6%201.4-8.7%202-11.3.6-2.5-2.4-1.7-1.6-5.2.9-3.5%206-4.3%206.6-7.2.7-2.9-1.1-14.3-1.3-16.8%209.4-2.8%2012.4-11.4%2015.7-7.8C264%2070%20265.8%2066%20276.3%2066c1.4-3.6-3.9-6.7-1.8-7.9%203.5-.5%206.1-.2%2010.2%205.7%201.3%202%201.6-2.7%202.9-3.2%201.3-.5%204.4-.5%204.9-2.8.5-2.4%201.2-5.6%203-9.5%201.4-3.2%202.5%201.3%203.8%207.5%207.4.3%2024%202.1%2031%204.3%205.2%201.5%208.7-1.5%2013.7-2.2%203.7%204.2%207.2%201%209.2%2010%202.7%204.8%207.3.4%208.3%201.8%205.8%2018.1%2025.8%205.9%2027.4%206.2%202.5%200%205.6%208%207.7%207.9%203.2-.6%202.3-3.1%205.2-2.1-.8%206.8%205.6%2014.6%205.6%2019.7%200%200%201.5.9%203-.6%201.4-1.6%202.7-5.4%204-5.3%203%20.5%2022%206%2025.8%207.9%201.7%203.5%203.3%205.3%206.8%204.7%202.8%202.1.8%205%202.4%205.1%203.5-2%204.7-4%208.2-2.1%203.5%202%207%205.9%208.7%209.8%200%202-1.8%209.8%200%2021.6.9%203.9%209.7%2032.3%209.7%2035.2%200%204-2.7%206-4.5%209.9%207%205.9%200%2015.7-3.5%2021.6%2026.2%205.9%2014%2017.6%2034.9%2011.7-5.2%2013.8-3.4%2012.7%201.8%2026.4-10.4%207.8-.2%2010.2-7.1%2020-.5.7%204.1%208.6%2010.5%208.6-1.7%2015.6-7%209.8-5.2%2033.3-13.7-.3-8.2%2017.6-17.4%2015.7.5%2011.2%205.2%2012.2%203.4%2023.5-7%202-7%202-10.4%207.9l-5.2-2c-1.8%209.8-5.3%2011.8%200%2021.6%200%200-6.8.2-8.8%200-.1%203.4%203%204.3%203.5%207.8-.2%201.4-9.9%207.6-17.4%207.9-2%204.8%205.2%2010%204.8%2012.4-8.2%201.8-11.8%2013-11.8%2013s4.2%202%203.5%204c-2.2-1.8-3.5-2-7-2-1.7.5-6%200-10%207.7-4.5%201.6-6.6%201-10%206-1.5-4.7-3.7.1-6.3%202-2.7%201.8-6.2%206.5-6.7%206.3.1-1.4%201.6-6.3%201.6-6.3L399%20437c-.7.1-.5-5.7-2.2-5.5-1.7.2-6.4%207.3-8%207.5-1.6.2-2.1-2.2-3.5-2-1.4.2-4%207.5-5%207.7-1%20.1-5-4.5-8.3-3.8-17.1%206.8-19.9-13.4-22.5-2-3.6-2.2-3-1-6.7.1-2.3.7-2.5-3.4-4.6-3.4-4.1.2-4%204.6-6.2%203.3-1.8-9.2-13-7.6-14-11.5-1-4%204.8-4%206.6-6.8%201.4-4-1.5-5.6%204.3-9.4%207.5-5.7%206.8-19.8%204.9-25.3%200%200-5.9-17.7-7-17.7-3.5-1-3.5%206.5-8.6%208.6-10.5%204-29-9.9-32.2-9.9-2.9%200-16.5%203.6-16-4-2%207.4-9.5%201.7-10%201.7-7%200-4.3%206.1-9%205.9-2.1-.8-23.6-2.3-23.6-2.3v4l-26.1-11.8c-10.5-4-5.3-13.7-22.7-7.8v-11.8h-8.7c3.5-23.6%200-11.8-1.8-33.4l-7%202c-7-10.6%209.8-8.6-5.2-15.7%200%200%20.3-11.7-3.5-7.8-.7.5%201.8%205.8%201.8%205.8-14-2-17.4-5.8-17.4-21.5%200%200%2011.4%201.8%2010.4%200-1.6-3-3.7-22-3.4-23.4-.1-2.6%2010.7-9%208.6-15.2%201.4-.6%205.3-.7%205.3-.7'/%3e%3cpath%20fill='none'%20stroke='%23fff'%20stroke-linejoin='round'%20stroke-width='2.5'%20d='M595.5%20297.6c-.6%201.3-.5%202.6.1%203.6%201.1-1.7.2-2.4%200-3.6zm-476-149.4s-3-.4-2.4%202.3c1-2%202.3-2.2%202.4-2.3zm-.3-6.4c-1.7%200-3.8-.2-3%202.5%201-2.1%203-2.4%203-2.5zm12.7%2036.3s2.6-.2%202%202.5c-1-2-2-2.4-2-2.5z'%20transform='scale(.86021%20.96774)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-ar'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2374acdf'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cg%20id='c'%20transform='translate(-64)%20scale(.96)'%3e%3cpath%20id='a'%20fill='%23f6b40e'%20stroke='%2385340a'%20stroke-width='1.1'%20d='m396.8%20251.3%2028.5%2062s.5%201.2%201.3.9c.8-.4.3-1.5.3-1.5l-23.7-64m-.7%2024.1c-.4%209.4%205.4%2014.6%204.7%2023-.8%208.5%203.8%2013.2%205%2016.5%201%203.3-1.3%205.2-.3%205.7s3-2.1%202.4-6.8c-.7-4.6-4.2-6-3.4-16.3.8-10.3-4.2-12.7-3-22'/%3e%3cuse%20xlink:href='%23a'%20width='100%25'%20height='100%25'%20transform='rotate(22.5%20400%20250)'/%3e%3cuse%20xlink:href='%23a'%20width='100%25'%20height='100%25'%20transform='rotate(45%20400%20250)'/%3e%3cuse%20xlink:href='%23a'%20width='100%25'%20height='100%25'%20transform='rotate(67.5%20400%20250)'/%3e%3cpath%20id='b'%20fill='%2385340a'%20d='M404.3%20274.4c.5%209%205.6%2013%204.6%2021.3%202.2-6.5-3.1-11.6-2.8-21.2m-7.7-23.8%2019.5%2042.6-16.3-43.9'/%3e%3cuse%20xlink:href='%23b'%20width='100%25'%20height='100%25'%20transform='rotate(22.5%20400%20250)'/%3e%3cuse%20xlink:href='%23b'%20width='100%25'%20height='100%25'%20transform='rotate(45%20400%20250)'/%3e%3cuse%20xlink:href='%23b'%20width='100%25'%20height='100%25'%20transform='rotate(67.5%20400%20250)'/%3e%3c/g%3e%3cuse%20xlink:href='%23c'%20width='100%25'%20height='100%25'%20transform='rotate(90%20320%20240)'/%3e%3cuse%20xlink:href='%23c'%20width='100%25'%20height='100%25'%20transform='rotate(180%20320%20240)'/%3e%3cuse%20xlink:href='%23c'%20width='100%25'%20height='100%25'%20transform='rotate(-90%20320%20240)'/%3e%3ccircle%20cx='320'%20cy='240'%20r='26.7'%20fill='%23f6b40e'%20stroke='%2385340a'%20stroke-width='1.4'/%3e%3cpath%20id='h'%20fill='%23843511'%20d='M329.1%20234.3c-1.8%200-3.6.8-4.6%202.4%202%201.9%206.6%202%209.7-.2a7%207%200%200%200-5.1-2.2zm0%20.4c1.7%200%203.4.8%203.6%201.6-2%202.3-5.3%202-7.4.4a4.3%204.3%200%200%201%203.8-2z'/%3e%3cuse%20xlink:href='%23d'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640.2%200)'/%3e%3cuse%20xlink:href='%23e'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640.2%200)'/%3e%3cuse%20xlink:href='%23f'%20width='100%25'%20height='100%25'%20transform='translate(18.1)'/%3e%3cuse%20xlink:href='%23g'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640.2%200)'/%3e%3cpath%20fill='%2385340a'%20d='M316%20243.7a1.9%201.9%200%201%200%201.8%202.9%204%204%200%200%200%202.2.6h.2a3.9%203.9%200%200%200%202.3-.6%201.9%201.9%200%201%200%201.8-3c.5.3.8.7.8%201.3%200%20.6-.5%201.2-1.2%201.2a1.2%201.2%200%200%201-1.2-1.2%203%203%200%200%201-2.6%201.7%203%203%200%200%201-2.5-1.7%201.2%201.2%200%200%201-1.3%201.2c-.6%200-1.2-.6-1.2-1.2s.3-1%20.8-1.2zm2%205.5c-2.1%200-3%201.8-4.8%203%201-.4%201.9-1.2%203.3-2s2.7.2%203.5.2c.8%200%202-1%203.5-.2%201.4.8%202.3%201.6%203.3%202-1.9-1.2-2.7-3-4.8-3a5.5%205.5%200%200%200-2%20.6%205.5%205.5%200%200%200-2-.7z'/%3e%3cpath%20fill='%2385340a'%20d='M317.2%20251.6c-.8%200-1.8.2-3.4.6%203.7-.8%204.5.5%206.2.5%201.6%200%202.4-1.3%206.1-.5-4-1.2-4.9-.4-6.1-.4-.8%200-1.4-.3-2.8-.2z'/%3e%3cpath%20fill='%2385340a'%20d='M314%20252.2h-.8c4.3.5%202.3%203%206.8%203s2.5-2.5%206.8-3c-4.5-.4-3.1%202.3-6.8%202.3-3.5%200-2.4-2.3-6-2.3zm9.7%206.7a3.7%203.7%200%200%200-7.4%200%203.8%203.8%200%200%201%207.4%200z'/%3e%3cpath%20id='e'%20fill='%2385340a'%20d='M303.4%20234.3c4.7-4.1%2010.7-4.8%2014-1.7a8%208%200%200%201%201.5%203.5c.4%202.3-.3%204.8-2.1%207.4l.8.4a14.6%2014.6%200%200%200%201.6-9.4%2013.3%2013.3%200%200%200-.6-2.3c-4.5-3.7-10.7-4-15.2%202z'/%3e%3cpath%20id='d'%20fill='%2385340a'%20d='M310.8%20233c2.7%200%203.3.7%204.5%201.7%201.2%201%201.9.8%202%201%20.3.2%200%20.8-.3.6-.5-.2-1.3-.6-2.5-1.6s-2.5-1-3.7-1c-3.7%200-5.7%203-6.2%202.8-.3-.2%202.1-3.5%206.2-3.5z'/%3e%3cuse%20xlink:href='%23h'%20width='100%25'%20height='100%25'%20transform='translate(-18.4)'/%3e%3ccircle%20id='f'%20cx='310.9'%20cy='236.3'%20r='1.9'%20fill='%2385340a'/%3e%3cpath%20id='g'%20fill='%2385340a'%20d='M305.9%20237.5c3.5%202.7%207%202.5%209%201.3%202-1.3%202-1.7%201.6-1.7-.4%200-.8.4-2.4%201.3-1.7.8-4.1.8-8.2-.9z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__4aApqlNk__\"","export default \"__VITE_ASSET__D2TcaFgd__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-at'%3e%3cg%20fillRule='evenodd'%3e%3cpath%20fill='%23fff'%20d='M640%20480H0V0h640z'/%3e%3cpath%20fill='%23df0000'%20d='M640%20480H0V319.997h640zm0-319.875H0V.122h640z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-au'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300008B'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='red'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='red'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3cpath%20fill='%23fff'%20d='m527%20396.7-20.5%202.6%202.2%2020.5-14.8-14.4-14.7%2014.5%202-20.5-20.5-2.4%2017.3-11.2-10.9-17.5%2019.6%206.5%206.9-19.5%207.1%2019.4%2019.5-6.7-10.7%2017.6zm-3.7-117.2%202.7-13-9.8-9%2013.2-1.5%205.5-12.1%205.5%2012.1%2013.2%201.5-9.8%209%202.7%2013-11.6-6.6zm-104.1-60-20.3%202.2%201.8%2020.3-14.4-14.5-14.8%2014.1%202.4-20.3-20.2-2.7%2017.3-10.8-10.5-17.5%2019.3%206.8L387%20178l6.7%2019.3%2019.4-6.3-10.9%2017.3%2017.1%2011.2ZM623%20186.7l-20.9%202.7%202.3%2020.9-15.1-14.7-15%2014.8%202.1-21-20.9-2.4%2017.7-11.5-11.1-17.9%2020%206.7%207-19.8%207.2%2019.8%2019.9-6.9-11%2018zm-96.1-83.5-20.7%202.3%201.9%2020.8-14.7-14.8-15.1%2014.4%202.4-20.7-20.7-2.8%2017.7-11L467%2073.5l19.7%206.9%207.3-19.5%206.8%2019.7%2019.8-6.5-11.1%2017.6zM234%20385.7l-45.8%205.4%204.6%2045.9-32.8-32.4-33%2032.2%204.9-45.9-45.8-5.8%2038.9-24.8-24-39.4%2043.6%2015%2015.8-43.4%2015.5%2043.5%2043.7-14.7-24.3%2039.2%2038.8%2025.1Z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DA2RSJsI__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ax'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ax-a'%3e%3cpath%20fill-opacity='.7'%20d='M106.3%200h1133.3v850H106.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23ax-a)'%20transform='matrix(.56472%200%200%20.56482%20-60%20-.1)'%3e%3cpath%20fill='%230053a5'%20d='M0%200h1300v850H0z'/%3e%3cg%20fill='%23ffce00'%3e%3cpath%20d='M400%200h250v850H400z'/%3e%3cpath%20d='M0%20300h1300v250H0z'/%3e%3c/g%3e%3cg%20fill='%23d21034'%3e%3cpath%20d='M475%200h100v850H475z'/%3e%3cpath%20d='M0%20375h1300v100H0z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-az'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%233f9c35'%20d='M.1%200h640v480H.1z'/%3e%3cpath%20fill='%23ed2939'%20d='M.1%200h640v320H.1z'/%3e%3cpath%20fill='%2300b9e4'%20d='M.1%200h640v160H.1z'/%3e%3ccircle%20cx='304'%20cy='240'%20r='72'%20fill='%23fff'/%3e%3ccircle%20cx='320'%20cy='240'%20r='60'%20fill='%23ed2939'/%3e%3cpath%20fill='%23fff'%20d='m384%20200%207.7%2021.5%2020.6-9.8-9.8%2020.7L424%20240l-21.5%207.7%209.8%2020.6-20.6-9.8L384%20280l-7.7-21.5-20.6%209.8%209.8-20.6L344%20240l21.5-7.7-9.8-20.6%2020.6%209.8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ba'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-85.333%200h682.67v512h-682.67z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23a)'%20transform='translate(80)%20scale(.9375)'%20fillRule='evenodd'%3e%3cpath%20fill='%23009'%20d='M-85.333%200h682.67v512h-682.67V0z'/%3e%3cpath%20fill='%23FC0'%20d='M56.489%200l510.978%20512.267v-512L56.489%200z'/%3e%3cpath%20fill='%23FFF'%20d='M439.883%20481.532l-27.865-20.359-28.639%2020.261%2010.828-33.243-28.18-20.528%2034.914.071%2010.855-33.192%2010.725%2033.233%2034.923.099-27.942%2020.657%2010.381%2033.001zm81.294%2010.343l-34.923-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.261%2027.865%2020.359-10.38-33%2027.941-20.658zM365.636%20384.666l27.942-20.657-34.923-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.261%2027.865%2020.359-10.381-33.001zm-64.355-64.445l27.942-20.657-34.923-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.261%2027.865%2020.359-10.381-33.001zm-63.645-63.644l27.941-20.658-34.922-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.263%2027.865%2020.36-10.381-32.999zm-64.445-64.267l27.941-20.658-34.922-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.262%2027.865%2020.36-10.381-33zm-63.644-63.912l27.941-20.658-34.922-.099L91.84%2074.408%2080.985%20107.6l-34.914-.071%2028.18%2020.528L63.423%20161.3l28.639-20.262%2027.865%2020.36-10.38-33zm-64-64L73.488%2043.74l-34.922-.099L27.84%2010.408%2016.985%2043.6l-34.914-.071%2028.18%2020.528L-.576%2097.3l28.639-20.262%2027.865%2020.36-10.381-33zm-64-64L9.488-20.259l-34.922-.099-10.726-33.234L-47.015-20.4l-34.914-.071L-53.749.057-64.576%2033.3l28.639-20.263%2027.865%2020.36L-18.453.398z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-bb'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300267f'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23ffc726'%20d='M213.3%200h213.4v480H213.3z'/%3e%3cpath%20id='bb-a'%20fill='%23000001'%20d='M319.8%20135.5c-7%2019-14%2038.6-29.2%2053.7%204.7-1.6%2013-3%2018.2-2.8v79.5l-22.4%203.3c-.8%200-1-1.3-1-3-2.2-24.7-8-45.5-14.8-67-.5-2.9-9-14-2.4-12%20.8%200%209.5%203.6%208.2%201.9a85%2085%200%200%200-46.4-24c-1.5-.3-2.4.5-1%202.2%2022.4%2034.6%2041.3%2075.5%2041.1%20124%208.8%200%2030-5.2%2038.7-5.2v56.1H320l2.5-156.7z'/%3e%3cuse%20xlink:href='%23bb-a'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20639.5%200)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bd'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23006a4e'%20d='M0%200h640v480H0z'/%3e%3ccircle%20cx='280'%20cy='240'%20r='160'%20fill='%23f42a41'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-be'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20d='M0%200h213.335v479.997H0z'/%3e%3cpath%20fill='%23ffd90c'%20d='M213.335%200H426.67v479.997H213.335z'/%3e%3cpath%20fill='%23f31830'%20d='M426.67%200h213.335v479.997H426.67z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bf'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23de0000'%20d='M640%20479.6H.4V0H640z'/%3e%3cpath%20fill='%2335a100'%20d='M639.6%20480H0V240.2h639.6z'/%3e%3cpath%20fill='%23fff300'%20d='m254.6%20276.2-106-72.4h131L320%2086.6%20360.4%20204l131-.1-106%2072.4%2040.5%20117.3-106-72.6L214%20393.4'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-bg'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23d62612'%20d='M0%20319.997h640V480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v160.003H0z'/%3e%3cpath%20fill='%2300966e'%20d='M0%20160.003h640v160.003H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bh'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0'/%3e%3cpath%20fill='%23ce1126'%20d='M640%200H96l110.7%2048L96%2096l110.7%2048L96%20192l110.7%2048L96%20288l110.7%2048L96%20384l110.7%2048L96%20480h544'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bi'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='bi-a'%3e%3cpath%20fill-opacity='.7'%20d='M-90.5%200H592v512H-90.5z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23bi-a)'%20transform='translate(84.9)scale(.9375)'%3e%3cpath%20fill='%2318b637'%20d='m-178%200%20428.8%20256L-178%20512zm857.6%200L250.8%20256l428.8%20256z'/%3e%3cpath%20fill='%23cf0921'%20d='m-178%200%20428.8%20256L679.6%200zm0%20512%20428.8-256%20428.8%20256z'/%3e%3cpath%20fill='%23fff'%20d='M679.6%200h-79.9L-178%20464.3V512h79.9L679.6%2047.7z'/%3e%3cpath%20fill='%23fff'%20d='M398.9%20256a148%20148%200%201%201-296.1%200%20148%20148%200%200%201%20296%200z'/%3e%3cpath%20fill='%23fff'%20d='M-178%200v47.7L599.7%20512h79.9v-47.7L-98.1%200z'/%3e%3cpath%20fill='%23cf0921'%20stroke='%2318b637'%20stroke-width='3.9'%20d='m280%20200.2-19.3.3-10%2016.4-9.9-16.4-19.2-.4%209.3-16.9-9.2-16.8%2019.2-.4%2010-16.4%209.9%2016.5%2019.2.4-9.3%2016.8zm-64.6%20111.6-19.2.3-10%2016.4-9.9-16.4-19.2-.4%209.3-16.9-9.2-16.8%2019.2-.4%2010-16.4%209.9%2016.5%2019.2.4-9.3%2016.8zm130.6%200-19.2.3-10%2016.4-10-16.4-19.1-.4%209.3-16.9-9.3-16.8%2019.2-.4%2010-16.4%2010%2016.5%2019.2.4-9.4%2016.8z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bj'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='bj-a'%3e%3cpath%20fill='gray'%20d='M67.6-154h666v666h-666z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23bj-a)'%20transform='matrix(.961%200%200%20.7207%20-65%20111)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23319400'%20d='M0-154h333v666H0z'/%3e%3cpath%20fill='%23ffd600'%20d='M333-154h666v333H333z'/%3e%3cpath%20fill='%23de2110'%20d='M333%20179h666v333H333z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bl'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DHdZBu1Q__\"","export default \"__VITE_ASSET__Byfc_H8D__\"","export default \"__VITE_ASSET__W58mEDTG__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bq'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2321468b'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23ae1c28'%20d='M0%200h640v160H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__gHmFQC5u__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bs'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='bs-a'%3e%3cpath%20fill-opacity='.7'%20d='M-12%200h640v480H-12z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23bs-a)'%20transform='translate(12)'%3e%3cpath%20fill='%23fff'%20d='M968.5%20480h-979V1.8h979z'/%3e%3cpath%20fill='%23ffe900'%20d='M968.5%20344.5h-979V143.3h979z'/%3e%3cpath%20fill='%2308ced6'%20d='M968.5%20480h-979V320.6h979zm0-318.7h-979V2h979z'/%3e%3cpath%20fill='%23000001'%20d='M-11%200c2.3%200%20391.8%20236.8%20391.8%20236.8L-12%20479.2z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__gF2tNH4c__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bv'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='bv-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23bv-a)'%3e%3cpath%20fill='%23fff'%20d='M-28%200h699.7v512H-28z'/%3e%3cpath%20fill='%23d72828'%20d='M-53-77.8h218.7v276.2H-53zM289.4-.6h381v199h-381zM-27.6%20320h190.4v190.3H-27.6zm319.6%202.1h378.3v188.2H292z'/%3e%3cpath%20fill='%23003897'%20d='M196.7-25.4H261v535.7h-64.5z'/%3e%3cpath%20fill='%23003897'%20d='M-27.6%20224.8h698v63.5h-698z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bw'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%2300cbff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20186h640v108H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BcwpdoD3__\"","export default \"__VITE_ASSET__DppOD_Bw__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ca'%3e%3cg%20transform='translate(74.118)%20scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M81.137%200h362.276v512H81.137z'/%3e%3cpath%20fill='%23bf0a30'%20d='M-100%200H81.138v512H-100zm543.413%200H624.55v512H443.414zM135.31%20247.41l-14.067%204.808%2065.456%2057.446c4.95%2014.764-1.72%2019.116-5.97%2026.86l71.06-9.02-1.85%2071.512%2014.718-.423-3.21-70.918%2071.13%208.432c-4.402-9.297-8.32-14.233-4.247-29.098l65.414-54.426-11.447-4.144c-9.36-7.222%204.044-34.784%206.066-52.178%200%200-38.195%2013.135-40.698%206.262l-9.727-18.685-34.747%2038.17c-3.796.91-5.413-.6-6.304-3.808l16.053-79.766-25.42%2014.297c-2.128.91-4.256.125-5.658-2.355l-24.45-49.06-25.21%2050.95c-1.9%201.826-3.803%202.037-5.382.796l-24.204-13.578%2014.53%2079.143c-1.156%203.14-3.924%204.025-7.18%202.324l-33.216-37.737c-4.345%206.962-7.29%2018.336-13.033%2020.885-5.744%202.387-24.98-4.823-37.873-7.637%204.404%2015.895%2018.176%2042.302%209.46%2050.957z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cc'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='cc-a'%20d='m0-360%2069.4%20215.8%20212-80.3L156-35.6%20351%2080.1%20125%2099.8l31.1%20224.6L0%20160l-156.2%20164.3%2031.1-224.5L-351%2080l195-115.7-125.5-188.9%20212%2080.3z'/%3e%3cpath%20id='cc-b'%20d='M0-210%2054.9-75.5l144.8%2010.6-111%2093.8%2034.7%20141L0%2093.3-123.4%20170l34.6-141-111-93.8%20145-10.6z'/%3e%3c/defs%3e%3cpath%20fill='green'%20d='M0%200h640v480H0z'/%3e%3ccircle%20cx='320'%20cy='240'%20r='66.7'%20fill='%23ffe000'/%3e%3ccircle%20cx='340.8'%20cy='240'%20r='54.9'%20fill='green'/%3e%3ccircle%20cx='109.8'%20cy='173.3'%20r='69.8'%20fill='%23ffe000'/%3e%3cpath%20fill='%23802000'%20stroke='%237b3100'%20stroke-width='1.5'%20d='M105%20226h17.5s.7-1.6-.2-2.4c-1-.8-4.7-1-3.7-3.8%202-5.8%202.4-4%203.7-17.8a739%20739%200%200%200%202-35.5h-2.6s.5%206.7-1%2015.5c-1.4%208.8-1.9%209.5-3.5%2016.3a63.5%2063.5%200%200%201-3.3%2011.2c-1.4%204-1.6%204.1-3.8%207.8-2.3%203.6-1.5%202.2-2.7%204.4-.7%201.1-1.4.8-1.9%201.6-.4.8-.5%202.7-.5%202.7z'/%3e%3cpath%20fill='green'%20d='M118.3%20122.5a23%2023%200%200%201-1.2%209.2%2026.5%2026.5%200%200%200-2.3%209.8c-1.8.6-3.7-3.9-5.5-1.2%201.3%203.7%204.4%206.6%206.4%209.9.4%201%203.4%203.7%201.6%204.3-4.3-1.5-5.4-7-8-10.3a19%2019%200%200%200-15.5-10c-2.5.1-10.4-.5-8.4%203.7%203%202%206.8%203.4%209.8%205.7%202.3.2%206.3%204%206.1%205.4-4-1.6-5.8-3.5-10-5.2-5.8-2.2-13.7-.9-17%204.8-.5%201.5-1.4%205.8.5%206.3%202.2-3.4%205.3-7.3%209.9-6.2%203.6.3-4%206.7-1.1%205.4%201-.4%203-1.8%204.6-2%201.5%200%202.3%201%203.4%201.2%202.3.3%203%201.2%202.7%201.8-.2.6-1%200-3.3.8-1.1.4-1.7%201.4-3%201.9-1.4.4-4.2.5-5.2%200-3.7-1.5-9.7-1.3-10.8%203.3%200%202-1.8-.2-2.6.7-.7%202.2-.8%204.4-4%204.2-2%202-4%204.2-6.6%205.7%201.5%203.4%207.3-3.4%207-.5-2.5%203.5%201.4%204.2%203%201.5%202.9-3%206.5-6.7%2010.7-3.6%202%201.9%203.2-1%204.7-1%201%202.5%202.1.2%203.2-.5%201.7-.2%201.2%202.2%203.2.7%204.1-2.7%209.1-.4%2013.1-3%204.3-2%20.6%201.5-.5%202.9-1.9%203.6-.3%208.4-4.3%2010.6-1.7%204.3%201.9%2010-1.7%2013.2-.5%202%204.6%201.8%206%202.6%202.6%200%200-5.8%202.5-6.6%203.4%202%203.2-3.8%202.5-5.6.4-4%20.6-8.6%202.6-12.3%202.2-4.5%204.2%201.9%201.8%203.7-1.4%204.1-3.4%209.4-.3%2013.3%201%20.2%201.7%202.4%202.8%203%201.2.7%202.8-.1%203-2.1%201.6-6%20.8-12.4%203-18.3%201.5-1.8%203.6-.3%204.5%201.4%203%203.5%205.1%207.8%208.7%2010.7a15%2015%200%200%201%207.8%207.3c0%202.6%207.4%203%205.2%200-2.1-2.7-.7-5.6%201.4-7.5%201.2.3.9-1.8%200-1-1.5-.3-1.6-3%20.4-1.7%203.5%201.1-.2-2.5-1.5-2.6-2.9-1.8-6.2-3.8-7.6-7%203.8%200%207.7%202.1%2011.5.9%203.1-1.6%206.2%200%207.3%202.8%202.4-.4%201.4-2.8%200-3.6%201.7-.7%203-2.2.8-3.5-1-1.4%201.5-4-1.7-3.8.1-2.5-.8-4.7-3.5-5.6-2.7-2.2-10.6%203.4-10.3-1.7-.8-2.8%203.2-.4%204.3-1.8%201.1-3-5.5-2.6-3.3-5%201.4-.8%208.1-2.1%202.9-3.1a8.3%208.3%200%200%201-7-1.1c-1.9%203.1-7.2-1.8-6.3%203.8-.7%202.1-5.5%207.6-6.8%203.4%201-3.3%206.8-4.3%205-8.8-.3-2.7-2.6.5-3.6.3-.6-1.7%201.6-3.8%203.2-4.2%203%202.4%203-3%206-2.5%202.1-.5-.7-1.4-1.3-1.8.6-1.5%203.9-2.3.7-3.7-2.9-2-5%202.1-7.3%202.3-2.2-2.5%202-3.7%203.2-5%20.1-1-2.4-.3-1.7-1.2.7-1.1%205.2-1.2%203-3a14.7%2014.7%200%200%200-10.2.6c-2%20.6-2.5%205-4.2%204.8-.7-2%20.3-5.8-2.4-6.3m15%2042.3c2.4-.4%200%203.7-1%203.6%200-1.4-3.6-1.3-1.3-2.6a7.3%207.3%200%200%201%202.3-1'/%3e%3cg%20fill='%23ffe000'%20transform='translate(0%2080)scale(.0635)'%3e%3cuse%20xlink:href='%23cc-a'%20width='100%25'%20height='100%25'%20x='7560'%20y='4200'/%3e%3cuse%20xlink:href='%23cc-a'%20width='100%25'%20height='100%25'%20x='6300'%20y='2205'/%3e%3cuse%20xlink:href='%23cc-a'%20width='100%25'%20height='100%25'%20x='7560'%20y='840'/%3e%3cuse%20xlink:href='%23cc-a'%20width='100%25'%20height='100%25'%20x='8680'%20y='1869'/%3e%3cuse%20xlink:href='%23cc-b'%20width='100%25'%20height='100%25'%20x='8064'%20y='2730'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cd'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23007fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23f7d618'%20d='M28.8%2096H96l20.8-67.2L137.6%2096h67.2l-54.4%2041.6%2020.8%2067.2-54.4-41.6-54.4%2041.6%2020.8-67.2zM600%200%200%20360v120h40l600-360V0z'/%3e%3cpath%20fill='%23ce1021'%20d='M640%200%200%20384v96L640%2096z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cefta'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23039'%20d='M0%200h640v480H0z'/%3e%3ccircle%20cx='320'%20cy='249.8'%20r='30.4'%20fill='none'%20stroke='%23fc0'%20stroke-width='27.5'/%3e%3ccircle%20cx='320'%20cy='249.8'%20r='88.3'%20fill='none'%20stroke='%23fc0'%20stroke-width='27.5'/%3e%3cpath%20fill='%23039'%20d='m404.7%20165.1%2084.7%2084.7-84.7%2084.7-84.7-84.7z'/%3e%3cpath%20fill='%23fc0'%20d='M175.7%20236.1h59.2v27.5h-59.2zm259.1%200h88.3v27.5h-88.3zM363%20187.4l38.8-38.8%2019.4%2019.5-38.7%2038.7zM306.3%2048.6h27.5v107.1h-27.5z'/%3e%3ccircle%20cx='225.1'%20cy='159.6'%20r='13.7'%20fill='%23fc0'/%3e%3ccircle%20cx='144.3'%20cy='249.8'%20r='13.7'%20fill='%23fc0'/%3e%3ccircle%20cx='320'%20cy='381.4'%20r='13.7'%20fill='%23fc0'/%3e%3ccircle%20cx='320'%20cy='425.5'%20r='13.7'%20fill='%23fc0'/%3e%3ccircle%20cx='408.3'%20cy='249.8'%20r='13.7'%20fill='%23fc0'/%3e%3cpath%20fill='%23fc0'%20d='m208.3%20341.5%2019.5-19.4%2019.4%2019.4-19.4%2019.5zm204.7%2021%2019.5-19.5%2019.5%2019.5-19.5%2019.4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cf'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cf-a'%3e%3cpath%20fill-opacity='.7'%20d='M-12.4%2032h640v480h-640z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23cf-a)'%20transform='translate(12.4%20-32)'%3e%3cpath%20fill='%2300f'%20d='M-52%2032h719.3v119H-52z'/%3e%3cpath%20fill='%23ff0'%20d='M-52%20391.6h719.3V512H-52z'/%3e%3cpath%20fill='%23009a00'%20d='M-52%20271.3h719.3v120.3H-52z'/%3e%3cpath%20fill='%23fff'%20d='M-52%20151h719.3v120.3H-52z'/%3e%3cpath%20fill='red'%20d='M247.7%2032.5h119.9V512H247.7z'/%3e%3cpath%20fill='%23ff0'%20d='m99.3%20137.7-31.5-21.8-31.3%2022L47.4%20101%2016.9%2078l38.2-1%2012.5-36.3L80.3%2077l38.1.7L88.2%20101'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cg-a'%3e%3cpath%20fill-opacity='.7'%20d='M-79.5%2032h640v480h-640z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23cg-a)'%20transform='translate(79.5%20-32)'%3e%3cpath%20fill='%23ff0'%20d='M-119.5%2032h720v480h-720z'/%3e%3cpath%20fill='%2300ca00'%20d='M-119.5%2032v480l480-480z'/%3e%3cpath%20fill='red'%20d='M120.5%20512h480V32z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ch'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23d52b1e'%20d='M0%200h640v480H0z'/%3e%3cg%20fill='%23fff'%3e%3cpath%20d='M170%20194.997h299.996v89.997H170z'/%3e%3cpath%20d='M275%2089.997h89.996v299.996H275z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ci'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%2300cd00'%20d='M426.8%200H640v480H426.8z'/%3e%3cpath%20fill='%23ff9a00'%20d='M0%200h212.9v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M212.9%200h214v480h-214z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ck'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23006'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='m471.6%20213%205.2-16.7-14-10.6%2017.6-.2%206-16.5%205.6%2016.5%2017.7.5-14.1%2010.5%205%2016.7-14.5-10m27.1%2013%2010.4-13.9-9.7-14.8%2016.7%205.8%2011-13.5v17.6l16.4%206.4-16.8%205-.8%2017.5-10.2-14.4m-98.4%2015-.7-17.5-16.8-5.2L431%20198v-17.4l10.9%2013.5%2016.8-5.6-9.8%2014.7%2010.3%2014-17-4.5m-39.6%2040.9-7.4-15.8-17.4%201.8%2012.8-12.3L384%20211l15.2%208.2%2013.3-11.8-3.4%2017.4%2014.9%208.9-17.3%202.5M389%20291.8l-13.3-11.1-15%209.2%206.4-16.7-12.9-11.6%2017.3.7%207-16.4%204.3%2017.2%2017.2%201.5-14.6%209.8m3.2%2060.4-16.5-4.8-10.1%2014.5-.7-17.9-16.4-5.5%2016.1-6.2v-18l10.7%2014.1%2016.4-5.6-9.6%2015m29.5%2050.8-17%202.4-3.5%2017.4-7.8-16-17.1%201.6%2012.2-12.3-7.1-16.4%2015.3%208.5%2012.8-11.8L393%20362m45%2038-15.1%208.2%202.6%2017.6-12.7-12.4-15.6%207.6%207.3-15.9-12.3-12.9%2017.3%202.6%208-15.5%203.4%2017.4m53.8%209-8.3%2015.3%2011.7%2013.2-17.4-3.3-8.9%2015-2.4-17.3-17.2-4%2015.8-7.4-1.7-17.5%2012.2%2012.8m57.4-13.1-.5%2017.4%2016.3%206.4-17%205-1.2%2017.5-10-14.3-17%204.4%2010.8-13.9-9.4-14.7%2016.6%205.7M559%20209.8l12%2012.6%2015.9-7.4-8.3%2015.8%2011.5%2013.1-17-2.8-9%2015.5L562%20239l-17-3.5%2015.7-8m34.2%2021%205.5%2016.6%2017.5.3-14.2%2010.7%204.7%2016.8-14.1-10-14.6%2010.1%205.4-16.8-13.8-10.6%2017.6-.4m19.5%2033.2-2%2017.4%2015.7%207.7-17.3%203.6-2.7%2017.3-8.7-15.1-17.4%202.9%2012-13-8.1-15.5%2016%207.2m3%2039.8-7.8%2015.6L603%20379l-17.4-2.7-8.4%2015.3-3-17.3-17.4-3.3%2015.6-8-2.3-17.4%2012.6%2012.3m-9.8%2039.1-14.7%209.2%203.8%2017.3-13.5-11.5-15%208.6%206.3-16.3-13.1-12.1%2017.4%201.5%207-16%204.4%2017.2'/%3e%3cpath%20fill='%23006'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='%23c8102e'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='%23c8102e'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cl'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cl-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23cl-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M256%200h512v256H256z'/%3e%3cpath%20fill='%230039a6'%20d='M0%200h256v256H0z'/%3e%3cpath%20fill='%23fff'%20d='M167.8%20191.7%20128.2%20162l-39.5%2030%2014.7-48.8L64%20113.1l48.7-.5L127.8%2064l15.5%2048.5%2048.7.1-39.2%2030.4z'/%3e%3cpath%20fill='%23d52b1e'%20d='M0%20256h768v256H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cm'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23007a5e'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M213.3%200h213.4v480H213.3z'/%3e%3cpath%20fill='%23fcd116'%20d='M426.7%200H640v480H426.7z'/%3e%3cg%20fill='%23fcd116'%20transform='translate(320%20240)scale(7.1111)'%3e%3cg%20id='cm-b'%3e%3cpath%20id='cm-a'%20d='M0-8-2.5-.4%201.3.9z'/%3e%3cuse%20xlink:href='%23cm-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23cm-b'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23cm-b'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3cuse%20xlink:href='%23cm-b'%20width='100%25'%20height='100%25'%20transform='rotate(-144)'/%3e%3cuse%20xlink:href='%23cm-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='cn-a'%20fill='%23ff0'%20d='M-.6.8%200-1%20.6.8-1-.3h2z'/%3e%3c/defs%3e%3cpath%20fill='%23ee1c25'%20d='M0%200h640v480H0z'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(71.9991%200%200%2072%20120%20120)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-12.33562%20-20.5871%2020.58684%20-12.33577%20240.3%2048)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-3.38573%20-23.75998%2023.75968%20-3.38578%20288%2095.8)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(6.5991%20-23.0749%2023.0746%206.59919%20288%20168)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(14.9991%20-18.73557%2018.73533%2014.99929%20240%20216)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-co'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23ffe800'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300148e'%20d='M0%20240h640v240H0z'/%3e%3cpath%20fill='%23da0010'%20d='M0%20360h640v120H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cp'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cr'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%230000b4'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2075.4h640v322.3H0z'/%3e%3cpath%20fill='%23d90000'%20d='M0%20157.7h640v157.7H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cu'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cu-a'%3e%3cpath%20fill-opacity='.7'%20d='M-32%200h682.7v512H-32z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23cu-a)'%20transform='translate(30)scale(.94)'%3e%3cpath%20fill='%23002a8f'%20d='M-32%200h768v512H-32z'/%3e%3cpath%20fill='%23fff'%20d='M-32%20102.4h768v102.4H-32zm0%20204.8h768v102.4H-32z'/%3e%3cpath%20fill='%23cb1515'%20d='m-32%200%20440.7%20255.7L-32%20511z'/%3e%3cpath%20fill='%23fff'%20d='M161.8%20325.5%20114.3%20290l-47.2%2035.8%2017.6-58.1-47.2-36%2058.3-.4%2018.1-58%2018.5%2057.8%2058.3.1-46.9%2036.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cv'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cv-a'%3e%3cpath%20fill-opacity='.7'%20d='M-123.4%200h682.6v512h-682.6z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23cv-a)'%20transform='translate(115.7)scale(.94)'%3e%3cpath%20fill='%23fff'%20d='M-123.4%20233H723v206h-846.5z'/%3e%3cpath%20fill='%23081873'%20d='M-122.8%200h846v256.6h-846zm.3%20385.9h852.1V512h-852.1z'/%3e%3cpath%20fill='%23de3929'%20d='M-122.5%20302.6h846v39.6h-846z'/%3e%3cpath%20fill='%23ffce08'%20d='m131%20399.2%206.6%2020.4H159l-17.4%2012.7%206.6%2020.5L131%20440l-17.4%2012.7%206.7-20.5-17.4-12.7h21.5M317%20250.4l6.7%2020.5H345l-17.4%2012.6%206.6%2020.5-17.4-12.7-17.4%2012.7%206.6-20.5-17.4-12.6h21.6m-222%2064.4%206.6%2020.5h21.5L99%20368.6l6.7%2020.4-17.4-12.6L70.9%20389l6.6-20.4-17.4-12.7h21.5M317%20329.5l6.7%2020.4H345l-17.4%2012.7%206.6%2020.4-17.4-12.6-17.4%2012.7%206.6-20.5-17.4-12.7h21.6m-40.5-161.7%206.7%2020.4H298l-17.4%2012.7%206.6%2020.5-17.4-12.7-17.4%2012.7%206.7-20.5-17.5-12.7h21.6m-64.5-45.2%206.7%2020.5h21.5l-17.4%2012.6%206.6%2020.5-17.4-12.6-17.4%2012.6%206.7-20.5-17.4-12.6H192m-64.5%202.9%206.7%2020.5h21.5l-17.4%2012.6%206.7%2020.5-17.5-12.7-17.4%2012.7%206.7-20.5-17.4-12.6H121m-34.8%2043.2%206.6%2020.5h21.6l-17.5%2012.6%206.7%2020.5-17.4-12.7-17.4%2012.7%206.6-20.5L58%20271h21.5m119.2%20149.4%206.7%2020.5h21.5l-17.4%2012.6%206.7%2020.5-17.5-12.7-17.4%2012.7%206.7-20.5-17.4-12.6H192m82.2-41.7%206.6%2020.4h21.5L285%20432.3l6.7%2020.5-17.4-12.7-17.5%2012.7%206.7-20.5-17.4-12.7h21.5'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cw'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cw-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3cpath%20id='cw-b'%20d='m0-1%20.2.7H1L.3%200l.2.7L0%20.4l-.6.4.2-.7-.5-.4h.7z'/%3e%3c/defs%3e%3cg%20clip-path='url(%23cw-a)'%20transform='scale(.94)'%3e%3cpath%20fill='%23002b7f'%20d='M0%200h768v512H0z'/%3e%3cpath%20fill='%23f9e814'%20d='M0%20320h768v64H0z'/%3e%3cuse%20xlink:href='%23cw-b'%20width='13500'%20height='9000'%20x='2'%20y='2'%20fill='%23fff'%20transform='scale(42.67)'/%3e%3cuse%20xlink:href='%23cw-b'%20width='13500'%20height='9000'%20x='3'%20y='3'%20fill='%23fff'%20transform='scale(56.9)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cx'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230021ad'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%231c8a42'%20d='M0%200h640v480z'/%3e%3ccircle%20cx='320'%20cy='240'%20r='57.8'%20fill='%23ffc639'/%3e%3cpath%20fill='%231c8a42'%20d='M284.7%20214c4%205.5%2010%2014.6%2014.8%2012.2%203.7%200%205.7.3%206.2%202.8a37%2037%200%200%200%2033-14.3s.8%200%20.5-4.5c0-2%202.8-1.6%202.8-1%20.4%201%20.4%201.7.9%201.8%201-.4%202.7-3%204-4.6.3-.7.1-1.5.2-2.4.7-1.7%202.4-1.3%202.8-.4l.6%201.6c1.8%201.2%205%200%205.2%200%20.3-1.4%201.2-1.2%201.2-1.2%201.2-.3.7-.2%201.5.2-.7%207.7%201.5%208%201.3%2012%20.1%204.4-1.3%205.6-1.3%207.3.4%202%207%202.1%204.6%203.9-2%201%200%203-3%203.8-8.8%204.5-10.4%208.3-10.4%208.3s-2.2%204.2-2.5%204.2c-1.5%202.8-3.3%201.2-4.4%202.6-.5%201.7-1%205.5%200%207.4.5%202.7%200%204.2-.7%206.9-.6%205.6-2.8%206.5-3.1%208.4-1%202.2.2%2012-.8%2012-6.5.2-11.5-1.2-14.1-1.7%202.5-10.9%201.5-20.4%201.5-21.4-.6-7.8-11.6-5.9-13.3-7-1.4-.2-2.3-1.3-2.7-1.8-1.6-.2-2.2-.6-3.7-.7-.8.4-.3.8-2%201.3-4.5.5-6.4-3.8-6.4-3.8.2-1.5-9.9.3-15.3-1-2.3%201.3-3.3%205-5.1%205.4%200%201.1-3-1-3.6-2-.2-3.4%202.8-4.8%202.8-4.8%202.4-1.7%203.8-2%205-3.1.5-2.9.2-5%201.5-7.1%201-1.7%202.5-1%203.5-1.6%201.1-.8%201.6-5.6.6-7l-4.7-4.2c-1.4-4.1%201.7-6.8%202.6-6.5'/%3e%3cpath%20fill='%23ffc639'%20d='M561.9%20142.4c-2.6-10.3-26-32.7-43.7-46.9-4.2-2.8-7-1.1-6.4%203%202.2%203.6%203.8%207.6%206%2011.3.6%202.5%201.8%204.2%202.4%206.6%200%200%20.2%204.2.6%204.6%205.4%206%206.2%2011.1%206.2%2011.1a49%2049%200%200%200%2011.5%2015.6c6.2%203.9%201.6%2016%201.8%2022.5%200%204-2.9%203.6-5.5%203-20.1-18.5-40.1-18.5-57.8-23.9-6.8-.7-7%202.6-4.7%204.4a129%20129%200%200%200%2039.1%2029.6l7.7%204.8%208.8%207.3c6.8%204.4%207.3%208.4%207.3%208.8.2%208.2-4.2%2014.6-5.5%2017.2-2.3%208.7-7%2010.2-7%2010.2-37.6%2025.4-57.4%2032-118.4%2024.1-1-.4-6.8.5%200%203%2015.5%205.2%2053.7%2013.5%2090.6-4%209-6.2%2014.8-4.2%2021.3-8a287.3%20287.3%200%200%201%2028.3-15.4c8.3-4.5%2031.3-9.4%2036.6-13.8%206.1-.5%2012.4-1.3%2012.8-6.5%202-1.3%205-.3%207.2-4.6%204.8-.9%204-2.6%204-2.6-1.2-3.4-5.8-4.8-9-7.3-4.8-1.6-8-2-11.5-.4l-3.3%201.5s-5.1-.7-5.1-1.1c-11.4-.6-10.3-38.3-14.3-54z'/%3e%3cpath%20fill='%231c8a42'%20d='M588.6%20204.2a2.8%201.8%2016%201%201-5.4-1.7%202.8%201.8%2016%200%201%205.4%201.7'/%3e%3cg%20fill='%23fff'%20transform='matrix(.64%200%200%20.64%200%2080)'%3e%3cpath%20id='cx-a'%20d='m188.2%20191-12.8-12-12.9%2011.8%201.4-17.4-17.3-2.8%2014.5-9.8-8.6-15.2%2016.7%205.3%206.5-16.2L182%20151l16.7-5-8.8%2015%2014.4%2010-17.3%202.5z'/%3e%3cpath%20d='m233.4%20335.5-13.8-9.1-13.4%209.6%204.8-15.5-13.6-9.5%2016.6-.4%205-15.5%205.6%2015.3%2016.7-.1L228%20320l5.3%2015.4z'/%3e%3cuse%20xlink:href='%23cx-a'%20width='100%25'%20height='100%25'%20x='2.5'%20y='269.1'/%3e%3cuse%20xlink:href='%23cx-a'%20width='100%25'%20height='100%25'%20x='-112.1'%20y='123.2'/%3e%3cuse%20xlink:href='%23cx-a'%20width='100%25'%20height='100%25'%20x='108.4'%20y='85'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__B847aADH__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-cz'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-74%200h682.67v512H-74z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20clip-path='url(%23a)'%20transform='translate(69.38)%20scale(.94)'%20strokeWidth='1pt'%3e%3cpath%20fill='%23e80000'%20d='M-74%200h768v512H-74z'/%3e%3cpath%20fill='%23fff'%20d='M-74%200h768v256H-74z'/%3e%3cpath%20d='M-74%200l382.73%20255.67L-74%20511.01V0z'%20fill='%2300006f'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-de'%3e%3cpath%20fill='%23ffce00'%20d='M0%20320h640v160.002H0z'/%3e%3cpath%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23d00'%20d='M0%20160h640v160H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__OfQKVGuG__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-dj'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='dj-a'%3e%3cpath%20fill-opacity='.7'%20d='M-40%200h682.7v512H-40z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23dj-a)'%20transform='translate(37.5)scale(.94)'%3e%3cpath%20fill='%230c0'%20d='M-40%200h768v512H-40z'/%3e%3cpath%20fill='%2369f'%20d='M-40%200h768v256H-40z'/%3e%3cpath%20fill='%23fffefe'%20d='m-40%200%20382.7%20255.7L-40%20511z'/%3e%3cpath%20fill='red'%20d='M119.8%20292%2089%20270l-30.7%2022.4L69.7%20256l-30.6-22.5%2037.9-.3%2011.7-36.3%2012%2036.2h37.9l-30.5%2022.7%2011.7%2036.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-dk'%3e%3cpath%20fill='%23c60c30'%20d='M0%200h640.1v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M205.714%200h68.57v480h-68.57z'/%3e%3cpath%20fill='%23fff'%20d='M0%20205.714h640.1v68.57H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__B7fJoHwe__\"","export default \"__VITE_ASSET__CAs_VQWr__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-dz'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M320%200h320v480H320z'/%3e%3cpath%20fill='%23006233'%20d='M0%200h320v480H0z'/%3e%3cpath%20fill='%23d21034'%20d='M424%20180a120%20120%200%201%200%200%20120%2096%2096%200%201%201%200-120m4%2060-108-35.2%2067.2%2092V183.2l-67.2%2092z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__8dP0R8bt__\"","export default \"__VITE_ASSET__7XOj9e9w__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ee'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3crect%20rx='0'%20ry='0'%20height='477.9'%20width='640'/%3e%3crect%20rx='0'%20ry='0'%20height='159.3'%20width='640'%20y='320.7'%20fill='%23fff'/%3e%3cpath%20fill='%231291ff'%20d='M0%200h640v159.3H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CUQSxBVX__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-eh'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='eh-a'%3e%3cpath%20fill-opacity='.7'%20d='M-158.7%200H524v512h-682.7z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23eh-a)'%20transform='translate(148.8)scale(.94)'%3e%3cpath%20fill='%23000001'%20d='M-158.3%200h680.9v255.3h-680.9z'/%3e%3cpath%20fill='%23007a3d'%20d='M-158.3%20255.3h680.9v255.3h-680.9z'/%3e%3cpath%20fill='%23fff'%20d='M-158.3%20148.9h680.9v212.8h-680.9z'/%3e%3cpath%20fill='%23c4111b'%20d='m-158.3%200%20340.4%20255.3-340.4%20255.3Z'/%3e%3ccircle%20cx='352.3'%20cy='255.3'%20r='68.1'%20fill='%23c4111b'/%3e%3ccircle%20cx='377.9'%20cy='255.3'%20r='68.1'%20fill='%23fff'/%3e%3cpath%20fill='%23c4111b'%20d='m334%20296.5%2029.1-20.7%2028.8%2021-10.8-34%2029-20.9-35.7-.2-11-34-11.2%2033.9-35.7-.2%2028.7%2021.2-11.1%2034z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-er'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23be0027'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23b4d7f4'%20d='m0%20480%20640-.3V240z'/%3e%3cpath%20fill='%23239e46'%20d='m0%200%20640%20.3V240z'/%3e%3cpath%20fill='%23f3e295'%20d='M186.2%20360.4c-10.7%203-16.8%2011.3-16.7%2019.1l52.8-.2c.4-8.4-6.5-16.2-17-19.3%2051.6-1%2096.4-20.4%20104.6-32.8-8-3.5-17.4%202.1-24%20.8%2015.7-7.3%2063-37.9%2055.3-70.7-6%2018.2-24%2033.3-31.8%2037.4%2017.7-26.8%2041.8-54.8%2020.9-76.4%201%2012.5-8%2026.3-12%2027.4%2010.3-28.4%2020-64-2.1-87.4%202.9%208.5%201.7%2032.4-2.3%2033.5-1.2-19.3-4.5-59.8-24.8-59.3%206.4%205.8%209.2%2021.4%209.4%2037.2a57.5%2057.5%200%200%200-21.1-27%20118.3%20118.3%200%200%200-41.5-42.2c1.8%2012.7%203.3%2022.7%2021%2035.9-9.2-.6-18.4-18.1-28.3-18.6-7.9-.4-14%207.1-26.9%202.8%201.4%204.2%207.4%206.1%208.7%209.2-2.8%202-9.3-.3-14.7-3%207.5%2010%2019%2016%2028.8%2014%2011.7-2.2%2024.2-1%2036.2%205.8a63%2063%200%200%201-22.5.6c6.9%207%2011.5%2011.7%2023.6%2011.6%2010.7%200%2016.4-5.8%2019.1-2.2%206.8%208%2011.3%2016%2017%2025.4-12.5%201.3-8.7-14.1-22.6-22-7.9%2016%209%2035.2%2020.3%2043.2a65%2065%200%200%200%207.1%2031.5c3.5%206.5%208%2013.2%206.3%2027.9-6.9-5-13.5-21.8-11-35.1-8.6%202.3-12%2017.4-8%2025%203%205.7%205%2016.8%201.6%2021.7-3.4%204.6-3.7%204-3.7%2014%20.1%205.8-3.2%2012.8-8.5%2017.7a35.5%2035.5%200%200%200%201.1-15.8c-4.2%207.2-14.9%2014.6-18.2%2022.4-3.3%207.7-4.1%2021.2-20%2024.3-20.6%204-27.7%207.6-40.8%2013-1.5-10%202.9-31%2011.3-29.7%208.1%201.4%2033-8.6%2024-29.5-1.7%206.6-7.5%2013-13.9%2013.3%206.9-8.8%2019-18%2013.1-32.8a42.6%2042.6%200%200%201-16.3%2018c8.4-16%201-21-9-7.6-3.8%205.1-6.1%2015.4-8.5%2028.5-4-10.6-3.7-24.6-8.4-36-4.8-12.3%206.5-15.5%2011.8-14.5%2013%203.5%2034.9%203.5%2033.3-18.1-5.7%207.3-15.5%209.5-26.2%207%2012-8.8%2021.4-25.3%208-34a31%2031%200%200%201-16.9%2024.1%2050.8%2050.8%200%200%201-.3-24.8c-5.2%205.6-9%2017-12.1%2030.2-.3-13%202.2-22.3%204-29.3%202.8-10.1%209.6-3.5%2020-2.8%2010.2.6%2024-5%2021.4-18.7-3.4%205.5-10.5%207.6-17.7%207%208.7-5.3%2023.8-14.6%2015.5-29-3.5%205.4-4.6%2010-14.7%2011.7%202.6-6%203-14.7%2011-18-14-2.9-22%206.3-26.2%2020.7-1.6-10-3.6-13.6-4-21%207.6-8.3%208.4-24.8-8-28.4a35%2035%200%200%200%201.2%2017.4c-7.7-4.6-18.5-7.1-25.8-.7%205%205.3%2012.5%2010%2024.2%204.2-2.8%209-10%207.5-19.8%204%206%2011.3%2013.6%2013.3%2022%2012%204.4%2011.6%204.6%2020.4-8.3%2037.2.6-10.4-.1-18.2-8.4-26.7-7.2-7-13%20.3-1.8%2015.8-6.8-5-14.4-15-16.7-25.1-2.2%2012.4-.2%2027.1%206.7%2035.4-3.3%203.5-7-.4-12.5-9%202%2027.4%2013.7%2032.7%2029.4%2026.6.4%2015%20.4%2028.9%201.3%2047-9.1-13.2-20.7-23-27.1-25.4-2%207.3%205.5%2017%209.8%2022.3-6.5-1.4-20.5-12-20.5-12-1.4%2012.1%2014.3%2023.4%2024.5%2028.4-12-.5-17.3-5-25-12.4.2%2033.8%2036.6%2027.9%2043.5%2022.7l3%2052.5c-10.3-1.8-9.5-5-18.3-5.7-24.5-1-43.9-29.4-50.3-50.3-1.9%203.4-.4%207-2.1%2011.3-4-10.3-9-23.6-15.9-29.8%201.8%206%202%2012.1%201.4%2023.3-2.4-7.2-4.5-9.5-4.7-18%20.1-6.5%206.3-11.3%206-20.5-.3-6.7-6.4-21.3-7.3-32.5-3%2011.6-4.8%2023.8-9.4%2031%202.3-12.4%201.6-21%205.4-29.3%204.4-8.7%208.1-16.6%205.2-25.4-2.8%203.4-1.9%206.5-9%2014.8-1.5-9%209.2-23.5%2019.6-29.3%207.3-3.8%2016.5-17.6%2010.5-27-6.9%205-10%2011.6-19.7%2023%207-27%2025-34.2%2046.5-34.3%204.7%200%2014.3-1.7%2017-8-6%202.3-13.2%202.6-19.6%201.4%204.7-6.9%2014.4-6%2023.6-6%207.1%200%2018.3-1%2022.8-11.2a50.8%2050.8%200%200%201-31%201.9c13.7-7%2035-7.8%2046-17.1-12.5-9.3-43.7%202.2-63.4%2015.7%205.5-5%2014.2-14%2019-21.2-10.8-5.2-38%2025-47.4%2043-9%205-12.5%2013-16%2018.5%204.7-16.1%205.2-27.8%209.2-41C80%20138%2092.6%20194.6%2086%20208.2c.8-15%20.1-34.1-6-44-9.4%207.2-10.2%2049.5-1.4%2084.7-3.2-9.4-9.2-18.2-11.1-29.7-14%2025.4%208.2%2055.5%2026.7%2079.2-14-7.3-27.7-22.9-36.8-36%202.5%2045.6%2050%2055%2057.4%2066.2-10-4.7-29.1-13.9-37.3-4.2a99%2099%200%200%201%2032.3%2012.1c12.4%2015.4%2035.7%2022.2%2076.4%2023.9'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-es-ct'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fcdd09'%20d='M0%200h640v480H0z'/%3e%3cpath%20stroke='%23da121a'%20stroke-width='60'%20d='M0%2090h810m0%20120H0m0%20120h810m0%20120H0'%20transform='scale(.79012%20.88889)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DXfFc7va__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-es-pv'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23D52B1E'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23009B48'%20d='M0%200h53.1l133.4%20100.1%20133.5%20100L586.9%200H640v39.9l-133.4%20100L373.2%20240%20640%20440.2V480h-53.1L453.5%20380A69411.7%2069411.7%200%200%200%20320%20279.9L53.1%20480H0v-39.8l133.4-100.1L266.8%20240%200%2039.9v-20z'/%3e%3cpath%20fill='%23FFF'%20d='M288.1%200h63.8v208.1H640v63.8H351.9V480h-63.8V271.9H0v-63.8h288.1v-104z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CWgZdGVX__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-et'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='et-a'%3e%3cpath%20fill-opacity='.7'%20d='M-61.3%200h682.7v512H-61.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23et-a)'%20transform='translate(57.5)scale(.94)'%3e%3cpath%20fill='%23ffc621'%20d='M-238%203.5H800v498H-238z'/%3e%3cpath%20fill='%23ef2118'%20d='M-240%20342.5H799.3V512H-240z'/%3e%3cpath%20fill='%23298c08'%20d='M-238%200H800v180H-238z'/%3e%3ccircle%20cx='534.2'%20cy='353'%20r='199.7'%20fill='%23006bc6'%20transform='matrix(.54%200%200%20.54%20-25.8%2074)'/%3e%3cpath%20fill='%23ffc621'%20d='m214.3%20188.2-6.5%204.5%2023.5%2033%206.3-4zm29.4%2078-9.7-6.8%204-12.7-48.1.7-14-10.7%2065.7-.7%2012.2-36.9%206.6%2015zm76.5-70.7-6.3-4.8-24.3%2032.4%205.6%204.7zM254.8%20247l3.5-11.2h13.3L256.4%20190l6-16.5%2020.5%2062.4%2038.8.5-12.2%2010.7zm90.6%2051.2%202.7-7.4-38.3-13.3-2.8%207zm-69.1-46.4%2011.7-.1%204.1%2012.6%2038.8-28.5%2017.6.6-53.1%2038.7%2011.5%2037.2-14-8.4zm-19.8%20102%207.9.2.3-40.5-7.4-.5zm22-80.3%203.8%2011.1-10.7%208%2039.4%2027.7%205%2016.8-53.6-38-31.5%2022.7%203.5-16%2044-32.3zm-103.3%2013%202.3%207.5%2038.7-12.2-2-7.2zm83.2-4-9.4%207.1-10.8-7.7-14.2%2046-14.4%2010%2019.5-62.7-31.4-23%2016.3-1.6z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-eu'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cg%20id='eu-d'%3e%3cg%20id='eu-b'%3e%3cpath%20id='eu-a'%20d='m0-1-.3%201%20.5.1z'/%3e%3cuse%20xlink:href='%23eu-a'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cg%20id='eu-c'%3e%3cuse%20xlink:href='%23eu-b'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23eu-b'%20transform='rotate(144)'/%3e%3c/g%3e%3cuse%20xlink:href='%23eu-c'%20transform='scale(-1%201)'/%3e%3c/g%3e%3c/defs%3e%3cpath%20fill='%23039'%20d='M0%200h640v480H0z'/%3e%3cg%20fill='%23fc0'%20transform='translate(320%20242.3)scale(23.7037)'%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20y='-6'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20y='6'/%3e%3cg%20id='eu-e'%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20x='-6'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20transform='rotate(-144%20-2.3%20-2.1)'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20transform='rotate(144%20-2.1%20-2.3)'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20transform='rotate(72%20-4.7%20-2)'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20transform='rotate(72%20-5%20.5)'/%3e%3c/g%3e%3cuse%20xlink:href='%23eu-e'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-fi'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23003580'%20d='M0%20174.545h640v130.909H0z'/%3e%3cpath%20fill='%23003580'%20d='M175.455%200h130.909v480H175.455z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__uTfr_eDB__\"","export default \"__VITE_ASSET__LpWbTuIU__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-fm'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='fm-a'%3e%3cpath%20fill-opacity='.7'%20d='M-81.3%200h682.6v512H-81.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23fm-a)'%20transform='translate(76.3)scale(.94)'%3e%3cpath%20fill='%236797d6'%20d='M-252%200H772v512H-252z'/%3e%3cpath%20fill='%23fff'%20d='m259.8%20123-32.4%2022.2%2012.4-35.9-32.5-22.2h40.1l12.4-35.9%2012.4%2036h40l-32.4%2022.1%2012.4%2035.9M259.8%20390l-32.4-22.2%2012.4%2036-32.5%2022.1h40.1l12.4%2035.9%2012.4-36%2040%20.1-32.4-22.2%2012.4-35.9m-188.4-92.4L79.3%20306l1.4-38-37.5-11.7%2038.4-11.7%201.3-38%2022.3%2030.8%2038.4-11.8-24.6%2030.7%2022.4%2030.7m274.2-11.7%2024.6%2030.7-1.4-38%2037.5-11.7-38.4-11.7-1.3-38-22.3%2030.8-38.4-11.8%2024.6%2030.7-22.4%2030.7'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-fo'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-78.015%2032h640v480h-640z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20clip-path='url(%23a)'%20transform='translate(78.02%20-32)'%20strokeWidth='0'%3e%3cpath%20fill='%23fff'%20d='M-78.015%2032h663.91v480h-663.91z'/%3e%3cpath%20d='M-76.033%20218.67h185.9V32h106.23v186.67h371.79v106.67h-371.79v186.67h-106.23V325.34h-185.9V218.67z'%20fill='%23003897'/%3e%3cpath%20d='M-76.033%20245.33h212.45V32h53.113v213.33h398.35v53.333H189.53v213.33h-53.113v-213.33h-212.45V245.33z'%20fill='%23d72828'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-fr'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300267f'%20d='M0%200h213.337v480H0z'/%3e%3cpath%20fill='%23f31830'%20d='M426.662%200H640v480H426.662z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ga'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23ffe700'%20d='M640%20480H0V0h640z'/%3e%3cpath%20fill='%2336a100'%20d='M640%20160H0V0h640z'/%3e%3cpath%20fill='%23006dbc'%20d='M640%20480H0V320h640z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gb-eng'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23ce1124'%20d='M281.6%200h76.8v480h-76.8z'/%3e%3cpath%20fill='%23ce1124'%20d='M0%20201.6h640v76.8H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BH42wpQA__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gb-sct'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230065bd'%20d='M0%200h640v480H0z'/%3e%3cpath%20stroke='%23fff'%20stroke-width='.6'%20d='m0%200%205%203M0%203l5-3'%20transform='scale(128%20160)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BtUvly0e__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-gb'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-85.333%200h682.67v512h-682.67z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23a)'%20transform='translate(80)%20scale(.94)'%3e%3cg%20strokeWidth='1pt'%3e%3cpath%20fill='%23006'%20d='M-256%200H768.02v512.01H-256z'/%3e%3cpath%20d='M-256%200v57.244l909.535%20454.768H768.02V454.77L-141.515%200H-256zM768.02%200v57.243L-141.515%20512.01H-256v-57.243L653.535%200H768.02z'%20fill='%23fff'/%3e%3cpath%20d='M170.675%200v512.01h170.67V0h-170.67zM-256%20170.67v170.67H768.02V170.67H-256z'%20fill='%23fff'/%3e%3cpath%20d='M-256%20204.804v102.402H768.02V204.804H-256zM204.81%200v512.01h102.4V0h-102.4zM-256%20512.01L85.34%20341.34h76.324l-341.34%20170.67H-256zM-256%200L85.34%20170.67H9.016L-256%2038.164V0zm606.356%20170.67L691.696%200h76.324L426.68%20170.67h-76.324zM768.02%20512.01L426.68%20341.34h76.324L768.02%20473.848v38.162z'%20fill='%23c00'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-gd'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cg%20id='gd-c'%3e%3cg%20id='gd-b'%3e%3cpath%20id='gd-a'%20fill='%23fcd116'%20d='M0-1v1h.5'%20transform='rotate(18%200%20-1)'/%3e%3cuse%20xlink:href='%23gd-a'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23gd-b'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23gd-b'%20transform='rotate(144)'/%3e%3cuse%20xlink:href='%23gd-b'%20transform='rotate(216)'/%3e%3cuse%20xlink:href='%23gd-b'%20transform='rotate(288)'/%3e%3c/g%3e%3c/defs%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23007a5e'%20d='M67.2%2067.2h505.6v345.6H67.2z'/%3e%3cpath%20fill='%23fcd116'%20d='M67.2%2067.3h505.6L67.2%20412.9h505.6z'/%3e%3ccircle%20cx='319.9'%20cy='240.1'%20r='57.6'%20fill='%23ce1126'/%3e%3cuse%20xlink:href='%23gd-c'%20width='100%25'%20height='100%25'%20transform='translate(320%20240)scale(52.8)'/%3e%3cuse%20xlink:href='%23gd-d'%20width='100%25'%20height='100%25'%20x='-100'%20transform='translate(-30.3)'/%3e%3cuse%20xlink:href='%23gd-c'%20id='gd-d'%20width='100%25'%20height='100%25'%20transform='translate(320%2033.6)scale(31.2)'/%3e%3cuse%20xlink:href='%23gd-d'%20width='100%25'%20height='100%25'%20x='100'%20transform='translate(30.3)'/%3e%3cpath%20fill='%23ce1126'%20d='M102.3%20240.7a80.4%2080.4%200%200%200%2033.5%2033.2%20111%20111%200%200%200-11.3-45z'/%3e%3cpath%20fill='%23fcd116'%20d='M90.1%20194.7c10.4%2021.7-27.1%2073.7%2035.5%2085.9a63.2%2063.2%200%200%201-10.9-41.9%2070%2070%200%200%201%2032.5%2030.8c16.4-59.5-42-55.8-57.1-74.8'/%3e%3cuse%20xlink:href='%23gd-d'%20width='100%25'%20height='100%25'%20x='-100'%20transform='translate(-30.3%20414.6)'/%3e%3cuse%20xlink:href='%23gd-c'%20width='100%25'%20height='100%25'%20transform='translate(320%20448.2)scale(31.2)'/%3e%3cuse%20xlink:href='%23gd-d'%20width='100%25'%20height='100%25'%20x='100'%20transform='translate(30.3%20414.6)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ge'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='red'%20d='M272%200h96v480h-96z'/%3e%3cpath%20fill='red'%20d='M0%20192h640v96H0z'/%3e%3cpath%20fill='red'%20fill-rule='evenodd'%20d='M146.8%20373.1c1-16.8%204-31.1%204-31.1s-9.8%201-14.8%201c-4.9%200-14.8-1-14.8-1s3%2014.3%204%2031.2c-16.9-1-31.2-4-31.2-4s1%207.4%201%2014.8-1%2014.8-1%2014.8%2014.3-3%2031.2-4c-1%2016.9-4%2031.2-4%2031.2s7.4-1%2014.8-1%2014.8%201%2014.8%201-3-14.3-4-31.2c16.9%201%2031.2%204%2031.2%204s-1-9.8-1-14.8c0-4.9%201-14.8%201-14.8s-14.3%203-31.1%204zm368-288c1-16.8%204-31.1%204-31.1s-9.8%201-14.8%201c-4.9%200-14.8-1-14.8-1s3%2014.3%204%2031.1c-16.9-1-31.2-3.9-31.2-3.9s1%207.4%201%2014.8-1%2014.8-1%2014.8%2014.3-3%2031.2-4c-1%2016.9-4%2031.2-4%2031.2s7.4-1%2014.8-1%2014.8%201%2014.8%201-3-14.3-4-31.1c16.9%201%2031.2%204%2031.2%204s-1-10-1-14.9%201-14.8%201-14.8-14.3%203-31.2%204zm-368%200c1-16.8%204-31.1%204-31.1s-9.8%201-14.8%201c-4.9%200-14.8-1-14.8-1s3%2014.3%204%2031.2c-16.9-1-31.2-4-31.2-4s1%207.4%201%2014.8-1%2014.8-1%2014.8%2014.3-3%2031.2-4c-1%2016.9-4%2031.2-4%2031.2s7.4-1%2014.8-1%2014.8%201%2014.8%201-3-14.3-4-31.2c16.9%201%2031.2%204%2031.2%204s-1-9.8-1-14.8c0-4.9%201-14.8%201-14.8s-14.3%203-31.1%204zm368%20288c1-16.8%204-31.1%204-31.1s-9.8%201-14.8%201c-4.9%200-14.8-1-14.8-1s3%2014.3%204%2031.2c-16.9-1-31.2-4-31.2-4s1%207.4%201%2014.8-1%2014.8-1%2014.8%2014.3-3%2031.2-4c-1%2016.9-4%2031.2-4%2031.2s7.4-1%2014.8-1%2014.8%201%2014.8%201-3-14.3-4-31.2c16.9%201%2031.2%204%2031.2%204s-1-9.8-1-14.8c0-4.9%201-14.8%201-14.8s-14.3%203-31.2%204z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-gf'%3e%3cpath%20fill='%23078930'%20d='M0%200h640v480z'/%3e%3cpath%20fill='%23fcdd09'%20d='M0%200l640%20480H0z'/%3e%3cpath%20fill='%23da121a'%20d='M252.37%20218.025h135.26L278.203%20297.53%20320%20168.89l41.798%20128.64z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-gg'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23e8112d'%20d='M256%200h128v480H256z'/%3e%3cpath%20fill='%23e8112d'%20d='M0%20176h640v128H0z'/%3e%3cpath%20id='gg-a'%20fill='%23f9dd16'%20d='m110%20286.7%2023.3-23.4h210v-46.6h-210L110%20193.3z'/%3e%3cuse%20xlink:href='%23gg-a'%20width='36'%20height='24'%20transform='rotate(90%20320%20240)'/%3e%3cuse%20xlink:href='%23gg-a'%20width='36'%20height='24'%20transform='rotate(-90%20320%20240)'/%3e%3cuse%20xlink:href='%23gg-a'%20width='36'%20height='24'%20transform='rotate(180%20320%20240)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gh'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23006b3f'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fcd116'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='m320%20160%2052%20160-136.1-98.9H404L268%20320z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__Dcnvsq1G__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gl'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23d00c33'%20d='M0%20240h640v240H0zm80%200a160%20160%200%201%200%20320%200%20160%20160%200%200%200-320%200'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gm'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='gm-a'%3e%3cpath%20fill-opacity='.7'%20d='M0-48h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23gm-a)'%20transform='translate(0%2048)'%3e%3cpath%20fill='red'%20d='M0-128h640V85.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2085.3h640V121H0z'/%3e%3cpath%20fill='%23009'%20d='M0%20120.9h640V263H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20263.1h640v35.6H0z'/%3e%3cpath%20fill='%23090'%20d='M0%20298.7h640V512H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gn'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='red'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23ff0'%20d='M213.3%200h213.4v480H213.3z'/%3e%3cpath%20fill='%23090'%20d='M426.7%200H640v480H426.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gp'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__gbjdc$$i__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-gr'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M0%200h120v90H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20clip-path='url(%23a)'%20transform='scale(5.33)'%20strokeWidth='1pt'%3e%3cpath%20fill='%230d5eaf'%20d='M0%200h135v10H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2010h135v10H0z'/%3e%3cpath%20fill='%230d5eaf'%20d='M0%2020h135v10H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2030h135v10H0z'/%3e%3cpath%20fill='%230d5eaf'%20d='M0%2040h135v10H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2050h135v10H0z'/%3e%3cpath%20fill='%230d5eaf'%20d='M0%2060h135v10H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2070h135v10H0z'/%3e%3cpath%20fill='%230d5eaf'%20d='M0%2080h135v10H0zM0%200h50v50H0z'/%3e%3cg%20fill='%23fff'%3e%3cpath%20d='M20%200h10v50H20z'/%3e%3cpath%20d='M0%2020h50v10H0z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BPAIWr$y__\"","export default \"__VITE_ASSET__DjhXxbW7__\"","export default \"__VITE_ASSET__BZ3A9Bae__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-gw'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23ce1126'%20d='M0%200h220v480H0z'/%3e%3cpath%20fill='%23fcd116'%20d='M220%200h420v240H220z'/%3e%3cpath%20fill='%23009e49'%20d='M220%20240h420v240H220z'/%3e%3cg%20id='gw-b'%20transform='matrix(80%200%200%2080%20110%20240)'%3e%3cpath%20id='gw-a'%20fill='%23000001'%20d='M0-1v1h.5'%20transform='rotate(18%200%20-1)'/%3e%3cuse%20xlink:href='%23gw-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23gw-b'%20width='100%25'%20height='100%25'%20transform='rotate(72%20110%20240)'/%3e%3cuse%20xlink:href='%23gw-b'%20width='100%25'%20height='100%25'%20transform='rotate(144%20110%20240)'/%3e%3cuse%20xlink:href='%23gw-b'%20width='100%25'%20height='100%25'%20transform='rotate(-144%20110%20240)'/%3e%3cuse%20xlink:href='%23gw-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72%20110%20240)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gy'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23399408'%20d='M2.4%200H640v480H2.4z'/%3e%3cpath%20fill='%23fff'%20d='M.2%200c-.9%200%20619.6%20241.5%20619.6%20241.5L0%20479.8z'/%3e%3cpath%20fill='%23ffde08'%20d='M.3%2020.2c3.4%200%20559%20217.9%20555.9%20220L1.9%20463.2.3%2020.3z'/%3e%3cpath%20fill='%23000001'%20d='M1.9.8c1.8%200%20290.9%20240.9%20290.9%20240.9L1.8%20477z'/%3e%3cpath%20fill='%23de2110'%20d='M.3%2033.9c1.6-15%20260.9%20208.4%20260.9%20208.4L.2%20451.7V33.9z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-hk'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23EC1B2E'%20d='M0%200h640v480H0'/%3e%3cpath%20id='hk-a'%20fill='%23fff'%20d='M346.3%20103.1C267%2098%20230.6%20201.9%20305.6%20240.3c-26-22.4-20.6-55.3-10.1-72.4l1.9%201.1c-13.8%2023.5-11.2%2052.7%2011.1%2071-12.7-12.3-9.5-39%2012.1-48.9s23.6-39.3%2016.4-49.1q-14.7-25.6%209.3-38.9M307.9%20164l-4.7%207.4-1.8-8.6-8.6-2.3%207.8-4.3-.6-8.9%206.5%206.1%208.3-3.3-3.7%208.1%205.6%206.8z'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(72%20312.5%20243.5)'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(144%20312.5%20243.5)'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(216%20312.5%20243.5)'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(288%20312.5%20243.5)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-hm'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300008B'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='red'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='red'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3cpath%20fill='%23fff'%20d='m527%20396.7-20.5%202.6%202.2%2020.5-14.8-14.4-14.7%2014.5%202-20.5-20.5-2.4%2017.3-11.2-10.9-17.5%2019.6%206.5%206.9-19.5%207.1%2019.4%2019.5-6.7-10.7%2017.6zm-3.7-117.2%202.7-13-9.8-9%2013.2-1.5%205.5-12.1%205.5%2012.1%2013.2%201.5-9.8%209%202.7%2013-11.6-6.6zm-104.1-60-20.3%202.2%201.8%2020.3-14.4-14.5-14.8%2014.1%202.4-20.3-20.2-2.7%2017.3-10.8-10.5-17.5%2019.3%206.8L387%20178l6.7%2019.3%2019.4-6.3-10.9%2017.3%2017.1%2011.2ZM623%20186.7l-20.9%202.7%202.3%2020.9-15.1-14.7-15%2014.8%202.1-21-20.9-2.4%2017.7-11.5-11.1-17.9%2020%206.7%207-19.8%207.2%2019.8%2019.9-6.9-11%2018zm-96.1-83.5-20.7%202.3%201.9%2020.8-14.7-14.8-15.1%2014.4%202.4-20.7-20.7-2.8%2017.7-11L467%2073.5l19.7%206.9%207.3-19.5%206.8%2019.7%2019.8-6.5-11.1%2017.6zM234%20385.7l-45.8%205.4%204.6%2045.9-32.8-32.4-33%2032.2%204.9-45.9-45.8-5.8%2038.9-24.8-24-39.4%2043.6%2015%2015.8-43.4%2015.5%2043.5%2043.7-14.7-24.3%2039.2%2038.8%2025.1Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-hn'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2318c3df'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cg%20id='hn-c'%20fill='%2318c3df'%20transform='translate(320%20240)scale(26.66665)'%3e%3cg%20id='hn-b'%3e%3cpath%20id='hn-a'%20d='m-.3%200%20.5.1L0-1z'/%3e%3cuse%20xlink:href='%23hn-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23hn-b'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23hn-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3cuse%20xlink:href='%23hn-b'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3cuse%20xlink:href='%23hn-b'%20width='100%25'%20height='100%25'%20transform='rotate(-144)'/%3e%3c/g%3e%3cuse%20xlink:href='%23hn-c'%20width='100%25'%20height='100%25'%20transform='translate(133.3%20-42.7)'/%3e%3cuse%20xlink:href='%23hn-c'%20width='100%25'%20height='100%25'%20transform='translate(133.3%2037.3)'/%3e%3cuse%20xlink:href='%23hn-c'%20width='100%25'%20height='100%25'%20transform='translate(-133.3%20-42.7)'/%3e%3cuse%20xlink:href='%23hn-c'%20width='100%25'%20height='100%25'%20transform='translate(-133.3%2037.3)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BtOx$4os__\"","export default \"__VITE_ASSET__CYk6RizZ__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-hu'%3e%3cg%20fillRule='evenodd'%3e%3cpath%20fill='%23fff'%20d='M640.006%20479.994H0V0h640.006z'/%3e%3cpath%20fill='%23388d00'%20d='M640.006%20479.994H0V319.996h640.006z'/%3e%3cpath%20fill='%23d43516'%20d='M640.006%20160.127H0V.13h640.006z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ic'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%230768a9'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23fc0'%20d='M426.7%200H640v480H426.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-id'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23e70011'%20d='M0%200h640v240H0Z'/%3e%3cpath%20fill='%23fff'%20d='M0%20240h640v240H0Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ie'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h639.995v480.004H0z'/%3e%3cpath%20fill='%23009A49'%20d='M0%200h213.334v480.004H0z'/%3e%3cpath%20fill='%23FF7900'%20d='M426.668%200h213.334v480.004H426.668z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-il'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='il-a'%3e%3cpath%20fill-opacity='.7'%20d='M-87.6%200H595v512H-87.6z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23il-a)'%20transform='translate(82.1)scale(.94)'%3e%3cpath%20fill='%23fff'%20d='M619.4%20512H-112V0h731.4z'/%3e%3cpath%20fill='%230038b8'%20d='M619.4%20115.2H-112V48h731.4zm0%20350.5H-112v-67.2h731.4zm-483-275%20110.1%20191.6L359%20191.6z'/%3e%3cpath%20fill='%23fff'%20d='m225.8%20317.8%2020.9%2035.5%2021.4-35.3z'/%3e%3cpath%20fill='%230038b8'%20d='M136%20320.6%20246.2%20129l112.4%20190.8z'/%3e%3cpath%20fill='%23fff'%20d='m225.8%20191.6%2020.9-35.5%2021.4%2035.4zM182%20271.1l-21.7%2036%2041-.1-19.3-36zm-21.3-66.5%2041.2.3-19.8%2036.3zm151.2%2067%2020.9%2035.5-41.7-.5zm20.5-67-41.2.3%2019.8%2036.3zm-114.3%200L189.7%20256l28.8%2050.3%2052.8%201.2%2032-51.5-29.6-52z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CgJwNywi__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-in'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23f93'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23128807'%20d='M0%20320h640v160H0z'/%3e%3cg%20transform='matrix(3.2%200%200%203.2%20320%20240)'%3e%3ccircle%20r='20'%20fill='%23008'/%3e%3ccircle%20r='17.5'%20fill='%23fff'/%3e%3ccircle%20r='3.5'%20fill='%23008'/%3e%3cg%20id='in-d'%3e%3cg%20id='in-c'%3e%3cg%20id='in-b'%3e%3cg%20id='in-a'%20fill='%23008'%3e%3ccircle%20r='.9'%20transform='rotate(7.5%20-8.8%20133.5)'/%3e%3cpath%20d='M0%2017.5.6%207%200%202l-.6%205z'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-a'%20width='100%25'%20height='100%25'%20transform='rotate(15)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-b'%20width='100%25'%20height='100%25'%20transform='rotate(30)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-c'%20width='100%25'%20height='100%25'%20transform='rotate(60)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(120)'/%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(-120)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__D9E7PzvJ__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-iq'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20320h640v160H0z'/%3e%3cg%20fill='%23007a3d'%20transform='translate(-179.3%20-92.8)scale(1.75182)'%3e%3cpath%20d='M325.5%20173.2a5%205%200%200%201-1.4-1c-.3-.5-.1-.5%201.2-.2%202.3.7%203.8.4%205.3-.8l1.3-1.1%201.5.7c.9.5%201.8.8%202%20.7.7-.2%202.1-2%202-2.6%200-.7.6-.5%201%20.3.6%201.6-.3%203.5-2%203.9-.7.2-1.4.1-2.6-.3-1.4-.5-1.7-.5-2.4%200a5.4%205.4%200%200%201-5.9.4m5.8-5.3a8%208%200%200%201-1-4c.1-.6.3-.8.8-.6%201%20.3%201.2%201%201%203%200%201.8-.3%202.3-.8%201.6m-67.6-1.9c-.1%201.3%202.4%204.6%203.5%205.2-.8.3-1.7.2-2.4.5-4%204-18.4%2018-21%2021.4%207.8.2%2016.4-.1%2023.7-.4%200-5.3%205-5.6%208.4-7.5%201.7%202.7%206%202.5%206.6%206.6v17.6H216a9.7%209.7%200%200%201-12.3%207.5c2-2%205.4-2.8%206.6-5.7%201-6.4-2-10.3-4-14a24%2024%200%200%200%207-3.6c-2.3%207%206.2%206.3%2012.4%206.1.2-2.4.1-5.2-1.7-5.6%202.3-.9%202.7-1.2%206.6-4.4v9.6l46.1-.1c0-3%20.8-7.9-1.6-7.9-2.2%200%200%206.2-1.8%206.2h-35.7v-6c1.5-1.6%201.3-1.5%2011.6-11.8%201-1%208.3-7.6%2014.6-13.7zm89.1-.3c2.5%201.4%204.5%203.2%207.5%204-.3%201.3-1.5%201.8-1.8%203.1v27c3.4.7%204.2-1.3%205.8-2.3.4%204.3%203.2%208.5%203%2012h-14.5zm-19.4%2014.5s5.3-4.5%205.3-4.7V199h3.8l-.1-26.3c1.5-1.6%204.6-3.8%205.3-5.4v42h-33.4c-.5-8.7-.6-17.7%209.6-15.8V190c-.3-.6-.9.1-1-.7%201.6-1.6%202.1-2%206.5-5.8l.1%2015.5h3.9zm-12.6%2018.6c.7%201%203.2%201%203-.8-.3-1.5-3.5-1-3%20.8'/%3e%3ccircle%20cx='224'%20cy='214.4'%20r='2'/%3e%3cpath%20d='M287%20165.8c2.5%201.3%204.5%203.2%207.6%204-.4%201.2-1.5%201.7-1.8%203v27c3.4.7%204.1-1.2%205.7-2.3.5%204.3%203.2%208.6%203.1%2012H287z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__uahRzTjq__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-is'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20strokeWidth='0'%20clip-path='url(%23a)'%3e%3cpath%20fill='%23003897'%20d='M0%200h666.67v480H0z'/%3e%3cpath%20d='M0%20186.67h186.67V0h106.67v186.67h373.33v106.67H293.34v186.67H186.67V293.34H0V186.67z'%20fill='%23fff'/%3e%3cpath%20d='M0%20213.33h213.33V0h53.333v213.33h400v53.333h-400v213.33H213.33v-213.33H0V213.33z'%20fill='%23d72828'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-it'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v479.997H0z'/%3e%3cpath%20fill='%23009246'%20d='M0%200h213.331v479.997H0z'/%3e%3cpath%20fill='%23ce2b37'%20d='M426.663%200h213.331v479.997H426.663z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__C1uAv91C__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-jm'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23000001'%20d='m0%200%20320%20240L0%20480zm640%200L320%20240l320%20240z'/%3e%3cpath%20fill='%23090'%20d='m0%200%20320%20240L640%200zm0%20480%20320-240%20320%20240z'/%3e%3cpath%20fill='%23fc0'%20d='M640%200h-59.6L0%20435.3V480h59.6L640%2044.7z'/%3e%3cpath%20fill='%23fc0'%20d='M0%200v44.7L580.4%20480H640v-44.7L59.6%200z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-jo'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='jo-a'%3e%3cpath%20fill-opacity='.7'%20d='M-117.8%200h682.6v512h-682.6z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23jo-a)'%20transform='translate(110.5)scale(.9375)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23000001'%20d='M-117.8%200h1024v170.7h-1024z'/%3e%3cpath%20fill='%23fff'%20d='M-117.8%20170.7h1024v170.6h-1024z'/%3e%3cpath%20fill='%23090'%20d='M-117.8%20341.3h1024V512h-1024z'/%3e%3cpath%20fill='red'%20d='m-117.8%20512%20512-256-512-256z'/%3e%3cpath%20fill='%23fff'%20d='m24.5%20289%205.7-24.9H4.7l23-11-15.9-19.9%2023%2011%205.6-24.8%205.7%2024.9L69%20233.2l-16%2019.9%2023%2011H50.6l5.7%2024.9-15.9-20z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-jp'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='jp-a'%3e%3cpath%20fill-opacity='.7'%20d='M-88%2032h640v480H-88z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23jp-a)'%20transform='translate(88%20-32)'%3e%3cpath%20fill='%23fff'%20d='M-128%2032h720v480h-720z'/%3e%3ccircle%20cx='523.1'%20cy='344.1'%20r='194.9'%20fill='%23bc002d'%20transform='translate(-168.4%208.6)scale(.76554)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-ke'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='ke-a'%20stroke-miterlimit='10'%20d='m-28.6%2047.5%201.8%201%2046.7-81c2.7-.6%204.2-3.2%205.7-5.8%201-1.8%205-8.7%206.7-17.7a58%2058%200%200%200-11.9%2014.7c-1.5%202.6-3%205.2-2.3%207.9z'/%3e%3c/defs%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200h640v144H0z'/%3e%3cpath%20fill='%23060'%20d='M0%20336h640v144H0z'/%3e%3cg%20id='ke-b'%20transform='matrix(3%200%200%203%20320%20240)'%3e%3cuse%20xlink:href='%23ke-a'%20width='100%25'%20height='100%25'%20stroke='%23000'/%3e%3cuse%20xlink:href='%23ke-a'%20width='100%25'%20height='100%25'%20fill='%23fff'/%3e%3c/g%3e%3cuse%20xlink:href='%23ke-b'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3cpath%20fill='%23b00'%20d='M640.5%20168H377c-9-24-39-72-57-72s-48%2048-57%2072H-.2v144H263c9%2024%2039%2072%2057%2072s48-48%2057-72h263.5z'/%3e%3cpath%20id='ke-c'%20d='M377%20312c9-24%2015-48%2015-72s-6-48-15-72c-9%2024-15%2048-15%2072s6%2048%2015%2072'/%3e%3cuse%20xlink:href='%23ke-c'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3cg%20fill='%23fff'%20transform='matrix(3%200%200%203%20320%20240)'%3e%3cellipse%20rx='4'%20ry='6'/%3e%3cpath%20id='ke-d'%20d='M1%205.8s4%208%204%2021-4%2021-4%2021z'/%3e%3cuse%20xlink:href='%23ke-d'%20width='100%25'%20height='100%25'%20transform='scale(-1)'/%3e%3cuse%20xlink:href='%23ke-d'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3cuse%20xlink:href='%23ke-d'%20width='100%25'%20height='100%25'%20transform='scale(1%20-1)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-kg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kg-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85%200h682.7v512H-85z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kg-a)'%20transform='translate(79.6)scale(.9375)'%3e%3cpath%20fill='red'%20d='M-128%200h768.8v512H-128z'/%3e%3cpath%20fill='%23ff0'%20d='M105.5%20261.1c13.6-16.6%2041.9-.4%2065-12.3-27.4%201.5-42.3-13.2-63.9-11.1%2022.4-13.8%2041.5%204.5%2066.5-2.8-33.1-2.8-31.7-17.7-61.9-19.8%2026.8-11.4%2040%2011.8%2066.3%206.5-31-7.1-35-25.3-58-29.2%2033.6-5%2031.4%2014.8%2064.3%2017.2-33.4-14.3-24.7-26.8-52.6-37.7%2031.3-.7%2029.2%2021%2061%2026.6-27.2-17.2-23.9-32.9-46.2-45.2%2026.5.5%2029%2027.6%2056.1%2036-24.1-19.1-17.8-35.3-38.6-52.4%2026.4%206.2%2022.5%2029.6%2050%2044.6-20.4-22.6-12.6-38.8-30.3-57.3%2025.4%208.1%2015.7%2030.4%2042%2051.6-15-24.9-5.7-40.8-20.6-61.7%2023.6%2012.1%2012.2%2034.9%2034%2057.5-10.3-25.5%200-41.3-10.5-63.9%2020.2%2015%208.2%2039.3%2024.5%2062.5-6-32%207.8-37.2%203.5-65.2%2015.3%2018.8-1.8%2037.6%2010%2065.3-1.5-31.5%2015.3-38.8%2012.4-64%2015.1%2022.6-8.5%2042.3%201.4%2066.5%202.5-29.8%2022.1-37.6%2022.4-60.8%2012%2021.3-14%2036.7-9.8%2065%208.5-31.2%2029.4-35%2032-56%207.1%2024.6-21.4%2036-19.7%2063.4%208.5-27.7%2034.6-31%2040-51.4%203.3%2026-22.4%2030.7-29.7%2059.5%2013.5-23.5%2037.2-25.4%2047.8-44-.8%2025.8-29.8%2029.2-38.7%2053.3%2016.7-20.5%2037.7-17%2054.4-35.1-1.8%2023.3-31.3%2022-47%2046.1%2018.1-16.7%2045.4-11.7%2059.3-26.1-.7%2020.6-36.9%2019-54%2037.5%2021-11.6%2047.8-4.8%2063.2-15.5-2.8%2018-41%2013.8-59.3%2028%2025.2-7%2044.7%203.7%2065-4-9.9%2017.5-44.6%206.4-63%2017.8%2022-3.7%2045.2%209.6%2065.1%205.3-6.5%2015.2-44.6-1-65%208.5%2024.4-.2%2040.3%2015.5%2063%2014.4-12.3%2013.8-45.7-5.1-65.2-1.9%2023.8%205%2042%2024.6%2060%2025.6-14.9%2011.3-42.5-14.5-65-11.3%2023.2%206.2%2042.6%2032.5%2055.8%2033.1-14.3%209.8-42.5-22.5-61.8-21.3%2023.5%2010.6%2034.2%2037.5%2049.7%2041.3-19.1%206.1-37.9-29.2-58.4-30.5%2023.8%2015%2025.1%2038%2043.4%2048.2-19.3%204.7-33-35.2-53.3-38.6%2019.5%2014.3%2022.5%2045%2035.4%2054.6-19.6%201-26.7-40.7-46.8-46.7%2017.2%2014.4%2013.1%2045.6%2026.5%2059-20.4-4.3-17.8-40.6-39.1-52.9%2015.3%2019.4%207.5%2046.9%2017.5%2062.4-19.9-8-11.3-40.6-30.2-59%2010.3%2020.6-.8%2044.6%207.4%2064.5-18.2-8.9-6-47.4-19.9-62.7%206.4%2023.8-5.4%2043.5-.6%2064.8-18.6-21.5%202.8-43.2-13.3-65.1%204.2%2025.1-13.4%2042.7-10.6%2063.7-14.7-17.2%208-44.7-3.5-66.4%202.4%2024.7-20.3%2046.4-18.7%2062-12-20%2013.3-43.6%206.5-66.3-1.4%2023.6-24.4%2036.4-28.7%2057.9-7.7-23.7%2019.6-40.8%2017.2-64.1-7.8%2022.1-30%2031-37.8%2052.5-6.4-23.7%2026-36.2%2026.8-61-10%2023.2-36.5%2028.4-45.3%2046.2-3.3-23.5%2033.8-34%2035.2-56.3-12%2021.4-41%2022.3-51%2039.3-1.5-23.4%2037.6-26.3%2043.7-50.8-11.9%2018.2-43.7%2015.9-57%2030.7%202.1-21.7%2044.4-23%2051.2-42.6-15.8%2015.2-45%209-61.5%2021%209.2-21.4%2048.9-16.9%2057.8-32.3-17.5%209.1-48.6.2-64%209.4%2014-20.2%2044.8-8.1%2062.3-22-28.4%204.1-45.5-7.2-65.2-2z'/%3e%3cpath%20fill='%23ff0'%20d='M356%20256.1a99.2%2099.2%200%201%201-198.5%200%2099.2%2099.2%200%200%201%20198.4%200z'/%3e%3cpath%20fill='red'%20d='M343.2%20256.3a86.3%2086.3%200%201%201-172.6%200%2086.3%2086.3%200%200%201%20172.6%200'/%3e%3cpath%20fill='%23ff0'%20d='M331.2%20256.5a74%2074%200%201%201-148.2%200%2074%2074%200%200%201%20148.2%200'/%3e%3cpath%20fill='red'%20d='M194%20208c20.5-.5%2046%201.4%2062.9%2014.8a97.1%2097.1%200%200%201%2060.5-14.3l11%2020.1a101%20101%200%200%200-50%208.2%2085.3%2085.3%200%200%201%2034.6%2072.1c-2.7%203.4-7%207.1-9.7%2010.5%204-28.5-11-60.3-32.9-77%2017.8%2025.6%2028.3%2048.6%2025.4%2080.4l-10%206.4c4.6-28-2-61-22.7-80%2012%2017.5%2023.8%2049%2016.4%2081-3.2%201-8.2%203.7-11.4%204.6a96%2096%200%200%200-10.8-78.7c-13.8%2019.8-18.3%2050-10.5%2078-3.8-1-6.7-2.2-10.6-3.1-5.7-30%202.2-64%2015.9-81.7-14%208.1-27.1%2042.7-23.4%2078l-9.3-4.3c-4.5-26.3%207.4-60.6%2024.5-80.4-19.4%2012.2-35.2%2042.3-32.5%2074.6-3-2.6-5.7-3.9-8.7-6.6-3.4-28.2%2013-56.6%2032.1-73.6-16.1-7.3-30-8.7-50-8.4%203.1-6.5%206-14.1%209.2-20.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__Cda$e8n5__\"","export default \"__VITE_ASSET__BWOqLVhg__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-km'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='km-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23km-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23ff0'%20d='M0%200h768.8v128H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20128h768.8v128H0z'/%3e%3cpath%20fill='%23be0027'%20d='M0%20256h768.8v128H0z'/%3e%3cpath%20fill='%233b5aa3'%20d='M0%20384h768.8v128H0z'/%3e%3cpath%20fill='%23239e46'%20d='M0%200v512l381.9-255.3z'/%3e%3cpath%20fill='%23fff'%20d='M157.2%20141.4c-85-4.3-123.9%2063.5-123.8%20115.9-.2%2062%2058.6%20113%20112.8%20110C117%20353.5%2081.2%20314.6%2081%20257c-.3-52.1%2029.5-97.5%2076.3-115.6z'/%3e%3cpath%20fill='%23fff'%20d='m156%20197-12-9.3-14.6%204.6%205.2-14.4-8.8-12.4%2015.2.6%209-12.3%204.3%2014.7%2014.4%204.8-12.6%208.5zm-.3%2052.1-12-9.4-14.6%204.6%205.3-14.3-8.9-12.4%2015.3.5%209-12.2%204.2%2014.6%2014.5%204.9-12.7%208.5zm.2%2052.6-12-9.4-14.5%204.6%205.2-14.3-8.8-12.4%2015.2.5%209-12.2%204.3%2014.6%2014.4%204.8-12.6%208.6zm-.2%2053-12-9.3L129%20350l5.3-14.4-8.9-12.4%2015.3.6%209-12.3%204.2%2014.7%2014.5%204.8-12.7%208.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-kn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kn-a'%3e%3cpath%20fill-opacity='.7'%20d='M-80.1%200h682.7v512H-80.1z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kn-a)'%20transform='translate(75.1)scale(.9375)'%3e%3cpath%20fill='%23ffe900'%20d='M-107.8.2h737.6v511.3h-737.6z'/%3e%3cpath%20fill='%2335a100'%20d='m-108.2.2.8%20368.6L466.6%200z'/%3e%3cpath%20fill='%23c70000'%20d='m630.7%20511.5-1.4-383.2-579%20383.5z'/%3e%3cpath%20fill='%23000001'%20d='m-107.9%20396.6.5%20115.4%20125.3-.2%20611.7-410.1L629%201.4%20505.2.2z'/%3e%3cpath%20fill='%23fff'%20d='m380.4%20156.6-9.8-42.2%2033.3%2027%2038-24.6-17.4%2041.3%2033.4%2027-44.2-1.5-17.3%2041.3-9.9-42.2-44.1-1.5zm-275.2%20179-9.9-42.3%2033.3%2027%2038-24.6-17.4%2041.3%2033.4%2027-44.1-1.5-17.4%2041.3-9.8-42.2-44.1-1.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-kp'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kp-a'%3e%3cpath%20fill-opacity='.7'%20d='M5%20.1h682.6V512H5.1z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kp-a)'%20transform='translate(-4.8%20-.1)scale(.93768)'%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20d='M776%20511.5H-76V.5h852z'/%3e%3cpath%20fill='%233e5698'%20d='M776%20419H-76v92.5h852z'/%3e%3cpath%20fill='%23c60000'%20d='M776%20397.6H-76V114.4h852z'/%3e%3cpath%20fill='%233e5698'%20d='M776%20.6H-76V93h852z'/%3e%3cpath%20fill='%23fff'%20d='M328.5%20256c0%2063.5-53%20115-118.6%20115S91.3%20319.5%2091.3%20256s53-114.8%20118.6-114.8c65.5%200%20118.6%2051.4%20118.6%20114.9z'/%3e%3cpath%20fill='%23c40000'%20d='m175.8%20270.6-57-40.7%2071-.2%2022.7-66.4%2021.1%2066.1%2071-.4-57.9%2041.2%2021.3%2066.1-57-40.7-58%2041.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-kr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kr-a'%3e%3cpath%20fill-opacity='.7'%20d='M-95.8-.4h682.7v512H-95.8z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kr-a)'%20transform='translate(89.8%20.4)scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M-95.8-.4H587v512H-95.8Z'/%3e%3cg%20transform='rotate(-56.3%20361.6%20-101.3)scale(10.66667)'%3e%3cg%20id='kr-c'%3e%3cpath%20id='kr-b'%20fill='%23000001'%20d='M-6-26H6v2H-6Zm0%203H6v2H-6Zm0%203H6v2H-6Z'/%3e%3cuse%20xlink:href='%23kr-b'%20width='100%25'%20height='100%25'%20y='44'/%3e%3c/g%3e%3cpath%20stroke='%23fff'%20d='M0%2017v10'/%3e%3cpath%20fill='%23cd2e3a'%20d='M0-12a12%2012%200%200%201%200%2024Z'/%3e%3cpath%20fill='%230047a0'%20d='M0-12a12%2012%200%200%200%200%2024A6%206%200%200%200%200%200Z'/%3e%3ccircle%20cy='-6'%20r='6'%20fill='%23cd2e3a'/%3e%3c/g%3e%3cg%20transform='rotate(-123.7%20191.2%2062.2)scale(10.66667)'%3e%3cuse%20xlink:href='%23kr-c'%20width='100%25'%20height='100%25'/%3e%3cpath%20stroke='%23fff'%20d='M0-23.5v3M0%2017v3.5m0%203v3'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-kw'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kw-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23kw-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M0%20170.6h1024v170.7H0z'/%3e%3cpath%20fill='%23f31830'%20d='M0%20341.3h1024V512H0z'/%3e%3cpath%20fill='%2300d941'%20d='M0%200h1024v170.7H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200v512l255.4-170.7.6-170.8z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__$qLAcyK___\"","export default \"__VITE_ASSET__D$N7gzCv__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-la'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='la-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23la-a)'%3e%3cpath%20fill='%23ce1126'%20d='M-40%200h720v480H-40z'/%3e%3cpath%20fill='%23002868'%20d='M-40%20119.3h720v241.4H-40z'/%3e%3cpath%20fill='%23fff'%20d='M423.4%20240a103.4%20103.4%200%201%201-206.8%200%20103.4%20103.4%200%201%201%20206.8%200'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-lb'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='lb-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23lb-a)'%20transform='translate(80)scale(.9375)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23EE161F'%20d='M-128%20384h768v128h-768zm0-384h768v128h-768z'/%3e%3cpath%20fill='%23fff'%20d='M-128%20128h768v256h-768z'/%3e%3c/g%3e%3cpath%20fill='%2300A850'%20d='M252.1%20130c-7.8%2015.5-13%2015.5-26%2026-5.2%205.1-13%207.7-2.6%2013-10.5%205.1-15.7%207.7-20.9%2018.1l2.6%202.6s10-4.8%2010.4-2.6c1.8%202.1-13%2010-14.9%2011.3l-11%207c-13.1%2010.3-21%207.7-28.7%2023.3l26-2.6c5.2%2018.2-13%2020.8-26%2028.6l-20.9%2013c5.3%2018.2%2020.9%207.8%2033.9%202.6l2.6%202.6v5.2l-26%2013s-30.8%2017.6-31.3%2018.2c-.2%201%200%205.2%200%205.2%2010.4%202.6%2026%205.2%2036.5%200%2013-5.2%2015.6-10.4%2031.2-10.4a100.6%20100.6%200%200%201-52%2020.8v10.4c15.6%200%2026%200%2039-2.6l33.8-10.4c7.8%200%2015.7%207.8%2013%2015.6-7.7%2028.6-39%2023.4-49.4%2046.8L213%20369c10.4-5.2%2020.8-10.3%2033.8-7.7%2015.6%205.2%2015.6%2015.6%2036.4%2020.8l-5.2-13c5.2%202.6%2010.4%202.6%2015.7%205.2%2013%205.2%2015.6%2010.4%2031.2%207.8-13-15.6-15.6-13-26-23.4-10.4-15.6-15.7-39%200-41.6l18.2%205.2c18.2%202.6%2018.2-2.6%2044.2%207.8%2015.7%205.2%2020.9%2013%2039%207.8-7.7-18.2-36.3-31.2-54.6-36.4%2020.9-13%2015.6%205.2%2044.3-2.6v-5.2C369.3%20278%20361.4%20265%20332.8%20265l44.3-5.2v-5.2s-43.7-11.4-44.7-11.9c.3-1.3%201.4-3.3%204.3-4.5%208.3%205.4%2033.3%204.8%2034.8%204.7-.8-6.4-12.7-11.7-23-16.9%200%200-44.7-27.5-44.9-29.9.9-7%2018.3%201.1%2037%206.5-5.2-10.4-15.6-15.6-26-18.2l15.6-2.6c-10.4-23.4-36.4-20.8-52-31.2-10.5-7.8-10.5-13-26.1-20.7z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23fff'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='3.2'%20d='M224%20303c1.9-6.1%204.4-11.6-7.2-16.9-11.6-5.3%205.8%2021.1%207.2%2017zm13.7-12.3c-2.3.3-3.6%208.8%201.1%2011.2%205.2.8%201-11.1-1.1-11.2m13.5-1c-2.4.8-2.5%2012.8%206%2010.6%208.6-2.1%200-11.5-6-10.5zM267%20259c1.8-3-.1-15-7.4-10-7.4%205.1%205%2010.8%207.4%2010m-16-10c2.3-.9%202.5-8.3-4-6.3-6.3%201.9%202.3%207.8%204%206.3m-14.4%202.9s-4.5-6.2-8-4.9c-4.3%204.2%208.3%205%208%204.9M187%20271.7c1.9.2%2016-2.3%2020.9-7.8%204.9-5.5-25.1%202.3-25.1%202.4%200%20.1%202.8%204.9%204.2%205.4m141.1-35c.7-1.3-7.5-7.1-12.4-4.8-1.3%204.3%2012.4%205.7%2012.4%204.8m-27.8-14c1.6-2.2-3.5-11.3-13.7-6.2-10.2%205%2010.7%209.8%2013.7%206.3zm-32.1-5.3s2.5-8.2%208.6-6.6c7%205.3-8.3%206.9-8.6%206.6m-6-6.2c-1-2.3-7.3-1-14.6%203.9-7.4%204.7%2016.8%201.4%2014.6-4zm18.7-22.1s6.5-3%208.5%200c2.7%204.3-8.6%200-8.5%200m-5.5-2.9c-1.3-2.6-8.5-2.9-8.3%201-1.2%203%209.4%202.4%208.3-1m-17.2%200c-.7-1.5-11%200-14%206.2%205%202.4%2016.3-2.3%2014-6.2m-22%206.3s-13.4%208.3-14.3%2014.3c.4%205.2%2016.8-9.4%2016.8-9.4s1.4-5.8-2.4-4.9zm-14.9-7.5c.4-1.7%206.7-5.6%207.2-5.3.5%201.7-5.1%206.3-7.2%205.3m4.3%2031.6c.3-2.5-16-2.3-9.9%205.2%205.2%206.3%2011-4.1%209.9-5.2m-15%2010.7c-.8-1.6-2-6-4.2-6.4-1.9%200-11.7%202-12.5%203.6-.4%201.3%204.1%209.4%205.6%209.6%201.8.7%2010.9-6%2011.2-6.8zm88.4%2055.2c.5-1.8%2017.3-7.5%2023-2%206.8%209.3-23.4%205-23%202m46%2010.9c3.7-6.2-11.3-13.6-17.6-6.5%202.2%208.5%2014.6%2011.6%2017.6%206.5'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-lc'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%2365cfff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='m318.9%2042%20162.7%20395.3-322.6.9z'/%3e%3cpath%20fill='%23000001'%20d='m319%2096.5%20140.8%20340-279%20.8z'/%3e%3cpath%20fill='%23ffce00'%20d='m318.9%20240.1%20162.7%20197.6-322.6.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__ebA2J1OA__\"","export default \"__VITE_ASSET__BvF64tyo__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-lr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='lr-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23lr-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M0%200h767.9v512H0z'/%3e%3cpath%20fill='%23006'%20d='M0%200h232.7v232.8H0z'/%3e%3cpath%20fill='%23c00'%20d='M0%20464.9h767.9V512H0z'/%3e%3cpath%20fill='%23c00'%20d='M0%20465.4h767.9V512H0zm0-92.9h767.9v46.2H0zm0-93.2h766V326H0zM232.7%200h535.1v46.5H232.7zm0%20186h535.1v46.8H232.7zm0-92.7h535.1v46.5H232.7z'/%3e%3cpath%20fill='%23fff'%20d='m166.3%20177.5-50.7-31-50.4%2031.3%2018.7-50.9-50.3-31.4%2062.3-.4%2019.3-50.7L135%2095h62.3l-50.1%2031.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ls'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23009543'%20d='M0%20336h640v144H0z'/%3e%3cpath%20fill='%2300209f'%20d='M0%200h640v144H0z'/%3e%3cpath%20stroke='%23000'%20stroke-width='1.6'%20d='M319.6%20153c-2.7%200-5.4%203-5.4%203l.3%2032.4-10.3%2010.7h8.3v18.5l-49%2066-7.2-2.6-12.7%2027s31.3%2019.6%2076.7%2019c49.8-.5%2076.9-19.9%2076.9-19.9l-13-26.6-6.5%202.8-49.6-65.6v-19.1h8.2L325.1%20188v-32.2s-2.7-3-5.5-2.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='8'%20d='M336.7%20230.4h-33.9s-12.2-25.9-10.3-44c2-18.4%2012.6-27.1%2026.6-27.3%2016.6-.1%2025.2%208.1%2027.8%2026.6%202.6%2018.3-10.2%2044.7-10.2%2044.7z'/%3e%3cpath%20fill='%23fff'%20d='M260.5%20292.1c-.6.7-4.7%208.9-4.7%208.9l7-1.5zm4%2010.5-7.4%202.4%208.9%203.5zm3.3-10.3%203.7%2010.9%209-2.6-2.3-5.2zm5.8%2014.8%201.2%204.4%2012%203-4.8-10.2zm13.2-9.3%204.3%2010.2%209-3.5-3-4.5zm6%2013.9%201.4%203.8%2014%202-5.9-9.2-9.6%203.4zm13.4-11%205.2%209.1%2013-4.8-1.4-3.5-16.8-.7zm7.6%2012.4%202.7%204.8%2016.2-.5-6-9-13%204.7zm17.1-12%204.4%207.6%2010.4-5-2.8-4zm17%205.8-10.3%205.1%202.7%204.5%2013.8-2.2zm3.3-8%205.3%206.7%208.7-6.9-3-3zm15.9%203.5-8.3%206.3%202.2%203.9%2011.4-3zm11.4-13%202%202.9-5.7%208.5-5.9-7.6zm3.9%207.3%203.5%207-7%202.4-.6-3.3%204-6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-lt'%3e%3cg%20fillRule='evenodd'%20transform='matrix(.64143%200%200%20.96773%200%200)'%20strokeWidth='1pt'%3e%3crect%20transform='matrix(.93865%200%200%20.69686%200%200)'%20rx='0'%20ry='0'%20width='1063'%20height='708.66'%20fill='%23007308'/%3e%3crect%20transform='matrix(.93865%200%200%20.69686%200%200)'%20rx='0'%20ry='0'%20width='1063'%20y='475.56'%20height='236.22'%20fill='%23bf0000'/%3e%3cpath%20fill='%23ffb300'%20d='M0%200h997.77v164.61H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-lu'%3e%3cpath%20fill='%2300a1de'%20d='M0%20240h640v240H0z'/%3e%3cpath%20fill='%23ed2939'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-lv'%3e%3cg%20fillRule='evenodd'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480.003H0z'/%3e%3cpath%20fill='%23ab231d'%20d='M0%200h640v192.001H0zM0%20288.002h640v192.001H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ly'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ly-a'%3e%3cpath%20d='M166.7-20h666.6v500H166.7z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23ly-a)'%20transform='matrix(.96%200%200%20.96%20-160%2019.2)'%3e%3cpath%20fill='%23239e46'%20d='M0-20h1000v500H0z'/%3e%3cpath%20fill='%23000001'%20d='M0-20h1000v375H0z'/%3e%3cpath%20fill='%23e70013'%20d='M0-20h1000v125H0z'/%3e%3cpath%20fill='%23fff'%20d='M544.2%20185.8a54.3%2054.3%200%201%200%200%2088.4%2062.5%2062.5%200%201%201%200-88.4M530.4%20230l84.1-27.3-52%2071.5v-88.4l52%2071.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ma'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23c1272d'%20d='M640%200H0v480h640z'/%3e%3cpath%20fill='none'%20stroke='%23006233'%20stroke-width='11.7'%20d='M320%20179.4%20284.4%20289l93.2-67.6H262.4l93.2%2067.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-mc'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23f31830'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20240h640v240H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__ClHHUfTW__\"","export default \"__VITE_ASSET__DqNiN3_A__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mf'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mg'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fc3d32'%20d='M213.3%200H640v240H213.3z'/%3e%3cpath%20fill='%23007e3a'%20d='M213.3%20240H640v240H213.3z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h213.3v480H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mh'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%233b5aa3'%20d='M0%200h639.9v480H0z'/%3e%3cpath%20fill='%23e2ae57'%20d='M0%20467%20639.9%200v87L0%20480z'/%3e%3cpath%20fill='%23fff'%20d='M22.4%20480%20640%20179.2l-.1-95.5L0%20480zm153-464.8L169%20118l-27-65.6%2010.4%2069.8-41.9-56.4%2027.5%2064.3-55-42.6%2042.8%2053.6-62.1-27.6%2054.4%2041.2-67.7-9%2064%2025.4L14%20180.3l100.6%206.7-63.7%2026.2%2067-9-54.3%2040%2063-27.6-43%2054%2054.6-41.3-27%2062.9%2043.6-54.7-11.8%2068.1%2027.5-63.7%206.2%20100.7%209.7-100.4%2023.7%2064-9-69%2043.4%2054.8-28.6-64%2054.6%2044-43.4-54.9%2064.9%2027-57.4-41.9%2069.9%2011.8-67-25.7%20104.1-6.5-104-9.7%2068.5-22.8-71%209%2058.6-41-66%2026.5%2045.6-55.3-55.6%2043.4%2026.7-66.4-43.1%2056.4%209.3-70.4-25.7%2066.5-9.6-102.8z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-mk'%3e%3cpath%20fill='%23d20000'%20d='M0%200h640v480H0z'/%3e%3cpath%20d='M0%200h96l224%20231.43L544%200h96L0%20480h96l224-231.43L544%20480h96zm640%20192v96L0%20192v96zM280%200l40%20205.714L360%200zm0%20480l40-205.714L360%20480z'%20fill='%23ffe600'/%3e%3ccircle%20r='77.143'%20cy='240'%20cx='320'%20fill='%23ffe600'%20stroke='%23d20000'%20strokeWidth='17.143'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ml'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='red'%20d='M425.8%200H640v480H425.7z'/%3e%3cpath%20fill='%23009a00'%20d='M0%200h212.9v480H0z'/%3e%3cpath%20fill='%23ff0'%20d='M212.9%200h214v480h-214z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-mm'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fecb00'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2334b233'%20d='M0%20160h640v320H0z'/%3e%3cpath%20fill='%23ea2839'%20d='M0%20320h640v160H0z'/%3e%3cg%20transform='translate(320%20256.9)scale(176.87999)'%3e%3cpath%20id='mm-a'%20fill='%23fff'%20d='m0-1%20.3%201h-.6z'/%3e%3cuse%20xlink:href='%23mm-a'%20width='100%25'%20height='100%25'%20transform='rotate(-144)'/%3e%3cuse%20xlink:href='%23mm-a'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3cuse%20xlink:href='%23mm-a'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23mm-a'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20fill='%23ffd900'%20id='flag-icons-mn'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23da2032'%20d='M0%200h640v480H0Z'/%3e%3cpath%20fill='%230066b3'%20d='M213.3%200h213.4v480H213.3Z'/%3e%3ccircle%20cx='106.7'%20cy='181.8'%20r='40'/%3e%3ccircle%20cx='106.7'%20cy='163.6'%20r='43.6'%20fill='%23da2032'/%3e%3ccircle%20cx='106.7'%20cy='170.9'%20r='29.1'/%3e%3cpath%20d='M109.7%2076.4a8.7%208.7%200%200%200-5.2%207.5c-.2%202.5.9%205.3%201%207.7%200%204.2-4.3%205.6-4.3%2011.5%200%202%201.9%204.3%201.9%209.6-.4%202.8-2%203.5-3.7%203.7a3.6%203.6%200%200%201-3.6-3.7%203.6%203.6%200%200%201%201-2.5%203.6%203.6%200%200%201%20.4-.3c.8-.9%202-1.2%202-3.4%200-1.1-.8-2.2-1.5-4.2s-.2-5.2%201.4-7.1c-2.6%201-4.1%203.4-5%205.6-.8%202.7%200%204.2-1.2%206.5-.7%201.4-1.5%202-2.3%203.2-1%201.4-2%204.4-2%205.9a18.2%2018.2%200%200%200%2036.3%200c0-1.5-1.1-4.5-2-5.9-.9-1.2-1.7-1.8-2.4-3.2-1.2-2.3-.4-3.8-1.3-6.5-.8-2.2-2.3-4.6-4.9-5.6%201.6%202%202%205.2%201.4%207.1-.7%202-1.4%203-1.4%204.2%200%202.2%201.1%202.5%202%203.4a3.6%203.6%200%200%201%20.3.3%203.6%203.6%200%200%201%201%202.5%203.6%203.6%200%200%201-3.6%203.7c-2-.3-3.5-1.2-3.7-3.7%200-7%203-7.4%203-12.6%200-7.4-6.6-10.9-6.6-16.3%200-1.8.4-5%203-7.4M26.7%20229H63v174.5H26.7Zm123.6%200h36.4v174.5h-36.4zm-80%200H143l-36.3%2021.8Zm0%2029H143v14.6H70.3Zm0%20101.9H143v14.6H70.3Zm0%2021.8H143l-36.3%2021.8Z'/%3e%3ccircle%20cx='106.7'%20cy='316.4'%20r='36.4'/%3e%3cg%20fill='%23da2032'%20transform='translate(-38.8%2032.7)scale(.72727)'%3e%3ccircle%20cx='200'%20cy='363.5'%20r='10'/%3e%3ccircle%20cx='200'%20cy='416.5'%20r='10'/%3e%3cpath%20d='M200%20334a29.5%2029.5%200%200%201%200%2059%2023.5%2023.5%200%200%200%200%2047v6a29.5%2029.5%200%200%201%200-59%2023.5%2023.5%200%200%200%200-47z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-mo'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300785e'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fbd116'%20d='m295%20108.7%2040.5%2029.5L320%2090.5l-15.5%2047.7%2040.6-29.5z'/%3e%3cg%20id='mo-a'%3e%3cpath%20fill='%23fff'%20d='M320%20331.6H217.5a146.3%20146.3%200%200%201-3.8-4H320a2.1%202.1%200%200%201%201.4%202c0%20.8-.5%201.7-1.4%202m0-31.3a13%2013%200%200%200%201.2-7.6%2012.4%2012.4%200%200%200-1.2-3.8%2082%2082%200%200%201-32.5%2019%2081%2081%200%200%201-23.5%203.5h-63.1a144.4%20144.4%200%200%200%205.8%208h61c20%200%2038.2-7.2%2052.3-19.1m-109.6-24.7a32.3%2032.3%200%200%201-9.7%202%2081%2081%200%200%200%2060.8%2027.5%2080.9%2080.9%200%200%200%2058.5-25%20441%20441%200%200%200%204.5-58.8%20441%20441%200%200%200-4.5-67.7c-6.6%206-19%2018.7-24.8%2038.3A81%2081%200%200%200%20292%20215a80.7%2080.7%200%200%200%2013.7%2045%2080.7%2080.7%200%200%201-17-49.5c0-12.4%202.8-24.2%207.8-34.7a32.5%2032.5%200%200%201-7.5-13%2080.7%2080.7%200%200%200-10.5%2040c0%2018%205.9%2034.7%2015.9%2048.1a95%2095%200%200%200-73.4-29.4%2032.6%2032.6%200%200%201%206.8%208.9%2095%2095%200%200%201%2068.6%2029.4%2095%2095%200%200%200-61-22.2%2095%2095%200%200%200-36.7%207.3%2081.2%2081.2%200%200%200%2082.6%2052.2c-4.7.8-9.5%201.3-14.4%201.3a80.8%2080.8%200%200%201-56.4-22.8zM320%20364.4h-53.1a143.5%20143.5%200%200%200%2053.1%2010.1%2011%2011%200%200%200%201.3-5%2011%2011%200%200%200-1.3-5.1m0-24.5h-93.6a143.8%20143.8%200%200%200%207.8%206.2H320a4.6%204.6%200%200%200%201.3-3.1%204%204%200%200%200-1.3-3.1m0%2012.5h-76.7a143.6%20143.6%200%200%200%2014.4%208H320a7.6%207.6%200%200%200%201.2-4.2%207.5%207.5%200%200%200-1.2-3.8'/%3e%3cpath%20fill='%23fbd116'%20d='m200.5%20174.8%2025.4%2023.6-6.7-34-14.6%2031.4%2030.3-16.8zm36.9-32%2034.7.6-27.7-21%2010.1%2033.3%2011.3-32.9z'/%3e%3c/g%3e%3cuse%20xlink:href='%23mo-a'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BCQKfom$__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mq'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23231f1e'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300a650'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23ef1923'%20d='m0%200%20320%20240L0%20480z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mr'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23cd2a3e'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23006233'%20d='M0%2072h640v336H0z'/%3e%3cpath%20fill='%23ffc400'%20d='M470%20154.6a150%20150%200%200%201-300%200%20154.9%20154.9%200%200%200-5%2039.2%20155%20155%200%201%200%20310%200%20154.4%20154.4%200%200%200-5-39.2'%20class='mr-st1'/%3e%3cpath%20fill='%23ffc400'%20d='m320%2093.8-13.5%2041.5H263l35.3%2025.6-13.5%2041.4%2035.3-25.6%2035.3%2025.6-13.5-41.4%2035.3-25.6h-43.6z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DpqncORN__\"","export default \"__VITE_ASSET__BY1E7F6L__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mu'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%2300a04d'%20d='M0%20360h640v120H0z'/%3e%3cpath%20fill='%23151f6d'%20d='M0%20120h640v120H0z'/%3e%3cpath%20fill='%23ee2737'%20d='M0%200h640v120H0z'/%3e%3cpath%20fill='%23ffcd00'%20d='M0%20240h640v120H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mv'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23d21034'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23007e3a'%20d='M120%20120h400v240H120z'/%3e%3ccircle%20cx='350'%20cy='240'%20r='80'%20fill='%23fff'/%3e%3ccircle%20cx='380'%20cy='240'%20r='80'%20fill='%23007e3a'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mw'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23f41408'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2321873b'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23f31509'%20d='M220.5%20141c22.3-49.2%2084.5-72.8%20138.8-52.5a98.4%2098.4%200%200%201%2058%2052.5zm-26%206.4a332.3%20332.3%200%200%201-52.4-7.8c-4.1-1.3-4.3-3.6-3.8-5.3.5-1.7%203.1-3.6%206.2-3%205.6%201.4%2028.8%207%2050%2016.1m124.6-85.9c-4.2-21-5.2-44-4.8-48C314.7%209.6%20317%209%20319%209s4.7%201.8%204.7%204.7c0%205.3-.1%2027-4.6%2048zm11.6.5a249%20249%200%200%201-.3-48.2c.8-3.9%203.2-4.4%205.1-4.2%202%20.1%204.5%202.1%204.2%205-.5%205.3-2.6%2026.9-9%2047.4m10.4%201.3c-.2-21.3%203-44.3%204.1-48%201.1-3.9%203.6-4.2%205.5-3.9%202%20.3%204.3%202.5%203.8%205.3-1%205.3-5.2%2026.6-13.4%2046.6m11%202.2c1.8-21.2%207.3-43.8%208.8-47.5%201.5-3.7%204-3.8%205.8-3.4%202%20.5%204%202.8%203.3%205.6-1.6%205.1-7.7%2026-17.8%2045.3zm10.9%203.2c3.9-21%2011.5-43.1%2013.3-46.7%201.9-3.5%204.3-3.5%206.2-2.9%201.8.6%203.7%203.2%202.7%205.8A264%20264%200%200%201%20363%2068.7m10.1%203.8c5.8-20.7%2015.5-42%2017.7-45.5%202.2-3.4%204.6-3.1%206.4-2.3%201.8.7%203.4%203.4%202.1%206-2.5%204.8-12.5%2024.4-26.2%2041.8m10%204.7a262.9%20262.9%200%200%201%2022-43.9c2.4-3.2%204.9-2.7%206.6-1.8a4.4%204.4%200%200%201%201.5%206.1c-3%204.6-14.9%2023.4-30.1%2039.6m9.4%205.5c9.7-19.4%2023.3-39%2026.1-42%202.8-3%205.2-2.3%206.8-1.3a4.4%204.4%200%200%201%201%206.2c-3.5%204.4-17.2%2022.1-34%2037zm8.8%206.2c11.6-18.6%2027-37%2030.1-39.7%203-2.8%205.4-2%206.9-.8a4.3%204.3%200%200%201%20.3%206.2c-3.8%204.1-19.1%2020.7-37.3%2034.3m8.3%206.9a284%20284%200%200%201%2033.8-37.2c3.3-2.5%205.5-1.5%206.9-.3a4.3%204.3%200%200%201-.3%206.3c-4.1%203.8-21%2019.1-40.4%2031.2m7.6%207.5A278.4%20278.4%200%200%201%20454.4%2069c3.6-2.3%205.7-1.1%207%20.3%201.2%201.3%201.5%204.4-1%206.2a306%20306%200%200%201-43.2%2027.8m6.5%207.8A297.1%20297.1%200%200%201%20464%2079.6c3.7-2%205.7-.6%206.8.9%201.2%201.4%201.1%204.5-1.4%206.1-4.8%203-24.3%2015.6-45.7%2024.5m5.9%208.3a307%20307%200%200%201%2043-28.1c4-1.7%205.9-.2%206.9%201.3%201%201.6.6%204.6-2%206a320.8%20320.8%200%200%201-48%2020.8zm5.4%209.6a313.4%20313.4%200%200%201%2045.8-24.4c4.1-1.4%205.8.3%206.6%201.9.9%201.6.3%204.6-2.6%205.8-5.3%202.2-27%2011.4-49.8%2016.7m4.2%209.2a320%20320%200%200%201%2048-20.8c4.2-1%205.7.8%206.4%202.5.6%201.6-.3%204.6-3.2%205.5-5.5%201.9-28%209.3-51.2%2012.8m3.4%209.8a324.5%20324.5%200%200%201%2049.8-16.9c4.2-.6%205.6%201.2%206.1%203%20.5%201.7-.7%204.5-3.7%205.3-5.7%201.3-28.8%207-52.2%208.6M307.8%2062a252.4%20252.4%200%200%201-9.7-47.4c0-3.9%202.3-4.8%204.2-5%202-.1%205%201.5%205.2%204.3.5%205.3%202.6%2026.9.4%2048.1zm-11%201.3a251%20251%200%200%201-14.3-46.4c-.4-4%201.8-5%203.7-5.3%202-.3%205%201%205.6%203.8a263%20263%200%200%201%205%2047.9m-11%202.2A259%20259%200%200%201%20267%2020.3c-.8-3.9%201.3-5.1%203.2-5.6%201.9-.4%205%20.6%205.9%203.4%201.5%205.1%207.7%2026%209.6%2047.3zm-10.5%203A264%20264%200%200%201%20252.5%2025c-1.1-3.8.8-5.2%202.6-5.8%201.9-.6%205.1.2%206.2%202.8%202%205%2010.2%2025.4%2014%2046.4zM265.2%2072a270.4%20270.4%200%200%201-27-41.5c-1.4-3.7.4-5.3%202.2-6%201.8-.8%205-.2%206.4%202.4%202.5%204.8%2012.5%2024.5%2018.4%2045.1m-10.3%205a275.6%20275.6%200%200%201-31-39.2c-1.7-3.5-.1-5.2%201.6-6.1%201.7-.9%205-.6%206.6%201.9%203%204.6%2015%2023.3%2022.8%2043.4m-9.4%205.4A285.2%20285.2%200%200%201%20211%2045.7c-2.1-3.4-.7-5.2%201-6.3%201.5-1%205-1%206.7%201.4%203.4%204.3%2017.1%2022%2026.8%2041.5zm-8.7%206a292.2%20292.2%200%200%201-37.9-33.9c-2.4-3.2-1.1-5%20.4-6.2a5.5%205.5%200%200%201%206.8.8c3.8%204%2019.2%2020.7%2030.7%2039.3m-8.5%207a299%20299%200%200%201-41-30.7c-2.8-3-1.7-5-.3-6.3a5.5%205.5%200%200%201%206.9.3c4.2%203.7%2021%2019%2034.4%2036.6zm-7.4%207A306.6%20306.6%200%200%201%20177.2%2075c-3-2.8-2.1-4.8-.8-6.2%201.2-1.4%204.5-2.1%206.9-.3a292%20292%200%200%201%2037.6%2034zm-7%208.2a313%20313%200%200%201-46.2-23.8c-3.3-2.5-2.6-4.7-1.5-6.1%201.1-1.5%204.3-2.5%206.9-.9%204.8%203.1%2024.3%2015.5%2040.8%2030.8m-6.3%208.8c-22.2-7-44.9-17.6-48.4-19.9-3.6-2.2-3-4.4-2.1-6s4-2.8%206.8-1.4c5%202.7%2025.8%2013.5%2043.7%2027.3m-5.3%209c-22.8-5.3-46.3-14-50.1-16-3.7-2-3.5-4.2-2.6-5.8.8-1.6%203.7-3.1%206.6-2%205.3%202.3%2027%2011.4%2046.1%2023.8m-4.2%209a328.5%20328.5%200%200%201-51.4-12.2c-4-1.6-3.8-3.9-3.2-5.5.7-1.7%203.5-3.4%206.4-2.5%205.6%201.9%2028%209.3%2048.2%2020.2'/%3e%3cpath%20fill='%23f31509'%20d='M194.5%20147.4a332.4%20332.4%200%200%201-52.4-7.8c-4.1-1.3-4.3-3.6-3.8-5.3.5-1.7%203.1-3.6%206.2-3%205.6%201.4%2028.8%207%2050%2016.1'/%3e%3cpath%20d='M129.4%20141.5h381.2v12.6H129.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DHfKScpC__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-my'%20viewBox='0%200%20640%20480'%3e%3cg%20clip-path='url(%23my-a)'%3e%3cpath%20fill='%23C00'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%200h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2034.3h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%2068.6h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20102.9h640V137H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20137.1h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20171.4h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20205.7h640V240H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20240h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20274.3h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20308.6h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20342.9h640V377H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20377.1h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20411.4h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20445.7h640V480H0z'/%3e%3cpath%20fill='%23006'%20d='M0%20.5h320v274.3H0z'/%3e%3cpath%20fill='%23FC0'%20d='m207.5%2073.8%206%2040.7%2023-34-12.4%2039.2%2035.5-20.8-28.1%2030%2041-3.2-38.3%2014.8%2038.3%2014.8-41-3.2%2028.1%2030-35.5-20.8%2012.3%2039.3-23-34.1-6%2040.7-5.9-40.7-23%2034%2012.4-39.2-35.5%2020.8%2028-30-41%203.2%2038.4-14.8-38.3-14.8%2041%203.2-28.1-30%2035.5%2020.8-12.4-39.3%2023%2034.1zm-33.3%201.7a71.1%2071.1%200%200%200-100%2065%2071.1%2071.1%200%200%200%20100%2065%2080%2080%200%200%201-83.2%206.2%2080%2080%200%200%201-43.4-71.2%2080%2080%200%200%201%20126.6-65'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='my-a'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mz'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='mz-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23mz-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23009a00'%20fill-rule='evenodd'%20d='M0%200h768v160H0z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M0%20160h768v16H0z'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M0%20176h768v160H0z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M0%20336h768v16H0z'/%3e%3cpath%20fill='%23ffca00'%20fill-rule='evenodd'%20d='M0%20352h768v160H0z'/%3e%3cpath%20fill='red'%20fill-rule='evenodd'%20d='M0%200v512l336-256z'/%3e%3cpath%20fill='%23ffca00'%20fill-rule='evenodd'%20d='m198.5%20333-51.2-37.5L96.1%20333l19.9-60.3-51.5-37.1%2063.5.2%2019.3-60.4%2019.4%2060.5%2063.5-.3-51.5%2037.1z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.1'%20d='M102.8%20290.9h37c3%203.3%209.5%204.7%2015.8%200%2011.6-6.4%2034%200%2034%200l4.4-4.7-10.7-35.2-3.9-4.2s-8.3-5-24-3.3c-15.7%201.7-21.2-.5-21.2-.5s-13.7%201.6-17.6%203.6l-4.4%204.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.1'%20d='M110.3%20281.8s35.2-4.4%2045.4%209.1c-5.7%204-10.8%204.3-16.2.3.8-1.5%2012.6-13.8%2042.7-9.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='1.2'%20d='m148%20246.6-.3%2038.8m31.7-38.3L186%20278'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.1'%20d='m117%20246.6-3.7%2016'/%3e%3cpath%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.1'%20d='m78.9%20295.1%208.6%2010.2c1%20.6%202%20.6%202.9%200l12.8-15.4%205.4-6.7c.9-1%201.1-2.1%201-3l10.4-9.3%202.2.2c-1-.2-1.7-.7-1-1.8l2.4-1.8%201.8%202.3s-2.6%203.4-2.9%203.4h-2.8l-5.4%204.9%202.4%202%203.5%209.8%204.4-3.1-2.8-10%206.1-6.7-2.3-3.6%201.6-2s21.3%2013.4%2029.6%209.8c.2%200%20.5-9.6.5-9.6s-22.2-2.3-22.7-6.7%205-5%205-5l-2.4-3.2.5-1.8%203.9%204.8%208.7-7.4%2051.5%2058.6c2.8-1.1%203.4-1.8%203.6-4.6L155%20241.5l3.8-4.1c.8-.9%201-1.2%201-2.6l6-5.1a7.3%207.3%200%200%201%203.8%203L186%20219c.4.4%201.7.8%202.6.4l26.9-25.9-29.3%2020.7-1-.7c0-.9%201-1%200-2.6-1.2-1.4-2.9%201.3-3.1%201.3-.3%200-4.3-1.4-5.2-3.2l-.2%204.7-7.5%207-5.7-.3-8.2%208-1%203%201.3%202.7s-4.4%203.8-4.4%203.6c0-.3-.9-1.2-1-1.3l3.8-3.4.5-2.3-1.2-2c-.4.3-5.2%205.4-5.5%204.8l-14-15.5.8-2.9-8.7-9.5c-3.2-1.1-8.3-1.3-9.3%205.7-.8%201.6-7.4.2-7.4.2l-3.6.8L85.2%20241l11.3%2013.6%2023.2-29.3.7-8.3%204.8%205.4c1.7.2%203.2.3%204.7-.5l13.7%2015.3-2.3%202.3%202%202.2%202.4-1.6.9%201.3c-1.1.6-2%201.5-3.1%202.1-1.8-1.2-3.6-2.7-3.5-5l-7.7%206.4-.3%201.2-22.9%2019-2%20.3-.5%206%2014.9-12.4v-1.8l1.5%201.3%2011.6-9.3s.8%201%20.5%201-10.3%209.3-10.3%209.3l-.2%201-1.8%201.6-1-.8-14%2012.4h-2l-7.7%207.7c-2%20.2-3.7.4-5.4%201.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-na'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='na-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23na-a)'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%233662a2'%20d='m-26.4.2.8%20345.6L512.5%200z'/%3e%3cpath%20fill='%2338a100'%20d='M666.4%20479.6%20665%20120.3%20122.3%20479.8l544-.2z'/%3e%3cpath%20fill='%23c70000'%20d='m-26%20371.8.4%20108.2%20117.5-.1L665.4%2095.4l-.7-94.1-116-1L-26%20371.7z'/%3e%3cpath%20fill='%23ffe700'%20d='m219.6%20172-21.8-13.2-12.6%2022.1-12.2-22.2-22%2012.9.6-25.4-25.4.2%2013.2-21.8-22.1-12.5%2022.2-12.3-12.8-22%2025.4.6-.1-25.5%2021.7%2013.2L186.3%2044l12.2%2022.2%2022-12.9-.6%2025.4%2025.4-.2-13.2%2021.8%2022.1%2012.5-22.2%2012.3%2012.8%2022-25.4-.6z'/%3e%3cpath%20fill='%233662a2'%20d='M232.4%20112.4c0%2025.6-20.9%2046.3-46.6%2046.3s-46.6-20.7-46.6-46.3%2020.8-46.2%2046.6-46.2%2046.6%2020.7%2046.6%2046.2'/%3e%3cpath%20fill='%23ffe700'%20d='M222.3%20112.4a36.5%2036.5%200%201%201-73%200%2036.5%2036.5%200%200%201%2073%200'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-nc'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23009543'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23ed4135'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%230035ad'%20d='M0%200h640v160H0z'/%3e%3ccircle%20cx='240'%20cy='240'%20r='157.3'%20fill='%23fae600'%20stroke='%23000'%20stroke-width='5.3'/%3e%3cpath%20stroke='%23000'%20stroke-width='6.4'%20d='M213.3%20263.5h53.3M213.3%20224h53.3M240%2083.2V352'/%3e%3cpath%20fill='%23000001'%20d='M176.6%20384.4c64.2%2026.3%20124.4%201.7%20124.4%201.7s-22.7-24.6-34.3-34.2c-11.4-9.4-44.8-9-56.2%200a488.7%20488.7%200%200%200-33.9%2032.5'/%3e%3cellipse%20cx='240'%20cy='312.5'%20fill='%23000001'%20rx='17.6'%20ry='25.6'/%3e%3cellipse%20cx='240'%20cy='243.7'%20fill='%23000001'%20rx='21.3'%20ry='13.5'/%3e%3ccircle%20cx='240'%20cy='181.3'%20r='21.3'%20fill='%23000001'/%3e%3cpath%20fill='%23000001'%20d='M265.6%20101.9s1.8%203-2%2010c-18.6%2033.5-37.3%2034.2-40.8%2037.1-4%203.2-5.6%203-5.6%203%20.3-2.9.5-14.6.7-15.7%202.9-15.7%2026.5-15.5%2045-31.5%202.9-2.5%202.7-3%202.7-3zm-62.4%2072s4.3%2012%204.8%2024c1%2019.2%2019.4%2019.7%2032%2019.7v-10.7c-9.5%200-17.7-1.4-24.5-15.4a122.7%20122.7%200%200%200-12.3-17.6m-.5%20154.6s6.7-8.3%2014.6-27.7c4-10.1%2013.8-16%2022.7-16v-15c-20.3%200-30%207.5-31%2018.6a329%20329%200%200%201-6.3%2040.1'/%3e%3cpath%20d='M276.8%20173.9s-4.3%2012-4.8%2024c-1%2019.2-19.4%2019.7-32%2019.7V207c9.5%200%2017.7-1.4%2024.5-15.5%203.6-6.2%207.7-12.1%2012.3-17.6m.5%20154.7s-6.7-8.4-14.6-27.8c-4-10.1-13.8-16-22.7-16V270c20.3%200%2030%207.5%2031%2018.6a329%20329%200%200%200%206.3%2040'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ne'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230db02b'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23e05206'%20d='M0%200h640v160H0z'/%3e%3ccircle%20cx='320'%20cy='240'%20r='68'%20fill='%23e05206'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__D$Emj0Fa__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ng'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23008753'%20d='M426.6%200H640v480H426.6zM0%200h213.3v480H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CVSNb4p0__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-nl'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%20transform='scale(1.25%20.9375)'%3e%3crect%20rx='0'%20ry='0'%20height='509.76'%20width='512'%20fill='%23fff'/%3e%3crect%20rx='0'%20ry='0'%20height='169.92'%20width='512'%20y='342.08'%20fill='%2321468b'/%3e%3cpath%20fill='%23ae1c28'%20d='M0%200h512v169.92H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-no'%3e%3cpath%20fill='%23ef2b2d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M180%200h120v480H180z'/%3e%3cpath%20fill='%23fff'%20d='M0%20180h640v120H0z'/%3e%3cpath%20fill='%23002868'%20d='M210%200h60v480h-60z'/%3e%3cpath%20fill='%23002868'%20d='M0%20210h640v60H0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-np'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='np-a'%3e%3cpath%20fill-opacity='.7'%20d='M0-16h512v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23np-a)'%20transform='translate(0%2015)scale(.9375)'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23ce0000'%20stroke='%23000063'%20stroke-width='13.8'%20d='M6.5%20489.5h378.8L137.4%20238.1l257.3.3L6.6-9.5v499z'/%3e%3cpath%20fill='%23fff'%20d='m180.7%20355.8-27%209%2021.2%2019.8-28.5-1.8%2011.7%2026.2-25.5-12.3.5%2028.6-18.8-20.9-10.7%2026.6-9.2-26.3-20.3%2020.6%201.8-27.7L49%20409l12.6-25-29.3.6%2021.5-18.3-27.3-10.5%2027-9L32.2%20327l28.4%201.8L49%20302.6l25.6%2012.3-.5-28.6%2018.8%2020.9%2010.7-26.6%209.1%2026.3%2020.4-20.6-1.9%2027.7%2027-11.4-12.7%2025%2029.4-.6-21.5%2018.3zm-32.4-184.7-11.3%208.4%205.6%204.6a93.8%2093.8%200%200%200%2030.7-36c1.8%2021.3-17.7%2069-68.7%2069.5a70.6%2070.6%200%200%201-71.5-70.3c10%2018.2%2016.2%2027%2032%2036.5l4.7-4.4-10.6-8.9%2013.7-3.6-7.4-12.4%2014.4%201-1.8-14.4%2012.6%207.4%204-13.5%209%2010.8%208.5-10.3%204.6%2014%2011.8-8.2-1.5%2014.3%2014.2-1.7-6.7%2013.2z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-nr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='nr-a'%3e%3cpath%20fill-opacity='.7'%20d='M-54.7%200H628v512H-54.7z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23nr-a)'%20transform='translate(51.3)scale(.9375)'%3e%3cpath%20fill='%23002170'%20d='M-140%200H884v512H-140z'/%3e%3cpath%20fill='%23ffb20d'%20d='M-140%20234.1H884V278H-140z'/%3e%3cpath%20fill='%23fff'%20d='m161.8%20438-33-33-10.5%2045.4-12-45-31.9%2034%2012.1-45L42%20407.9l33-33-45.4-10.6%2045-12-34-31.8%2045%2012L72%20288l33%2033%2010.6-45.4%2012%2045%2031.8-34-12%2045%2044.5-13.5-33%2033%2045.4%2010.5-45%2012%2034%2032-45-12.2z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-nu'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fedd00'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23012169'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='%23c8102e'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='%23c8102e'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3ccircle%20cx='160'%20cy='120'%20r='40.8'%20fill='%23012169'/%3e%3cpath%20fill='%23fedd00'%20d='m160%2079.2%2024%2073.8-62.8-45.6h77.6L136%20153M66.7%2098.3l14%2043.4L43.9%20115h45.7l-37%2026.8m200.7-43.5%2014.1%2043.4-36.9-26.8h45.7l-37%2026.8M160%20178.3l14.1%2043.4-37-26.8h45.7l-37%2026.8M160%2018.3l14.1%2043.4-37-26.8h45.7l-37%2026.8'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-nz'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cg%20id='nz-b'%3e%3cg%20id='nz-a'%3e%3cpath%20d='M0-.3v.5l1-.5z'/%3e%3cpath%20d='M.2.3%200-.1l1-.2z'/%3e%3c/g%3e%3cuse%20xlink:href='%23nz-a'%20transform='scale(-1%201)'/%3e%3cuse%20xlink:href='%23nz-a'%20transform='rotate(72%200%200)'/%3e%3cuse%20xlink:href='%23nz-a'%20transform='rotate(-72%200%200)'/%3e%3cuse%20xlink:href='%23nz-a'%20transform='scale(-1%201)rotate(72)'/%3e%3c/g%3e%3c/defs%3e%3cpath%20fill='%2300247d'%20fill-rule='evenodd'%20d='M0%200h640v480H0z'/%3e%3cg%20transform='translate(-111%2036.1)scale(.66825)'%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23fff'%20transform='translate(900%20120)scale(45.4)'/%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23cc142b'%20transform='matrix(30%200%200%2030%20900%20120)'/%3e%3c/g%3e%3cg%20transform='rotate(82%20525.2%20114.6)scale(.66825)'%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23fff'%20transform='rotate(-82%20519%20-457.7)scale(40.4)'/%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23cc142b'%20transform='rotate(-82%20519%20-457.7)scale(25)'/%3e%3c/g%3e%3cg%20transform='rotate(82%20525.2%20114.6)scale(.66825)'%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23fff'%20transform='rotate(-82%20668.6%20-327.7)scale(45.4)'/%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23cc142b'%20transform='rotate(-82%20668.6%20-327.7)scale(30)'/%3e%3c/g%3e%3cg%20transform='translate(-111%2036.1)scale(.66825)'%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23fff'%20transform='translate(900%20480)scale(50.4)'/%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23cc142b'%20transform='matrix(35%200%200%2035%20900%20480)'/%3e%3c/g%3e%3cpath%20fill='%23012169'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='%23c8102e'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='%23c8102e'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BCUnGKBV__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pa'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='pa-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23pa-a)'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M92.5%200h477.2v480H92.4z'/%3e%3cpath%20fill='%23db0000'%20fill-rule='evenodd'%20d='M323%203.6h358v221.7H323z'/%3e%3cpath%20fill='%230000ab'%20fill-rule='evenodd'%20d='M3.2%20225.3h319.9V480H3.2zm211.6-47.6-42-29.4-41.7%2029.6%2015.5-48L105%20100l51.6-.4%2016-48%2016.3%2047.9h51.6l-41.5%2030%2015.9%2048z'/%3e%3cpath%20fill='%23d80000'%20fill-rule='evenodd'%20d='m516.9%20413.9-42.4-27.7-42.1%2028%2015.6-45.6-42-28%2052-.5%2016.2-45.4%2016.4%2045.3h52l-41.8%2028.5%2016%2045.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-pc'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23003da5'%20d='M0%200h640v480H0z'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(164.3%20311.5%20242.2)'/%3e%3cpath%20id='pc-a'%20fill='%23fff'%20fill-opacity='1'%20fill-rule='nonzero'%20stroke='none'%20stroke-width='.7'%20d='m472.9%20262.8-8.4%201.5-1.1%208.5-4.1-7.5-8.4%201.6%205.8-6.2-4-7.5%207.7%203.6%205.8-6.2-1%208.5z'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-10.3%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-30.9%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-20.6%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-51.5%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-72.1%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-61.8%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-41.2%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-92.7%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-113.3%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-103%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-133.9%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-154.5%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-144.2%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-123.6%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-82.4%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-175.1%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(174.6%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(143.7%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(123.1%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(133.4%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(154%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-164.8%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(112.8%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(102.5%20311.5%20242.2)'/%3e%3cpath%20fill='none'%20stroke='%2300aec7'%20stroke-width='13.7'%20d='M444.9%20313A151%20151%200%200%201%20293%20392'/%3e%3cpath%20fill='%23fff'%20d='M474.3%20288.5S449%20277.2%20398%20277c-51-.2-105.2%2013.9-135.1%2013.5-30-.3-38.8-.3-56.7-3.7%200%200%2027%209%2055.8%2011.6%2028.7%202.7%2095.2-10.4%20128.4-12.5%2034-2.1%2060.4-2.1%2083.8%202.6'/%3e%3cpath%20fill='%2300aec7'%20d='M275%20303.2s19.2%201%2056-3c37-4%2063-9.4%2092.1-10.2%2029.1-.7%2061.2%204.4%2068%206.1%200%200-48.5-1.3-68.8%201.6-20.3%203-73%209.5-100.7%2010.2-27.7.6-37.3-3.2-46.6-4.7m-80.5-27.8s51%2013.6%2097.2%204.7c52.3-10.2%2083-10%20106.4-10%2023.4-.2%2047.9%205.7%2047.9%205.7s-96-100.2-196.5-153.3c0%200-7.5%2084.5-55%20152.9'/%3e%3cpath%20fill='%23fff'%20d='M274.2%20197.5s-1.4-5.3-8.3-4.5c0%200%204.4-2%206.4-1%202%201.1%202.4%201.4%202%205.5m-16.8-9.4s1.5-.5%202.2-.3c0%200%201%203.3%203.2%204.5%200%200-3.8-.3-5.4-4.2m22.2%205a12.5%2012.5%200%200%200-8.7-4.8c-1.8%200-6%203.5-6%203.5-1-2-.5-3.4-.5-3.4%202%20.2%203.7%201%203.7%201-.8-2.6-2-3.8-2-3.8%204-1%208.8%202.5%208.8%202.5a16.7%2016.7%200%200%200-11-6.8c-1.2-.1-2.7%201.6-2.7%201.6-7.8%200-9.9%204.3-9.9%204.3%203.3%205.1%2010%206.3%2010%206.3-11.8-1.3-11.5%208-11.5%208l10.9-5.7c-4.2%2024.1-21%2035-22.4%2036.3-1.4%201.4-.5%203%201.5%203.2%201.1%200%202.5%201%206.2-3.4a65%2065%200%200%200%2016.4-35.4l.2.2c1.2%202.9.4%205.4.6%207.3.2%201.9%204.4%206%204.4%206s2.3-4.5%202-7.1c-.5-2.7-5.5-7.6-5.5-7.6%207.8-1.5%208.2%2011.6%208.2%2011.6%203-3.5%202.4-7.3%202.4-7.3s6.3-4.6%204.9-6.4'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pe'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23D91023'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M213.3%200h213.4v480H213.3z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DkpuluLm__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pg'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23000001'%20d='m1.6%200-.5%20480h640z'/%3e%3cpath%20fill='red'%20d='m640.6%20480%20.5-480H1.1z'/%3e%3c/g%3e%3cpath%20fill='%23fc0'%20stroke='%23fc0'%20stroke-width='1.1'%20d='m178%2054-3.8-.2c-1.2-2.8-4.5-3.8-6.6-2.6A333%20333%200%200%201%20156%2051l7.1%203.1C165%2059%20171%2060%20171%2060c-.6%208.8-8.9-1.1-15.9%203.9-5%203-5%206.5-7.7%2012.3-.9%201.6-4.4%205.8-4.4%205.8l5.9-.5L147%2084l7-1-1.5%201.4c1%20.2%208-1.7%208-1.7L160%2085l8-2.9s1.6%201.3%203%201.9l1-4%204%201%201-4c6%208%208%2016%2019%2018l-1-4a262.2%20262.2%200%200%201%208.7%204l.9-1.7c4.8%203.4%208.7%203.3%2011.4%203.7l-2-5%202%201-3-8%203%201-4-6%201.5-1-.5-3c6%202%2014%205%2015%2012%201%2011-11%2014-19%2013%206%205%2017%203%2022-2%202-2%203-5%204-8%201%203%203%207%203%2011-1%209-13%2012-21%2013%209%205%2025-1%2026-14%200-11-7-16-10-21l-1-5.4%203%201.4s-1.8-3.3-2-4c0%200-3.1-8.5-4.2-10.4l2.2.4-8.2-10.3%202.3-.2S215.6%2044%20213%2043l3-1c-6-3-13-1-19%203l1-3-1.8.2v-3.5L198%2036l-3-1%202-5-3%201%201-5s-2.2%201-3.6.9a51.7%2051.7%200%200%200%201.6-3.4c-1-1.5%200-4.5%200-4.5-7%201-8%202-12%208-6%2011-4%2016-3%2027z'%20transform='matrix(2.21989%200%200%202.21194%201.1%200)'/%3e%3cpath%20fill='red'%20fill-rule='evenodd'%20stroke='red'%20stroke-width='1.4'%20d='M215.8%2070.4c.5.9%206.2%203.6%2010.4%206-1.1-4.6-9.4-5.6-10.4-6z'%20transform='matrix(2.21989%200%200%202.21194%201.1%200)'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='m175%20399-14.2-9-19%209.1%204.3-16.2-14.5-15.1%2016.7-1%2010-18.4%206.1%2015.5%2020.7%203.8-13%2010.6zm36.2-79-6.6-3-6.3%203.6%201-7.2-5.4-4.9%207.1-1.3%203-6.6%203.5%206.4%207.2.8-5%205.2zm32-45.2-14.5-7-13.9%207.8%202.3-15.7-11.8-10.8%2015.7-2.8%206.6-14.4%207.6%2014%2015.8%201.8-11%2011.5zm-65.8-63-17-8.5-16.5%209.1%202.8-18.6-13.8-13%2018.7-3%208-17%208.7%2016.7%2018.8%202.3-13.3%2013.4zm-60.8%2065.4-17-10-17%2010.3%204.3-19.3-15.1-13%2019.7-1.8%207.7-18.3%207.9%2018.2%2019.8%201.6-14.9%2013z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ph'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230038a8'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%20240h640v240H0z'/%3e%3cpath%20fill='%23fff'%20d='M415.7%20240%200%20480V0'/%3e%3cpath%20fill='%23fcd116'%20d='M26.7%2042.4%2041%2055l16.6-9.2-7.4%2017.5%2014%2013-19-1.6-8.1%2017.2-4.3-18.5L14%2071l16.3-10zm323.8%20172.3.4%2019%2018%206.3-18%206.2-.4%2019-11.5-15.1-18.2%205.5%2010.8-15.6-10.8-15.6%2018.2%205.5zM37.2%20388.1l8%2017.2%2019-1.6-13.9%2013%207.4%2017.5-16.6-9.1-14.4%2012.4%203.6-18.7L14%20409l18.9-2.4zm114.2-249-6.2%206.2%203.1%2047-3%20.3-5.7-42.9-5.1%205%207.6%2038.4a47.5%2047.5%200%200%200-17.2%207.1l-21.7-32.4H96l26.4%2034.3a48%2048%200%200%200-2.4%202l-31.1-35.5h-8.8v8.8l35.4%2031-2%202.5-34.3-26.3v7.1l32.5%2021.7c-3.4%205.2-5.9%2011-7.1%2017.2L66.3%20223l-5.1%205%2042.9%205.7c-.2%201-.3%202.1-.3%203.1l-47-3-6.2%206.2%206.2%206.2%2047-3.1.3%203.1-42.9%205.7%205%205%2038.4-7.6a47.5%2047.5%200%200%200%207.1%2017.2l-32.5%2021.7v7.2l34.3-26.3a48%2048%200%200%200%202%202.4l-35.4%2031v8.8H89l31-35.4%202.5%202L96%20312.2h7.2l21.7-32.5c5.1%203.4%2011%205.9%2017.2%207.1l-7.6%2038.4%205%205%205.7-42.9c1%20.2%202%20.3%203.1.3l-3%2047%206.1%206.2%206.3-6.2-3.1-47%203-.3%205.7%2043%205.1-5.1-7.6-38.4a47.5%2047.5%200%200%200%2017.2-7.1l21.7%2032.5h7.2l-26.4-34.3a48%2048%200%200%200%202.4-2l31.1%2035.4h8.8v-8.8l-35.4-31%202-2.4%2034.3%2026.3v-7.2l-32.5-21.7c3.4-5.1%205.9-11%207.1-17.2l38.3%207.6%205.1-5-42.9-5.7c.2-1%20.3-2%20.3-3.1l47%203%206.2-6.1-6.2-6.2-47%203-.3-3%2042.9-5.7-5-5-38.4%207.5a47.5%2047.5%200%200%200-7.1-17.2l32.5-21.7v-7.1l-34.3%2026.3a48%2048%200%200%200-2-2.4l35.4-31v-8.9H214l-31%2035.5a48%2048%200%200%200-2.5-2l26.4-34.3h-7.2L178%20200.2c-5.1-3.4-11-5.9-17.2-7.1l7.6-38.3-5-5-5.7%2042.8-3.1-.3%203-47z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pk'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='pk-a'%3e%3cpath%20fill-opacity='.7'%20d='M-52.3%200h682.6v512H-52.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23pk-a)'%20transform='translate(49)scale(.9375)'%3e%3cpath%20fill='%230c590b'%20d='M-95%200h768v512H-95z'/%3e%3cpath%20fill='%23fff'%20d='M-95%200H97.5v512H-95z'/%3e%3cg%20fill='%23fff'%3e%3cpath%20d='m403.7%20225.4-31.2-6.6-16.4%2027.3-3.4-31.6-31-7.2%2029-13-2.7-31.7%2021.4%2023.6%2029.3-12.4-15.9%2027.6%2021%2024z'/%3e%3cpath%20d='M415.4%20306a121.2%20121.2%200%200%201-161.3%2059.4%20122.1%20122.1%200%200%201-59.5-162.1A118.6%20118.6%200%200%201%20266%20139a156.2%20156.2%200%200%200-11.8%2010.9A112.3%20112.3%200%200%200%20415.5%20306z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-pl'%3e%3cg%20fillRule='evenodd'%3e%3cpath%20fill='%23e9e8e7'%20d='M640%20480H0V0h640z'/%3e%3cpath%20fill='%23d4213d'%20d='M640%20480H0V240h640z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pm'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__vUUF8SEt__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='pr-a'%3e%3cpath%20fill-opacity='.7'%20d='M-37.3%200h682.7v512H-37.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23pr-a)'%20transform='translate(35)scale(.9375)'%3e%3cpath%20fill='%23ed0000'%20d='M-37.3%200h768v512h-768z'/%3e%3cpath%20fill='%23fff'%20d='M-37.3%20102.4h768v102.4h-768zm0%20204.8h768v102.4h-768z'/%3e%3cpath%20fill='%230050f0'%20d='m-37.3%200%20440.7%20255.7L-37.3%20511z'/%3e%3cpath%20fill='%23fff'%20d='M156.4%20325.5%20109%20290l-47.2%2035.8%2017.6-58.1-47.2-36%2058.3-.4%2018.1-58%2018.5%2057.8%2058.3.1-46.9%2036.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ps'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ps-a'%3e%3cpath%20fill-opacity='.7'%20d='M-118%200h682.7v512H-118z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23ps-a)'%20transform='translate(110.6)scale(.9375)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23000001'%20d='M-246%200H778v170.7H-246z'/%3e%3cpath%20fill='%23fff'%20d='M-246%20170.7H778v170.6H-246z'/%3e%3cpath%20fill='%23090'%20d='M-246%20341.3H778V512H-246z'/%3e%3cpath%20fill='red'%20d='m-246%20512%20512-256L-246%200z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__FKQFVHqb__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pw'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='pw-a'%3e%3cpath%20fill-opacity='.7'%20d='M-70.3%200h640v480h-640z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23pw-a)'%20transform='translate(70.3)'%3e%3cpath%20fill='%234aadd6'%20d='M-173.4%200h846.3v480h-846.3z'/%3e%3cpath%20fill='%23ffde00'%20d='M335.6%20232.1a135.9%20130.1%200%201%201-271.7%200%20135.9%20130.1%200%201%201%20271.7%200'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__B$yZvKNL__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-qa'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%238d1b3d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200v480h158.4l97.8-26.7-97.8-26.6%2097.7-26.7-97.7-26.7%2097.7-26.6-97.7-26.7%2097.8-26.7-97.8-26.6%2097.7-26.7-97.7-26.7%2097.7-26.6-97.7-26.7%2097.8-26.7-97.8-26.6L256.1%2080l-97.7-26.7%2097.8-26.6L158.3%200z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-re'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300267f'%20d='M0%200h213.337v480H0z'/%3e%3cpath%20fill='%23f31830'%20d='M426.662%200H640v480H426.662z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ro'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%2300319c'%20d='M0%200h213.333v480H0z'/%3e%3cpath%20fill='%23ffde00'%20d='M213.333%200h213.333v480H213.333z'/%3e%3cpath%20fill='%23de2110'%20d='M426.666%200H640v480H426.666z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__azh1xeAu__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ru'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%230039a6'%20d='M0%20160.003h640V480H0z'/%3e%3cpath%20fill='%23d52b1e'%20d='M0%20319.997h640V480H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-rw'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2320603d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fad201'%20d='M0%200h640v360H0z'/%3e%3cpath%20fill='%2300a1de'%20d='M0%200h640v240H0z'/%3e%3cg%20transform='translate(511%20125.4)scale(.66667)'%3e%3cg%20id='rw-b'%3e%3cpath%20id='rw-a'%20fill='%23e5be01'%20d='M116.1%200%2035.7%204.7l76.4%2025.4-78.8-16.3L100.6%2058l-72-36.2L82%2082.1%2021.9%2028.6l36.2%2072-44.3-67.3L30%20112%204.7%2035.7%200%20116.1-1-1z'/%3e%3cuse%20xlink:href='%23rw-a'%20width='100%25'%20height='100%25'%20transform='scale(1%20-1)'/%3e%3c/g%3e%3cuse%20xlink:href='%23rw-b'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3ccircle%20r='34.3'%20fill='%23e5be01'%20stroke='%2300a1de'%20stroke-width='3.4'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CZk3ZsL8__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sb'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sb-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23sb-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%230000d6'%20d='M0%20507.2%20987.4%200H0z'/%3e%3cpath%20fill='%23006000'%20d='M1024%200%2027.2%20512H1024z'/%3e%3cpath%20fill='%23fc0'%20d='M1024%200h-54.9L0%20485.4V512h54.9L1024%2027.6z'/%3e%3cpath%20fill='%23fff'%20d='m71.4%209.1%2011.8%2034.5h38.5L90.6%2064.7l11.9%2034.4L71.4%2078%2040.3%2099.2l11.9-34.4-31.1-21.3h38.4zm191.1%200%2011.9%2034.5h38.5l-31.2%2021.2%2012%2034.4L262.4%2078l-31%2021.3%2011.9-34.4-31.2-21.3h38.5zm0%20144.5%2011.9%2034.5h38.5l-31.2%2021.2%2012%2034.4-31.2-21.3-31%2021.3%2011.9-34.4-31.2-21.3h38.5zm-95-71.4%2011.9%2034.4h38.4l-31%2021.3%2011.8%2034.4-31-21.3-31.2%2021.3%2012-34.4-31.2-21.3h38.5zm-96.1%2071.4%2011.8%2034.5h38.5l-31.1%2021.2%2011.9%2034.4-31.1-21.3-31.1%2021.3%2012-34.4L21%20188h38.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sc'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0Z'/%3e%3cpath%20fill='%23d92223'%20d='M0%20480V0h640v160z'/%3e%3cpath%20fill='%23fcd955'%20d='M0%20480V0h426.7z'/%3e%3cpath%20fill='%23003d88'%20d='M0%20480V0h213.3z'/%3e%3cpath%20fill='%23007a39'%20d='m0%20480%20640-160v160z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sd'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sd-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23sd-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23000001'%20d='M0%20341.3h1024V512H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20170.6h1024v170.7H0z'/%3e%3cpath%20fill='red'%20d='M0%200h1024.8v170.7H0z'/%3e%3cpath%20fill='%23009a00'%20d='M0%200v512l341.3-256z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-se'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-53.421%200h682.67v512h-682.67z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23a)'%20transform='translate(50.082)%20scale(.9375)'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23006aa7'%20d='M-121.103.302h256V205.1h-256zM-121.103%20307.178h256v204.8h-256z'/%3e%3cpath%20fill='%23fecc00'%20d='M-121.103%20204.984h256v102.4h-256z'/%3e%3cpath%20fill='%23fecc00'%20d='M133.843.01h102.4v511.997h-102.4z'/%3e%3cpath%20fill='%23fecc00'%20d='M232.995%20205.013h460.798v102.4H232.995z'/%3e%3cpath%20fill='%23006aa7'%20d='M236.155%20307.208h460.797v204.799H236.155zM236.155.302h460.797V205.1H236.155z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sg-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23sg-a)'%3e%3cpath%20fill='%23fff'%20d='M-20%200h720v480H-20z'/%3e%3cpath%20fill='%23df0000'%20d='M-20%200h720v240H-20z'/%3e%3cpath%20fill='%23fff'%20d='M146%2040.2a84.4%2084.4%200%200%200%20.8%20165.2%2086%2086%200%200%201-106.6-59%2086%2086%200%200%201%2059-106c16-4.6%2030.8-4.7%2046.9-.2z'/%3e%3cpath%20fill='%23fff'%20d='m133%20110%204.9%2015-13-9.2-12.8%209.4%204.7-15.2-12.8-9.3%2015.9-.2%205-15%205%2015h15.8zm17.5%2052%205%2015.1-13-9.2-12.9%209.3%204.8-15.1-12.8-9.4%2015.9-.1%204.9-15.1%205%2015h16zm58.5-.4%204.9%2015.2-13-9.3-12.8%209.3%204.7-15.1-12.8-9.3%2015.9-.2%205-15%205%2015h15.8zm17.4-51.6%204.9%2015.1-13-9.2-12.8%209.3%204.8-15.1-12.9-9.4%2016-.1%204.8-15.1%205%2015h16zm-46.3-34.3%205%2015.2-13-9.3-12.9%209.4%204.8-15.2-12.8-9.4%2015.8-.1%205-15.1%205%2015h16z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CDYDPDmE__\"","export default \"__VITE_ASSET__kF7$3UxR__\"","export default \"__VITE_ASSET__Ct82MiGp__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sh'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23012169'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23FFF'%20d='m75%200%20244%20181L562%200h78v62L400%20241l240%20178v61h-80L320%20301%2081%20480H0v-60l239-178L0%2064V0z'/%3e%3cpath%20fill='%23C8102E'%20d='m424%20281%20216%20159v40L369%20281zm-184%2020%206%2035L54%20480H0zM640%200v3L391%20191l2-44L590%200zM0%200l239%20176h-60L0%2042z'/%3e%3cpath%20fill='%23FFF'%20d='M241%200v480h160V0zM0%20160v160h640V160z'/%3e%3cpath%20fill='%23C8102E'%20d='M0%20193v96h640v-96zM273%200v480h96V0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-si'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-15.067%200h682.67v512h-682.67z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20clip-path='url(%23a)'%20transform='translate(14.125)%20scale(.9375)'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M-62%200H962v512H-62z'/%3e%3cpath%20fill='%23de2918'%20d='M-62%20341.33H962V512H-62z'/%3e%3cpath%20fill='%2308399c'%20d='M-62%20170.67H962v170.67H-62z'/%3e%3cpath%20d='M228.37%2092.976c-4.02%2061.651-6.322%2095.436-15.709%20111.07-10.15%2016.789-20.025%2029.081-59.63%2043.882-39.61-14.81-49.48-27.1-59.633-43.89-9.387-15.63-11.69-49.41-15.709-111.06l5.853-1.971c11.783-3.594%2020.574-6.484%2027.077-7.767%209.313-1.971%2017.228-4.2%2042.257-4.722%2025.029.43%2032.983%202.797%2042.296%204.768%206.45%201.375%2015.617%204.081%2027.312%207.744l5.884%201.948z'%20fill='%23de2918'/%3e%3cpath%20d='M222.6%2090.955c-3.802%2061.518-6.983%2089.69-11.943%20103.24-9.626%2023.193-24.866%2035.909-57.665%2048.038-32.8-12.14-48.04-24.86-57.664-48.05-4.961-13.54-8.095-41.64-11.788-103.3%2011.534-3.602%2020.577-6.418%2027.08-7.7%209.313-1.972%2017.228-4.294%2042.257-4.725%2025.029.431%2033.037%202.753%2042.35%204.724%206.503%201.283%2015.732%204.098%2027.373%207.763z'%20fill='%2308399c'/%3e%3cpath%20d='M152.96%20109.79l1.573%203.723%206.91.947-4.478%202.7%204.33%202.894-6.298%201.055-1.916%203.374-2.156-3.474-5.995-.85%204.08-2.958-4.2-2.691%206.635-1.017%201.515-3.703z'%20fill='%23fc0'/%3e%3cpath%20d='M208.28%20179.62l-3.83-3.028-2.769-4.554-5.422-4.704-2.826-4.753-5.423-4.852-2.653-4.753-2.883-2.327-1.903-1.832-4.899%204.295-2.67%204.665-3.326%203.016-3.655-2.854-2.763-4.867L153%20134.855l-10.26%2018.217-2.763%204.867-3.654%202.854-3.327-3.016-2.67-4.665-4.898-4.295-1.904%201.832-2.883%202.328-2.653%204.752-5.423%204.852-2.825%204.753-5.423%204.704-2.768%204.554-3.821%203.099c1.984%2016.886%2012.748%2030.116%2018.613%2036.168%206.545%206.355%2020.039%2014.858%2036.54%2020.486%2016.548-5.508%2030.229-14.131%2036.774-20.486%205.865-6.052%2016.629-19.282%2018.625-36.239z'%20fill='%23fff'/%3e%3cpath%20d='M169.45%2083.89l1.573%203.723%206.91.947-4.478%202.7%204.33%202.894-6.298%201.055-1.916%203.374-2.156-3.474-5.995-.85%204.08-2.958-4.2-2.691%206.635-1.017%201.515-3.703zM136.47%2083.834l1.573%203.723%206.91.947-4.478%202.7%204.33%202.894-6.298%201.055-1.916%203.374-2.156-3.474-5.995-.85%204.08-2.958-4.2-2.691%206.635-1.017%201.515-3.703z'%20fill='%23fc0'/%3e%3cpath%20d='M199.72%20203.03l-7.468.023-6.892-.513-8.348-4.094-9.409.056-8.149%203.981-6.427.569-6.428-.569-8.148-3.98-9.41-.057-8.347%204.094-6.892.513-7.562-.104-3.652-6.187.136-.142%2011.172%201.848%206.891-.512%208.348-4.095%209.41.057%208.148%203.981%206.427.568%206.428-.568%208.148-3.981%209.41-.057%208.347%204.095%206.892.512%2010.874-1.906.144.286-3.643%206.182zM113.25%20212.54l7.393-.513%208.348-4.094%209.409.057%208.148%203.98%206.428.569%206.427-.568%208.149-3.981%209.41-.057%208.347%204.094%207.493.513%204.835-5.96-.163-.135-5.18%201.51-6.892-.512-8.347-4.094-9.41.056-8.148%203.981-6.428.569-6.427-.569-8.149-3.98-9.409-.057-8.347%204.094-6.892.513-5.077-1.28-.061.25%204.543%205.614z'%20fill='%2308399c'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sj'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23ef2b2d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M180%200h120v480H180z'/%3e%3cpath%20fill='%23fff'%20d='M0%20180h640v120H0z'/%3e%3cpath%20fill='%23002868'%20d='M210%200h60v480h-60z'/%3e%3cpath%20fill='%23002868'%20d='M0%20210h640v60H0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-sk'%3e%3cpath%20fill='%23ee1c25'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%230b4ea2'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v160H0z'/%3e%3cpath%20d='M233.004%20370.8c-43.025-20.724-104.568-61.858-104.568-143.226%200-81.37%203.89-118.374%203.89-118.374h201.358s3.891%2037.005%203.891%20118.374c0%2081.368-61.543%20122.502-104.571%20143.226z'%20fill='%23fff'/%3e%3cpath%20d='M233.004%20360c-39.472-19.013-95.934-56.75-95.934-131.4%200-74.651%203.57-108.6%203.57-108.6H325.37s3.57%2033.95%203.57%20108.6c0%2074.65-56.462%20112.387-95.936%20131.4z'%20fill='%23ee1c25'/%3e%3cpath%20d='M241.446%20209.027c10.688.173%2031.54.591%2050.109-5.622%200%200-.49%206.645-.49%2014.385%200%207.742.49%2014.386.49%2014.386-17.032-5.7-38.064-5.819-50.108-5.666v41.231h-16.883V226.51c-12.044-.153-33.076-.034-50.108%205.665%200%200%20.49-6.644.49-14.386%200-7.74-.49-14.384-.49-14.384%2018.568%206.213%2039.42%205.795%2050.108%205.622v-25.894c-9.741-.087-23.779.378-39.65%205.69%200%200%20.49-6.645.49-14.386%200-7.74-.49-14.385-.49-14.385%2015.848%205.303%2029.868%205.776%2039.607%205.691-.501-16.398-5.278-37.065-5.278-37.065s9.831.767%2013.761.767c3.934%200%2013.763-.767%2013.763-.767s-4.776%2020.667-5.277%2037.064c9.739.084%2023.759-.388%2039.606-5.691%200%200-.49%206.644-.49%2014.385%200%207.74.49%2014.385.49%2014.385-15.87-5.311-29.909-5.776-39.65-5.69v25.894z'%20fill='%23fff'/%3e%3cpath%20d='M233%20263.275c-19.878%200-30.525%2027.575-30.525%2027.575s-5.907-13.075-22.125-13.075c-10.973%200-19.06%209.761-24.2%2018.8C176.113%20328.34%20207.964%20347.941%20233%20360c25.039-12.06%2056.91-31.657%2076.875-63.425-5.14-9.039-13.227-18.8-24.2-18.8-16.219%200-22.15%2013.075-22.15%2013.075S252.879%20263.275%20233%20263.275z'%20fill='%230b4ea2'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sl'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%230000cd'%20d='M0%20320.3h640V480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160.7h640v159.6H0z'/%3e%3cpath%20fill='%2300cd00'%20d='M0%200h640v160.7H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__SSi5mPFg__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sn'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%230b7226'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23ff0'%20d='M213.3%200h213.3v480H213.3z'/%3e%3cpath%20fill='%23bc0000'%20d='M426.6%200H640v480H426.6z'/%3e%3c/g%3e%3cpath%20fill='%230b7226'%20d='M342%20218.8h71.8l-56.6%2043.6%2020.7%2069.3-56.6-43.6-56.6%2041.6%2020.7-67.3-56.6-43.6h69.8l22.7-71.3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-so'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='so-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23so-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%2340a6ff'%20d='M-128%200h768v512h-768z'/%3e%3cpath%20fill='%23fff'%20d='M336.5%20381.2%20254%20327.7l-82.1%2054%2030.5-87.7-82-54.2L222%20239l31.4-87.5%2032.1%2087.3%20101.4.1-81.5%2054.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sr'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23377e3f'%20d='M.1%200h640v480H.1z'/%3e%3cpath%20fill='%23fff'%20d='M.1%2096h640v288H.1z'/%3e%3cpath%20fill='%23b40a2d'%20d='M.1%20144h640v192H.1z'/%3e%3cpath%20fill='%23ecc81d'%20d='m320%20153.2%2056.4%20173.6-147.7-107.3h182.6L263.6%20326.8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ss'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23078930'%20d='M0%20336h640v144H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20144h640v192H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200h640v144H0z'/%3e%3cpath%20fill='%23da121a'%20d='M0%20168h640v144H0z'/%3e%3cpath%20fill='%230f47af'%20d='m0%200%20415.7%20240L0%20480z'/%3e%3cpath%20fill='%23fcdd09'%20d='M200.7%20194.8%2061.7%20240l139%2045.1L114.9%20167v146z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-st'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2312ad2b'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23ffce00'%20d='M0%20137.1h640V343H0z'/%3e%3cpath%20fill='%23d21034'%20d='M0%200v480l240-240'/%3e%3cg%20id='st-c'%20transform='translate(351.6%20240)scale(.34286)'%3e%3cg%20id='st-b'%3e%3cpath%20id='st-a'%20fill='%23000001'%20d='M0-200V0h100'%20transform='rotate(18%200%20-200)'/%3e%3cuse%20xlink:href='%23st-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23st-b'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23st-b'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3cuse%20xlink:href='%23st-b'%20width='100%25'%20height='100%25'%20transform='rotate(-144)'/%3e%3cuse%20xlink:href='%23st-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3c/g%3e%3cuse%20xlink:href='%23st-c'%20width='100%25'%20height='100%25'%20x='700'%20transform='translate(-523.2)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__pFp3Vu7h__\"","export default \"__VITE_ASSET__C6gqnOQn__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sy'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23000001'%20d='M0%200h640v480H0Z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v320H0Z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v160H0Z'/%3e%3cpath%20fill='%23007a3d'%20d='m161%20300%2039-120%2039%20120-102-74.2h126M401%20300l39-120%2039%20120-102-74.2h126'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__Bckfc3XK__\"","export default \"__VITE_ASSET__C0RraYKt__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-td'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23002664'%20d='M0%200h214v480H0z'/%3e%3cpath%20fill='%23c60c30'%20d='M426%200h214v480H426z'/%3e%3cpath%20fill='%23fecb00'%20d='M214%200h212v480H214z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-tf'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='tf-a'%20fill='%23fff'%20d='m0-21%2012.3%2038L-20-6.5h40L-12.3%2017z'/%3e%3c/defs%3e%3cpath%20fill='%23002395'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h292.8v196.8H0z'/%3e%3cpath%20fill='%23002395'%20d='M0%200h96v192H0z'/%3e%3cpath%20fill='%23ed2939'%20d='M192%200h96v192h-96z'/%3e%3cpath%20fill='%23fff'%20d='m426%20219.6%2015.4%2024.6h44V330l-33-51.6-44.4%2070.8h21.6l22.8-40.8%2046.8%2084%2046.8-84%2022.8%2040.8h21.6L546%20278.4%20513%20330v-47.4h19.8l14.7-23.4H513v-15h44l15.4-24.6zm51.6%20105h-48v16.8h48zm91.2%200h-48v16.8h48z'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='416'%20y='362'%20transform='scale(1.2)'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='371'%20y='328'%20transform='scale(1.2)'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='461'%20y='328'%20transform='scale(1.2)'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='333'%20y='227'%20transform='scale(1.2)'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='499'%20y='227'%20transform='scale(1.2)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='tg-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23tg-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23ffe300'%20d='M0%200h767.6v512H0z'/%3e%3cpath%20fill='%23118600'%20d='M0%20208.1h767.6V311H0zM0%20.2h767.6v102.9H0z'/%3e%3cpath%20fill='%23d80000'%20d='M0%20.3h306.5v310.6H0z'/%3e%3cpath%20fill='%23fff'%20d='M134.4%20128.4c0-.8%2018.9-53%2018.9-53l17%2052.2s57.4%201.7%2057.4.8-45.3%2034.3-45.3%2034.3%2021.4%2060%2020.5%2058.2c-.8-1.7-49.6-36-49.6-36s-49.7%2034.3-48.8%2034.3c.8%200%2018.8-56.5%2018.8-56.5l-44.5-33.4z'/%3e%3cpath%20fill='%23118600'%20d='M0%20409.2h767.6V512H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-th'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23f4f5f8'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%232d2a4a'%20d='M0%20162.5h640v160H0z'/%3e%3cpath%20fill='%23a51931'%20d='M0%200h640v82.5H0zm0%20400h640v80H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-tj'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23060'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v342.9H0z'/%3e%3cpath%20fill='%23c00'%20d='M0%200h640v137.1H0z'/%3e%3cpath%20fill='%23f8c300'%20d='M300.8%20233.6a8.6%208.6%200%200%201%2016%204V272h6.4v-34.3a8.6%208.6%200%200%201%2016-4%2020.2%2020.2%200%201%200-38.4%200'/%3e%3cpath%20fill='%23fff'%20d='M305.4%20224.7a13.7%2013.7%200%200%201%2014.6%206.5%2013.7%2013.7%200%200%201%2014.6-6.5%2014.7%2014.7%200%200%200-29.2%200'/%3e%3cpath%20id='tj-a'%20fill='%23f8c300'%20d='M316.8%20258.3a26%2026%200%200%201-43.8%2016.6%2027%2027%200%200%201-41%2012c2.5%2025%2040%2019.9%2042.8-4.4%2011.7%2020.7%2037.6%2014.7%2045.2-10.6z'/%3e%3cuse%20xlink:href='%23tj-a'%20width='100%25'%20height='100%25'%20fill='%23f8c300'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3cpath%20id='tj-b'%20fill='%23f8c300'%20d='M291.8%20302.6c-5.3%2011.3-15.7%2013.2-24.8%204.1%200%200%203.6-2.6%207.6-3.3-.8-3.1.7-7.5%202.9-9.8a15%2015%200%200%201%206.1%208.1c5.5-.7%208.2%201%208.2%201z'/%3e%3cuse%20xlink:href='%23tj-b'%20width='100%25'%20height='100%25'%20fill='%23f8c300'%20transform='rotate(9.4%20320%20551.3)'/%3e%3cuse%20xlink:href='%23tj-b'%20width='100%25'%20height='100%25'%20fill='%23f8c300'%20transform='rotate(18.7%20320%20551.3)'/%3e%3cpath%20fill='none'%20stroke='%23f8c300'%20stroke-width='11'%20d='M253.5%20327.8a233.1%20233.1%200%200%201%20133%200'/%3e%3cg%20fill='%23f8c300'%20transform='translate(320%20164.6)scale(.68571)'%3e%3cpath%20id='tj-c'%20d='m301930%20415571-790463-574305h977066l-790463%20574305L0-513674z'%20transform='scale(.00005)'/%3e%3c/g%3e%3cg%20id='tj-d'%20fill='%23f8c300'%20transform='translate(320%20260.6)scale(.68571)'%3e%3cuse%20xlink:href='%23tj-c'%20width='100%25'%20height='100%25'%20transform='translate(-70%20-121.2)'/%3e%3cuse%20xlink:href='%23tj-c'%20width='100%25'%20height='100%25'%20transform='translate(-121.2%20-70)'/%3e%3cuse%20xlink:href='%23tj-c'%20width='100%25'%20height='100%25'%20transform='translate(-140)'/%3e%3c/g%3e%3cuse%20xlink:href='%23tj-d'%20width='100%25'%20height='100%25'%20fill='%23f8c300'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tk'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300247d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fed100'%20d='M108.1%20354.6c-6.7-.1%2062.8-37%20120.9-84.4%2076.2-62.1%20240.3-161.4%20288.6-177.6%205-1.7-10.3%208.6-12.3%2011.9-51.5%2061-10.4%20176%2054%20233.9%2019.4%2014.8%2018.4%2015.6%2054.3%2017v3.4zm-4.2%206.7s-4.9%203.5-4.9%206.1c0%202.9%205.5%206.7%205.5%206.7l498.5%205.5%209.2-6.1-12.8-7.9z'/%3e%3cpath%20fill='%23fff'%20d='m106.8%20109.1-4%2012.2%2010.4-7.5%2010.3%207.5-3.9-12.2%2010.3-7.5h-12.8l-3.9-12.2-4%2012.2H96.4zm78.1%2057.4%208.6-6.3h-10.7l-3.3-10.1-3.3%2010.1h-10.6l8.6%206.3-3.3%2010.1%208.6-6.3%208.7%206.3zm-145.2%2013-4-12.2-3.9%2012.2H19l10.3%207.5-3.9%2012.2%2010.3-7.5%2010.4%207.5-4-12.2%2010.4-7.5zm78.1%20122.3-4.6-14.2-4.6%2014.2h-15l12.1%208.7-4.6%2014.3%2012.1-8.8%2012.1%208.8-4.7-14.3%2012.1-8.7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tl'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='tl-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23tl-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23cb000f'%20d='M0%200h1031.2v512H0z'/%3e%3cpath%20fill='%23f8c00c'%20d='M0%200c3.2%200%20512%20256.7%20512%20256.7L0%20512z'/%3e%3cpath%20fill='%23000001'%20d='M0%200c2.1%200%20340.6%20256.7%20340.6%20256.7L0%20512z'/%3e%3cpath%20fill='%23fff'%20d='M187.7%20298.2%20127%20284.7l-31%2052.8-5-59.7-60.7-13.3%2054.9-24.9-3.3-59.3%2040.2%2043.4%2055.4-25.3-28.9%2054%2039.2%2045.8z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DdrlDQo1__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tn'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23e70013'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M320%20119.2a1%201%200%200%200-1%20240.3%201%201%200%200%200%201-240.3M392%20293a90%2090%200%201%201%200-107%2072%2072%200%201%200%200%20107m-4.7-21.7-37.4-12.1-23.1%2031.8v-39.3l-37.4-12.2%2037.4-12.2V188l23.1%2031.8%2037.4-12.1-23.1%2031.8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-to'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23c10000'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h250v200.3H0z'/%3e%3cg%20fill='%23c10000'%3e%3cpath%20d='M102.8%2031.2h39.9v139.6h-39.8z'/%3e%3cpath%20d='M192.6%2081v40H53V81z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tr'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23e30a17'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M407%20247.5c0%2066.2-54.6%20119.9-122%20119.9s-122-53.7-122-120%2054.6-119.8%20122-119.8%20122%2053.7%20122%20119.9'/%3e%3cpath%20fill='%23e30a17'%20d='M413%20247.5c0%2053-43.6%2095.9-97.5%2095.9s-97.6-43-97.6-96%2043.7-95.8%2097.6-95.8%2097.6%2042.9%2097.6%2095.9z'/%3e%3cpath%20fill='%23fff'%20d='m430.7%20191.5-1%2044.3-41.3%2011.2%2040.8%2014.5-1%2040.7%2026.5-31.8%2040.2%2014-23.2-34.1%2028.3-33.9-43.5%2012-25.8-37z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tt'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23e00000'%20fill-rule='evenodd'%20d='M463.7%20480%200%201v478.8zM176.3%200%20640%20479V.2z'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M27.7.2h118.6l468.2%20479.3H492.2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tv'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23009fca'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff40d'%20fill-rule='evenodd'%20d='M593.3%20122.7H621l-22.3%2015.2%208.5%2024.7-22.3-15.3-22.2%2015.3%208.5-24.7-22.3-15.2h27.5l8.5-24.7zm-69.2%20196.8h27.6l-22.3%2015.2%208.5%2024.7-22.3-15.3-22.3%2015.3%208.6-24.7-22.3-15.2H507l8.5-24.7zm69.2-44.6H621l-22.3%2015.2%208.5%2024.7-22.3-15.3-22.2%2015.3%208.5-24.7-22.3-15.2h27.5l8.5-24.7zM295.8%20417.7h27.6L301%20432.8l8.6%2024.6-22.3-15.2-22.3%2015.2%208.6-24.6-22.4-15.3h27.6l8.5-24.6zm62.6-76.5h-27.6l22.3-15.3-8.5-24.6%2022.3%2015.2%2022.3-15.2-8.6%2024.6%2022.3%2015.3h-27.5l-8.5%2024.6zm81.3-112.5H412l22.3-15.2-8.5-24.7%2022.3%2015.3%2022.3-15.3-8.6%2024.7%2022.3%2015.2h-27.5l-8.5%2024.7zm68.3-23.3h-27.6l22.4-15.3-8.6-24.6%2022.3%2015.2%2022.3-15.2-8.6%2024.6%2022.4%2015.3H525l-8.5%2024.6zM439.7%20400H412l22.3-15.2L426%20360l22.3%2015.2%2022.3-15.2-8.6%2024.7%2022.3%2015.2h-27.5l-8.5%2024.7zm-81.3%2019.9h-27.6l22.3-15.2-8.5-24.7%2022.3%2015.2%2022.3-15.2-8.6%2024.6L403%20420h-27.5l-8.5%2024.7z'/%3e%3cpath%20fill='%23012169'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23FFF'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='%23C8102E'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23FFF'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='%23C8102E'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tw'%20viewBox='0%200%20640%20480'%3e%3cclipPath%20id='tw-a'%3e%3cpath%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3cg%20clip-path='url(%23tw-a)'%3e%3cpath%20fill='red'%20d='M0%200h720v480H0z'/%3e%3cpath%20fill='%23000095'%20d='M0%200h360v240H0z'/%3e%3cg%20fill='%23fff'%3e%3cpath%20d='m154%20126.9-2.5%209.6%209.4%202.6-1.8-7.1zm46.9%205.1-1.8%207.1%209.4-2.6-2.5-9.6zm-41.8-24-5.1%205.1%201.9%206.9z'/%3e%3cpath%20d='m155.9%20120-1.9%206.9%205.1%205.1z'/%3e%3cpath%20d='m154%20113.1-6.9%206.9%206.9%206.9%201.9-6.9zm14%2027.8%205.1%205.1%206.9-1.9zm18.9%205.1%209.6%202.5%202.6-9.4-7.1%201.8z'/%3e%3cpath%20d='m192%20140.9%207.1-1.8%201.8-7.1zm-31.1-1.8%202.6%209.4%209.6-2.5-5.1-5.1zm19.1%205%206.9%201.9%205.1-5.1z'/%3e%3cpath%20d='m173.1%20146%206.9%206.9%206.9-6.9-6.9-1.9zm-12.2-45.1-9.4%202.6%202.5%209.6%205.1-5.1zm-1.8%2031.1%201.8%207.1%207.1%201.8zm45-12%201.9-6.9-5.1-5.1z'/%3e%3cpath%20d='m168%2099.1-7.1%201.8-1.8%207.1zm32.9%208.9-1.8-7.1-7.1-1.8zm5.1%2018.9%206.9-6.9-6.9-6.9-1.9%206.9z'/%3e%3cpath%20d='m200.9%20108-8.9-8.9-12-3.2-12%203.2-8.9%208.9-3.2%2012%203.2%2012%208.9%208.9%2012%203.2%2012-3.2%208.9-8.9%203.2-12z'/%3e%3cpath%20d='m200.9%20132%205.1-5.1-1.9-6.9zm5.1-18.9%202.5-9.6-9.4-2.6%201.8%207.1zm-6.9-12.2-2.6-9.4-9.6%202.5%205.1%205.1zm-26-6.9-9.6-2.5-2.6%209.4%207.1-1.8zm6.9%201.9-6.9-1.9-5.1%205.1z'/%3e%3cpath%20d='m186.9%2094-6.9-6.9-6.9%206.9%206.9%201.9z'/%3e%3cpath%20d='m192%2099.1-5.1-5.1-6.9%201.9zM173.1%20146l-9.6%202.5%204.5%2016.6%2012-12.2zm-5.1%2019.1%2012%2044.9%2012-44.9-12-12.2zm-7.1-26-9.4-2.6-4.4%2016.4%2016.4-4.4z'/%3e%3cpath%20d='m147.1%20152.9-12%2045.1%2032.9-32.9-4.5-16.6zm-12-20.9L102%20165.1l45.1-12.2%204.4-16.4z'/%3e%3cpath%20d='m154%20126.9-6.9-6.9-12%2012%2016.4%204.5zm0-13.8-2.5-9.6-16.4%204.5%2012%2012z'/%3e%3cpath%20d='M135.1%20108%2090%20120l45.1%2012%2012-12zm90%2024-16.6%204.5%204.4%2016.4%2045.1%2012.2z'/%3e%3cpath%20d='m199.1%20139.1-2.6%209.4%2016.4%204.4-4.4-16.4zm-12.2%206.9-6.9%206.9%2012%2012.2%204.5-16.6zm19.1-19.1%202.5%209.6%2016.6-4.5-12.2-12z'/%3e%3cpath%20d='m192%20165.1%2033.1%2032.9-12.2-45.1-16.4-4.4zm7.1-64.2%209.4%202.6%204.4-16.4-16.4%204.4z'/%3e%3cpath%20d='M225.1%20108%20258%2075.1l-45.1%2012-4.4%2016.4zm-12.2-20.9L225.1%2042%20192%2075.1l4.5%2016.4zm12.2%2044.9%2044.9-12-44.9-12-12.2%2012z'/%3e%3cpath%20d='m206%20113.1%206.9%206.9%2012.2-12-16.6-4.5zm-38-38L135.1%2042l12%2045.1%2016.4%204.4z'/%3e%3cpath%20d='m160.9%20100.9%202.6-9.4-16.4-4.4%204.4%2016.4z'/%3e%3cpath%20d='m147.1%2087.1-45.1-12%2033.1%2032.9%2016.4-4.5zm39.8%206.9%209.6-2.5-4.5-16.4-12%2012z'/%3e%3cpath%20d='M192%2075.1%20180%2030l-12%2045.1%2012%2012z'/%3e%3cpath%20d='m173.1%2094%206.9-6.9-12-12-4.5%2016.4z'/%3e%3c/g%3e%3ccircle%20cx='180'%20cy='120'%20r='51.1'%20fill='%23000095'/%3e%3ccircle%20cx='180'%20cy='120'%20r='45.1'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tz'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='tz-a'%3e%3cpath%20fill-opacity='.7'%20d='M10%200h160v120H10z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23tz-a)'%20transform='matrix(4%200%200%204%20-40%200)'%3e%3cpath%20fill='%2309f'%20d='M0%200h180v120H0z'/%3e%3cpath%20fill='%23090'%20d='M0%200h180L0%20120z'/%3e%3cpath%20fill='%23000001'%20d='M0%20120h40l140-95V0h-40L0%2095z'/%3e%3cpath%20fill='%23ff0'%20d='M0%2091.5%20137.2%200h13.5L0%20100.5zM29.3%20120%20180%2019.5v9L42.8%20120z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ua'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23ffd500'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23005bbb'%20d='M0%200h640v240H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ug'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ug-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23ug-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%23ffe700'%20fill-rule='evenodd'%20d='M-128%20341.4h768v85.3h-768z'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M-128%20256h768v85.3h-768z'/%3e%3cpath%20fill='%23de3908'%20fill-rule='evenodd'%20d='M-128%20170.7h768V256h-768z'/%3e%3cpath%20fill='%23ffe700'%20fill-rule='evenodd'%20d='M-128%2085.4h768v85.3h-768z'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M-128%200h768v85.3h-768z'/%3e%3cpath%20fill='%23fffdff'%20fill-rule='evenodd'%20stroke='%23000'%20d='M335.7%20256a79.7%2079.7%200%201%201-159.4%200%2079.7%2079.7%200%200%201%20159.4%200z'/%3e%3cpath%20fill='%23de3108'%20fill-rule='evenodd'%20stroke='%23000'%20d='m242%20194.9-5.2-9.5c2-2%205.3-3.6%2010.7-3.6l-.6%2010.5z'/%3e%3cpath%20fill='%23ffe700'%20fill-rule='evenodd'%20stroke='%23000'%20d='m247%20192.3.7-10.5s10.7-.6%2016.5%206.4l-5.7%208.2z'/%3e%3cpath%20fill='%23de3108'%20fill-rule='evenodd'%20stroke='%23000'%20d='m258.6%20196.3%205.3-8.2c3.5%203.7%205%206.3%205.5%2010.3.1.1-8.3%202.1-8.3%202z'/%3e%3cpath%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M244.6%20331.1s9.9-11.3%2029.1-8.9c-2.9-4.7-12.3-4.1-12.3-4.1s-2.8-22-.6-23.2%2012%20.1%2012%20.1c1.2%200%203.4-3.4%201.6-5.6-1.7-2.2-6.8-10.5-4.7-12.2%202.1-1.6%2013.4%201%2013.4%201l-32-41s-3.3-15.5%203.3-23c7.9-6.5%207-13.6%206.8-13.5-1.1-7.2-12-12.3-19.4-5.7-4.3%205.2-1.4%209.2-1.4%209.2s-11.5%203.1-11.9%205.1c-.5%202%2012.9-.3%2012.9-.3l-1.3%209.1s-26%2023.6-6%2044l.6-.8s7%208.6%2014.3%2010.5c7%207%206.3%206%206.3%206s1.3%2011.1%200%2013.3c-1.7-.5-19.3-1.2-21.9-.2-2.4.8-11.4.3-9.2%2015.1l3.3-7.5s-.3%205.3%201.9%207.2c-.4-5.6%202.1-9.4%202.1-9.4s.4%206.2%201.8%207c1.4%201%201.4-10%209-9%207.4.9%2012.9.6%2012.9.6s2.5%2021.4%201.7%2023.4c-5.4-1.3-18.4.5-19.2%203.8%207.6-.5%2011.1.4%2011.1.4s-6.1%205.5-4.2%208.6'/%3e%3cpath%20fill='%239ca69c'%20fill-rule='evenodd'%20stroke='%239ca69c'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M247.6%20214.8s-18.9%2020.8-10.7%2036.7c.4-2.2.2-3.6.5-3.5-.5-.3%202.3%201.9%202.1%201.5%200-1.2-.8-3.7-.8-3.7l2.5.7-1.5-2.8%203.7.4s-1.3-3.4-.9-3.4l3%20.2c-5.4-9.6-.3-17.6%202.1-26.2z'/%3e%3cpath%20fill='%239ca69c'%20fill-rule='evenodd'%20stroke='%239ca69c'%20d='M254.2%20196.9s1%207.2-3%209.2c-.5.5-3%201.3-2.6%202.8.4%202%201.5%201.6%203%201.2%204.1-.7%208.9-9.4%202.6-13.2z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M247.2%20203a1.5%201.5%200%201%201-3%200%201.5%201.5%200%200%201%203%200'/%3e%3cpath%20fill='%23de3108'%20fill-rule='evenodd'%20stroke='%23000'%20d='M241.1%20209c-1%20.9-6.2%206.3-1%208.3%205.3-1.4%203.8-2.4%205-3.6%200-2.5-2.6-3.1-4-4.6z'/%3e%3cpath%20fill='%239ca69c'%20fill-rule='evenodd'%20stroke='%239ca69c'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M252.6%20260.5c-.3%201.2-1.5%205.6.1%209%204.6-2%206.7-1.4%208.2-.4-3.7-3-5.2-4.3-8.3-8.6'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23fff'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='m260.4%20281.1.2%2010.2s3.6.6%205.2%200%200-7-5.4-10.2'/%3e%3cpath%20fill='%239ca69c'%20fill-rule='evenodd'%20stroke='%23000'%20d='M286%20282.4s-6.5-15.8-23.2-19.8-14.5-21.8-13.2-22.9c.8-1.5%201.3-3.9%206.1-1.6s27%2013.4%2030.2%2014%20.4%2030.7.2%2030.3z'/%3e%3cpath%20fill='%23de3108'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M270.2%20262.5c-.3.2%2022.3%2013.4%2015.5%2024.7%206.4-4.3%204.4-11.7%204.4-11.7s5.2%2013.7-7.6%2020.4c1.4%201.2%202.3%201%202.3%201l-2.2%202.1s-1%201.7%207.6-2.5c-2.3%201.9-2.5%203.3-2.5%203.3s.6%201.8%206.2-3.1c-4.5%204.9-5.5%207.4-5.5%207.3%2012.3-1%2039-41-8.4-52.7l2.1%202.2z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M271.2%20258.6c3%202.2%204.1%203%204.5%204-2.8-.6-5.3-.4-5.3-.4s-6.1-5.8-7.2-6.3c-.8%200-5.6-3-5.6-3-2.3-1.2-4.5-9.3%204.2-7a93%2093%200%200%200%2010.3%204.6l10.7%203.4%206.2%206.9s-11-5.4-12.4-5.5c3%202.4%204.7%205.8%204.7%205.8-3.5-1-6.5-2-10.1-2.5'/%3e%3cpath%20fill='none'%20stroke='%23fff'%20stroke-linecap='round'%20stroke-width='.9'%20d='M228.4%20209.9s10.5-2.6%2011.8-2.2'/%3e%3cpath%20fill='%23de3908'%20fill-rule='evenodd'%20d='M-128%20426.7h768V512h-768z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-um'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23bd3d44'%20d='M0%200h640v480H0'/%3e%3cpath%20stroke='%23fff'%20stroke-width='37'%20d='M0%2055.3h640M0%20129h640M0%20203h640M0%20277h640M0%20351h640M0%20425h640'/%3e%3cpath%20fill='%23192f5d'%20d='M0%200h364.8v258.5H0'/%3e%3cmarker%20id='um-a'%20markerHeight='30'%20markerWidth='30'%3e%3cpath%20fill='%23fff'%20d='m14%200%209%2027L0%2010h28L5%2027z'/%3e%3c/marker%3e%3cpath%20fill='none'%20marker-mid='url(%23um-a)'%20d='m0%200%2016%2011h61%2061%2061%2061%2060L47%2037h61%2061%2060%2061L16%2063h61%2061%2061%2061%2060L47%2089h61%2061%2060%2061L16%20115h61%2061%2061%2061%2060L47%20141h61%2061%2060%2061L16%20166h61%2061%2061%2061%2060L47%20192h61%2061%2060%2061L16%20218h61%2061%2061%2061%2060z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BS5_gH7a__\"","export default \"__VITE_ASSET__Dzjuol2Z__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-uy'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%230038a8'%20d='M266%2053.3h374v53.4H266zm0%20106.7h374v53.3H266zM0%20266.7h640V320H0zm0%20106.6h640v53.4H0z'/%3e%3cg%20fill='%23fcd116'%20stroke='%23000'%20stroke-miterlimit='20'%20stroke-width='.6'%20transform='translate(133.3%20133.3)scale(2.93333)'%3e%3cg%20id='uy-c'%3e%3cg%20id='uy-b'%3e%3cg%20id='uy-a'%3e%3cpath%20stroke-linecap='square'%20d='m-2%208.9%203%204.5c-12.4%209-4.9%2014.2-13.6%2017%205.4-5.2-.9-5.7%203.7-16.8'/%3e%3cpath%20fill='none'%20d='M-4.2%2010.2c-6.8%2011.2-2.4%2017.4-8.4%2020.3'/%3e%3cpath%20d='M0%200h6L0%2033-6%200h6v33'/%3e%3c/g%3e%3cuse%20xlink:href='%23uy-a'%20width='100%25'%20height='100%25'%20transform='rotate(45)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uy-b'%20width='100%25'%20height='100%25'%20transform='rotate(90)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uy-c'%20width='100%25'%20height='100%25'%20transform='scale(-1)'/%3e%3ccircle%20r='11'/%3e%3c/g%3e%3cg%20transform='translate(133.3%20133.3)scale(.29333)'%3e%3cg%20id='uy-d'%3e%3cpath%20d='M81-44c-7%208-11-6-36-6S16-35%2012-38s21-21%2029-22%2031%207%2040%2016m-29%209c7%206%201%2019-6%2019S26-28%2032-36'/%3e%3cpath%20d='M19-26c1-12%2011-14%2027-14s23%2012%2029%2015c-7%200-13-10-29-10s-16%200-27%2010m3%202c4-6%209%206%2020%206s17-3%2024-8-10%2012-21%2012-26-6-23-10'/%3e%3cpath%20d='M56-17c13-7%205-17%200-19%202%202%2010%2012%200%2019M0%2043c6%200%208-2%2016-2s27%2011%2038%207c-23%209-14%203-54%203h-5m63%206c-4-7-3-5-11-16%208%206%2010%209%2011%2016M0%2067c25%200%2021-5%2054-19-24%203-29%2011-54%2011h-5m5-29c7%200%209-5%2017-5s19%203%2024%207c1%201-3-8-11-9S25%209%2016%207c0%204%203%203%204%209%200%205-9%205-11%200%202%208-4%208-9%208'/%3e%3c/g%3e%3cuse%20xlink:href='%23uy-d'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3cpath%20d='M0%2076c-5%200-18%203%200%203s5-3%200-3'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-uz'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%231eb53a'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='%230099b5'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%20153.6h640v172.8H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20163.2h640v153.6H0z'/%3e%3ccircle%20cx='134.4'%20cy='76.8'%20r='57.6'%20fill='%23fff'/%3e%3ccircle%20cx='153.6'%20cy='76.8'%20r='57.6'%20fill='%230099b5'/%3e%3cg%20fill='%23fff'%20transform='translate(261.1%20122.9)scale(1.92)'%3e%3cg%20id='uz-e'%3e%3cg%20id='uz-d'%3e%3cg%20id='uz-c'%3e%3cg%20id='uz-b'%3e%3cpath%20id='uz-a'%20d='M0-6-1.9-.3%201%20.7'/%3e%3cuse%20xlink:href='%23uz-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uz-b'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uz-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3cuse%20xlink:href='%23uz-c'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20y='-24'/%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20y='-48'/%3e%3c/g%3e%3cuse%20xlink:href='%23uz-e'%20width='100%25'%20height='100%25'%20x='24'/%3e%3cuse%20xlink:href='%23uz-e'%20width='100%25'%20height='100%25'%20x='48'/%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20x='-48'/%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20x='-24'/%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20x='-24'%20y='-24'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__D3$ECMbb__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-vc'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23f4f100'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23199a00'%20d='M490%200h150v480H490z'/%3e%3cpath%20fill='%230058aa'%20d='M0%200h150v480H0z'/%3e%3cpath%20fill='%23199a00'%20d='m259.3%20130-46.4%2071.3%2044.7%2074.4%2043.8-73.7zm121.2%200-46.3%2071.3%2044.7%2074.4%2043.8-73.7zm-61.2%2097.3-46.4%2071.4%2044.8%2074.4%2043.8-73.7-42.2-72z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-ve'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cg%20id='ve-d'%20transform='translate(0%20-36)'%3e%3cg%20id='ve-c'%3e%3cg%20id='ve-b'%3e%3cpath%20id='ve-a'%20fill='%23fff'%20d='M0-5-1.5-.2l2.8.9z'/%3e%3cuse%20xlink:href='%23ve-a'%20width='180'%20height='120'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23ve-b'%20width='180'%20height='120'%20transform='rotate(72)'/%3e%3c/g%3e%3cuse%20xlink:href='%23ve-b'%20width='180'%20height='120'%20transform='rotate(-72)'/%3e%3cuse%20xlink:href='%23ve-c'%20width='180'%20height='120'%20transform='rotate(144)'/%3e%3c/g%3e%3c/defs%3e%3cpath%20fill='%23cf142b'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300247d'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23fc0'%20d='M0%200h640v160H0z'/%3e%3cg%20id='ve-f'%20transform='matrix(4%200%200%204%20320%20336)'%3e%3cg%20id='ve-e'%3e%3cuse%20xlink:href='%23ve-d'%20width='180'%20height='120'%20transform='rotate(10)'/%3e%3cuse%20xlink:href='%23ve-d'%20width='180'%20height='120'%20transform='rotate(30)'/%3e%3c/g%3e%3cuse%20xlink:href='%23ve-e'%20width='180'%20height='120'%20transform='rotate(40)'/%3e%3c/g%3e%3cuse%20xlink:href='%23ve-f'%20width='180'%20height='120'%20transform='rotate(-80%20320%20336)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DrShXt9M__\"","export default \"__VITE_ASSET__KtASqI____\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-vn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='vn-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23vn-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%23da251d'%20d='M-128%200h768v512h-768z'/%3e%3cpath%20fill='%23ff0'%20d='M349.6%20381%20260%20314.3l-89%2067.3L204%20272l-89-67.7%20110.1-1%2034.2-109.4L294%20203l110.1.1-88.5%2068.4%2033.9%20109.6z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-vu'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='vu-a'%3e%3cpath%20d='M0%200v475l420-195h480v-85H420Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cpath%20fill='%23009543'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23d21034'%20d='M0%200h640v240H0z'/%3e%3cg%20clip-path='url(%23vu-a)'%20transform='scale(.71111%201.01053)'%3e%3cpath%20stroke='%23fdce12'%20stroke-width='110'%20d='m0%200%20420%20195h480v85H420L0%20475'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='60'%20d='m0%200%20420%20195h480m0%2085H420L0%20475'/%3e%3c/g%3e%3cg%20fill='%23fdce12'%20transform='translate(-22)scale(1.01053)'%3e%3cpath%20d='M106.9%20283v27c23.5%200%2069.7-18%2069.7-76.1%200-58.1-49.3-68.9-64-68.9-14.8%200-60.3%2010.6-60.3%2058%200%2047.6%2044.7%2052%2053.5%2052%208.8%200%2041.8-8%2038-43.6a35.5%2035.5%200%200%201-35.4%2031.5c-24%200-39-17.8-39-35.4%200-17.6%2014.6-41.2%2039.9-41.2%2025.3%200%2043.8%2022.5%2043.8%2045.1%200%2022.7-17.8%2051.5-46.2%2051.5z'/%3e%3cg%20id='vu-b'%3e%3cpath%20stroke='%23fdce12'%20stroke-width='.8'%20d='m86.2%20247.7%201.4%201s11.2-25.5%2041.1-43.6c-3.8%202-23.8%2012-42.5%2042.6z'/%3e%3cpath%20d='M89.1%20243.3s-3.4-7-.4-10.2c3-3.1%201.7%208.3%201.7%208.3l1.3-1.9s-2-8.6.2-10.4c2.3-1.9%201.2%208.3%201.2%208.3l1.4-1.8s-1.5-8.4.7-10c2.3-1.6.9%208%20.9%208l1.6-2s-1.2-8%201.5-9.9c2.7-1.9.3%207.6.3%207.6l1.8-2s-.8-7.3%201.5-9c2.3-1.6.4%207%20.4%207l1.6-1.8s-.5-6.8%201.7-8.4c2.3-1.6.2%206.5.2%206.5l1.7-1.6s-.4-6.9%202.4-8.2c2.8-1.3-.5%206.4-.5%206.4l2-1.6s.5-8%202.9-8.7c2.4-.8-1%207-1%207l1.7-1.4s.9-6.8%203.5-7.6c2.7-.9-1.6%206.2-1.6%206.2l1.7-1.3s1.9-6.8%204.4-7.6c2.4-.7-2.6%206.5-2.6%206.5l1.7-1.2s2.7-6.2%205-6.6c2.1-.4-2.6%205.1-2.6%205.1l2.1-1.2s3.5-6.4%204.8-4.5c1.2%202-5%204.9-5%204.9l-2%201.2s7.5-3.6%208.4-1.8c.9%201.8-10.3%203-10.3%203l-1.8%201.2s7.5-2%206.6-.1c-1%201.9-8.4%201.5-8.4%201.5l-1.7%201.2s7.5-1.8%206.5%200c-1%201.6-8.3%201.5-8.3%201.5l-1.8%201.5s7.3-2%206.2.3c-1%202.2-9.4%202.1-9.4%202.1l-2%202s7.7-2.7%207-.6c-.6%202-9.4%203-9.4%203l-2%202s8.3-2.7%205.8-.2c-2.4%202.6-8.5%203.2-8.5%203.2l-2.3%203s8.2-5%207-2.2c-1.1%202.8-9.2%204.7-9.2%204.7l-1.6%202s7.4-4.3%206.6-2c-.7%202.5-8.6%205-8.6%205l-1.3%201.8s8.7-5.2%208-2.5c-.8%202.6-9.1%204.5-9.1%204.5l-1%201.7s8-4.7%208-2.4c.2%202.2-9.4%204.4-9.4%204.4z'/%3e%3c/g%3e%3cuse%20xlink:href='%23vu-b'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20220%200)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-wf'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ws'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23002b7f'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23fff'%20d='m180%20229.3-20.7-14-19.9%2014.1%206.5-24.9-19-15.2%2024.5-1.5%208.1-23.6%208.8%2024%2024%20.7-19%2016.3zm-3.6-165.6L159.8%2053l-16%2010.4%204.4-20-14.6-12.7%2019.4-1.6%207.2-18.6%207.4%2018.7%2019.1%201.7L172%2044.3zm-73%2059.5-16-11-16.7%2011%205.2-19.4L60.8%2091%2080%2090l7-19%206.8%2018.9%2019.6%201.1-15%2012.5zM250%20110l-15.4-10-15%2010%204.4-18.3-14-11.8%2018.3-1.5%206.3-17.2%207%2017.4%2017.7%201-13.7%2012.3zm-43.1%2043.4-10.3-6.4-10.3%206.6%202.7-12.3-9.2-8.3%2012-1%204.6-11.6%204.9%2011.6%2011.9%201-9.1%208.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CwCtSaY2__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-xx'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23adb5bd'%20stroke-width='1.1'%20d='M.5.5h638.9v478.9H.5z'/%3e%3cpath%20fill='none'%20stroke='%23adb5bd'%20stroke-width='1.1'%20d='m.5.5%20639%20479m0-479-639%20479'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ye'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v472.8H0z'/%3e%3cpath%20fill='%23f10600'%20d='M0%200h640v157.4H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20322.6h640V480H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-yt'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-za'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='za-a'%3e%3cpath%20fill-opacity='.7'%20d='M-71.9%200h682.7v512H-71.9z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23za-a)'%20transform='translate(67.4)scale(.93748)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23000001'%20d='M-71.9%20407.8V104.4L154%20256.1z'/%3e%3cpath%20fill='%23000c8a'%20d='m82.2%20512.1%20253.6-170.6H696V512H82.2z'/%3e%3cpath%20fill='%23e1392d'%20d='M66%200h630v170.8H335.7S69.3-1.7%2066%200'/%3e%3cpath%20fill='%23ffb915'%20d='M-71.9%2064v40.4L154%20256-72%20407.8v40.3l284.5-192z'/%3e%3cpath%20fill='%23007847'%20d='M-71.9%2064V0h95l301.2%20204h371.8v104.2H324.3L23%20512h-94.9v-63.9l284.4-192L-71.8%2064z'/%3e%3cpath%20fill='%23fff'%20d='M23%200h59.2l253.6%20170.7H696V204H324.3zm0%20512.1h59.2l253.6-170.6H696v-33.2H324.3L23%20512z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BpS5J6Z3__\"","export default \"__VITE_ASSET__D8lTC8lr__\"","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { getPublicUrl } from 'pmt-modules/environment'\r\n\r\n// Import all SVG flags with Vite's glob import (eager mode)\r\nconst flagModules = import.meta.glob('./flags/*.svg', {\r\n  eager: true,\r\n  query: '?url',\r\n  import: 'default',\r\n})\r\n\r\n// Create a map for easier access\r\nconst flags = Object.fromEntries(\r\n  Object.entries(flagModules).map(([path, url]) => {\r\n    // Extract country code from path: './flags/fr.svg' → 'fr'\r\n    const countryCode = path.match(/\\.\\/flags\\/(.+)\\.svg/)[1]\r\n    return [countryCode, url]\r\n  })\r\n)\r\n\r\nlet Flag = ({ className, country, alt = '', ...otherProps }) => {\r\n  // Determine which flag to use: country flag or default 'xx'\r\n  const countryCode = !isEmpty(country) ? country.toLowerCase() : 'xx'\r\n  const flagSvg = flags[countryCode] || flags['xx']\r\n\r\n  // The flagSvg is already a URL string due to the '?url' query in the glob import\r\n  // Note: small svg might even be inlined as a data URI, so we don't prepend the public URL in that case\r\n  const fullPath = flagSvg.startsWith('data:') ? flagSvg : getPublicUrl() + flagSvg\r\n\r\n  return <img className={className} src={fullPath} alt={alt} {...otherProps} />\r\n}\r\n\r\nFlag = pure(Flag)\r\nFlag.displayName = 'Flag'\r\n\r\nexport default Flag\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport shallowEqual from 'recompose/shallowEqual'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport clsx from 'clsx'\r\n\r\nimport Select from '../Select'\r\nimport { MenuItem } from '../Menu'\r\nimport TextField from '../TextField'\r\nimport { InputLabel, InputAdornment } from 'pmt-ui/Input'\r\nimport { FormControl } from 'pmt-ui/Form'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Flag from 'pmt-utils/country/flag'\r\nimport {\r\n  getCountryCodes,\r\n  getCountryFromCountryCode,\r\n  getCountryDialCodeFromCountryCode,\r\n  formatPhoneNumberAsYouType,\r\n  parse,\r\n} from 'pmt-utils/phone'\r\nimport { getLocale, getCountryCodeForLocale } from 'pmt-modules/i18n/utils'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    flexDirection: 'row',\r\n    height: 48,\r\n  },\r\n  phoneNumberRoot: {\r\n    marginTop: 16,\r\n    flexGrow: 1,\r\n  },\r\n  label: {\r\n    top: 0,\r\n    left: 0,\r\n    position: 'absolute',\r\n    transform: 'translate(0, 1.5px) scale(0.75)', // TODO: use theme?\r\n    transformOrigin: 'top left',\r\n  },\r\n  flagIcon: {\r\n    width: 19,\r\n    height: 15,\r\n    marginRight: theme.spacing(1),\r\n    borderRadius: 2,\r\n  },\r\n  selectedValue: {\r\n    position: 'absolute',\r\n    top: `calc(50% - 9px)`,\r\n    display: 'flex',\r\n    height: '100%',\r\n    width: '100%',\r\n    // TODO: remove after migrating to TypoGraphy\r\n    fontSize: 16,\r\n    paddingTop: 2,\r\n  },\r\n  // New CSS from massive material update\r\n  selectRoot: {\r\n    position: 'relative',\r\n    width: 10,\r\n  },\r\n  // Modern (outlined) variant styles\r\n  outlinedRoot: {\r\n    width: '100%',\r\n  },\r\n  outlinedAdornment: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  outlinedIcon: {\r\n    color: theme.pmt.colors.grey500,\r\n    fontSize: 20,\r\n    marginRight: theme.spacing(0.5),\r\n  },\r\n  outlinedSelectRoot: {\r\n    minWidth: 44,\r\n  },\r\n  outlinedSelectedValue: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n})\r\n\r\nconst getInitialState = () => {\r\n  const locale = getLocale()\r\n\r\n  if (locale) {\r\n    let countryCode = getCountryCodeForLocale(locale)\r\n\r\n    if (countryCode) {\r\n      const countryDialCode = getCountryDialCodeFromCountryCode(countryCode)\r\n\r\n      if (countryDialCode) {\r\n        //We return countryCode+countryDialCode only if we recognized both at the same time\r\n        return {\r\n          localeDetected: true,\r\n          countryCode: countryCode,\r\n          countryDialCode: countryDialCode,\r\n          phoneNumber: countryDialCode,\r\n          formattedPhoneNumber: countryDialCode,\r\n          nationalNumber: '',\r\n          touched: false,\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  //We return France/+33 as default\r\n  return {\r\n    localeDetected: false,\r\n    countryCode: 'FR',\r\n    countryDialCode: '+33',\r\n    phoneNumber: '+33',\r\n    formattedPhoneNumber: '+33',\r\n    nationalNumber: '',\r\n    touched: false,\r\n  }\r\n}\r\n\r\nconst makeSureStartWithPlusOrEmpty = inputValue => {\r\n  return inputValue.startsWith('+') || inputValue === '' ? inputValue : `+${inputValue}`\r\n}\r\n\r\nclass PhoneField extends React.Component {\r\n  static propTypes = {\r\n    /**\r\n     * The value of the text field.\r\n     */\r\n    value: PropTypes.any,\r\n  }\r\n\r\n  escapeSetFormattedNumber = false // allow us to skip infinite loop but setting right phone number and skip error display while there's none\r\n\r\n  state = getInitialState()\r\n\r\n  componentDidMount() {\r\n    //Initialize state from value prop on first mount\r\n    if (this.props.value) {\r\n      this.componentWillReceiveProps(this.props)\r\n    }\r\n\r\n    //We apply the initCountryCode if set and either override boolean is true or locale wasn't detected\r\n    if (\r\n      this.props.initCountryCode &&\r\n      (this.props.initCountryCodeOverridesBrowserLocale || !this.state.localeDetected)\r\n    ) {\r\n      this.handleCountryCodeChange(null, this.props.initCountryCode)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    //console.log('[componentWillReceiveProps] nextProps: ', nextProps)\r\n    //console.log('[componentWillReceiveProps] state: ', this.state)\r\n\r\n    const nextPropsValue = nextProps.value\r\n\r\n    const libPhoneNumber = parse(nextPropsValue)\r\n    if (libPhoneNumber && libPhoneNumber.isValid()) {\r\n      const newState = {\r\n        ...this.state,\r\n        phoneNumber: libPhoneNumber.number,\r\n        nationalNumber: libPhoneNumber.nationalNumber,\r\n        formattedPhoneNumber: libPhoneNumber.formatInternational(),\r\n      }\r\n\r\n      if (libPhoneNumber.country) {\r\n        const dialCode = getCountryDialCodeFromCountryCode(libPhoneNumber.country)\r\n\r\n        if (dialCode) {\r\n          newState.countryCode = libPhoneNumber.country\r\n          newState.countryDialCode = makeSureStartWithPlusOrEmpty(dialCode)\r\n        }\r\n      }\r\n\r\n      this.setState(newState, () => {\r\n        // on certain devices (old samsung), cursor \"jumps\" on previous char\r\n        // we position it at the end on setState callback\r\n        // setTimeout is necessary to ensure it's working\r\n        if (!isNil(this.input)) {\r\n          const cursorPosition = this.input.selectionStart\r\n          setTimeout(\r\n            () => this.input && this.input.setSelectionRange(cursorPosition, cursorPosition),\r\n            0\r\n          )\r\n        }\r\n      })\r\n    }\r\n  }\r\n\r\n  shouldComponentUpdate(nextProps, nextState) {\r\n    return !shallowEqual(this.props, nextProps) || !shallowEqual(this.state, nextState)\r\n  }\r\n\r\n  handleChange = (asYouTypeResults, newState) => {\r\n    const country = asYouTypeResults.country\r\n    const number = asYouTypeResults.number\r\n\r\n    if (country) {\r\n      const dialCode = getCountryDialCodeFromCountryCode(country)\r\n\r\n      if (dialCode) {\r\n        newState.countryCode = country\r\n        newState.countryDialCode = dialCode\r\n      }\r\n    }\r\n\r\n    if (number) {\r\n      newState.phoneNumber = number.number\r\n      newState.nationalNumber = number.nationalNumber\r\n\r\n      if (number.country) {\r\n        const dialCode = getCountryDialCodeFromCountryCode(number.country)\r\n\r\n        if (dialCode) {\r\n          newState.countryCode = number.country\r\n          newState.countryDialCode = makeSureStartWithPlusOrEmpty(dialCode)\r\n        }\r\n      }\r\n    }\r\n\r\n    this.setState(newState, () => {\r\n      this.props.onChange(`${this.state.phoneNumber}`)\r\n    })\r\n  }\r\n\r\n  handleCountryCodeChange = (event, countryCode) => {\r\n    if (countryCode === this.state.countryCode) return\r\n\r\n    const countryDialCode = getCountryDialCodeFromCountryCode(countryCode)\r\n\r\n    const extractedNationalNumber = this.state.phoneNumber.startsWith(this.state.countryDialCode)\r\n      ? this.state.phoneNumber.slice(this.state.countryDialCode.length)\r\n      : this.state.nationalNumber\r\n\r\n    const newFormattedNumber = makeSureStartWithPlusOrEmpty(\r\n      `${countryDialCode}${extractedNationalNumber}`\r\n    )\r\n    const asYouTypeResults = formatPhoneNumberAsYouType(newFormattedNumber, this.state.countryCode)\r\n\r\n    const inputFormatted = asYouTypeResults.input\r\n    const nationalNumber = asYouTypeResults.nationalNumber\r\n\r\n    const newState = {\r\n      ...this.state,\r\n      countryCode: countryCode,\r\n      countryDialCode: countryDialCode,\r\n      phoneNumber: inputFormatted.replace(/[ -()]/g, ''),\r\n      formattedPhoneNumber: inputFormatted,\r\n      nationalNumber: nationalNumber,\r\n    }\r\n\r\n    this.handleChange(asYouTypeResults, newState)\r\n  }\r\n\r\n  handleInputChange = event => {\r\n    this.escapeSetFormattedNumber = false\r\n\r\n    const inputValue = makeSureStartWithPlusOrEmpty(event.target.value)\r\n    const asYouTypeResults = formatPhoneNumberAsYouType(inputValue, this.state.countryCode)\r\n\r\n    const inputFormatted = asYouTypeResults.input\r\n    const nationalNumber = asYouTypeResults.nationalNumber\r\n\r\n    const newState = {\r\n      ...this.state,\r\n      phoneNumber: inputFormatted.replace(/[ -()]/g, ''),\r\n      formattedPhoneNumber: inputFormatted,\r\n      nationalNumber: nationalNumber,\r\n      touched: true,\r\n    }\r\n\r\n    this.handleChange(asYouTypeResults, newState)\r\n  }\r\n\r\n  renderOutlined = () => {\r\n    const { classes, className, label, required, disabled, startAdornment } = this.props\r\n\r\n    const displayAsError = this.state.touched && this.props.error\r\n\r\n    const selectElement = (\r\n      <Select\r\n        name=\"selectCountryCode\"\r\n        value={this.state.countryCode}\r\n        renderValue={() => {\r\n          const country = getCountryFromCountryCode(this.state.countryCode)\r\n\r\n          return (\r\n            <div className={classes.outlinedSelectedValue}>\r\n              <Flag\r\n                className={classes.flagIcon}\r\n                country={this.state.countryCode}\r\n                alt={country.name}\r\n              />\r\n            </div>\r\n          )\r\n        }}\r\n        disableUnderline\r\n        autoWidth={true}\r\n        onChange={event => this.handleCountryCodeChange(event, event.target.value)}\r\n        MenuProps={{\r\n          PaperProps: {\r\n            style: {\r\n              maxHeight: '100%',\r\n            },\r\n          },\r\n        }}\r\n        classes={{\r\n          root: classes.outlinedSelectRoot,\r\n        }}\r\n        disabled={disabled}\r\n      >\r\n        {getCountryCodes().map(({ name, dial_code, code }) => (\r\n          <MenuItem key={code} value={code}>\r\n            <Flag className={classes.flagIcon} country={code} alt={name} />\r\n            {name}\r\n            &nbsp;&nbsp;\r\n            {dial_code}\r\n          </MenuItem>\r\n        ))}\r\n      </Select>\r\n    )\r\n\r\n    return (\r\n      <div className={className}>\r\n        <TextField\r\n          variant=\"outlined\"\r\n          id=\"phone\"\r\n          type=\"tel\"\r\n          label={label}\r\n          className={classes.outlinedRoot}\r\n          inputRef={elem => (this.input = elem)}\r\n          onChange={event => {\r\n            this.handleInputChange(event)\r\n          }}\r\n          value={this.state.formattedPhoneNumber}\r\n          error={displayAsError}\r\n          helperText={displayAsError ? this.props.helperText : undefined}\r\n          placeholder={this.props.placeholder}\r\n          disabled={disabled}\r\n          required={required}\r\n          InputProps={{\r\n            startAdornment: (\r\n              <InputAdornment position=\"start\" className={classes.outlinedAdornment}>\r\n                {startAdornment}\r\n                {selectElement}\r\n              </InputAdornment>\r\n            ),\r\n          }}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n\r\n  renderStandard = () => {\r\n    const { classes, className, label, required, disabled } = this.props\r\n\r\n    const selectElement = (\r\n      <Select\r\n        name=\"selectCountryCode\"\r\n        // current value\r\n        value={this.state.countryCode}\r\n        // display of the current value\r\n        renderValue={() => {\r\n          const country = getCountryFromCountryCode(this.state.countryCode)\r\n\r\n          return (\r\n            <div className={classes.selectedValue}>\r\n              <Flag\r\n                className={classes.flagIcon}\r\n                country={this.state.countryCode}\r\n                alt={country.name}\r\n              />\r\n            </div>\r\n          )\r\n        }}\r\n        autoWidth={true}\r\n        onChange={event => this.handleCountryCodeChange(event, event.target.value)}\r\n        MenuProps={{\r\n          PaperProps: {\r\n            style: {\r\n              maxHeight: '100%',\r\n            },\r\n          },\r\n        }}\r\n        classes={{\r\n          root: classes.selectRoot,\r\n        }}\r\n        disabled={disabled}\r\n      >\r\n        {getCountryCodes().map(({ name, dial_code, code }) => (\r\n          <MenuItem key={code} value={code}>\r\n            <Flag className={classes.flagIcon} country={code} alt={name} />\r\n            {name}\r\n            &nbsp;&nbsp;\r\n            {dial_code}\r\n          </MenuItem>\r\n        ))}\r\n      </Select>\r\n    )\r\n\r\n    const displayAsError = this.state.touched && this.props.error\r\n\r\n    return (\r\n      <div>\r\n        <FormControl className={clsx(className, classes.root)}>\r\n          <InputLabel htmlFor=\"phone\" className={classes.label} error={displayAsError}>\r\n            {label}\r\n            {required ? ' *' : ''}\r\n          </InputLabel>\r\n\r\n          {selectElement}\r\n\r\n          <TextField\r\n            id=\"phone\"\r\n            type=\"tel\"\r\n            classes={{\r\n              root: classes.phoneNumberRoot,\r\n            }}\r\n            inputRef={elem => (this.input = elem)}\r\n            onChange={event => {\r\n              this.handleInputChange(event)\r\n            }}\r\n            value={this.state.formattedPhoneNumber}\r\n            error={displayAsError}\r\n            placeholder={this.props.placeholder}\r\n            disabled={disabled}\r\n            required={required}\r\n          />\r\n        </FormControl>\r\n        {displayAsError && !isEmpty(this.props.helperText) && (\r\n          <p className=\"colorError u-fontSize12 u-marginTop8\">{this.props.helperText}</p>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n\r\n  render() {\r\n    try {\r\n      return this.props.variant === 'outlined' ? this.renderOutlined() : this.renderStandard()\r\n    } catch (e) {\r\n      console.error(e)\r\n    }\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(PhoneField)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport clsx from 'clsx'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\nimport React from 'react'\r\nimport { trOptional } from 'pmt-modules/i18n'\r\n\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\nimport CountryChooser from 'pmt-ui/CountryChooser'\r\nimport DateField from 'pmt-ui/DateField'\r\nimport { FormControlLabel } from 'pmt-ui/Form'\r\nimport { InputAdornment } from 'pmt-ui/Input'\r\nimport PasswordField from 'pmt-ui/PasswordField'\r\nimport PhoneField from 'pmt-ui/PhoneField'\r\nimport InfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\nimport TextField from 'pmt-ui/TextField'\r\nimport Tooltip from 'pmt-ui/Tooltip'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport PersonOutlineIcon from '@material-ui/icons/PersonOutline'\r\nimport MailOutlineIcon from '@material-ui/icons/MailOutline'\r\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined'\r\nimport PhoneOutlinedIcon from '@material-ui/icons/PhoneOutlined'\r\nimport CardMembershipOutlinedIcon from '@material-ui/icons/CardMembershipOutlined'\r\n\r\nconst fieldIconStyles = theme => ({\r\n  icon: {\r\n    color: theme.pmt.colors.grey500,\r\n    fontSize: 20,\r\n  },\r\n})\r\n\r\nconst FieldIcon = withStyles(fieldIconStyles)(({ classes, icon: Icon }) => (\r\n  <InputAdornment position=\"start\">\r\n    <Icon className={classes.icon} />\r\n  </InputAdornment>\r\n))\r\n\r\nexport const FirstName = ({ value, validation, onChange, maxLength, ...otherProps }) => (\r\n  <TextField\r\n    variant=\"outlined\"\r\n    id=\"user-form-first-name\"\r\n    name=\"FirstName\"\r\n    label={tr('global.form.user.firstname')}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    inputProps={{ maxLength: maxLength }}\r\n    InputProps={{ startAdornment: <FieldIcon icon={PersonOutlineIcon} /> }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const LastName = ({ value, validation, onChange, maxLength, ...otherProps }) => (\r\n  <TextField\r\n    variant=\"outlined\"\r\n    id=\"user-form-last-name\"\r\n    name=\"LastName\"\r\n    label={tr('global.form.user.lastname')}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    inputProps={{ maxLength: maxLength }}\r\n    InputProps={{ startAdornment: <FieldIcon icon={PersonOutlineIcon} /> }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const PhoneNumber = ({ value, validation, onChange, className, ...otherProps }) => (\r\n  <PhoneField\r\n    variant=\"outlined\"\r\n    id=\"user-form-phone-number\"name=\"PhoneNumber\"\r\n    label={tr('global.form.user.phone')}\r\n    className={clsx('u-sizeFullWidth u-marginTop10', className)}\r\n    value={value || ''}\r\n    onChange={phoneNumber => onChange(phoneNumber)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    startAdornment={<FieldIcon icon={PhoneOutlinedIcon} />}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const BadgeId = ({ value, validation, onChange, ...otherProps }) => (\r\n  <TextField\r\n    variant=\"outlined\"\r\n    id=\"user-form-badge-id\"\r\n    name=\"BadgeId\"\r\n    label={tr('global.form.user.badge_id')}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    InputProps={{\r\n      startAdornment: <FieldIcon icon={CardMembershipOutlinedIcon} />,\r\n      endAdornment: (\r\n        <InputAdornment position=\"end\">\r\n          <Tooltip\r\n            disabletriggertouch\r\n            title={tr('global.form.user.badgeId.tooltip')}\r\n            placement=\"bottom-end\"\r\n          >\r\n            <InfoOutline color=\"primary\" />\r\n          </Tooltip>\r\n        </InputAdornment>\r\n      ),\r\n    }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const Email = ({ value, validation, onChange, className, ...otherProps }) => (\r\n  <TextField\r\n    variant=\"outlined\"\r\n    type=\"email\"\r\n    id=\"user-form-email\"\r\n    name=\"Email\"\r\n    label={tr('global.form.user.email')}\r\n    className={clsx('u-sizeFullWidth u-marginTop10', className)}\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    InputProps={{ startAdornment: <FieldIcon icon={MailOutlineIcon} /> }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const Password = ({ value, validation, onChange, ...otherProps }) => (\r\n  <PasswordField\r\n    variant=\"outlined\"\r\n    fullWidth\r\n    name=\"password\"\r\n    label={tr('global.form.user.password')}\r\n    className=\"u-sizeFullWidth u-marginTop10 u-marginBottom10\"\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    startAdornment={<FieldIcon icon={LockOutlinedIcon} />}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const CountryOfResidence = ({ value, validation, onChange, ...otherProps }) => (\r\n  <CountryChooser\r\n    label={tr('global.form.user.countryOfResidence', {\r\n      fr: 'Pays de résidence',\r\n      context: '',\r\n      desc: 'User form country of residence',\r\n    })}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={country => onChange(country)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const Nationality = ({ value, validation, onChange, ...otherProps }) => (\r\n  <CountryChooser\r\n    label={tr('global.form.user.nationality', {\r\n      fr: 'Nationalité',\r\n      context: '',\r\n      desc: 'User form nationality',\r\n    })}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={country => onChange(country)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const Birthdate = ({ value, validation, onChange, ...otherProps }) => (\r\n  <DateField\r\n    mode={DateField.Mode.INLINE}\r\n    label={tr('global.form.user.birthdate', {\r\n      fr: 'Date de naissance',\r\n      context: '',\r\n      desc: 'User form birthdate',\r\n    })}\r\n    value={value || ''}\r\n    onChange={onChange}\r\n    helperText={value !== null && validation.message}\r\n    options={{\r\n      defaultDate: moment()\r\n        .subtract(30, 'year')\r\n        .startOf('day'),\r\n      minDate: moment()\r\n        .subtract(100, 'year')\r\n        .startOf('day'),\r\n      maxDate: moment()\r\n        .subtract(12, 'year')\r\n        .startOf('day'),\r\n    }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\n/**\r\n * /!\\ any changes made to this component must be reflected on the backoffice preview (component MarketingOptimPreview)*\r\n */\r\nexport const MarketingOptim = ({ value, onChange, className, ...otherProps }) => {\r\n  if (isNil(trOptional('ORDER__LOGIN__MARKETING__OPTIN'))) {\r\n    return null\r\n  } else {\r\n    return (\r\n      <FormControlLabel\r\n        label={\r\n          <TypographyCustom type=\"164\">\r\n            {trOptional('ORDER__LOGIN__MARKETING__OPTIN')}\r\n          </TypographyCustom>\r\n        }\r\n        className={clsx('u-sizeFullWidth u-marginTop10', className)}\r\n        control={\r\n          <Checkbox\r\n            color=\"primary\"\r\n            checked={value}\r\n            onChange={(event, isInputChecked) => onChange(isInputChecked)}\r\n            onKeyDown={event => {\r\n              if (event.key === 'Enter') {\r\n                event.preventDefault()\r\n                onChange(!value)\r\n              }\r\n            }}\r\n            {...otherProps}\r\n          />\r\n        }\r\n      />\r\n    )\r\n  }\r\n}\r\n","import React from 'react'\r\n\r\nimport {\r\n  BadgeId,\r\n  Email,\r\n  FirstName,\r\n  LastName,\r\n  MarketingOptim,\r\n  Password,\r\n  PhoneNumber,\r\n} from 'pmt-modules/user/forms/elements/index'\r\n\r\n// see API class ApiConsumerPresetValidator\r\nexport const fieldsType = {\r\n  FIRST_NAME: 'FIRST_NAME',\r\n  LAST_NAME: 'LAST_NAME',\r\n  EMAIL: 'EMAIL',\r\n  PHONE: 'PHONE',\r\n  PASSWORD: 'PASSWORD',\r\n  BADGE_ID: 'BADGE_ID',\r\n  MARKETING_ALLOW_CONTACT: 'MARKETING_ALLOW_CONTACT',\r\n}\r\n\r\n/**\r\n * map fields retrieved from api consumer setting to formData key\r\n * and component to display in form view\r\n */\r\nexport const getFieldsMap = () => ({\r\n  FIRST_NAME: {\r\n    key: 'firstName',\r\n    component: <FirstName />,\r\n  },\r\n  LAST_NAME: {\r\n    key: 'lastName',\r\n    component: <LastName />,\r\n  },\r\n  EMAIL: {\r\n    key: 'email',\r\n    component: <Email />,\r\n  },\r\n  PHONE: {\r\n    key: 'phone',\r\n    component: <PhoneNumber />,\r\n  },\r\n  PASSWORD: {\r\n    key: 'password',\r\n    component: <Password checkSecurity />,\r\n  },\r\n  BADGE_ID: {\r\n    key: 'badgeId',\r\n    component: <BadgeId />,\r\n  },\r\n  MARKETING_ALLOW_CONTACT: {\r\n    key: 'marketing.allowContact',\r\n    component: <MarketingOptim />,\r\n  },\r\n})\r\n\r\nexport const getField = field => getFieldsMap()[field] || null\r\n\r\nexport const registrationCodeErrors = {\r\n  SET_PASSWORD: '1026',\r\n  INVALID_CODE: '151',\r\n}\r\n","import find from 'lodash/find'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getOauthClient, getUserSettings } from 'pmt-modules/appConfig'\r\nimport { postAuthorizeApp } from 'pmt-modules/authApp'\r\nimport { AuthUserAction, LOGOUT_ACTION } from 'pmt-modules/auth'\r\nimport { getItemListFromCart } from 'pmt-modules/cart/selectors'\r\nimport createMiddleware from 'pmt-modules/redux/createMiddleware'\r\nimport { setPaymentMethod } from 'pmt-modules/orderFront'\r\nimport { postOrder } from 'pmt-modules/orderPost'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/orderSettings'\r\nimport { fieldsType } from 'pmt-modules/registration/forms/register/constants'\r\nimport { getRoute, goBack, redirectTo, replaceWith } from 'pmt-modules/routing'\r\nimport {\r\n  fetchUserMe,\r\n  GetUserMeAction,\r\n  PutUserMeAction,\r\n} from 'pmt-modules/userMe'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport {\r\n  getAppConfigFrontSettings,\r\n  getOrderData,\r\n  getOrderProperties,\r\n} from '../selectors'\r\nimport { forgetAlcoholApproval } from '../actions'\r\n\r\nconst redirectAfterUserAction = (dispatch, getState) => {\r\n  const cartItemList = getItemListFromCart(getState())\r\n  const orderProperties = getOrderProperties(getState())\r\n\r\n  if (!isNil(cartItemList) && !isEmpty(cartItemList)) {\r\n    dispatch(\r\n      redirectTo(\r\n        orderProperties.isDelivery\r\n          ? getRoute('ORDER__DELIVERY_ADDRESS')\r\n          : getRoute('ORDER__PAYMENT'),\r\n      ),\r\n    )\r\n  } else if (!isNil(orderProperties.restaurant)) {\r\n    dispatch(\r\n      redirectTo(getRoute('ORDER__CATALOG'), {\r\n        restaurantId: orderProperties.restaurant.id,\r\n      }),\r\n    )\r\n  } else {\r\n    dispatch(redirectTo(getRoute('ORDER__STORE_LOCATOR')))\r\n  }\r\n}\r\n\r\nconst postOrderOrRedirect = (dispatch, getState) => {\r\n  const frontSettings = getAppConfigFrontSettings(getState())\r\n  const orderProperties = getOrderProperties(getState())\r\n  const orderData = getOrderData(getState())\r\n\r\n  if (!isNil(orderData)) {\r\n    if (frontSettings.display.paymentPage) {\r\n      if (orderProperties.isDelivery) {\r\n        dispatch(redirectTo(getRoute('ORDER__DELIVERY_ADDRESS')))\r\n      } else {\r\n        dispatch(redirectTo(getRoute('ORDER__PAYMENT')))\r\n      }\r\n    } else {\r\n      // not displaying paymentPage\r\n      // so we can now send the order\r\n      dispatch(setPaymentMethod(PaymentMethodsAllowed.IRL)) // this doesn't change the orderData we use for postOrder, so the API receive paymentMethod=null\r\n      if (orderProperties.isDelivery) {\r\n        dispatch(redirectTo(getRoute('ORDER__DELIVERY_ADDRESS')))\r\n      } else {\r\n        dispatch(postOrder(orderData))\r\n      }\r\n    }\r\n  } else {\r\n    // this is a very specific behavior used for Newrest/LoungeUp integration\r\n    // login page is set as home, so once user is connected, we redirect him to store locator\r\n    if (frontSettings.home === 'LOGIN') {\r\n      dispatch(redirectTo(getRoute('HOME')))\r\n    } else {\r\n      dispatch(goBack())\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Successfull user authentication\r\n * we fetch the user right after login in order to retrieve its profile,\r\n * this will trigger a check for missing info, and eventually get his delivery addresses\r\n *\r\n * fromOrderWorkflow is only set to true when the login page was reached as a mandatory step in the\r\n * order workflow (i.e. the cart redirected here with `fromOrderWorkflow=true`).\r\n * When the user opens the login page from the header login button, `fromOrderWorkflow` is absent\r\n * preventing the auto-post/redirect-to-payment chain from firing.\r\n */\r\nconst authSuccess = createMiddleware(AuthUserAction.SUCCESS,\r\n  ({ dispatch, getState }) => {\r\n    const fromOrderWorkflow = getQueryParam('fromOrderWorkflow')\r\n    dispatch(\r\n      fetchUserMe({\r\n        fromOrderWorkflow: !isEmpty(fromOrderWorkflow), // true only when login is a mandatory order step\r\n      }),\r\n    )\r\n  })\r\n\r\n/**\r\n * Successfull get user me\r\n * check for mandatory fields on order plugin and redirect to profile\r\n * otherwise, check if user comes from auth and post order or redirect to appropriate page\r\n * regarding display app config setting\r\n */\r\nconst getUserMeSuccess = createMiddleware(\r\n  GetUserMeAction.SUCCESS,\r\n  ({ action, dispatch, getState, next }) => {\r\n    const props = action.data.props || {}\r\n    const { id, phone } = action.response\r\n    const userAppConfig = getUserSettings(getState())\r\n    const hasPhoneRequired = find(\r\n      userAppConfig.registration.form.fields,\r\n      ({ required, type }) => required && type === fieldsType.PHONE,\r\n    )\r\n\r\n    // used by LoungeUp for Newrest\r\n    // if a callbackUri query param is set, this means only an access token has been provided\r\n    // so we postAuthorize to retrieve the formatted redirected uri with code and state\r\n    // and send it back to LoungeUp\r\n    const callbackUri = getQueryParam('callbackUri')\r\n    const state = getQueryParam('state')\r\n    const oauth2 = getOauthClient(getState())\r\n    if (!isEmpty(callbackUri) && !isEmpty(oauth2) && !isEmpty(state)) {\r\n      dispatch(\r\n        postAuthorizeApp({\r\n          isAuthorized: true,\r\n          redirect_uri: callbackUri,\r\n          state,\r\n          client_id: oauth2.clientId,\r\n          response_type: 'code',\r\n        }),\r\n      )\r\n    }\r\n\r\n    if (hasPhoneRequired && isEmpty(phone)) {\r\n      next(\r\n        replaceWith(\r\n          getRoute('USER_PROFILE'),\r\n          {\r\n            userId: id,\r\n          },\r\n          {\r\n            fromOrderWorkflow: props.fromOrderWorkflow,\r\n          },\r\n        ),\r\n      )\r\n    } else if (props.fromOrderWorkflow) {\r\n      postOrderOrRedirect(dispatch, getState)\r\n    }\r\n  },\r\n)\r\n\r\n/**\r\n * Intercepts update user SUCCESS action\r\n */\r\nconst updateProfileSuccess = createMiddleware(\r\n  PutUserMeAction.SUCCESS,\r\n  ({ action, dispatch, getState, next }) => {\r\n    const fromOrderWorkflow = getQueryParam('fromOrderWorkflow')\r\n    const isFromProfile = action.data.props && action.data.props.isFromProfile\r\n\r\n    if (!isNil(fromOrderWorkflow)) {\r\n      postOrderOrRedirect(dispatch, getState)\r\n    } else if (isFromProfile) {\r\n      redirectAfterUserAction(dispatch, getState)\r\n    }\r\n  },\r\n)\r\n\r\nconst logoutMiddleware = createMiddleware(LOGOUT_ACTION, ({ dispatch }) => {\r\n  // user has logout\r\n  // we reset the \"i'm authorized to buy alcohol\" info\r\n  dispatch(forgetAlcoholApproval())\r\n})\r\n\r\nexport const userOrderPluginMiddlewares = [\r\n  authSuccess,\r\n  getUserMeSuccess,\r\n  updateProfileSuccess,\r\n  logoutMiddleware,\r\n]\r\n","import createAction from '../../redux/createAction'\r\n\r\nimport { ModalType, createHideDialogAction } from '../../dialog'\r\n\r\nexport const VoucherDiffAction = {\r\n  SET_INVALID_VOUCHER_LIST: 'VOUCHER_DIFF::SET_INVALID_VOUCHER_LIST',\r\n  DELETE_INVALID_VOUCHER_LIST: 'VOUCHER_DIFF::DELETE_INVALID_VOUCHER_LIST',\r\n}\r\n\r\nexport const setInvalidVouchers = invalidVouchers =>\r\n  createAction(VoucherDiffAction.SET_INVALID_VOUCHER_LIST, {\r\n    invalidVouchers,\r\n  })\r\n\r\nexport const deleteInvalidVouchers = () =>\r\n  createAction(VoucherDiffAction.DELETE_INVALID_VOUCHER_LIST, {})\r\n\r\nexport const hideInvalidVouchersDialog = () => createHideDialogAction(ModalType.INVALID_VOUCHERS)\r\n","import { createSelector } from 'reselect'\r\n\r\nconst getVoucherDiff = state => state.entities.voucherDiff\r\n\r\nexport const getInvalidVouchers = createSelector([getVoucherDiff], voucherDiffData =>\r\n  voucherDiffData.get('invalidVouchers', null).toJS()\r\n)\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { displayInvalidVouchersDialog } from 'pmt-modules/dialog'\r\nimport { PostOrderPreviewAction } from 'pmt-modules/orderPreview'\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\n\r\nimport { setInvalidVouchers } from './actions'\r\n\r\n// checking order preview result\r\n// if a voucher is invalid, we warn the user with the dialog\r\n// that will remove the invalid vouchers\r\nconst postOrderPreviewSuccessMiddleware = createMiddleware(\r\n  PostOrderPreviewAction.SUCCESS,\r\n  ({ action, dispatch, getState }) => {\r\n    const vouchers = action.response.verifications.vouchers\r\n    if (!vouchers.succeeded) {\r\n      const invalidVouchers = vouchers.invalidVouchers\r\n\r\n      dispatch(setInvalidVouchers(invalidVouchers))\r\n\r\n      if (!isEmpty(invalidVouchers)) {\r\n        dispatch(displayInvalidVouchersDialog())\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nexport const voucherMiddlewares = [postOrderPreviewSuccessMiddleware]\r\n","import Immutable from 'immutable'\r\n\r\nimport { VoucherDiffAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  invalidVouchers: [],\r\n})\r\n\r\nexport const voucherDiffReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case VoucherDiffAction.SET_INVALID_VOUCHER_LIST:\r\n      return state.merge({\r\n        invalidVouchers: action.invalidVouchers,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\nimport invariant from 'invariant'\r\nimport Logger from 'pmt-utils/logger'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { haveAuthCredentials } from 'pmt-modules/auth'\r\nimport {\r\n  GetAsyncPaymentAction,\r\n  isAsyncPaymentRedirectToPspResponse,\r\n} from 'pmt-modules/asyncPayment'\r\nimport {\r\n  setCart,\r\n  setModificationDate,\r\n  cartModifierActions,\r\n  setMinimumPrice,\r\n  CartAction,\r\n} from 'pmt-modules/cart/actions'\r\nimport {\r\n  getItemListFromCart,\r\n  forceGetItemListFromCart,\r\n  getItemListFromCartForOrderPreview,\r\n  getCartData,\r\n} from 'pmt-modules/cart/selectors'\r\nimport { ORDER_PREVIEW_DELAY } from 'pmt-modules/cart/constants'\r\nimport { CartDiffAction, setCartDiffItemList } from 'pmt-modules/cartDiff/actions'\r\nimport { getItemList as getItemListCartDiff } from 'pmt-modules/cartDiff/selectors'\r\nimport {\r\n  getUnavailableItemsFromCart,\r\n  removeUnavailableItemsFromList,\r\n} from 'pmt-modules/cartDiff/utils'\r\nimport { GetCatalogAction } from 'pmt-modules/catalog/actions'\r\nimport { getCatalogFormatted } from 'pmt-modules/catalog/selectors'\r\nimport { getUpsellingDataFormatted } from 'pmt-modules/upselling/selectors'\r\nimport { getCustomTexts } from 'pmt-modules/customTexts/actions'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { OrderErrorCode, OrderMode } from 'pmt-modules/order/constants'\r\nimport { displayCartDiffItemsDialog, displayLimitedStockItemsDialog } from 'pmt-modules/dialog'\r\nimport { resetFullGeolocation } from 'pmt-modules/geolocation'\r\nimport {\r\n  OrderFrontAction,\r\n  setRestaurantId,\r\n  setDueDate,\r\n  setPaymentMethod,\r\n  savePostedOrderData,\r\n} from 'pmt-modules/orderFront/actions'\r\nimport { OrderProductAction } from 'pmt-modules/orderProduct/actions'\r\nimport { OrderMenuAction } from 'pmt-modules/orderMenu/actions'\r\nimport { postOrder, PostOrderAction, resetPostOrder } from 'pmt-modules/orderPost'\r\n\r\nimport { resetOrderSettings } from 'pmt-modules/orderSettings/actions'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/orderSettings/constants'\r\nimport { getOrderSettingsForMode } from 'pmt-modules/orderSettings/utils'\r\nimport {\r\n  postOrderPreview,\r\n  PostOrderPreviewAction,\r\n  setOrderPreviewModificationDate,\r\n} from 'pmt-modules/orderPreview/actions'\r\nimport { fetchCheckWithPosCheckId, GetCheckWithPosCheckIdAction } from 'pmt-modules/payment/check'\r\nimport { PaymentStatus } from 'pmt-modules/payment/constants'\r\nimport {\r\n  getRestaurantAvailabilities,\r\n  getForDay,\r\n  isSlotInOpeningHours,\r\n} from 'pmt-modules/orderSettings/utils'\r\nimport createMiddleware from 'pmt-modules/redux/createMiddleware'\r\nimport {\r\n  RestaurantAction,\r\n  GetRestaurantAction,\r\n  setRestaurant,\r\n} from 'pmt-modules/restaurant/actions'\r\nimport {\r\n  RegisterIncognitoUserAction,\r\n  RegisterUserLightAction,\r\n} from 'pmt-modules/registration/actions'\r\nimport { DID_REDIRECT_TO_PARAM } from 'pmt-modules/registration/middlewares'\r\n\r\nimport { RestaurantStatus } from 'pmt-modules/restaurant/constants'\r\n\r\nimport { makeGetRestaurant } from 'pmt-modules/restaurant/selectors'\r\nimport {\r\n  getRoute,\r\n  redirectTo,\r\n  redirectToExternal,\r\n  replaceWith,\r\n  setIsRedirectingToExternal,\r\n} from 'pmt-modules/routing'\r\nimport { getCurrentTheme, changeCurrentTheme } from 'pmt-modules/theme'\r\nimport { PostUserAddressAction } from 'pmt-modules/userAddress/actions'\r\nimport { PutUserMeAction } from 'pmt-modules/userMe'\r\nimport { FetchUserUserAccountsAction, makeGetDefaultUserUserAccount } from 'pmt-modules/userAccount'\r\n\r\nimport {\r\n  getMs,\r\n  getMsFromHour,\r\n  getMsFromMinute,\r\n  getPmtDayIndex,\r\n  getDateWithHoursAndMinutes,\r\n} from 'pmt-utils/date'\r\nimport { getDistanceFromLatLon } from 'pmt-utils/geoloc'\r\nimport { createMuiThemeWithPmtRestaurantColors } from 'pmt-utils/theme/theme'\r\nimport { debounce } from 'pmt-utils/debounce'\r\nimport { setCurrency } from 'pmt-utils/currency'\r\n\r\nimport {\r\n  setSelectedCategory,\r\n  setParentCategories,\r\n  showOrderModeDisabledDialog,\r\n  showUnavailableDueDateDialog,\r\n  showTableNotFoundDialog,\r\n  setDueDateAsap,\r\n  resetDayAndSlot,\r\n  OrderPluginAction,\r\n  setDeliveryAddress,\r\n  selectDay,\r\n  selectSlot,\r\n  setDeliveryAddressError,\r\n  showProductDialog,\r\n  setTableNumber,\r\n} from '../actions'\r\nimport { getAppConfigFrontSettings, getOrderData, getOrderProperties } from '../selectors'\r\n\r\nimport { userOrderPluginMiddlewares } from './user'\r\nimport { getInvalidVouchers, VoucherDiffAction } from '../../payment/voucher'\r\nimport { setVouchers } from '../../orderFront'\r\n\r\n//\r\n// Debounced to avoid too many calls.\r\n//\r\n\r\nconst dispatchPostOrderPreview = (dispatch, getState, options = {}) => {\r\n  const sendDate = getMs(moment())\r\n  const itemList = getItemListFromCartForOrderPreview(getState())\r\n\r\n  const {\r\n    dueDate,\r\n    dueDateMode,\r\n    fees,\r\n    mode,\r\n    posCheckId,\r\n    restaurantId,\r\n    tableNumber,\r\n    modifierCode,\r\n    modifiers,\r\n    vouchers,\r\n    areOnlineVouchersAllowed,\r\n  } = getOrderProperties(getState())\r\n\r\n  const formattedCatalog = getCatalogFormatted(getState())\r\n  const formattedUpsellingData = getUpsellingDataFormatted(getState())\r\n\r\n  if (!isNil(mode) && !isNil(formattedCatalog) && !isNil(restaurantId)) {\r\n    let orderPreview = {\r\n      dueDateMode,\r\n      itemList,\r\n      sendDate,\r\n      restaurantId,\r\n      mode: parseInt(mode, 10),\r\n      tableNumber,\r\n      posCheckId,\r\n      fees,\r\n      modifierCode,\r\n      modifiers,\r\n    }\r\n\r\n    if (!isNil(dueDate)) {\r\n      orderPreview = { ...orderPreview, dueDate }\r\n    }\r\n\r\n    const hasAuthCredentials = haveAuthCredentials(getState())\r\n    if (hasAuthCredentials) {\r\n      const getDefaultUserUserAccount = makeGetDefaultUserUserAccount()\r\n      const defaultUserAccount = getDefaultUserUserAccount(getState(), { userId: 'me' })\r\n\r\n      if (defaultUserAccount) {\r\n        orderPreview = {\r\n          ...orderPreview,\r\n          userAccountPayment: {\r\n            userAccountId: defaultUserAccount.id,\r\n          },\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!isEmpty(vouchers) && areOnlineVouchersAllowed) {\r\n      orderPreview.payment = {\r\n        voucherPayment: {\r\n          // we don't indicate the voucherProvider, we let the back use the one configured on the store\r\n          vouchers: vouchers.map(voucher => ({\r\n            providerVoucherCode: voucher.voucherCode,\r\n          })),\r\n        },\r\n      }\r\n    }\r\n\r\n    dispatch(postOrderPreview(orderPreview, formattedCatalog, formattedUpsellingData, options))\r\n  }\r\n}\r\n\r\nconst dispatchPostOrderPreviewWithDebounce = debounce(dispatchPostOrderPreview, ORDER_PREVIEW_DELAY)\r\n\r\n/**\r\n * Intercepts all cart actions\r\n * and set cart's last modification date\r\n *\r\n * @returns {Function}\r\n */\r\n\r\nexport const catchCartActionMiddleware = createMiddleware(\r\n  [\r\n    ...cartModifierActions,\r\n    CartAction.RESET_CART,\r\n    FetchUserUserAccountsAction.SUCCESS,\r\n    OrderFrontAction.ADD_MODIFIER_CODE,\r\n  ],\r\n  ({ getState, dispatch, next, action }) => {\r\n    const modificationDate = getMs(moment())\r\n    dispatch(setModificationDate(modificationDate))\r\n    dispatch(setOrderPreviewModificationDate(modificationDate))\r\n\r\n    // must be !== false because default true does not exists.\r\n    // In some cases (see storeLoator page index) we do not want to make an order preview\r\n    if (action.doOrderPreview !== false) {\r\n      let options = {}\r\n      if (action.type === FetchUserUserAccountsAction.SUCCESS) {\r\n        options = {\r\n          verifyUserAccount: true,\r\n          getMaxGrantableAmount: true,\r\n          getAdmissionFeesAmount: true,\r\n        }\r\n      }\r\n\r\n      // do not do an order preview when we testLockedBeforePayment.\r\n      // The goal is to test locked when we pay.\r\n      // Here we would have an order preview made directly, and the item removed from the cart\r\n      // before being on the payment page\r\n      if (getQueryParam('testLockedBeforePayment') !== 'true') {\r\n        dispatchPostOrderPreviewWithDebounce(dispatch, getState, options)\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nexport const setCartDetailsFromRestaurantMiddleware = createMiddleware(\r\n  RestaurantAction.SET,\r\n  ({ getState, dispatch, action }) => {\r\n    const { mode } = getOrderProperties(getState())\r\n\r\n    if (!isNil(mode) && !isNil(action.restaurant)) {\r\n      const orderSettings = getOrderSettingsForMode(\r\n        mode,\r\n        action.restaurant.orderSettings.onSiteSettings,\r\n        action.restaurant.orderSettings.takeAwaySettings,\r\n        action.restaurant.orderSettings.deliverySettings\r\n      )\r\n\r\n      dispatch(setMinimumPrice(orderSettings.minimumPrice))\r\n    }\r\n  }\r\n)\r\n\r\nconst setRestaurantIdOnRestaurantSet = createMiddleware(\r\n  RestaurantAction.SET,\r\n  ({ dispatch, getState, action }) => {\r\n    const orderProperties = getOrderProperties(getState())\r\n\r\n    if (isNil(orderProperties.restaurantId) && !isNil(action.restaurant)) {\r\n      dispatch(setRestaurantId(action.restaurant.id))\r\n    }\r\n  }\r\n)\r\n\r\nconst fetchCheckOnPosCheckIdSet = createMiddleware(\r\n  OrderPluginAction.SET_POS_CHECK_ID,\r\n  ({ dispatch, getState, action }) => {\r\n    const orderProperties = getOrderProperties(getState())\r\n\r\n    if (!isNil(action.posCheckId)) {\r\n      dispatch(fetchCheckWithPosCheckId(orderProperties.restaurantId, action.posCheckId))\r\n    }\r\n  }\r\n)\r\n\r\nconst setTableNumberOnFetchCheckSuccess = createMiddleware(\r\n  GetCheckWithPosCheckIdAction.SUCCESS,\r\n  ({ dispatch, getState, action }) => {\r\n    const orderProperties = getOrderProperties(getState())\r\n\r\n    if (isNil(orderProperties.tableNumber) && !isNil(action.response.tableNumber)) {\r\n      dispatch(setTableNumber(action.response.tableNumber))\r\n    }\r\n  }\r\n)\r\n\r\nexport const selectModeMiddleware = createMiddleware(\r\n  OrderFrontAction.SELECT_MODE,\r\n  ({ dispatch, action, getState }) => {\r\n    const { mode } = getOrderProperties(getState())\r\n\r\n    // after changing mode, reset geolocation to\r\n    // 1. simplify code about geolocation\r\n    // 2. avoid mess with differents modes allowing or not reverse geocoding / precise geolocation\r\n    // 3. be sure the user fill the address he wants\r\n    if (!isNil(action.mode) && mode !== action.mode) {\r\n      dispatch(resetFullGeolocation())\r\n    }\r\n  }\r\n)\r\n\r\nconst setFrontOrderDueDateMiddleware = createMiddleware(\r\n  OrderPluginAction.SELECT_SLOT,\r\n  ({ dispatch, getState, action }) => {\r\n    invariant(!isNil(action.slot), `selectSlot action: slot is nil`)\r\n\r\n    const { day } = getOrderProperties(getState())\r\n\r\n    // when selecting a slot, a day can be define on the action (the day is not yet set on our reducer)\r\n\r\n    // /!\\ if you change this part:\r\n    // test the cases with summer time changing at 3am (when ordering D-1 for D, and D for D - D being the day with time change)\r\n\r\n    const dueDate = getDateWithHoursAndMinutes(action.day || day, action.slot)\r\n    // if delivery, add delivery time. If not delivery, deliveryTime is 0 by default.\r\n    // .add(deliveryTime, 'ms')\r\n\r\n    const dueDateMs = parseInt(dueDate.valueOf(), 10)\r\n    dispatch(setDueDate(dueDateMs))\r\n  }\r\n)\r\n\r\nconst resetFrontOrderDueDateMiddleware = createMiddleware(\r\n  [OrderPluginAction.RESET_DUE_DATE, OrderPluginAction.SET_DUE_DATE_ASAP],\r\n  ({ dispatch }) => {\r\n    dispatch(setDueDate(null))\r\n  }\r\n)\r\n\r\nconst redirectToStoreLocatorWithRedirection = createMiddleware(\r\n  OrderPluginAction.BACK_TO_STORE_LOCATOR,\r\n  ({ dispatch }) => {\r\n    dispatch(redirectTo(getRoute('ORDER__STORE_LOCATOR')))\r\n  }\r\n)\r\n\r\nconst resetOrderSettingsWhenResetingRestaurant = createMiddleware(\r\n  OrderFrontAction.SET_RESTAURANT_ID,\r\n  ({ action, dispatch, getState }) => {\r\n    if (isNil(action.restaurantId)) {\r\n      dispatch(resetOrderSettings())\r\n    }\r\n\r\n    const orderProperties = getOrderProperties(getState())\r\n    if (orderProperties.forceAsap) {\r\n      dispatch(setDueDateAsap())\r\n    } else {\r\n      dispatch(resetDayAndSlot())\r\n    }\r\n  }\r\n)\r\n\r\n// the due date is set here while arriving directly on the menu\r\n// if the customer takes more time to order than the order delay\r\n// the order's products has to be checked again\r\nconst setRestaurantAndDueDateWhenIsAsap = createMiddleware(\r\n  GetRestaurantAction.SUCCESS,\r\n  ({ action, dispatch, next, getState }) => {\r\n    const restaurant = action.response\r\n    const { mode, delay, day, isAsap, canOrderUsingAsap } = getOrderProperties(getState())\r\n    const restaurantAvailabilities = getRestaurantAvailabilities(restaurant, mode)\r\n\r\n    if (\r\n      restaurant.status === RestaurantStatus.ENABLED &&\r\n      ((restaurant.orderSettings.onSiteSettings.enabled && mode === OrderMode.ON_SITE) ||\r\n        (restaurant.orderSettings.takeAwaySettings.enabled && mode === OrderMode.TAKE_AWAY) ||\r\n        (restaurant.orderSettings.deliverySettings.enabled && mode === OrderMode.DELIVERY)) &&\r\n      !isEmpty(get(restaurantAvailabilities, 'availabilities', []))\r\n    ) {\r\n      // if we are in isAsap, we do not need to search for a date, but dispatch setDueDateAsap just\r\n      // in case, to override potentially messed up data.\r\n      if (isAsap) {\r\n        dispatch(setDueDateAsap())\r\n        return\r\n      }\r\n\r\n      // here we check that the user has not already set a day for his order\r\n      // so we don't override it with a new due date\r\n      if (!isNil(day)) {\r\n        return\r\n      }\r\n\r\n      // try to find a default date to use: asap or the first available slot.\r\n\r\n      const now = moment()\r\n      const slot = getMsFromHour(now.format('HH')) + getMsFromMinute(now.format('mm'))\r\n      const slotsForToday = getForDay(restaurant.orderSettings.openingHours, getPmtDayIndex(now))\r\n\r\n      if (isSlotInOpeningHours(slotsForToday, slot, delay) && canOrderUsingAsap) {\r\n        // if now is in opening hours (restaurant is opened)\r\n        dispatch(setDueDateAsap())\r\n      } else {\r\n        dispatch(selectDay(getMs(restaurantAvailabilities.availabilities[0].date)))\r\n        dispatch(selectSlot(restaurantAvailabilities.availabilities[0].slots[0].value))\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nconst setRestaurantNullIfGetRestaurantFails = createMiddleware(\r\n  GetRestaurantAction.FAILURE,\r\n  ({ action, dispatch, getState }) => {\r\n    dispatch(setRestaurant(null))\r\n    dispatch(setRestaurantId(null))\r\n  }\r\n)\r\n\r\nconst setRestaurantWhenGetRestaurantSuccess = createMiddleware(\r\n  GetRestaurantAction.SUCCESS,\r\n  ({ action, dispatch }) => {\r\n    setCurrency(action.response.currency)\r\n    dispatch(setRestaurant(action.response))\r\n  }\r\n)\r\n\r\nconst setCurrencyWhenRestauranSet = createMiddleware(\r\n  RestaurantAction.SET,\r\n  ({ action, dispatch }) => {\r\n    setCurrency(action.restaurant.currency)\r\n  }\r\n)\r\n\r\n/**\r\n * Intercepts restaurant selection and update theme\r\n */\r\nexport const setRestaurantMiddleware = createMiddleware(\r\n  RestaurantAction.SET,\r\n  ({ getState, dispatch, next, action }) => {\r\n    if (!isNil(action.restaurant)) {\r\n      const currentTheme = getCurrentTheme(getState())\r\n      const newTheme = createMuiThemeWithPmtRestaurantColors(currentTheme, action.restaurant.colors)\r\n\r\n      const customTextsContainerId = action.restaurant.customContainers?.customTextsContainerId\r\n      if (customTextsContainerId) {\r\n        dispatch(getCustomTexts(customTextsContainerId))\r\n      }\r\n\r\n      next(changeCurrentTheme(newTheme))\r\n    }\r\n  }\r\n)\r\n\r\nconst openProductMiddleware = createMiddleware(\r\n  OrderProductAction.SELECT_PRODUCT,\r\n  ({ dispatch, action }) => {\r\n    if (!isNil(action.viewOptions.showDialog)) {\r\n      if (!action.viewOptions.showDialog) {\r\n        dispatch(\r\n          redirectTo(getRoute('ORDER__PRODUCT'), {\r\n            restaurantId: action.viewOptions.restaurantId,\r\n            productId: action.product.id,\r\n          })\r\n        )\r\n      } else {\r\n        dispatch(showProductDialog(action.product, action.viewOptions))\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nconst openMenuMiddleware = createMiddleware(\r\n  [OrderMenuAction.SELECT_MENU, OrderMenuAction.EDIT_MENU],\r\n  ({ dispatch, action }) => {\r\n    if (action.options.redirectToMenuPage) {\r\n      dispatch(\r\n        redirectTo(getRoute('ORDER__MENU'), {\r\n          menuId: action.menu.id,\r\n          restaurantId: action.options.restaurantId,\r\n        })\r\n      )\r\n    }\r\n  }\r\n)\r\n\r\nconst redirectToPaymentWhileAddingANewAddressHasSucceeded = createMiddleware(\r\n  PostUserAddressAction.SUCCESS,\r\n  ({ action, dispatch, getState }) => {\r\n    const { restaurant } = action.data\r\n    const { id, name, complement, street, postCode, city, country } = action.response\r\n    const rangeFromRestaurant = getDistanceFromLatLon(\r\n      restaurant.geoPt.latitude,\r\n      restaurant.geoPt.longitude,\r\n      action.response.geoPt.latitude,\r\n      action.response.geoPt.longitude\r\n    )\r\n\r\n    if (rangeFromRestaurant * 1000 <= restaurant.orderSettings.deliverySettings.maxRangeInMeters) {\r\n      dispatch(setDeliveryAddress(id, name, complement, street, postCode, city, country))\r\n\r\n      const frontSettings = getAppConfigFrontSettings(getState())\r\n      if (frontSettings.display.paymentPage) {\r\n        dispatch(redirectTo(getRoute('ORDER__PAYMENT')))\r\n      } else {\r\n        const orderData = getOrderData(getState())\r\n        dispatch(setPaymentMethod(PaymentMethodsAllowed.IRL)) // this doesn't change the orderData we use for postOrder, so the API receive paymentMethod=null\r\n        dispatch(postOrder(orderData))\r\n      }\r\n    } else {\r\n      dispatch(setDeliveryAddressError(true))\r\n    }\r\n  }\r\n)\r\n\r\nconst orderPostSuccessMiddleware = createMiddleware(\r\n  PostOrderAction.SUCCESS,\r\n  ({ action, dispatch, getState }) => {\r\n    const cartItems = getItemListFromCart(getState())\r\n    const cartData = getCartData(getState())\r\n    const orderProperties = getOrderProperties(getState())\r\n    const orderData = action.response\r\n\r\n    dispatch(savePostedOrderData({ cartData, orderData, cartItems, orderProperties }))\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_PAYMENT_SUCCESS, {\r\n      order: action.response,\r\n    })\r\n\r\n    dispatch(redirectTo(getRoute('ORDER__CONFIRM')))\r\n  }\r\n)\r\n\r\nconst handleLimitedStockError = (action, getState, dispatch) => {\r\n  const limitedStockList = action.error.extra['limitedStockList']\r\n  const limitedStockMessageFallback = action.error.extra['posErrorMessage']\r\n\r\n  let enrichedLimitedStockList = []\r\n  if (limitedStockList && limitedStockList instanceof Array) {\r\n    const orderData = getOrderData(getState())\r\n\r\n    const idToNameMap = {}\r\n\r\n    const collectFromOptions = (options = []) => {\r\n      options.forEach(option => {\r\n        option.values?.forEach(value => {\r\n          if (value.id && !idToNameMap[value.id]) {\r\n            idToNameMap[value.id] = value.name\r\n          }\r\n        })\r\n      })\r\n    }\r\n\r\n    // Products + their option values\r\n    orderData.products?.forEach(product => {\r\n      if (product.id && !idToNameMap[product.id]) {\r\n        idToNameMap[product.id] = product.name\r\n      }\r\n      collectFromOptions(product.options)\r\n    })\r\n\r\n    // Menus -> products + their option values\r\n    orderData.menus?.forEach(menu => {\r\n      menu.products?.forEach(product => {\r\n        if (product.id && !idToNameMap[product.id]) {\r\n          idToNameMap[product.id] = product.name\r\n        }\r\n        collectFromOptions(product.options)\r\n      })\r\n    })\r\n\r\n    enrichedLimitedStockList = limitedStockList.map(item => {\r\n      //We replace the name from the API to one from the front so the name is in the user locale\r\n      const name = idToNameMap[item.id] || idToNameMap[`ARTICLE_${item.id}`] || item.name\r\n\r\n      return { ...item, name }\r\n    })\r\n  }\r\n\r\n  dispatch(displayLimitedStockItemsDialog(enrichedLimitedStockList, limitedStockMessageFallback))\r\n}\r\n\r\n// Some PSPs require a POST redirect: build a hidden form and submit it programmatically\r\nfunction redirectToExternalWithPOST(asyncPaymentData) {\r\n  const form = document.createElement('form')\r\n  form.method = 'POST'\r\n  form.action = asyncPaymentData.pspRedirectUrl\r\n  Object.keys(asyncPaymentData.fields || {}).forEach(key => {\r\n    const input = document.createElement('input')\r\n    input.type = 'hidden'\r\n    input.name = key\r\n    input.value = asyncPaymentData.fields[key]\r\n    form.appendChild(input)\r\n  })\r\n  document.body.appendChild(form)\r\n  form.submit()\r\n}\r\n\r\n/**\r\n * When in 3DSecure mode, API will return an http code 303 along with the payment information.\r\n * The payment information contains a property payIn3DSecureUrl indicating where to redirect the\r\n * user to process the 3DSecure verification.\r\n */\r\nconst orderPostFailureMiddleware = createMiddleware(\r\n  PostOrderAction.FAILURE,\r\n  ({ getState, action, dispatch, next }) => {\r\n    if (action.error.errorCode === 'LIMITED_STOCK') {\r\n      handleLimitedStockError(action, getState, dispatch)\r\n    }\r\n\r\n    if (action.error.code === '403') {\r\n      try {\r\n        console.log(btoa(JSON.stringify(action)))\r\n        Logger.info('postOrder 403', 'posting order 403', {\r\n          action,\r\n        })\r\n      } catch (e) {\r\n        console.error(e)\r\n      }\r\n    }\r\n    if (isAsyncPaymentRedirectToPspResponse(action) && action.error.body.payment.asyncPaymentData) {\r\n      // keep the payment loader displayed while we redirect to the PSP page:\r\n      // - set the flag true BEFORE next(action), so the re-render triggered by the reducer\r\n      //   (which sets isFetchingOrderPost back to false) still shows the loader.\r\n      // - we do NOT set it back to false here: it must stay true until we leave the page.\r\n      //   The flag is reset when the user comes back on the payment page (see PaymentPage constructor and onpageshow).\r\n      setIsRedirectingToExternal(true)\r\n      next(action)\r\n      // previously, we were redirecting to the async form page here (PaymentAsyncRedirectTutorialDialog), but now we directly redirect to the PSP url\r\n      const { asyncPaymentData } = action.error.body.payment\r\n      if (asyncPaymentData.httpMethod === 'POST') {\r\n        redirectToExternalWithPOST(asyncPaymentData)\r\n        return\r\n      }\r\n      return dispatch(redirectToExternal(asyncPaymentData.pspRedirectUrl))\r\n    } else if (\r\n      isAsyncPaymentRedirectToPspResponse(action) &&\r\n      action.error.body.payment.asyncPaymentSecureUrl\r\n    ) {\r\n      // same as above: keep the loader displayed until we leave the page\r\n      setIsRedirectingToExternal(true)\r\n      dispatch(redirectToExternal(action.error.body.payment.asyncPaymentSecureUrl))\r\n    } else if (get(action.error, 'code', null) === OrderErrorCode.INVALID_DUE_DATE) {\r\n      dispatch(setDueDateAsap())\r\n      dispatch(showUnavailableDueDateDialog())\r\n    }\r\n  }\r\n)\r\n\r\nconst deleteCartItemMiddleware = createMiddleware(\r\n  CartDiffAction.DELETE_ITEM_LIST,\r\n  ({ getState, dispatch, action }) => {\r\n    const cartDiffItemList = getItemListCartDiff(getState())\r\n    const cartItemList = getItemListFromCart(getState())\r\n    const cleanCartItemList = removeUnavailableItemsFromList(cartItemList, cartDiffItemList)\r\n\r\n    dispatch(setCart({ itemList: cleanCartItemList }))\r\n\r\n    // if we are on the payment page we want to redirect to the cart so the user can see its new\r\n    // cart and check it before paying.\r\n    if (window.location.pathname === '/payment') {\r\n      if (cleanCartItemList.length === 0) {\r\n        const orderProperties = getOrderProperties(getState())\r\n        dispatch(\r\n          replaceWith(getRoute('ORDER__CATALOG'), {\r\n            restaurantId: orderProperties.restaurantId,\r\n          })\r\n        )\r\n      } else {\r\n        dispatch(replaceWith(getRoute('ORDER__CART')))\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nconst deleteInvalidVouchersMiddleware = createMiddleware(\r\n  VoucherDiffAction.DELETE_INVALID_VOUCHER_LIST,\r\n  ({ getState, dispatch, action }) => {\r\n    const invalidVouchers = getInvalidVouchers(getState())\r\n\r\n    let vouchers = getOrderProperties(getState()).vouchers || []\r\n\r\n    invalidVouchers.forEach(invalidVoucher => {\r\n      vouchers = vouchers.filter(v => v.voucherCode !== invalidVoucher.voucherCode)\r\n    })\r\n\r\n    dispatch(setVouchers(vouchers))\r\n  }\r\n)\r\n\r\n/**\r\n * Intercepts update user SUCCESS action\r\n */\r\nconst updateProfileSuccess = createMiddleware(PutUserMeAction.SUCCESS, ({ next, action }) => {\r\n  const props = action.data.props || {}\r\n\r\n  if (!isEmpty(props.redirectTo)) {\r\n    return next(replaceWith(props.redirectTo, props.redirectToParams))\r\n  }\r\n\r\n  return next(action)\r\n})\r\n\r\n/**\r\n * We get the payment after a 3DSecure transaction in order to verify its status\r\n * on success, we redirect to payment confirmation page\r\n */\r\nconst finalizeAsyncPaymentSuccess = createMiddleware(\r\n  GetAsyncPaymentAction.SUCCESS,\r\n  ({ action, dispatch, getState }) => {\r\n    // the API can gives us a success with an error model on it to avoid spamming error logs.\r\n    // But the real success is when we have the payment data\r\n    if (action.response.isFinalized && action.response.payment?.status === PaymentStatus.PAID) {\r\n      setCurrency(action.response.payment.currency)\r\n      const cartItems = forceGetItemListFromCart(getState()) // force re-formatting, so the currency is taken into account\r\n      const cartData = getCartData(getState())\r\n      const orderProperties = getOrderProperties(getState())\r\n      const orderData = {\r\n        ...action.response.linkedObject,\r\n        payment: action.response.payment,\r\n      }\r\n\r\n      dispatch(savePostedOrderData({ cartData, orderData, cartItems, orderProperties }))\r\n      dispatch(redirectTo(getRoute('ORDER__CONFIRM')))\r\n    }\r\n  }\r\n)\r\n\r\nconst finalizeAsyncPaymentFailure = createMiddleware(\r\n  GetAsyncPaymentAction.FAILURE,\r\n  ({ getState, action, dispatch }) => {\r\n    if (action.error.errorCode === 'LIMITED_STOCK') {\r\n      handleLimitedStockError(action, getState, dispatch)\r\n    }\r\n\r\n    if (action.error) {\r\n      dispatch(redirectTo(getRoute('ORDER__PAYMENT')))\r\n    }\r\n  }\r\n)\r\n\r\nconst getCatalogFromDueDateMiddleware = createMiddleware(\r\n  GetCatalogAction.SUCCESS,\r\n  ({ getState, dispatch, action, next }) => {\r\n    const { isAsap, slot } = getOrderProperties(getState())\r\n    const cartItemList = getItemListFromCart(getState())\r\n\r\n    // finalize action in order to wait it has fully ended (i.e: data is in reducer)\r\n    // so we can getUnavailableItemsFromCart with a catalog fetched and formatable\r\n    next(action)\r\n\r\n    if (!isEmpty(cartItemList)) {\r\n      const formattedCatalog = getCatalogFormatted(getState())\r\n      const unavailableItems = getUnavailableItemsFromCart(cartItemList, formattedCatalog)\r\n\r\n      if (getQueryParam('testLockedBeforePayment') !== 'true') {\r\n        dispatch(setCartDiffItemList(unavailableItems))\r\n\r\n        if (!isEmpty(unavailableItems)) {\r\n          dispatch(displayCartDiffItemsDialog())\r\n\r\n          // to put out, on submit on cart diff dialog\r\n          if (isAsap) {\r\n            dispatch(setDueDateAsap())\r\n          } else {\r\n            dispatch(selectSlot(slot))\r\n          }\r\n          return\r\n        }\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nconst postOrderPreviewFailure = createMiddleware(\r\n  PostOrderPreviewAction.FAILURE,\r\n  ({ getState, action, dispatch }) => {\r\n    // handle api errors that will make the order impossible to finish (restaurant / mode disabled)\r\n    // or the due date should be changed.\r\n\r\n    if (window.location.pathname !== '/confirm') {\r\n      switch (get(action.error, 'code', null)) {\r\n        case OrderErrorCode.INVALID_DUE_DATE:\r\n          dispatch(showUnavailableDueDateDialog())\r\n          break\r\n        case OrderErrorCode.ORDER_MODE_DISABLED:\r\n          dispatch(showOrderModeDisabledDialog())\r\n          break\r\n        case OrderErrorCode.TABLE_NOT_FOUND:\r\n          const orderProperties = getOrderProperties(getState())\r\n          dispatch(showTableNotFoundDialog(orderProperties.restaurant.id))\r\n          break\r\n\r\n        default:\r\n          break\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nconst resetCategoryWhileGoBackToStoreLocator = createMiddleware(\r\n  OrderPluginAction.BACK_TO_STORE_LOCATOR,\r\n  ({ dispatch, action }) => {\r\n    dispatch(setSelectedCategory(null))\r\n    dispatch(setParentCategories([]))\r\n  }\r\n)\r\n\r\nconst resetOrderPluginMiddleware = createMiddleware(OrderPluginAction.RESET, ({ dispatch }) => {\r\n  // TODO: move all reseters here?\r\n  dispatch(resetPostOrder())\r\n})\r\n\r\nconst registeredUserLightOrIncognitoSuccessOrderPluginMiddleware = createMiddleware(\r\n  [RegisterUserLightAction.SUCCESS, RegisterIncognitoUserAction.SUCCESS],\r\n  ({ getState, action, dispatch, next }) => {\r\n    // saving incognito/userlight cookie and using redirectToParam if any is done in the common registrationMiddleware\r\n    // we want it to be made now, before we do anything else.\r\n    // if a `redirectTo` param existed, the common registrationMiddleware already handled the\r\n    // redirection and returns DID_REDIRECT_TO_PARAM, which propagates up through next(action).\r\n    const res = next(action)\r\n\r\n    if (res === DID_REDIRECT_TO_PARAM) {\r\n      // a redirection was already made by the common registrationMiddleware, we must not run the\r\n      // order-plugin specific redirections below, otherwise we would override it.\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n\r\n    // and then, here, we handle the redirections specific to the order plugin\r\n    const frontSettings = getAppConfigFrontSettings(getState())\r\n    const orderProperties = getOrderProperties(getState())\r\n    const orderData = getOrderData(getState())\r\n    if (frontSettings.display.paymentPage) {\r\n      if (orderProperties.isDelivery) {\r\n        dispatch(redirectTo(getRoute('ORDER__DELIVERY_ADDRESS')))\r\n      } else {\r\n        dispatch(redirectTo(getRoute('ORDER__PAYMENT')))\r\n      }\r\n    } else {\r\n      // not displaying paymentPage\r\n      // so we can now send the order\r\n      dispatch(setPaymentMethod(PaymentMethodsAllowed.IRL)) // this doesn't change the orderData we use for postOrder, so the API receive paymentMethod=null\r\n      if (orderProperties.isDelivery) {\r\n        dispatch(redirectTo(getRoute('ORDER__DELIVERY_ADDRESS')))\r\n      } else {\r\n        dispatch(postOrder(orderData))\r\n      }\r\n    }\r\n\r\n    return createMiddleware.STOP_PROPAGATION\r\n  }\r\n)\r\n\r\nconst postOrderPreviewAndPostOrderIfSucceededMiddleware = createMiddleware(\r\n  [OrderPluginAction.POST_ORDER_PREVIEW_AND_POST_ORDER_IF_SUCCEEDED],\r\n  ({ getState, dispatch }) => {\r\n    dispatchPostOrderPreview(dispatch, getState, {\r\n      postOrderIfSucceeded: true,\r\n    })\r\n  }\r\n)\r\n\r\n// order preview succeeded, and action flagged as postOrderIfSucceeded, we post the order.\r\n// The goal is to do an order preview before sending the order, to avoid having an error after\r\n// the payment when we send the order to the pos.\r\nconst postOrderPreviewSucceededAndPostOrderIfSucceededMiddleware = createMiddleware(\r\n  PostOrderPreviewAction.SUCCESS,\r\n  ({ getState, dispatch, action }) => {\r\n    // hack for the moment: the order preview always fails with SQS due to invalid ID mapping\r\n    // on menu parts\r\n    const isBuffaloGrill = window.location.host.includes('buffalo-grill')\r\n    const isOrderPreviewSuccess =\r\n      action.data.options.postOrderIfSucceeded &&\r\n      action.response.succeeded &&\r\n      // succeeded  is true even if verifications.availability.succeeded is false\r\n      action.response.verifications.availability.succeeded\r\n    if (action.data.options.postOrderIfSucceeded && (isBuffaloGrill || isOrderPreviewSuccess)) {\r\n      const orderData = getOrderData(getState())\r\n      dispatch(postOrder(orderData))\r\n    } else {\r\n      // cardDiff postOrderPreviewSuccessMiddleware will handle cart modification\r\n    }\r\n  }\r\n)\r\n\r\nexport const orderPluginMiddlewares = [\r\n  selectModeMiddleware,\r\n  setRestaurantIdOnRestaurantSet,\r\n  fetchCheckOnPosCheckIdSet,\r\n  setTableNumberOnFetchCheckSuccess,\r\n  setRestaurantWhenGetRestaurantSuccess,\r\n  setCurrencyWhenRestauranSet,\r\n  redirectToStoreLocatorWithRedirection,\r\n  setRestaurantAndDueDateWhenIsAsap,\r\n  finalizeAsyncPaymentSuccess,\r\n  finalizeAsyncPaymentFailure,\r\n  redirectToPaymentWhileAddingANewAddressHasSucceeded,\r\n  orderPostSuccessMiddleware,\r\n  orderPostFailureMiddleware,\r\n  setRestaurantMiddleware,\r\n  setRestaurantNullIfGetRestaurantFails,\r\n  openProductMiddleware,\r\n  openMenuMiddleware,\r\n  postOrderPreviewFailure,\r\n  deleteCartItemMiddleware,\r\n  deleteInvalidVouchersMiddleware,\r\n  // comment the code beyond because the cashpad system does not handle right the table number\r\n  // resetTableNumberIfOnSiteAndOrderPreviewFails,\r\n  ...userOrderPluginMiddlewares,\r\n  updateProfileSuccess,\r\n  catchCartActionMiddleware,\r\n  setCartDetailsFromRestaurantMiddleware,\r\n  resetOrderSettingsWhenResetingRestaurant,\r\n  getCatalogFromDueDateMiddleware,\r\n  resetCategoryWhileGoBackToStoreLocator,\r\n  setFrontOrderDueDateMiddleware,\r\n  resetFrontOrderDueDateMiddleware,\r\n  resetOrderPluginMiddleware,\r\n  registeredUserLightOrIncognitoSuccessOrderPluginMiddleware,\r\n  postOrderPreviewAndPostOrderIfSucceededMiddleware,\r\n  postOrderPreviewSucceededAndPostOrderIfSucceededMiddleware,\r\n]\r\n","//\r\n// This module store global configuration and data for the order plugin,\r\n// that don't requires their own module / reducer\r\n//\r\nimport Immutable from 'immutable'\r\n\r\nimport { OrderPluginAction } from './actions'\r\nimport { EditUserAddressAction } from 'pmt-modules/userAddress'\r\n\r\nimport { GetCheckWithPosCheckIdAction } from 'pmt-modules/payment/check'\r\n\r\nexport * from './actions'\r\nexport * from './components'\r\nexport * from './constants'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = {\r\n  isAsap: false,\r\n  day: null,\r\n  slot: null,\r\n  tableNumber: null,\r\n  disableModifyTableNumber: false,\r\n  posCheckId: null,\r\n  from: null,\r\n  deliveryAddress: {\r\n    id: null,\r\n    name: null,\r\n    complement: null,\r\n    street: null,\r\n    postCode: null,\r\n    city: null,\r\n    country: null,\r\n    error: false,\r\n  },\r\n  selectedCategory: null,\r\n  // used to find the first category that the user arrived\r\n  // when no category id is filled. Eg : /catalog\r\n  firstSelectedCategory: null,\r\n  // /!\\ the data for each category is not always up to date (eg. availabilities)\r\n  // it would probably be better to just have an array containing the ids of the parentCategories here\r\n  // and, when needed, retrieve the category object from the catalog (which is up to date with the availabilities)\r\n  parentCategories: [],\r\n  configurationError: null,\r\n  paymentMethod: null,\r\n  alcoholApprovalAnswer: null, // true if the user said he's authorized to buy alcohol\r\n}\r\n\r\nexport const orderPluginReducer = (state = Immutable.fromJS(DEFAULT), action) => {\r\n  switch (action.type) {\r\n    case OrderPluginAction.SET_DUE_DATE_ASAP:\r\n      return state.merge({\r\n        isAsap: true,\r\n        slot: null,\r\n      })\r\n\r\n    case OrderPluginAction.SELECT_DAY:\r\n      return state.merge({\r\n        day: action.date,\r\n        slot: null,\r\n        isAsap: false,\r\n      })\r\n\r\n    case OrderPluginAction.SELECT_SLOT:\r\n      return state.merge({\r\n        slot: action.slot,\r\n        isAsap: false,\r\n        // the action can override the day\r\n        day: action.day ? action.day : state.get('day'),\r\n      })\r\n\r\n    case OrderPluginAction.SET_TABLE_NUMBER:\r\n      return state.merge({\r\n        tableNumber: action.tableNumber,\r\n      })\r\n\r\n    case OrderPluginAction.DISABLE_TABLE_NUMBER_MODIFICATION:\r\n      return state.merge({\r\n        disableModifyTableNumber: true,\r\n      })\r\n\r\n    // we don't put directly the posCheckId from query param to the state, because for some POS (like TCPOS)\r\n    // the posCheckId we have in the url is not the same as the one we will put in Order.poscheckId\r\n    // (ex: for TCPOS, in the url we have posCheckId=suspensionGuid, this suspensionGuid will be saved in Order.posCheckGuid, and Order.posCheckId will store the TCPOS order guid - which is the value we need to store in the state)\r\n    // so we read the posCheckId from the Check we get from the API\r\n    case GetCheckWithPosCheckIdAction.SUCCESS:\r\n      return state.merge({\r\n        posCheckId: action.response.posCheckId,\r\n        posCheckGuid: action.response.posCheckGuid, // can be null\r\n      })\r\n\r\n    case OrderPluginAction.SET_DELIVERY_ADDRESS:\r\n      return state.merge({\r\n        deliveryAddress: {\r\n          id: action.id,\r\n          name: action.name,\r\n          complement: action.complement,\r\n          street: action.street,\r\n          postCode: action.postCode,\r\n          city: action.city,\r\n          country: action.country,\r\n          errorMessage: null,\r\n        },\r\n      })\r\n\r\n    case EditUserAddressAction.SUCCESS:\r\n      if (state.toJS().deliveryAddress && state.toJS().deliveryAddress.id === action.response.id) {\r\n        return state.merge({\r\n          deliveryAddress: {\r\n            id: action.response.id,\r\n            name: action.response.name,\r\n            complement: action.response.complement,\r\n            street: action.response.street,\r\n            postCode: action.response.postCode,\r\n            city: action.response.city,\r\n            country: action.response.country,\r\n            errorMessage: null,\r\n          },\r\n        })\r\n      } else {\r\n        return state\r\n      }\r\n\r\n    case OrderPluginAction.RESET_DELIVERY_ADDRESS:\r\n      return state.merge({\r\n        deliveryAddress: null,\r\n      })\r\n\r\n    case OrderPluginAction.SET_DELIVERY_ADDRESS_ERROR:\r\n      return state.setIn(['deliveryAddress', 'errorMessage'], action.value)\r\n\r\n    case OrderPluginAction.SET_CONFIGURATION_ERROR:\r\n      return state.merge({\r\n        configurationError: action.configurationError,\r\n      })\r\n\r\n    case OrderPluginAction.RESET_DAY_AND_SLOT:\r\n      return state.merge({\r\n        day: null,\r\n        slot: null,\r\n        isAsap: false,\r\n      })\r\n\r\n    case OrderPluginAction.SET_SELECTED_CATEGORY:\r\n      return state.merge({\r\n        selectedCategory: action.category,\r\n      })\r\n\r\n    case OrderPluginAction.SET_FIRST_SELECTED_CATEGORY:\r\n      return state.merge({\r\n        firstSelectedCategory: action.firstSelectedCategory,\r\n      })\r\n\r\n    case OrderPluginAction.RESET_SELECTED_CATEGORY:\r\n      return state.merge({\r\n        selectedCategory: null,\r\n        firstSelectedCategory: null,\r\n      })\r\n\r\n    case OrderPluginAction.SET_PARENT_CATEGORIES:\r\n      return state.merge({\r\n        parentCategories: action.parentCategories || [],\r\n      })\r\n\r\n    case OrderPluginAction.BACK_TO_STORE_LOCATOR:\r\n      return state.merge({\r\n        isAsap: false,\r\n        day: null,\r\n        slot: null,\r\n      })\r\n\r\n    case OrderPluginAction.RESET:\r\n      return state.merge(\r\n        Immutable.fromJS({\r\n          ...DEFAULT,\r\n        })\r\n      )\r\n\r\n    case OrderPluginAction.SET_FROM:\r\n      return state.merge({\r\n        from: action.from,\r\n      })\r\n\r\n    case OrderPluginAction.ALCOHOL_ACCEPT:\r\n      return state.merge({\r\n        alcoholApprovalAnswer: true,\r\n      })\r\n\r\n    case OrderPluginAction.ALCOHOL_RESET:\r\n      return state.merge({\r\n        alcoholApprovalAnswer: null,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport isNil from 'lodash/isNil'\r\n\r\n// https://blog.logrocket.com/advanced-react-router-concepts-code-splitting-animated-transitions-scroll-restoration-recursive-17096c0cf9db\r\nclass ScrollToTop extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    // scroll to top when arriving on a new page\r\n    window.scrollTo(0, 0)\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    // Note: we can't compare the location object, since it changes when the anchor change\r\n    if (\r\n      this.props.location.pathname !== prevProps.location.pathname &&\r\n      (isNil(this.props.isInactive) || !this.props.isInactive(prevProps, this.props))\r\n    ) {\r\n      window.scrollTo(0, 0)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { WrappedComponent, ...otherProps } = this.props\r\n    return <WrappedComponent {...otherProps} />\r\n  }\r\n}\r\n\r\nScrollToTop.defaultProps = {\r\n  isInactive: null,\r\n}\r\n\r\nScrollToTop.propTypes = {\r\n  isInactive: PropTypes.func,\r\n}\r\n\r\nexport default ScrollToTop\r\n","import React from 'react'\r\n\r\nimport ScrollToTop from './ScrollToTop'\r\n\r\nconst withScrollToTop = (options = {}) => WrappedComponent => {\r\n  return props => <ScrollToTop WrappedComponent={WrappedComponent} {...props} {...options} />\r\n}\r\n\r\nexport default withScrollToTop\r\n","import { createSelector } from 'reselect'\r\n\r\nconst getState = state => state.entities.appSecurity\r\n\r\nexport const getAppSecurityError = createSelector([getState], state => {\r\n  const error = state.get('error', null)\r\n\r\n  if (!error) {\r\n    return null\r\n  }\r\n\r\n  return error.toJS()\r\n})\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { getAppSecurityError } from '../../selectors'\r\n\r\nclass AppSecurityContainer extends React.PureComponent {\r\n  render() {\r\n    const { appSecurityError, children } = this.props\r\n\r\n    return children({\r\n      appSecurityError,\r\n    })\r\n  }\r\n}\r\n\r\nAppSecurityContainer.propTypes = {}\r\n\r\nconst mapStateToProps = state => {\r\n  return {\r\n    appSecurityError: getAppSecurityError(state),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {})(AppSecurityContainer)\r\n","export default {\r\n  // for key we use the `ENV` from our config\r\n  DEV: {\r\n    identifiers: [\r\n      // UA (old)\r\n      /*{\r\n        trackingId: 'UA-105853425-2',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_dev',\r\n        }\r\n      },\r\n       */\r\n\r\n      // GA4\r\n      {\r\n        trackingId: 'G-L9YBTZ64Q0',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_dev_ga4',\r\n        },\r\n      },\r\n    ],\r\n    /*\r\n      options.nonce\tstring Optional Used for Content Security Policy (CSP) more\r\n      options.testMode\tboolean Default false\r\n      options.gaOptions\tobject Optional Reference\r\n      options.gtagOptions\tobject Optional\r\n      options.legacyDimensionMetric\tboolean Default true\r\n      \r\n      */\r\n    options: {\r\n      gtagOptions: { debug_mode: true },\r\n    },\r\n  },\r\n  PQA: {\r\n    identifiers: [],\r\n  },\r\n  PREPROD: {\r\n    identifiers: [\r\n      // UA (old)\r\n      /*\r\n      {\r\n        trackingId: 'UA-105853425-3',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_preprod',\r\n        },\r\n      },\r\n       */\r\n\r\n      // GA4\r\n      {\r\n        trackingId: 'G-W6X2SYE3D1',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_preprod_ga4',\r\n        },\r\n      },\r\n    ],\r\n    options: {},\r\n  },\r\n  PROD: {\r\n    identifiers: [\r\n      // UA (old)\r\n      /*{\r\n        trackingId: 'UA-105853425-1',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_prod',\r\n        },\r\n      },\r\n       */\r\n\r\n      // GA4\r\n      {\r\n        trackingId: 'G-62L7Z7VPB0',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_prod_ga4',\r\n        },\r\n      },\r\n    ],\r\n    options: {},\r\n  },\r\n}\r\n","//\r\n// Note: this file should never be import directly. Use a getter via getters.js\r\n//\r\n\r\nimport find from 'lodash/find'\r\nimport merge from 'lodash/merge'\r\nimport isNil from 'lodash/isNil'\r\n\r\nconst Env = {\r\n  COMMON: {\r\n    VERSION: '0.0.1',\r\n\r\n    Logger: {\r\n      SENTRY_URL: 'https://47de7b8f07214aa4b8516ce30a81fbe5@sentry.io/481680',\r\n      DISPLAY_REPORT_DIALOG: true,\r\n    },\r\n\r\n    // enable auth feature for this project\r\n    HAS_AUTH_ENABLED: true,\r\n    SHOULD_USE_APP_CONFIG: true,\r\n\r\n    IS_ORDER_PLUGIN: true,\r\n\r\n    IS_LOCAL: false,\r\n    IS_DEV: false,\r\n    IS_QA: false,\r\n    IS_PREPROD: false,\r\n    IS_PROD: false,\r\n\r\n    Google: {\r\n      Map: {\r\n        API_URL: 'https://maps.googleapis.com/maps/api/js',\r\n\r\n        API_VERSION: '3.30',\r\n\r\n        API_KEY: 'AIzaSyCatd-vZ7uBOKTkfyLJKQ28uszfsmhdTwA',\r\n      },\r\n    },\r\n  },\r\n\r\n  LOCAL: {\r\n    ENV: 'DEV',\r\n\r\n    HOSTNAME: 'localhost',\r\n    BASE_URL: /localhost/,\r\n    API_URL: 'http://localhost:8080/rest',\r\n    API_CONSUMER: 'Basic NTY0NDIzOTAwNjMzNDk3NjpBT29VeGs5N0JFdTV5Zw==',\r\n\r\n    IS_LOCAL: true,\r\n  },\r\n\r\n  PREPROD: {\r\n    ENV: 'PREPROD',\r\n\r\n    HOSTNAME: 'order2.pluginweb.preprod.paymytable.com',\r\n    BASE_URL: /order2.pluginweb.preprod.paymytable.com/,\r\n    API_URL: 'https://paymytable-eu-preprod.ew.r.appspot.com/rest',\r\n    // API_CONSUMER: 'Basic NjI2NDg0NDc2ODUwOTk1MjpHODl3S3ZYRUJ6MjA',\r\n    API_CONSUMER: 'Basic NDgwMjEzNjgxNDY0OTM0NDpBTXNlcnFEb2FzM3g',\r\n\r\n    IS_PREPROD: true,\r\n  },\r\n\r\n  PRODUCTION: {\r\n    ENV: 'PROD',\r\n\r\n    HOSTNAME: 'order2.pluginweb.paymytable.com',\r\n    BASE_URL: /order2.pluginweb.paymytable.com/,\r\n    API_URL: 'https://order-dot-paymytable-eu.ew.r.appspot.com/rest',\r\n    API_CONSUMER: '',\r\n\r\n    IS_PROD: true,\r\n  },\r\n}\r\n\r\nlet predicate = null\r\n\r\nconst hostname = window.location.hostname\r\n\r\nif (!isNil(window.globalEnvironmentSettings)) {\r\n  predicate = config => window.globalEnvironmentSettings.env === config.ENV\r\n} else {\r\n  predicate = config => (!isNil(config.BASE_URL) ? hostname.match(config.BASE_URL) : null)\r\n}\r\n\r\nlet currentEnv = find(Env, predicate)\r\n\r\nif (process.env.__DEV__) {\r\n  currentEnv = Env.PREPROD\r\n}\r\n\r\nconsole.log('[CONFIGURATION] ', currentEnv.API_URL, currentEnv.HOSTNAME)\r\n\r\nexport default merge({}, Env.COMMON, currentEnv)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet HardwareKeyboardArrowRight = props => {\r\n  const { slideCount, currentSlide, ...svgProps } = props\r\n\r\n  return (\r\n    <SvgIcon {...svgProps}>\r\n      <path d=\"M9.29,15.88L13.17,12L9.29,8.12c-0.39-0.39-0.39-1.02,0-1.41l0,0c0.39-0.39,1.02-0.39,1.41,0l4.59,4.59 c0.39,0.39,0.39,1.02,0,1.41l-4.59,4.59c-0.39,0.39-1.02,0.39-1.41,0l0,0C8.91,16.91,8.9,16.27,9.29,15.88z\" />\r\n    </SvgIcon>\r\n  )\r\n}\r\nHardwareKeyboardArrowRight = pure(HardwareKeyboardArrowRight)\r\nHardwareKeyboardArrowRight.displayName = 'HardwareKeyboardArrowRight'\r\nHardwareKeyboardArrowRight.pmtName = 'SvgIcon'\r\n\r\nexport default HardwareKeyboardArrowRight\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport ButtonBase from 'pmt-ui/ButtonBase'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport HardwareKeyboardArrowRight from 'pmt-ui/svg-icons/hardware/keyboard-arrow-right'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    width: 180,\r\n    height: 180,\r\n    display: 'flex',\r\n    fontSize: 20,\r\n    flexDirection: 'column',\r\n    boxShadow: theme.shadows[2],\r\n    backgroundColor: theme.pmt.colors.white,\r\n    // this syntax is coming from here\r\n    // http://cssinjs.org/jss-nested/?v=v6.0.1#use-rulename-to-reference-a-local-rule-within-the-same-style-sheet\r\n    // https://github.com/mui-org/material-ui/blob/v1-beta/src/Button/Button.js#L84\r\n    '&$keyboardFocused': {\r\n      boxShadow: theme.shadows[6],\r\n    },\r\n    '&:active': {\r\n      boxShadow: theme.shadows[8],\r\n    },\r\n    '&$disabled': {\r\n      boxShadow: theme.shadows[0],\r\n      backgroundColor: theme.palette.text.divider,\r\n    },\r\n    '&:hover': {\r\n      // Reset on mouse devices\r\n      '@media (hover: none)': {\r\n        backgroundColor: theme.palette.grey[300],\r\n      },\r\n      '&$disabled': {\r\n        backgroundColor: theme.palette.text.divider,\r\n        // Reset on mouse devices\r\n        '@media (hover: none)': {\r\n          backgroundColor: theme.palette.grey[300],\r\n        },\r\n      },\r\n    },\r\n    [theme.breakpoints.down('xs')]: {\r\n      display: 'block',\r\n      width: '100%',\r\n      height: 68,\r\n      flexDirection: 'row',\r\n      padding: theme.spacing(2),\r\n    },\r\n  },\r\n  keyboardFocused: {},\r\n  disabled: {\r\n    color: theme.palette.action.disabled,\r\n  },\r\n  icon: {\r\n    width: 90,\r\n    height: 90,\r\n    marginTop: -theme.spacing(2),\r\n    [theme.breakpoints.down('xs')]: {\r\n      float: 'left',\r\n      width: 40,\r\n      height: 40,\r\n      marginTop: 0,\r\n    },\r\n  },\r\n  label: {\r\n    [theme.breakpoints.down('xs')]: {\r\n      float: 'left',\r\n      marginLeft: theme.spacing(2),\r\n      height: 40,\r\n      lineHeight: '40px',\r\n      fontSize: 16,\r\n    },\r\n  },\r\n  floatingArrow: {\r\n    float: 'right',\r\n    width: 40,\r\n    height: 40,\r\n  },\r\n})\r\n\r\nconst ButtonSquare = ({ classes, label, icon, onClick }) => (\r\n  <ButtonBase className={classes.root} onClick={onClick}>\r\n    {React.cloneElement(icon, {\r\n      className: classes.icon,\r\n    })}\r\n    <span className={classes.label}>{label}</span>\r\n    <Hidden smUp>\r\n      <HardwareKeyboardArrowRight className={classes.floatingArrow} />\r\n    </Hidden>\r\n  </ButtonBase>\r\n)\r\n\r\nButtonSquare.propTypes = {\r\n  colors: PropTypes.object,\r\n  icon: PropTypes.element.isRequired,\r\n  label: PropTypes.string.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(ButtonSquare)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Button from 'pmt-ui/Button'\r\nimport { withStyles, withTheme } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    padding: 0,\r\n    textTransform: 'initial',\r\n    fontSize: 16,\r\n    minHeight: 0,\r\n    minWidth: 0,\r\n    lineHeight: '16px',\r\n    '&:hover': {\r\n      textDecoration: 'underline',\r\n      backgroundColor: 'transparent',\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      textDecoration: 'underline',\r\n    },\r\n  },\r\n  sizeLarge: {\r\n    fontSize: 18,\r\n    fontWeight: 700,\r\n  },\r\n  focusVisible: {\r\n    outline: `2px solid ${theme.palette.primary.main}`,\r\n    outlineOffset: 2,\r\n  },\r\n})\r\n\r\n// ButtonLink - used for main action for order plugin\r\n// created to format style applied in one file\r\n// and not everywhere a primary button has to be set\r\nconst ButtonLink = ({ children, classes, color, label, icon, theme, ...otherProps }) => (\r\n  <Button\r\n    variant=\"text\"\r\n    color={color}\r\n    classes={classes}\r\n    disableRipple\r\n    {...otherProps}\r\n  >\r\n    {icon &&\r\n      React.cloneElement(icon, {\r\n        style: {\r\n          marginRight: label || children ? theme.spacing(1) : 0,\r\n          width: 20,\r\n          height: 20,\r\n        },\r\n      })}\r\n    {children || label}\r\n  </Button>\r\n)\r\n\r\nButtonLink.defaultProps = {\r\n  color: 'primary',\r\n}\r\n\r\nButtonLink.propTypes = {\r\n  color: PropTypes.string,\r\n  // same as 'children'\r\n  label: PropTypes.string,\r\n  // same as 'label'\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default withStyles(styles)(withTheme(ButtonLink))\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Button from 'pmt-ui/Button'\r\nimport { withStyles, withTheme } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    textTransform: 'initial',\r\n    fontWeight: 700,\r\n    lineHeight: 1,\r\n  },\r\n  disabled: {},\r\n  label: {\r\n    textAlign: 'center',\r\n    lineHeight: '20px',\r\n    textTransform: 'initial',\r\n  },\r\n  sizeSmall: {\r\n    fontSize: theme.typography.pxToRem(14),\r\n  },\r\n  sizeLarge: {\r\n    padding: theme.spacing(2),\r\n    fontSize: theme.typography.pxToRem(18),\r\n  },\r\n  outlinedPrimary: {\r\n    background: theme.pmt.colors.white,\r\n  },\r\n})\r\n\r\n// ButtonCustom - used for main action for order plugin\r\n// created to format style applied in one file\r\n// and not everywhere a primary button has to be set\r\nconst ButtonCustom = ({ children, classes, color, label, icon, variant, theme, ...otherProps }) => (\r\n  <Button variant={variant} color={color} classes={classes} {...otherProps}>\r\n    {icon &&\r\n      React.cloneElement(icon, {\r\n        style: {\r\n          marginRight:\r\n            label || children\r\n              ? otherProps.size === 'small'\r\n                ? theme.spacing(0.5)\r\n                : theme.spacing(1)\r\n              : 0,\r\n          height: otherProps.size === 'small' ? 16 : 24,\r\n          width: otherProps.size === 'small' ? 16 : 24,\r\n        },\r\n      })}\r\n    {children || label}\r\n  </Button>\r\n)\r\n\r\nButtonCustom.defaultProps = {\r\n  color: 'primary',\r\n  variant: 'contained',\r\n}\r\n\r\nButtonCustom.propTypes = {\r\n  color: PropTypes.string,\r\n  // same as 'children'\r\n  label: PropTypes.string,\r\n  // same as 'label'\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default withStyles(styles)(withTheme(ButtonCustom))\r\n","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"12.9.0\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { createAction } from 'pmt-modules/redux'\r\nimport { getDatabase, ref, query, orderByChild, startAt, onValue } from 'firebase/database'\r\n\r\nimport FirebaseApi from 'pmt-modules/api/calls/FirebaseApi'\r\n\r\n/**\r\n *\r\n */\r\nexport const PMTFirebaseAuth = createApiEnumAction('FIREBASE::PMT::AUTH')\r\n\r\nexport const postPmtFirebaseAuth = () =>\r\n  createApiCallAction(PMTFirebaseAuth, FirebaseApi.auth(), {})\r\n\r\nexport const authUserOnFirebase = () => createAction('FIREBASE::PMT::AUTH_USER_ON_FIREBASE')\r\nauthUserOnFirebase.TYPE = 'FIREBASE::PMT::AUTH_USER_ON_FIREBASE'\r\n\r\nexport const FirebaseDataSubscription = createApiEnumAction('FIREBASE::DATA::SUBSCRIPTION')\r\n\r\nexport const subscribeToFirebaseData =\r\n  (path, queryParams = []) =>\r\n  (dispatch, getState) => {\r\n    const db = getDatabase()\r\n    const dbRef = ref(db, path)\r\n\r\n    let dbQuery = dbRef\r\n    if (queryParams && queryParams.length > 0) {\r\n      const constraints = []\r\n      queryParams.forEach(param => {\r\n        if (param.startsWith('orderByChild=')) {\r\n          const field = param.replace('orderByChild=', '')\r\n          constraints.push(orderByChild(field))\r\n        }\r\n        if (param.startsWith('startAt=')) {\r\n          const value = parseInt(param.replace('startAt=', ''))\r\n          constraints.push(startAt(value))\r\n        }\r\n      })\r\n      if (constraints.length > 0) {\r\n        dbQuery = query(dbRef, ...constraints)\r\n      }\r\n    }\r\n\r\n    const unsubscribe = onValue(\r\n      dbQuery,\r\n      snapshot => {\r\n        //console.log('Firebase data received:', path, snapshot.val())\r\n        dispatch({\r\n          type: FirebaseDataSubscription.SUCCESS,\r\n          payload: { path, data: snapshot.val() || {} },\r\n        })\r\n      },\r\n      error => {\r\n        //console.error('Firebase error:', path, error)\r\n        dispatch({\r\n          type: FirebaseDataSubscription.FAILURE,\r\n          payload: { path, error },\r\n        })\r\n      }\r\n    )\r\n\r\n    return unsubscribe\r\n  }\r\n","//\r\n// - https://firebase.google.com/\r\n// - https://github.com/prescottprue/react-redux-firebase/\r\n//\r\n//\r\n// We use firebase to:\r\n// - interact with cloud storage: https://firebase.google.com/products/storage/\r\n//\r\n//\r\n\r\n// https://firebase.google.com/docs/web/setup\r\nimport { initializeApp } from 'firebase/app'\r\n// You don't need to import firebase/app either since it's being imported above\r\n//import 'firebase/storage'\r\n//import 'firebase/database'\r\n//import 'firebase/auth'\r\n\r\nimport { combineReducers } from 'redux'\r\nimport { registerFirebaseConfig } from './config'\r\nimport { createSimpleReducer } from 'pmt-modules/redux'\r\nimport { PMTFirebaseAuth, FirebaseDataSubscription } from './actions'\r\n\r\nexport * from './config'\r\n\r\nlet _firebaseApp = null\r\n\r\nexport const initializeFirebase = appConfig => {\r\n  const config = appConfig.firebase\r\n\r\n  if (config) {\r\n    registerFirebaseConfig(config)\r\n\r\n    if (config.credentials) {\r\n      _firebaseApp = initializeApp(config.credentials)\r\n    }\r\n  }\r\n}\r\n\r\nexport const getFirebaseApp = () => _firebaseApp\r\n\r\nconst firebaseAuthReducer = createSimpleReducer(PMTFirebaseAuth)\r\n\r\nconst firebaseDataReducer = (state = {}, action) => {\r\n  switch (action.type) {\r\n    case FirebaseDataSubscription.SUCCESS:\r\n      const existingData = state[action.payload.path]?.data\r\n\r\n      // Avoid updating if data hasn't changed\r\n      if (JSON.stringify(existingData) === JSON.stringify(action.payload.data)) {\r\n        return state\r\n      }\r\n\r\n      return {\r\n        ...state,\r\n        [action.payload.path]: {\r\n          data: action.payload.data,\r\n          isFetching: false,\r\n          error: null,\r\n        },\r\n      }\r\n    case FirebaseDataSubscription.FAILURE:\r\n      return {\r\n        ...state,\r\n        [action.payload.path]: {\r\n          data: null,\r\n          isFetching: false,\r\n          error: action.payload.error,\r\n        },\r\n      }\r\n    case FirebaseDataSubscription.REQUEST:\r\n      return {\r\n        ...state,\r\n        [action.payload.path]: {\r\n          ...(state[action.payload.path] || {}),\r\n          isFetching: true,\r\n        },\r\n      }\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport const pmtFirebaseReducer = combineReducers({\r\n  auth: firebaseAuthReducer,\r\n  subscriptions: firebaseDataReducer,\r\n})\r\n","import React, { useState, useEffect } from 'react'\r\nimport { ConsentChoice, getConsent, setConsent } from '../index'\r\nimport { Box, Button, Slide, Typography } from '@material-ui/core'\r\nimport { ButtonLink } from 'app/components/Button'\r\nimport { indicateConsentForGA, initializeAnalytics } from '../../analytics'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { tr } from '../../i18n'\r\nimport { FormControlLabel } from 'pmt-ui/Form'\r\nimport Switch from 'pmt-ui/Switch'\r\nimport CloseIcon from '@material-ui/icons/Close'\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport { getAuth, signInAnonymously } from 'firebase/auth'\r\nimport { getDatabase, ref, push, serverTimestamp } from 'firebase/database'\r\nimport { getFirebaseApp } from 'pmt-modules/firebase'\r\nimport { getFrontSessionId } from '../../frontSession'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  stickyBanner: {\r\n    position: 'fixed',\r\n    bottom: 0,\r\n    left: 0,\r\n    width: '100%',\r\n    background: 'white',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'space-between',\r\n    zIndex: theme.zIndex.stickyButton + 1, // above most content, including stickyButtons (\"Continue\" in mobile). We expect the user to validate the banner in order to be able to see the sticky button\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px ${theme.spacing(1)}px ${theme.spacing(\r\n      2\r\n    )}px`,\r\n    flexDirection: 'row',\r\n    [theme.breakpoints.down('sm')]: {\r\n      flexDirection: 'column',\r\n      alignItems: 'flex-start',\r\n    },\r\n  },\r\n  currentState: {\r\n    fontSize: '0.7em',\r\n  },\r\n  cookiePolicyLink: {\r\n    verticalAlign: 'baseline',\r\n    fontSize: '0.9em',\r\n  },\r\n  closeBtn: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    right: 0,\r\n  },\r\n}))\r\n\r\nconst pushConsentToFirebase = (value, uid, plugin) => {\r\n  if (!uid) return\r\n\r\n  const dayDate = new Date()\r\n\r\n  // UTC format yyyy-MM-dd\r\n  const utcDateFormatted = dayDate.toISOString().slice(0, 10)\r\n\r\n  const dbPath = `cookie-consents/${utcDateFormatted}/${plugin}/${uid}/history`\r\n\r\n  const db = getDatabase()\r\n  push(ref(db, dbPath), {\r\n    value: value ? value : 'unknown',\r\n    createdAt: serverTimestamp(),\r\n    frontSessionId: getFrontSessionId(),\r\n  })\r\n}\r\n\r\nconst CookieConsentBanner = ({ analyticsConfig, appConfig, setOpen, open, plugin }) => {\r\n  const [currentConsent, setCurrentConsent] = useState(getConsent())\r\n  const [uid, setUid] = useState(null)\r\n\r\n  // --- Firebase Anonymous Auth ---\r\n  useEffect(() => {\r\n    // if firebase is not available (eg. env LOCAL), we don't send consent to firebase\r\n    const firebaseApp = getFirebaseApp()\r\n    if (!firebaseApp) {\r\n      return\r\n    }\r\n\r\n    const auth = getAuth(firebaseApp)\r\n\r\n    if (!auth.currentUser) {\r\n      signInAnonymously(auth)\r\n        .then(userCredential => {\r\n          setUid(userCredential.user.uid)\r\n          pushConsentToFirebase(getConsent(), userCredential.user.uid, plugin)\r\n        })\r\n        .catch(error => {\r\n          console.error('firebase: anonymous sign in error', error)\r\n        })\r\n    } else {\r\n      setUid(auth.currentUser.uid)\r\n    }\r\n  }, [plugin])\r\n\r\n  const selectionIsNecessaryCookiesOnly = currentConsent !== ConsentChoice.ACCEPTED\r\n\r\n  const saveSelection = () => {\r\n    // the \"selection\" contains only on/off for \"Performance analysis cookies\"\r\n    if (currentConsent === ConsentChoice.ACCEPTED) {\r\n      handleAccept()\r\n    } else {\r\n      handleDeny()\r\n    }\r\n  }\r\n\r\n  const handleAccept = () => {\r\n    setCurrentConsent(ConsentChoice.ACCEPTED) // needed in case the user clicked the buttons directly\r\n    setConsent(ConsentChoice.ACCEPTED)\r\n    pushConsentToFirebase(ConsentChoice.ACCEPTED, uid, plugin)\r\n    indicateConsentForGA(ConsentChoice.ACCEPTED)\r\n    setOpen(false)\r\n    initializeAnalytics({ analytics: analyticsConfig }, appConfig)\r\n  }\r\n\r\n  const handleDeny = () => {\r\n    setCurrentConsent(ConsentChoice.DENIED) // needed in case the user clicked the buttons directly\r\n    setConsent(ConsentChoice.DENIED)\r\n    indicateConsentForGA(ConsentChoice.DENIED)\r\n    pushConsentToFirebase(ConsentChoice.DENIED, uid, plugin)\r\n    setOpen(false)\r\n  }\r\n\r\n  const close = () => {\r\n    // close = no (new) choice made = we keep the current value\r\n    // if no current value, then we should behave as if the user refused the optional cookies\r\n    // Note: the \"Cookies\" link allows the user to revisit their cookie settings later\r\n    if (!currentConsent) {\r\n      handleDeny()\r\n    } else {\r\n      setOpen(false)\r\n    }\r\n  }\r\n\r\n  const classes = useStyles()\r\n\r\n  return (\r\n    <Slide direction=\"up\" in={open} mountOnEnter unmountOnExit>\r\n      <Box\r\n        className={classes.stickyBanner}\r\n        role=\"region\"\r\n        aria-live=\"polite\"\r\n        aria-label={tr('global.cookie_consent_banner.aria_label')}\r\n      >\r\n        {/* Text & link */}\r\n        <Box>\r\n          <IconButton\r\n            className={classes.closeBtn}\r\n            onClick={close}\r\n            size=\"small\"\r\n            aria-label={tr('global.cookie_consent_banner.close_btn.aria_label')}\r\n          >\r\n            <CloseIcon fontSize=\"small\" />\r\n          </IconButton>\r\n\r\n          <Typography variant=\"body2\">{tr('global.cookie_consent_banner.text.line1')}</Typography>\r\n          <Typography variant=\"body2\">{tr('global.cookie_consent_banner.text.line2')}</Typography>\r\n\r\n          <ButtonLink\r\n            className={classes.cookiePolicyLink}\r\n            component=\"a\"\r\n            href=\"https://storage.googleapis.com/paymytable-eu-public/legal_documents/cookie%20policy.pdf\"\r\n            label={tr('global.cookie_consent_banner.cookie_policy')}\r\n            target={'_blank'}\r\n            rel=\"noopener noreferrer\"\r\n          />\r\n        </Box>\r\n\r\n        {/* Switches */}\r\n        <Box>\r\n          <FormControlLabel\r\n            control={<Switch color=\"primary\" checked={true} disabled />}\r\n            label={tr('global.cookie_consent_banner.necessary_cookies.toggle_label')}\r\n          />\r\n\r\n          <FormControlLabel\r\n            control={\r\n              <Switch\r\n                color=\"primary\"\r\n                checked={currentConsent === ConsentChoice.ACCEPTED}\r\n                onChange={evt => {\r\n                  const newValue = evt.target.checked\r\n                    ? ConsentChoice.ACCEPTED\r\n                    : ConsentChoice.DENIED\r\n                  setCurrentConsent(newValue)\r\n                }}\r\n              />\r\n            }\r\n            label={tr('global.cookie_consent_banner.analytics_cookies.toggle_label')}\r\n          />\r\n        </Box>\r\n\r\n        {/* Buttons */}\r\n        <Box>\r\n          <Button\r\n            onClick={handleAccept}\r\n            color=\"primary\"\r\n            variant=\"contained\"\r\n            aria-label={tr('global.cookie_consent_banner.accept_btn.aria_label')}\r\n          >\r\n            {tr('global.cookie_consent_banner.accept_btn')}\r\n          </Button>\r\n\r\n          {selectionIsNecessaryCookiesOnly ? (\r\n            <Button\r\n              onClick={handleDeny}\r\n              color=\"secondary\"\r\n              aria-label={tr('global.cookie_consent_banner.deny_btn.aria_label')}\r\n            >\r\n              {tr('global.cookie_consent_banner.deny_btn')}\r\n            </Button>\r\n          ) : (\r\n            <Button\r\n              onClick={saveSelection}\r\n              color=\"secondary\"\r\n              aria-label={tr('global.cookie_consent_banner.save_selection_btn.aria_label')}\r\n            >\r\n              {tr('global.cookie_consent_banner.save_selection_btn')}\r\n            </Button>\r\n          )}\r\n        </Box>\r\n      </Box>\r\n    </Slide>\r\n  )\r\n}\r\n\r\nexport default CookieConsentBanner\r\n","import React, { useState } from 'react'\r\n\r\nimport analytics from 'app/config/analytics'\r\nimport environment from 'app/config/environment'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport CookieConsentBanner from 'pmt-modules/cookieConsent/components/CookieConsentBanner'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { ButtonLink } from '../Button'\r\nimport { getConsent } from 'pmt-modules/cookieConsent'\r\n\r\nconst styles = theme => ({\r\n  poweredBy: {\r\n    width: '100%',\r\n    padding: theme.spacing(2),\r\n    textAlign: 'center',\r\n    fontStyle: 'italic',\r\n    color: theme.pmt.colors.grey500,\r\n    fontSize: 12,\r\n    [theme.breakpoints.down('sm')]: {\r\n      position: 'absolute',\r\n      bottom: 0,\r\n      zIndex: 0, // behind the sticky buttons\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      marginTop: theme.spacing(2),\r\n    },\r\n\r\n    '& a': {\r\n      // target <a> inside poweredBy\r\n      color: 'inherit',\r\n      fontStyle: 'inherit',\r\n      fontSize: 'inherit',\r\n      verticalAlign: 'baseline',\r\n      textDecoration: 'underline',\r\n    },\r\n  },\r\n})\r\n\r\nconst Footer = ({ classes, appConfig }) => {\r\n  const [open, setOpen] = useState(getConsent() === null)\r\n\r\n  return (\r\n    <>\r\n      <div className={classes.poweredBy}>\r\n        {tr('order.footer.powered', {\r\n          fr: 'Powered by PayMyTable',\r\n          context: '',\r\n          desc: 'Order plugin footer text',\r\n        })}\r\n        {' - '}\r\n        <ButtonLink\r\n          component=\"a\"\r\n          onClick={() => {\r\n            setOpen(true)\r\n          }}\r\n          label={tr('order.footer.cookie_banner_link')}\r\n        />\r\n      </div>\r\n\r\n      <CookieConsentBanner\r\n        analyticsConfig={analytics[environment.ENV]}\r\n        appConfig={appConfig}\r\n        open={open}\r\n        setOpen={setOpen}\r\n        plugin={'order-plugin'}\r\n      />\r\n    </>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(Footer)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet NavigationArrowBack = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19,11H7.83l4.88-4.88c0.39-0.39,0.39-1.03,0-1.42l0,0c-0.39-0.39-1.02-0.39-1.41,0l-6.59,6.59 c-0.39,0.39-0.39,1.02,0,1.41l6.59,6.59c0.39,0.39,1.02,0.39,1.41,0l0,0c0.39-0.39,0.39-1.02,0-1.41L7.83,13H19c0.55,0,1-0.45,1-1 v0C20,11.45,19.55,11,19,11z\" />\r\n  </SvgIcon>\r\n)\r\nNavigationArrowBack = pure(NavigationArrowBack)\r\nNavigationArrowBack.displayName = 'NavigationArrowBack'\r\nNavigationArrowBack.pmtName = 'SvgIcon'\r\n\r\nexport default NavigationArrowBack\r\n","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = true;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && has(exports, key)) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/get-prototype-of\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\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      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","module.exports = require('./_hide');\n","module.exports = {};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n","exports.f = require('./_wks');\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  $GOPS.f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return $GOPS.f(toObject(it));\n  }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = require(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n  }\n\n  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};","var WeakMap = require('./_WeakMap');\n\n/** Used to store function metadata. */\nvar metaMap = WeakMap && new WeakMap;\n\nmodule.exports = metaMap;\n","var identity = require('./identity'),\n    metaMap = require('./_metaMap');\n\n/**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\nvar baseSetData = !metaMap ? identity : function(func, data) {\n  metaMap.set(func, data);\n  return func;\n};\n\nmodule.exports = baseSetData;\n","var baseCreate = require('./_baseCreate'),\n    isObject = require('./isObject');\n\n/**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCtor(Ctor) {\n  return function() {\n    // Use a `switch` statement to work with class constructors. See\n    // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n    // for more details.\n    var args = arguments;\n    switch (args.length) {\n      case 0: return new Ctor;\n      case 1: return new Ctor(args[0]);\n      case 2: return new Ctor(args[0], args[1]);\n      case 3: return new Ctor(args[0], args[1], args[2]);\n      case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n      case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n      case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n      case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n    }\n    var thisBinding = baseCreate(Ctor.prototype),\n        result = Ctor.apply(thisBinding, args);\n\n    // Mimic the constructor's `return` behavior.\n    // See https://es5.github.io/#x13.2.2 for more details.\n    return isObject(result) ? result : thisBinding;\n  };\n}\n\nmodule.exports = createCtor;\n","var createCtor = require('./_createCtor'),\n    root = require('./_root');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1;\n\n/**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createBind(func, bitmask, thisArg) {\n  var isBind = bitmask & WRAP_BIND_FLAG,\n      Ctor = createCtor(func);\n\n  function wrapper() {\n    var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n    return fn.apply(isBind ? thisArg : this, arguments);\n  }\n  return wrapper;\n}\n\nmodule.exports = createBind;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgs(args, partials, holders, isCurried) {\n  var argsIndex = -1,\n      argsLength = args.length,\n      holdersLength = holders.length,\n      leftIndex = -1,\n      leftLength = partials.length,\n      rangeLength = nativeMax(argsLength - holdersLength, 0),\n      result = Array(leftLength + rangeLength),\n      isUncurried = !isCurried;\n\n  while (++leftIndex < leftLength) {\n    result[leftIndex] = partials[leftIndex];\n  }\n  while (++argsIndex < holdersLength) {\n    if (isUncurried || argsIndex < argsLength) {\n      result[holders[argsIndex]] = args[argsIndex];\n    }\n  }\n  while (rangeLength--) {\n    result[leftIndex++] = args[argsIndex++];\n  }\n  return result;\n}\n\nmodule.exports = composeArgs;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgsRight(args, partials, holders, isCurried) {\n  var argsIndex = -1,\n      argsLength = args.length,\n      holdersIndex = -1,\n      holdersLength = holders.length,\n      rightIndex = -1,\n      rightLength = partials.length,\n      rangeLength = nativeMax(argsLength - holdersLength, 0),\n      result = Array(rangeLength + rightLength),\n      isUncurried = !isCurried;\n\n  while (++argsIndex < rangeLength) {\n    result[argsIndex] = args[argsIndex];\n  }\n  var offset = argsIndex;\n  while (++rightIndex < rightLength) {\n    result[offset + rightIndex] = partials[rightIndex];\n  }\n  while (++holdersIndex < holdersLength) {\n    if (isUncurried || argsIndex < argsLength) {\n      result[offset + holders[holdersIndex]] = args[argsIndex++];\n    }\n  }\n  return result;\n}\n\nmodule.exports = composeArgsRight;\n","/**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\nfunction countHolders(array, placeholder) {\n  var length = array.length,\n      result = 0;\n\n  while (length--) {\n    if (array[length] === placeholder) {\n      ++result;\n    }\n  }\n  return result;\n}\n\nmodule.exports = countHolders;\n","/**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\nfunction baseLodash() {\n  // No operation performed.\n}\n\nmodule.exports = baseLodash;\n","var baseCreate = require('./_baseCreate'),\n    baseLodash = require('./_baseLodash');\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\nfunction LazyWrapper(value) {\n  this.__wrapped__ = value;\n  this.__actions__ = [];\n  this.__dir__ = 1;\n  this.__filtered__ = false;\n  this.__iteratees__ = [];\n  this.__takeCount__ = MAX_ARRAY_LENGTH;\n  this.__views__ = [];\n}\n\n// Ensure `LazyWrapper` is an instance of `baseLodash`.\nLazyWrapper.prototype = baseCreate(baseLodash.prototype);\nLazyWrapper.prototype.constructor = LazyWrapper;\n\nmodule.exports = LazyWrapper;\n","var metaMap = require('./_metaMap'),\n    noop = require('./noop');\n\n/**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\nvar getData = !metaMap ? noop : function(func) {\n  return metaMap.get(func);\n};\n\nmodule.exports = getData;\n","/** Used to lookup unminified function names. */\nvar realNames = {};\n\nmodule.exports = realNames;\n","var realNames = require('./_realNames');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\nfunction getFuncName(func) {\n  var result = (func.name + ''),\n      array = realNames[result],\n      length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n  while (length--) {\n    var data = array[length],\n        otherFunc = data.func;\n    if (otherFunc == null || otherFunc == func) {\n      return data.name;\n    }\n  }\n  return result;\n}\n\nmodule.exports = getFuncName;\n","var baseCreate = require('./_baseCreate'),\n    baseLodash = require('./_baseLodash');\n\n/**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\nfunction LodashWrapper(value, chainAll) {\n  this.__wrapped__ = value;\n  this.__actions__ = [];\n  this.__chain__ = !!chainAll;\n  this.__index__ = 0;\n  this.__values__ = undefined;\n}\n\nLodashWrapper.prototype = baseCreate(baseLodash.prototype);\nLodashWrapper.prototype.constructor = LodashWrapper;\n\nmodule.exports = LodashWrapper;\n","var LazyWrapper = require('./_LazyWrapper'),\n    LodashWrapper = require('./_LodashWrapper'),\n    copyArray = require('./_copyArray');\n\n/**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\nfunction wrapperClone(wrapper) {\n  if (wrapper instanceof LazyWrapper) {\n    return wrapper.clone();\n  }\n  var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n  result.__actions__ = copyArray(wrapper.__actions__);\n  result.__index__  = wrapper.__index__;\n  result.__values__ = wrapper.__values__;\n  return result;\n}\n\nmodule.exports = wrapperClone;\n","var LazyWrapper = require('./_LazyWrapper'),\n    LodashWrapper = require('./_LodashWrapper'),\n    baseLodash = require('./_baseLodash'),\n    isArray = require('./isArray'),\n    isObjectLike = require('./isObjectLike'),\n    wrapperClone = require('./_wrapperClone');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\nfunction lodash(value) {\n  if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n    if (value instanceof LodashWrapper) {\n      return value;\n    }\n    if (hasOwnProperty.call(value, '__wrapped__')) {\n      return wrapperClone(value);\n    }\n  }\n  return new LodashWrapper(value);\n}\n\n// Ensure wrappers are instances of `baseLodash`.\nlodash.prototype = baseLodash.prototype;\nlodash.prototype.constructor = lodash;\n\nmodule.exports = lodash;\n","var LazyWrapper = require('./_LazyWrapper'),\n    getData = require('./_getData'),\n    getFuncName = require('./_getFuncName'),\n    lodash = require('./wrapperLodash');\n\n/**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n *  else `false`.\n */\nfunction isLaziable(func) {\n  var funcName = getFuncName(func),\n      other = lodash[funcName];\n\n  if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n    return false;\n  }\n  if (func === other) {\n    return true;\n  }\n  var data = getData(other);\n  return !!data && func === data[0];\n}\n\nmodule.exports = isLaziable;\n","var baseSetData = require('./_baseSetData'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\nvar setData = shortOut(baseSetData);\n\nmodule.exports = setData;\n","/** Used to match wrap detail comments. */\nvar reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n    reSplitDetails = /,? & /;\n\n/**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\nfunction getWrapDetails(source) {\n  var match = source.match(reWrapDetails);\n  return match ? match[1].split(reSplitDetails) : [];\n}\n\nmodule.exports = getWrapDetails;\n","/** Used to match wrap detail comments. */\nvar reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/;\n\n/**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\nfunction insertWrapDetails(source, details) {\n  var length = details.length;\n  if (!length) {\n    return source;\n  }\n  var lastIndex = length - 1;\n  details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n  details = details.join(length > 2 ? ', ' : ' ');\n  return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n}\n\nmodule.exports = insertWrapDetails;\n","var arrayEach = require('./_arrayEach'),\n    arrayIncludes = require('./_arrayIncludes');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_CURRY_RIGHT_FLAG = 16,\n    WRAP_PARTIAL_FLAG = 32,\n    WRAP_PARTIAL_RIGHT_FLAG = 64,\n    WRAP_ARY_FLAG = 128,\n    WRAP_REARG_FLAG = 256,\n    WRAP_FLIP_FLAG = 512;\n\n/** Used to associate wrap methods with their bit flags. */\nvar wrapFlags = [\n  ['ary', WRAP_ARY_FLAG],\n  ['bind', WRAP_BIND_FLAG],\n  ['bindKey', WRAP_BIND_KEY_FLAG],\n  ['curry', WRAP_CURRY_FLAG],\n  ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n  ['flip', WRAP_FLIP_FLAG],\n  ['partial', WRAP_PARTIAL_FLAG],\n  ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n  ['rearg', WRAP_REARG_FLAG]\n];\n\n/**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\nfunction updateWrapDetails(details, bitmask) {\n  arrayEach(wrapFlags, function(pair) {\n    var value = '_.' + pair[0];\n    if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n      details.push(value);\n    }\n  });\n  return details.sort();\n}\n\nmodule.exports = updateWrapDetails;\n","var getWrapDetails = require('./_getWrapDetails'),\n    insertWrapDetails = require('./_insertWrapDetails'),\n    setToString = require('./_setToString'),\n    updateWrapDetails = require('./_updateWrapDetails');\n\n/**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\nfunction setWrapToString(wrapper, reference, bitmask) {\n  var source = (reference + '');\n  return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n}\n\nmodule.exports = setWrapToString;\n","var isLaziable = require('./_isLaziable'),\n    setData = require('./_setData'),\n    setWrapToString = require('./_setWrapToString');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_BOUND_FLAG = 4,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_PARTIAL_FLAG = 32,\n    WRAP_PARTIAL_RIGHT_FLAG = 64;\n\n/**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n *  the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n  var isCurry = bitmask & WRAP_CURRY_FLAG,\n      newHolders = isCurry ? holders : undefined,\n      newHoldersRight = isCurry ? undefined : holders,\n      newPartials = isCurry ? partials : undefined,\n      newPartialsRight = isCurry ? undefined : partials;\n\n  bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n  bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n  if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n    bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n  }\n  var newData = [\n    func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n    newHoldersRight, argPos, ary, arity\n  ];\n\n  var result = wrapFunc.apply(undefined, newData);\n  if (isLaziable(func)) {\n    setData(result, newData);\n  }\n  result.placeholder = placeholder;\n  return setWrapToString(result, func, bitmask);\n}\n\nmodule.exports = createRecurry;\n","/**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\nfunction getHolder(func) {\n  var object = func;\n  return object.placeholder;\n}\n\nmodule.exports = getHolder;\n","var copyArray = require('./_copyArray'),\n    isIndex = require('./_isIndex');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\nfunction reorder(array, indexes) {\n  var arrLength = array.length,\n      length = nativeMin(indexes.length, arrLength),\n      oldArray = copyArray(array);\n\n  while (length--) {\n    var index = indexes[length];\n    array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n  }\n  return array;\n}\n\nmodule.exports = reorder;\n","/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\nfunction replaceHolders(array, placeholder) {\n  var index = -1,\n      length = array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (value === placeholder || value === PLACEHOLDER) {\n      array[index] = PLACEHOLDER;\n      result[resIndex++] = index;\n    }\n  }\n  return result;\n}\n\nmodule.exports = replaceHolders;\n","var composeArgs = require('./_composeArgs'),\n    composeArgsRight = require('./_composeArgsRight'),\n    countHolders = require('./_countHolders'),\n    createCtor = require('./_createCtor'),\n    createRecurry = require('./_createRecurry'),\n    getHolder = require('./_getHolder'),\n    reorder = require('./_reorder'),\n    replaceHolders = require('./_replaceHolders'),\n    root = require('./_root');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_CURRY_RIGHT_FLAG = 16,\n    WRAP_ARY_FLAG = 128,\n    WRAP_FLIP_FLAG = 512;\n\n/**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n *  the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n *  to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n  var isAry = bitmask & WRAP_ARY_FLAG,\n      isBind = bitmask & WRAP_BIND_FLAG,\n      isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n      isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n      isFlip = bitmask & WRAP_FLIP_FLAG,\n      Ctor = isBindKey ? undefined : createCtor(func);\n\n  function wrapper() {\n    var length = arguments.length,\n        args = Array(length),\n        index = length;\n\n    while (index--) {\n      args[index] = arguments[index];\n    }\n    if (isCurried) {\n      var placeholder = getHolder(wrapper),\n          holdersCount = countHolders(args, placeholder);\n    }\n    if (partials) {\n      args = composeArgs(args, partials, holders, isCurried);\n    }\n    if (partialsRight) {\n      args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n    }\n    length -= holdersCount;\n    if (isCurried && length < arity) {\n      var newHolders = replaceHolders(args, placeholder);\n      return createRecurry(\n        func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n        args, newHolders, argPos, ary, arity - length\n      );\n    }\n    var thisBinding = isBind ? thisArg : this,\n        fn = isBindKey ? thisBinding[func] : func;\n\n    length = args.length;\n    if (argPos) {\n      args = reorder(args, argPos);\n    } else if (isFlip && length > 1) {\n      args.reverse();\n    }\n    if (isAry && ary < length) {\n      args.length = ary;\n    }\n    if (this && this !== root && this instanceof wrapper) {\n      fn = Ctor || createCtor(fn);\n    }\n    return fn.apply(thisBinding, args);\n  }\n  return wrapper;\n}\n\nmodule.exports = createHybrid;\n","var apply = require('./_apply'),\n    createCtor = require('./_createCtor'),\n    createHybrid = require('./_createHybrid'),\n    createRecurry = require('./_createRecurry'),\n    getHolder = require('./_getHolder'),\n    replaceHolders = require('./_replaceHolders'),\n    root = require('./_root');\n\n/**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCurry(func, bitmask, arity) {\n  var Ctor = createCtor(func);\n\n  function wrapper() {\n    var length = arguments.length,\n        args = Array(length),\n        index = length,\n        placeholder = getHolder(wrapper);\n\n    while (index--) {\n      args[index] = arguments[index];\n    }\n    var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n      ? []\n      : replaceHolders(args, placeholder);\n\n    length -= holders.length;\n    if (length < arity) {\n      return createRecurry(\n        func, bitmask, createHybrid, wrapper.placeholder, undefined,\n        args, holders, undefined, undefined, arity - length);\n    }\n    var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n    return apply(fn, this, args);\n  }\n  return wrapper;\n}\n\nmodule.exports = createCurry;\n","var apply = require('./_apply'),\n    createCtor = require('./_createCtor'),\n    root = require('./_root');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1;\n\n/**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n *  the new function.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createPartial(func, bitmask, thisArg, partials) {\n  var isBind = bitmask & WRAP_BIND_FLAG,\n      Ctor = createCtor(func);\n\n  function wrapper() {\n    var argsIndex = -1,\n        argsLength = arguments.length,\n        leftIndex = -1,\n        leftLength = partials.length,\n        args = Array(leftLength + argsLength),\n        fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n    while (++leftIndex < leftLength) {\n      args[leftIndex] = partials[leftIndex];\n    }\n    while (argsLength--) {\n      args[leftIndex++] = arguments[++argsIndex];\n    }\n    return apply(fn, isBind ? thisArg : this, args);\n  }\n  return wrapper;\n}\n\nmodule.exports = createPartial;\n","var composeArgs = require('./_composeArgs'),\n    composeArgsRight = require('./_composeArgsRight'),\n    replaceHolders = require('./_replaceHolders');\n\n/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_BOUND_FLAG = 4,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_ARY_FLAG = 128,\n    WRAP_REARG_FLAG = 256;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\nfunction mergeData(data, source) {\n  var bitmask = data[1],\n      srcBitmask = source[1],\n      newBitmask = bitmask | srcBitmask,\n      isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n  var isCombo =\n    ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n    ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n    ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n  // Exit early if metadata can't be merged.\n  if (!(isCommon || isCombo)) {\n    return data;\n  }\n  // Use source `thisArg` if available.\n  if (srcBitmask & WRAP_BIND_FLAG) {\n    data[2] = source[2];\n    // Set when currying a bound function.\n    newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n  }\n  // Compose partial arguments.\n  var value = source[3];\n  if (value) {\n    var partials = data[3];\n    data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n    data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n  }\n  // Compose partial right arguments.\n  value = source[5];\n  if (value) {\n    partials = data[5];\n    data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n    data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n  }\n  // Use source `argPos` if available.\n  value = source[7];\n  if (value) {\n    data[7] = value;\n  }\n  // Use source `ary` if it's smaller.\n  if (srcBitmask & WRAP_ARY_FLAG) {\n    data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n  }\n  // Use source `arity` if one is not provided.\n  if (data[9] == null) {\n    data[9] = source[9];\n  }\n  // Use source `func` and merge bitmasks.\n  data[0] = source[0];\n  data[1] = newBitmask;\n\n  return data;\n}\n\nmodule.exports = mergeData;\n","var baseSetData = require('./_baseSetData'),\n    createBind = require('./_createBind'),\n    createCurry = require('./_createCurry'),\n    createHybrid = require('./_createHybrid'),\n    createPartial = require('./_createPartial'),\n    getData = require('./_getData'),\n    mergeData = require('./_mergeData'),\n    setData = require('./_setData'),\n    setWrapToString = require('./_setWrapToString'),\n    toInteger = require('./toInteger');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_BIND_KEY_FLAG = 2,\n    WRAP_CURRY_FLAG = 8,\n    WRAP_CURRY_RIGHT_FLAG = 16,\n    WRAP_PARTIAL_FLAG = 32,\n    WRAP_PARTIAL_RIGHT_FLAG = 64;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n *    1 - `_.bind`\n *    2 - `_.bindKey`\n *    4 - `_.curry` or `_.curryRight` of a bound function\n *    8 - `_.curry`\n *   16 - `_.curryRight`\n *   32 - `_.partial`\n *   64 - `_.partialRight`\n *  128 - `_.rearg`\n *  256 - `_.ary`\n *  512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n  var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n  if (!isBindKey && typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var length = partials ? partials.length : 0;\n  if (!length) {\n    bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n    partials = holders = undefined;\n  }\n  ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n  arity = arity === undefined ? arity : toInteger(arity);\n  length -= holders ? holders.length : 0;\n\n  if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n    var partialsRight = partials,\n        holdersRight = holders;\n\n    partials = holders = undefined;\n  }\n  var data = isBindKey ? undefined : getData(func);\n\n  var newData = [\n    func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n    argPos, ary, arity\n  ];\n\n  if (data) {\n    mergeData(newData, data);\n  }\n  func = newData[0];\n  bitmask = newData[1];\n  thisArg = newData[2];\n  partials = newData[3];\n  holders = newData[4];\n  arity = newData[9] = newData[9] === undefined\n    ? (isBindKey ? 0 : func.length)\n    : nativeMax(newData[9] - length, 0);\n\n  if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n    bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n  }\n  if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n    var result = createBind(func, bitmask, thisArg);\n  } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n    result = createCurry(func, bitmask, arity);\n  } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n    result = createPartial(func, bitmask, thisArg, partials);\n  } else {\n    result = createHybrid.apply(undefined, newData);\n  }\n  var setter = data ? baseSetData : setData;\n  return setWrapToString(setter(result, newData), func, bitmask);\n}\n\nmodule.exports = createWrap;\n","var baseRest = require('./_baseRest'),\n    createWrap = require('./_createWrap'),\n    getHolder = require('./_getHolder'),\n    replaceHolders = require('./_replaceHolders');\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_BIND_FLAG = 1,\n    WRAP_PARTIAL_FLAG = 32;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n *   return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\nvar bind = baseRest(function(func, thisArg, partials) {\n  var bitmask = WRAP_BIND_FLAG;\n  if (partials.length) {\n    var holders = replaceHolders(partials, getHolder(bind));\n    bitmask |= WRAP_PARTIAL_FLAG;\n  }\n  return createWrap(func, bitmask, thisArg, partials, holders);\n});\n\n// Assign default placeholders.\nbind.placeholder = {};\n\nmodule.exports = bind;\n","var canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n\nmodule.exports = canUseDOM;","'use strict';\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    contextTypes: true,\n    defaultProps: true,\n    displayName: true,\n    getDefaultProps: true,\n    getDerivedStateFromProps: true,\n    mixins: true,\n    propTypes: true,\n    type: true\n};\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};\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n    if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n\n        if (objectPrototype) {\n            var inheritedComponent = getPrototypeOf(sourceComponent);\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        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n                var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n                try { // Avoid failures from read-only properties\n                    defineProperty(targetComponent, key, descriptor);\n                } catch (e) {}\n            }\n        }\n\n        return targetComponent;\n    }\n\n    return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar createChangeEmitter = exports.createChangeEmitter = function createChangeEmitter() {\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n\n  function listen(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error('Expected listener to be a function.');\n    }\n\n    var isSubscribed = true;\n\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n\n    return function () {\n      if (!isSubscribed) {\n        return;\n      }\n\n      isSubscribed = false;\n\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n    };\n  }\n\n  function emit() {\n    currentListeners = nextListeners;\n    var listeners = currentListeners;\n    for (var i = 0; i < listeners.length; i++) {\n      listeners[i].apply(listeners, arguments);\n    }\n  }\n\n  return {\n    listen: listen,\n    emit: emit\n  };\n};","import React, { Component, createElement, createFactory } from 'react';\nimport shallowEqual from 'fbjs/lib/shallowEqual';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { createChangeEmitter } from 'change-emitter';\nimport $$observable from 'symbol-observable';\n\nvar setStatic = function setStatic(key, value) {\n  return function (BaseComponent) {\n    /* eslint-disable no-param-reassign */\n    BaseComponent[key] = value;\n    /* eslint-enable no-param-reassign */\n    return BaseComponent;\n  };\n};\n\nvar setDisplayName = function setDisplayName(displayName) {\n  return setStatic('displayName', displayName);\n};\n\nvar getDisplayName = function getDisplayName(Component$$1) {\n  if (typeof Component$$1 === 'string') {\n    return Component$$1;\n  }\n\n  if (!Component$$1) {\n    return undefined;\n  }\n\n  return Component$$1.displayName || Component$$1.name || 'Component';\n};\n\nvar wrapDisplayName = function wrapDisplayName(BaseComponent, hocName) {\n  return hocName + '(' + getDisplayName(BaseComponent) + ')';\n};\n\nvar mapProps = function mapProps(propsMapper) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n    var MapProps = function MapProps(props) {\n      return factory(propsMapper(props));\n    };\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'mapProps'))(MapProps);\n    }\n    return MapProps;\n  };\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\n\n\n\n\n\n\n\n\nvar _extends = Object.assign || 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\n\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\nvar objectWithoutProperties = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar withProps = function withProps(input) {\n  var hoc = mapProps(function (props) {\n    return _extends({}, props, typeof input === 'function' ? input(props) : input);\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    return function (BaseComponent) {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'withProps'))(hoc(BaseComponent));\n    };\n  }\n  return hoc;\n};\n\nvar pick = function pick(obj, keys) {\n  var result = {};\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (obj.hasOwnProperty(key)) {\n      result[key] = obj[key];\n    }\n  }\n  return result;\n};\n\nvar withPropsOnChange = function withPropsOnChange(shouldMapOrKeys, propsMapper) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n    var shouldMap = typeof shouldMapOrKeys === 'function' ? shouldMapOrKeys : function (props, nextProps) {\n      return !shallowEqual(pick(props, shouldMapOrKeys), pick(nextProps, shouldMapOrKeys));\n    };\n\n    var WithPropsOnChange = function (_Component) {\n      inherits(WithPropsOnChange, _Component);\n\n      function WithPropsOnChange() {\n        var _temp, _this, _ret;\n\n        classCallCheck(this, WithPropsOnChange);\n\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.computedProps = propsMapper(_this.props), _temp), possibleConstructorReturn(_this, _ret);\n      }\n\n      WithPropsOnChange.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n        if (shouldMap(this.props, nextProps)) {\n          this.computedProps = propsMapper(nextProps);\n        }\n      };\n\n      WithPropsOnChange.prototype.render = function render() {\n        return factory(_extends({}, this.props, this.computedProps));\n      };\n\n      return WithPropsOnChange;\n    }(Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'withPropsOnChange'))(WithPropsOnChange);\n    }\n    return WithPropsOnChange;\n  };\n};\n\nvar mapValues = function mapValues(obj, func) {\n  var result = {};\n  /* eslint-disable no-restricted-syntax */\n  for (var key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      result[key] = func(obj[key], key);\n    }\n  }\n  /* eslint-enable no-restricted-syntax */\n  return result;\n};\n\n/* eslint-disable no-console */\nvar withHandlers = function withHandlers(handlers) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n\n    var WithHandlers = function (_Component) {\n      inherits(WithHandlers, _Component);\n\n      function WithHandlers() {\n        var _temp, _this, _ret;\n\n        classCallCheck(this, WithHandlers);\n\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _initialiseProps.call(_this), _temp), possibleConstructorReturn(_this, _ret);\n      }\n\n      WithHandlers.prototype.componentWillReceiveProps = function componentWillReceiveProps() {\n        this.cachedHandlers = {};\n      };\n\n      WithHandlers.prototype.render = function render() {\n        return factory(_extends({}, this.props, this.handlers));\n      };\n\n      return WithHandlers;\n    }(Component);\n\n    var _initialiseProps = function _initialiseProps() {\n      var _this2 = this;\n\n      this.cachedHandlers = {};\n      this.handlers = mapValues(typeof handlers === 'function' ? handlers(this.props) : handlers, function (createHandler, handlerName) {\n        return function () {\n          var cachedHandler = _this2.cachedHandlers[handlerName];\n          if (cachedHandler) {\n            return cachedHandler.apply(undefined, arguments);\n          }\n\n          var handler = createHandler(_this2.props);\n          _this2.cachedHandlers[handlerName] = handler;\n\n          if (process.env.NODE_ENV !== 'production' && typeof handler !== 'function') {\n            console.error(\n            // eslint-disable-line no-console\n            'withHandlers(): Expected a map of higher-order functions. ' + 'Refer to the docs for more info.');\n          }\n\n          return handler.apply(undefined, arguments);\n        };\n      });\n    };\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'withHandlers'))(WithHandlers);\n    }\n    return WithHandlers;\n  };\n};\n\nvar defaultProps = function defaultProps(props) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n    var DefaultProps = function DefaultProps(ownerProps) {\n      return factory(ownerProps);\n    };\n    DefaultProps.defaultProps = props;\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'defaultProps'))(DefaultProps);\n    }\n    return DefaultProps;\n  };\n};\n\nvar omit = function omit(obj, keys) {\n  var rest = objectWithoutProperties(obj, []);\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (rest.hasOwnProperty(key)) {\n      delete rest[key];\n    }\n  }\n  return rest;\n};\n\nvar renameProp = function renameProp(oldName, newName) {\n  var hoc = mapProps(function (props) {\n    var _babelHelpers$extends;\n\n    return _extends({}, omit(props, [oldName]), (_babelHelpers$extends = {}, _babelHelpers$extends[newName] = props[oldName], _babelHelpers$extends));\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    return function (BaseComponent) {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'renameProp'))(hoc(BaseComponent));\n    };\n  }\n  return hoc;\n};\n\nvar keys = Object.keys;\n\n\nvar mapKeys = function mapKeys(obj, func) {\n  return keys(obj).reduce(function (result, key) {\n    var val = obj[key];\n    /* eslint-disable no-param-reassign */\n    result[func(val, key)] = val;\n    /* eslint-enable no-param-reassign */\n    return result;\n  }, {});\n};\n\nvar renameProps = function renameProps(nameMap) {\n  var hoc = mapProps(function (props) {\n    return _extends({}, omit(props, keys(nameMap)), mapKeys(pick(props, keys(nameMap)), function (_, oldName) {\n      return nameMap[oldName];\n    }));\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    return function (BaseComponent) {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'renameProps'))(hoc(BaseComponent));\n    };\n  }\n  return hoc;\n};\n\nvar flattenProp = function flattenProp(propName) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n    var FlattenProp = function FlattenProp(props) {\n      return factory(_extends({}, props, props[propName]));\n    };\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'flattenProp'))(FlattenProp);\n    }\n    return FlattenProp;\n  };\n};\n\nvar withState = function withState(stateName, stateUpdaterName, initialState) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n\n    var WithState = function (_Component) {\n      inherits(WithState, _Component);\n\n      function WithState() {\n        var _temp, _this, _ret;\n\n        classCallCheck(this, WithState);\n\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.state = {\n          stateValue: typeof initialState === 'function' ? initialState(_this.props) : initialState\n        }, _this.updateStateValue = function (updateFn, callback) {\n          return _this.setState(function (_ref) {\n            var stateValue = _ref.stateValue;\n            return {\n              stateValue: typeof updateFn === 'function' ? updateFn(stateValue) : updateFn\n            };\n          }, callback);\n        }, _temp), possibleConstructorReturn(_this, _ret);\n      }\n\n      WithState.prototype.render = function render() {\n        var _babelHelpers$extends;\n\n        return factory(_extends({}, this.props, (_babelHelpers$extends = {}, _babelHelpers$extends[stateName] = this.state.stateValue, _babelHelpers$extends[stateUpdaterName] = this.updateStateValue, _babelHelpers$extends)));\n      };\n\n      return WithState;\n    }(Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'withState'))(WithState);\n    }\n    return WithState;\n  };\n};\n\nvar withStateHandlers = function withStateHandlers(initialState, stateUpdaters) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n\n    var WithStateHandlers = function (_Component) {\n      inherits(WithStateHandlers, _Component);\n\n      function WithStateHandlers() {\n        var _temp, _this, _ret;\n\n        classCallCheck(this, WithStateHandlers);\n\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _initialiseProps.call(_this), _temp), possibleConstructorReturn(_this, _ret);\n      }\n\n      WithStateHandlers.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n        var propsChanged = nextProps !== this.props;\n        // the idea is to skip render if stateUpdater handler return undefined\n        // this allows to create no state update handlers with access to state and props\n        var stateChanged = !shallowEqual(nextState, this.state);\n        return propsChanged || stateChanged;\n      };\n\n      WithStateHandlers.prototype.render = function render() {\n        return factory(_extends({}, this.props, this.state, this.stateUpdaters));\n      };\n\n      return WithStateHandlers;\n    }(Component);\n\n    var _initialiseProps = function _initialiseProps() {\n      var _this2 = this;\n\n      this.state = typeof initialState === 'function' ? initialState(this.props) : initialState;\n      this.stateUpdaters = mapValues(stateUpdaters, function (handler) {\n        return function (mayBeEvent) {\n          for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n            args[_key2 - 1] = arguments[_key2];\n          }\n\n          // Having that functional form of setState can be called async\n          // we need to persist SyntheticEvent\n          if (mayBeEvent && typeof mayBeEvent.persist === 'function') {\n            mayBeEvent.persist();\n          }\n\n          _this2.setState(function (state, props) {\n            return handler(state, props).apply(undefined, [mayBeEvent].concat(args));\n          });\n        };\n      });\n    };\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'withStateHandlers'))(WithStateHandlers);\n    }\n    return WithStateHandlers;\n  };\n};\n\nvar withReducer = function withReducer(stateName, dispatchName, reducer, initialState) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n\n    var WithReducer = function (_Component) {\n      inherits(WithReducer, _Component);\n\n      function WithReducer() {\n        var _temp, _this, _ret;\n\n        classCallCheck(this, WithReducer);\n\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.state = {\n          stateValue: _this.initializeStateValue()\n        }, _this.dispatch = function (action) {\n          return _this.setState(function (_ref) {\n            var stateValue = _ref.stateValue;\n            return {\n              stateValue: reducer(stateValue, action)\n            };\n          });\n        }, _temp), possibleConstructorReturn(_this, _ret);\n      }\n\n      WithReducer.prototype.initializeStateValue = function initializeStateValue() {\n        if (initialState !== undefined) {\n          return typeof initialState === 'function' ? initialState(this.props) : initialState;\n        }\n        return reducer(undefined, { type: '@@recompose/INIT' });\n      };\n\n      WithReducer.prototype.render = function render() {\n        var _babelHelpers$extends;\n\n        return factory(_extends({}, this.props, (_babelHelpers$extends = {}, _babelHelpers$extends[stateName] = this.state.stateValue, _babelHelpers$extends[dispatchName] = this.dispatch, _babelHelpers$extends)));\n      };\n\n      return WithReducer;\n    }(Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'withReducer'))(WithReducer);\n    }\n    return WithReducer;\n  };\n};\n\nvar identity = function identity(Component$$1) {\n  return Component$$1;\n};\n\nvar branch = function branch(test, left) {\n  var right = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : identity;\n  return function (BaseComponent) {\n    var leftFactory = void 0;\n    var rightFactory = void 0;\n    var Branch = function Branch(props) {\n      if (test(props)) {\n        leftFactory = leftFactory || createFactory(left(BaseComponent));\n        return leftFactory(props);\n      }\n      rightFactory = rightFactory || createFactory(right(BaseComponent));\n      return rightFactory(props);\n    };\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'branch'))(Branch);\n    }\n    return Branch;\n  };\n};\n\nvar renderComponent = function renderComponent(Component$$1) {\n  return function (_) {\n    var factory = createFactory(Component$$1);\n    var RenderComponent = function RenderComponent(props) {\n      return factory(props);\n    };\n    if (process.env.NODE_ENV !== 'production') {\n      RenderComponent.displayName = wrapDisplayName(Component$$1, 'renderComponent');\n    }\n    return RenderComponent;\n  };\n};\n\nvar Nothing = function (_Component) {\n  inherits(Nothing, _Component);\n\n  function Nothing() {\n    classCallCheck(this, Nothing);\n    return possibleConstructorReturn(this, _Component.apply(this, arguments));\n  }\n\n  Nothing.prototype.render = function render() {\n    return null;\n  };\n\n  return Nothing;\n}(Component);\n\nvar renderNothing = function renderNothing(_) {\n  return Nothing;\n};\n\nvar shouldUpdate = function shouldUpdate(test) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n\n    var ShouldUpdate = function (_Component) {\n      inherits(ShouldUpdate, _Component);\n\n      function ShouldUpdate() {\n        classCallCheck(this, ShouldUpdate);\n        return possibleConstructorReturn(this, _Component.apply(this, arguments));\n      }\n\n      ShouldUpdate.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n        return test(this.props, nextProps);\n      };\n\n      ShouldUpdate.prototype.render = function render() {\n        return factory(this.props);\n      };\n\n      return ShouldUpdate;\n    }(Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'shouldUpdate'))(ShouldUpdate);\n    }\n    return ShouldUpdate;\n  };\n};\n\nvar pure = function pure(BaseComponent) {\n  var hoc = shouldUpdate(function (props, nextProps) {\n    return !shallowEqual(props, nextProps);\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    return setDisplayName(wrapDisplayName(BaseComponent, 'pure'))(hoc(BaseComponent));\n  }\n\n  return hoc(BaseComponent);\n};\n\nvar onlyUpdateForKeys = function onlyUpdateForKeys(propKeys) {\n  var hoc = shouldUpdate(function (props, nextProps) {\n    return !shallowEqual(pick(nextProps, propKeys), pick(props, propKeys));\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    return function (BaseComponent) {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'onlyUpdateForKeys'))(hoc(BaseComponent));\n    };\n  }\n  return hoc;\n};\n\nvar onlyUpdateForPropTypes = function onlyUpdateForPropTypes(BaseComponent) {\n  var propTypes = BaseComponent.propTypes;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (!propTypes) {\n      /* eslint-disable */\n      console.error('A component without any `propTypes` was passed to ' + '`onlyUpdateForPropTypes()`. Check the implementation of the ' + ('component with display name \"' + getDisplayName(BaseComponent) + '\".'));\n      /* eslint-enable */\n    }\n  }\n\n  var propKeys = Object.keys(propTypes || {});\n  var OnlyUpdateForPropTypes = onlyUpdateForKeys(propKeys)(BaseComponent);\n\n  if (process.env.NODE_ENV !== 'production') {\n    return setDisplayName(wrapDisplayName(BaseComponent, 'onlyUpdateForPropTypes'))(OnlyUpdateForPropTypes);\n  }\n  return OnlyUpdateForPropTypes;\n};\n\nvar withContext = function withContext(childContextTypes, getChildContext) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n\n    var WithContext = function (_Component) {\n      inherits(WithContext, _Component);\n\n      function WithContext() {\n        var _temp, _this, _ret;\n\n        classCallCheck(this, WithContext);\n\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.getChildContext = function () {\n          return getChildContext(_this.props);\n        }, _temp), possibleConstructorReturn(_this, _ret);\n      }\n\n      WithContext.prototype.render = function render() {\n        return factory(this.props);\n      };\n\n      return WithContext;\n    }(Component);\n\n    WithContext.childContextTypes = childContextTypes;\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'withContext'))(WithContext);\n    }\n    return WithContext;\n  };\n};\n\nvar getContext = function getContext(contextTypes) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n    var GetContext = function GetContext(ownerProps, context) {\n      return factory(_extends({}, ownerProps, context));\n    };\n\n    GetContext.contextTypes = contextTypes;\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'getContext'))(GetContext);\n    }\n    return GetContext;\n  };\n};\n\n/* eslint-disable no-console */\nvar lifecycle = function lifecycle(spec) {\n  return function (BaseComponent) {\n    var factory = createFactory(BaseComponent);\n\n    if (process.env.NODE_ENV !== 'production' && spec.hasOwnProperty('render')) {\n      console.error('lifecycle() does not support the render method; its behavior is to ' + 'pass all props and state to the base component.');\n    }\n\n    var Lifecycle = function (_Component) {\n      inherits(Lifecycle, _Component);\n\n      function Lifecycle() {\n        classCallCheck(this, Lifecycle);\n        return possibleConstructorReturn(this, _Component.apply(this, arguments));\n      }\n\n      Lifecycle.prototype.render = function render() {\n        return factory(_extends({}, this.props, this.state));\n      };\n\n      return Lifecycle;\n    }(Component);\n\n    Object.keys(spec).forEach(function (hook) {\n      return Lifecycle.prototype[hook] = spec[hook];\n    });\n\n    if (process.env.NODE_ENV !== 'production') {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'lifecycle'))(Lifecycle);\n    }\n    return Lifecycle;\n  };\n};\n\nvar isClassComponent = function isClassComponent(Component$$1) {\n  return Boolean(Component$$1 && Component$$1.prototype && typeof Component$$1.prototype.render === 'function');\n};\n\nvar toClass = function toClass(baseComponent) {\n  if (isClassComponent(baseComponent)) {\n    return baseComponent;\n  }\n\n  var ToClass = function (_Component) {\n    inherits(ToClass, _Component);\n\n    function ToClass() {\n      classCallCheck(this, ToClass);\n      return possibleConstructorReturn(this, _Component.apply(this, arguments));\n    }\n\n    ToClass.prototype.render = function render() {\n      if (typeof baseComponent === 'string') {\n        return React.createElement(baseComponent, this.props);\n      }\n      return baseComponent(this.props, this.context);\n    };\n\n    return ToClass;\n  }(Component);\n\n  ToClass.displayName = getDisplayName(baseComponent);\n  ToClass.propTypes = baseComponent.propTypes;\n  ToClass.contextTypes = baseComponent.contextTypes;\n  ToClass.defaultProps = baseComponent.defaultProps;\n\n  return ToClass;\n};\n\nvar setPropTypes = function setPropTypes(propTypes) {\n  return setStatic('propTypes', propTypes);\n};\n\nfunction compose() {\n  for (var _len = arguments.length, funcs = 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(undefined, arguments));\n    };\n  });\n}\n\nvar createSink = function createSink(callback) {\n  return function (_Component) {\n    inherits(Sink, _Component);\n\n    function Sink() {\n      classCallCheck(this, Sink);\n      return possibleConstructorReturn(this, _Component.apply(this, arguments));\n    }\n\n    Sink.prototype.componentWillMount = function componentWillMount() {\n      callback(this.props);\n    };\n\n    Sink.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      callback(nextProps);\n    };\n\n    Sink.prototype.render = function render() {\n      return null;\n    };\n\n    return Sink;\n  }(Component);\n};\n\nvar componentFromProp = function componentFromProp(propName) {\n  var Component$$1 = function Component$$1(props) {\n    return createElement(props[propName], omit(props, [propName]));\n  };\n  Component$$1.displayName = 'componentFromProp(' + propName + ')';\n  return Component$$1;\n};\n\nvar nest = function nest() {\n  for (var _len = arguments.length, Components = Array(_len), _key = 0; _key < _len; _key++) {\n    Components[_key] = arguments[_key];\n  }\n\n  var factories = Components.map(createFactory);\n  var Nest = function Nest(_ref) {\n    var props = objectWithoutProperties(_ref, []),\n        children = _ref.children;\n    return factories.reduceRight(function (child, factory) {\n      return factory(props, child);\n    }, children);\n  };\n\n  if (process.env.NODE_ENV !== 'production') {\n    var displayNames = Components.map(getDisplayName);\n    Nest.displayName = 'nest(' + displayNames.join(', ') + ')';\n  }\n\n  return Nest;\n};\n\nvar hoistStatics = function hoistStatics(higherOrderComponent) {\n  return function (BaseComponent) {\n    var NewComponent = higherOrderComponent(BaseComponent);\n    hoistNonReactStatics(NewComponent, BaseComponent);\n    return NewComponent;\n  };\n};\n\nvar _config = {\n  fromESObservable: null,\n  toESObservable: null\n};\n\nvar configureObservable = function configureObservable(c) {\n  _config = c;\n};\n\nvar config = {\n  fromESObservable: function fromESObservable(observable) {\n    return typeof _config.fromESObservable === 'function' ? _config.fromESObservable(observable) : observable;\n  },\n  toESObservable: function toESObservable(stream) {\n    return typeof _config.toESObservable === 'function' ? _config.toESObservable(stream) : stream;\n  }\n};\n\nvar componentFromStreamWithConfig = function componentFromStreamWithConfig(config$$1) {\n  return function (propsToVdom) {\n    return function (_Component) {\n      inherits(ComponentFromStream, _Component);\n\n      function ComponentFromStream() {\n        var _config$fromESObserva;\n\n        var _temp, _this, _ret;\n\n        classCallCheck(this, ComponentFromStream);\n\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.state = { vdom: null }, _this.propsEmitter = createChangeEmitter(), _this.props$ = config$$1.fromESObservable((_config$fromESObserva = {\n          subscribe: function subscribe(observer) {\n            var unsubscribe = _this.propsEmitter.listen(function (props) {\n              if (props) {\n                observer.next(props);\n              } else {\n                observer.complete();\n              }\n            });\n            return { unsubscribe: unsubscribe };\n          }\n        }, _config$fromESObserva[$$observable] = function () {\n          return this;\n        }, _config$fromESObserva)), _this.vdom$ = config$$1.toESObservable(propsToVdom(_this.props$)), _temp), possibleConstructorReturn(_this, _ret);\n      }\n\n      // Stream of props\n\n\n      // Stream of vdom\n\n\n      ComponentFromStream.prototype.componentWillMount = function componentWillMount() {\n        var _this2 = this;\n\n        // Subscribe to child prop changes so we know when to re-render\n        this.subscription = this.vdom$.subscribe({\n          next: function next(vdom) {\n            _this2.setState({ vdom: vdom });\n          }\n        });\n        this.propsEmitter.emit(this.props);\n      };\n\n      ComponentFromStream.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n        // Receive new props from the owner\n        this.propsEmitter.emit(nextProps);\n      };\n\n      ComponentFromStream.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n        return nextState.vdom !== this.state.vdom;\n      };\n\n      ComponentFromStream.prototype.componentWillUnmount = function componentWillUnmount() {\n        // Call without arguments to complete stream\n        this.propsEmitter.emit();\n\n        // Clean-up subscription before un-mounting\n        this.subscription.unsubscribe();\n      };\n\n      ComponentFromStream.prototype.render = function render() {\n        return this.state.vdom;\n      };\n\n      return ComponentFromStream;\n    }(Component);\n  };\n};\n\nvar componentFromStream = function componentFromStream(propsToVdom) {\n  return componentFromStreamWithConfig(config)(propsToVdom);\n};\n\nvar identity$1 = function identity(t) {\n  return t;\n};\n\nvar mapPropsStreamWithConfig = function mapPropsStreamWithConfig(config$$1) {\n  var componentFromStream = componentFromStreamWithConfig({\n    fromESObservable: identity$1,\n    toESObservable: identity$1\n  });\n  return function (transform) {\n    return function (BaseComponent) {\n      var factory = createFactory(BaseComponent);\n      var fromESObservable = config$$1.fromESObservable,\n          toESObservable = config$$1.toESObservable;\n\n      return componentFromStream(function (props$) {\n        var _ref;\n\n        return _ref = {\n          subscribe: function subscribe(observer) {\n            var subscription = toESObservable(transform(fromESObservable(props$))).subscribe({\n              next: function next(childProps) {\n                return observer.next(factory(childProps));\n              }\n            });\n            return {\n              unsubscribe: function unsubscribe() {\n                return subscription.unsubscribe();\n              }\n            };\n          }\n        }, _ref[$$observable] = function () {\n          return this;\n        }, _ref;\n      });\n    };\n  };\n};\n\nvar mapPropsStream = function mapPropsStream(transform) {\n  var hoc = mapPropsStreamWithConfig(config)(transform);\n\n  if (process.env.NODE_ENV !== 'production') {\n    return function (BaseComponent) {\n      return setDisplayName(wrapDisplayName(BaseComponent, 'mapPropsStream'))(hoc(BaseComponent));\n    };\n  }\n  return hoc;\n};\n\nvar createEventHandlerWithConfig = function createEventHandlerWithConfig(config$$1) {\n  return function () {\n    var _config$fromESObserva;\n\n    var emitter = createChangeEmitter();\n    var stream = config$$1.fromESObservable((_config$fromESObserva = {\n      subscribe: function subscribe(observer) {\n        var unsubscribe = emitter.listen(function (value) {\n          return observer.next(value);\n        });\n        return { unsubscribe: unsubscribe };\n      }\n    }, _config$fromESObserva[$$observable] = function () {\n      return this;\n    }, _config$fromESObserva));\n    return {\n      handler: emitter.emit,\n      stream: stream\n    };\n  };\n};\n\nvar createEventHandler = createEventHandlerWithConfig(config);\n\n// Higher-order component helpers\n\nexport { mapProps, withProps, withPropsOnChange, withHandlers, defaultProps, renameProp, renameProps, flattenProp, withState, withStateHandlers, withReducer, branch, renderComponent, renderNothing, shouldUpdate, pure, onlyUpdateForKeys, onlyUpdateForPropTypes, withContext, getContext, lifecycle, toClass, setStatic, setPropTypes, setDisplayName, compose, getDisplayName, wrapDisplayName, shallowEqual, isClassComponent, createSink, componentFromProp, nest, hoistStatics, componentFromStream, componentFromStreamWithConfig, mapPropsStream, mapPropsStreamWithConfig, createEventHandler, createEventHandlerWithConfig, configureObservable as setObservableConfig };\n","/*!\n  * $script.js JS loader & dependency manager\n  * https://github.com/ded/script.js\n  * (c) Dustin Diaz 2014 | License MIT\n  */\n\n(function (name, definition) {\n  if (typeof module != 'undefined' && module.exports) module.exports = definition()\n  else if (typeof define == 'function' && define.amd) define(definition)\n  else this[name] = definition()\n})('$script', function () {\n  var doc = document\n    , head = doc.getElementsByTagName('head')[0]\n    , s = 'string'\n    , f = false\n    , push = 'push'\n    , readyState = 'readyState'\n    , onreadystatechange = 'onreadystatechange'\n    , list = {}\n    , ids = {}\n    , delay = {}\n    , scripts = {}\n    , scriptpath\n    , urlArgs\n\n  function every(ar, fn) {\n    for (var i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f\n    return 1\n  }\n  function each(ar, fn) {\n    every(ar, function (el) {\n      fn(el)\n      return 1\n    })\n  }\n\n  function $script(paths, idOrDone, optDone) {\n    paths = paths[push] ? paths : [paths]\n    var idOrDoneIsDone = idOrDone && idOrDone.call\n      , done = idOrDoneIsDone ? idOrDone : optDone\n      , id = idOrDoneIsDone ? paths.join('') : idOrDone\n      , queue = paths.length\n    function loopFn(item) {\n      return item.call ? item() : list[item]\n    }\n    function callback() {\n      if (!--queue) {\n        list[id] = 1\n        done && done()\n        for (var dset in delay) {\n          every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = [])\n        }\n      }\n    }\n    setTimeout(function () {\n      each(paths, function loading(path, force) {\n        if (path === null) return callback()\n        \n        if (!force && !/^https?:\\/\\//.test(path) && scriptpath) {\n          path = (path.indexOf('.js') === -1) ? scriptpath + path + '.js' : scriptpath + path;\n        }\n        \n        if (scripts[path]) {\n          if (id) ids[id] = 1\n          return (scripts[path] == 2) ? callback() : setTimeout(function () { loading(path, true) }, 0)\n        }\n\n        scripts[path] = 1\n        if (id) ids[id] = 1\n        create(path, callback)\n      })\n    }, 0)\n    return $script\n  }\n\n  function create(path, fn) {\n    var el = doc.createElement('script'), loaded\n    el.onload = el.onerror = el[onreadystatechange] = function () {\n      if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) return;\n      el.onload = el[onreadystatechange] = null\n      loaded = 1\n      scripts[path] = 2\n      fn()\n    }\n    el.async = 1\n    el.src = urlArgs ? path + (path.indexOf('?') === -1 ? '?' : '&') + urlArgs : path;\n    head.insertBefore(el, head.lastChild)\n  }\n\n  $script.get = create\n\n  $script.order = function (scripts, id, done) {\n    (function callback(s) {\n      s = scripts.shift()\n      !scripts.length ? $script(s, id, done) : $script(s, callback)\n    }())\n  }\n\n  $script.path = function (p) {\n    scriptpath = p\n  }\n  $script.urlArgs = function (str) {\n    urlArgs = str;\n  }\n  $script.ready = function (deps, ready, req) {\n    deps = deps[push] ? deps : [deps]\n    var missing = [];\n    !each(deps, function (dep) {\n      list[dep] || missing[push](dep);\n    }) && every(deps, function (dep) {return list[dep]}) ?\n      ready() : !function (key) {\n      delay[key] = delay[key] || []\n      delay[key][push](ready)\n      req && req(missing)\n    }(deps.join('|'))\n    return $script\n  }\n\n  $script.done = function (idOrDone) {\n    $script([null], idOrDone)\n  }\n\n  return $script\n});\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\n\nvar _objectWithoutProperties2 = require(\"babel-runtime/helpers/objectWithoutProperties\")\n\nvar _objectWithoutProperties3 = _interopRequireDefault(\n  _objectWithoutProperties2\n)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _bind2 = require(\"lodash/bind\")\n\nvar _bind3 = _interopRequireDefault(_bind2)\n\nexports.withScriptjs = withScriptjs\n\nvar _invariant = require(\"invariant\")\n\nvar _invariant2 = _interopRequireDefault(_invariant)\n\nvar _canUseDom = require(\"can-use-dom\")\n\nvar _canUseDom2 = _interopRequireDefault(_canUseDom)\n\nvar _recompose = require(\"recompose\")\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\nvar LOADING_STATE_NONE = \"NONE\"\nvar LOADING_STATE_BEGIN = \"BEGIN\"\nvar LOADING_STATE_LOADED = \"LOADED\"\n\nfunction withScriptjs(BaseComponent) {\n  var factory = _react2.default.createFactory(BaseComponent)\n\n  var Container = (function(_React$PureComponent) {\n    ;(0, _inherits3.default)(Container, _React$PureComponent)\n\n    function Container() {\n      var _ref\n\n      var _temp, _this, _ret\n\n      ;(0, _classCallCheck3.default)(this, Container)\n\n      for (\n        var _len = arguments.length, args = Array(_len), _key = 0;\n        _key < _len;\n        _key++\n      ) {\n        args[_key] = arguments[_key]\n      }\n\n      return (\n        (_ret = ((_temp = ((_this = (0, _possibleConstructorReturn3.default)(\n          this,\n          (_ref =\n            Container.__proto__ ||\n            (0, _getPrototypeOf2.default)(Container)).call.apply(\n            _ref,\n            [this].concat(args)\n          )\n        )),\n        _this)),\n        (_this.state = {\n          loadingState: LOADING_STATE_NONE,\n        }),\n        (_this.isUnmounted = false),\n        (_this.handleLoaded = (0, _bind3.default)(_this.handleLoaded, _this)),\n        _temp)),\n        (0, _possibleConstructorReturn3.default)(_this, _ret)\n      )\n    }\n\n    ;(0, _createClass3.default)(Container, [\n      {\n        key: \"handleLoaded\",\n        value: function handleLoaded() {\n          if (this.isUnmounted) {\n            return\n          }\n          this.setState({\n            loadingState: LOADING_STATE_LOADED,\n          })\n        },\n      },\n      {\n        key: \"componentWillMount\",\n        value: function componentWillMount() {\n          var _props = this.props,\n            loadingElement = _props.loadingElement,\n            googleMapURL = _props.googleMapURL\n\n          ;(0, _invariant2.default)(\n            !!loadingElement && !!googleMapURL,\n            \"Required props loadingElement or googleMapURL is missing. You need to provide both of them.\"\n          )\n        },\n      },\n      {\n        key: \"componentDidMount\",\n        value: function componentDidMount() {\n          var loadingState = this.state.loadingState\n\n          if (loadingState !== LOADING_STATE_NONE || !_canUseDom2.default) {\n            return\n          }\n          this.setState({\n            loadingState: LOADING_STATE_BEGIN,\n          })\n          // Don't load scriptjs as a dependency since we do not want this module be used on server side.\n          // eslint-disable-next-line global-require\n          var scriptjs = require(\"scriptjs\")\n          var googleMapURL = this.props.googleMapURL\n\n          scriptjs(googleMapURL, this.handleLoaded)\n        },\n      },\n      {\n        key: \"componentWillUnmount\",\n        value: function componentWillUnmount() {\n          this.isUnmounted = true\n        },\n      },\n      {\n        key: \"render\",\n        value: function render() {\n          var _props2 = this.props,\n            loadingElement = _props2.loadingElement,\n            googleMapURL = _props2.googleMapURL,\n            restProps = (0, _objectWithoutProperties3.default)(_props2, [\n              \"loadingElement\",\n              \"googleMapURL\",\n            ])\n          var loadingState = this.state.loadingState\n\n          if (loadingState === LOADING_STATE_LOADED) {\n            return factory(restProps)\n          } else {\n            return loadingElement\n          }\n        },\n      },\n    ])\n    return Container\n  })(_react2.default.PureComponent)\n\n  Container.displayName =\n    \"withScriptjs(\" + (0, _recompose.getDisplayName)(BaseComponent) + \")\"\n  Container.propTypes = {\n    loadingElement: _propTypes2.default.node.isRequired,\n    googleMapURL: _propTypes2.default.string.isRequired,\n  }\n\n  return Container\n}\n\nexports.default = withScriptjs\n","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (obj, key, value) {\n  if (key in obj) {\n    (0, _defineProperty2.default)(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 * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nvar MAP = (exports.MAP = \"__SECRET_MAP_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\n// export const SKELETON = `__SECRET_SKELETON_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`;\n\nvar MARKER = (exports.MARKER =\n  \"__SECRET_MARKER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar MARKER_WITH_LABEL = (exports.MARKER_WITH_LABEL =\n  \"__SECRET_MARKER_WITH_LABEL_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar RECTANGLE = (exports.RECTANGLE =\n  \"__SECRET_RECTANGLE_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar POLYLINE = (exports.POLYLINE =\n  \"__SECRET_POLYLINE_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar POLYGON = (exports.POLYGON =\n  \"__SECRET_POLYGON_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar CIRCLE = (exports.CIRCLE =\n  \"__SECRET_CIRCLE_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar KML_LAYER = (exports.KML_LAYER =\n  \"__SECRET_KML_LAYER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar DIRECTIONS_RENDERER = (exports.DIRECTIONS_RENDERER =\n  \"__SECRET_DIRECTIONS_RENDERER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar HEATMAP_LAYER = (exports.HEATMAP_LAYER =\n  \"__SECRET_HEATMAP_LAYER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar FUSION_TABLES_LAYER = (exports.FUSION_TABLES_LAYER =\n  \"__SECRET_FUSION_TABLES_LAYER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar ANCHOR = (exports.ANCHOR =\n  \"__SECRET_ANCHOR_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar INFO_WINDOW = (exports.INFO_WINDOW =\n  \"__SECRET_INFO_WINDOW_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar OVERLAY_VIEW = (exports.OVERLAY_VIEW =\n  \"__SECRET_OVERLAY_VIEW_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar GROUND_LAYER = (exports.GROUND_LAYER =\n  \"__SECRET_GROUND_LAYER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar DRAWING_MANAGER = (exports.DRAWING_MANAGER =\n  \"__SECRET_DRAWING_MANAGER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar SEARCH_BOX = (exports.SEARCH_BOX =\n  \"__SECRET_SEARCH_BOX_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar MARKER_CLUSTERER = (exports.MARKER_CLUSTERER =\n  \"__SECRET_MARKER_CLUSTERER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar INFO_BOX = (exports.INFO_BOX =\n  \"__SECRET_INFO_BOX_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar TRAFFIC_LAYER = (exports.TRAFFIC_LAYER =\n  \"__SECRET_TRAFFIC_LAYER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar STREET_VIEW_PANORAMA = (exports.STREET_VIEW_PANORAMA =\n  \"__SECRET_STREET_VIEW_PANORAMA_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n\nvar BICYCLING_LAYER = (exports.BICYCLING_LAYER =\n  \"__SECRET_BICYCLING_LAYER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\")\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\n\nvar _objectWithoutProperties2 = require(\"babel-runtime/helpers/objectWithoutProperties\")\n\nvar _objectWithoutProperties3 = _interopRequireDefault(\n  _objectWithoutProperties2\n)\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _bind2 = require(\"lodash/bind\")\n\nvar _bind3 = _interopRequireDefault(_bind2)\n\nexports.withGoogleMap = withGoogleMap\n\nvar _warning = require(\"warning\")\n\nvar _warning2 = _interopRequireDefault(_warning)\n\nvar _invariant = require(\"invariant\")\n\nvar _invariant2 = _interopRequireDefault(_invariant)\n\nvar _recompose = require(\"recompose\")\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _constants = require(\"./constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/* global google */\nfunction withGoogleMap(BaseComponent) {\n  var factory = _react2.default.createFactory(BaseComponent)\n\n  var Container = (function(_React$PureComponent) {\n    ;(0, _inherits3.default)(Container, _React$PureComponent)\n\n    function Container() {\n      var _ref\n\n      var _temp, _this, _ret\n\n      ;(0, _classCallCheck3.default)(this, Container)\n\n      for (\n        var _len = arguments.length, args = Array(_len), _key = 0;\n        _key < _len;\n        _key++\n      ) {\n        args[_key] = arguments[_key]\n      }\n\n      return (\n        (_ret = ((_temp = ((_this = (0, _possibleConstructorReturn3.default)(\n          this,\n          (_ref =\n            Container.__proto__ ||\n            (0, _getPrototypeOf2.default)(Container)).call.apply(\n            _ref,\n            [this].concat(args)\n          )\n        )),\n        _this)),\n        (_this.state = {\n          map: null,\n        }),\n        (_this.handleComponentMount = (0, _bind3.default)(\n          _this.handleComponentMount,\n          _this\n        )),\n        _temp)),\n        (0, _possibleConstructorReturn3.default)(_this, _ret)\n      )\n    }\n\n    ;(0, _createClass3.default)(Container, [\n      {\n        key: \"getChildContext\",\n        value: function getChildContext() {\n          return (0, _defineProperty3.default)(\n            {},\n            _constants.MAP,\n            this.state.map\n          )\n        },\n      },\n      {\n        key: \"componentWillMount\",\n        value: function componentWillMount() {\n          var _props = this.props,\n            containerElement = _props.containerElement,\n            mapElement = _props.mapElement\n\n          ;(0, _invariant2.default)(\n            !!containerElement && !!mapElement,\n            \"Required props containerElement or mapElement is missing. You need to provide both of them.\\n The `google.maps.Map` instance will be initialized on mapElement and it's wrapped by containerElement.\\nYou need to provide both of them since Google Map requires the DOM to have height when initialized.\"\n          )\n        },\n      },\n      {\n        key: \"handleComponentMount\",\n        value: function handleComponentMount(node) {\n          if (this.state.map || node === null) {\n            return\n          }\n          ;(0, _warning2.default)(\n            \"undefined\" !== typeof google,\n            \"Make sure you've put a <script> tag in your <head> element to load Google Maps JavaScript API v3.\\n If you're looking for built-in support to load it for you, use the \\\"async/ScriptjsLoader\\\" instead.\\n See https://github.com/tomchentw/react-google-maps/pull/168\"\n          )\n          // https://developers.google.com/maps/documentation/javascript/3.exp/reference#Map\n          var map = new google.maps.Map(node)\n          this.setState({ map: map })\n        },\n      },\n      {\n        key: \"render\",\n        value: function render() {\n          var _props2 = this.props,\n            containerElement = _props2.containerElement,\n            mapElement = _props2.mapElement,\n            restProps = (0, _objectWithoutProperties3.default)(_props2, [\n              \"containerElement\",\n              \"mapElement\",\n            ])\n          var map = this.state.map\n\n          if (map) {\n            return _react2.default.cloneElement(\n              containerElement,\n              {},\n              _react2.default.cloneElement(mapElement, {\n                ref: this.handleComponentMount,\n              }),\n              _react2.default.createElement(\"div\", null, factory(restProps))\n            )\n          } else {\n            return _react2.default.cloneElement(\n              containerElement,\n              {},\n              _react2.default.cloneElement(mapElement, {\n                ref: this.handleComponentMount,\n              }),\n              _react2.default.createElement(\"div\", null)\n            )\n          }\n        },\n      },\n    ])\n    return Container\n  })(_react2.default.PureComponent)\n\n  Container.displayName =\n    \"withGoogleMap(\" + (0, _recompose.getDisplayName)(BaseComponent) + \")\"\n  Container.propTypes = {\n    containerElement: _propTypes2.default.node.isRequired,\n    mapElement: _propTypes2.default.node.isRequired,\n  }\n  Container.childContextTypes = (0, _defineProperty3.default)(\n    {},\n    _constants.MAP,\n    _propTypes2.default.object\n  )\n\n  return Container\n}\n\nexports.default = withGoogleMap\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _from = require(\"../core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  } else {\n    return (0, _from2.default)(arr);\n  }\n};","/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n *  `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n  eachFunc(collection, function(value, index, collection) {\n    accumulator = initAccum\n      ? (initAccum = false, value)\n      : iteratee(accumulator, value, index, collection);\n  });\n  return accumulator;\n}\n\nmodule.exports = baseReduce;\n","var arrayReduce = require('./_arrayReduce'),\n    baseEach = require('./_baseEach'),\n    baseIteratee = require('./_baseIteratee'),\n    baseReduce = require('./_baseReduce'),\n    isArray = require('./isArray');\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n *   return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n *   (result[value] || (result[value] = [])).push(key);\n *   return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n  var func = isArray(collection) ? arrayReduce : baseReduce,\n      initAccum = arguments.length < 3;\n\n  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nmodule.exports = reduce;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\nvar lowerFirst = createCaseFirst('toLowerCase');\n\nmodule.exports = lowerFirst;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n  return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","var baseHas = require('./_baseHas'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n  return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\n\nvar _bind2 = require(\"lodash/bind\")\n\nvar _bind3 = _interopRequireDefault(_bind2)\n\nvar _isFunction2 = require(\"lodash/isFunction\")\n\nvar _isFunction3 = _interopRequireDefault(_isFunction2)\n\nvar _reduce3 = require(\"lodash/reduce\")\n\nvar _reduce4 = _interopRequireDefault(_reduce3)\n\nvar _forEach2 = require(\"lodash/forEach\")\n\nvar _forEach3 = _interopRequireDefault(_forEach2)\n\nvar _lowerFirst2 = require(\"lodash/lowerFirst\")\n\nvar _lowerFirst3 = _interopRequireDefault(_lowerFirst2)\n\nvar _has2 = require(\"lodash/has\")\n\nvar _has3 = _interopRequireDefault(_has2)\n\nexports.construct = construct\nexports.componentDidMount = componentDidMount\nexports.componentDidUpdate = componentDidUpdate\nexports.componentWillUnmount = componentWillUnmount\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/* global google */\n/* eslint-disable no-param-reassign */\nfunction rdcUncontrolledAndControlledProps(acc, value, key) {\n  if ((0, _has3.default)(acc.prevProps, key)) {\n    var match = key.match(/^default(\\S+)/)\n    if (match) {\n      var unprefixedKey = (0, _lowerFirst3.default)(match[1])\n      if (!(0, _has3.default)(acc.nextProps, unprefixedKey)) {\n        acc.nextProps[unprefixedKey] = acc.prevProps[key]\n      }\n    } else {\n      acc.nextProps[key] = acc.prevProps[key]\n    }\n  }\n  return acc\n}\n\nfunction applyUpdaterToNextProps(updaterMap, prevProps, nextProps, instance) {\n  ;(0, _forEach3.default)(updaterMap, function(fn, key) {\n    var nextValue = nextProps[key]\n    if (nextValue !== prevProps[key]) {\n      fn(instance, nextValue)\n    }\n  })\n}\n\nfunction construct(propTypes, updaterMap, prevProps, instance) {\n  var _reduce2 = (0, _reduce4.default)(\n      propTypes,\n      rdcUncontrolledAndControlledProps,\n      {\n        nextProps: {},\n        prevProps: prevProps,\n      }\n    ),\n    nextProps = _reduce2.nextProps\n\n  applyUpdaterToNextProps(\n    updaterMap,\n    {\n      /* empty prevProps for construct */\n    },\n    nextProps,\n    instance\n  )\n}\n\nfunction componentDidMount(component, instance, eventMap) {\n  registerEvents(component, instance, eventMap)\n}\n\nfunction componentDidUpdate(\n  component,\n  instance,\n  eventMap,\n  updaterMap,\n  prevProps\n) {\n  component.unregisterAllEvents()\n  applyUpdaterToNextProps(updaterMap, prevProps, component.props, instance)\n  registerEvents(component, instance, eventMap)\n}\n\nfunction componentWillUnmount(component) {\n  component.unregisterAllEvents()\n}\n\nfunction registerEvents(component, instance, eventMap) {\n  var registeredList = (0, _reduce4.default)(\n    eventMap,\n    function(acc, googleEventName, onEventName) {\n      if ((0, _isFunction3.default)(component.props[onEventName])) {\n        acc.push(\n          google.maps.event.addListener(\n            instance,\n            googleEventName,\n            component.props[onEventName]\n          )\n        )\n      }\n      return acc\n    },\n    []\n  )\n\n  component.unregisterAllEvents = (0, _bind3.default)(\n    _forEach3.default,\n    null,\n    registeredList,\n    unregisterEvent\n  )\n}\n\nfunction unregisterEvent(registered) {\n  google.maps.event.removeListener(registered)\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.GoogleMap = exports.Map = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _toConsumableArray2 = require(\"babel-runtime/helpers/toConsumableArray\")\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _invariant = require(\"invariant\")\n\nvar _invariant2 = _interopRequireDefault(_invariant)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.Map`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Map\n */\nvar Map = (exports.Map = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(Map, _React$PureComponent)\n  ;(0, _createClass3.default)(Map, [\n    {\n      key: \"fitBounds\",\n\n      /**\n       * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Map\n       * @public\n       */\n      value: function fitBounds() {\n        var _context$MAP\n\n        return (_context$MAP = this.context[_constants.MAP]).fitBounds.apply(\n          _context$MAP,\n          arguments\n        )\n      },\n\n      /**\n       * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Map\n       * @public\n       */\n    },\n    {\n      key: \"panBy\",\n      value: function panBy() {\n        var _context$MAP2\n\n        return (_context$MAP2 = this.context[_constants.MAP]).panBy.apply(\n          _context$MAP2,\n          arguments\n        )\n      },\n\n      /**\n       * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Map\n       * @public\n       */\n    },\n    {\n      key: \"panTo\",\n      value: function panTo() {\n        var _context$MAP3\n\n        return (_context$MAP3 = this.context[_constants.MAP]).panTo.apply(\n          _context$MAP3,\n          arguments\n        )\n      },\n\n      /**\n       * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Map\n       * @public\n       */\n    },\n    {\n      key: \"panToBounds\",\n      value: function panToBounds() {\n        var _context$MAP4\n\n        return (_context$MAP4 = this.context[_constants.MAP]).panToBounds.apply(\n          _context$MAP4,\n          arguments\n        )\n      },\n\n      /*\n     * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Map\n     */\n    },\n  ])\n\n  function Map(props, context) {\n    ;(0, _classCallCheck3.default)(this, Map)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (Map.__proto__ || (0, _getPrototypeOf2.default)(Map)).call(\n        this,\n        props,\n        context\n      )\n    )\n\n    ;(0, _invariant2.default)(\n      !!_this.context[_constants.MAP],\n      \"Did you wrap <GoogleMap> component with withGoogleMap() HOC?\"\n    )\n    ;(0, _MapChildHelper.construct)(\n      GoogleMap.propTypes,\n      updaterMap,\n      _this.props,\n      _this.context[_constants.MAP]\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(Map, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.context[_constants.MAP],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.context[_constants.MAP],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        var children = this.props.children\n\n        return _react2.default.createElement(\"div\", null, children)\n      },\n\n      /**\n       * Returns the lat/lng bounds of the current viewport. If more than one copy of the world is visible, the bounds range in longitude from -180 to 180 degrees inclusive. If the map is not yet initialized (i.e. the mapType is still null), or center and zoom have not been set then the result is `null` or `undefined`.\n       * @type LatLngBoundsnullundefined\n       * @public\n       */\n    },\n    {\n      key: \"getBounds\",\n      value: function getBounds() {\n        return this.context[_constants.MAP].getBounds()\n      },\n\n      /**\n       * Returns the position displayed at the center of the map. Note that this `LatLng` object is _not_ wrapped. See `[LatLng](#LatLng)` for more information.\n       * @type LatLngLatLngLatLng\n       * @public\n       */\n    },\n    {\n      key: \"getCenter\",\n      value: function getCenter() {\n        return this.context[_constants.MAP].getCenter()\n      },\n\n      /**\n       * Returns the clickability of the map icons. A map icon represents a point of interest, also known as a POI. If the returned value is true, then the icons are clickable on the map.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getClickableIcons\",\n      value: function getClickableIcons() {\n        return this.context[_constants.MAP].getClickableIcons()\n      },\n\n      /**\n       *\n       * @type Element\n       * @public\n       */\n    },\n    {\n      key: \"getDiv\",\n      value: function getDiv() {\n        return this.context[_constants.MAP].getDiv()\n      },\n\n      /**\n       * Returns the compass heading of aerial imagery. The heading value is measured in degrees (clockwise) from cardinal direction North.\n       * @type number\n       * @public\n       */\n    },\n    {\n      key: \"getHeading\",\n      value: function getHeading() {\n        return this.context[_constants.MAP].getHeading()\n      },\n\n      /**\n       *\n       * @type MapTypeId|string\n       * @public\n       */\n    },\n    {\n      key: \"getMapTypeId\",\n      value: function getMapTypeId() {\n        return this.context[_constants.MAP].getMapTypeId()\n      },\n\n      /**\n       * Returns the current `Projection`. If the map is not yet initialized (i.e. the mapType is still null) then the result is null. Listen to `projection_changed` and check its value to ensure it is not null.\n       * @type ProjectionProjectionprojection_changed\n       * @public\n       */\n    },\n    {\n      key: \"getProjection\",\n      value: function getProjection() {\n        return this.context[_constants.MAP].getProjection()\n      },\n\n      /**\n       * Returns the default `StreetViewPanorama` bound to the map, which may be a default panorama embedded within the map, or the panorama set using `setStreetView()`. Changes to the map's `streetViewControl` will be reflected in the display of such a bound panorama.\n       * @type StreetViewPanoramaStreetViewPanoramasetStreetView()streetViewControl\n       * @public\n       */\n    },\n    {\n      key: \"getStreetView\",\n      value: function getStreetView() {\n        return this.context[_constants.MAP].getStreetView()\n      },\n\n      /**\n       * Returns the current angle of incidence of the map, in degrees from the viewport plane to the map plane. The result will be `0` for imagery taken directly overhead or `45` for 45° imagery. 45° imagery is only available for `satellite` and `hybrid` map types, within some locations, and at some zoom levels. **Note:** This method does not return the value set by `setTilt`. See `setTilt` for details.\n       * @type number045satellitehybridsetTiltsetTilt\n       * @public\n       */\n    },\n    {\n      key: \"getTilt\",\n      value: function getTilt() {\n        return this.context[_constants.MAP].getTilt()\n      },\n\n      /**\n       *\n       * @type number\n       * @public\n       */\n    },\n    {\n      key: \"getZoom\",\n      value: function getZoom() {\n        return this.context[_constants.MAP].getZoom()\n      },\n    },\n  ])\n  return Map\n})(\n  _react2.default.PureComponent\n)) /*\n                                   * -----------------------------------------------------------------------------\n                                   * This file is auto-generated from the corresponding file at `src/macros/`.\n                                   * Please **DO NOT** edit this file directly when creating PRs.\n                                   * -----------------------------------------------------------------------------\n                                   */\n\nMap.displayName = \"GoogleMap\"\nMap.propTypes = {\n  /**\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapTypeRegistry\n   * @type Array<[id:string, mapType:MapType|*]>\n   */\n  defaultExtraMapTypes: _propTypes2.default.arrayOf(\n    _propTypes2.default.arrayOf(_propTypes2.default.any)\n  ),\n\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  defaultCenter: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  defaultClickableIcons: _propTypes2.default.bool,\n\n  /**\n   * @type number\n   */\n  defaultHeading: _propTypes2.default.number,\n\n  /**\n   * @type MapTypeId|string\n   */\n  defaultMapTypeId: _propTypes2.default.any,\n\n  /**\n   * @type MapOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type StreetViewPanorama\n   */\n  defaultStreetView: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  defaultTilt: _propTypes2.default.number,\n\n  /**\n   * @type number\n   */\n  defaultZoom: _propTypes2.default.number,\n\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  center: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  clickableIcons: _propTypes2.default.bool,\n\n  /**\n   * @type number\n   */\n  heading: _propTypes2.default.number,\n\n  /**\n   * @type MapTypeId|string\n   */\n  mapTypeId: _propTypes2.default.any,\n\n  /**\n   * @type MapOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type StreetViewPanorama\n   */\n  streetView: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  tilt: _propTypes2.default.number,\n\n  /**\n   * @type number\n   */\n  zoom: _propTypes2.default.number,\n\n  /**\n   * function\n   */\n  onDblClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragEnd: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragStart: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMapTypeIdChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseMove: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOut: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOver: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onRightClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onTilesLoaded: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onBoundsChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onCenterChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDrag: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onHeadingChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onIdle: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onProjectionChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onResize: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onTiltChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onZoomChanged: _propTypes2.default.func,\n}\nMap.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nvar GoogleMap = (exports.GoogleMap = Map)\n\nexports.default = Map\n\nvar eventMap = {\n  onDblClick: \"dblclick\",\n  onDragEnd: \"dragend\",\n  onDragStart: \"dragstart\",\n  onMapTypeIdChanged: \"maptypeid_changed\",\n  onMouseMove: \"mousemove\",\n  onMouseOut: \"mouseout\",\n  onMouseOver: \"mouseover\",\n  onRightClick: \"rightclick\",\n  onTilesLoaded: \"tilesloaded\",\n  onBoundsChanged: \"bounds_changed\",\n  onCenterChanged: \"center_changed\",\n  onClick: \"click\",\n  onDrag: \"drag\",\n  onHeadingChanged: \"heading_changed\",\n  onIdle: \"idle\",\n  onProjectionChanged: \"projection_changed\",\n  onResize: \"resize\",\n  onTiltChanged: \"tilt_changed\",\n  onZoomChanged: \"zoom_changed\",\n}\n\nvar updaterMap = {\n  extraMapTypes: function extraMapTypes(instance, extra) {\n    extra.forEach(function(it) {\n      var _instance$mapTypes\n\n      return (_instance$mapTypes = instance.mapTypes).set.apply(\n        _instance$mapTypes,\n        (0, _toConsumableArray3.default)(it)\n      )\n    })\n  },\n  center: function center(instance, _center) {\n    instance.setCenter(_center)\n  },\n  clickableIcons: function clickableIcons(instance, _clickableIcons) {\n    instance.setClickableIcons(_clickableIcons)\n  },\n  heading: function heading(instance, _heading) {\n    instance.setHeading(_heading)\n  },\n  mapTypeId: function mapTypeId(instance, _mapTypeId) {\n    instance.setMapTypeId(_mapTypeId)\n  },\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  streetView: function streetView(instance, _streetView) {\n    instance.setStreetView(_streetView)\n  },\n  tilt: function tilt(instance, _tilt) {\n    instance.setTilt(_tilt)\n  },\n  zoom: function zoom(instance, _zoom) {\n    instance.setZoom(_zoom)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.Circle = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.Circle`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Circle\n */\n/*\n * -----------------------------------------------------------------------------\n * This file is auto-generated from the corresponding file at `src/macros/`.\n * Please **DO NOT** edit this file directly when creating PRs.\n * -----------------------------------------------------------------------------\n */\n/* global google */\nvar Circle = (exports.Circle = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(Circle, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Circle\n   */\n  function Circle(props, context) {\n    ;(0, _classCallCheck3.default)(this, Circle)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (Circle.__proto__ || (0, _getPrototypeOf2.default)(Circle)).call(\n        this,\n        props,\n        context\n      )\n    )\n\n    var circle = new google.maps.Circle()\n    ;(0, _MapChildHelper.construct)(\n      Circle.propTypes,\n      updaterMap,\n      _this.props,\n      circle\n    )\n    circle.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)({}, _constants.CIRCLE, circle)\n    return _this\n  }\n\n  ;(0, _createClass3.default)(Circle, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.CIRCLE],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.CIRCLE],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var circle = this.state[_constants.CIRCLE]\n        if (circle) {\n          circle.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n\n      /**\n       * Gets the `LatLngBounds` of this Circle.\n       * @type LatLngBoundsLatLngBounds\n       * @public\n       */\n    },\n    {\n      key: \"getBounds\",\n      value: function getBounds() {\n        return this.state[_constants.CIRCLE].getBounds()\n      },\n\n      /**\n       * Returns the center of this circle.\n       * @type LatLng\n       * @public\n       */\n    },\n    {\n      key: \"getCenter\",\n      value: function getCenter() {\n        return this.state[_constants.CIRCLE].getCenter()\n      },\n\n      /**\n       * Returns whether this circle can be dragged by the user.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getDraggable\",\n      value: function getDraggable() {\n        return this.state[_constants.CIRCLE].getDraggable()\n      },\n\n      /**\n       * Returns whether this circle can be edited by the user.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getEditable\",\n      value: function getEditable() {\n        return this.state[_constants.CIRCLE].getEditable()\n      },\n\n      /**\n       * Returns the radius of this circle (in meters).\n       * @type number\n       * @public\n       */\n    },\n    {\n      key: \"getRadius\",\n      value: function getRadius() {\n        return this.state[_constants.CIRCLE].getRadius()\n      },\n\n      /**\n       * Returns whether this circle is visible on the map.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getVisible\",\n      value: function getVisible() {\n        return this.state[_constants.CIRCLE].getVisible()\n      },\n    },\n  ])\n  return Circle\n})(_react2.default.PureComponent))\n\nCircle.propTypes = {\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  defaultCenter: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  defaultDraggable: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  defaultEditable: _propTypes2.default.bool,\n\n  /**\n   * @type CircleOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  defaultRadius: _propTypes2.default.number,\n\n  /**\n   * @type boolean\n   */\n  defaultVisible: _propTypes2.default.bool,\n\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  center: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  draggable: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  editable: _propTypes2.default.bool,\n\n  /**\n   * @type CircleOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  radius: _propTypes2.default.number,\n\n  /**\n   * @type boolean\n   */\n  visible: _propTypes2.default.bool,\n\n  /**\n   * function\n   */\n  onDblClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragEnd: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragStart: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseDown: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseMove: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOut: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOver: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseUp: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onRightClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onCenterChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDrag: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onRadiusChanged: _propTypes2.default.func,\n}\nCircle.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = Circle\n\nvar eventMap = {\n  onDblClick: \"dblclick\",\n  onDragEnd: \"dragend\",\n  onDragStart: \"dragstart\",\n  onMouseDown: \"mousedown\",\n  onMouseMove: \"mousemove\",\n  onMouseOut: \"mouseout\",\n  onMouseOver: \"mouseover\",\n  onMouseUp: \"mouseup\",\n  onRightClick: \"rightclick\",\n  onCenterChanged: \"center_changed\",\n  onClick: \"click\",\n  onDrag: \"drag\",\n  onRadiusChanged: \"radius_changed\",\n}\n\nvar updaterMap = {\n  center: function center(instance, _center) {\n    instance.setCenter(_center)\n  },\n  draggable: function draggable(instance, _draggable) {\n    instance.setDraggable(_draggable)\n  },\n  editable: function editable(instance, _editable) {\n    instance.setEditable(_editable)\n  },\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  radius: function radius(instance, _radius) {\n    instance.setRadius(_radius)\n  },\n  visible: function visible(instance, _visible) {\n    instance.setVisible(_visible)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.Marker = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _Marker$contextTypes /*\n                           * -----------------------------------------------------------------------------\n                           * This file is auto-generated from the corresponding file at `src/macros/`.\n                           * Please **DO NOT** edit this file directly when creating PRs.\n                           * -----------------------------------------------------------------------------\n                           */\n/* global google */\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.Marker`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Marker\n */\nvar Marker = (exports.Marker = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(Marker, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Marker\n   */\n  function Marker(props, context) {\n    ;(0, _classCallCheck3.default)(this, Marker)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (Marker.__proto__ || (0, _getPrototypeOf2.default)(Marker)).call(\n        this,\n        props,\n        context\n      )\n    )\n\n    var marker = new google.maps.Marker()\n    ;(0, _MapChildHelper.construct)(\n      Marker.propTypes,\n      updaterMap,\n      _this.props,\n      marker\n    )\n    var markerClusterer = _this.context[_constants.MARKER_CLUSTERER]\n    if (markerClusterer) {\n      markerClusterer.addMarker(marker, !!_this.props.noRedraw)\n    } else {\n      marker.setMap(_this.context[_constants.MAP])\n    }\n    _this.state = (0, _defineProperty3.default)({}, _constants.MARKER, marker)\n    return _this\n  }\n\n  ;(0, _createClass3.default)(Marker, [\n    {\n      key: \"getChildContext\",\n      value: function getChildContext() {\n        return (0, _defineProperty3.default)(\n          {},\n          _constants.ANCHOR,\n          this.context[_constants.ANCHOR] || this.state[_constants.MARKER]\n        )\n      },\n    },\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.MARKER],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.MARKER],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var marker = this.state[_constants.MARKER]\n        if (marker) {\n          var markerClusterer = this.context[_constants.MARKER_CLUSTERER]\n          if (markerClusterer) {\n            markerClusterer.removeMarker(marker, !!this.props.noRedraw)\n          }\n          marker.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        var children = this.props.children\n\n        return _react2.default.createElement(\"div\", null, children)\n      },\n\n      /**\n       *\n       * @type Animation\n       * @public\n       */\n    },\n    {\n      key: \"getAnimation\",\n      value: function getAnimation() {\n        return this.state[_constants.MARKER].getAnimation()\n      },\n\n      /**\n       *\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getClickable\",\n      value: function getClickable() {\n        return this.state[_constants.MARKER].getClickable()\n      },\n\n      /**\n       *\n       * @type string\n       * @public\n       */\n    },\n    {\n      key: \"getCursor\",\n      value: function getCursor() {\n        return this.state[_constants.MARKER].getCursor()\n      },\n\n      /**\n       *\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getDraggable\",\n      value: function getDraggable() {\n        return this.state[_constants.MARKER].getDraggable()\n      },\n\n      /**\n       *\n       * @type string|Icon|Symbol\n       * @public\n       */\n    },\n    {\n      key: \"getIcon\",\n      value: function getIcon() {\n        return this.state[_constants.MARKER].getIcon()\n      },\n\n      /**\n       *\n       * @type MarkerLabel\n       * @public\n       */\n    },\n    {\n      key: \"getLabel\",\n      value: function getLabel() {\n        return this.state[_constants.MARKER].getLabel()\n      },\n\n      /**\n       *\n       * @type number\n       * @public\n       */\n    },\n    {\n      key: \"getOpacity\",\n      value: function getOpacity() {\n        return this.state[_constants.MARKER].getOpacity()\n      },\n\n      /**\n       *\n       * @type MarkerPlace\n       * @public\n       */\n    },\n    {\n      key: \"getPlace\",\n      value: function getPlace() {\n        return this.state[_constants.MARKER].getPlace()\n      },\n\n      /**\n       *\n       * @type LatLng\n       * @public\n       */\n    },\n    {\n      key: \"getPosition\",\n      value: function getPosition() {\n        return this.state[_constants.MARKER].getPosition()\n      },\n\n      /**\n       *\n       * @type MarkerShape\n       * @public\n       */\n    },\n    {\n      key: \"getShape\",\n      value: function getShape() {\n        return this.state[_constants.MARKER].getShape()\n      },\n\n      /**\n       *\n       * @type string\n       * @public\n       */\n    },\n    {\n      key: \"getTitle\",\n      value: function getTitle() {\n        return this.state[_constants.MARKER].getTitle()\n      },\n\n      /**\n       *\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getVisible\",\n      value: function getVisible() {\n        return this.state[_constants.MARKER].getVisible()\n      },\n\n      /**\n       *\n       * @type number\n       * @public\n       */\n    },\n    {\n      key: \"getZIndex\",\n      value: function getZIndex() {\n        return this.state[_constants.MARKER].getZIndex()\n      },\n    },\n  ])\n  return Marker\n})(_react2.default.PureComponent))\n\nMarker.propTypes = {\n  /**\n   * For the 2nd argument of `MarkerCluster#addMarker`\n   * @see https://github.com/mikesaidani/marker-clusterer-plus\n   */\n  noRedraw: _propTypes2.default.bool,\n\n  /**\n   * @type Animation\n   */\n  defaultAnimation: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  defaultClickable: _propTypes2.default.bool,\n\n  /**\n   * @type string\n   */\n  defaultCursor: _propTypes2.default.string,\n\n  /**\n   * @type boolean\n   */\n  defaultDraggable: _propTypes2.default.bool,\n\n  /**\n   * @type string|Icon|Symbol\n   */\n  defaultIcon: _propTypes2.default.any,\n\n  /**\n   * @type string|MarkerLabel\n   */\n  defaultLabel: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  defaultOpacity: _propTypes2.default.number,\n\n  /**\n   * @type MarkerOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type MarkerPlace\n   */\n  defaultPlace: _propTypes2.default.any,\n\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  defaultPosition: _propTypes2.default.any,\n\n  /**\n   * @type MarkerShape\n   */\n  defaultShape: _propTypes2.default.any,\n\n  /**\n   * @type string\n   */\n  defaultTitle: _propTypes2.default.string,\n\n  /**\n   * @type boolean\n   */\n  defaultVisible: _propTypes2.default.bool,\n\n  /**\n   * @type number\n   */\n  defaultZIndex: _propTypes2.default.number,\n\n  /**\n   * @type Animation\n   */\n  animation: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  clickable: _propTypes2.default.bool,\n\n  /**\n   * @type string\n   */\n  cursor: _propTypes2.default.string,\n\n  /**\n   * @type boolean\n   */\n  draggable: _propTypes2.default.bool,\n\n  /**\n   * @type string|Icon|Symbol\n   */\n  icon: _propTypes2.default.any,\n\n  /**\n   * @type string|MarkerLabel\n   */\n  label: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  opacity: _propTypes2.default.number,\n\n  /**\n   * @type MarkerOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type MarkerPlace\n   */\n  place: _propTypes2.default.any,\n\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  position: _propTypes2.default.any,\n\n  /**\n   * @type MarkerShape\n   */\n  shape: _propTypes2.default.any,\n\n  /**\n   * @type string\n   */\n  title: _propTypes2.default.string,\n\n  /**\n   * @type boolean\n   */\n  visible: _propTypes2.default.bool,\n\n  /**\n   * @type number\n   */\n  zIndex: _propTypes2.default.number,\n\n  /**\n   * function\n   */\n  onDblClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragEnd: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragStart: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseDown: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOut: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOver: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseUp: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onRightClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onAnimationChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onClickableChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onCursorChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDrag: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDraggableChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onFlatChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onIconChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onPositionChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onShapeChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onTitleChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onVisibleChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onZindexChanged: _propTypes2.default.func,\n}\nMarker.contextTypes = ((_Marker$contextTypes = {}),\n(0, _defineProperty3.default)(\n  _Marker$contextTypes,\n  _constants.MAP,\n  _propTypes2.default.object\n),\n(0, _defineProperty3.default)(\n  _Marker$contextTypes,\n  _constants.MARKER_CLUSTERER,\n  _propTypes2.default.object\n),\n_Marker$contextTypes)\nMarker.childContextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.ANCHOR,\n  _propTypes2.default.object\n)\nexports.default = Marker\n\nvar eventMap = {\n  onDblClick: \"dblclick\",\n  onDragEnd: \"dragend\",\n  onDragStart: \"dragstart\",\n  onMouseDown: \"mousedown\",\n  onMouseOut: \"mouseout\",\n  onMouseOver: \"mouseover\",\n  onMouseUp: \"mouseup\",\n  onRightClick: \"rightclick\",\n  onAnimationChanged: \"animation_changed\",\n  onClick: \"click\",\n  onClickableChanged: \"clickable_changed\",\n  onCursorChanged: \"cursor_changed\",\n  onDrag: \"drag\",\n  onDraggableChanged: \"draggable_changed\",\n  onFlatChanged: \"flat_changed\",\n  onIconChanged: \"icon_changed\",\n  onPositionChanged: \"position_changed\",\n  onShapeChanged: \"shape_changed\",\n  onTitleChanged: \"title_changed\",\n  onVisibleChanged: \"visible_changed\",\n  onZindexChanged: \"zindex_changed\",\n}\n\nvar updaterMap = {\n  animation: function animation(instance, _animation) {\n    instance.setAnimation(_animation)\n  },\n  clickable: function clickable(instance, _clickable) {\n    instance.setClickable(_clickable)\n  },\n  cursor: function cursor(instance, _cursor) {\n    instance.setCursor(_cursor)\n  },\n  draggable: function draggable(instance, _draggable) {\n    instance.setDraggable(_draggable)\n  },\n  icon: function icon(instance, _icon) {\n    instance.setIcon(_icon)\n  },\n  label: function label(instance, _label) {\n    instance.setLabel(_label)\n  },\n  opacity: function opacity(instance, _opacity) {\n    instance.setOpacity(_opacity)\n  },\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  place: function place(instance, _place) {\n    instance.setPlace(_place)\n  },\n  position: function position(instance, _position) {\n    instance.setPosition(_position)\n  },\n  shape: function shape(instance, _shape) {\n    instance.setShape(_shape)\n  },\n  title: function title(instance, _title) {\n    instance.setTitle(_title)\n  },\n  visible: function visible(instance, _visible) {\n    instance.setVisible(_visible)\n  },\n  zIndex: function zIndex(instance, _zIndex) {\n    instance.setZIndex(_zIndex)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.Polyline = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.Polyline`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Polyline\n */\n/*\n * -----------------------------------------------------------------------------\n * This file is auto-generated from the corresponding file at `src/macros/`.\n * Please **DO NOT** edit this file directly when creating PRs.\n * -----------------------------------------------------------------------------\n */\n/* global google */\nvar Polyline = (exports.Polyline = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(Polyline, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Polyline\n   */\n  function Polyline(props, context) {\n    ;(0, _classCallCheck3.default)(this, Polyline)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (Polyline.__proto__ || (0, _getPrototypeOf2.default)(Polyline)).call(\n        this,\n        props,\n        context\n      )\n    )\n\n    var polyline = new google.maps.Polyline()\n    ;(0, _MapChildHelper.construct)(\n      Polyline.propTypes,\n      updaterMap,\n      _this.props,\n      polyline\n    )\n    polyline.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.POLYLINE,\n      polyline\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(Polyline, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.POLYLINE],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.POLYLINE],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var polyline = this.state[_constants.POLYLINE]\n        if (polyline) {\n          polyline.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n\n      /**\n       * Returns whether this shape can be dragged by the user.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getDraggable\",\n      value: function getDraggable() {\n        return this.state[_constants.POLYLINE].getDraggable()\n      },\n\n      /**\n       * Returns whether this shape can be edited by the user.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getEditable\",\n      value: function getEditable() {\n        return this.state[_constants.POLYLINE].getEditable()\n      },\n\n      /**\n       * Retrieves the path.\n       * @type MVCArray<LatLng>\n       * @public\n       */\n    },\n    {\n      key: \"getPath\",\n      value: function getPath() {\n        return this.state[_constants.POLYLINE].getPath()\n      },\n\n      /**\n       * Returns whether this poly is visible on the map.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getVisible\",\n      value: function getVisible() {\n        return this.state[_constants.POLYLINE].getVisible()\n      },\n    },\n  ])\n  return Polyline\n})(_react2.default.PureComponent))\n\nPolyline.propTypes = {\n  /**\n   * @type boolean\n   */\n  defaultDraggable: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  defaultEditable: _propTypes2.default.bool,\n\n  /**\n   * @type PolylineOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type MVCArray<LatLng>|Array<LatLng|LatLngLiteral>\n   */\n  defaultPath: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  defaultVisible: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  draggable: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  editable: _propTypes2.default.bool,\n\n  /**\n   * @type PolylineOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type MVCArray<LatLng>|Array<LatLng|LatLngLiteral>\n   */\n  path: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  visible: _propTypes2.default.bool,\n\n  /**\n   * function\n   */\n  onDblClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragEnd: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragStart: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseDown: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseMove: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOut: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOver: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseUp: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onRightClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDrag: _propTypes2.default.func,\n}\nPolyline.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = Polyline\n\nvar eventMap = {\n  onDblClick: \"dblclick\",\n  onDragEnd: \"dragend\",\n  onDragStart: \"dragstart\",\n  onMouseDown: \"mousedown\",\n  onMouseMove: \"mousemove\",\n  onMouseOut: \"mouseout\",\n  onMouseOver: \"mouseover\",\n  onMouseUp: \"mouseup\",\n  onRightClick: \"rightclick\",\n  onClick: \"click\",\n  onDrag: \"drag\",\n}\n\nvar updaterMap = {\n  draggable: function draggable(instance, _draggable) {\n    instance.setDraggable(_draggable)\n  },\n  editable: function editable(instance, _editable) {\n    instance.setEditable(_editable)\n  },\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  path: function path(instance, _path) {\n    instance.setPath(_path)\n  },\n  visible: function visible(instance, _visible) {\n    instance.setVisible(_visible)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.Polygon = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.Polygon`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Polygon\n */\n/*\n * -----------------------------------------------------------------------------\n * This file is auto-generated from the corresponding file at `src/macros/`.\n * Please **DO NOT** edit this file directly when creating PRs.\n * -----------------------------------------------------------------------------\n */\n/* global google */\nvar Polygon = (exports.Polygon = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(Polygon, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Polygon\n   */\n  function Polygon(props, context) {\n    ;(0, _classCallCheck3.default)(this, Polygon)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (Polygon.__proto__ || (0, _getPrototypeOf2.default)(Polygon)).call(\n        this,\n        props,\n        context\n      )\n    )\n\n    var polygon = new google.maps.Polygon()\n    ;(0, _MapChildHelper.construct)(\n      Polygon.propTypes,\n      updaterMap,\n      _this.props,\n      polygon\n    )\n    polygon.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)({}, _constants.POLYGON, polygon)\n    return _this\n  }\n\n  ;(0, _createClass3.default)(Polygon, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.POLYGON],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.POLYGON],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var polygon = this.state[_constants.POLYGON]\n        if (polygon) {\n          polygon.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n\n      /**\n       * Returns whether this shape can be dragged by the user.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getDraggable\",\n      value: function getDraggable() {\n        return this.state[_constants.POLYGON].getDraggable()\n      },\n\n      /**\n       * Returns whether this shape can be edited by the user.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getEditable\",\n      value: function getEditable() {\n        return this.state[_constants.POLYGON].getEditable()\n      },\n\n      /**\n       * Retrieves the first path.\n       * @type MVCArray<LatLng>\n       * @public\n       */\n    },\n    {\n      key: \"getPath\",\n      value: function getPath() {\n        return this.state[_constants.POLYGON].getPath()\n      },\n\n      /**\n       * Retrieves the paths for this polygon.\n       * @type MVCArray<MVCArray<LatLng>>\n       * @public\n       */\n    },\n    {\n      key: \"getPaths\",\n      value: function getPaths() {\n        return this.state[_constants.POLYGON].getPaths()\n      },\n\n      /**\n       * Returns whether this poly is visible on the map.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getVisible\",\n      value: function getVisible() {\n        return this.state[_constants.POLYGON].getVisible()\n      },\n    },\n  ])\n  return Polygon\n})(_react2.default.PureComponent))\n\nPolygon.propTypes = {\n  /**\n   * @type boolean\n   */\n  defaultDraggable: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  defaultEditable: _propTypes2.default.bool,\n\n  /**\n   * @type PolygonOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type MVCArray<LatLng>|Array<LatLng|LatLngLiteral>\n   */\n  defaultPath: _propTypes2.default.any,\n\n  /**\n   * @type MVCArray<MVCArray<LatLng>>|MVCArray<LatLng>|Array<Array<LatLng|LatLngLiteral>>|Array<LatLng|LatLngLiteral>\n   */\n  defaultPaths: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  defaultVisible: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  draggable: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  editable: _propTypes2.default.bool,\n\n  /**\n   * @type PolygonOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type MVCArray<LatLng>|Array<LatLng|LatLngLiteral>\n   */\n  path: _propTypes2.default.any,\n\n  /**\n   * @type MVCArray<MVCArray<LatLng>>|MVCArray<LatLng>|Array<Array<LatLng|LatLngLiteral>>|Array<LatLng|LatLngLiteral>\n   */\n  paths: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  visible: _propTypes2.default.bool,\n\n  /**\n   * function\n   */\n  onDblClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragEnd: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragStart: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseDown: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseMove: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOut: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOver: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseUp: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onRightClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDrag: _propTypes2.default.func,\n}\nPolygon.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = Polygon\n\nvar eventMap = {\n  onDblClick: \"dblclick\",\n  onDragEnd: \"dragend\",\n  onDragStart: \"dragstart\",\n  onMouseDown: \"mousedown\",\n  onMouseMove: \"mousemove\",\n  onMouseOut: \"mouseout\",\n  onMouseOver: \"mouseover\",\n  onMouseUp: \"mouseup\",\n  onRightClick: \"rightclick\",\n  onClick: \"click\",\n  onDrag: \"drag\",\n}\n\nvar updaterMap = {\n  draggable: function draggable(instance, _draggable) {\n    instance.setDraggable(_draggable)\n  },\n  editable: function editable(instance, _editable) {\n    instance.setEditable(_editable)\n  },\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  path: function path(instance, _path) {\n    instance.setPath(_path)\n  },\n  paths: function paths(instance, _paths) {\n    instance.setPaths(_paths)\n  },\n  visible: function visible(instance, _visible) {\n    instance.setVisible(_visible)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.Rectangle = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.Rectangle`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Rectangle\n */\n/*\n * -----------------------------------------------------------------------------\n * This file is auto-generated from the corresponding file at `src/macros/`.\n * Please **DO NOT** edit this file directly when creating PRs.\n * -----------------------------------------------------------------------------\n */\n/* global google */\nvar Rectangle = (exports.Rectangle = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(Rectangle, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#Rectangle\n   */\n  function Rectangle(props, context) {\n    ;(0, _classCallCheck3.default)(this, Rectangle)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (Rectangle.__proto__ || (0, _getPrototypeOf2.default)(Rectangle)).call(\n        this,\n        props,\n        context\n      )\n    )\n\n    var rectangle = new google.maps.Rectangle()\n    ;(0, _MapChildHelper.construct)(\n      Rectangle.propTypes,\n      updaterMap,\n      _this.props,\n      rectangle\n    )\n    rectangle.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.RECTANGLE,\n      rectangle\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(Rectangle, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.RECTANGLE],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.RECTANGLE],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var rectangle = this.state[_constants.RECTANGLE]\n        if (rectangle) {\n          rectangle.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n\n      /**\n       * Returns the bounds of this rectangle.\n       * @type LatLngBounds\n       * @public\n       */\n    },\n    {\n      key: \"getBounds\",\n      value: function getBounds() {\n        return this.state[_constants.RECTANGLE].getBounds()\n      },\n\n      /**\n       * Returns whether this rectangle can be dragged by the user.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getDraggable\",\n      value: function getDraggable() {\n        return this.state[_constants.RECTANGLE].getDraggable()\n      },\n\n      /**\n       * Returns whether this rectangle can be edited by the user.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getEditable\",\n      value: function getEditable() {\n        return this.state[_constants.RECTANGLE].getEditable()\n      },\n\n      /**\n       * Returns whether this rectangle is visible on the map.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getVisible\",\n      value: function getVisible() {\n        return this.state[_constants.RECTANGLE].getVisible()\n      },\n    },\n  ])\n  return Rectangle\n})(_react2.default.PureComponent))\n\nRectangle.propTypes = {\n  /**\n   * @type LatLngBounds|LatLngBoundsLiteral\n   */\n  defaultBounds: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  defaultDraggable: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  defaultEditable: _propTypes2.default.bool,\n\n  /**\n   * @type RectangleOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  defaultVisible: _propTypes2.default.bool,\n\n  /**\n   * @type LatLngBounds|LatLngBoundsLiteral\n   */\n  bounds: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  draggable: _propTypes2.default.bool,\n\n  /**\n   * @type boolean\n   */\n  editable: _propTypes2.default.bool,\n\n  /**\n   * @type RectangleOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  visible: _propTypes2.default.bool,\n\n  /**\n   * function\n   */\n  onDblClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragEnd: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDragStart: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseDown: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseMove: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOut: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseOver: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onMouseUp: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onRightClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onBoundsChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDrag: _propTypes2.default.func,\n}\nRectangle.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = Rectangle\n\nvar eventMap = {\n  onDblClick: \"dblclick\",\n  onDragEnd: \"dragend\",\n  onDragStart: \"dragstart\",\n  onMouseDown: \"mousedown\",\n  onMouseMove: \"mousemove\",\n  onMouseOut: \"mouseout\",\n  onMouseOver: \"mouseover\",\n  onMouseUp: \"mouseup\",\n  onRightClick: \"rightclick\",\n  onBoundsChanged: \"bounds_changed\",\n  onClick: \"click\",\n  onDrag: \"drag\",\n}\n\nvar updaterMap = {\n  bounds: function bounds(instance, _bounds) {\n    instance.setBounds(_bounds)\n  },\n  draggable: function draggable(instance, _draggable) {\n    instance.setDraggable(_draggable)\n  },\n  editable: function editable(instance, _editable) {\n    instance.setEditable(_editable)\n  },\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  visible: function visible(instance, _visible) {\n    instance.setVisible(_visible)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.InfoWindow = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _InfoWindow$contextTy /*\n                            * -----------------------------------------------------------------------------\n                            * This file is auto-generated from the corresponding file at `src/macros/`.\n                            * Please **DO NOT** edit this file directly when creating PRs.\n                            * -----------------------------------------------------------------------------\n                            */\n/* global google */\n\nvar _invariant = require(\"invariant\")\n\nvar _invariant2 = _interopRequireDefault(_invariant)\n\nvar _canUseDom = require(\"can-use-dom\")\n\nvar _canUseDom2 = _interopRequireDefault(_canUseDom)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _reactDom = require(\"react-dom\")\n\nvar _reactDom2 = _interopRequireDefault(_reactDom)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.InfoWindow`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#InfoWindow\n */\nvar InfoWindow = (exports.InfoWindow = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(InfoWindow, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#InfoWindow\n   */\n  function InfoWindow(props, context) {\n    ;(0, _classCallCheck3.default)(this, InfoWindow)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (InfoWindow.__proto__ || (0, _getPrototypeOf2.default)(InfoWindow)).call(\n        this,\n        props,\n        context\n      )\n    )\n\n    var infoWindow = new google.maps.InfoWindow()\n    ;(0, _MapChildHelper.construct)(\n      InfoWindow.propTypes,\n      updaterMap,\n      _this.props,\n      infoWindow\n    )\n    infoWindow.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.INFO_WINDOW,\n      infoWindow\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(InfoWindow, [\n    {\n      key: \"componentWillMount\",\n      value: function componentWillMount() {\n        if (!_canUseDom2.default || this.containerElement) {\n          return\n        }\n        if (_react2.default.version.match(/^16/)) {\n          this.containerElement = document.createElement(\"div\")\n        }\n      },\n    },\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.INFO_WINDOW],\n          eventMap\n        )\n        if (_react2.default.version.match(/^16/)) {\n          this.state[_constants.INFO_WINDOW].setContent(this.containerElement)\n          open(\n            this.state[_constants.INFO_WINDOW],\n            this.context[_constants.ANCHOR]\n          )\n          return\n        }\n        var content = document.createElement(\"div\")\n        _reactDom2.default.unstable_renderSubtreeIntoContainer(\n          this,\n          _react2.default.Children.only(this.props.children),\n          content\n        )\n        this.state[_constants.INFO_WINDOW].setContent(content)\n        open(\n          this.state[_constants.INFO_WINDOW],\n          this.context[_constants.ANCHOR]\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.INFO_WINDOW],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n        if (_react2.default.version.match(/^16/)) {\n          return\n        }\n        if (this.props.children !== prevProps.children) {\n          _reactDom2.default.unstable_renderSubtreeIntoContainer(\n            this,\n            _react2.default.Children.only(this.props.children),\n            this.state[_constants.INFO_WINDOW].getContent()\n          )\n        }\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var infoWindow = this.state[_constants.INFO_WINDOW]\n        if (infoWindow) {\n          if (\n            !_react2.default.version.match(/^16/) &&\n            infoWindow.getContent()\n          ) {\n            _reactDom2.default.unmountComponentAtNode(infoWindow.getContent())\n          }\n          infoWindow.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        if (_react2.default.version.match(/^16/)) {\n          return _reactDom2.default.createPortal(\n            _react2.default.Children.only(this.props.children),\n            this.containerElement\n          )\n        }\n        return false\n      },\n\n      /**\n       *\n       * @type LatLng\n       * @public\n       */\n    },\n    {\n      key: \"getPosition\",\n      value: function getPosition() {\n        return this.state[_constants.INFO_WINDOW].getPosition()\n      },\n\n      /**\n       *\n       * @type number\n       * @public\n       */\n    },\n    {\n      key: \"getZIndex\",\n      value: function getZIndex() {\n        return this.state[_constants.INFO_WINDOW].getZIndex()\n      },\n    },\n  ])\n  return InfoWindow\n})(_react2.default.PureComponent))\n\nInfoWindow.propTypes = {\n  /**\n   * @type InfoWindowOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  defaultPosition: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  defaultZIndex: _propTypes2.default.number,\n\n  /**\n   * @type InfoWindowOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  position: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  zIndex: _propTypes2.default.number,\n\n  /**\n   * function\n   */\n  onCloseClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onDomReady: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onContentChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onPositionChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onZindexChanged: _propTypes2.default.func,\n}\nInfoWindow.contextTypes = ((_InfoWindow$contextTy = {}),\n(0, _defineProperty3.default)(\n  _InfoWindow$contextTy,\n  _constants.MAP,\n  _propTypes2.default.object\n),\n(0, _defineProperty3.default)(\n  _InfoWindow$contextTy,\n  _constants.ANCHOR,\n  _propTypes2.default.object\n),\n_InfoWindow$contextTy)\nexports.default = InfoWindow\n\nvar open = function open(infoWindow, anchor) {\n  if (anchor) {\n    infoWindow.open(infoWindow.getMap(), anchor)\n  } else if (infoWindow.getPosition()) {\n    infoWindow.open(infoWindow.getMap())\n  } else {\n    ;(0, _invariant2.default)(\n      false,\n      \"You must provide either an anchor (typically render it inside a <Marker>) or a position props for <InfoWindow>.\"\n    )\n  }\n}\n\nvar eventMap = {\n  onCloseClick: \"closeclick\",\n  onDomReady: \"domready\",\n  onContentChanged: \"content_changed\",\n  onPositionChanged: \"position_changed\",\n  onZindexChanged: \"zindex_changed\",\n}\n\nvar updaterMap = {\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  position: function position(instance, _position) {\n    instance.setPosition(_position)\n  },\n  zIndex: function zIndex(instance, _zIndex) {\n    instance.setZIndex(_zIndex)\n  },\n}\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _assign = require(\"../core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || 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};","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\nfunction baseDelay(func, wait, args) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  return setTimeout(function() { func.apply(undefined, args); }, wait);\n}\n\nmodule.exports = baseDelay;\n","var baseDelay = require('./_baseDelay'),\n    baseRest = require('./_baseRest'),\n    toNumber = require('./toNumber');\n\n/**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n *   console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\nvar delay = baseRest(function(func, wait, args) {\n  return baseDelay(func, toNumber(wait) || 0, args);\n});\n\nmodule.exports = delay;\n","var assignValue = require('./_assignValue'),\n    copyObject = require('./_copyObject'),\n    createAssigner = require('./_createAssigner'),\n    isArrayLike = require('./isArrayLike'),\n    isPrototype = require('./_isPrototype'),\n    keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n  if (isPrototype(source) || isArrayLike(source)) {\n    copyObject(source, keys(source), object);\n    return;\n  }\n  for (var key in source) {\n    if (hasOwnProperty.call(source, key)) {\n      assignValue(object, key, source[key]);\n    }\n  }\n});\n\nmodule.exports = assign;\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\n\nvar _isFunction2 = require(\"lodash/isFunction\")\n\nvar _isFunction3 = _interopRequireDefault(_isFunction2)\n\nexports.getOffsetOverride = getOffsetOverride\nexports.getLayoutStyles = getLayoutStyles\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/* global google */\nfunction getOffsetOverride(containerElement, props) {\n  var getPixelPositionOffset = props.getPixelPositionOffset\n  //\n  // Allows the component to control the visual position of the OverlayView\n  // relative to the LatLng pixel position.\n  //\n\n  if ((0, _isFunction3.default)(getPixelPositionOffset)) {\n    return getPixelPositionOffset(\n      containerElement.offsetWidth,\n      containerElement.offsetHeight\n    )\n  } else {\n    return {}\n  }\n}\n\nfunction createLatLng(inst, Type) {\n  return new Type(inst.lat, inst.lng)\n}\n\nfunction createLatLngBounds(inst, Type) {\n  return new Type(\n    new google.maps.LatLng(inst.ne.lat, inst.ne.lng),\n    new google.maps.LatLng(inst.sw.lat, inst.sw.lng)\n  )\n}\n\nfunction ensureOfType(inst, type, factory) {\n  if (inst instanceof type) {\n    return inst\n  } else {\n    return factory(inst, type)\n  }\n}\n\nfunction getLayoutStylesByBounds(mapCanvasProjection, offset, bounds) {\n  var ne = mapCanvasProjection.fromLatLngToDivPixel(bounds.getNorthEast())\n  var sw = mapCanvasProjection.fromLatLngToDivPixel(bounds.getSouthWest())\n  if (ne && sw) {\n    return {\n      left: sw.x + offset.x + \"px\",\n      top: ne.y + offset.y + \"px\",\n      width: ne.x - sw.x - offset.x + \"px\",\n      height: sw.y - ne.y - offset.y + \"px\",\n    }\n  }\n  return {\n    left: \"-9999px\",\n    top: \"-9999px\",\n  }\n}\n\nfunction getLayoutStylesByPosition(mapCanvasProjection, offset, position) {\n  var point = mapCanvasProjection.fromLatLngToDivPixel(position)\n  if (point) {\n    var x = point.x,\n      y = point.y\n\n    return {\n      left: x + offset.x + \"px\",\n      top: y + offset.y + \"px\",\n    }\n  }\n  return {\n    left: \"-9999px\",\n    top: \"-9999px\",\n  }\n}\n\nfunction getLayoutStyles(mapCanvasProjection, offset, props) {\n  if (props.bounds) {\n    var bounds = ensureOfType(\n      props.bounds,\n      google.maps.LatLngBounds,\n      createLatLngBounds\n    )\n    return getLayoutStylesByBounds(mapCanvasProjection, offset, bounds)\n  } else {\n    var position = ensureOfType(\n      props.position,\n      google.maps.LatLng,\n      createLatLng\n    )\n    return getLayoutStylesByPosition(mapCanvasProjection, offset, position)\n  }\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.OverlayView = undefined\n\nvar _extends2 = require(\"babel-runtime/helpers/extends\")\n\nvar _extends3 = _interopRequireDefault(_extends2)\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _delay2 = require(\"lodash/delay\")\n\nvar _delay3 = _interopRequireDefault(_delay2)\n\nvar _assign2 = require(\"lodash/assign\")\n\nvar _assign3 = _interopRequireDefault(_assign2)\n\nvar _bind2 = require(\"lodash/bind\")\n\nvar _bind3 = _interopRequireDefault(_bind2)\n\nvar _OverlayView$contextT /*\n                            * -----------------------------------------------------------------------------\n                            * This file is auto-generated from the corresponding file at `src/macros/`.\n                            * Please **DO NOT** edit this file directly when creating PRs.\n                            * -----------------------------------------------------------------------------\n                            */\n/* global google */\n\nvar _invariant = require(\"invariant\")\n\nvar _invariant2 = _interopRequireDefault(_invariant)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _reactDom = require(\"react-dom\")\n\nvar _reactDom2 = _interopRequireDefault(_reactDom)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _OverlayViewHelper = require(\"../utils/OverlayViewHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.OverlayView`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#OverlayView\n */\nvar OverlayView = (exports.OverlayView = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(OverlayView, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#OverlayView\n   */\n  function OverlayView(props, context) {\n    ;(0, _classCallCheck3.default)(this, OverlayView)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (\n        OverlayView.__proto__ || (0, _getPrototypeOf2.default)(OverlayView)\n      ).call(this, props, context)\n    )\n\n    var overlayView = new google.maps.OverlayView()\n    // You must implement three methods: onAdd(), draw(), and onRemove().\n    overlayView.onAdd = (0, _bind3.default)(_this.onAdd, _this)\n    overlayView.draw = (0, _bind3.default)(_this.draw, _this)\n    overlayView.onRemove = (0, _bind3.default)(_this.onRemove, _this)\n    _this.onPositionElement = (0, _bind3.default)(\n      _this.onPositionElement,\n      _this\n    )\n    // You must call setMap() with a valid Map object to trigger the call to\n    // the onAdd() method and setMap(null) in order to trigger the onRemove() method.\n    overlayView.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.OVERLAY_VIEW,\n      overlayView\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(OverlayView, [\n    {\n      key: \"onAdd\",\n      value: function onAdd() {\n        this.containerElement = document.createElement(\"div\")\n        this.containerElement.style.position = \"absolute\"\n      },\n    },\n    {\n      key: \"draw\",\n      value: function draw() {\n        var mapPaneName = this.props.mapPaneName\n\n        ;(0, _invariant2.default)(\n          !!mapPaneName,\n          \"OverlayView requires either props.mapPaneName or props.defaultMapPaneName but got %s\",\n          mapPaneName\n        )\n        // https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapPanes\n        var mapPanes = this.state[_constants.OVERLAY_VIEW].getPanes()\n        mapPanes[mapPaneName].appendChild(this.containerElement)\n\n        _reactDom2.default.unstable_renderSubtreeIntoContainer(\n          this,\n          _react2.default.Children.only(this.props.children),\n          this.containerElement,\n          this.onPositionElement\n        )\n      },\n    },\n    {\n      key: \"onPositionElement\",\n      value: function onPositionElement() {\n        // https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapCanvasProjection\n        var mapCanvasProjection = this.state[\n          _constants.OVERLAY_VIEW\n        ].getProjection()\n\n        var offset = (0, _extends3.default)(\n          {\n            x: 0,\n            y: 0,\n          },\n          (0, _OverlayViewHelper.getOffsetOverride)(\n            this.containerElement,\n            this.props\n          )\n        )\n        var layoutStyles = (0, _OverlayViewHelper.getLayoutStyles)(\n          mapCanvasProjection,\n          offset,\n          this.props\n        )\n        ;(0, _assign3.default)(this.containerElement.style, layoutStyles)\n      },\n    },\n    {\n      key: \"onRemove\",\n      value: function onRemove() {\n        this.containerElement.parentNode.removeChild(this.containerElement)\n        _reactDom2.default.unmountComponentAtNode(this.containerElement)\n        this.containerElement = null\n      },\n    },\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.OVERLAY_VIEW],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.OVERLAY_VIEW],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n        ;(0, _delay3.default)(this.state[_constants.OVERLAY_VIEW].draw)\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var overlayView = this.state[_constants.OVERLAY_VIEW]\n        if (overlayView) {\n          overlayView.setMap(null)\n          // You must implement three methods: onAdd(), draw(), and onRemove().\n          overlayView.onAdd = null\n          overlayView.draw = null\n          overlayView.onRemove = null\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n\n      /**\n       * Returns the panes in which this OverlayView can be rendered. The panes are not initialized until `onAdd` is called by the API.\n       * @type MapPanesonAdd\n       * @public\n       */\n    },\n    {\n      key: \"getPanes\",\n      value: function getPanes() {\n        return this.state[_constants.OVERLAY_VIEW].getPanes()\n      },\n\n      /**\n       * Returns the `MapCanvasProjection` object associated with this `OverlayView`. The projection is not initialized until `onAdd` is called by the API.\n       * @type MapCanvasProjectionMapCanvasProjectionOverlayViewonAdd\n       * @public\n       */\n    },\n    {\n      key: \"getProjection\",\n      value: function getProjection() {\n        return this.state[_constants.OVERLAY_VIEW].getProjection()\n      },\n    },\n  ])\n  return OverlayView\n})(_react2.default.PureComponent))\n\nOverlayView.FLOAT_PANE = \"floatPane\"\nOverlayView.MAP_PANE = \"mapPane\"\nOverlayView.MARKER_LAYER = \"markerLayer\"\nOverlayView.OVERLAY_LAYER = \"overlayLayer\"\nOverlayView.OVERLAY_MOUSE_TARGET = \"overlayMouseTarget\"\nOverlayView.propTypes = {\n  /**\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#OverlayView\n   */\n  mapPaneName: _propTypes2.default.string,\n\n  /**\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#OverlayView\n   */\n  position: _propTypes2.default.object,\n\n  /**\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#OverlayView\n   */\n  bounds: _propTypes2.default.object,\n\n  /**\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#OverlayView\n   */\n  children: _propTypes2.default.node.isRequired,\n\n  /**\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#OverlayView\n   */\n  getPixelPositionOffset: _propTypes2.default.func,\n}\nOverlayView.contextTypes = ((_OverlayView$contextT = {}),\n(0, _defineProperty3.default)(\n  _OverlayView$contextT,\n  _constants.MAP,\n  _propTypes2.default.object\n),\n(0, _defineProperty3.default)(\n  _OverlayView$contextT,\n  _constants.ANCHOR,\n  _propTypes2.default.object\n),\n_OverlayView$contextT)\nexports.default = OverlayView\n\nvar eventMap = {}\n\nvar updaterMap = {}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.GroundOverlay = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _warning = require(\"warning\")\n\nvar _warning2 = _interopRequireDefault(_warning)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.GroundOverlay`\n *\n * @see https://developers.google.com/maps/documentation/javascript/reference#GroundOverlay\n */\nvar GroundOverlay = (exports.GroundOverlay = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(GroundOverlay, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#GroundOverlay\n   */\n  function GroundOverlay(props, context) {\n    ;(0, _classCallCheck3.default)(this, GroundOverlay)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (\n        GroundOverlay.__proto__ || (0, _getPrototypeOf2.default)(GroundOverlay)\n      ).call(this, props, context)\n    )\n\n    ;(0, _warning2.default)(\n      !props.url || !props.bounds,\n      \"\\nFor GroundOveray, url and bounds are passed in to constructor and are immutable\\n after iinstantiated. This is the behavior of Google Maps JavaScript API v3 (\\n See https://developers.google.com/maps/documentation/javascript/reference#GroundOverlay)\\n Hence, use the corresponding two props provided by `react-google-maps`.\\n They're prefixed with _default_ (defaultUrl, defaultBounds).\\n\\n In some cases, you'll need the GroundOverlay component to reflect the changes\\n of url and bounds. You can leverage the React's key property to remount the\\n component. Typically, just `key={url}` would serve your need.\\n See https://github.com/tomchentw/react-google-maps/issues/655\\n\"\n    )\n    var groundOverlay = new google.maps.GroundOverlay(\n      props.defaultUrl || props.url,\n      props.defaultBounds || props.bounds\n    )\n    ;(0, _MapChildHelper.construct)(\n      GroundOverlay.propTypes,\n      updaterMap,\n      _this.props,\n      groundOverlay\n    )\n    groundOverlay.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.GROUND_LAYER,\n      groundOverlay\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(GroundOverlay, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.GROUND_LAYER],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.GROUND_LAYER],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var GroundOverlay = this.state[_constants.GROUND_LAYER]\n        if (GroundOverlay) {\n          GroundOverlay.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n\n      /**\n       * Gets the `LatLngBounds` of this overlay.\n       * @type LatLngBoundsLatLngBounds\n       * @public\n       */\n    },\n    {\n      key: \"getBounds\",\n      value: function getBounds() {\n        return this.state[_constants.GROUND_LAYER].getBounds()\n      },\n\n      /**\n       * Returns the opacity of this ground overlay.\n       * @type number\n       * @public\n       */\n    },\n    {\n      key: \"getOpacity\",\n      value: function getOpacity() {\n        return this.state[_constants.GROUND_LAYER].getOpacity()\n      },\n\n      /**\n       * Gets the url of the projected image.\n       * @type string\n       * @public\n       */\n    },\n    {\n      key: \"getUrl\",\n      value: function getUrl() {\n        return this.state[_constants.GROUND_LAYER].getUrl()\n      },\n    },\n  ])\n  return GroundOverlay\n})(\n  _react2.default.PureComponent\n)) /*\n                                   * -----------------------------------------------------------------------------\n                                   * This file is auto-generated from the corresponding file at `src/macros/`.\n                                   * Please **DO NOT** edit this file directly when creating PRs.\n                                   * -----------------------------------------------------------------------------\n                                   */\n/* global google */\n\nGroundOverlay.propTypes = {\n  /**\n   * @type string\n   */\n  defaultUrl: _propTypes2.default.string /* v10.0.0 .isRequired */ /**\n   * @see https://developers.google.com/maps/documentation/javascript/reference#GroundOverlay\n   */,\n\n  defaultBounds: _propTypes2.default.object /* v10.0.0 .isRequired */ /**\n   * @type string\n   * @deprecated use `defaultUrl` instead. It will be removed in v10.0.0\n   */,\n\n  url: _propTypes2.default.string,\n\n  /**\n   * @see https://developers.google.com/maps/documentation/javascript/reference#GroundOverlay\n   * @deprecated use `defaultBounds` instead. It will be removed in v10.0.0\n   */\n  bounds: _propTypes2.default.object,\n\n  /**\n   * @type number\n   */\n  defaultOpacity: _propTypes2.default.number,\n\n  /**\n   * @type number\n   */\n  opacity: _propTypes2.default.number,\n\n  /**\n   * function\n   */\n  onDblClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onClick: _propTypes2.default.func,\n}\nGroundOverlay.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = GroundOverlay\n\nvar eventMap = {\n  onDblClick: \"dblclick\",\n  onClick: \"click\",\n}\n\nvar updaterMap = {\n  opacity: function opacity(instance, _opacity) {\n    instance.setOpacity(_opacity)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.DirectionsRenderer = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.DirectionsRenderer`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#DirectionsRenderer\n */\n/*\n * -----------------------------------------------------------------------------\n * This file is auto-generated from the corresponding file at `src/macros/`.\n * Please **DO NOT** edit this file directly when creating PRs.\n * -----------------------------------------------------------------------------\n */\n/* global google */\nvar DirectionsRenderer = (exports.DirectionsRenderer = (function(\n  _React$PureComponent\n) {\n  ;(0, _inherits3.default)(DirectionsRenderer, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#DirectionsRenderer\n   */\n  function DirectionsRenderer(props, context) {\n    ;(0, _classCallCheck3.default)(this, DirectionsRenderer)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (\n        DirectionsRenderer.__proto__ ||\n        (0, _getPrototypeOf2.default)(DirectionsRenderer)\n      ).call(this, props, context)\n    )\n\n    var directionsRenderer = new google.maps.DirectionsRenderer()\n    ;(0, _MapChildHelper.construct)(\n      DirectionsRenderer.propTypes,\n      updaterMap,\n      _this.props,\n      directionsRenderer\n    )\n    directionsRenderer.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.DIRECTIONS_RENDERER,\n      directionsRenderer\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(DirectionsRenderer, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.DIRECTIONS_RENDERER],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.DIRECTIONS_RENDERER],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var directionsRenderer = this.state[_constants.DIRECTIONS_RENDERER]\n        if (directionsRenderer) {\n          directionsRenderer.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n\n      /**\n       * Returns the renderer's current set of directions.\n       * @type DirectionsResult\n       * @public\n       */\n    },\n    {\n      key: \"getDirections\",\n      value: function getDirections() {\n        return this.state[_constants.DIRECTIONS_RENDERER].getDirections()\n      },\n\n      /**\n       * Returns the panel `<div>` in which the `DirectionsResult` is rendered.\n       * @type Node<div>DirectionsResult\n       * @public\n       */\n    },\n    {\n      key: \"getPanel\",\n      value: function getPanel() {\n        return this.state[_constants.DIRECTIONS_RENDERER].getPanel()\n      },\n\n      /**\n       * Returns the current (zero-based) route index in use by this `DirectionsRenderer` object.\n       * @type numberDirectionsRenderer\n       * @public\n       */\n    },\n    {\n      key: \"getRouteIndex\",\n      value: function getRouteIndex() {\n        return this.state[_constants.DIRECTIONS_RENDERER].getRouteIndex()\n      },\n    },\n  ])\n  return DirectionsRenderer\n})(_react2.default.PureComponent))\n\nDirectionsRenderer.propTypes = {\n  /**\n   * @type DirectionsResult\n   */\n  defaultDirections: _propTypes2.default.any,\n\n  /**\n   * @type DirectionsRendererOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type Node\n   */\n  defaultPanel: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  defaultRouteIndex: _propTypes2.default.number,\n\n  /**\n   * @type DirectionsResult\n   */\n  directions: _propTypes2.default.any,\n\n  /**\n   * @type DirectionsRendererOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type Node\n   */\n  panel: _propTypes2.default.any,\n\n  /**\n   * @type number\n   */\n  routeIndex: _propTypes2.default.number,\n\n  /**\n   * function\n   */\n  onDirectionsChanged: _propTypes2.default.func,\n}\nDirectionsRenderer.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = DirectionsRenderer\n\nvar eventMap = {\n  onDirectionsChanged: \"directions_changed\",\n}\n\nvar updaterMap = {\n  directions: function directions(instance, _directions) {\n    instance.setDirections(_directions)\n  },\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  panel: function panel(instance, _panel) {\n    instance.setPanel(_panel)\n  },\n  routeIndex: function routeIndex(instance, _routeIndex) {\n    instance.setRouteIndex(_routeIndex)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.FusionTablesLayer = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.FusionTablesLayer`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#FusionTablesLayer\n */\n/*\n * -----------------------------------------------------------------------------\n * This file is auto-generated from the corresponding file at `src/macros/`.\n * Please **DO NOT** edit this file directly when creating PRs.\n * -----------------------------------------------------------------------------\n */\n/* global google */\nvar FusionTablesLayer = (exports.FusionTablesLayer = (function(\n  _React$PureComponent\n) {\n  ;(0, _inherits3.default)(FusionTablesLayer, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#FusionTablesLayer\n   */\n  function FusionTablesLayer(props, context) {\n    ;(0, _classCallCheck3.default)(this, FusionTablesLayer)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (\n        FusionTablesLayer.__proto__ ||\n        (0, _getPrototypeOf2.default)(FusionTablesLayer)\n      ).call(this, props, context)\n    )\n\n    var fusionTablesLayer = new google.maps.FusionTablesLayer()\n    ;(0, _MapChildHelper.construct)(\n      FusionTablesLayer.propTypes,\n      updaterMap,\n      _this.props,\n      fusionTablesLayer\n    )\n    fusionTablesLayer.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.FUSION_TABLES_LAYER,\n      fusionTablesLayer\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(FusionTablesLayer, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.FUSION_TABLES_LAYER],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.FUSION_TABLES_LAYER],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var fusionTablesLayer = this.state[_constants.FUSION_TABLES_LAYER]\n        if (fusionTablesLayer) {\n          fusionTablesLayer.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n    },\n  ])\n  return FusionTablesLayer\n})(_react2.default.PureComponent))\n\nFusionTablesLayer.propTypes = {\n  /**\n   * @type FusionTablesLayerOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type FusionTablesLayerOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * function\n   */\n  onClick: _propTypes2.default.func,\n}\nFusionTablesLayer.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = FusionTablesLayer\n\nvar eventMap = {\n  onClick: \"click\",\n}\n\nvar updaterMap = {\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.KmlLayer = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.KmlLayer`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#KmlLayer\n */\n/*\n * -----------------------------------------------------------------------------\n * This file is auto-generated from the corresponding file at `src/macros/`.\n * Please **DO NOT** edit this file directly when creating PRs.\n * -----------------------------------------------------------------------------\n */\n/* global google */\nvar KmlLayer = (exports.KmlLayer = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(KmlLayer, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#KmlLayer\n   */\n  function KmlLayer(props, context) {\n    ;(0, _classCallCheck3.default)(this, KmlLayer)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (KmlLayer.__proto__ || (0, _getPrototypeOf2.default)(KmlLayer)).call(\n        this,\n        props,\n        context\n      )\n    )\n\n    var kmlLayer = new google.maps.KmlLayer()\n    ;(0, _MapChildHelper.construct)(\n      KmlLayer.propTypes,\n      updaterMap,\n      _this.props,\n      kmlLayer\n    )\n    kmlLayer.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.KML_LAYER,\n      kmlLayer\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(KmlLayer, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.KML_LAYER],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.KML_LAYER],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var kmlLayer = this.state[_constants.KML_LAYER]\n        if (kmlLayer) {\n          kmlLayer.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n\n      /**\n       * Get the default viewport for the layer being displayed.\n       * @type LatLngBounds\n       * @public\n       */\n    },\n    {\n      key: \"getDefaultViewport\",\n      value: function getDefaultViewport() {\n        return this.state[_constants.KML_LAYER].getDefaultViewport()\n      },\n\n      /**\n       * Get the metadata associated with this layer, as specified in the layer markup.\n       * @type KmlLayerMetadata\n       * @public\n       */\n    },\n    {\n      key: \"getMetadata\",\n      value: function getMetadata() {\n        return this.state[_constants.KML_LAYER].getMetadata()\n      },\n\n      /**\n       * Get the status of the layer, set once the requested document has loaded.\n       * @type KmlLayerStatus\n       * @public\n       */\n    },\n    {\n      key: \"getStatus\",\n      value: function getStatus() {\n        return this.state[_constants.KML_LAYER].getStatus()\n      },\n\n      /**\n       * Gets the URL of the KML file being displayed.\n       * @type string\n       * @public\n       */\n    },\n    {\n      key: \"getUrl\",\n      value: function getUrl() {\n        return this.state[_constants.KML_LAYER].getUrl()\n      },\n\n      /**\n       * Gets the z-index of the KML Layer.\n       * @type number\n       * @public\n       */\n    },\n    {\n      key: \"getZIndex\",\n      value: function getZIndex() {\n        return this.state[_constants.KML_LAYER].getZIndex()\n      },\n    },\n  ])\n  return KmlLayer\n})(_react2.default.PureComponent))\n\nKmlLayer.propTypes = {\n  /**\n   * @type KmlLayerOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type string\n   */\n  defaultUrl: _propTypes2.default.string,\n\n  /**\n   * @type number\n   */\n  defaultZIndex: _propTypes2.default.number,\n\n  /**\n   * @type KmlLayerOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type string\n   */\n  url: _propTypes2.default.string,\n\n  /**\n   * @type number\n   */\n  zIndex: _propTypes2.default.number,\n\n  /**\n   * function\n   */\n  onDefaultViewportChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onStatusChanged: _propTypes2.default.func,\n}\nKmlLayer.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = KmlLayer\n\nvar eventMap = {\n  onDefaultViewportChanged: \"defaultviewport_changed\",\n  onClick: \"click\",\n  onStatusChanged: \"status_changed\",\n}\n\nvar updaterMap = {\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  url: function url(instance, _url) {\n    instance.setUrl(_url)\n  },\n  zIndex: function zIndex(instance, _zIndex) {\n    instance.setZIndex(_zIndex)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.TrafficLayer = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.TrafficLayer`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#TrafficLayer\n */\n/*\n * -----------------------------------------------------------------------------\n * This file is auto-generated from the corresponding file at `src/macros/`.\n * Please **DO NOT** edit this file directly when creating PRs.\n * -----------------------------------------------------------------------------\n */\n/* global google */\nvar TrafficLayer = (exports.TrafficLayer = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(TrafficLayer, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#TrafficLayer\n   */\n  function TrafficLayer(props, context) {\n    ;(0, _classCallCheck3.default)(this, TrafficLayer)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (\n        TrafficLayer.__proto__ || (0, _getPrototypeOf2.default)(TrafficLayer)\n      ).call(this, props, context)\n    )\n\n    var trafficLayer = new google.maps.TrafficLayer()\n    ;(0, _MapChildHelper.construct)(\n      TrafficLayer.propTypes,\n      updaterMap,\n      _this.props,\n      trafficLayer\n    )\n    trafficLayer.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.TRAFFIC_LAYER,\n      trafficLayer\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(TrafficLayer, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.TRAFFIC_LAYER],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.TRAFFIC_LAYER],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var trafficLayer = this.state[_constants.TRAFFIC_LAYER]\n        if (trafficLayer) {\n          trafficLayer.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n    },\n  ])\n  return TrafficLayer\n})(_react2.default.PureComponent))\n\nTrafficLayer.propTypes = {\n  /**\n   * @type TrafficLayerOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type TrafficLayerOptions\n   */\n  options: _propTypes2.default.any,\n}\nTrafficLayer.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = TrafficLayer\n\nvar eventMap = {}\n\nvar updaterMap = {\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.StreetViewPanorama = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _invariant = require(\"invariant\")\n\nvar _invariant2 = _interopRequireDefault(_invariant)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.StreetViewPanorama`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#StreetViewPanorama\n */\nvar StreetViewPanorama = (exports.StreetViewPanorama = (function(\n  _React$PureComponent\n) {\n  ;(0, _inherits3.default)(StreetViewPanorama, _React$PureComponent)\n\n  function StreetViewPanorama(props, context) {\n    ;(0, _classCallCheck3.default)(this, StreetViewPanorama)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (\n        StreetViewPanorama.__proto__ ||\n        (0, _getPrototypeOf2.default)(StreetViewPanorama)\n      ).call(this, props, context)\n    )\n\n    ;(0, _invariant2.default)(\n      !!_this.context[_constants.MAP],\n      \"Did you render <StreetViewPanorama> as a child of <GoogleMap> with withGoogleMap() HOC?\"\n    )\n    ;(0, _MapChildHelper.construct)(\n      StreetViewPanorama.propTypes,\n      updaterMap,\n      _this.props,\n      _this.context[_constants.MAP].getStreetView()\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(StreetViewPanorama, [\n    {\n      key: \"getChildContext\",\n      value: function getChildContext() {\n        return (0, _defineProperty3.default)(\n          {},\n          _constants.MAP,\n          this.context[_constants.MAP].getStreetView()\n        )\n      },\n    },\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.context[_constants.MAP].getStreetView(),\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.context[_constants.MAP].getStreetView(),\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var streetViewPanorama = this.context[_constants.MAP].getStreetView()\n        if (streetViewPanorama) {\n          streetViewPanorama.setVisible(false)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        var children = this.props.children\n\n        return _react2.default.createElement(\"div\", null, children)\n      },\n\n      /**\n       * Returns the set of navigation links for the Street View panorama.\n       * @type Array<StreetViewLink>\n       * @public\n       */\n    },\n    {\n      key: \"getLinks\",\n      value: function getLinks() {\n        return this.context[_constants.MAP].getLinks()\n      },\n\n      /**\n       * Returns the StreetViewLocation of the current panorama.\n       * @type StreetViewLocation\n       * @public\n       */\n    },\n    {\n      key: \"getLocation\",\n      value: function getLocation() {\n        return this.context[_constants.MAP].getLocation()\n      },\n\n      /**\n       * Returns the state of motion tracker. If true when the user physically moves the device and the browser supports it, the Street View Panorama tracks the physical movements.\n       * @type boolean\n       * @public\n       */\n    },\n    {\n      key: \"getMotionTracking\",\n      value: function getMotionTracking() {\n        return this.context[_constants.MAP].getMotionTracking()\n      },\n\n      /**\n       * Returns the current panorama ID for the Street View panorama. This id is stable within the browser's current session only.\n       * @type string\n       * @public\n       */\n    },\n    {\n      key: \"getPano\",\n      value: function getPano() {\n        return this.context[_constants.MAP].getPano()\n      },\n\n      /**\n       * Returns the heading and pitch of the photographer when this panorama was taken. For Street View panoramas on the road, this also reveals in which direction the car was travelling. This data is available after the `pano_changed` event.\n       * @type StreetViewPovpano_changed\n       * @public\n       */\n    },\n    {\n      key: \"getPhotographerPov\",\n      value: function getPhotographerPov() {\n        return this.context[_constants.MAP].getPhotographerPov()\n      },\n\n      /**\n       * Returns the current `LatLng` position for the Street View panorama.\n       * @type LatLngLatLng\n       * @public\n       */\n    },\n    {\n      key: \"getPosition\",\n      value: function getPosition() {\n        return this.context[_constants.MAP].getPosition()\n      },\n\n      /**\n       * Returns the current point of view for the Street View panorama.\n       * @type StreetViewPov\n       * @public\n       */\n    },\n    {\n      key: \"getPov\",\n      value: function getPov() {\n        return this.context[_constants.MAP].getPov()\n      },\n\n      /**\n       * Returns the status of the panorama on completion of the `setPosition()` or `setPano()` request.\n       * @type StreetViewStatussetPosition()setPano()\n       * @public\n       */\n    },\n    {\n      key: \"getStatus\",\n      value: function getStatus() {\n        return this.context[_constants.MAP].getStatus()\n      },\n\n      /**\n       * Returns `true` if the panorama is visible. It does not specify whether Street View imagery is available at the specified position.\n       * @type booleantrue\n       * @public\n       */\n    },\n    {\n      key: \"getVisible\",\n      value: function getVisible() {\n        return this.context[_constants.MAP].getVisible()\n      },\n\n      /**\n       * Returns the zoom level of the panorama. Fully zoomed-out is level 0, where the field of view is 180 degrees. Zooming in increases the zoom level.\n       * @type number\n       * @public\n       */\n    },\n    {\n      key: \"getZoom\",\n      value: function getZoom() {\n        return this.context[_constants.MAP].getZoom()\n      },\n    },\n  ])\n  return StreetViewPanorama\n})(\n  _react2.default.PureComponent\n)) /*\n                                   * -----------------------------------------------------------------------------\n                                   * This file is auto-generated from the corresponding file at `src/macros/`.\n                                   * Please **DO NOT** edit this file directly when creating PRs.\n                                   * -----------------------------------------------------------------------------\n                                   */\n\nStreetViewPanorama.propTypes = {\n  /**\n   * @type Array<StreetViewLink>\n   */\n  defaultLinks: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  defaultMotionTracking: _propTypes2.default.bool,\n\n  /**\n   * @type StreetViewPanoramaOptions\n   */\n  defaultOptions: _propTypes2.default.any,\n\n  /**\n   * @type string\n   */\n  defaultPano: _propTypes2.default.string,\n\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  defaultPosition: _propTypes2.default.any,\n\n  /**\n   * @type StreetViewPov\n   */\n  defaultPov: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  defaultVisible: _propTypes2.default.bool,\n\n  /**\n   * @type number\n   */\n  defaultZoom: _propTypes2.default.number,\n\n  /**\n   * @type Array<StreetViewLink>\n   */\n  links: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  motionTracking: _propTypes2.default.bool,\n\n  /**\n   * @type StreetViewPanoramaOptions\n   */\n  options: _propTypes2.default.any,\n\n  /**\n   * @type string\n   */\n  pano: _propTypes2.default.string,\n\n  /**\n   * @type LatLng|LatLngLiteral\n   */\n  position: _propTypes2.default.any,\n\n  /**\n   * @type StreetViewPov\n   */\n  pov: _propTypes2.default.any,\n\n  /**\n   * @type boolean\n   */\n  visible: _propTypes2.default.bool,\n\n  /**\n   * @type number\n   */\n  zoom: _propTypes2.default.number,\n\n  /**\n   * function\n   */\n  onCloseClick: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onPanoChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onPositionChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onPovChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onResize: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onStatusChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onVisibleChanged: _propTypes2.default.func,\n\n  /**\n   * function\n   */\n  onZoomChanged: _propTypes2.default.func,\n}\nStreetViewPanorama.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nStreetViewPanorama.childContextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = StreetViewPanorama\n\nvar eventMap = {\n  onCloseClick: \"closeclick\",\n  onPanoChanged: \"pano_changed\",\n  onPositionChanged: \"position_changed\",\n  onPovChanged: \"pov_changed\",\n  onResize: \"resize\",\n  onStatusChanged: \"status_changed\",\n  onVisibleChanged: \"visible_changed\",\n  onZoomChanged: \"zoom_changed\",\n}\n\nvar updaterMap = {\n  links: function links(instance, _links) {\n    instance.setLinks(_links)\n  },\n  motionTracking: function motionTracking(instance, _motionTracking) {\n    instance.setMotionTracking(_motionTracking)\n  },\n  options: function options(instance, _options) {\n    instance.setOptions(_options)\n  },\n  pano: function pano(instance, _pano) {\n    instance.setPano(_pano)\n  },\n  position: function position(instance, _position) {\n    instance.setPosition(_position)\n  },\n  pov: function pov(instance, _pov) {\n    instance.setPov(_pov)\n  },\n  visible: function visible(instance, _visible) {\n    instance.setVisible(_visible)\n  },\n  zoom: function zoom(instance, _zoom) {\n    instance.setZoom(_zoom)\n  },\n}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\nexports.BicyclingLayer = undefined\n\nvar _defineProperty2 = require(\"babel-runtime/helpers/defineProperty\")\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2)\n\nvar _getPrototypeOf = require(\"babel-runtime/core-js/object/get-prototype-of\")\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf)\n\nvar _classCallCheck2 = require(\"babel-runtime/helpers/classCallCheck\")\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2)\n\nvar _createClass2 = require(\"babel-runtime/helpers/createClass\")\n\nvar _createClass3 = _interopRequireDefault(_createClass2)\n\nvar _possibleConstructorReturn2 = require(\"babel-runtime/helpers/possibleConstructorReturn\")\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(\n  _possibleConstructorReturn2\n)\n\nvar _inherits2 = require(\"babel-runtime/helpers/inherits\")\n\nvar _inherits3 = _interopRequireDefault(_inherits2)\n\nvar _react = require(\"react\")\n\nvar _react2 = _interopRequireDefault(_react)\n\nvar _propTypes = require(\"prop-types\")\n\nvar _propTypes2 = _interopRequireDefault(_propTypes)\n\nvar _MapChildHelper = require(\"../utils/MapChildHelper\")\n\nvar _constants = require(\"../constants\")\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n\n/**\n * A wrapper around `google.maps.BicyclingLayer`\n *\n * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#BicyclingLayer\n */\n/*\n * -----------------------------------------------------------------------------\n * This file is auto-generated from the corresponding file at `src/macros/`.\n * Please **DO NOT** edit this file directly when creating PRs.\n * -----------------------------------------------------------------------------\n */\n/* global google */\nvar BicyclingLayer = (exports.BicyclingLayer = (function(_React$PureComponent) {\n  ;(0, _inherits3.default)(BicyclingLayer, _React$PureComponent)\n\n  /*\n   * @see https://developers.google.com/maps/documentation/javascript/3.exp/reference#BicyclingLayer\n   */\n  function BicyclingLayer(props, context) {\n    ;(0, _classCallCheck3.default)(this, BicyclingLayer)\n\n    var _this = (0, _possibleConstructorReturn3.default)(\n      this,\n      (\n        BicyclingLayer.__proto__ ||\n        (0, _getPrototypeOf2.default)(BicyclingLayer)\n      ).call(this, props, context)\n    )\n\n    var bicyclingLayer = new google.maps.BicyclingLayer()\n    ;(0, _MapChildHelper.construct)(\n      BicyclingLayer.propTypes,\n      updaterMap,\n      _this.props,\n      bicyclingLayer\n    )\n    bicyclingLayer.setMap(_this.context[_constants.MAP])\n    _this.state = (0, _defineProperty3.default)(\n      {},\n      _constants.BICYCLING_LAYER,\n      bicyclingLayer\n    )\n    return _this\n  }\n\n  ;(0, _createClass3.default)(BicyclingLayer, [\n    {\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        ;(0, _MapChildHelper.componentDidMount)(\n          this,\n          this.state[_constants.BICYCLING_LAYER],\n          eventMap\n        )\n      },\n    },\n    {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate(prevProps) {\n        ;(0, _MapChildHelper.componentDidUpdate)(\n          this,\n          this.state[_constants.BICYCLING_LAYER],\n          eventMap,\n          updaterMap,\n          prevProps\n        )\n      },\n    },\n    {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        ;(0, _MapChildHelper.componentWillUnmount)(this)\n        var bicyclingLayer = this.state[_constants.BICYCLING_LAYER]\n        if (bicyclingLayer) {\n          bicyclingLayer.setMap(null)\n        }\n      },\n    },\n    {\n      key: \"render\",\n      value: function render() {\n        return false\n      },\n    },\n  ])\n  return BicyclingLayer\n})(_react2.default.PureComponent))\n\nBicyclingLayer.propTypes = {}\nBicyclingLayer.contextTypes = (0, _defineProperty3.default)(\n  {},\n  _constants.MAP,\n  _propTypes2.default.object\n)\nexports.default = BicyclingLayer\n\nvar eventMap = {}\n\nvar updaterMap = {}\n","\"use strict\"\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true,\n})\n\nvar _withScriptjs = require(\"./withScriptjs\")\n\nObject.defineProperty(exports, \"withScriptjs\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_withScriptjs).default\n  },\n})\n\nvar _withGoogleMap = require(\"./withGoogleMap\")\n\nObject.defineProperty(exports, \"withGoogleMap\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_withGoogleMap).default\n  },\n})\n\nvar _GoogleMap = require(\"./components/GoogleMap\")\n\nObject.defineProperty(exports, \"GoogleMap\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_GoogleMap).default\n  },\n})\n\nvar _Circle = require(\"./components/Circle\")\n\nObject.defineProperty(exports, \"Circle\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Circle).default\n  },\n})\n\nvar _Marker = require(\"./components/Marker\")\n\nObject.defineProperty(exports, \"Marker\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Marker).default\n  },\n})\n\nvar _Polyline = require(\"./components/Polyline\")\n\nObject.defineProperty(exports, \"Polyline\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Polyline).default\n  },\n})\n\nvar _Polygon = require(\"./components/Polygon\")\n\nObject.defineProperty(exports, \"Polygon\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Polygon).default\n  },\n})\n\nvar _Rectangle = require(\"./components/Rectangle\")\n\nObject.defineProperty(exports, \"Rectangle\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_Rectangle).default\n  },\n})\n\nvar _InfoWindow = require(\"./components/InfoWindow\")\n\nObject.defineProperty(exports, \"InfoWindow\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_InfoWindow).default\n  },\n})\n\nvar _OverlayView = require(\"./components/OverlayView\")\n\nObject.defineProperty(exports, \"OverlayView\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_OverlayView).default\n  },\n})\n\nvar _GroundOverlay = require(\"./components/GroundOverlay\")\n\nObject.defineProperty(exports, \"GroundOverlay\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_GroundOverlay).default\n  },\n})\n\nvar _DirectionsRenderer = require(\"./components/DirectionsRenderer\")\n\nObject.defineProperty(exports, \"DirectionsRenderer\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_DirectionsRenderer).default\n  },\n})\n\nvar _FusionTablesLayer = require(\"./components/FusionTablesLayer\")\n\nObject.defineProperty(exports, \"FusionTablesLayer\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_FusionTablesLayer).default\n  },\n})\n\nvar _KmlLayer = require(\"./components/KmlLayer\")\n\nObject.defineProperty(exports, \"KmlLayer\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_KmlLayer).default\n  },\n})\n\nvar _TrafficLayer = require(\"./components/TrafficLayer\")\n\nObject.defineProperty(exports, \"TrafficLayer\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_TrafficLayer).default\n  },\n})\n\nvar _StreetViewPanorama = require(\"./components/StreetViewPanorama\")\n\nObject.defineProperty(exports, \"StreetViewPanorama\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_StreetViewPanorama).default\n  },\n})\n\nvar _BicyclingLayer = require(\"./components/BicyclingLayer\")\n\nObject.defineProperty(exports, \"BicyclingLayer\", {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_BicyclingLayer).default\n  },\n})\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : { default: obj }\n}\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withScriptjs } from 'react-google-maps'\r\n\r\nclass GoogleMapsScriptJS extends React.Component {\r\n  render() {\r\n    const { children, ...otherProps } = this.props\r\n\r\n    return children({\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nGoogleMapsScriptJS.propTypes = {\r\n  googleMapURL: PropTypes.string,\r\n}\r\n\r\nexport default withScriptjs(GoogleMapsScriptJS)\r\n","/**\r\n * https://gist.github.com/auser/1d55aa3897f15d17caf21dc39b85b663#file-googleapi-js-L1-Lundefined\r\n */\r\n\r\nexport const GoogleApi = function(opts) {\r\n  opts = opts || {}\r\n\r\n  const apiKey = opts.apiKey;\r\n  const libraries = opts.libraries || [];\r\n  const client = opts.client;\r\n  const URL = opts.url || 'https://maps.googleapis.com/maps/api/js';\r\n\r\n  const googleVersion = opts.version || '3.25';\r\n\r\n  let channel = null;\r\n  let language = null;\r\n  let region = null;\r\n\r\n  const url = () => {\r\n    let url = URL;\r\n    let params = {\r\n      key: apiKey,\r\n      // callback: 'CALLBACK_NAME',\r\n      libraries: libraries.join(','),\r\n      client: client,\r\n      v: googleVersion,\r\n      channel: channel,\r\n      language: language,\r\n      region: region\r\n    }\r\n\r\n    let paramStr = Object.keys(params)\r\n        .filter(k => !!params[k])\r\n        .map(k => `${k}=${params[k]}`).join('&');\r\n\r\n    const res = `${url}?${paramStr}`;\r\n\r\n    return res;\r\n  }\r\n\r\n  return url();\r\n}\r\n\r\nexport default GoogleApi;\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nimport GoogleMapsScriptJS from 'pmt-modules/google/components/GoogleMapsScriptJS'\r\n\r\nimport {\r\n  getGoogleMapApiUrl,\r\n  getGoogleMapApiVersion,\r\n  getGoogleMapApiKey,\r\n} from 'pmt-modules/environment'\r\n\r\nimport GoogleApi from 'pmt-utils/google/GoogleApi'\r\n\r\nclass GoogleMapsApiContainer extends React.Component {\r\n  state = {\r\n    googleMapURL: '',\r\n  }\r\n\r\n  componentWillMount() {\r\n    if (isEmpty(this.state.googleMapURL)) {\r\n      const googleMapURL = GoogleApi({\r\n        apiKey: getGoogleMapApiKey(),\r\n        libraries: ['places'],\r\n        version: getGoogleMapApiVersion(),\r\n        url: getGoogleMapApiUrl(),\r\n      })\r\n\r\n      this.setState({\r\n        googleMapURL,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { children, loadingElement } = this.props\r\n\r\n    /*\r\n     googleMapURL is a variable set in parents components (see index.js)\r\n     if we do not have it we can't display the content because it needs it\r\n   */\r\n    // TODO: loading or error?\r\n    if (this.state.googleMapURL === '') {\r\n      return <div />\r\n      /* return (\r\n              <BlockContainer type={BlockContainer.Type.WHITE} className={classes.gridContainer}>\r\n                <LoadingBlock show />\r\n              </BlockContainer>\r\n            ) */\r\n    }\r\n\r\n    return (\r\n      <GoogleMapsScriptJS\r\n        googleMapURL={this.state.googleMapURL}\r\n        loadingElement={loadingElement || <div />}\r\n      >\r\n        {() => (isFunction(children) ? children() : children)}\r\n      </GoogleMapsScriptJS>\r\n    )\r\n  }\r\n}\r\n\r\nGoogleMapsApiContainer.propTypes = {\r\n  /**\r\n   * loading to display while loading the google map script. Default: <div />\r\n   */\r\n  loadingBlock: PropTypes.any,\r\n}\r\n\r\nexport default GoogleMapsApiContainer\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport GoogleMapsApiContainer from 'pmt-modules/google/components/GoogleMapsApiContainer'\r\n\r\nimport {\r\n  failureGeolocation,\r\n  initGeolocation,\r\n  resetFullGeolocation,\r\n  resetGeolocation,\r\n  resetGeolocationCoordinates,\r\n  resetGeolocationError,\r\n  setGeolocationAddress,\r\n  setGeolocationComputeAddress,\r\n  setGeolocationComputeAddressExtra,\r\n  setGeolocationCoordinates,\r\n  successGeolocation,\r\n} from '../actions'\r\n\r\nimport {\r\n  getGeolocationAddress,\r\n  getGeolocationComputeAddress,\r\n  getGeolocationCoordinates,\r\n  getGeolocationError,\r\n  getGeolocationIsFetching,\r\n  getGeolocationOrigin,\r\n} from '../selectors'\r\n\r\nimport { GeolocationType, DEFAULT_GEOLOCATION_ID } from '../constants'\r\n\r\nclass GeolocationContainer extends React.Component {\r\n  successGeolocate = position => {\r\n    const { latitude, longitude } = position.coords\r\n\r\n    this.props.successGeolocation(this.props.geolocationId, latitude, longitude)\r\n    if (!isNil(this.props.successGeolocationCallback)) {\r\n      this.props.successGeolocationCallback({\r\n        latitude,\r\n        longitude,\r\n      })\r\n    }\r\n  }\r\n\r\n  failureGeolocate = () => {\r\n    this.props.failureGeolocation(this.props.geolocationId, tr('global.geolocation.error.position'))\r\n  }\r\n\r\n  geolocateUser = () => {\r\n    this.props.initGeolocation(this.props.geolocationId, GeolocationType.REVERSE_GEOCODING)\r\n\r\n    const options = {\r\n      enableHighAccuracy: true,\r\n      timeout: 4000,\r\n      maximumAge: 0,\r\n    }\r\n\r\n    if (navigator.geolocation) {\r\n      navigator.geolocation.getCurrentPosition(\r\n        this.successGeolocate,\r\n        this.failureGeolocate,\r\n        options\r\n      )\r\n    } else {\r\n      this.props.failureGeolocation(\r\n        this.props.geolocationId,\r\n        tr('global.geolocation.error.unsupported_browser')\r\n      )\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      children,\r\n      loadingElement,\r\n\r\n      isFetching,\r\n      geolocationId,\r\n      geolocationOrigin,\r\n      geolocationError,\r\n      geolocationAddress,\r\n      resetGeolocationError,\r\n      setGeolocationAddress,\r\n      geolocationComputeAddress,\r\n      setGeolocationComputeAddress,\r\n      setGeolocationComputeAddressExtra,\r\n      resetGeolocation,\r\n      resetFullGeolocation,\r\n      geolocationCoordinates,\r\n      setGeolocationCoordinates,\r\n      resetGeolocationCoordinates,\r\n    } = this.props\r\n\r\n    return (\r\n      <GoogleMapsApiContainer loadingElement={loadingElement}>\r\n        {children({\r\n          geolocationId,\r\n\r\n          isFetchingGeolocation: isFetching,\r\n\r\n          geolocationOrigin,\r\n          geolocateUser: this.geolocateUser,\r\n\r\n          //\r\n          //\r\n          //\r\n\r\n          geolocationAddress,\r\n          setGeolocationAddress: address => {\r\n            setGeolocationAddress(geolocationId, address)\r\n          },\r\n\r\n          geolocationComputeAddress,\r\n          setGeolocationComputeAddress: address => {\r\n            setGeolocationComputeAddress(geolocationId, address)\r\n          },\r\n          setGeolocationComputeAddressExtra: extra => {\r\n            setGeolocationComputeAddressExtra(geolocationId, extra)\r\n          },\r\n\r\n          //\r\n          //\r\n          //\r\n\r\n          geolocationCoordinates,\r\n          geolocationLatitude: geolocationCoordinates.latitude,\r\n          geolocationLongitude: geolocationCoordinates.longitude,\r\n\r\n          setGeolocationCoordinates: (latitude, longitude) => {\r\n            setGeolocationCoordinates(geolocationId, latitude, longitude)\r\n          },\r\n\r\n          resetGeolocationCoordinates: () => {\r\n            resetGeolocationCoordinates(geolocationId)\r\n          },\r\n\r\n          //\r\n          //\r\n          //\r\n\r\n          resetGeolocation: () => {\r\n            resetGeolocation(geolocationId)\r\n          },\r\n\r\n          resetFullGeolocation: () => {\r\n            resetFullGeolocation()\r\n          },\r\n\r\n          //\r\n          //\r\n          //\r\n\r\n          geolocationError,\r\n          resetGeolocationError,\r\n        })}\r\n      </GoogleMapsApiContainer>\r\n    )\r\n  }\r\n}\r\n\r\nGeolocationContainer.defaultProps = {\r\n  successGeolocationCallback: null,\r\n  geolocationId: DEFAULT_GEOLOCATION_ID,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  geolocationOrigin: getGeolocationOrigin(state, props),\r\n  geolocationAddress: getGeolocationAddress(state, props),\r\n  isFetching: getGeolocationIsFetching(state, props),\r\n  geolocationCoordinates: getGeolocationCoordinates(state, props),\r\n  geolocationError: getGeolocationError(state, props),\r\n  geolocationComputeAddress: getGeolocationComputeAddress(state, props),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    failureGeolocation,\r\n    initGeolocation,\r\n    resetFullGeolocation,\r\n    resetGeolocation,\r\n    resetGeolocationCoordinates,\r\n    resetGeolocationError,\r\n    setGeolocationAddress,\r\n    setGeolocationComputeAddress,\r\n    setGeolocationComputeAddressExtra,\r\n    setGeolocationCoordinates,\r\n    successGeolocation,\r\n  }\r\n)(GeolocationContainer)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\n\r\nimport GeolocationContainer from 'pmt-modules/geolocation/container/GeolocationContainer'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\n\r\nconst styles = theme => ({\r\n  addressArea: {\r\n    color: theme.pmt.colors.grey500,\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n    [theme.breakpoints.down('sm')]: {\r\n      ...theme.pmt.mixins.textEllipsis,\r\n    },\r\n  },\r\n  restaurantName: {\r\n    color: theme.palette.text.primary,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n  address: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginLeft: 0,\r\n      overflow: 'hidden',\r\n      whiteSpace: 'nowrap',\r\n    },\r\n  },\r\n})\r\n\r\nconst Address = ({ classes, orderProperties, restaurant, width }) => (\r\n  <GeolocationContainer>\r\n    {({ geolocationComputeAddress }) => (\r\n      <div className={classes.addressArea}>\r\n        {restaurant && (\r\n          <TypographyCustom\r\n            component=\"span\"\r\n            type={isWidthUp('sm', width) ? 164 : 144}\r\n            className={classes.restaurantName}\r\n          >\r\n            {restaurant.name}\r\n          </TypographyCustom>\r\n        )}\r\n        <TypographyCustom\r\n          skipColor\r\n          component=\"span\"\r\n          type={isWidthUp('sm', width) ? 164 : 144}\r\n          className={classes.address}\r\n        >\r\n          {orderProperties.isDelivery && geolocationComputeAddress ? (\r\n            <React.Fragment>\r\n              {tr('order.header.delivery_catch_phrase')}\r\n              {geolocationComputeAddress.formattedAddress}\r\n            </React.Fragment>\r\n          ) : (\r\n            restaurant && (\r\n              <React.Fragment>\r\n                {restaurant.address.street}\r\n                ,&nbsp;\r\n                {restaurant.address.postCode}\r\n                &nbsp;\r\n                {restaurant.address.city}\r\n              </React.Fragment>\r\n            )\r\n          )}\r\n        </TypographyCustom>\r\n      </div>\r\n    )}\r\n  </GeolocationContainer>\r\n)\r\n\r\nexport default compose(withWidth(), withStyles(styles))(Address)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\n\r\nimport isNil from 'lodash/isNil'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    transition: theme.pmt.modern.transitions.smooth,\r\n  },\r\n  padding: {\r\n    padding: theme.pmt.modern.spacing.card,\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: theme.spacing(2),\r\n    },\r\n  },\r\n  white: {\r\n    background: theme.pmt.modern.surface.elevated.background,\r\n    boxShadow: theme.pmt.modern.shadows.sm,\r\n    border: '1px solid rgba(0, 0, 0, 0.04)',\r\n  },\r\n  lightgrey: {\r\n    background: theme.pmt.colors.grey100,\r\n    border: '1px solid rgba(0, 0, 0, 0.04)',\r\n  },\r\n  grey: {\r\n    background: theme.pmt.modern.surface.subtle.background,\r\n  },\r\n  noBorder: {\r\n    border: 'none',\r\n    boxShadow: 'none',\r\n  },\r\n})\r\n\r\nconst Type = {\r\n  WHITE: 'WHITE',\r\n  LIGHTGREY: 'LIGHTGREY',\r\n  GREY: 'GREY',\r\n}\r\n\r\nconst BlockContainer = ({\r\n  children,\r\n  type,\r\n  mobileType,\r\n  className,\r\n  padding,\r\n  mobilePadding,\r\n  disablePadding,\r\n  disableMobilePadding,\r\n  classes,\r\n  width,\r\n  ...otherProps\r\n}) => {\r\n  const isMobile = isWidthDown('sm', width)\r\n\r\n  let typeToUse = type\r\n  if (isMobile && mobileType) {\r\n    typeToUse = mobileType\r\n  }\r\n  let classBackground = ''\r\n  switch (typeToUse) {\r\n    case Type.WHITE:\r\n      classBackground = classes.white\r\n      break\r\n    case Type.LIGHTGREY:\r\n      classBackground = classes.lightgrey\r\n      break\r\n    case Type.GREY:\r\n      classBackground = classes.grey\r\n      break\r\n    default:\r\n      classBackground = classes.white\r\n      break\r\n  }\r\n\r\n  let style = {}\r\n\r\n  if (!isNil(padding) && !disablePadding) {\r\n    style.padding = padding\r\n  }\r\n\r\n  if (!isNil(mobilePadding) && isMobile && !disableMobilePadding) {\r\n    style.padding = mobilePadding\r\n  }\r\n\r\n  return (\r\n    <div\r\n      className={classNames(classes.root, classBackground, className, {\r\n        // put padding if:\r\n        // - disablePadding is true\r\n        // - disableMobilePadding is false\r\n        // -  disableMobilePadding is true and we are not on mobile\r\n        // - there is no custom padding given\r\n        [classes.padding]:\r\n          !disablePadding && (!isMobile || !disableMobilePadding) && isNil(padding),\r\n        // no border if noBorder is true\r\n        [classes.noBorder]: otherProps.noBorder,\r\n      })}\r\n      style={style}\r\n      {...otherProps}\r\n    >\r\n      {children}\r\n    </div>\r\n  )\r\n}\r\n\r\nBlockContainer.defaultProps = {\r\n  disablePadding: false,\r\n  disableMobilePadding: false,\r\n  noBorder: false,\r\n}\r\n\r\nBlockContainer.propTypes = {\r\n  children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\r\n  // BlockContainer.Type\r\n  type: PropTypes.string,\r\n  // BlockContainer.Type\r\n  // define a different type for mobile\r\n  mobileType: PropTypes.string,\r\n  className: PropTypes.string,\r\n  // custom padding for mobile and desktop\r\n  padding: PropTypes.any,\r\n  // custom padding for mobile only\r\n  mobilePadding: PropTypes.any,\r\n  disablePadding: PropTypes.bool,\r\n  disableMobilePadding: PropTypes.bool,\r\n  noBorder: PropTypes.bool,\r\n}\r\n\r\nconst BlockContainerToExport = compose(\r\n  withWidth(),\r\n  withStyles(styles)\r\n)(BlockContainer)\r\n\r\nBlockContainerToExport.Type = Type\r\n\r\nexport default BlockContainerToExport\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet AvReplay = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z\"/>\r\n  </SvgIcon>\r\n);\r\nAvReplay = pure(AvReplay);\r\nAvReplay.displayName = 'AvReplay';\r\nAvReplay.muiName = 'SvgIcon';\r\n\r\nexport default AvReplay;\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport AvReplay from 'pmt-ui/svg-icons/av/replay'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\n\r\nimport { ButtonLink } from '../../Button'\r\n\r\nconst styles = theme => ({\r\n  root: {},\r\n})\r\n\r\nconst ChangeButton = ({ classes, onClick, orderProperties, width }) => (\r\n  <div className={classes.root}>\r\n    <TypographyCustom type={isWidthUp('sm', width) ? 164 : 144} component=\"div\">\r\n      <ButtonLink\r\n        classes={{ root: classes.changeButton }}\r\n        disabled={isNil(orderProperties.mode)}\r\n        onClick={() => {\r\n          EventManager.dispatch(EventManager.Events.ON_HEADER_BUTTON_CHANGE, {\r\n            mode: orderProperties.mode,\r\n          })\r\n          onClick()\r\n        }}\r\n        icon={<AvReplay />}\r\n        label={tr('order.global.change')}\r\n      />\r\n    </TypographyCustom>\r\n  </div>\r\n)\r\n\r\nexport default compose(withWidth(), withStyles(styles))(ChangeButton)\r\n","import React from 'react'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst TableNumber = ({ classes, orderProperties, width }) =>\r\n  orderProperties.tableNumber && (\r\n    <div className={classes.root}>\r\n      <TypographyCustom type={isWidthUp('sm', width) ? 164 : 144} component=\"div\" skipColor>\r\n        {tr('order.menu.table_number.catch_phrase', { tableNumber: orderProperties.tableNumber })}\r\n      </TypographyCustom>\r\n    </div>\r\n  )\r\n\r\nexport default withWidth()(TableNumber)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Delivery = props => (\r\n  <SvgIcon {...props}>\r\n    <g id=\"scooter\" transform=\"translate(2.000000, 5.000000)\" fillRule=\"nonzero\">\r\n      <path\r\n        d=\"M17.563468,8.66065232 C17.2938741,8.66065232 17.0348399,8.70458015 16.7928735,8.78439972 L16.4633699,8.14771686 C16.8078294,8.02184594 17.1790112,7.95281055 17.563468,7.95281055 C17.997749,7.95281055 18.4179792,8.037127 18.8124353,8.20351145 C18.9759587,8.27238029 19.1665924,8.20026371 19.2380099,8.04224844 C19.3094275,7.8841499 19.2346912,7.7000694 19.0710816,7.63107564 C18.594519,7.43013185 18.0873119,7.32824427 17.563468,7.32824427 C17.0761302,7.32824427 16.6063344,7.42005552 16.173174,7.5870229 L14.9756257,5.27321305 C15.0322598,5.28274809 15.0904024,5.28799445 15.149838,5.28799445 L15.8394466,5.28799445 C16.017969,5.28799445 16.1627006,5.14821652 16.1627006,4.97571131 L16.1627006,3.64330326 C16.1627006,3.47079806 16.017969,3.33102012 15.8394466,3.33102012 L15.149838,3.33102012 C14.7565025,3.33102012 14.4150601,3.54886884 14.2473559,3.86614851 L13.9055256,3.20569049 C13.7328648,2.87204719 13.38569,2.6648161 12.9995954,2.6648161 L12.3914038,2.6648161 C12.2128814,2.6648161 12.0681498,2.80459403 12.0681498,2.97709924 C12.0681498,3.14960444 12.2128814,3.28938237 12.3914038,3.28938237 L12.9995954,3.28938237 C13.1392412,3.28938237 13.2648361,3.36437196 13.3272888,3.48503817 L14.1644736,5.1025399 L14.0072859,5.17848716 C13.6619213,5.34528799 13.4473669,5.68063845 13.4473669,6.05367106 L13.4473669,9.32685635 L10.6673824,9.32685635 C10.0851373,9.32685635 9.61141928,8.86925746 9.61141928,8.30673144 L9.61141928,6.95350451 L9.63296955,6.95350451 C10.1914663,6.95350451 10.6458321,6.51455933 10.6458321,5.97501735 C10.6458321,5.43547536 10.1914663,4.99653019 9.63296955,4.99653019 L6.87453531,4.99653019 C6.59761438,4.99653019 6.34642446,5.10453851 6.16337649,5.27912561 L6.16337649,0.645385149 C6.16337649,0.289507287 5.86369847,0 5.4953182,0 L0.668058291,0 C0.299678019,0 0,0.289507287 0,0.645385149 L0,5.30881332 C0,5.66469119 0.299678019,5.95419847 0.668058291,5.95419847 L1.3936127,5.95419847 C1.37835511,6.0181957 1.3700367,6.0841499 1.37115732,6.15156142 C1.37839821,6.59375434 1.7566916,6.95350451 2.21446238,6.95350451 L3.95236215,6.95350451 C3.73379934,7.08832755 3.54657061,7.23102012 3.39076218,7.36630118 C2.67456059,7.98807772 2.29182784,8.72897988 2.17248246,9.21501735 C2.10813336,9.477127 2.16989643,9.74777238 2.34199686,9.95766829 C2.51172677,10.1647328 2.76597683,10.2833171 3.03975142,10.2833171 C3.04035483,10.2833171 3.04091514,10.2833171 3.04151855,10.2833171 L3.21185186,10.2830257 C3.14034807,10.50483 3.10323851,10.7370437 3.10323851,10.9715475 C3.10323851,12.2457876 4.17631253,13.2824427 5.4953182,13.2824427 C6.70463301,13.2824427 7.70659114,12.4107981 7.86494251,11.2838307 L14.1154252,11.2838307 C14.2939476,11.2838307 14.4386792,11.1440527 14.4386792,10.9715475 C14.4386792,10.7680638 14.4597122,10.5647883 14.5012181,10.3674254 C14.6738788,9.54574601 15.1895767,8.85676613 15.8854779,8.4276891 L16.2148953,9.06416378 C15.5853689,9.48087439 15.1713883,10.1803053 15.1713883,10.9715475 C15.1713883,12.2457876 16.2444623,13.2824427 17.563468,13.2824427 C18.8824736,13.2824427 19.9555477,12.2457876 19.9555477,10.9715475 C19.9555477,9.69730743 18.8824736,8.66065232 17.563468,8.66065232 Z M6.87453531,5.62109646 L9.63296955,5.62109646 C9.83498175,5.62109646 9.99932409,5.77986121 9.99932409,5.97501735 C9.99932409,6.17017349 9.83498175,6.32893824 9.63296955,6.32893824 L6.87453531,6.32893824 C6.67252311,6.32893824 6.50818077,6.17017349 6.50818077,5.97501735 C6.50818077,5.77986121 6.67252311,5.62109646 6.87453531,5.62109646 Z M0.646508023,0.645385149 C0.646508023,0.633934768 0.656162543,0.624566273 0.668058291,0.624566273 L5.4953182,0.624566273 C5.50721395,0.624566273 5.51686847,0.633934768 5.51686847,0.645385149 L5.51686847,1.33240805 L0.646508023,1.33240805 L0.646508023,0.645385149 Z M0.668058291,5.3296322 C0.656162543,5.3296322 0.646508023,5.32026371 0.646508023,5.30881332 L0.646508023,1.95697432 L5.51686847,1.95697432 L5.51686847,5.30881332 C5.51686847,5.32026371 5.50721395,5.3296322 5.4953182,5.3296322 L0.668058291,5.3296322 Z M2.21446238,6.32893824 C2.10761616,6.32893824 2.01930316,6.24495489 2.01762224,6.14173491 C2.01676023,6.09031228 2.03693128,6.0418043 2.07429944,6.00516308 C2.10059077,5.97943095 2.13326097,5.96235947 2.16873271,5.95419847 L5.86223305,5.95519778 C5.86210375,5.96181818 5.86171585,5.96835531 5.86171585,5.97501735 C5.86171585,6.09980569 5.88628315,6.21909785 5.9305474,6.32893824 L2.21446238,6.32893824 Z M3.04031173,9.65879251 C3.04013933,9.65879251 3.03996693,9.65879251 3.03979452,9.65879251 C2.93708595,9.65879251 2.87605559,9.60312283 2.84881605,9.56989591 C2.80041415,9.51085357 2.78321704,9.43407356 2.80157787,9.35920888 C3.03979452,8.38904927 4.27984001,6.95350451 6.18492676,6.95350451 C7.66383541,6.95350451 8.21496195,8.3189313 8.21496195,9.17962526 C8.21496195,9.4130465 8.08156579,9.6496322 7.82658303,9.65009022 L3.04031173,9.65879251 Z M5.86167274,10.9715475 C5.86167274,11.1667037 5.69733041,11.3254684 5.4953182,11.3254684 C5.29330599,11.3254684 5.12896365,11.1667037 5.12896365,10.9715475 C5.12896365,10.7763914 5.29330599,10.6176266 5.4953182,10.6176266 C5.69733041,10.6176266 5.86167274,10.7763914 5.86167274,10.9715475 Z M5.4953182,12.6578765 C4.53279705,12.6578765 3.74974654,11.9014018 3.74974654,10.9715475 C3.74974654,10.732755 3.8029326,10.497585 3.90301204,10.2817765 L4.77924591,10.2801943 C4.59598244,10.4573629 4.48245563,10.7018598 4.48245563,10.9715475 C4.48245563,11.5110895 4.93682147,11.9500347 5.4953182,11.9500347 C6.05381493,11.9500347 6.50818077,11.5110895 6.50818077,10.9715475 C6.50818077,10.7005274 6.39349024,10.454948 6.20858895,10.2775711 L7.08490903,10.2759473 C7.18675559,10.4932963 7.24088986,10.7305482 7.24088986,10.9715059 C7.24088986,11.9014018 6.45783934,12.6578765 5.4953182,12.6578765 Z M13.8676402,10.2431783 C13.838849,10.3800416 13.818247,10.5191534 13.8058771,10.6592644 L7.86533041,10.6592644 C7.84692648,10.5286884 7.81692851,10.4000278 7.775983,10.2747398 L7.82770364,10.2746565 C8.41701726,10.2736155 8.86142687,9.80285913 8.86142687,9.17962526 C8.86142687,8.50388619 8.62864088,7.81911173 8.22272005,7.30097155 C8.13367434,7.18730049 8.0255351,7.06804997 7.8963628,6.95350451 L8.96491126,6.95350451 L8.96491126,8.30673144 C8.96491126,9.21360167 9.72865273,9.95142262 10.6673824,9.95142262 L13.7706209,9.95142262 C13.842254,9.95142262 13.9082409,9.92864677 13.9618149,9.89054823 C13.9247915,10.0056766 13.892854,10.1230951 13.8676402,10.2431783 Z M15.149838,3.9555864 L15.5161926,3.9555864 L15.5161926,4.66342817 L15.149838,4.66342817 C14.9478258,4.66342817 14.7834835,4.50466343 14.7834835,4.30950729 C14.7834835,4.11435115 14.9478258,3.9555864 15.149838,3.9555864 Z M14.0938749,9.54391395 L14.0938749,6.05362942 C14.0938749,5.91872311 14.1714559,5.79743234 14.2964043,5.7370576 L14.453592,5.66111034 L15.5953251,7.86703678 C14.9352836,8.25847328 14.4044574,8.84152672 14.0938749,9.54391395 Z M17.563468,12.6578765 C16.6009468,12.6578765 15.8178963,11.9014018 15.8178963,10.9715475 C15.8178963,10.0416933 16.6009468,9.2852186 17.563468,9.2852186 C18.5259891,9.2852186 19.3090396,10.0416933 19.3090396,10.9715475 C19.3090396,11.9014018 18.5259891,12.6578765 17.563468,12.6578765 Z\"\r\n        id=\"Shape\"\r\n      />\r\n      <path\r\n        d=\"M17.5423186,9.96183206 C16.9793451,9.96183206 16.5213371,10.4046896 16.5213371,10.9490406 C16.5213371,11.4933917 16.9793451,11.9362492 17.5423186,11.9362492 C18.1052922,11.9362492 18.5633001,11.4933917 18.5633001,10.9490406 C18.5633001,10.4046896 18.1052922,9.96183206 17.5423186,9.96183206 Z M17.5423186,11.3061161 C17.3386871,11.3061161 17.1730275,11.1459362 17.1730275,10.9490406 C17.1730275,10.752145 17.3386871,10.5919652 17.5423186,10.5919652 C17.7459501,10.5919652 17.9116098,10.752145 17.9116098,10.9490406 C17.9116098,11.1459362 17.7459501,11.3061161 17.5423186,11.3061161 Z\"\r\n        id=\"Shape\"\r\n      />\r\n    </g>\r\n  </SvgIcon>\r\n)\r\nDelivery = pure(Delivery)\r\nDelivery.displayName = 'Delivery'\r\nDelivery.muiName = 'SvgIcon'\r\n\r\nexport default Delivery\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet OnSite = props => (\r\n  <SvgIcon {...props}>\r\n    <g id=\"chair\" transform=\"translate(1.000000, 6.000000)\" fillRule=\"nonzero\">\r\n      <path\r\n        d=\"M6.37424804,5.52083214 L3.64987134,5.52083214 C3.33078064,5.52083214 3.06917648,5.27925365 3.04126296,4.95883615 L2.72655503,1.34378038 C2.65987746,0.577695167 2.03429119,0 1.27139252,0 L0.980470656,0 C0.70627137,0 0.44275241,0.116885902 0.257527473,0.320717758 C0.0723025365,0.524549614 -0.0202035541,0.799413783 0.0037101639,1.07483557 L0.439518526,6.08102659 C0.490962806,6.6718044 0.758183711,7.21775808 1.19199217,7.61838719 C1.46453197,7.87008865 1.78813308,8.05062911 2.13688189,8.15014298 L1.09378423,11.5840149 C1.04216975,11.7539176 1.1369736,11.9337718 1.30547595,11.9858021 C1.33662336,11.9954104 1.36811117,12 1.39904582,12 C1.5355923,12 1.66201162,11.9109094 1.70405211,11.7724049 L2.77688494,8.22193322 L5.74986124,8.22193322 L6.82269408,11.7724049 C6.86473457,11.9109094 6.99111134,12 7.12770037,12 C7.15867757,12 7.19016538,11.9954104 7.22127023,11.9858021 C7.38977259,11.9337718 7.48457644,11.7538747 7.43296195,11.5840149 L6.9934091,10.136946 C6.99312542,10.1360023 6.80102139,9.5035459 6.417097,8.23957678 L7.00102574,8.23957678 C7.52844662,8.23957678 7.95744681,7.80707749 7.95744681,7.27540749 L7.95744681,7.11682871 C7.95744681,6.23677438 7.2472264,5.52083214 6.37424804,5.52083214 Z M7.31918031,7.2753646 C7.31918031,7.45225908 7.17646393,7.59612525 7.00102574,7.59612525 L5.98882018,7.59612525 C5.98754365,7.59612525 5.98630967,7.59612525 5.98503314,7.59612525 L2.77697808,7.59612525 C2.70872612,7.59612525 2.64158048,7.59170718 2.57545607,7.58398627 C2.57541352,7.58398627 2.57532842,7.58398627 2.57524332,7.58398627 C1.77681449,7.49094939 1.14731352,6.85200172 1.07531706,6.02470689 L0.639508695,1.01855876 C0.630998475,0.920975122 0.662486288,0.827509294 0.728100084,0.755318845 C0.793671328,0.683128396 0.883283944,0.643365742 0.980428105,0.643365742 L1.27134997,0.643365742 C1.70090332,0.643365742 2.05314133,0.968630255 2.0906714,1.4000143 L2.40537933,5.01507006 L2.40537933,5.01502717 C2.4623978,5.67014584 2.99739278,6.16419788 3.64982879,6.16419788 L6.37420549,6.16419788 C6.89524371,6.16419788 7.31913776,6.59150701 7.31913776,7.11674292 L7.31913776,7.2753646 L7.31918031,7.2753646 Z\"\r\n        id=\"Shape\"\r\n      />\r\n      <path\r\n        d=\"M20.4168012,5.52083214 L17.6924245,5.52083214 C17.3733338,5.52083214 17.1117297,5.27925365 17.0838162,4.95883615 L16.7691082,1.34378038 C16.7024306,0.577695167 16.0768444,0 15.3139457,0 L15.0230238,0 C14.7488246,0 14.4853056,0.116885902 14.3000807,0.320717758 C14.1148557,0.524549614 14.0223496,0.799413783 14.0462634,1.07483557 L14.4820717,6.08102659 C14.533516,6.6718044 14.8007369,7.21775808 15.2345454,7.61838719 C15.5070852,7.87008865 15.8306863,8.05062911 16.1794351,8.15014298 L15.1363374,11.5840149 C15.0847229,11.7539176 15.1795268,11.9337718 15.3480291,11.9858021 C15.3791766,11.9954104 15.4106644,12 15.441599,12 C15.5781455,12 15.7045648,11.9109094 15.7466053,11.7724049 L16.8194381,8.22193322 L19.7924144,8.22193322 L20.8652473,11.7724049 C20.9072878,11.9109094 21.0336645,12 21.1702536,12 C21.2012308,12 21.2327186,11.9954104 21.2638234,11.9858021 C21.4323258,11.9337718 21.5271296,11.7538747 21.4755151,11.5840149 L21.0359623,10.136946 C21.0356786,10.1360023 20.8435746,9.5035459 20.4596502,8.23957678 L21.0435789,8.23957678 C21.5709998,8.23957678 22,7.80707749 22,7.27540749 L22,7.11682871 C22,6.23677438 21.2897796,5.52083214 20.4168012,5.52083214 Z M21.3617335,7.2753646 C21.3617335,7.45225908 21.2190171,7.59612525 21.0435789,7.59612525 L20.0313734,7.59612525 C20.0300968,7.59612525 20.0288629,7.59612525 20.0275863,7.59612525 L16.8195313,7.59612525 C16.7512793,7.59612525 16.6841337,7.59170718 16.6180093,7.58398627 C16.6179667,7.58398627 16.6178816,7.58398627 16.6177965,7.58398627 C15.8193677,7.49094939 15.1898667,6.85200172 15.1178702,6.02470689 L14.6820619,1.01855876 C14.6735517,0.920975122 14.7050395,0.827509294 14.7706533,0.755318845 C14.8362245,0.683128396 14.9258371,0.643365742 15.0229813,0.643365742 L15.3139032,0.643365742 C15.7434565,0.643365742 16.0956945,0.968630255 16.1332246,1.4000143 L16.4479325,5.01507006 L16.4479325,5.01502717 C16.504951,5.67014584 17.039946,6.16419788 17.692382,6.16419788 L20.4167587,6.16419788 C20.9377969,6.16419788 21.361691,6.59150701 21.361691,7.11674292 L21.361691,7.2753646 L21.3617335,7.2753646 Z\"\r\n        id=\"Shape\"\r\n        transform=\"translate(18.021277, 6.000000) scale(-1, 1) translate(-18.021277, -6.000000) \"\r\n      />\r\n      <path\r\n        d=\"M13.4472414,10.9335544 C13.314241,10.4207 12.8524567,10.0625167 12.3241938,10.0625167 L12.1247147,10.0625167 L12.1247147,4.17682663 L16.0934119,4.17682663 C16.3220265,4.17682663 16.5359874,4.07487651 16.6804615,3.89714276 C16.8249356,3.7193659 16.8814446,3.48856636 16.8353779,3.26388813 C16.6967481,2.58778428 16.0967638,2.09708738 15.4087285,2.09708738 L8.70808729,2.09708738 L8.70808729,2.74370545 L15.4087285,2.74370545 C15.7923025,2.74370545 16.1267157,3.017268 16.2039806,3.39411701 C16.2133916,3.43998378 16.1935382,3.47296131 16.1809043,3.48856636 C16.1682273,3.5041283 16.1400373,3.53025167 16.0934119,3.53025167 L5.90657054,3.53025167 C5.8599452,3.53025167 5.83175514,3.5041283 5.8190782,3.48856636 C5.80644424,3.47300441 5.78659087,3.43998378 5.79600188,3.39416012 C5.87326673,3.017268 6.20767998,2.74370545 6.59125396,2.74370545 L8.71775753,2.74370545 L8.71775753,2.09708738 L6.59125396,2.09708738 C5.9031757,2.09708738 5.3031914,2.58778428 5.16460456,3.26393124 C5.11858084,3.48860946 5.17504692,3.71940901 5.31952101,3.89714276 C5.4639951,4.07487651 5.67795598,4.17682663 5.90657054,4.17682663 L9.87531073,4.17682663 L9.87531073,10.0625598 L9.67583163,10.0625598 C9.1475687,10.0625598 8.68578448,10.4207431 8.55278409,10.9335544 L8.47710923,11.2252653 C8.42867904,11.412138 8.46838578,11.6068562 8.5860879,11.7596305 C8.70383299,11.9123617 8.88173982,12 9.0741714,12 L12.9258111,12 C13.1182856,12 13.2961495,11.9124048 13.4138946,11.7596305 C13.5315967,11.6068993 13.5713034,11.412138 13.5228732,11.2252653 L13.4472414,10.9335544 Z M10.5199007,4.17682663 L11.4801678,4.17682663 L11.4801678,10.0625598 L10.5199007,10.0625598 L10.5199007,4.17682663 Z M9.10992465,11.3533388 L9.17661822,11.0963297 C9.23570563,10.8683753 9.44098604,10.7091779 9.67578866,10.7091779 L12.3241508,10.7091779 C12.5589535,10.7091779 12.7642339,10.8683753 12.8233213,11.0963297 L12.8900149,11.3533388 L9.10992465,11.3533388 Z\"\r\n        id=\"Shape\"\r\n      />\r\n    </g>\r\n  </SvgIcon>\r\n)\r\nOnSite = pure(OnSite)\r\nOnSite.displayName = 'OnSite'\r\nOnSite.muiName = 'SvgIcon'\r\n\r\nexport default OnSite\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Delivery = props => (\r\n  <SvgIcon {...props}>\r\n    <g\r\n      id=\"coffee-beans\"\r\n      transform=\"translate(12.500000, 12.500000) scale(-1, 1) translate(-12.500000, -12.500000) translate(7.000000, 6.000000)\"\r\n      fillRule=\"nonzero\"\r\n    >\r\n      <path\r\n        d=\"M9.49184963,0.277264013 C9.47831848,0.24189272 9.43730159,0.185714286 9.35,0.185714286 C7.7124669,0.185714286 5.20216248,0.185714286 1.81908673,0.185714286 C1.79333063,0.185714286 1.72652795,0.207315216 1.69625051,0.247364804 C1.54264567,0.450546129 0,4.39922684 0,4.45714286 L0,12.7460937 C0,12.8863262 0.117254762,13 0.261904762,13 C0.36297381,13 10.4840214,13 10.7380952,13 C10.8827452,13 11,12.8863262 11,12.7460937 L11,4.39257812 C11,4.33651562 11,4.21966797 9.49184963,0.277264013 Z M8.9047619,12.4921875 L7.85714286,12.4921875 L7.85714286,4.47905859 L8.9047619,1.48571429 L8.9047619,12.4921875 Z M10.4761905,12.4921875 L9.42857143,12.4921875 L9.42857143,1.48571429 L10.4761905,4.4790332 L10.4761905,12.4921875 Z M8.61666667,0.742857143 L7.33333333,4.45714286 L7.33333333,12.4892857 L0.5225,12.4892857 L0.5225,4.45714286 L2.01666667,0.742857143 L8.61666667,0.742857143 Z\"\r\n        id=\"Shape\"\r\n      />\r\n      <path\r\n        d=\"M1.65,7.98571429 C2.82212485,7.98571429 4.83884457,7.98571429 6.05,7.98571429 C6.11111111,7.98571429 6.14166667,8.01666667 6.14166667,8.07857143 L6.14166667,10.6785714 C6.14166667,10.7404762 6.11111111,10.7714286 6.05,10.7714286 C4.83697325,10.7714286 2.81475393,10.7714286 1.65,10.7714286 C1.56256615,10.7696572 1.56016595,10.7324075 1.55833333,10.6785714 C1.55833333,9.81190476 1.55833333,8.9452381 1.55833333,8.07857143 C1.56115521,8.01784759 1.59171077,7.98689521 1.65,7.98571429 Z M1.925,8.35714286 L1.925,10.4 L5.775,10.4 L5.775,8.35714286 L1.925,8.35714286 Z\"\r\n        id=\"Combined-Shape\"\r\n      />\r\n      <path\r\n        d=\"M3.44880952,1.57857143 L5.62619048,1.57857143 C6.11338452,1.57857143 6.50833333,1.97352024 6.50833333,2.46071429 C6.50833333,2.94790833 6.11338452,3.34285714 5.62619048,3.34285714 L3.44880952,3.34285714 C2.96161548,3.34285714 2.56666667,2.94790833 2.56666667,2.46071429 C2.56666667,1.97352024 2.96161548,1.57857143 3.44880952,1.57857143 Z M3.49047619,1.91378571 C3.18277469,1.91378571 2.93333333,2.16322707 2.93333333,2.47092857 C2.93333333,2.77863007 3.18277469,3.02807143 3.49047619,3.02807143 L5.58452381,3.02807143 C5.89222531,3.02807143 6.14166667,2.77863007 6.14166667,2.47092857 C6.14166667,2.16322707 5.89222531,1.91378571 5.58452381,1.91378571 L3.49047619,1.91378571 Z\"\r\n        id=\"Combined-Shape\"\r\n      />\r\n    </g>\r\n  </SvgIcon>\r\n)\r\nDelivery = pure(Delivery)\r\nDelivery.displayName = 'Delivery'\r\nDelivery.muiName = 'SvgIcon'\r\n\r\nexport default Delivery\r\n","import React from 'react'\r\n\r\nimport OrderMode from 'pmt-modules/order/constants/OrderMode'\r\n\r\nimport Delivery from 'pmt-ui/svg-icons/pmt/Delivery'\r\nimport OnSite from 'pmt-ui/svg-icons/pmt/OnSite'\r\nimport TakeAway from 'pmt-ui/svg-icons/pmt/TakeAway'\r\n\r\nconst Icons = {\r\n  [OrderMode.DELIVERY]: <Delivery />,\r\n  [OrderMode.ON_SITE]: <OnSite />,\r\n  [OrderMode.TAKE_AWAY]: <TakeAway />,\r\n}\r\n\r\nconst IconOrderMode = ({ type, ...props }) => React.cloneElement(Icons[type], props)\r\n\r\nexport default IconOrderMode\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { OrderMode } from 'pmt-modules/order'\r\nimport { selectMode, setRestaurantId } from 'pmt-modules/orderFront'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { MenuItem } from 'pmt-ui/Menu'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport IconOrderMode from 'pmt-ui/Icon/IconOrderMode'\r\nimport Select from 'pmt-ui/Select'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport withWidth, { isWidthUp, isWidthDown } from 'pmt-ui/utils/withWidth'\r\n\r\nconst styles = theme => ({\r\n  selectMenu: {\r\n    '&>span:first-child': {\r\n      display: 'none',\r\n    },\r\n  },\r\n  selectValue: {\r\n    [theme.breakpoints.up('md')]: {\r\n      float: 'left',\r\n      lineHeight: '28px',\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      lineHeight: '12px',\r\n    },\r\n  },\r\n  orderIconSelect: {\r\n    [theme.breakpoints.up('md')]: {\r\n      float: 'left',\r\n      height: 28,\r\n      marginRight: theme.spacing(1),\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  orderIcon: {\r\n    marginRight: theme.spacing(1),\r\n    [theme.breakpoints.up('md')]: {\r\n      float: 'left',\r\n      display: 'block',\r\n      height: 36,\r\n    },\r\n  },\r\n})\r\n\r\nconst OrderModeSelect = ({\r\n  classes,\r\n  orderProperties,\r\n  appConfig,\r\n  setRestaurantId,\r\n  selectMode,\r\n  width,\r\n}) =>\r\n  !isNil(orderProperties.mode) && (\r\n    <Select\r\n      onChange={event => {\r\n        EventManager.dispatch(EventManager.Events.ON_HEADER_MODE_SELECT, {\r\n          mode: event.target.value,\r\n        })\r\n        selectMode(event.target.value)\r\n        setRestaurantId(null)\r\n      }}\r\n      classes={{ selectMenu: classes.selectMenu }}\r\n      inputProps={{\r\n        name: 'Mode',\r\n      }}\r\n      disableUnderline={isWidthDown('sm', width)}\r\n      value={orderProperties.mode}\r\n      renderValue={value => (\r\n        <TypographyCustom\r\n          component=\"p\"\r\n          type={isWidthUp('sm', width) ? 164 : 144}\r\n          className=\"u-inline\"\r\n        >\r\n          <IconOrderMode type={value} className={classes.orderIconSelect} />\r\n          <span className={classNames(classes.selectValue)}>\r\n            {orderProperties.isDelivery\r\n              ? tr('order.global.delivery')\r\n              : orderProperties.isOnSite\r\n              ? tr('order.global.on_site')\r\n              : tr('order.global.take_away')}\r\n          </span>\r\n        </TypographyCustom>\r\n      )}\r\n    >\r\n      {appConfig.order.modes.map((mode, index) => (\r\n        <MenuItem key={index} value={mode}>\r\n          <IconOrderMode type={mode} className={classes.orderIcon} />\r\n          <TypographyCustom\r\n            component=\"span\"\r\n            type={isWidthUp('sm', width) ? 164 : 144}\r\n            align=\"center\"\r\n          >\r\n            {OrderMode.DELIVERY === mode\r\n              ? tr('order.global.delivery')\r\n              : OrderMode.ON_SITE === mode\r\n              ? tr('order.global.on_site')\r\n              : tr('order.global.take_away')}\r\n          </TypographyCustom>\r\n        </MenuItem>\r\n      ))}\r\n    </Select>\r\n  )\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nexport default compose(\r\n  withWidth(),\r\n  withStyles(styles),\r\n  connect(mapStateToProps, {\r\n    selectMode,\r\n    setRestaurantId,\r\n  })\r\n)(OrderModeSelect)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport IconOrderMode from 'pmt-ui/Icon/IconOrderMode'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    lineHeight: '16px',\r\n    [theme.breakpoints.up('md')]: {\r\n      lineHeight: '40px',\r\n    },\r\n  },\r\n  orderIcon: {\r\n    marginRight: theme.spacing(1),\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n})\r\n\r\nconst OrderModeText = ({ classes, orderProperties, width }) =>\r\n  !isNil(orderProperties.mode) && (\r\n    <div className={classes.root}>\r\n      <IconOrderMode type={orderProperties.mode} className={classes.orderIcon} />\r\n      <div>\r\n        <TypographyCustom component=\"span\" type={isWidthUp('sm', width) ? 164 : 144}>\r\n          {orderProperties.isDelivery && tr('order.global.delivery')}\r\n          {orderProperties.isOnSite && tr('order.global.on_site')}\r\n          {orderProperties.isTakeAway && tr('order.global.take_away')}\r\n        </TypographyCustom>\r\n      </div>\r\n    </div>\r\n  )\r\n\r\nexport default compose(withWidth(), withStyles(styles))(OrderModeText)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet AccountCircle = props => (\r\n  <SvgIcon {...props}>\r\n    <path fill=\"#919CA7\" d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z\" />\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n  </SvgIcon>\r\n)\r\nAccountCircle = pure(AccountCircle)\r\nAccountCircle.displayName = 'AccountCircle'\r\nAccountCircle.muiName = 'SvgIcon'\r\n\r\nexport default AccountCircle\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet NavigationArrowDropDown = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M7 10l5 5 5-5z\"/>\r\n  </SvgIcon>\r\n);\r\nNavigationArrowDropDown = pure(NavigationArrowDropDown);\r\nNavigationArrowDropDown.displayName = 'NavigationArrowDropDown';\r\nNavigationArrowDropDown.pmtName = 'SvgIcon';\r\n\r\nexport default NavigationArrowDropDown;","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\n\r\nimport { getAuth } from 'pmt-modules/auth/selectors'\r\nimport { getRoute, redirectTo, goBack } from 'pmt-modules/routing'\r\nimport { logout } from 'pmt-modules/auth/actions'\r\nimport { fetchUserMe, getUserMe, isFetchingUserMe } from 'pmt-modules/userMe'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport AccountCircle from 'pmt-ui/svg-icons/action/account-circle'\r\nimport ArrowDropDown from 'pmt-ui/svg-icons/navigation/arrow-drop-down'\r\nimport Menu, { MenuItem } from 'pmt-ui/Menu'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport { ButtonLink } from '../../Button'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    justifyContent: 'flex-end',\r\n    alignItems: 'center',\r\n  },\r\n  wrapper: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  menuTriggerButton: {\r\n\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    margin: 0,\r\n    font: 'inherit',\r\n    color: 'inherit',\r\n    cursor: 'pointer',\r\n  },\r\n  link: {\r\n    color: theme.palette.primary.main,\r\n    textDecoration: 'none',\r\n    '&:hover': {\r\n      textDecoration: 'none',\r\n    },\r\n  },\r\n  login: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  icon: {\r\n    width: theme.spacing(4),\r\n    height: theme.spacing(4),\r\n    marginRight: theme.spacing(2),\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginRight: 0,\r\n    },\r\n  },\r\n})\r\n\r\nclass User extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // we can't use withUserMe here since, we may not have auth info yet\r\n    if (!this.props.user && this.props.auth && !this.props.isFetchingMe) {\r\n      this.props.fetchUserMe()\r\n    }\r\n  }\r\n\r\n  state = {\r\n    anchorEl: null,\r\n  }\r\n\r\n  handleRedirectToAccount = () => {\r\n    this.props.redirectTo(getRoute('ORDER__USER__ACCOUNT'), {\r\n      userId: this.props.user.id,\r\n    })\r\n  }\r\n\r\n  handleLogout = () => {\r\n    this.props.logout()\r\n  }\r\n\r\n  handleClick = event => {\r\n    this.setState({ anchorEl: event.currentTarget })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.setState({ anchorEl: null })\r\n  }\r\n\r\n  handleClickOnLogin = () => {\r\n    this.props.logout() // clean incognito or userlight cookie, the user wants to do a real login\r\n    // we redirect to the current page after the login is complete\r\n    const currentUrl = window.location.toString()\r\n    this.props.redirectTo(getRoute('LOGIN'), null, {\r\n      redirectTo: currentUrl,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { anchorEl } = this.state\r\n    const { auth, classes, isFetchingMe, user, width } = this.props\r\n\r\n    if (isFetchingMe) {\r\n      return null\r\n    }\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        {!auth || !user ? (\r\n          <ButtonLink\r\n            className={classNames(classes.wrapper, classes.link)}\r\n            onClick={this.handleClickOnLogin}\r\n          >\r\n            <AccountCircle className={classes.icon} />\r\n            <TypographyCustom\r\n              type={isWidthUp('sm', width) ? 164 : 144}\r\n              className={classes.login}\r\n              skipColor\r\n              component=\"span\"\r\n            >\r\n              {tr('order.global.login')}\r\n            </TypographyCustom>\r\n          </ButtonLink>\r\n        ) : (\r\n          <React.Fragment>\r\n            <button\r\n              type=\"button\"\r\n              className={classNames(classes.wrapper, classes.menuTriggerButton)}\r\n              aria-owns={anchorEl ? 'user-menu' : null}\r\n              aria-haspopup=\"true\"\r\n              onClick={this.handleClick}\r\n            >\r\n              <AccountCircle className={classes.icon} />\r\n              {isWidthUp('sm', width) && (\r\n                <TypographyCustom type=\"164\" skipColor component=\"span\">\r\n                  {user.fullName}\r\n                </TypographyCustom>\r\n              )}\r\n              <ArrowDropDown />\r\n            </button>\r\n            <Menu\r\n              id=\"user-menu\"\r\n              anchorEl={anchorEl}\r\n              open={Boolean(anchorEl)}\r\n              onClose={this.handleClose}\r\n              anchorReference=\"anchorEl\"\r\n              getContentAnchorEl={null}\r\n              anchorOrigin={{\r\n                vertical: 'bottom',\r\n                horizontal: 'right',\r\n              }}\r\n              transformOrigin={{\r\n                vertical: 'top',\r\n                horizontal: 'right',\r\n              }}\r\n            >\r\n              <MenuItem onClick={this.handleRedirectToAccount}>\r\n                {tr('order.global.account')}\r\n              </MenuItem>\r\n              <MenuItem onClick={this.handleLogout}>{tr('order.global.logout')}</MenuItem>\r\n            </Menu>\r\n          </React.Fragment>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  auth: getAuth(),\r\n  isFetchingMe: isFetchingUserMe(state),\r\n  user: getUserMe(state),\r\n})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withWidth(),\r\n  connect(mapStateToProps, {\r\n    fetchUserMe,\r\n    redirectTo,\r\n    goBack,\r\n    logout,\r\n  })\r\n)(User)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\n\r\nimport { redirectTo, goBack } from 'pmt-modules/routing'\r\nimport { logout } from 'pmt-modules/auth/actions'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport AccountCircle from 'pmt-ui/svg-icons/action/account-circle'\r\nimport ArrowDropDown from 'pmt-ui/svg-icons/navigation/arrow-drop-down'\r\nimport Menu, { MenuItem } from 'pmt-ui/Menu'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport { getUserLightCookie } from 'pmt-modules/auth/utils'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    justifyContent: 'flex-end',\r\n    alignItems: 'center',\r\n  },\r\n  wrapper: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  menuTriggerButton: {\r\n\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    margin: 0,\r\n    font: 'inherit',\r\n    color: 'inherit',\r\n    cursor: 'pointer',\r\n  },\r\n  link: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  login: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  icon: {\r\n    width: theme.spacing(4),\r\n    height: theme.spacing(4),\r\n    marginRight: theme.spacing(2),\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginRight: 0,\r\n    },\r\n  },\r\n})\r\n\r\nclass UserLight extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // we can't use withUserMe here since, we may not have auth info yet\r\n    if (!this.props.user && this.props.auth && !this.props.isFetchingMe) {\r\n      this.props.fetchUserMe()\r\n    }\r\n  }\r\n\r\n  state = {\r\n    anchorEl: null,\r\n  }\r\n\r\n  handleLogout = () => {\r\n    this.props.logout()\r\n  }\r\n\r\n  handleClick = event => {\r\n    this.setState({ anchorEl: event.currentTarget })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.setState({ anchorEl: null })\r\n  }\r\n\r\n  render() {\r\n    const { anchorEl } = this.state\r\n    const { classes, userLight, width } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        {userLight ? (\r\n          <React.Fragment>\r\n            <button\r\n              type=\"button\"\r\n              className={classNames(classes.wrapper, classes.menuTriggerButton)}\r\n              aria-owns={anchorEl ? 'user-menu' : null}\r\n              aria-haspopup=\"true\"\r\n              onClick={this.handleClick}\r\n            >\r\n              <AccountCircle className={classes.icon} />\r\n              {isWidthUp('sm', width) && (\r\n                <TypographyCustom type=\"164\" skipColor component=\"span\">\r\n                  {userLight.email}\r\n                </TypographyCustom>\r\n              )}\r\n              <ArrowDropDown />\r\n            </button>\r\n            <Menu\r\n              id=\"user-menu\"\r\n              anchorEl={anchorEl}\r\n              open={Boolean(anchorEl)}\r\n              onClose={this.handleClose}\r\n              anchorReference=\"anchorEl\"\r\n              getContentAnchorEl={null}\r\n              anchorOrigin={{\r\n                vertical: 'bottom',\r\n                horizontal: 'right',\r\n              }}\r\n              transformOrigin={{\r\n                vertical: 'top',\r\n                horizontal: 'right',\r\n              }}\r\n            >\r\n              <MenuItem onClick={this.handleLogout}>{tr('order.global.logout')}</MenuItem>\r\n            </Menu>\r\n          </React.Fragment>\r\n        ) : null}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  userLight: getUserLightCookie(),\r\n})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withWidth(),\r\n  connect(mapStateToProps, {\r\n    redirectTo,\r\n    goBack,\r\n    logout,\r\n  })\r\n)(UserLight)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst get = state => state.entities.authenticatedUser\r\n\r\nexport const getAuthenticatedUser = createSelector([get], authenticatedUser => {\r\n  if (isNil(authenticatedUser)) {\r\n    return null\r\n  }\r\n\r\n  return authenticatedUser.toJS()\r\n})\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { redirectTo, goBack } from 'pmt-modules/routing'\r\nimport { logout } from 'pmt-modules/auth/actions'\r\nimport { getAuthenticatedUser } from 'pmt-modules/authenticatedUser/selectors'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport AccountCircle from 'pmt-ui/svg-icons/action/account-circle'\r\nimport ArrowDropDown from 'pmt-ui/svg-icons/navigation/arrow-drop-down'\r\nimport Menu, { MenuItem } from 'pmt-ui/Menu'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport { getIncognitoCookie } from 'pmt-modules/auth/utils'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    justifyContent: 'flex-end',\r\n    alignItems: 'center',\r\n  },\r\n  wrapper: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  link: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  login: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  icon: {\r\n    width: theme.spacing(4),\r\n    height: theme.spacing(4),\r\n    marginRight: theme.spacing(2),\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginRight: 0,\r\n    },\r\n  },\r\n})\r\n\r\nclass Incognito extends React.Component {\r\n  state = {\r\n    anchorEl: null,\r\n  }\r\n\r\n  handleLogout = () => {\r\n    this.props.logout()\r\n  }\r\n\r\n  handleClick = event => {\r\n    this.setState({ anchorEl: event.currentTarget })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.setState({ anchorEl: null })\r\n  }\r\n\r\n  render() {\r\n    const { anchorEl } = this.state\r\n    const { classes, incognito, width, authenticatedUser } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        {incognito ? (\r\n          <React.Fragment>\r\n            <div\r\n              className={classes.wrapper}\r\n              aria-owns={anchorEl ? 'user-menu' : null}\r\n              aria-haspopup=\"true\"\r\n              onClick={this.handleClick}\r\n            >\r\n              <AccountCircle className={classes.icon} />\r\n              {isWidthUp('sm', width) && (\r\n                <TypographyCustom type=\"164\" skipColor component=\"span\">\r\n                  {[\r\n                    authenticatedUser.firstName,\r\n                    authenticatedUser.lastName,\r\n                    authenticatedUser.phone,\r\n                  ]\r\n                    .filter(Boolean)\r\n                    .join(' ') || tr('order.global.incognito_header_label')}\r\n                </TypographyCustom>\r\n              )}\r\n              <ArrowDropDown />\r\n            </div>\r\n            <Menu\r\n              id=\"user-menu\"\r\n              anchorEl={anchorEl}\r\n              open={Boolean(anchorEl)}\r\n              onClose={this.handleClose}\r\n              anchorReference=\"anchorEl\"\r\n              getContentAnchorEl={null}\r\n              anchorOrigin={{\r\n                vertical: 'bottom',\r\n                horizontal: 'right',\r\n              }}\r\n              transformOrigin={{\r\n                vertical: 'top',\r\n                horizontal: 'right',\r\n              }}\r\n            >\r\n              <MenuItem onClick={this.handleLogout}>{tr('order.global.forget')}</MenuItem>\r\n            </Menu>\r\n          </React.Fragment>\r\n        ) : null}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  incognito: getIncognitoCookie(),\r\n  authenticatedUser: getAuthenticatedUser(state),\r\n})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withWidth(),\r\n  connect(mapStateToProps, {\r\n    redirectTo,\r\n    goBack,\r\n    logout,\r\n  })\r\n)(Incognito)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet HardwareKeyboardArrowDown = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M8.12,9.29L12,13.17l3.88-3.88c0.39-0.39,1.02-0.39,1.41,0l0,0c0.39,0.39,0.39,1.02,0,1.41l-4.59,4.59 c-0.39,0.39-1.02,0.39-1.41,0l-4.59-4.59c-0.39-0.39-0.39-1.02,0-1.41l0,0C7.09,8.91,7.73,8.9,8.12,9.29z\" />\r\n  </SvgIcon>\r\n)\r\nHardwareKeyboardArrowDown = pure(HardwareKeyboardArrowDown)\r\nHardwareKeyboardArrowDown.displayName = 'HardwareKeyboardArrowDown'\r\nHardwareKeyboardArrowDown.pmtName = 'SvgIcon'\r\n\r\nexport default HardwareKeyboardArrowDown\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet HardwareKeyboardArrowUp = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z\"/>\r\n  </SvgIcon>\r\n);\r\nHardwareKeyboardArrowUp = pure(HardwareKeyboardArrowUp);\r\nHardwareKeyboardArrowUp.displayName = 'HardwareKeyboardArrowUp';\r\nHardwareKeyboardArrowUp.pmtName = 'SvgIcon';\r\n\r\nexport default HardwareKeyboardArrowUp;\r\n","const styles = theme => ({\r\n  root: {},\r\n  date: {\r\n    borderBottom: `1px solid ${theme.pmt.colors.grey300}`,\r\n    cursor: 'pointer',\r\n  },\r\n  slotContainer: {\r\n    overflow: 'hidden',\r\n    height: 0,\r\n    opacity: 0,\r\n    transition: 'opacity 0.3s ease-in',\r\n  },\r\n  slot: {\r\n    float: 'left',\r\n    width: 50,\r\n    padding: '0.35rem 0.5rem',\r\n    margin: '5px 5px 0 0',\r\n    textAlign: 'center',\r\n    fontSize: 12,\r\n    border: `1px solid ${theme.pmt.colors.grey500}`,\r\n    borderRadius: 3,\r\n    userSelect: 'none',\r\n    '&:hover': {\r\n      color: theme.palette.primary.main,\r\n      borderColor: theme.palette.primary.main,\r\n    },\r\n  },\r\n  slotSelected: {\r\n    background: theme.palette.primary.main,\r\n    color: theme.palette.getContrastText(theme.palette.primary.main),\r\n    '&:hover': {\r\n      color: theme.palette.getContrastText(theme.palette.primary.main),\r\n    },\r\n  },\r\n  slotAsap: {\r\n    width: '160px !important',\r\n  },\r\n  dateIcon: {\r\n    float: 'right',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  errorMessage: {\r\n    color: theme.pmt.colors.red800,\r\n  },\r\n  textInitial: {\r\n    textTransform: 'initial',\r\n  },\r\n  white: {\r\n    color: theme.palette.getContrastText(theme.palette.primary.main),\r\n  },\r\n  colorPrimary: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  dateButtonReset: {\r\n    background: 'none',\r\n    border: 'none',\r\n    width: '100%',\r\n    textAlign: 'left',\r\n    font: 'inherit',\r\n    color: 'inherit',\r\n  },\r\n  blockContainer: {\r\n    padding: theme.spacing(2),\r\n  },\r\n\r\n  // type big specific styles\r\n  bigSlotContainerSelected: {\r\n    height: 'auto',\r\n    padding: theme.spacing(2),\r\n    paddingTop: 0,\r\n    opacity: 1,\r\n    [theme.breakpoints.down('xs')]: {\r\n      padding: 0,\r\n      paddingBottom: theme.spacing(2),\r\n    },\r\n  },\r\n  bigDateLabel: {\r\n    display: 'block',\r\n    padding: `${theme.spacing(2)}px 0`,\r\n    lineHeight: '35px',\r\n    cursor: 'pointer',\r\n  },\r\n  bigDateIcon: {\r\n    width: 35,\r\n    height: 35,\r\n  },\r\n  bigRadioButton: {},\r\n  bigRadioButtonLabel: {\r\n    cursor: 'pointer',\r\n    [theme.breakpoints.down('xs')]: {\r\n      fontSize: 14,\r\n    },\r\n  },\r\n\r\n  // type small specific styles\r\n  smallSlotContainerSelected: {\r\n    height: 'auto',\r\n    padding: theme.spacing(0.5),\r\n    paddingTop: 0,\r\n    opacity: 1,\r\n  },\r\n  smallDateLabel: {\r\n    display: 'block',\r\n    padding: `${theme.spacing(0.5)}px 0`,\r\n    lineHeight: '25px',\r\n    cursor: 'pointer',\r\n  },\r\n  smallDateIcon: {\r\n    width: 25,\r\n    height: 25,\r\n  },\r\n  smallRadioButton: {\r\n    height: 25,\r\n  },\r\n  smallRadioButtonLabel: {\r\n    height: 25,\r\n    lineHeight: '25px',\r\n    cursor: 'pointer',\r\n  },\r\n  slotRow: {\r\n    overflow: 'hidden',\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n    alignItems: 'center',\r\n    maxWidth: 300,\r\n  },\r\n  bigButton: {\r\n    width: '100%',\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  dueDateLabel: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n  },\r\n})\r\n\r\nexport default styles\r\n","const ARROW_KEYS = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown']\r\n\r\n/**\r\n * Ensures Left/Up moves focus (and selection) to the previous radio and Right/Down to the\r\n * next one within the same named radio group, wrapping around at the edges.\r\n * Without this, once an option in the group is selected, the other option(s) become\r\n * unreachable via Tab alone.\r\n */\r\nexport const handleRadioGroupArrowKeyDown = groupName => event => {\r\n  if (!ARROW_KEYS.includes(event.key)) {\r\n    return\r\n  }\r\n\r\n  const radios = Array.from(document.querySelectorAll(`input[name=\"${groupName}\"]:not([disabled])`))\r\n  const currentIndex = radios.indexOf(event.target)\r\n\r\n  if (currentIndex === -1 || radios.length < 2) {\r\n    return\r\n  }\r\n\r\n  event.preventDefault()\r\n\r\n  const direction = event.key === 'ArrowLeft' || event.key === 'ArrowUp' ? -1 : 1\r\n  const nextRadio = radios[(currentIndex + direction + radios.length) % radios.length]\r\n\r\n  nextRadio.focus()\r\n  nextRadio.click()\r\n}\r\n\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\nimport classNames from 'classnames'\r\n\r\nimport Hidden from '@material-ui/core/Hidden'\r\n\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getForDay, isSlotInOpeningHours, getOpeningHours } from 'pmt-modules/orderSettings'\r\nimport { selectSlot, selectDay, setDueDateAsap, resetDueDate } from 'pmt-modules/orderPlugin'\r\n\r\nimport {\r\n  getMs,\r\n  isSameDay,\r\n  getHourAndMinuteFromMs,\r\n  getMsFromHour,\r\n  getMsFromMinute,\r\n  getPmtDayIndex,\r\n} from 'pmt-utils/date'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { Radio } from 'pmt-ui/Radio'\r\nimport Select from 'pmt-ui/Select'\r\nimport { MenuItem } from 'pmt-ui/Menu'\r\nimport HardwareKeyboardArrowDown from 'pmt-ui/svg-icons/hardware/keyboard-arrow-down'\r\nimport HardwareKeyboardArrowUp from 'pmt-ui/svg-icons/hardware/keyboard-arrow-up'\r\n\r\nimport Button, { ButtonLink } from '../Button'\r\nimport BlockContainer from '../BlockContainer'\r\nimport styles from './styles'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { handleRadioGroupArrowKeyDown } from '../../utils/radioGroupKeyboardNav'\r\n\r\nconst Type = {\r\n  BIG: 'big',\r\n  SMALL: 'small',\r\n}\r\n\r\nclass Slots extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    props.updateUI({\r\n      showSlots: props.showSlots,\r\n    })\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const { orderProperties, ui, updateUI } = nextProps\r\n\r\n    // if there's no correct due date\r\n    if (\r\n      !orderProperties.isAsap &&\r\n      (isNil(orderProperties.slot) || isNil(orderProperties.day)) &&\r\n      !ui.showSlots\r\n    ) {\r\n      updateUI({\r\n        showSlots: true,\r\n      })\r\n    }\r\n  }\r\n\r\n  toggleSlotShow = () => {\r\n    EventManager.dispatch(EventManager.Events.ON_CHANGE_SLOT)\r\n    this.props.updateUI({\r\n      showSlots: !this.props.ui.showSlots,\r\n    })\r\n  }\r\n\r\n  renderSelect(day) {\r\n    const { type, orderProperties, selectSlot } = this.props\r\n\r\n    return (\r\n      <Select\r\n        onChange={event => {\r\n          selectSlot(event.target.value, getMs(day.date))\r\n        }}\r\n        inputProps={{\r\n          name: tr('order.slots.schedules'),\r\n        }}\r\n        value={isNil(orderProperties.slot) ? day.slots[0].value : orderProperties.slot}\r\n        renderValue={value => {\r\n          const hourData = getHourAndMinuteFromMs(value)\r\n          let slotValue = hourData.hour < 10 ? `0${hourData.hour}` : `${hourData.hour}`\r\n          slotValue +=\r\n            hourData.minute < 10 ? `    :    0${hourData.minute}` : `    :    ${hourData.minute}`\r\n          return (\r\n            <TypographyCustom\r\n              component=\"span\"\r\n              type={type === Type.BIG ? '164' : '144'}\r\n              align=\"center\"\r\n            >\r\n              {slotValue}\r\n            </TypographyCustom>\r\n          )\r\n        }}\r\n      >\r\n        {day.slots.map((slot, index) => {\r\n          let slotValue =\r\n            slot.hourData.hour < 10 ? `0${slot.hourData.hour}` : `${slot.hourData.hour}`\r\n          slotValue +=\r\n            slot.hourData.minute < 10\r\n              ? `    :    0${slot.hourData.minute}`\r\n              : `    :    ${slot.hourData.minute}`\r\n          return (\r\n            <MenuItem key={index} value={slot.value}>\r\n              <TypographyCustom\r\n                component=\"span\"\r\n                type={type === Type.BIG ? '164' : '144'}\r\n                align=\"center\"\r\n              >\r\n                {slotValue}\r\n              </TypographyCustom>\r\n            </MenuItem>\r\n          )\r\n        })}\r\n      </Select>\r\n    )\r\n  }\r\n\r\n  renderDay(day, index, isSelectedDay) {\r\n    const {\r\n      classes,\r\n      type,\r\n      orderProperties,\r\n      selectDay,\r\n      selectSlot,\r\n      setDueDateAsap,\r\n      openingHours,\r\n      hideSubmit = true,\r\n      onSubmit,\r\n    } = this.props\r\n\r\n    let dateLabel = day.date.format('dddd D MMMM')\r\n    let isInOpeningHours = false\r\n    if (day.isToday) {\r\n      dateLabel = tr('order.global.today')\r\n\r\n      // the API constants for day index is one below the returned value from moment\r\n      // TODO: refactor / optimize this\r\n      const now = moment()\r\n      const weekdayIndex = getPmtDayIndex(now)\r\n      const openingHoursForNow = getForDay(openingHours, weekdayIndex)\r\n      isInOpeningHours = isSlotInOpeningHours(\r\n        openingHoursForNow,\r\n        getMsFromHour(parseInt(now.format('HH'), 10)) +\r\n          getMsFromMinute(parseInt(now.format('mm'), 10)),\r\n        orderProperties.delay\r\n      )\r\n    }\r\n    dateLabel = `${dateLabel.charAt(0).toUpperCase()}${dateLabel.slice(1)}`\r\n\r\n    return (\r\n      <div key={index} className={classes.date}>\r\n        <button\r\n          type=\"button\"\r\n          className={classNames(classes[`${type}DateLabel`], classes.dateButtonReset)}\r\n          aria-expanded={isSelectedDay}\r\n          onClick={() => {\r\n            if (orderProperties.day !== getMs(day.date)) {\r\n              selectDay(getMs(day.date))\r\n              resetDueDate(null)\r\n            }\r\n          }}\r\n        >\r\n          <TypographyCustom component=\"span\" type={isSelectedDay ? '167' : '164'} skipColor>\r\n            {dateLabel}\r\n          </TypographyCustom>\r\n          {isSelectedDay ? (\r\n            <HardwareKeyboardArrowUp\r\n              className={classNames(classes.dateIcon, classes[`${type}DateIcon`])}\r\n            />\r\n          ) : (\r\n            <HardwareKeyboardArrowDown\r\n              className={classNames(classes.dateIcon, classes[`${type}DateIcon`])}\r\n            />\r\n          )}\r\n        </button>\r\n        <div\r\n          className={\r\n            isSelectedDay\r\n              ? classNames(classes.slotContainer, classes[`${type}SlotContainerSelected`])\r\n              : classes.slotContainer\r\n          }\r\n        >\r\n          {day.isToday && isInOpeningHours && orderProperties.canOrderUsingAsap && (\r\n            <div\r\n              className={classes.slotRow}\r\n              onClick={() => {\r\n                EventManager.dispatch(EventManager.Events.ON_SET_DUE_DATE_ASAP, {\r\n                  mode: orderProperties.mode,\r\n                })\r\n                setDueDateAsap()\r\n              }}\r\n            >\r\n              <Radio\r\n                color=\"primary\"\r\n                name={`dueDateChoice-${index}`}\r\n                className={classNames('u-floatLeft', classes[`${type}RadioButton`])}\r\n                checked={orderProperties.isAsap}\r\n                value=\"asap\"\r\n                inputProps={{ 'aria-labelledby': `asap-radio-label-${index}` }}\r\n                // onChange is needed (in addition to the wrapping div's onClick) so that\r\n                // keyboard-only users (Space on the focused radio) can actually select it\r\n                onChange={() => {\r\n                  EventManager.dispatch(EventManager.Events.ON_SET_DUE_DATE_ASAP, {\r\n                    mode: orderProperties.mode,\r\n                  })\r\n                  setDueDateAsap()\r\n                }}\r\n                onKeyDown={event => {\r\n                  handleRadioGroupArrowKeyDown(`dueDateChoice-${index}`)(event)\r\n                  if (event.key === 'Enter') {\r\n                    event.preventDefault()\r\n                    EventManager.dispatch(EventManager.Events.ON_SET_DUE_DATE_ASAP, {\r\n                      mode: orderProperties.mode,\r\n                    })\r\n                    setDueDateAsap()\r\n                  }\r\n                }}\r\n              />\r\n              <TypographyCustom\r\n                id={`asap-radio-label-${index}`}\r\n                component=\"p\"\r\n                type={type === Type.BIG ? '164' : '144'}\r\n                className={\r\n                  orderProperties.isAsap\r\n                    ? classNames(classes.colorPrimary, classes[`${type}RadioButtonLabel`])\r\n                    : classes[`${type}RadioButtonLabel`]\r\n                }\r\n              >\r\n                {orderProperties.hasDelayOrDeliveryTime\r\n                  ? tr('order.store_locator.slot.as_soon_as_possible', {\r\n                      delay: orderProperties.delayAndDeliveryFormattedAsMin,\r\n                    })\r\n                  : tr('order.global.now')}\r\n              </TypographyCustom>\r\n            </div>\r\n          )}\r\n          <div\r\n            className={classNames(classes.slotRow, {\r\n              'u-marginTop10': type === Type.SMALL,\r\n            })}\r\n          >\r\n            <Radio\r\n              color=\"primary\"\r\n              name={`dueDateChoice-${index}`}\r\n              className={classNames('u-floatLeft', classes[`${type}RadioButton`])}\r\n              checked={!isNil(orderProperties.slot) && !orderProperties.isAsap}\r\n              value=\"not_asap\"\r\n              inputProps={{ 'aria-labelledby': `due-date-radio-label-${index}` }}\r\n              onChange={() => {\r\n                if (\r\n                  orderProperties.day !== getMs(day.date) ||\r\n                  orderProperties.isAsap ||\r\n                  isNil(orderProperties.slot)\r\n                ) {\r\n                  EventManager.dispatch(EventManager.Events.ON_SET_DUE_DATE_SLOT, {\r\n                    mode: orderProperties.mode,\r\n                  })\r\n                  selectSlot(day.slots[0].value, getMs(day.date))\r\n                }\r\n              }}\r\n              onKeyDown={event => {\r\n                handleRadioGroupArrowKeyDown(`dueDateChoice-${index}`)(event)\r\n                if (\r\n                  event.key === 'Enter' &&\r\n                  (orderProperties.day !== getMs(day.date) ||\r\n                    orderProperties.isAsap ||\r\n                    isNil(orderProperties.slot))\r\n                ) {\r\n                  event.preventDefault()\r\n                  EventManager.dispatch(EventManager.Events.ON_SET_DUE_DATE_SLOT, {\r\n                    mode: orderProperties.mode,\r\n                  })\r\n                  selectSlot(day.slots[0].value, getMs(day.date))\r\n                }\r\n              }}\r\n            />\r\n            <TypographyCustom\r\n              id={`due-date-radio-label-${index}`}\r\n\r\n              type={type === Type.BIG ? '164' : '144'}\r\n              component=\"p\"\r\n              className={\r\n                !isNil(orderProperties.slot) && !orderProperties.isAsap\r\n                  ? classNames(classes.colorPrimary, classes[`${type}RadioButtonLabel`])\r\n                  : classes[`${type}RadioButtonLabel`]\r\n              }\r\n              onClick={() => {\r\n                if (\r\n                  orderProperties.day !== getMs(day.date) ||\r\n                  orderProperties.isAsap ||\r\n                  isNil(orderProperties.slot)\r\n                ) {\r\n                  EventManager.dispatch(EventManager.Events.ON_SET_DUE_DATE_SLOT, {\r\n                    mode: orderProperties.mode,\r\n                  })\r\n                  selectSlot(day.slots[0].value, getMs(day.date))\r\n                }\r\n              }}\r\n            >\r\n              {day.isToday && isInOpeningHours && orderProperties.canOrderUsingAsap\r\n                ? tr('order.slots.or_choose_schedule')\r\n                : tr('order.slots.choose_schedule')}\r\n            </TypographyCustom>\r\n            <div className=\"u-paddingBottom5 u-paddingLeft50\">{this.renderSelect(day)}</div>\r\n          </div>\r\n          <Hidden smDown mdUp={hideSubmit}>\r\n            <Button\r\n              size=\"large\"\r\n              disabled={orderProperties.isMissingSlot || orderProperties.isMissingTableNumber}\r\n              classes={{ root: classes.bigButton }}\r\n              onClick={onSubmit}\r\n              label={tr('order.global.continue')}\r\n            />\r\n          </Hidden>\r\n        </div>\r\n      </div>\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      ui,\r\n      type,\r\n      dueDateClassnameColor,\r\n      modificationEnabled,\r\n      orderProperties,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        {ui.showSlots && !isNil(orderProperties.slots) ? (\r\n          <BlockContainer type={BlockContainer.Type.WHITE} mobileType={BlockContainer.Type.WHITE} noBorder>\r\n            {orderProperties.slots.map((day, index) => {\r\n              const isSelected = !isNil(orderProperties.day)\r\n                ? isSameDay(orderProperties.day, day.date)\r\n                : index === 0\r\n              return this.renderDay(day, index, isSelected)\r\n            })}\r\n            {type === Type.SMALL && (\r\n              <React.Fragment>\r\n                {isNil(orderProperties.dueDate) && !orderProperties.isAsap && (\r\n                  <p className={classNames('u-marginTop20', classes.errorMessage)}>\r\n                    {tr('order.error_message.slot_missing')}\r\n                  </p>\r\n                )}\r\n                <Button\r\n                  classes={{ root: 'u-marginTop10' }}\r\n                  variant={type === Type.SMALL ? 'outlined' : 'contained'}\r\n                  disabled={isNil(orderProperties.dueDate) && !orderProperties.isAsap}\r\n                  onClick={this.toggleSlotShow}\r\n                  label={tr('order.global.close')}\r\n                />\r\n              </React.Fragment>\r\n            )}\r\n          </BlockContainer>\r\n        ) : (\r\n          <div className={classes.dueDateLabel}>\r\n            {orderProperties.isAsap ? (\r\n              <div className=\"u-floatLeft\">\r\n                {orderProperties.hasDelayOrDeliveryTime ? (\r\n                  <TypographyCustom className={dueDateClassnameColor} component=\"p\" type=\"167\">\r\n                    {tr('order.store_locator.slot.as_soon_as_possible', {\r\n                      delay: orderProperties.delayAndDeliveryFormattedAsMin,\r\n                    })}\r\n                  </TypographyCustom>\r\n                ) : (\r\n                  <TypographyCustom className={dueDateClassnameColor} component=\"p\" type=\"167\">\r\n                    {tr('order.global.now')}\r\n                  </TypographyCustom>\r\n                )}\r\n              </div>\r\n            ) : (\r\n              !isNil(orderProperties.dueDate) && (\r\n                <TypographyCustom className={dueDateClassnameColor} component=\"p\" type=\"167\">\r\n                  {orderProperties.dueDateFormatted}\r\n                </TypographyCustom>\r\n              )\r\n            )}\r\n            {modificationEnabled && (\r\n              <ButtonLink\r\n                classes={{ root: classNames('u-marginLeft10', dueDateClassnameColor) }}\r\n                onClick={this.toggleSlotShow}\r\n                label={tr('order.global.modify')}\r\n              />\r\n            )}\r\n          </div>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nSlots.defaultProps = {\r\n  dueDateClassnameColor: '',\r\n  showSlots: false,\r\n  modificationEnabled: true,\r\n  onSelectSlot: null,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  openingHours: getOpeningHours(state),\r\n})\r\n\r\nconst SlotsContainer = compose(\r\n  withStyles(styles),\r\n  ui({\r\n    state: {\r\n      showSlots: false,\r\n    },\r\n  }),\r\n  connect(mapStateToProps, {\r\n    selectDay,\r\n    selectSlot,\r\n    setDueDateAsap,\r\n    resetDueDate,\r\n  })\r\n)(Slots)\r\n\r\nSlotsContainer.Type = Type\r\n\r\nexport default SlotsContainer\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\nimport { tr, trOptional } from 'pmt-modules/i18n'\r\n\r\nimport { AuthMode } from 'pmt-modules/auth/constants'\r\nimport { getIncognitoCookie } from 'pmt-modules/auth/utils'\r\nimport { AppConfigContainer } from 'pmt-modules/appConfig'\r\nimport RoutingContainer from 'pmt-modules/routing/components/RoutingContainer'\r\nimport { withUserMe } from 'pmt-modules/userMe'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { makeStyles } from 'pmt-ui/styles'\r\nimport NavigationArrowBack from 'pmt-ui/svg-icons/navigation/arrow-back'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\n\r\nimport Address from './components/Address'\r\nimport BlockContainer from '../BlockContainer'\r\nimport ChangeButton from './components/ChangeButton'\r\nimport TableNumber from './components/TableNumber'\r\nimport OrderModeSelect from './components/OrderModeSelect'\r\nimport OrderModeText from './components/OrderModeText'\r\nimport User from './components/User'\r\nimport UserLight from './components/UserLight'\r\nimport Incognito from './components/Incognito'\r\nimport SlotsContainer from '../Slots'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  hiddenHeader: {\r\n    [theme.breakpoints.up('md')]: {\r\n      marginTop: theme.spacing(-2),\r\n    },\r\n  },\r\n  root: {\r\n    position: 'relative',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    padding: `${theme.spacing(2)}px ${theme.spacing(3)}px`,\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: `${theme.spacing(1)}px ${theme.spacing(1)}px ${theme.spacing(1)}px ${theme.spacing(2)}px`,\r\n      margin: `${theme.spacing(1)}px ${theme.spacing(1)}px 0`,\r\n      borderRadius: theme.shape.borderRadiusLg,\r\n      boxShadow: theme.pmt.modern.shadows.sm,\r\n      zIndex: 1,\r\n    },\r\n  },\r\n  topLevel: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n  },\r\n  title: {\r\n    height: 40,\r\n  },\r\n  leftSide: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n    alignSelf: 'normal',\r\n    minWidth: 0,\r\n    '&>div': {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      [theme.breakpoints.down('sm')]: {\r\n        display: 'block',\r\n        flexDirection: 'column',\r\n        alignItems: 'flex-start',\r\n      },\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      alignSelf: 'center',\r\n    },\r\n  },\r\n  modeText: {\r\n    height: 24,\r\n    lineHeight: '24px',\r\n    whiteSpace: 'nowrap',\r\n  },\r\n  separator: {\r\n    margin: `0 ${theme.spacing(1)}px`,\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  backArea: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    marginLeft: `-${theme.spacing(0.5)}px`,\r\n    marginRight: `${theme.spacing(1)}px`,\r\n    textAlign: 'center',\r\n    color: theme.palette.primary.main,\r\n    float: 'left',\r\n    cursor: 'pointer',\r\n\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    font: 'inherit',\r\n  },\r\n  changeButton: {\r\n    marginLeft: theme.spacing(2),\r\n  },\r\n  logoArea: {\r\n    float: 'left',\r\n    marginRight: theme.spacing(3),\r\n    [theme.breakpoints.down('sm')]: {\r\n      height: 32,\r\n    },\r\n  },\r\n  restaurantLogo: {\r\n    maxWidth: 100,\r\n    maxHeight: 70,\r\n    [theme.breakpoints.down('sm')]: {\r\n      maxHeight: 32,\r\n    },\r\n  },\r\n  user: {\r\n    flex: 1,\r\n  },\r\n  dueDate: {\r\n    marginLeft: theme.spacing(3.5),\r\n    marginTop: theme.spacing(1),\r\n    color: theme.palette.primary.main,\r\n  },\r\n  visibilityHidden: {\r\n    visibility: 'hidden',\r\n  },\r\n}))\r\n\r\nfunction ConditionalUserBlock(props) {\r\n  if (getIncognitoCookie()) {\r\n    // we allow the user to remove its incognito mode\r\n    // so he will be able to connect as real user if he wants afterwards\r\n    return (\r\n      <Incognito\r\n        classes={{\r\n          root: props.classes.user,\r\n        }}\r\n      />\r\n    )\r\n  } else if (props.authenticationMode === AuthMode.NORMAL || !isNil(props.me)) {\r\n    return (\r\n      <User\r\n        classes={{\r\n          root: props.classes.user,\r\n        }}\r\n      />\r\n    )\r\n  } else if (props.authenticationMode === AuthMode.LIGHT) {\r\n    return (\r\n      <UserLight\r\n        classes={{\r\n          root: props.classes.user,\r\n        }}\r\n      />\r\n    )\r\n  }\r\n  return null\r\n}\r\n\r\nclass HeaderView extends React.Component {\r\n  render() {\r\n    const {\r\n      appConfig,\r\n      frontAppConfig,\r\n      backLink,\r\n      classes,\r\n      displayAddress,\r\n      changeButton,\r\n      displayDueDate,\r\n      displayTableNumber,\r\n      displayOrderMode,\r\n      displayOrderModeSelect,\r\n      displayRestaurantLogo,\r\n      displayUser,\r\n      displayTitle,\r\n      // here to handle 2 layout on the same page\r\n      orderProperties,\r\n      computeAddress,\r\n      restaurant,\r\n      width,\r\n      isFetchingMe,\r\n      me,\r\n    } = this.props\r\n\r\n    if (isFetchingMe) {\r\n      return null\r\n    }\r\n\r\n    return (\r\n      <RoutingContainer>\r\n        {({ redirectTo }) => (\r\n          <BlockContainer type={BlockContainer.Type.WHITE} className={classes.root}>\r\n            <div className={classes.topLevel}>\r\n              {/* Back */}\r\n              {backLink && (\r\n                <button\r\n                  type=\"button\"\r\n                  className={classes.backArea}\r\n                  aria-label={trOptional('order.global.back') || 'Back'}\r\n                  onClick={() => (isFunction(backLink) ? backLink() : redirectTo(backLink))}\r\n                >\r\n                  <NavigationArrowBack />\r\n                </button>\r\n              )}\r\n\r\n              {displayRestaurantLogo &&\r\n                restaurant &&\r\n                !isNil(restaurant.logo) &&\r\n                (frontAppConfig.theme.logo.display ? (\r\n                  <div className={classes.logoArea}>\r\n                    <img\r\n                      src={`${restaurant.logo}`}\r\n                      className={classes.restaurantLogo}\r\n                      alt={`${restaurant.name}`}\r\n                    />\r\n                  </div>\r\n                ) : null)}\r\n\r\n              {(displayTitle ||\r\n                displayOrderModeSelect ||\r\n                displayOrderMode ||\r\n                displayAddress ||\r\n                changeButton) && (\r\n                <div className={classes.leftSide}>\r\n                  {/* TITLE */}\r\n                  {displayTitle && (\r\n                    <TypographyCustom type=\"287\" className={classes.title}>\r\n                      {tr('order.global.header.title')}\r\n                    </TypographyCustom>\r\n                  )}\r\n\r\n                  {orderProperties && (\r\n                    <div>\r\n                      {/*\r\n                    We display the mode in select format if props\r\n                  */}\r\n                      {displayOrderModeSelect && (\r\n                        <OrderModeSelect orderProperties={orderProperties} appConfig={appConfig} />\r\n                      )}\r\n                      {/*\r\n                    We display the mode in text format if props\r\n                  */}\r\n                      {displayOrderMode && (\r\n                        <OrderModeText\r\n                          classes={!backLink ? { root: classes.modeText } : {}}\r\n                          orderProperties={orderProperties}\r\n                        />\r\n                      )}\r\n\r\n                      {displayOrderMode && displayAddress && (\r\n                        <TypographyCustom\r\n                          component=\"span\"\r\n                          type={isWidthUp('sm', width) ? 164 : 144}\r\n                          className={classes.separator}\r\n                        >\r\n                          -\r\n                        </TypographyCustom>\r\n                      )}\r\n\r\n                      {displayAddress && (\r\n                        <Address\r\n                          orderProperties={orderProperties}\r\n                          restaurant={restaurant}\r\n                          computeAddress={computeAddress}\r\n                        />\r\n                      )}\r\n\r\n                      {changeButton && (\r\n                        <ChangeButton\r\n                          classes={{\r\n                            root: classes.changeButton,\r\n                          }}\r\n                          orderProperties={orderProperties}\r\n                          onClick={() =>\r\n                            isFunction(changeButton) ? changeButton() : redirectTo(changeButton)\r\n                          }\r\n                        />\r\n                      )}\r\n                    </div>\r\n                  )}\r\n                </div>\r\n              )}\r\n\r\n              {displayUser && (\r\n                <ConditionalUserBlock\r\n                  authenticationMode={appConfig.authentication.mode}\r\n                  me={me}\r\n                  classes={classes}\r\n                />\r\n              )}\r\n            </div>\r\n            {orderProperties && (\r\n              <React.Fragment>\r\n                {orderProperties.isOnSite &&\r\n                  frontAppConfig.hasTableNumber &&\r\n                  displayTableNumber && (\r\n                    <TableNumber\r\n                      classes={{ root: classes.dueDate }}\r\n                      orderProperties={orderProperties}\r\n                    />\r\n                  )}\r\n                {/*\r\n                // we display dueDate only if orderProperties.canOrderUsingSlots\r\n                // because if only asap is enabled, it makes no sense to display \"now\" (without context, and without possibility to change it)\r\n                */}\r\n                {(!orderProperties.isOnSite || !frontAppConfig.hasTableNumber) &&\r\n                  orderProperties.canOrderUsingSlots &&\r\n                  displayDueDate && (\r\n                    <>\r\n                      {/*\r\n                     We allow modification from the header\r\n                     So if the user has to change slot (eg. because the chosen slot is not more available), the form is displayed right away\r\n                     Note: displayDueDate is true on Mobile, but false on Desktop because SideInformation is displayed and already displays the SlotsContainer\r\n                  */}\r\n\r\n                      <SlotsContainer\r\n                        dueDateClassnameColor={classes.dueDate}\r\n                        type={SlotsContainer.Type.SMALL}\r\n                        showSlots={!orderProperties.isAsap && isNil(orderProperties.slot)}\r\n                        orderProperties={orderProperties}\r\n                        modificationEnabled={orderProperties.canOrderUsingSlots}\r\n                        checkCartDiff\r\n                      />\r\n                    </>\r\n                  )}\r\n              </React.Fragment>\r\n            )}\r\n          </BlockContainer>\r\n        )}\r\n      </RoutingContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst HeaderViewWithHOCs = compose(withUserMe)(HeaderView)\r\n\r\nconst Header = ({ displayHeader, restaurant, ...otherProps }) => {\r\n  const classes = useStyles()\r\n\r\n  return (\r\n    <AppConfigContainer>\r\n      {({ appConfig, appConfigPreset, frontAppConfig }) => {\r\n        const shouldHideHeader = !displayHeader || !appConfigPreset.isPluginOrder\r\n\r\n        return (\r\n          <div className={classNames({ [classes.hiddenHeader]: shouldHideHeader })}>\r\n            {!shouldHideHeader && (\r\n              <HeaderViewWithHOCs\r\n                appConfig={appConfig}\r\n                classes={classes}\r\n                frontAppConfig={frontAppConfig}\r\n                restaurant={restaurant}\r\n                {...otherProps}\r\n              />\r\n            )}\r\n          </div>\r\n        )\r\n      }}\r\n    </AppConfigContainer>\r\n  )\r\n}\r\n\r\nHeader.defaultProps = {\r\n  displayHeader: true,\r\n  displayRestaurantLogo: true,\r\n  displayTitle: false,\r\n  backLink: null,\r\n  displayOrderModeSelect: false,\r\n  displayOrderMode: false,\r\n  displayAddress: false,\r\n  changeButton: null,\r\n  displayDueDate: false,\r\n  displayTableNumber: false,\r\n  displayUser: false,\r\n}\r\n\r\nHeader.propTypes = {\r\n  displayHeader: PropTypes.bool,\r\n  displayRestaurantLogo: PropTypes.bool,\r\n  displayTitle: PropTypes.bool,\r\n  displayOrderModeSelect: PropTypes.bool,\r\n  displayOrderMode: PropTypes.bool,\r\n  displayAddress: PropTypes.bool,\r\n  changeButton: PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool]),\r\n  displayDueDate: PropTypes.bool,\r\n  displayUser: PropTypes.bool,\r\n  backLink: PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool]),\r\n}\r\n\r\nexport default withWidth()(Header)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    flex: 1,\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: `${theme.spacing(1)}px ${theme.spacing(1)}px`,\r\n    },\r\n  },\r\n})\r\n\r\nconst PageContent = ({ children, classes }) => (\r\n  <main id=\"main-content\" className={classes.root} tabIndex={-1}>\r\n    {children}\r\n  </main>\r\n)\r\nexport default withStyles(styles)(PageContent)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Button from 'pmt-ui/Button'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\n\r\nimport BlockContainer from '../../BlockContainer'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    width: '100%',\r\n    height: '100%',\r\n    overflow: 'hidden',\r\n    flex: 1,\r\n    zIndex: 99,\r\n    [theme.breakpoints.down('sm')]: {\r\n      // keep fixed position so it doesn't take into account relative parent\r\n      // this allows to handle custom header/footer integration\r\n      position: 'fixed',\r\n      top: 0,\r\n      left: 0,\r\n      padding: 0,\r\n      background: theme.pmt.colors.greyBackground,\r\n    },\r\n    // custom css for plugin with header/footer\r\n    ...theme.pmt.appConfig.errorLayout,\r\n  },\r\n  blockContainer: {\r\n    height: '100%',\r\n    position: 'relative',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    flex: 1,\r\n  },\r\n  error: {\r\n    width: '100%',\r\n    position: 'relative',\r\n  },\r\n  iconInfo: {\r\n    width: 30,\r\n    height: 30,\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  red800: {\r\n    color: theme.pmt.colors.red800,\r\n  },\r\n  button: {\r\n    position: 'absolute',\r\n    left: '50%',\r\n    bottom: 24,\r\n    transform: 'translateX(-50%)',\r\n  },\r\n})\r\n\r\nclass ErrorLayout extends React.PureComponent {\r\n  render() {\r\n    const { error, buttonLabel, buttonAction, classes } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <BlockContainer type={BlockContainer.Type.WHITE} className={classes.blockContainer}>\r\n          <div className={classNames(classes.error, 'u-textAlignCenter')}>\r\n            <ActionInfoOutline className={classNames(classes.iconInfo, classes.red800)} />\r\n            <TypographyCustom type=\"204\" align=\"center\" className={classes.red800}>\r\n              {error}\r\n            </TypographyCustom>\r\n          </div>\r\n          {buttonAction && (\r\n            <Button\r\n              variant=\"contained\"\r\n              color=\"primary\"\r\n              className={classes.button}\r\n              onClick={buttonAction}\r\n            >\r\n              {buttonLabel}\r\n            </Button>\r\n          )}\r\n        </BlockContainer>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ErrorLayout)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport PropTypes from 'prop-types'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\nimport { getAppConfig } from 'pmt-modules/appConfig'\r\n\r\nimport { getOrderProperties } from 'pmt-modules/orderPlugin'\r\nimport AppSecurityContainer from 'pmt-modules/appSecurity/components/AppSecurityContainer'\r\nimport { storageAvailable } from 'pmt-modules/storage'\r\nimport { tr, trOptional } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Footer from './Footer'\r\nimport Header from './Header'\r\nimport PageContent from './PageContent'\r\nimport ErrorLayout from './components/ErrorLayout'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    width: '100%',\r\n    minHeight: '100%',\r\n    position: 'relative',\r\n    padding: theme.spacing(2),\r\n    [theme.breakpoints.down('sm')]: {\r\n      minHeight: '100%',\r\n      padding: 0,\r\n      paddingBottom: theme.spacing(6),\r\n      background: theme.pmt.colors.greyBackground,\r\n    },\r\n  },\r\n  whiteBackground: {\r\n    background: theme.pmt.colors.white,\r\n  },\r\n\r\n  skipLink: {\r\n    position: 'absolute',\r\n    top: -1000,\r\n    left: 0,\r\n    zIndex: 2000,\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(2)}px`,\r\n    background: theme.pmt.colors.white,\r\n    color: theme.palette.getContrastText(theme.pmt.colors.white),\r\n    border: `2px solid ${theme.palette.primary.main}`,\r\n    borderRadius: theme.shape.borderRadius,\r\n    '&:focus': {\r\n      top: theme.spacing(1),\r\n      left: theme.spacing(1),\r\n    },\r\n  },\r\n\r\n  localStorage: {\r\n    position: 'absolute',\r\n    width: '100%',\r\n    minHeight: 'calc(100% + 32px)',\r\n    top: 0,\r\n    left: 0,\r\n    background: 'rgba(0,0,0,.9)',\r\n    zIndex: 1500,\r\n  },\r\n  localStorageContainer: {\r\n    background: 'white',\r\n    position: 'absolute',\r\n    top: '50%',\r\n    left: '50%',\r\n    marginTop: '-100px',\r\n    marginLeft: '-255px',\r\n    width: '510px',\r\n    padding: '20px',\r\n    textAlign: 'center',\r\n    fontSize: '0.95em',\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '360px',\r\n      marginLeft: '-180px',\r\n      marginTop: '-125px',\r\n    },\r\n  },\r\n  localStorageTitle: {\r\n    fontSize: '1.5em',\r\n    fontWeight: '700',\r\n    paddingBottom: '0.8em',\r\n    marginTop: '0.1em',\r\n    marginBottom: '1em',\r\n    borderBottom: '2px solid #EFEFF4',\r\n  },\r\n  localStorageCaption: {\r\n    marginTop: '1em',\r\n    marginBottom: '1em',\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginBottom: '1em',\r\n    },\r\n  },\r\n})\r\n\r\nclass OrderPage extends React.Component {\r\n  componentDidCatch(error, info) {\r\n    console.log(error, info)\r\n  }\r\n\r\n  renderChildren() {\r\n    const { children } = this.props\r\n\r\n    if (isFunction(children)) {\r\n      return children()\r\n    }\r\n\r\n    return children\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      headerProps,\r\n      orderPluginProperties,\r\n      isWhiteBackground,\r\n      classes,\r\n      appConfig,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    return (\r\n      <div\r\n        className={classNames(classes.root, {\r\n          [classes.whiteBackground]: isWhiteBackground,\r\n        })}\r\n      >\r\n        {storageAvailable('localStorage') ? (\r\n          <AppSecurityContainer>\r\n            {({ appSecurityError }) =>\r\n              appSecurityError ? (\r\n                <ErrorLayout error={appSecurityError.localizedMessage} />\r\n              ) : !isNil(orderPluginProperties.configurationError) ? (\r\n                <ErrorLayout error={orderPluginProperties.configurationError} />\r\n              ) : (\r\n                <React.Fragment>\r\n                  <a href=\"#main-content\" className={classes.skipLink}>\r\n                    {trOptional('global.skip_to_content') || 'Skip to main content'}\r\n                  </a>\r\n                  <Header {...headerProps} {...otherProps} />\r\n                  <PageContent>{this.renderChildren()}</PageContent>\r\n                  <Footer appConfig={appConfig} />\r\n                </React.Fragment>\r\n              )\r\n            }\r\n          </AppSecurityContainer>\r\n        ) : (\r\n          <div className={classes.localStorage}>\r\n            <div className={classes.localStorageContainer}>\r\n              <div className={classes.localStorageTitle}>\r\n                {tr('global.cookies.disabled_modal.title')}\r\n              </div>\r\n              <span>{tr('global.cookies.disabled_modal.browser')}</span>\r\n              <p\r\n                className={classes.localStorageCaption}\r\n                dangerouslySetInnerHTML={{\r\n                  __html: tr('global.cookies.disabled_modal.caption', {\r\n                    bold: `<b>`,\r\n                    boldEnd: `</b>`,\r\n                  }),\r\n                }}\r\n              />\r\n            </div>\r\n          </div>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nOrderPage.propTypes = {\r\n  /**\r\n   * The page content Component.\r\n   * the view to display when not loading\r\n   *\r\n   * Can be a function that will received:\r\n   * - isFetchingRestaurantsGroup: boolean\r\n   * - restaurantsGroup: the selectedRGroup\r\n   * - domain: the selected domain\r\n   */\r\n  children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\r\n  // force white background (use on mobile)\r\n  isWhiteBackground: PropTypes.bool,\r\n}\r\n\r\nOrderPage.defaultProps = {\r\n  isWhiteBackground: false,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  orderPluginProperties: getOrderProperties(state),\r\n  appConfig: getAppConfig(state),\r\n})\r\n\r\nexport default compose(connect(mapStateToProps, {}), withStyles(styles))(OrderPage)\r\n","import React from 'react'\r\n\r\nimport { OrderMode } from 'pmt-modules/order'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport IconOrderMode from 'pmt-ui/Icon/IconOrderMode'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport BlockContainer from '../../components/BlockContainer'\r\nimport { ButtonSquare } from '../../components/Button'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  button: {\r\n    color: theme.palette.primary.main,\r\n    margin: '0 auto',\r\n    marginTop: theme.spacing(2),\r\n    '&:hover': {\r\n      background: theme.palette.primary.main,\r\n      color: theme.palette.getContrastText('#000'),\r\n    },\r\n    [theme.breakpoints.down('xs')]: {\r\n      color: 'inherit',\r\n    },\r\n  },\r\n  buttonfloatingArrow: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  blockContainer: {\r\n    width: '100%',\r\n    marginTop: theme.spacing(2),\r\n    paddingTop: theme.spacing(13),\r\n    paddingBottom: theme.spacing(13),\r\n    [theme.breakpoints.down('xs')]: {\r\n      paddingTop: theme.spacing(4),\r\n      paddingBottom: theme.spacing(4),\r\n    },\r\n  },\r\n  modesWrapper: {\r\n    maxWidth: 800,\r\n    margin: '0 auto',\r\n  },\r\n})\r\n\r\nconst View = ({ classes, appConfig, onSelectMode }) => (\r\n  <Grid spacing={0} className={classes.view} container justify=\"center\">\r\n    <BlockContainer\r\n      type={BlockContainer.Type.WHITE}\r\n      mobileType={BlockContainer.Type.GREY}\r\n      className={classes.blockContainer}\r\n    >\r\n      <Hidden xsDown>\r\n        <TypographyCustom type=\"284\" align=\"center\" className=\"u-marginBottom40\">\r\n          {tr('order.mode.choose_mode')}\r\n        </TypographyCustom>\r\n      </Hidden>\r\n      <Hidden smUp>\r\n        <TypographyCustom type=\"204\" align=\"center\" className=\"u-marginBottom20\">\r\n          {tr('order.mode.choose_mode')}\r\n        </TypographyCustom>\r\n      </Hidden>\r\n      <Grid container justify=\"center\" className={classes.modesWrapper} spacing={0}>\r\n        {appConfig.order.modes.map((mode, index) => (\r\n          <ButtonSquare\r\n            key={index}\r\n            classes={{\r\n              root: classes.button,\r\n              floatingArrow: classes.buttonfloatingArrow,\r\n            }}\r\n            icon={<IconOrderMode type={mode} />}\r\n            label={\r\n              OrderMode.DELIVERY === mode\r\n                ? tr('order.global.delivery')\r\n                : OrderMode.ON_SITE === mode\r\n                ? tr('order.global.on_site')\r\n                : tr('order.global.take_away')\r\n            }\r\n            onClick={() => onSelectMode(parseInt(mode, 10))}\r\n          />\r\n        ))}\r\n      </Grid>\r\n    </BlockContainer>\r\n  </Grid>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\n\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { OrderMode } from 'pmt-modules/order'\r\nimport { OrderPluginUrlCheckerContainer, setDueDateAsap } from 'pmt-modules/orderPlugin'\r\nimport { selectMode, setRestaurantId } from 'pmt-modules/orderFront'\r\n\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\nimport View from './View'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass OrderModePage extends React.PureComponent {\r\n  handleSelectMode = mode => {\r\n    EventManager.dispatch(EventManager.Events.ON_MODE_SELECT, {\r\n      mode,\r\n    })\r\n    this.props.selectMode(mode)\r\n    if (mode === OrderMode.ON_SITE && this.props.orderAppConfig.hasTableNumber) {\r\n      this.props.setDueDateAsap()\r\n    }\r\n    this.props.setRestaurantId(null)\r\n    this.props.redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n  }\r\n\r\n  render() {\r\n    const { appConfig, location, width } = this.props\r\n\r\n    return (\r\n      <OrderPage\r\n        headerProps={{\r\n          displayHeader: isWidthUp('md', width),\r\n          displayTitle: true,\r\n          displayUser: true,\r\n        }}\r\n        location={location}\r\n      >\r\n        <OrderPluginUrlCheckerContainer\r\n          location={location}\r\n          verifyMode\r\n          verifyRestaurantId\r\n          verifyAddress\r\n          verifyIsAsap\r\n          verifyTableNumber\r\n        >\r\n          <SendEventContainer event={EventManager.Events.ON_PAGE_LOADED}>\r\n            <View appConfig={appConfig} onSelectMode={this.handleSelectMode} />\r\n          </SendEventContainer>\r\n        </OrderPluginUrlCheckerContainer>\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withScrollToTop(),\r\n  connect(mapStateToProps, {\r\n    redirectTo,\r\n    selectMode,\r\n    setRestaurantId,\r\n    setDueDateAsap,\r\n  }),\r\n  withWidth()\r\n)(OrderModePage)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getOrderProperties } from 'pmt-modules/orderFront'\r\n\r\nimport { fetchCatalog } from '../../actions'\r\nimport {\r\n  getErrorCatalog,\r\n  isFetchingCatalog,\r\n  getCatalogLocale,\r\n  getCatalogFormatted,\r\n} from '../../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the restaurant's news and pass it to the children\r\n *\r\n * Requirements:\r\n * - restaurantId\r\n *\r\n * see `withCatalog`\r\n */\r\nclass CatalogContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.loadCatalog(props)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    this.loadCatalog(nextProps)\r\n  }\r\n\r\n  shouldUpdateCatalog = ({\r\n    catalog,\r\n    catalogLocale,\r\n    isFetching,\r\n    orderFrontProperties,\r\n    restaurantId,\r\n    catalogError,\r\n  }) => {\r\n    if (isFetching || !isNil(catalogError)) {\r\n      return false\r\n    }\r\n\r\n    const { mode, locale, dueDate } = orderFrontProperties\r\n\r\n    if (!isNil(mode) && !isNil(restaurantId)) {\r\n      if (isNil(catalog)) {\r\n        return true\r\n      }\r\n\r\n      if (\r\n        catalog.restaurantId !== restaurantId ||\r\n        catalog.mode !== mode ||\r\n        catalogLocale !== locale ||\r\n        // user changed his dueDate after fetching catalog\r\n        (!isNil(dueDate) && catalog.dueDate !== dueDate)\r\n      ) {\r\n        return true\r\n      }\r\n    }\r\n\r\n    return false\r\n  }\r\n\r\n  loadCatalog(props) {\r\n    const { mode, locale, dueDate } = props.orderFrontProperties\r\n\r\n    if (this.shouldUpdateCatalog(props)) {\r\n      props.fetchCatalog(props.restaurantId, dueDate, mode, {\r\n        locale,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { isFetching, catalog, catalogError, CatalogWrappedComponent, ...otherProps } = this.props\r\n\r\n    return (\r\n      <CatalogWrappedComponent\r\n        isFetchingCatalog={isFetching}\r\n        catalog={catalog}\r\n        catalogError={catalogError}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nCatalogContainer.propTypes = {\r\n  fetchCatalog: PropTypes.func.isRequired,\r\n  isFetching: PropTypes.bool,\r\n  catalog: PropTypes.object,\r\n  catalogError: PropTypes.object,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  catalog: getCatalogFormatted(state),\r\n  catalogError: getErrorCatalog(state),\r\n  catalogLocale: getCatalogLocale(state),\r\n  isFetching: isFetchingCatalog(state),\r\n  orderFrontProperties: getOrderProperties(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    fetchCatalog,\r\n  }\r\n)(CatalogContainer)\r\n","import React from 'react'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport CatalogContainer from './CatalogContainer'\r\n\r\nconst getRestaurantIdOnProps = props => {\r\n  if (!isNil(props.routeParams) && !isEmpty(props.routeParams.restaurantId)) {\r\n    return props.routeParams.restaurantId\r\n  }\r\n  if (!isNil(props.params) && !isEmpty(props.params.restaurantId)) {\r\n    return props.params.restaurantId\r\n  }\r\n\r\n  return get(props, 'orderProperties.restaurantId', null)\r\n}\r\n\r\n/**\r\n * Add the CatalogContainer as HOC for the given component\r\n * Requirements\r\n * - restaurantId in props or routeParams\r\n */\r\nconst withCatalog = CatalogWrappedComponent => {\r\n  return props => (\r\n    <CatalogContainer\r\n      CatalogWrappedComponent={CatalogWrappedComponent}\r\n      restaurantId={getRestaurantIdOnProps(props)}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nexport default withCatalog\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport {\r\n  makeGetCategory,\r\n  makeGetFirstSelectableCategory,\r\n  getSelectedCategory,\r\n  getParentCategories,\r\n} from 'pmt-modules/catalog/selectors'\r\n\r\nclass CategoryContainer extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      CategoryWrappedComponent,\r\n      categoryId,\r\n      category,\r\n      selectedCategory,\r\n      parentCategories,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    return (\r\n      <CategoryWrappedComponent\r\n        categoryId={categoryId}\r\n        category={category}\r\n        selectedCategory={selectedCategory}\r\n        parentCategories={parentCategories}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nCategoryContainer.propTypes = {\r\n  categoryId: PropTypes.string,\r\n}\r\nconst mapStateToProps = (state, props) => {\r\n  const getCategory = makeGetCategory()\r\n  const getFirstSelectableCategory = makeGetFirstSelectableCategory()\r\n  const parentCategories = getParentCategories(state)\r\n\r\n  return {\r\n    category: getCategory(state, { ...props, parentCategories }),\r\n    firstSelectableCategory: getFirstSelectableCategory(state, props),\r\n    selectedCategory: getSelectedCategory(state),\r\n    parentCategories,\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {})(CategoryContainer)\r\n","import Immutable from 'immutable'\r\n\r\nimport { GetCatalogAction, CatalogAction, RefreshCatalogAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './constants'\r\nexport * from './components'\r\nexport * from './format'\r\nexport * from './selectors'\r\nexport * from './utils'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  /**\r\n   * each order mode has its own catalog, that should look like this\r\n   * [mode]: {\r\n   *  data: null,\r\n   *  isFetching: false,\r\n   *  error: null,\r\n   *  locale: null,\r\n   * }\r\n   */\r\n  // handle category movements\r\n  selectedCategory: null,\r\n  parentCategories: null,\r\n})\r\n\r\nexport const catalogReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case GetCatalogAction.REQUEST:\r\n      return state.mergeIn([String(action.data.mode)], {\r\n        data: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n        locale: action.data.locale,\r\n      })\r\n\r\n    case RefreshCatalogAction.SUCCESS:\r\n    case GetCatalogAction.SUCCESS:\r\n      return state.mergeIn([String(action.data.mode)], {\r\n        data: Immutable.fromJS(action.response),\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n        locale: action.data.locale,\r\n      })\r\n\r\n    case RefreshCatalogAction.FAILURE:\r\n    case GetCatalogAction.FAILURE:\r\n      return state.mergeIn([String(action.data.mode)], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n        locale: action.data.locale,\r\n      })\r\n\r\n    case GetCatalogAction.RESET:\r\n      return state.set(DEFAULT)\r\n\r\n    case RefreshCatalogAction.REQUEST:\r\n      return state\r\n        .mergeIn([String(action.data.mode)], { isFetching: true })\r\n        .mergeIn([String(action.data.mode)], { locale: action.data.locale })\r\n\r\n    case CatalogAction.SET_SELECTED_CATEGORY:\r\n      return state.merge({\r\n        selectedCategory: action.category || null,\r\n      })\r\n\r\n    case CatalogAction.SET_PARENT_CATEGORIES:\r\n      return state.merge({\r\n        parentCategories: action.parentCategories || [],\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNil from 'lodash/isNil'\r\nimport isNull from 'lodash/isNull'\r\nimport { connect } from 'react-redux'\r\n\r\nimport {\r\n  fetchRestaurant,\r\n  makeGetRestaurant,\r\n  makeGetRestaurantError,\r\n  makeIsFetchingRestaurant,\r\n  makeGetRestaurantFromRestaurantList,\r\n  setRestaurant,\r\n} from '../'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the restaurant and pass it to the children\r\n *\r\n * Requirements:\r\n * - restaurantId\r\n *\r\n * see `withRestaurant`\r\n *\r\n */\r\nclass RestaurantContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // check if we are not already loading a restaurant\r\n    if ((isNull(props.restaurant) || props.forceRefresh) && !props.isFetchingRestaurant) {\r\n      this.loadRestaurant(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n\r\n    if (\r\n      nextProps.restaurantId !== props.restaurantId &&\r\n      ((!props.restaurant || props.restaurant.id) && nextProps.restaurantId)\r\n    ) {\r\n      // we check if the new restaurant id exists in the list of the restaurant store\r\n      if (!nextProps.restaurantFromRestaurantList) {\r\n        this.loadRestaurant(nextProps)\r\n      } else {\r\n        // if it does and the id is not the same of the current restaurant,\r\n        // we set it as our new restaurant\r\n        nextProps.setRestaurant(nextProps.restaurantFromRestaurantList)\r\n      }\r\n    }\r\n  }\r\n\r\n  loadRestaurant(props) {\r\n    const restaurantId = props.restaurantId\r\n\r\n    if (!isNil(restaurantId)) {\r\n      props.fetchRestaurant(restaurantId)\r\n    } else {\r\n      // TODO : display error message?\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      RestaurantWrappedComponent,\r\n      children,\r\n      isFetchingRestaurant,\r\n      restaurant,\r\n      restaurantId,\r\n      restaurantError,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    if (isNil(RestaurantWrappedComponent)) {\r\n      return children({\r\n        isFetchingRestaurant,\r\n        restaurant,\r\n        restaurantId,\r\n        restaurantError,\r\n        ...otherProps,\r\n      })\r\n    }\r\n\r\n    return (\r\n      <RestaurantWrappedComponent\r\n        isFetchingRestaurant={isFetchingRestaurant}\r\n        restaurant={restaurant}\r\n        restaurantId={restaurantId}\r\n        restaurantError={restaurantError}\r\n        children={children}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nRestaurantContainer.propTypes = {\r\n  children: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\r\n  fetchRestaurant: PropTypes.func.isRequired,\r\n  forceRefresh: PropTypes.bool,\r\n  isFetchingRestaurant: PropTypes.bool,\r\n  restaurant: PropTypes.object,\r\n  restaurantId: PropTypes.string,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getRestaurant = makeGetRestaurant()\r\n  const getRestaurantError = makeGetRestaurantError()\r\n  const isFetchingRestaurant = makeIsFetchingRestaurant()\r\n  const getRestaurantFromRestaurantList = makeGetRestaurantFromRestaurantList()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    if (props.restaurant) {\r\n      return {\r\n        restaurant: props.restaurant,\r\n        restaurantError: null,\r\n        isFetchingRestaurant: false,\r\n      }\r\n    }\r\n\r\n    return {\r\n      restaurant: getRestaurant(state, props),\r\n      restaurantError: getRestaurantError(state, props),\r\n      isFetchingRestaurant: isFetchingRestaurant(state, props),\r\n      restaurantFromRestaurantList: getRestaurantFromRestaurantList(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchRestaurant,\r\n    setRestaurant,\r\n  }\r\n)(RestaurantContainer)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNil from 'lodash/isNil'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { getFrontSettings } from 'pmt-modules/appConfig'\r\n\r\nimport {\r\n  fetchRestaurantList,\r\n  fetchRestaurantListByGeoPt,\r\n  isFetchingRestaurantList,\r\n  getRestaurantListError,\r\n} from 'pmt-modules/restaurant'\r\n\r\nimport {\r\n  getOrderProperties,\r\n  makeGetOrderRestaurantListData,\r\n} from 'pmt-modules/orderFront/selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the restaurant list and pass it to the children\r\n *\r\n */\r\nclass OrderRestaurantListContainer extends React.PureComponent {\r\n  componentDidMount() {\r\n    if (this.props.cancelIP) {\r\n      return\r\n    }\r\n\r\n    this.loadRestaurantList(this.props)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const { mode } = this.props\r\n\r\n    if (!isNil(mode) && !isNil(nextProps.mode) && mode !== nextProps.mode) {\r\n      this.loadRestaurantList(nextProps)\r\n    }\r\n  }\r\n\r\n  loadRestaurantList = props => {\r\n    const limit = this.props.appConfigFrontSettings.restaurants.list.limit\r\n\r\n    if (!props.isDelivery && isNil(props?.lat) && isNil(props?.lng)) {\r\n      this.props.fetchRestaurantList({\r\n        restaurantId: props.orderFrontProperties.restaurantId || null,\r\n        useIP: isNil(props.orderFrontProperties.restaurantId),\r\n        limit,\r\n      })\r\n    } else if (!isNil(props?.lat) && !isNil(props?.lng)) {\r\n      this.props.fetchRestaurantListByGeoPt(props.lat, props.lng, { limit })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      children,\r\n      isDelivery,\r\n      deliveryMaxRange,\r\n      orderFrontProperties,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    return children({\r\n      loadRestaurantList: location => {\r\n        this.loadRestaurantList(location)\r\n      },\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nOrderRestaurantListContainer.defaultProps = {\r\n  cancelIP: false,\r\n  geoPt: false,\r\n  lat: null,\r\n  lng: null,\r\n}\r\n\r\nOrderRestaurantListContainer.propTypes = {\r\n  fetchRestaurantList: PropTypes.func.isRequired,\r\n  fetchRestaurantListByGeoPt: PropTypes.func.isRequired,\r\n  isFetchingRestaurantList: PropTypes.bool,\r\n  cancelIP: PropTypes.bool,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getOrderRestaurantListData = makeGetOrderRestaurantListData()\r\n\r\n  return (state, props) => ({\r\n    // TODO: this housld not be in this module\r\n    orderFrontProperties: getOrderProperties(state),\r\n    restaurantListData: getOrderRestaurantListData(state, props),\r\n    isFetchingRestaurantList: isFetchingRestaurantList(state),\r\n    restaurantListError: getRestaurantListError(state),\r\n\r\n    appConfigFrontSettings: getFrontSettings(state),\r\n  })\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchRestaurantList,\r\n    fetchRestaurantListByGeoPt,\r\n  }\r\n)(OrderRestaurantListContainer)\r\n","export { PositionMarkerIconSettings, LocationMarkerIconSettings } from './GoogleMarkers'\r\nexport { InfoWindowTextType } from './InfoWindowTextType'\r\n\r\nexport const GOOGLE_PLACE_CHANGED_EVENT = 'place_changed'\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport { GOOGLE_PLACE_CHANGED_EVENT } from '../constants'\r\n\r\nclass GoogleMapsAutocomplete extends React.Component {\r\n  state = {\r\n    autocomplete: null,\r\n  }\r\n\r\n  componentWillUpdate(nextProps, nextState) {\r\n    if (!isUndefined(window.google) && isNil(nextState.autocomplete)) {\r\n      this.setupAutocomplete()\r\n    }\r\n  }\r\n\r\n  setupAutocomplete = () => {\r\n    const input = document.getElementById(this.props.inputFieldId)\r\n    const autocomplete = new window.google.maps.places.Autocomplete(input, {\r\n      // https://developers.google.com/maps/documentation/javascript/places-autocomplete#restrict-predictions-to-a-specific-country\r\n      // if restricting, we can restrict the autocomplete search to a specific set of up to five countries.\r\n\r\n      // configured on apiConsumer\r\n      // ex: ['FR','RE'] for France and Reunion. Null or empty means no restriction\r\n      componentRestrictions: { country: this.props.countryRestriction}, \r\n   })\r\n\r\n    // prevent submitting form when selecting address with \"enter\" key\r\n    window.google.maps.event.addDomListener(input, 'keydown', e => {\r\n      if (e.keyCode === 13) {\r\n        e.preventDefault()\r\n      }\r\n    })\r\n\r\n    autocomplete.addListener(GOOGLE_PLACE_CHANGED_EVENT, () => {\r\n      this.setState({\r\n        address: null,\r\n      })\r\n      this.props.handleSelectLocation(autocomplete)\r\n    })\r\n\r\n    this.setState({\r\n      autocomplete: autocomplete,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { children } = this.props\r\n\r\n    return children\r\n  }\r\n}\r\n\r\nGoogleMapsAutocomplete.defaultProps = {\r\n  reverseAddress: null,\r\n}\r\n\r\nGoogleMapsAutocomplete.propTypes = {\r\n  inputFieldId: PropTypes.string.isRequired,\r\n  handleSelectLocation: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default GoogleMapsAutocomplete\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport PropTypes from 'prop-types'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { failureGeolocation, getGeolocationIsFetching } from 'pmt-modules/geolocation'\r\nimport { getAddressElementsFromGooglePlace } from 'pmt-utils/google'\r\n\r\nclass GoogleMapsReverseGeocoding extends React.Component {\r\n  state = {\r\n    geocoder: new window.google.maps.Geocoder(),\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (\r\n      !isNil(nextProps.geolocationLatitude) &&\r\n      !isNil(nextProps.geolocationLongitude) &&\r\n      nextProps.geolocationLatitude !== this.props.geolocationLatitude &&\r\n      nextProps.geolocationLongitude !== this.props.geolocationLongitude\r\n    ) {\r\n      this.reverseGeocode(nextProps.geolocationLatitude, nextProps.geolocationLongitude)\r\n    }\r\n  }\r\n\r\n  reverseGeocode = (lat, lng) => {\r\n    if (!this.props.reverseGeocoding) {\r\n      return\r\n    }\r\n\r\n    if (!isNil(this.state.geocoder)) {\r\n      const self = this\r\n\r\n      this.state.geocoder.geocode(\r\n        { location: { lat, lng } },\r\n        // https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse\r\n        // we set results[0] because we are interested in that result, not the [1]\r\n        (results, status) => {\r\n          if (status === 'OK') {\r\n            if (results[0]) {\r\n              // send callback success\r\n              self.props.successCallback({\r\n                addressElements: getAddressElementsFromGooglePlace(results[0]),\r\n                types: results[0].types,\r\n                geometry: results[0].geometry || null,\r\n              })\r\n            } else {\r\n              self.props.failureGeolocation(\r\n                self.props.geolocationId,\r\n                tr('global.geolocation.no_address_found')\r\n              )\r\n            }\r\n          } else {\r\n            self.props.failureGeolocation(\r\n              self.props.geolocationId,\r\n              tr('global.geolocation.error.status', { status })\r\n            )\r\n          }\r\n        }\r\n      )\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { children } = this.props\r\n\r\n    return children\r\n  }\r\n}\r\n\r\nGoogleMapsReverseGeocoding.defaultProps = {\r\n  geolocationLatitude: null,\r\n  geolocationLongitude: null,\r\n  /**\r\n   * Set this to false to avoid reverse geocoding. Used when editing an address.\r\n   */\r\n  reverseGeocoding: false,\r\n}\r\n\r\nGoogleMapsReverseGeocoding.propTypes = {\r\n  geolocationLatitude: PropTypes.number,\r\n  geolocationLongitude: PropTypes.number,\r\n\r\n  reverseGeocoding: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  geolocationIsFetching: getGeolocationIsFetching(state, props),\r\n})\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => ({\r\n  failureGeolocation: bindActionCreators(failureGeolocation, dispatch),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  mapDispatchToProps\r\n)(GoogleMapsReverseGeocoding)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet MapsMyLocation = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm8.94 3c-.46-4.17-3.77-7.48-7.94-7.94V1h-2v2.06C6.83 3.52 3.52 6.83 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c4.17-.46 7.48-3.77 7.94-7.94H23v-2h-2.06zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z\"/>\r\n  </SvgIcon>\r\n);\r\nMapsMyLocation = pure(MapsMyLocation);\r\nMapsMyLocation.displayName = 'MapsMyLocation';\r\nMapsMyLocation.muiName = 'SvgIcon';\r\n\r\nexport default MapsMyLocation;\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport GoogleMapsAutocomplete from 'pmt-modules/google/components/GoogleMapsAutocomplete'\r\nimport GoogleMapsReverseGeocoding from 'pmt-modules/google/components/GoogleMapsReverseGeocoding'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport TextField from 'pmt-ui/TextField'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { CircularProgress } from 'pmt-ui/Progress'\r\nimport ContentClear from 'pmt-ui/svg-icons/content/clear'\r\nimport MapsMyLocation from 'pmt-ui/svg-icons/maps/my-location'\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport InputAdornment from '@material-ui/core/InputAdornment'\r\n\r\nconst styles = theme => ({\r\n  geoSuggestBlock: {\r\n    position: 'relative',\r\n    display: 'flex',\r\n    width: '100%',\r\n  },\r\n  geolocContainer: {\r\n    display: 'flex',\r\n    width: '100%',\r\n    alignItems: 'flex-end',\r\n  },\r\n  textField: {\r\n    flex: 1,\r\n    minWidth: 0,\r\n  },\r\n  inputGeoloc: {\r\n    height: 36,\r\n    padding: 0,\r\n    lineHeight: '36px',\r\n    border: 'none',\r\n    fontSize: 14,\r\n  },\r\n  actionButton: {\r\n    color: theme.palette.primary.main,\r\n    flexShrink: 0,\r\n    '&:hover': {\r\n      backgroundColor: `${theme.palette.primary.main}14`,\r\n    },\r\n    '&.Mui-disabled': {\r\n      color: theme.pmt.colors.grey400,\r\n    },\r\n  },\r\n  labelError: {\r\n    display: 'block',\r\n    marginTop: theme.spacing(2),\r\n    color: theme.pmt.colors.red800,\r\n  },\r\n})\r\n\r\nconst SearchAddress = ({\r\n  inputClassName,\r\n  placeholder,\r\n  label,\r\n  resetAddressCallback,\r\n  selectLocationCallback,\r\n  reverseGeocoding = false,\r\n  reverseGeocodingSuccessCallback,\r\n  geolocationId,\r\n  geolocationAddress,\r\n  geolocationComputeAddress,\r\n  geolocationLatitude,\r\n  geolocationLongitude,\r\n  geolocationError,\r\n  geolocationOrigin,\r\n  countryRestriction,\r\n  onChangeCallback,\r\n  errorText,\r\n  helperText,\r\n  error, // aka addressLocationNotGood / isValidAddress\r\n  // geolocation button (optional)\r\n  onGeolocate,\r\n  isGeolocating,\r\n  geolocateDisabled,\r\n  classes,\r\n}) => {\r\n  const hasSearchedAddress = !isEmpty(geolocationComputeAddress)\r\n  // Cast to boolean — the && chain would otherwise return the errorText string\r\n  const shouldDisplayError = !!(hasSearchedAddress && (error || geolocationError) && errorText)\r\n\r\n  const showClearButton = !!(geolocationAddress || geolocationComputeAddress)\r\n  const showGeolocateButton = !!onGeolocate\r\n  const hasAdornment = showClearButton || showGeolocateButton\r\n\r\n  return (\r\n    <GoogleMapsReverseGeocoding\r\n      geolocationId={geolocationId}\r\n      geolocationLatitude={geolocationLatitude}\r\n      geolocationLongitude={geolocationLongitude}\r\n      geolocationOrigin={geolocationOrigin}\r\n      geolocationComputeAddress={geolocationComputeAddress}\r\n      reverseGeocoding={reverseGeocoding}\r\n      successCallback={reverseGeocodingSuccessCallback}\r\n    >\r\n      <GoogleMapsAutocomplete\r\n        reverseAddress={geolocationAddress}\r\n        inputFieldId={geolocationId}\r\n        handleSelectLocation={selectLocationCallback}\r\n        countryRestriction={countryRestriction}\r\n      >\r\n        <div className={classes.geoSuggestBlock}>\r\n          <div className={classes.geolocContainer}>\r\n            <TextField\r\n              id={geolocationId}\r\n              type=\"text\"\r\n              className={classNames(classes.textField)}\r\n              label={label}\r\n              placeholder={placeholder}\r\n              value={geolocationComputeAddress ? geolocationComputeAddress.formattedAddress : geolocationAddress || ''}\r\n              // Fallback aria-label for screen readers when no visible label is rendered\r\n              inputProps={{ 'aria-label': label || placeholder || tr('order.store_locator.address') }}\r\n              InputProps={{\r\n                classes: {\r\n                  input: classNames(classes.inputGeoloc, inputClassName),\r\n                },\r\n                // Only mount the adornment wrapper when there is actually something to show\r\n                endAdornment: hasAdornment ? (\r\n                  <InputAdornment position=\"end\">\r\n                    {showClearButton && (\r\n                      <IconButton\r\n                        aria-label={tr('order.store_locator.clear_address')}\r\n                        className={classes.actionButton}\r\n                        onClick={resetAddressCallback}\r\n                        size=\"small\"\r\n                      >\r\n                        {/* aria-hidden: the button label already describes the action */}\r\n                        <ContentClear aria-hidden=\"true\" />\r\n                      </IconButton>\r\n                    )}\r\n                    {showGeolocateButton && (\r\n                      <IconButton\r\n                        aria-label={isGeolocating ? tr('order.store_locator.geolocating') : tr('order.store_locator.geolocate_me')}\r\n                        aria-busy={isGeolocating}\r\n                        className={classes.actionButton}\r\n                        disabled={isGeolocating || geolocateDisabled}\r\n                        onClick={onGeolocate}\r\n                        size=\"small\"\r\n                      >\r\n                        {isGeolocating\r\n                          ? <CircularProgress aria-hidden=\"true\" size={20} />\r\n                          : <MapsMyLocation aria-hidden=\"true\" />}\r\n                      </IconButton>\r\n                    )}\r\n                  </InputAdornment>\r\n                ) : undefined,\r\n              }}\r\n              onChange={onChangeCallback}\r\n              error={shouldDisplayError}\r\n              helperText={shouldDisplayError ? errorText : helperText}\r\n            />\r\n          </div>\r\n        </div>\r\n      </GoogleMapsAutocomplete>\r\n    </GoogleMapsReverseGeocoding>\r\n  )\r\n}\r\n\r\nSearchAddress.defaultProps = {\r\n  label: '',\r\n  placeholder: '',\r\n}\r\n\r\nexport default withStyles(styles)(SearchAddress)\r\n","import { createSelector } from 'reselect'\r\nimport moment from 'moment'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport { getGeolocationCoordinates } from 'pmt-modules/geolocation/selectors'\r\nimport { OrderMode } from 'pmt-modules/order/constants'\r\nimport { getOrderProperties } from 'pmt-modules/orderPlugin'\r\nimport { getRestaurantAvailabilities } from 'pmt-modules/orderSettings/utils'\r\nimport { getMode } from 'pmt-modules/orderFront'\r\n\r\nimport { getAllRestaurants } from 'pmt-modules/restaurant/selectors'\r\nimport { formatRestaurant } from 'pmt-modules/restaurant/format'\r\n\r\nimport { getMaxTimeAheadAsDaysOnMode } from 'pmt-modules/orderSettings'\r\n\r\nimport { diff } from 'pmt-utils/date'\r\n\r\n// TODO: rename to get..OnProps\r\nconst getRestaurantIdOnProps = (state, props) => props.restaurantId\r\nconst getModeOnProps = (state, props) => props.mode\r\nconst getWithAvailabilitiesOnProps = (state, props) => props.withAvailabilities\r\n\r\n// TODO: replace makeGetRestaurantFromRestaurantList to makeGetRestaurant, but we do not have the formatted\r\n// orderProperties this way yet.\r\nconst makeGetRestaurant = () =>\r\n  createSelector(\r\n    [getAllRestaurants, getRestaurantIdOnProps, getGeolocationCoordinates, getModeOnProps],\r\n    (restaurantList, restaurantId, geolocationCoordinates, mode) => {\r\n      const restaurant = findOnArray(restaurantList, restaurant => restaurant.id === restaurantId)\r\n\r\n      return restaurant\r\n        ? formatRestaurant(restaurant, {\r\n            mode,\r\n            longitude: geolocationCoordinates?.longitude,\r\n            latitude: geolocationCoordinates?.latitude,\r\n          })\r\n        : null\r\n    }\r\n  )\r\n\r\nexport const makeGetOrderContext = () =>\r\n  createSelector(\r\n    [makeGetRestaurant(), getMode, getWithAvailabilitiesOnProps, getOrderProperties],\r\n    (restaurant, mode, withAvailabilities, orderProperties) => {\r\n      if (!restaurant) {\r\n        return null\r\n      }\r\n\r\n      const isDelivery = mode === OrderMode.DELIVERY\r\n\r\n      const maxTimeAheadAsDaysForMode = getMaxTimeAheadAsDaysOnMode(\r\n        mode,\r\n        restaurant.orderSettings.onSiteSettings,\r\n        restaurant.orderSettings.takeAwaySettings,\r\n        restaurant.orderSettings.deliverySettings\r\n      )\r\n\r\n      let daysBeforePreOrder = null\r\n      if (restaurant.orderSettings.nextOpening) {\r\n        // nextOpening.date is now.add(1, 'd').startOf('day')\r\n        // we want to compare with today at midnight to ensure having full day gap\r\n        daysBeforePreOrder = diff(\r\n          moment().startOf('day'),\r\n          restaurant.orderSettings.nextOpening.date\r\n        )\r\n      }\r\n\r\n      const orderIsCurrentlyOpen =\r\n        restaurant.orderSettings.isCurrentlyOpen && restaurant.isStatusEnabled\r\n\r\n      const hasAsapFlow = orderProperties.canOrderUsingAsap\r\n      const hasChooseSlotFlow = orderProperties.canOrderUsingSlots\r\n      const hasPreOrderFlow = orderProperties.canOrderUsingSlots\r\n\r\n      // can*: define if the flow is possible and the context make it available\r\n      const canAsap = hasAsapFlow && orderIsCurrentlyOpen\r\n      const canPreOrder =\r\n        hasPreOrderFlow &&\r\n        !isNil(daysBeforePreOrder) &&\r\n        daysBeforePreOrder <= maxTimeAheadAsDaysForMode &&\r\n        restaurant.isStatusEnabled\r\n\r\n      const canOnlyAsap = hasAsapFlow && !hasChooseSlotFlow && !canPreOrder && canAsap\r\n\r\n      //\r\n      //\r\n      //\r\n\r\n      const willOpenLaterToday =\r\n        !orderIsCurrentlyOpen && restaurant.orderSettings.willOpenLaterToday\r\n\r\n      const nextOpening = restaurant.isStatusEnabled && restaurant.orderSettings.nextOpening\r\n\r\n      const canOrder = canPreOrder || orderIsCurrentlyOpen\r\n\r\n      const canPreOrderOnNextDaysButNotToday =\r\n        !orderIsCurrentlyOpen && canPreOrder && nextOpening && !nextOpening.isCurrentDay\r\n\r\n      let nextPreOrderOpening = null\r\n      if (hasPreOrderFlow && !isNil(daysBeforePreOrder) && nextOpening && nextOpening.date) {\r\n        nextPreOrderOpening = nextOpening.date.clone().subtract(daysBeforePreOrder, 'days')\r\n      }\r\n\r\n      const canPreOrderForLaterToday =\r\n        canPreOrder &&\r\n        nextOpening &&\r\n        nextOpening.isCurrentDay &&\r\n        nextOpening.openingHours.length > 0\r\n\r\n      let restaurantAvailabilities = null\r\n      if (withAvailabilities) {\r\n        if (canPreOrder) {\r\n          // TODO: orderClosing = : now + pre order limit in days - manufacture delay\r\n          restaurantAvailabilities = get(\r\n            getRestaurantAvailabilities(restaurant, mode),\r\n            'availabilities',\r\n            []\r\n          )\r\n        } else {\r\n          // TODO: use this when optimizing slot generation\r\n          // orderOpening = (opening courant (date now) || next opening) + manufacture delay\r\n          // orderClosing = next closing - manufacture delay\r\n\r\n          // TODO: use another method to optimize calculation between opening and closing\r\n          restaurantAvailabilities = get(\r\n            getRestaurantAvailabilities(restaurant, mode),\r\n            'availabilities',\r\n            []\r\n          )\r\n        }\r\n      }\r\n\r\n      // TODO:\r\n      let addressIsInRestaurantDeliveryAddressRange = true\r\n      if (isDelivery) {\r\n        // calculate if the selected address is in the range of delivery for this restaurant\r\n        // TODO:\r\n        addressIsInRestaurantDeliveryAddressRange = false\r\n      }\r\n\r\n      return {\r\n        hasAsapFlow,\r\n        hasChooseSlotFlow,\r\n        hasPreOrderFlow,\r\n        canAsap,\r\n        canPreOrder,\r\n        canOnlyAsap,\r\n\r\n        // orderOpening,\r\n        // orderClosing,\r\n\r\n        addressIsInRestaurantDeliveryAddressRange,\r\n\r\n        canPreOrderOnNextDaysButNotToday,\r\n        canPreOrderForLaterToday,\r\n\r\n        orderIsCurrentlyOpen,\r\n        canOrder,\r\n\r\n        willOpenLaterToday,\r\n        daysBeforePreOrder,\r\n        maxTimeAheadAsDaysForMode,\r\n\r\n        nextOpening,\r\n        nextPreOrderOpening,\r\n\r\n        restaurantAvailabilities,\r\n        hasRestaurantAvailabilities: !isEmpty(restaurantAvailabilities),\r\n      }\r\n    }\r\n  )\r\n","// import React from 'react'\r\n\r\nimport { connect } from 'react-redux'\r\n\r\nimport { makeGetOrderContext } from '../selectors'\r\n\r\nconst OrderRestaurantContextContainer = ({ restaurantId, orderContext, children }) =>\r\n  children({\r\n    orderContext,\r\n  })\r\n\r\nconst makeMapStateToProp = () => {\r\n  const getOrderContext = makeGetOrderContext()\r\n\r\n  return (state, props) => ({\r\n    orderContext: getOrderContext(state, props),\r\n  })\r\n}\r\n\r\nexport default connect(makeMapStateToProp)(OrderRestaurantContextContainer)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ActionDone = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z\"/>\r\n  </SvgIcon>\r\n);\r\nActionDone = pure(ActionDone);\r\nActionDone.displayName = 'ActionDone';\r\nActionDone.muiName = 'SvgIcon';\r\n\r\nexport default ActionDone;\r\n","import React from 'react'\r\nimport clsx from 'clsx'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nimport Chip from 'pmt-ui/Chip'\r\nimport Tooltip from 'pmt-ui/Tooltip'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  chip: {\r\n    borderRadius: 3,\r\n    border: 0,\r\n    margin: 5,\r\n    fontSize: props => (props.size === 'mini' ? 10 : 12),\r\n    height: props => props.size === 'mini' && 16,\r\n  },\r\n}))\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nconst TestChip = ({\r\n  className,\r\n  label = tr('global.restaurant.testMode'),\r\n  variant = 'default',\r\n  size = 'small', // We add the 'mini' size for very small chip\r\n  color = 'primary',\r\n  tooltipText,\r\n}) => {\r\n  const classes = useStyles({ size })\r\n\r\n  const chip = (\r\n    <Chip\r\n      variant={variant}\r\n      // mini does not exists on Chip component, only small\r\n      size={size === 'mini' ? 'small' : size}\r\n      label={label}\r\n      color={color}\r\n      className={clsx(classes.chip, className)}\r\n    />\r\n  )\r\n\r\n  let toRender = chip\r\n\r\n  if (tooltipText) {\r\n    toRender = <Tooltip title={tooltipText}>{chip}</Tooltip>\r\n  }\r\n\r\n  return toRender\r\n}\r\n\r\nexport default TestChip\r\n","import React from 'react'\r\n\r\nimport isNil from 'lodash/isNil'\r\nimport classNames from 'classnames'\r\nimport { fade } from 'pmt-utils/theme/colorManipulator'\r\n\r\nimport OrderRestaurantContextContainer from 'pmt-modules/orderRestaurantContext/container/OrderRestaurantContextContainer'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport ActionDone from 'pmt-ui/svg-icons/action/done'\r\nimport TestChip from 'pmt-ui/TestChip'\r\n\r\nconst styles = theme => ({\r\n  restaurantContainer: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    position: 'relative',\r\n    cursor: 'pointer',\r\n    borderRadius: 8,\r\n    transition: 'background 0.15s ease-in',\r\n    '&:hover': {\r\n      background: fade(theme.palette.primary.main, 0.05),\r\n    },\r\n  },\r\n  isSelected: {\r\n    background: `${fade(theme.palette.primary.main, 0.05)} !important`,\r\n    boxShadow: `inset 0 0 0 1px ${fade(theme.palette.primary.main, 0.2)}`,\r\n  },\r\n  restaurantText: {\r\n    flex: 1,\r\n    minWidth: 0,\r\n    padding: `${theme.spacing(2.5)}px ${theme.spacing(2)}px`,\r\n  },\r\n  checkmarkArea: {\r\n    flexShrink: 0,\r\n    paddingRight: theme.spacing(2),\r\n  },\r\n  checkedIcon: {\r\n    display: 'block',\r\n    color: theme.palette.primary.main,\r\n    width: 20,\r\n    height: 20,\r\n  },\r\n  invisible: {\r\n    visibility: 'hidden',\r\n  },\r\n  opening: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  openingText: {\r\n    flex: 1,\r\n  },\r\n  dot: {\r\n    display: 'block',\r\n    width: 8,\r\n    height: 8,\r\n    marginRight: theme.spacing(1),\r\n    borderRadius: '50%',\r\n    flexShrink: 0,\r\n  },\r\n  distanceChip: {\r\n    display: 'inline',\r\n    fontSize: '0.72rem',\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  separator: {\r\n    display: 'inline',\r\n    marginLeft: theme.spacing(0.75),\r\n    marginRight: theme.spacing(0.75),\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  greenDot: {\r\n    background: theme.pmt.colors.green500,\r\n  },\r\n  redDot: {\r\n    background: theme.pmt.colors.red800,\r\n  },\r\n  greyDot: {\r\n    background: theme.pmt.colors.grey500,\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  grey700: {\r\n    color: theme.pmt.colors.grey700,\r\n  },\r\n  textEllipsis: {\r\n    ...theme.pmt.mixins.textEllipsis,\r\n  },\r\n})\r\n\r\nconst RestaurantRow = ({ restaurant, isSelected, onSelect, classes }) => {\r\n  return (\r\n    <OrderRestaurantContextContainer restaurantId={restaurant.id}>\r\n      {({ orderContext }) => (\r\n        <div\r\n          className={classNames(classes.restaurantContainer, {\r\n            [classes.isSelected]: isSelected,\r\n          })}\r\n          onClick={onSelect}\r\n          role=\"button\"\r\n          tabIndex={0}\r\n          aria-pressed={isSelected}\r\n          onKeyDown={event => {\r\n            if (event.key === 'Enter' || event.key === ' ') {\r\n              event.preventDefault()\r\n              onSelect(event)\r\n            }\r\n          }}\r\n        >\r\n          <div className={classes.restaurantText}>\r\n            {/* Name */}\r\n            <TypographyCustom\r\n              type=\"204\"\r\n              className={classNames({\r\n                [classes.grey500]: !orderContext.canOrder,\r\n              })}\r\n            >\r\n              {restaurant.name}\r\n              {restaurant.testMode && (\r\n                <React.Fragment>\r\n                  &nbsp;\r\n                  <TestChip tooltipText={tr('global.restaurant.testMode.tooltip')} />\r\n                </React.Fragment>\r\n              )}\r\n            </TypographyCustom>\r\n\r\n            {/* Address + Distance — inline flow, address wraps if long */}\r\n            {(!isNil(restaurant.address) || !isNil(restaurant.geoPt.distanceFormatted)) && (\r\n              <div className=\"u-marginTop5\">\r\n                <TypographyCustom\r\n                  type=\"144\"\r\n                  className={classNames({\r\n                    [classes.grey500]: !orderContext.canOrder,\r\n                  })}\r\n                >\r\n                  {!isNil(restaurant.address) && (\r\n                    <span>\r\n                      {restaurant.address.street},{' '}\r\n                      {restaurant.address.postCode} {restaurant.address.city}\r\n                    </span>\r\n                  )}\r\n                  {!isNil(restaurant.address) && !isNil(restaurant.geoPt.distanceFormatted) && (\r\n                    <span className={classes.separator}>·</span>\r\n                  )}\r\n                  {!isNil(restaurant.geoPt.distanceFormatted) && (\r\n                    <span className={classes.distanceChip}>\r\n                      {restaurant.geoPt.distanceFormatted}\r\n                    </span>\r\n                  )}\r\n                </TypographyCustom>\r\n              </div>\r\n            )}\r\n\r\n            {/* Opening status */}\r\n            <div className=\"u-marginTop5\">\r\n              <TypographyCustom\r\n                type=\"144\"\r\n                className={classNames(classes.opening, {\r\n                  [classes.grey500]: !orderContext.canOrder,\r\n                })}\r\n              >\r\n                {/* Dot */}\r\n                <span\r\n                  className={classNames(classes.dot, {\r\n                    [classes.greenDot]: orderContext.orderIsCurrentlyOpen,\r\n                    [classes.redDot]: !orderContext.canOrder,\r\n                    [classes.greyDot]:\r\n                      !orderContext.orderIsCurrentlyOpen && orderContext.canPreOrder,\r\n                  })}\r\n                />\r\n                <div className={classes.openingText}>\r\n                  {orderContext.orderIsCurrentlyOpen && (\r\n                    <React.Fragment>\r\n                      {tr('order.store_locator.restaurant.open')}\r\n                      <span className={classes.grey700}>\r\n                        &nbsp;\r\n                        {tr('order.store_locator.restaurant.open_order', {\r\n                          hour: restaurant.orderSettings.currentOpeningHour.formattedClosing,\r\n                        })}\r\n                      </span>\r\n                    </React.Fragment>\r\n                  )}\r\n\r\n                  {!orderContext.canOrder && orderContext.nextOpening\r\n                    ? orderContext.nextOpening.isCurrentDay\r\n                      ? tr('order.store_locator.restaurant.closed_today_until', {\r\n                          hour: orderContext.nextOpening.nextOpeningHour.formattedOpening,\r\n                        })\r\n                      : tr('order.store_locator.restaurant.closed_until', {\r\n                          day: orderContext.nextOpening.dayName,\r\n                          hour: orderContext.nextOpening.nextOpeningHour.formattedOpening,\r\n                        })\r\n                    : null}\r\n\r\n                  {!orderContext.orderIsCurrentlyOpen && orderContext.canPreOrder && (\r\n                    <span className={classes.grey700}>\r\n                      {orderContext.canPreOrderOnNextDaysButNotToday &&\r\n                        tr('order.store_locator.restaurant.pre_order_for_day', {\r\n                          day: orderContext.nextOpening.dayName,\r\n                        })}\r\n                      {orderContext.canPreOrderForLaterToday &&\r\n                        tr('order.store_locator.restaurant.pre_order_for_today')}\r\n                    </span>\r\n                  )}\r\n\r\n                  {!orderContext.canOrder &&\r\n                    !orderContext.nextOpening &&\r\n                    tr('order.store_locator.restaurant.closed')}\r\n                </div>\r\n              </TypographyCustom>\r\n            </div>\r\n          </div>\r\n\r\n          {/* Checkmark — always reserves space, invisible when not selected */}\r\n          <div className={classes.checkmarkArea}>\r\n            <ActionDone\r\n              className={classNames(classes.checkedIcon, {\r\n                [classes.invisible]: !isSelected,\r\n              })}\r\n            />\r\n          </div>\r\n        </div>\r\n      )}\r\n    </OrderRestaurantContextContainer>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(RestaurantRow)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport GeolocationContainer from 'pmt-modules/geolocation/container/GeolocationContainer'\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { setRestaurantId } from 'pmt-modules/orderFront'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\nimport RestaurantRow from './RestaurantRow'\r\n\r\nconst styles = theme => ({\r\n  restaurantList: {\r\n    position: 'relative',\r\n    maxHeight: 400,\r\n    minHeight: 130,\r\n    overflowY: 'auto',\r\n    overflowX: 'hidden',\r\n    [theme.breakpoints.down('sm')]: {\r\n      maxHeight: 'none',\r\n    },\r\n  },\r\n  infoContainer: {\r\n    maxWidth: 860,\r\n    margin: '0 auto',\r\n    lineHeight: '1.6em',\r\n    paddingBottom: theme.spacing(2),\r\n    paddingTop: theme.spacing(2),\r\n    paddingLeft: theme.spacing(1),\r\n    paddingRight: theme.spacing(1),\r\n  },\r\n  warningContainer: {\r\n    maxWidth: 380,\r\n    margin: '0 auto',\r\n    lineHeight: '1.6em',\r\n    paddingBottom: theme.spacing(2),\r\n  },\r\n  list: {\r\n    padding: `${theme.spacing(1)}px 0`,\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  iconInfo: {\r\n    width: 30,\r\n    height: 30,\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n})\r\n\r\nconst RestaurantList = ({\r\n  isFetching = false,\r\n  restaurantListData,\r\n  restaurantSelected,\r\n  setRestaurantId,\r\n  orderProperties,\r\n  classes,\r\n}) => (\r\n  <div className={classes.restaurantList}>\r\n    <GeolocationContainer>\r\n      {({ geolocationAddress, geolocationComputeAddress }) => (\r\n        <SendEventContainer\r\n          event={EventManager.Events.ON_RESTAURANT_LIST_SUCCESS}\r\n          eventProps={() => ({\r\n            address: geolocationAddress,\r\n            computeAddress: geolocationComputeAddress,\r\n            list: restaurantListData?.restaurants || [],\r\n          })}\r\n        >\r\n          <React.Fragment>\r\n            <div className={classes.list}>\r\n              {(restaurantListData?.restaurants || []).map(restaurant => (\r\n                <RestaurantRow\r\n                  key={restaurant.id}\r\n                  restaurant={restaurant}\r\n                  isSelected={!isNil(restaurantSelected) && restaurantSelected.id === restaurant.id}\r\n                  restaurantSelected={restaurantSelected}\r\n                  onSelect={() => {\r\n                    // already selected\r\n                    if (!isNil(restaurantSelected) && restaurantSelected.id === restaurant.id) {\r\n                      return\r\n                    }\r\n                    EventManager.dispatch(EventManager.Events.ON_STORE_LOCATOR_RESTAURANT_SELECT, {\r\n                      restaurant: restaurant,\r\n                      mode: orderProperties.mode,\r\n                    })\r\n                    setRestaurantId(restaurant.id)\r\n                  }}\r\n                />\r\n              ))}\r\n            </div>\r\n\r\n            {/* spec: https://www.notion.so/paymytable/Am-liorer-l-affichage-des-r-sultats-du-store-locator-2669fffd951f483280655bcbb2124fc6# */}\r\n            {restaurantListData?.geoPtIsLowAccuracy &&\r\n              !isEmpty(restaurantListData?.restaurants) && (\r\n                <div className={classes.infoContainer}>\r\n                  <div className=\"u-textAlignCenter u-marginTop30\">\r\n                    <ActionInfoOutline className={classNames(classes.iconInfo, classes.grey500)} />\r\n                    <TypographyCustom type=\"204\" align=\"center\" className={classes.grey500}>\r\n                      {tr('order.store_locator.restaurant.geo_pt_low_accuracy')}\r\n                    </TypographyCustom>\r\n                  </div>\r\n                </div>\r\n              )}\r\n\r\n            {isEmpty(restaurantListData?.restaurants) &&\r\n              !isFetching && (\r\n                <div className=\"u-textAlignCenter u-marginTop30\">\r\n                  <ActionInfoOutline className={classNames(classes.iconInfo, classes.grey500)} />\r\n                  <TypographyCustom\r\n                    type=\"204\"\r\n                    align=\"center\"\r\n                    className={classNames(classes.warningContainer, classes.grey500)}\r\n                  >\r\n                    {restaurantListData?.isTypeUseIp &&\r\n                      restaurantListData?.addressFromRequest &&\r\n                      tr('order.store_locator.restaurant.not_found', {\r\n                        address: restaurantListData.addressFromRequest,\r\n                      })}\r\n\r\n                    {restaurantListData?.isTypeGivenGeoPt &&\r\n                      geolocationComputeAddress &&\r\n                      tr('order.store_locator.restaurant.not_found', {\r\n                        address: geolocationComputeAddress.formattedAddress,\r\n                      })}\r\n\r\n                    {((restaurantListData?.isTypeUseIp &&\r\n                      !restaurantListData?.addressFromRequest) ||\r\n                      (!restaurantListData?.isTypeUseIp && !geolocationComputeAddress) ||\r\n                      restaurantListData?.isTypeNoGeoPt) &&\r\n                      tr('order.store_locator.restaurant.not_found.no_address')}\r\n                  </TypographyCustom>\r\n                </div>\r\n              )}\r\n          </React.Fragment>\r\n        </SendEventContainer>\r\n      )}\r\n    </GeolocationContainer>\r\n  </div>\r\n)\r\n\r\nconst mapStateToProps = state => ({})\r\n\r\nexport default compose(\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      setRestaurantId,\r\n    }\r\n  ),\r\n  withStyles(styles)\r\n)(RestaurantList)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport GeolocationContainer\r\n  from 'pmt-modules/geolocation/container/GeolocationContainer'\r\nimport { resetRestaurantList } from 'pmt-modules/restaurant'\r\nimport { setRestaurantId } from 'pmt-modules/orderFront'\r\nimport { isAddressTypeValid } from 'pmt-modules/userAddress'\r\nimport { getAppConfigFrontSettings } from 'pmt-modules/orderPlugin'\r\nimport { getAddressElementsFromGooglePlace } from 'pmt-utils/google'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { LoadingBlock } from 'pmt-ui/LoadingBlock'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\n\r\nimport Button from 'app/components/Button'\r\nimport BlockContainer from 'app/components/BlockContainer'\r\nimport SearchAddress from 'app/components/SearchAddress'\r\nimport MessageBlock from 'app/components/MessageBlock'\r\n\r\nimport RestaurantList from './RestaurantList'\r\n\r\nconst styles = theme => ({\r\n  searchBlockContainer: {\r\n    paddingBottom: theme.spacing(1),\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingTop: theme.spacing(4),\r\n      paddingBottom: theme.spacing(4),\r\n    },\r\n  },\r\n  restaurantGoogleMap: {\r\n    width: '100%',\r\n    height: 300,\r\n    [theme.breakpoints.down('xs')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  errorMessage: {\r\n    color: theme.pmt.status.error,\r\n  },\r\n  hideDesktop: {\r\n    [theme.breakpoints.up('md')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  hideMobile: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  showMobile: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'block',\r\n    },\r\n  },\r\n  hideSmallMobile: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  buttonNext: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n    },\r\n  },\r\n  bigButton: {\r\n    width: '100%',\r\n  },\r\n  stickyButton: {\r\n    position: 'fixed',\r\n    bottom: theme.spacing(1.5),\r\n    left: theme.spacing(2),\r\n    right: theme.spacing(2),\r\n    width: `calc(100% - ${theme.spacing(4)}px)`,\r\n    marginTop: theme.spacing(1),\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    boxShadow: theme.pmt.modern.shadows.lg,\r\n    transition: theme.pmt.modern.transitions.smooth,\r\n    zIndex: theme.zIndex.stickyButton,\r\n    '&.Mui-disabled': {\r\n      backgroundColor: theme.pmt.colors.grey300,\r\n      color: theme.pmt.colors.grey600,\r\n    },\r\n  },\r\n  inputFontImportant: {\r\n    fontSize: '20px !important',\r\n    '&:focus': {\r\n      fontSize: '20px !important',\r\n    },\r\n  },\r\n  restaurantUnavailable: {\r\n    padding: `${theme.spacing(2)}px 0`,\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: theme.spacing(2),\r\n    },\r\n  },\r\n})\r\n\r\nconst WhereSection = ({\r\n  ui,\r\n  updateUI,\r\n  orderProperties,\r\n  restaurant,\r\n  restaurantError,\r\n  isFetchingRestaurantList,\r\n  loadRestaurantList,\r\n  restaurantListData,\r\n  restaurantListError,\r\n  resetRestaurantList,\r\n  setRestaurantId,\r\n  classes,\r\n  width,\r\n  frontSettings,\r\n}) => {\r\n  // use reverse geocoding only when user clicks \"geolocate me\" button\r\n  const [shouldReverseGeocoding, setShouldReverseGeocoding] = React.useState(\r\n    false)\r\n\r\n  const restaurantList = restaurantListData?.restaurants\r\n\r\n  React.useEffect(() => {\r\n    if (isNil(restaurant) && !isNil(restaurantList) && restaurantList.length\r\n      === 1) {\r\n      setRestaurantId(restaurantList[0].id)\r\n    }\r\n  }, [restaurant, restaurantList, setRestaurantId])\r\n\r\n  return (\r\n    <Grid\r\n      item\r\n      xs={12}\r\n      md={6}\r\n      lg={7}\r\n      // this help us to handle the hidden parts of mobile display #responsive\r\n      className={classNames('u-paddingTop0', {\r\n        [classes.hideMobile]: ui.displaySecondPart,\r\n        [classes.showMobile]: !ui.displaySecondPart,\r\n      })}\r\n    >\r\n      <GeolocationContainer\r\n        successGeolocationCallback={({ latitude, longitude }) => {\r\n          setRestaurantId(null)\r\n          resetRestaurantList()\r\n\r\n          loadRestaurantList({ lat: latitude, lng: longitude })\r\n        }}\r\n      >\r\n        {({\r\n          geolocationId,\r\n          geolocateUser,\r\n          geolocationAddress,\r\n          geolocationComputeAddress,\r\n          geolocationError,\r\n          geolocationLatitude,\r\n          geolocationLongitude,\r\n          geolocationOrigin,\r\n          isFetchingGeolocation,\r\n          resetGeolocation,\r\n          setGeolocationAddress,\r\n          setGeolocationComputeAddress,\r\n          setGeolocationComputeAddressExtra,\r\n          setGeolocationCoordinates,\r\n        }) => {\r\n          const calculateIsAddressValid = ({ addressElements, types }) => {\r\n            if (isNil(addressElements)) {\r\n              return false\r\n            }\r\n\r\n            const shouldAskForValidType = orderProperties.isDelivery\r\n            if (shouldAskForValidType) {\r\n              return isAddressTypeValid(types)\r\n            }\r\n\r\n            return true\r\n          }\r\n\r\n          const handleSelectLocation = autocomplete => {\r\n            const place = autocomplete.getPlace()\r\n\r\n            const types = place.types\r\n            const addressElements = getAddressElementsFromGooglePlace(place)\r\n\r\n            const isAddressValid = calculateIsAddressValid(\r\n              { addressElements, types })\r\n\r\n            updateUI({\r\n              addressLocationNotGood: !isAddressValid,\r\n            })\r\n\r\n            if (isUndefined(place.geometry)) {\r\n              return\r\n            }\r\n            const lat = place.geometry.location.lat()\r\n            const lng = place.geometry.location.lng()\r\n\r\n            resetRestaurantList()\r\n\r\n            setRestaurantId(null)\r\n            if (isAddressValid) {\r\n              setGeolocationCoordinates(lat, lng)\r\n              loadRestaurantList({ lat, lng })\r\n            }\r\n\r\n            setGeolocationComputeAddress(addressElements)\r\n            setGeolocationComputeAddressExtra(types)\r\n            setGeolocationAddress(null)\r\n          }\r\n\r\n          const handleReverseGeocodingSuccess = ({\r\n            addressElements,\r\n            types,\r\n          }) => {\r\n            const isAddressValid = calculateIsAddressValid(\r\n              { addressElements, types })\r\n\r\n            updateUI({\r\n              addressLocationNotGood: !isAddressValid,\r\n            })\r\n\r\n            setGeolocationComputeAddress(addressElements)\r\n            setGeolocationComputeAddressExtra(types)\r\n            setGeolocationAddress(null)\r\n\r\n            // reverse geocoding is done, we reset its state\r\n            setShouldReverseGeocoding(false)\r\n          }\r\n\r\n          return (\r\n            <BlockContainer\r\n              type={BlockContainer.Type.WHITE}\r\n              className={classes.searchBlockContainer}\r\n            >\r\n                  <TypographyCustom type={isWidthDown('sm', width) ? 247 : 287}>\r\n                    {tr(\r\n                      `order.store_locator.catch_phrase.${orderProperties.mode}`)}\r\n                  </TypographyCustom>\r\n                  <div className=\"u-marginBottom20 u-marginTop10\">\r\n                    <SearchAddress\r\n                      geolocationId={geolocationId}\r\n                      placeholder={tr(\r\n                        `order.store_locator.address_field.placeholder.${orderProperties.mode}`,\r\n                      )}\r\n                      inputClassName={classes.inputFontImportant}\r\n                      selectLocationCallback={handleSelectLocation}\r\n                      // use reverse geocoding only when user clicks \"geolocate me\" button\r\n                      reverseGeocoding={shouldReverseGeocoding}\r\n                      reverseGeocodingSuccessCallback={handleReverseGeocodingSuccess}\r\n                      resetAddressCallback={() => {\r\n                        if (ui.addressLocationNotGood) {\r\n                          updateUI({ addressLocationNotGood: false })\r\n                        }\r\n                        resetGeolocation()\r\n                        resetRestaurantList()\r\n                        // if the user clears its address, we have to reset the restaurant too.\r\n                        setRestaurantId(null)\r\n                      }}\r\n                      geolocationLatitude={geolocationLatitude}\r\n                      geolocationLongitude={geolocationLongitude}\r\n                      geolocationOrigin={geolocationOrigin}\r\n                      geolocationAddress={geolocationAddress}\r\n                      geolocationComputeAddress={geolocationComputeAddress}\r\n                      countryRestriction={frontSettings.geoApiCountryRestriction}\r\n                      geolocationError={geolocationError}\r\n                      error={ui.addressLocationNotGood}\r\n                      errorText={tr('order.addresses.form.error_message.address')}\r\n                      onChangeCallback={event => {\r\n                        setGeolocationAddress(event.target.value)\r\n                        if (!isNil(geolocationComputeAddress)) {\r\n                          setGeolocationComputeAddress(null)\r\n                          setGeolocationComputeAddressExtra(null)\r\n                        }\r\n                        if (ui.addressLocationNotGood) {\r\n                          updateUI({ addressLocationNotGood: false })\r\n                        }\r\n                      }}\r\n                      onGeolocate={() => {\r\n                        EventManager.dispatch(\r\n                          EventManager.Events.ON_STORE_LOCATOR_GEOLOCATION, {\r\n                            mode: orderProperties.mode,\r\n                          })\r\n                        setShouldReverseGeocoding(true)\r\n                        geolocateUser()\r\n                      }}\r\n                      isGeolocating={isFetchingGeolocation}\r\n                      geolocateDisabled={isFetchingRestaurantList || isNil(orderProperties.mode)}\r\n                    />\r\n                  </div>\r\n                  <div className=\"u-relative\">\r\n                    <Hidden smDown>\r\n                      <LoadingBlock show={isFetchingRestaurantList} />\r\n                    </Hidden>\r\n\r\n                    {restaurantError && !isFetchingRestaurantList && (\r\n                      <div className={classes.restaurantUnavailable}>\r\n                        <ErrorBlock\r\n                          error={restaurantError}\r\n                          mode={ErrorBlock.Mode.CUSTOM}\r\n                          customElement={<MessageBlock\r\n                            type={MessageBlock.Type.ERROR} />}\r\n                        />\r\n                      </div>\r\n                    )}\r\n\r\n                    {/*\r\n                    Restaurant list\r\n                    not displayed in delivery because the slot make the restaurant selection\r\n                  */}\r\n                    {((orderProperties.isDelivery && geolocationComputeAddress)\r\n                        ||\r\n                        !orderProperties.isDelivery) &&\r\n                      !isNil(restaurantList) &&\r\n                      !isFetchingRestaurantList &&\r\n                      isNil(restaurantListError) && (\r\n                        <RestaurantList\r\n                          restaurantListData={restaurantListData}\r\n                          isFetching={isFetchingRestaurantList}\r\n                          orderProperties={orderProperties}\r\n                          restaurantSelected={restaurant}\r\n                        />\r\n                      )}\r\n                    {!isNil(restaurantListError) && (\r\n                      <div className=\"u-marginTop20 u-marginBottom20\">\r\n                        <ErrorBlock\r\n                          error={restaurantListError}\r\n                          mode={ErrorBlock.Mode.CUSTOM}\r\n                          customElement={<MessageBlock\r\n                            type={MessageBlock.Type.ERROR} />}\r\n                        />\r\n                      </div>\r\n                    )}\r\n                  </div>\r\n                  <Hidden mdUp smDown={isNil(restaurant)}>\r\n                    <Button\r\n                      size=\"large\"\r\n                      classes={{ root: classes.stickyButton }}\r\n                      label={tr('order.global.continue')}\r\n                      onClick={() => {\r\n                        updateUI({\r\n                          displaySecondPart: true,\r\n                        })\r\n                      }}\r\n                    />\r\n                  </Hidden>\r\n            </BlockContainer>\r\n          )\r\n        }}\r\n      </GeolocationContainer>\r\n    </Grid>\r\n  )\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nexport default compose(\r\n  connect(mapStateToProps, {\r\n    setRestaurantId,\r\n    resetRestaurantList,\r\n  }),\r\n  withStyles(styles),\r\n  withWidth(),\r\n)(WhereSection)\r\n","import React from 'react'\r\n\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport TextField from 'pmt-ui/TextField'\r\n\r\nconst styles = theme => ({\r\n  numberFieldContainer: {\r\n    display: 'inline-flex',\r\n    position: 'relative',\r\n  },\r\n  textFieldWithSymbol: {\r\n    '& > input': {\r\n      width: 'calc(100% - 10px)',\r\n    },\r\n  },\r\n  textField: {\r\n    display: 'block',\r\n  },\r\n  numberFieldSymbol: {\r\n    position: 'absolute',\r\n    top: 24,\r\n    right: 0,\r\n  },\r\n})\r\n\r\nconst NumberField = ({\r\n  value,\r\n  classes,\r\n  className,\r\n  symbol,\r\n  onChange,\r\n  min,\r\n  max,\r\n  pattern,\r\n  step,\r\n  withFixedDecimals = false,\r\n  autoComplete = null,\r\n  ...otherProps\r\n}) => (\r\n  <div\r\n    className={clsx(\r\n      classes.numberFieldContainer,\r\n      className,\r\n      otherProps.fullWidth && 'u-sizeFullWidth'\r\n    )}\r\n  >\r\n    <TextField\r\n      inputProps={{\r\n        autoComplete,\r\n        pattern: pattern || '\\\\d*',\r\n        step: step || '1',\r\n        className: clsx(classes.textField, symbol && classes.textFieldWithSymbol),\r\n      }}\r\n      value={value}\r\n      type=\"number\"\r\n      /* InputProps={{\r\n        inputProps: {\r\n          className: clsx(\r\n            classes.textField,\r\n            symbol && classes.textFieldWithSymbol\r\n          ),\r\n        },\r\n      }} */\r\n      onChange={event => {\r\n        let value = event.target.value ? parseFloat(event.target.value, 10) : ''\r\n        value = min !== null && min > value ? min : value\r\n        value = max !== null && max < value ? max : value\r\n        // if value has fixed decimals, render a fixed value, otherwise render it as is\r\n        // this is to be able to backspace on decimals\r\n        value =\r\n          withFixedDecimals && (value.toString().split('.')[1] || []).length > 2\r\n            ? value.toFixed(withFixedDecimals)\r\n            : value\r\n        onChange(event, value)\r\n      }}\r\n      {...otherProps}\r\n    />\r\n    {symbol && <span className={classes.numberFieldSymbol}>{symbol}</span>}\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(NumberField)\r\n","import classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\n\r\nimport { setTableNumber } from 'pmt-modules/orderPlugin'\r\n\r\nimport NumberField from 'pmt-ui/NumberField'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport Button from '../Button'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  inputTable: {\r\n    display: 'flex',\r\n    width: '100%',\r\n    height: 36,\r\n    padding: 0,\r\n    fontSize: '20px !important',\r\n    '&:focus': {\r\n      fontSize: '20px !important',\r\n    },\r\n  },\r\n  errorMessage: {\r\n    color: theme.pmt.colors.red800,\r\n  },\r\n})\r\n\r\nconst Type = {\r\n  BIG: 'big',\r\n  SMALL: 'small',\r\n}\r\n\r\nconst handleSetTableNumber = (tableNumber, setTableNumber) => {\r\n  setTableNumber(tableNumber)\r\n}\r\n\r\nconst TableNumberInput = ({\r\n  tableNumber,\r\n  type = Type.BIG,\r\n  handleCloseInput = null,\r\n  setTableNumber,\r\n  displayError = false,\r\n  classes,\r\n  tableNumberInputButtonLabel = tr('order.global.validate'),\r\n}) => {\r\n  const [localTableNumber, setLocalTableNumber] = React.useState(tableNumber)\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <TypographyCustom type=\"204\">\r\n        <NumberField\r\n          value={!isNil(localTableNumber) ? localTableNumber : ''}\r\n          onChange={(event, value) => {\r\n            // update local state\r\n            setLocalTableNumber(value)\r\n            if (type !== Type.SMALL) {\r\n              // no button to validate the input, so we set the table number on each change\r\n              handleSetTableNumber(value, setTableNumber)\r\n            }\r\n          }}\r\n          label={tr('order.store_locator.table_number.label')}\r\n          placeholder={tr('order.store_locator.table_number.placeholder')}\r\n          classes={{ textField: classes.inputTable }}\r\n          helperText={tr('order.store_locator.table_number.example')}\r\n        />\r\n      </TypographyCustom>\r\n      {!localTableNumber && displayError && (\r\n        <TypographyCustom type=\"164\" className={classNames('u-marginTop20', classes.errorMessage)}>\r\n          {tr('order.error_message.tableNumber_missing')}\r\n        </TypographyCustom>\r\n      )}\r\n      {type === Type.SMALL && (\r\n        <Button\r\n          classes={{ root: 'u-marginTop10' }}\r\n          disabled={isNil(localTableNumber)}\r\n          onClick={() => {\r\n            handleSetTableNumber(localTableNumber, setTableNumber)\r\n            handleCloseInput && handleCloseInput()\r\n          }}\r\n          label={tableNumberInputButtonLabel}\r\n        />\r\n      )}\r\n    </React.Fragment>\r\n  )\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({})\r\n\r\nconst TableNumberInputContainer = compose(\r\n  connect(mapStateToProps, { setTableNumber }),\r\n  withStyles(styles)\r\n)(TableNumberInput)\r\n\r\nTableNumberInputContainer.Type = Type\r\n\r\nexport default TableNumberInputContainer\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getOrderProperties } from 'pmt-modules/orderPlugin'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\n\r\nimport TableNumberInput from '../../../components/TableNumberInput'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  buttonTable: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n    },\r\n  },\r\n  hideDesktop: {\r\n    [theme.breakpoints.up('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  tableExample: {\r\n    height: 56,\r\n    lineHeight: '56px',\r\n  },\r\n  warningContainer: {\r\n    maxWidth: 380,\r\n    margin: '0 auto',\r\n  },\r\n  iconInfo: {\r\n    width: 30,\r\n    height: 30,\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  bigButton: {\r\n    width: '100%',\r\n    marginTop: theme.spacing(1),\r\n  },\r\n})\r\n\r\nclass TableNumberForm extends React.PureComponent {\r\n  render() {\r\n    const { isFetchingRestaurantList, restaurant, orderProperties, classes } = this.props\r\n\r\n    return (\r\n      <div className=\"u-relative u-marginTop10\">\r\n        {isFetchingRestaurantList ? (\r\n          <div className=\"u-relative\">\r\n            <LoadingBlockWrapper show={isFetchingRestaurantList} />\r\n          </div>\r\n        ) : isNil(restaurant) ? (\r\n          <div className=\"u-marginTop60 u-textAlignCenter\">\r\n            <ActionInfoOutline className={classNames(classes.iconInfo, classes.grey500)} />\r\n            <TypographyCustom\r\n              type=\"204\"\r\n              align=\"center\"\r\n              className={classNames(classes.warningContainer, classes.grey500)}\r\n            >\r\n              {tr('order.store_locator.table_number.access_warning_restaurant')}\r\n            </TypographyCustom>\r\n          </div>\r\n        ) : (\r\n          <div>\r\n            <TableNumberInput tableNumber={orderProperties.tableNumber} />\r\n            <TypographyCustom\r\n              type=\"164\"\r\n              className={classNames('u-marginTop30 u-marginBottom30', classes.grey500)}\r\n            >\r\n              {tr('order.store_locator.table_number.helper')}\r\n            </TypographyCustom>\r\n          </div>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  orderProperties: getOrderProperties(state),\r\n})\r\n\r\nexport default compose(connect(mapStateToProps), withStyles(styles))(TableNumberForm)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { LoadingBlockWrapper, LoadingBlock } from 'pmt-ui/LoadingBlock'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\n\r\nimport SlotsView from '../../../components/Slots'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  date: {\r\n    borderBottom: `1px solid ${theme.pmt.colors.grey300}`,\r\n    cursor: 'pointer',\r\n  },\r\n  dateLabel: {\r\n    display: 'block',\r\n    padding: `${theme.spacing(2)}px 0`,\r\n    lineHeight: '30px',\r\n  },\r\n  dateIcon: {\r\n    float: 'right',\r\n    width: 35,\r\n    height: 35,\r\n    color: theme.palette.primary.main,\r\n  },\r\n  slotContainer: {\r\n    overflow: 'hidden',\r\n    height: 0,\r\n    opacity: 0,\r\n    transition: 'opacity 0.3s ease-in',\r\n  },\r\n  slotContainerSelected: {\r\n    height: 'auto',\r\n    padding: theme.spacing(2),\r\n    paddingTop: 0,\r\n    opacity: 1,\r\n  },\r\n  slot: {\r\n    float: 'left',\r\n    width: 50,\r\n    padding: '0.35rem 0.5rem',\r\n    margin: '5px 5px 0 0',\r\n    textAlign: 'center',\r\n    fontSize: 12,\r\n    border: `1px solid ${theme.pmt.colors.grey500}`,\r\n    borderRadius: 3,\r\n    userSelect: 'none',\r\n    '&:hover': {\r\n      color: theme.palette.primary.main,\r\n      borderColor: theme.palette.primary.main,\r\n    },\r\n  },\r\n  slotSelected: {\r\n    background: theme.palette.primary.main,\r\n    color: theme.palette.getContrastText(theme.palette.primary.main),\r\n    '&:hover': {\r\n      color: theme.palette.getContrastText(theme.palette.primary.main),\r\n    },\r\n  },\r\n  slotAsap: {\r\n    width: '160px !important',\r\n  },\r\n  buttonAvailability: {\r\n    width: 140,\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n    },\r\n  },\r\n  hideDesktop: {\r\n    [theme.breakpoints.up('md')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  lineHeight48: {\r\n    lineHeight: '48px',\r\n  },\r\n  warningContainer: {\r\n    maxWidth: 380,\r\n    margin: '0 auto',\r\n  },\r\n  colorPrimary: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  iconInfo: {\r\n    width: 30,\r\n    height: 30,\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n})\r\n\r\nclass AvailabilitySlots extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      handleMenuRedirection,\r\n      isFetchingRestaurantList,\r\n      orderProperties,\r\n      restaurant,\r\n      classes,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className=\"u-relative u-marginTop20\">\r\n        {isFetchingRestaurantList ? (\r\n          <LoadingBlockWrapper show={isFetchingRestaurantList}>\r\n            <LoadingBlock show={isFetchingRestaurantList} />\r\n          </LoadingBlockWrapper>\r\n        ) : isNil(restaurant) || isNil(orderProperties.restaurant) ? (\r\n          <div className=\"u-marginTop60 u-textAlignCenter\">\r\n            <ActionInfoOutline className={classNames(classes.iconInfo, classes.grey500)} />\r\n            <TypographyCustom\r\n              type=\"204\"\r\n              align=\"center\"\r\n              className={classNames(classes.warningContainer, classes.grey500)}\r\n            >\r\n              {tr('order.store_locator.slot.access_warning_restaurant')}\r\n            </TypographyCustom>\r\n          </div>\r\n        ) : (\r\n          <SlotsView\r\n            hideSubmit={\r\n              // this should never happen, keep it for legacy until proven useless\r\n              isFetchingRestaurantList || isNil(restaurant) || isNil(orderProperties.restaurant)\r\n            }\r\n            onSubmit={handleMenuRedirection}\r\n            type={SlotsView.Type.BIG}\r\n            showSlots={true}\r\n            orderProperties={orderProperties}\r\n          />\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(AvailabilitySlots)\r\n","import React, { Fragment } from 'react'\r\nimport compose from 'recompose/compose'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PhoneIcon from '@material-ui/icons/Phone'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\n\r\nimport TableNumberForm from './TableNumberForm'\r\nimport AvailabilitySlots from './AvailabilitySlots'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\n\r\nconst styles = theme => ({\r\n  warningContainer: {\r\n    maxWidth: 380,\r\n    margin: '0 auto',\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  asapContainer: {\r\n    flex: 1,\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    textAlign: 'center',\r\n  },\r\n  iconInfo: {\r\n    width: 30,\r\n    height: 30,\r\n    marginBottom: theme.spacing(1),\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  closed: {\r\n    width: '100%',\r\n    display: 'flex',\r\n    color: theme.pmt.colors.grey500,\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    textAlign: 'center',\r\n  },\r\n  closedContent: {\r\n    marginTop: theme.spacing(2),\r\n    textAlign: 'center',\r\n    color: theme.pmt.colors.grey500,\r\n    lineHeight: '1.3',\r\n  },\r\n  phoneNumber: {\r\n    marginTop: theme.spacing(),\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    color: theme.palette.text.primary,\r\n\r\n    '& > svg': {\r\n      marginRight: theme.spacing(),\r\n    },\r\n  },\r\n})\r\n\r\nconst WhenContent = ({\r\n  restaurant,\r\n  orderProperties,\r\n  orderContext,\r\n  handleSetTableNumber,\r\n  width,\r\n  handleMenuRedirection,\r\n  isFetchingRestaurantList,\r\n  classes,\r\n}) => {\r\n  // no restaurant selected yet\r\n  if (!orderContext) {\r\n    return (\r\n      <div className=\"u-textAlignCenter\">\r\n        <ActionInfoOutline className={classes.iconInfo} />\r\n        <TypographyCustom type=\"204\" align=\"center\" className={classes.warningContainer}>\r\n          {tr('order.store_locator.when_content.access_warning_restaurant')}\r\n        </TypographyCustom>\r\n      </div>\r\n    )\r\n  }\r\n\r\n  // restaurant is selected but order is closed\r\n  if (orderContext && !orderContext.canOrder) {\r\n    return (\r\n      <div className={classes.closed}>\r\n        <ActionInfoOutline className={classes.iconInfo} />\r\n        <TypographyCustom type=\"207\" className={classes.closedContent}>\r\n          {tr('order.store_locator.restaurant.currently_closed')}\r\n        </TypographyCustom>\r\n\r\n        {orderContext.nextOpening ? (\r\n          <TypographyCustom type=\"207\" className={classes.closedContent}>\r\n            {orderContext.nextOpening.isCurrentDay\r\n              ? tr('order.store_locator.restaurant.closed_today_until', {\r\n                  hour: orderContext.nextOpening.nextOpeningHour.formattedOpening,\r\n                })\r\n              : tr('order.store_locator.restaurant.closed_until', {\r\n                  day: orderContext.nextOpening.dayName,\r\n                  hour: orderContext.nextOpening.nextOpeningHour.formattedOpening,\r\n                })}\r\n          </TypographyCustom>\r\n        ) : (\r\n          restaurant.phonePub && (\r\n            <TypographyCustom type=\"204\" className={classes.closedContent}>\r\n              {tr('order.store_locator.restaurant.contact_phone')}\r\n              <a href={`tel:${restaurant.phonePub}`}>\r\n                <div className={classes.phoneNumber}>\r\n                  <PhoneIcon />\r\n                  {restaurant.phonePub}\r\n                </div>\r\n              </a>\r\n            </TypographyCustom>\r\n          )\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <Fragment>\r\n      {orderProperties.mustChooseTableNumber && (\r\n        // user have to fill a table number\r\n        <div>\r\n          <TypographyCustom type={isWidthDown('sm', width) ? 247 : 287}>\r\n            {tr('order.store_locator.table_number')}\r\n          </TypographyCustom>\r\n          <TableNumberForm\r\n            isFetchingRestaurantList={isFetchingRestaurantList}\r\n            restaurant={restaurant}\r\n            handleSetTableNumber={tableNumber => {\r\n              handleSetTableNumber(tableNumber)\r\n            }}\r\n            handleMenuRedirection={handleMenuRedirection}\r\n          />\r\n        </div>\r\n      )}\r\n\r\n      {orderProperties.canOrderUsingSlots && (\r\n        // user have to choose a slot\r\n        <div>\r\n          <TypographyCustom type={isWidthDown('sm', width) ? 247 : 287}>\r\n            {tr('order.store_locator.when')}\r\n          </TypographyCustom>\r\n          <AvailabilitySlots\r\n            isFetchingRestaurantList={isFetchingRestaurantList}\r\n            orderProperties={orderProperties}\r\n            restaurant={restaurant}\r\n            handleMenuRedirection={handleMenuRedirection}\r\n          />\r\n        </div>\r\n      )}\r\n\r\n      {!orderProperties.canOrderUsingSlots &&\r\n        !orderProperties.mustChooseTableNumber &&\r\n        orderProperties.canOrderUsingAsap && (\r\n          // when user can order using asap only just display a text depending of its order mode\r\n          <React.Fragment>\r\n            <TypographyCustom type=\"287\">{tr('order.store_locator.when')}</TypographyCustom>\r\n            <div className={classes.asapContainer}>\r\n              <ActionInfoOutline className={classes.iconInfo} />\r\n\r\n              <TypographyCustom type=\"204\" align=\"center\" className={classes.warningContainer}>\r\n                {tr(`order.store_locator.when.mode.${orderProperties.mode}.delay`, {\r\n                  delay: orderProperties.delayAndDeliveryFormattedAsMin,\r\n                })}\r\n              </TypographyCustom>\r\n            </div>\r\n          </React.Fragment>\r\n        )}\r\n    </Fragment>\r\n  )\r\n}\r\n\r\nexport default compose(withStyles(styles), withWidth())(WhenContent)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport OrderRestaurantContextContainer from 'pmt-modules/orderRestaurantContext/container/OrderRestaurantContextContainer'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Hidden from 'pmt-ui/Hidden'\r\n\r\nimport BlockContainer from 'app/components/BlockContainer'\r\nimport Button from 'app/components/Button'\r\nimport WhenContent from './WhenContent'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    minHeight: 300,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingTop: theme.spacing(4),\r\n      paddingBottom: theme.spacing(4),\r\n    },\r\n  },\r\n  stickyButton: {\r\n    position: 'fixed',\r\n    bottom: theme.spacing(1.5),\r\n    left: theme.spacing(2),\r\n    right: theme.spacing(2),\r\n    width: `calc(100% - ${theme.spacing(4)}px)`,\r\n    marginTop: theme.spacing(1),\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    boxShadow: theme.pmt.modern.shadows.lg,\r\n    transition: theme.pmt.modern.transitions.smooth,\r\n    zIndex: theme.zIndex.stickyButton,\r\n    '&.Mui-disabled': {\r\n      backgroundColor: theme.pmt.colors.grey300,\r\n      color: theme.pmt.colors.grey600,\r\n    },\r\n  },\r\n  hideMobile: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  showMobile: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'block',\r\n    },\r\n  },\r\n  bigButton: {\r\n    width: '100%',\r\n    marginTop: theme.spacing(1),\r\n  },\r\n})\r\n\r\nclass WhenSection extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      ui,\r\n      orderProperties,\r\n      restaurant,\r\n      handleMenuRedirection,\r\n      handleSetTableNumber,\r\n      isFetchingRestaurantList,\r\n      classes,\r\n    } = this.props\r\n\r\n    const isSubmitDisabled = orderProperties.isMissingSlot || orderProperties.isMissingTableNumber\r\n\r\n    return (\r\n      <Grid\r\n        item\r\n        xs={12}\r\n        md={6}\r\n        lg={5}\r\n        // this help us to handle the hidden parts of mobile display #responsive\r\n        className={classNames('u-paddingTop0', {\r\n          [classes.hideMobile]: !ui.displaySecondPart,\r\n          [classes.showMobile]: ui.displaySecondPart,\r\n        })}\r\n      >\r\n        <BlockContainer type={BlockContainer.Type.WHITE} className={classes.root}>\r\n          <OrderRestaurantContextContainer\r\n            restaurantId={restaurant && restaurant.id}\r\n            withAvailabilities\r\n          >\r\n            {({ orderContext }) => (\r\n              <React.Fragment>\r\n                <WhenContent\r\n                  restaurant={restaurant}\r\n                  orderContext={orderContext}\r\n                  orderProperties={orderProperties}\r\n                  handleSetTableNumber={handleSetTableNumber}\r\n                  handleMenuRedirection={handleMenuRedirection}\r\n                  isFetchingRestaurantList={isFetchingRestaurantList}\r\n                />\r\n\r\n                {orderContext && orderContext.canOrder && orderContext.hasRestaurantAvailabilities && (\r\n                  <React.Fragment>\r\n                    <Hidden mdUp>\r\n                      <Button\r\n                        size=\"large\"\r\n                        disabled={isSubmitDisabled}\r\n                        onClick={handleMenuRedirection}\r\n                        classes={{ root: classes.stickyButton }}\r\n                        label={tr('order.global.continue')}\r\n                      />\r\n                    </Hidden>\r\n                    {/* Continue butotn for on site and delivery */}\r\n                    <Hidden smDown mdUp={orderProperties.canOrderUsingSlots}>\r\n                      <Button\r\n                        size=\"large\"\r\n                        disabled={isSubmitDisabled}\r\n                        classes={{ root: classes.bigButton }}\r\n                        onClick={handleMenuRedirection}\r\n                        label={tr('order.global.continue')}\r\n                      />\r\n                    </Hidden>\r\n                  </React.Fragment>\r\n                )}\r\n              </React.Fragment>\r\n            )}\r\n          </OrderRestaurantContextContainer>\r\n        </BlockContainer>\r\n      </Grid>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(WhenSection)\r\n","import React from 'react'\r\n\r\nimport OrderRestaurantListContainer from 'pmt-modules/orderFront/container/OrderRestaurantListContainer'\r\nimport GeolocationContainer from 'pmt-modules/geolocation/container/GeolocationContainer'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\n\r\nimport WhereSection from './components/WhereSection'\r\nimport WhenSection from './components/WhenSection'\r\n\r\nconst styles = theme => ({\r\n  gridContainer: {\r\n    marginTop: theme.spacing(2),\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginTop: 0,\r\n    },\r\n  },\r\n})\r\n\r\n/**\r\n * @mockup N/A\r\n */\r\nconst View = ({\r\n  orderProperties,\r\n  restaurant,\r\n  restaurantError,\r\n  handleSetTableNumber,\r\n  handleMenuRedirection,\r\n  googleMapURL,\r\n  ui,\r\n  updateUI,\r\n  classes,\r\n}) => (\r\n  <div className=\"u-overflowHidden\">\r\n    <GeolocationContainer>\r\n      {({ geolocationCoordinates }) => (\r\n        <OrderRestaurantListContainer\r\n          mode={orderProperties.mode}\r\n          isDelivery={orderProperties.isDelivery}\r\n          lat={geolocationCoordinates.latitude}\r\n          lng={geolocationCoordinates.longitude}\r\n        >\r\n          {({\r\n            loadRestaurantList,\r\n            isFetchingRestaurantList,\r\n            restaurantListData,\r\n            restaurantListError,\r\n          }) => (\r\n            <Grid spacing={2} container className={classes.gridContainer}>\r\n              <Hidden mdUp>\r\n                <LoadingBlockWrapper show={isFetchingRestaurantList} />\r\n              </Hidden>\r\n\r\n              <WhereSection\r\n                ui={ui}\r\n                updateUI={updateUI}\r\n                orderProperties={orderProperties}\r\n                restaurantError={restaurantError}\r\n                restaurant={restaurant}\r\n                loadRestaurantList={loadRestaurantList}\r\n                isFetchingRestaurantList={isFetchingRestaurantList}\r\n                restaurantListData={restaurantListData}\r\n                restaurantListError={restaurantListError}\r\n                googleMapURL={googleMapURL}\r\n                loadingElement={<div />}\r\n              />\r\n              <WhenSection\r\n                ui={ui}\r\n                updateUI={updateUI}\r\n                orderProperties={orderProperties}\r\n                restaurant={restaurant}\r\n                handleMenuRedirection={handleMenuRedirection}\r\n                handleSetTableNumber={handleSetTableNumber}\r\n                isFetchingRestaurantList={isFetchingRestaurantList}\r\n              />\r\n            </Grid>\r\n          )}\r\n        </OrderRestaurantListContainer>\r\n      )}\r\n    </GeolocationContainer>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport ui from 'pmt-modules/reduxUi'\r\n\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport {\r\n  resetDayAndSlot,\r\n  setDueDateAsap,\r\n  OrderPluginUrlCheckerContainer,\r\n  withOrderProperties,\r\n  resetSelectedCategory,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { resetCart } from 'pmt-modules/cart/actions'\r\nimport { resetCatalog } from 'pmt-modules/catalog'\r\nimport RestaurantContainer from 'pmt-modules/restaurant/components/RestaurantContainer'\r\n\r\nimport withWidth, { isWidthUp, isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\nimport View from './View'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass StoreLocatorPage extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // clean cart:\r\n    // - redirected to store locator\r\n    // - making a new order after a one being successfully made but the data has not been reset\r\n\r\n    // false: do not send an order preview. We were sending an order preview when on mobile, on the\r\n    // catalog page, making back to the store locator. See catchCartActionMiddleware.\r\n    this.props.resetCart(false)\r\n    this.props.resetDayAndSlot()\r\n    if (this.props.orderProperties.forceAsap) {\r\n      this.props.setDueDateAsap()\r\n    }\r\n    this.props.resetCatalog()\r\n    this.props.resetSelectedCategory()\r\n\r\n    // set default restaurantId from query param\r\n    this.restaurantId = getQueryParam('restaurantId')\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    // set isAsap after received onsite/delivery change of state\r\n    if (\r\n      nextProps.orderProperties.forceAsap &&\r\n      this.props.orderProperties.forceAsap !== nextProps.orderProperties.forceAsap\r\n    ) {\r\n      nextProps.setDueDateAsap()\r\n    }\r\n\r\n    // if restaurantId differs from query param, update with one from state\r\n    if (nextProps.orderProperties.restaurantId !== this.restaurantId) {\r\n      this.restaurantId = nextProps.orderProperties.restaurantId\r\n    }\r\n  }\r\n\r\n  getRestaurantId = () => this.restaurantId\r\n\r\n  handleMenuRedirection = () => {\r\n    EventManager.dispatch(EventManager.Events.ON_STORE_LOCATOR_SUBMIT, {\r\n      restaurant: this.props.orderProperties.restaurant,\r\n      mode: this.props.orderProperties.mode,\r\n    })\r\n\r\n    this.props.redirectTo(getRoute('ORDER__CATALOG'), {\r\n      restaurantId: this.props.orderProperties.restaurantId,\r\n    })\r\n  }\r\n\r\n  handleRedirectToMode = () => {\r\n    const { ui, updateUI, redirectTo } = this.props\r\n\r\n    ui.displaySecondPart\r\n      ? updateUI({ displaySecondPart: false })\r\n      : redirectTo(getRoute('ORDER__MODE'))\r\n  }\r\n\r\n  render() {\r\n    const { appConfig, orderAppConfig, location, ui, updateUI, width, orderProperties } = this.props\r\n\r\n    return (\r\n      <OrderPluginUrlCheckerContainer\r\n        location={location}\r\n        verifyMode\r\n        verifyRestaurantId\r\n        verifyLatLng\r\n        verifyAddress\r\n        verifyIsAsap\r\n        verifyTableNumber\r\n      >\r\n        <RestaurantContainer restaurantId={this.getRestaurantId()}>\r\n          {({ restaurant, restaurantError }) => (\r\n            <OrderPage\r\n              headerProps={{\r\n                displayTitle: isWidthUp('md', width),\r\n                displaySecondLayout: ui.displaySecondPart,\r\n                backLink:\r\n                  isWidthDown('sm', width) &&\r\n                  (orderAppConfig.modes.length > 1 || ui.displaySecondPart) &&\r\n                  this.handleRedirectToMode,\r\n                displayRestaurantName: true,\r\n                displayOrderModeSelect:\r\n                  (!ui.displaySecondPart || isWidthUp('md', width)) &&\r\n                  orderAppConfig.modes.length > 1,\r\n                displayOrderMode:\r\n                  (ui.displaySecondPart && isWidthDown('sm', width)) ||\r\n                  orderAppConfig.modes.length === 1,\r\n                displayAddress: isWidthDown('sm', width),\r\n                displayUser: true,\r\n              }}\r\n              orderProperties={orderProperties}\r\n              appConfig={appConfig}\r\n              restaurant={restaurant}\r\n              location={location}\r\n            >\r\n              <SendEventContainer\r\n                event={EventManager.Events.ON_PAGE_LOADED}\r\n                eventProps={() => ({\r\n                  props: orderProperties,\r\n                })}\r\n              >\r\n                <View\r\n                  handleMenuRedirection={this.handleMenuRedirection}\r\n                  orderProperties={orderProperties}\r\n                  restaurant={restaurant}\r\n                  restaurantError={restaurantError}\r\n                  ui={ui}\r\n                  updateUI={updateUI}\r\n                />\r\n              </SendEventContainer>\r\n            </OrderPage>\r\n          )}\r\n        </RestaurantContainer>\r\n      </OrderPluginUrlCheckerContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withOrderProperties,\r\n  withScrollToTop(),\r\n  ui({\r\n    state: {\r\n      displaySecondPart: false,\r\n      addressLocationNotGood: false,\r\n    },\r\n  }),\r\n  connect(mapStateToProps, {\r\n    resetDayAndSlot,\r\n    setDueDateAsap,\r\n    redirectTo,\r\n    resetCart,\r\n    resetCatalog,\r\n    resetSelectedCategory,\r\n  }),\r\n  withWidth()\r\n)(StoreLocatorPage)\r\n","import { getFromStorage, removeFromStorage, saveToStorage } from '../../storage'\r\n\r\nconst StorageItem = {\r\n  RESTAURANT_ID: 'STORAGE::RESTAURANT_ID',\r\n  API_CONSUMER: 'STORAGE::API_CONSUMER',\r\n  BASIC_TOKEN: 'STORAGE::BASIC_TOKEN',\r\n}\r\n\r\nexport const saveBasicToken = token => {\r\n  saveToStorage(StorageItem.BASIC_TOKEN, token)\r\n}\r\n\r\nexport const getDefaultBasicToken = () => getFromStorage(StorageItem.BASIC_TOKEN, null)\r\n\r\nexport const getAuthorization = () => getDefaultBasicToken()\r\n\r\nexport const removeBasicToken = () => removeFromStorage(StorageItem.BASIC_TOKEN)\r\n\r\nexport const getDefaultApiConsumer = () => getFromStorage(StorageItem.API_CONSUMER, null)\r\n\r\nexport const saveApiConsumer = apiConsumer => {\r\n  saveToStorage(StorageItem.API_CONSUMER, apiConsumer)\r\n}\r\n\r\nexport const removeRestaurantId = () => removeFromStorage(StorageItem.RESTAURANT_ID)\r\n\r\nexport const getDefaultRestaurantId = () => getFromStorage(StorageItem.RESTAURANT_ID, null)\r\n\r\nexport const saveRestaurantId = restaurantId => {\r\n  saveToStorage(StorageItem.RESTAURANT_ID, restaurantId)\r\n}\r\n\r\nexport const removeApiConsumer = () => removeFromStorage(StorageItem.API_CONSUMER)\r\n","import { LOCATION_CHANGE } from 'pmt-modules/routing'\r\n\r\nimport Immutable from 'immutable'\r\n\r\nimport {\r\n  getDefaultBasicToken,\r\n  getDefaultApiConsumer,\r\n  getDefaultRestaurantId,\r\n} from './utils'\r\n\r\nimport { AuthRestaurantAction } from './actions'\r\n\r\nexport * from './utils'\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  auth: getDefaultBasicToken(),\r\n  apiConsumer: getDefaultApiConsumer(),\r\n  restaurantId: getDefaultRestaurantId(),\r\n  isFetching: false,\r\n  error: null,\r\n\r\n  // for Refresh.\r\n  refreshSucceded: false,\r\n})\r\n\r\nexport const authRestaurantReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case LOCATION_CHANGE:\r\n      return state.merge({\r\n        error: null,\r\n      })\r\n\r\n    case AuthRestaurantAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        auth: null,\r\n        error: null,\r\n      })\r\n\r\n    case AuthRestaurantAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        auth: action.data.authorization,\r\n        apiConsumer: action.data.apiConsumer,\r\n        restaurantId: action.data.restaurantId,\r\n        refreshSucceded: true,\r\n        error: null,\r\n      })\r\n\r\n    case AuthRestaurantAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        auth: null,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import React from 'react'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getDefaultRestaurantId } from 'pmt-modules/authRestaurant'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport RestaurantContainer from './RestaurantContainer'\r\n\r\nconst getRestaurantIdOnProps = props => {\r\n  const queryParam = getQueryParam('restaurantId')\r\n  if (!isEmpty(queryParam)) {\r\n    return queryParam\r\n  }\r\n  if (!isNil(props.routeParams) && !isEmpty(props.routeParams.restaurantId)) {\r\n    return props.routeParams.restaurantId\r\n  }\r\n  if (!isNil(props.params) && !isEmpty(props.params.restaurantId)) {\r\n    return props.params.restaurantId\r\n  }\r\n\r\n  return (\r\n    getDefaultRestaurantId() ||\r\n    get(props, 'orderProperties.restaurantId', props.restaurantId || null)\r\n  )\r\n}\r\n\r\n/**\r\n * Add the RestaurantContainer as HOC for the given component\r\n * Requirements\r\n * - restaurantId in props or routeParams\r\n */\r\nconst withRestaurant = RestaurantWrappedComponent => {\r\n  return props => (\r\n    <RestaurantContainer\r\n      RestaurantWrappedComponent={RestaurantWrappedComponent}\r\n      {...props}\r\n      // keep restaurantId at bottom to ensure overriding any eventual prop\r\n      // this also allows changing restaurant on the fly \\o/\r\n      restaurantId={getRestaurantIdOnProps(props)}\r\n    />\r\n  )\r\n}\r\n\r\nexport default withRestaurant\r\n","export const SuggestionActionType = {\r\n  REPLACE: 0,\r\n  COMPOSE: 1,\r\n}\r\n","var baseFlatten = require('./_baseFlatten');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, INFINITY) : [];\n}\n\nmodule.exports = flattenDeep;\n","import find from 'lodash/find'\r\nimport flattenDeep from 'lodash/flattenDeep'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { createOrderProductFromProduct, orderProductModifier } from 'pmt-modules/orderProduct'\r\nimport { createOrderMenuFromMenu, orderMenuModifier } from 'pmt-modules/orderMenu'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { createFormatter } from 'pmt-utils/format'\r\n\r\nimport { SuggestionActionType } from './constants'\r\n\r\nconst replaceProductWithProduct = (baseItem, itemToReplace) => {\r\n  itemToReplace = createOrderProductFromProduct(itemToReplace)\r\n\r\n  // if option exists on baseItem use it, else return itemToReplace option\r\n  itemToReplace.options = itemToReplace.options.map(\r\n    itemOption =>\r\n      find(baseItem.options, baseItemOption => itemOption.id === baseItemOption.id) || itemOption\r\n  )\r\n\r\n  return orderProductModifier(itemToReplace)\r\n}\r\n\r\nconst recursiveReplaceProductInSubCategory = (\r\n  category,\r\n  itemToReplace,\r\n  baseItem,\r\n  productsReplaced\r\n) => {\r\n  if (!isNil(category.categories) && !isEmpty(category.categories)) {\r\n    category.categories = category.categories.map(category => {\r\n      const result = recursiveReplaceProductInSubCategory(\r\n        category,\r\n        itemToReplace,\r\n        baseItem,\r\n        productsReplaced\r\n      )\r\n      productsReplaced = result.productsReplaced\r\n\r\n      return result.category\r\n    })\r\n  }\r\n\r\n  let products = []\r\n  if (!isNil(category.products)) {\r\n    products = category.products.map(product => {\r\n      let quantity = product.quantity\r\n      let options = product.options\r\n\r\n      if (\r\n        product.id === baseItem.id &&\r\n        !find(productsReplaced, productReplaced => productReplaced.id === baseItem.id)\r\n      ) {\r\n        quantity = baseItem.quantity\r\n        options = baseItem.options\r\n        productsReplaced.push(baseItem)\r\n      }\r\n\r\n      return {\r\n        ...product,\r\n        comment: baseItem.comment,\r\n        quantity,\r\n        options,\r\n      }\r\n    })\r\n  }\r\n\r\n  return {\r\n    category: {\r\n      ...category,\r\n      products,\r\n    },\r\n    productsReplaced,\r\n  }\r\n}\r\n\r\nconst replaceProductWithMenu = (baseItem, itemToReplace) => {\r\n  itemToReplace = createOrderMenuFromMenu(itemToReplace)\r\n\r\n  // if baseItem exists on itemToReplace, update product's quantity and options\r\n  itemToReplace.parts = itemToReplace.parts.map(part => {\r\n    const result = recursiveReplaceProductInSubCategory(part, itemToReplace, baseItem, [])\r\n    return result.category\r\n  })\r\n\r\n  return orderMenuModifier(itemToReplace)\r\n}\r\n\r\nconst recursiveReplaceProductFromMenuInSubCategory = (\r\n  category,\r\n  itemToReplace,\r\n  baseItemProducts,\r\n  maxQuantity,\r\n  productsReplaced,\r\n  productsAdded\r\n) => {\r\n  if (!isNil(category.categories) && !isEmpty(category.categories)) {\r\n    category.categories = category.categories.map(category => {\r\n      const result = recursiveReplaceProductFromMenuInSubCategory(\r\n        category,\r\n        itemToReplace,\r\n        baseItemProducts,\r\n        maxQuantity,\r\n        productsReplaced,\r\n        productsAdded\r\n      )\r\n      productsReplaced = result.productsReplaced\r\n      productsAdded = result.productsAdded\r\n\r\n      return result.category\r\n    })\r\n  }\r\n\r\n  let products = []\r\n  if (!isNil(category.products)) {\r\n    products = category.products.map(product => {\r\n      const baseItemPartProduct = find(\r\n        baseItemProducts,\r\n        baseItemPartProduct => product.id === baseItemPartProduct.id\r\n      )\r\n\r\n      // if baseItemPartProduct exists on itemToReplace, update product's quantity and options\r\n      if (\r\n        baseItemPartProduct &&\r\n        baseItemPartProduct.quantity > 0 &&\r\n        // checking that we don't add to much product to the part\r\n        productsAdded.length < maxQuantity &&\r\n        !find(productsReplaced, productReplaced => productReplaced.id === baseItemPartProduct.id)\r\n      ) {\r\n        product.comment = baseItemPartProduct.comment\r\n        product.quantity = baseItemPartProduct.quantity\r\n        product.options = baseItemPartProduct.options\r\n        productsReplaced.push(baseItemPartProduct)\r\n        productsAdded.push(baseItemPartProduct)\r\n      }\r\n      return product\r\n    })\r\n  }\r\n\r\n  return {\r\n    category: {\r\n      ...category,\r\n      products,\r\n    },\r\n    productsReplaced,\r\n    productsAdded,\r\n  }\r\n}\r\n\r\nconst replaceMenuWithMenu = (baseItem, itemToReplace) => {\r\n  let productsReplaced = []\r\n  // skip adding multiple times the same product in different parts\r\n  itemToReplace = createOrderMenuFromMenu(itemToReplace)\r\n\r\n  // get every products from every parts from baseItem\r\n  const baseItemProducts = flattenDeep(\r\n    baseItem.parts.map(baseItemPart => [...baseItemPart.products])\r\n  )\r\n\r\n  itemToReplace.parts = itemToReplace.parts.map(part => {\r\n    const result = recursiveReplaceProductFromMenuInSubCategory(\r\n      part,\r\n      itemToReplace,\r\n      baseItemProducts,\r\n      part.max,\r\n      productsReplaced,\r\n      []\r\n    )\r\n\r\n    productsReplaced = result.productsReplaced\r\n    return result.category\r\n  })\r\n\r\n  return orderMenuModifier(itemToReplace)\r\n}\r\n\r\nconst formatItemSuggetions = (orderItem, { catalog }) => {\r\n  if (orderItem.hasSuggestion) {\r\n    orderItem.suggestions = orderItem.suggestedItems.map(item => {\r\n      // on replace action, merge orderItem product/options with suggested item's\r\n      if (item.action === SuggestionActionType.REPLACE) {\r\n        if (orderItem.isProduct && item.isProduct) {\r\n          item = replaceProductWithProduct(orderItem, item)\r\n        } else if (orderItem.isProduct && item.isMenu) {\r\n          item = replaceProductWithMenu(orderItem, item)\r\n        } else if (orderItem.isMenu && item.isMenu) {\r\n          item = replaceMenuWithMenu(orderItem, item)\r\n        }\r\n\r\n        item.suggestedPrice = item.totalPrice - orderItem.totalPrice\r\n        item.suggestedPriceFormatted = formatPriceWithCurrency(item.suggestedPrice)\r\n      } else {\r\n        item.suggestedPrice = item.price\r\n        item.suggestedPriceFormatted = item.priceFormatted\r\n      }\r\n\r\n      item.isSuggestedItem = true\r\n\r\n      return {\r\n        item,\r\n        action: item.action,\r\n      }\r\n    })\r\n\r\n    orderItem.suggestions = orderItem.suggestions.filter(suggestion => !isNil(suggestion))\r\n  }\r\n\r\n  return orderItem\r\n}\r\n\r\nexport const formatSuggestion = createFormatter(formatItemSuggetions)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { getCatalogFormatted } from 'pmt-modules/catalog/selectors'\r\n\r\nimport { formatSuggestion } from './format'\r\n\r\nconst getSuggestionState = state => (isNil(state) ? null : state.entities.suggestion)\r\n\r\nexport const getSuggestion = createSelector(\r\n  [getSuggestionState, getCatalogFormatted],\r\n  (suggestionState, formattedCatalog) => {\r\n    if (isNil(suggestionState) || isNil(formattedCatalog)) {\r\n      return null\r\n    }\r\n\r\n    const orderItem = suggestionState.get('orderItem')\r\n    if (isNil(orderItem)) {\r\n      return null\r\n    }\r\n\r\n    return formatSuggestion(orderItem.toJS(), {\r\n      catalog: formattedCatalog,\r\n    })\r\n  }\r\n)\r\n","import Immutable from 'immutable'\r\n\r\nimport { SuggestionActions } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './constants'\r\nexport * from './selectors'\r\n\r\nlet DEFAULT_STATE = Immutable.fromJS({\r\n  orderItem: null,\r\n})\r\n\r\nexport const suggestionReducer = (state = DEFAULT_STATE, action) => {\r\n  switch (action.type) {\r\n    case SuggestionActions.CREATE:\r\n      return state.merge({\r\n        orderItem: action.orderItem,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import isNil from 'lodash/isNil'\r\n\r\nimport ApiEndpoints from '../config/ApiEndpoints'\r\nimport { getDefaultLocale } from 'pmt-modules/i18n'\r\n\r\nconst UpsellApi = {\r\n  getUpsellings: (orderPreview, restaurantId, date, mode) => {\r\n    let query = {\r\n      menuSource: 'LOCAL_ONLY',\r\n      loadCartModifiers: true,\r\n      mode,\r\n      locale: getDefaultLocale(), // locale coming from browser OR overriden by the queryParam \"l\"\r\n    }\r\n\r\n    if (!isNil(date)) {\r\n      query = { ...query, date }\r\n    }\r\n\r\n    return {\r\n      endpoint: ApiEndpoints.UPSELLINGS,\r\n      type: 'POST',\r\n      body: orderPreview,\r\n      params: {\r\n        restaurantId,\r\n      },\r\n      query,\r\n    }\r\n  },\r\n}\r\n\r\nexport default UpsellApi\r\n","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { createHideDialogAction, createShowDialogAction, ModalType } from 'pmt-modules/dialog'\r\nimport UpsellApi from '../api/calls/UpsellApi'\r\nimport { createAction } from '../redux'\r\n\r\nexport const GetUpsellsAction = {\r\n  ...createApiEnumAction('UPSELLS::GET'),\r\n  PREPARE_FOR_CALL: 'UPSELLS::PREPARE_FOR_CALL',\r\n}\r\n\r\nexport const fetchUpsells = (orderPreview, restaurantId, dueDate, mode, options) =>\r\n  createApiCallAction(\r\n    GetUpsellsAction,\r\n    UpsellApi.getUpsellings(orderPreview, restaurantId, dueDate, mode),\r\n    {\r\n      restaurantId,\r\n      dueDate,\r\n      mode,\r\n      ...options,\r\n    }\r\n  )\r\n\r\nexport const prepareForFetchingUpsells = () => createAction(GetUpsellsAction.PREPARE_FOR_CALL, {})\r\n\r\n/**\r\n * @param {*} upsellingCategory item pending to be add to cart\r\n */\r\nexport const showUpsellingDialog = upsellingCategory =>\r\n  createShowDialogAction(ModalType.UPSELLING_VIEW, {\r\n    upsellingCategory,\r\n  })\r\n\r\nexport const hideUpsellingDialog = () => createHideDialogAction(ModalType.UPSELLING_VIEW)\r\n","import isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\nimport { getItemListFromCartForOrderPreview } from 'pmt-modules/cart/selectors'\r\nimport createMiddleware from 'pmt-modules/redux/createMiddleware'\r\nimport { getOrderProperties } from 'pmt-modules/orderFront'\r\n\r\nimport { getMs } from 'pmt-utils/date'\r\n\r\nimport { fetchUpsells, GetUpsellsAction } from '../actions'\r\nimport { displayUpselling } from '../../orderFront'\r\nimport { getUpsellingDataFormatted } from '../selectors'\r\nimport { transformCartForApi } from '../../orderPreview/utils/transformForApi/transformCartForApi'\r\n\r\nconst buildOrderPreview = (getState) => {\r\n  const sendDate = getMs(moment())\r\n  const itemList = getItemListFromCartForOrderPreview(getState())\r\n\r\n  const {\r\n    dueDate,\r\n    dueDateMode,\r\n    fees,\r\n    mode,\r\n    posCheckId,\r\n    restaurantId,\r\n    tableNumber,\r\n    modifierCode,\r\n    modifiers,\r\n  } = getOrderProperties(getState())\r\n\r\n  if (!isNil(mode) && !isNil(restaurantId)) {\r\n    let orderPreview = {\r\n      dueDateMode,\r\n      itemList,\r\n      sendDate,\r\n      restaurantId,\r\n      mode: parseInt(mode, 10),\r\n      tableNumber,\r\n      posCheckId,\r\n      fees,\r\n      modifierCode,\r\n      modifiers,\r\n    }\r\n\r\n    if (!isNil(dueDate)) {\r\n      orderPreview = { ...orderPreview, dueDate }\r\n    }\r\n\r\n    return transformCartForApi(orderPreview)\r\n  }\r\n}\r\n\r\nconst buildOrderPreviewAndFetchUpsells = (dispatch, getState) => {\r\n  const orderPreview = buildOrderPreview(getState)\r\n\r\n  const { dueDate, mode, restaurantId } = getOrderProperties(getState())\r\n  const options = {}\r\n  dispatch(fetchUpsells(orderPreview, restaurantId, dueDate, mode, options))\r\n}\r\n\r\nexport const prepareForFetchingUpsellsMiddleware = createMiddleware(\r\n  [GetUpsellsAction.PREPARE_FOR_CALL],\r\n  ({ getState, dispatch, next, action }) => {\r\n    buildOrderPreviewAndFetchUpsells(dispatch, getState)\r\n  }\r\n)\r\n\r\nexport const fetchingUpsellsSuccessMiddleware = createMiddleware(\r\n  [GetUpsellsAction.SUCCESS],\r\n  ({ getState, dispatch, next, action }) => {\r\n    next(action) // so we can getUpsellingDataFormatted\r\n\r\n    const upsellingData = getUpsellingDataFormatted(getState())\r\n    dispatch(displayUpselling(upsellingData.upsellingCategory))\r\n  }\r\n)\r\n\r\nexport const upsellingMiddlewares = [\r\n  prepareForFetchingUpsellsMiddleware,\r\n  fetchingUpsellsSuccessMiddleware,\r\n]\r\n","import Immutable from 'immutable'\r\n\r\nimport { GetUpsellsAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './format'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  /**\r\n   * each order mode has its own upsells, that should look like this\r\n   * [mode]: {\r\n   *  data: null,\r\n   *  isFetching: false,\r\n   *  error: null,\r\n   *  locale: null,\r\n   * }\r\n   */\r\n})\r\n\r\nexport const upsellsReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case GetUpsellsAction.REQUEST:\r\n      return state.mergeIn([String(action.data.mode)], {\r\n        data: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n        locale: action.data.locale,\r\n      })\r\n\r\n    case GetUpsellsAction.SUCCESS:\r\n      return state.mergeIn([String(action.data.mode)], {\r\n        data: { upsellingCategories: Immutable.fromJS(action.response) },\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n        locale: action.data.locale,\r\n      })\r\n\r\n    case GetUpsellsAction.FAILURE:\r\n      return state.mergeIn([String(action.data.mode)], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n        locale: action.data.locale,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(t) {\n  return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _getPrototypeOf(t);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar _classCallCheck = _interopDefault(require('@babel/runtime/helpers/classCallCheck'));\nvar _createClass = _interopDefault(require('@babel/runtime/helpers/createClass'));\nvar _possibleConstructorReturn = _interopDefault(require('@babel/runtime/helpers/possibleConstructorReturn'));\nvar _getPrototypeOf = _interopDefault(require('@babel/runtime/helpers/getPrototypeOf'));\nvar _inherits = _interopDefault(require('@babel/runtime/helpers/inherits'));\nvar _typeof = _interopDefault(require('@babel/runtime/helpers/typeof'));\nvar _objectWithoutProperties = _interopDefault(require('@babel/runtime/helpers/objectWithoutProperties'));\nvar _extends = _interopDefault(require('@babel/runtime/helpers/extends'));\nvar React = _interopDefault(require('react'));\nvar PropTypes = _interopDefault(require('prop-types'));\nvar warning = _interopDefault(require('warning'));\n\nfunction defineProperty(object, property, attr) {\n  return Object.defineProperty(object, property, attr);\n} // Passive options\n// Inspired by https://github.com/Modernizr/Modernizr/blob/master/feature-detects/dom/passiveeventlisteners.js\n\n\nvar passiveOption = function () {\n  var cache = null;\n  return function () {\n    if (cache !== null) {\n      return cache;\n    }\n\n    var supportsPassiveOption = false;\n\n    try {\n      window.addEventListener('test', null, defineProperty({}, 'passive', {\n        get: function get() {\n          supportsPassiveOption = true;\n        }\n      }));\n    } catch (err) {//\n    }\n\n    cache = supportsPassiveOption;\n    return supportsPassiveOption;\n  }();\n}();\n\nvar defaultEventOptions = {\n  capture: false,\n  passive: false\n};\n\nfunction mergeDefaultEventOptions(options) {\n  return _extends({}, defaultEventOptions, options);\n}\n\nfunction getEventListenerArgs(eventName, callback, options) {\n  var args = [eventName, callback];\n  args.push(passiveOption ? options : options.capture);\n  return args;\n}\n\nfunction on(target, eventName, callback, options) {\n  // eslint-disable-next-line prefer-spread\n  target.addEventListener.apply(target, getEventListenerArgs(eventName, callback, options));\n}\n\nfunction off(target, eventName, callback, options) {\n  // eslint-disable-next-line prefer-spread\n  target.removeEventListener.apply(target, getEventListenerArgs(eventName, callback, options));\n}\n\nfunction forEachListener(props, iteratee) {\n  var children = props.children,\n      target = props.target,\n      eventProps = _objectWithoutProperties(props, [\"children\", \"target\"]);\n\n  Object.keys(eventProps).forEach(function (name) {\n    if (name.substring(0, 2) !== 'on') {\n      return;\n    }\n\n    var prop = eventProps[name];\n\n    var type = _typeof(prop);\n\n    var isObject = type === 'object';\n    var isFunction = type === 'function';\n\n    if (!isObject && !isFunction) {\n      return;\n    }\n\n    var capture = name.substr(-7).toLowerCase() === 'capture';\n    var eventName = name.substring(2).toLowerCase();\n    eventName = capture ? eventName.substring(0, eventName.length - 7) : eventName;\n\n    if (isObject) {\n      iteratee(eventName, prop.handler, prop.options);\n    } else {\n      iteratee(eventName, prop, mergeDefaultEventOptions({\n        capture: capture\n      }));\n    }\n  });\n}\n\nfunction withOptions(handler, options) {\n  process.env.NODE_ENV !== \"production\" ? warning(options, 'react-event-listener: should be specified options in withOptions.') : void 0;\n  return {\n    handler: handler,\n    options: mergeDefaultEventOptions(options)\n  };\n}\n\nvar EventListener =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n  _inherits(EventListener, _React$PureComponent);\n\n  function EventListener() {\n    _classCallCheck(this, EventListener);\n\n    return _possibleConstructorReturn(this, _getPrototypeOf(EventListener).apply(this, arguments));\n  }\n\n  _createClass(EventListener, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.applyListeners(on);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      this.applyListeners(off, prevProps);\n      this.applyListeners(on);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.applyListeners(off);\n    }\n  }, {\n    key: \"applyListeners\",\n    value: function applyListeners(onOrOff) {\n      var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.props;\n      var target = props.target;\n\n      if (target) {\n        var element = target;\n\n        if (typeof target === 'string') {\n          element = window[target];\n        }\n\n        forEachListener(props, onOrOff.bind(null, element));\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return this.props.children || null;\n    }\n  }]);\n\n  return EventListener;\n}(React.PureComponent);\n\nEventListener.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * You can provide a single child too.\n   */\n  children: PropTypes.node,\n\n  /**\n   * The DOM target to listen to.\n   */\n  target: PropTypes.oneOfType([PropTypes.object, PropTypes.string]).isRequired\n} : {};\n\nexports.withOptions = withOptions;\nexports.default = EventListener;\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet HardwareKeyboardArrowLeft = props => {\r\n  const { slideCount, currentSlide, ...svgProps } = props\r\n\r\n  return (\r\n    <SvgIcon {...svgProps}>\r\n      <path d=\"M14.71,15.88L10.83,12l3.88-3.88c0.39-0.39,0.39-1.02,0-1.41l0,0c-0.39-0.39-1.02-0.39-1.41,0l-4.59,4.59 c-0.39,0.39-0.39,1.02,0,1.41l4.59,4.59c0.39,0.39,1.02,0.39,1.41,0l0,0C15.09,16.91,15.1,16.27,14.71,15.88z\" />\r\n    </SvgIcon>\r\n  )\r\n}\r\nHardwareKeyboardArrowLeft = pure(HardwareKeyboardArrowLeft)\r\nHardwareKeyboardArrowLeft.displayName = 'HardwareKeyboardArrowLeft'\r\nHardwareKeyboardArrowLeft.pmtName = 'SvgIcon'\r\n\r\nexport default HardwareKeyboardArrowLeft\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport EventListener from 'react-event-listener'\r\nimport debounce from 'lodash/debounce'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ArrowRightIcon from 'pmt-ui/svg-icons/hardware/keyboard-arrow-right'\r\nimport ArrowLeftIcon from 'pmt-ui/svg-icons/hardware/keyboard-arrow-left'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    width: '100%',\r\n  },\r\n  container: {\r\n    overflow: 'hidden',\r\n    position: 'relative',\r\n    float: 'left',\r\n    width: `calc(100% - ${theme.spacing(10)}px)`,\r\n    height: '100%',\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: `calc(100% - ${theme.spacing(6)}px)`,\r\n    },\r\n  },\r\n  elementContainer: {\r\n    position: 'absolute',\r\n    height: '100%',\r\n    transition: 'left 0.2s',\r\n  },\r\n  tab: {\r\n    position: 'relative',\r\n    float: 'left',\r\n    width: 'auto',\r\n    maxWidth: 182,\r\n    padding: `0 ${theme.spacing(3)}px`,\r\n    height: '100%',\r\n    lineHeight: '18px',\r\n    display: 'inline-flex',\r\n    alignItems: 'center',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n    whiteSpace: 'normal',\r\n    cursor: 'pointer',\r\n    background: 'none',\r\n    border: 'none',\r\n    font: 'inherit',\r\n    color: 'inherit',\r\n    textAlign: 'center',\r\n    '&:focus-visible': {\r\n      boxShadow: `inset 0 0 0 2px ${theme.palette.primary.main}`,\r\n    },\r\n  },\r\n  borderBottom: {\r\n    position: 'absolute',\r\n    width: '100%',\r\n    height: 3,\r\n    bottom: 0,\r\n    right: 0,\r\n    left: 0,\r\n    background: theme.palette.primary.main,\r\n  },\r\n  arrowContainer: {\r\n    float: 'left',\r\n    height: '100%',\r\n    width: theme.spacing(5),\r\n    color: theme.palette.primary.main,\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: theme.spacing(3),\r\n    },\r\n  },\r\n  arrow: {\r\n    width: '100%',\r\n    height: '100%',\r\n    display: 'inline-flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    cursor: 'pointer',\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    color: 'inherit',\r\n    '&:focus-visible': {\r\n      boxShadow: `inset 0 0 0 2px ${theme.palette.primary.main}`,\r\n    },\r\n  },\r\n  icon: {\r\n    width: 40,\r\n    height: 40,\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: 24,\r\n      height: 24,\r\n    },\r\n  },\r\n})\r\n\r\nclass Carousel extends React.Component {\r\n  state = {\r\n    initialSelection: false,\r\n    // the div that contains the elements\r\n    containerMeta: {\r\n      // containes datas of the div (width, height, left, right from viewport)\r\n      boundingClientRect: null,\r\n      // the left value applied to the container (used to \"scroll\")\r\n      left: 0,\r\n    },\r\n    // used to display or not the arrows icons\r\n    scrollButtons: {\r\n      showLeft: false,\r\n      showRight: false,\r\n    },\r\n    // used to handle the swipe movement (for mobile)\r\n    swipeDirection: {\r\n      start: 0,\r\n      end: 0,\r\n      left: false,\r\n      right: false,\r\n      // minimum width to trigger the functions that handle the swipe gesture\r\n      minimum: 50,\r\n    },\r\n    // number of elements in carousel\r\n    numberOfElement: null,\r\n    // index of the selected element\r\n    selectedElementIndex: null,\r\n    // addition of element's width to have the total width\r\n    totalWidth: null,\r\n    initialRender: true,\r\n  }\r\n\r\n  elements = []\r\n\r\n  componentDidMount() {\r\n    this.setState({\r\n      numberOfElement: this.props.elements.length,\r\n    })\r\n    this.updateElementsWidth()\r\n    this.updateContainerBoundingClientRect()\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    // we reset the elements array if we receive a new array of elements on props\r\n    if (!isEmpty(this.elements) && !isEqual(this.props.elements, nextProps.elements)) {\r\n      this.elements = []\r\n    }\r\n\r\n    if (nextProps.selectedElement.id !== this.props.selectedElement.id) {\r\n      this.handleOnClickElement(this.getIndexOfElement(nextProps.selectedElement))\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps, prevState) {\r\n    if (!isEqual(prevState, this.state)) {\r\n      this.updateElementsWidth()\r\n      this.updateSelectedElement()\r\n      this.updateScrollButtonState()\r\n    }\r\n\r\n    if (!this.state.initialSelection) {\r\n      this.handleOnClickElement(this.getIndexOfElement(this.props.selectedElement))\r\n      this.setState({\r\n        initialSelection: true,\r\n      })\r\n    }\r\n  }\r\n\r\n  getMetaContainerWidth = () =>\r\n    this.state.containerMeta.boundingClientRect\r\n      ? Math.floor(this.state.containerMeta.boundingClientRect.width)\r\n      : 0\r\n\r\n  getWidthToElement = indexElement => {\r\n    let width = 0\r\n    if (this.state.elements) {\r\n      this.state.elements.forEach((elementWidth, index) => {\r\n        if (index < indexElement) {\r\n          width += elementWidth\r\n        }\r\n      })\r\n    }\r\n\r\n    return width\r\n  }\r\n\r\n  getIndexOfElement = element => {\r\n    return this.props.elements.map(elementFromProps => elementFromProps.id).indexOf(element.id)\r\n  }\r\n\r\n  updateSelectedElement = () => {\r\n    const selectedElementIndex = this.props.elements\r\n      .map(element => element.id)\r\n      .indexOf(this.props.selectedElement.id)\r\n\r\n    this.setState({\r\n      selectedElementIndex,\r\n    })\r\n  }\r\n\r\n  updateContainerBoundingClientRect = () => {\r\n    if (!isNil(this.container)) {\r\n      this.setState({\r\n        containerMeta: {\r\n          ...this.state.containerMeta,\r\n          boundingClientRect: this.container.getBoundingClientRect(),\r\n        },\r\n      })\r\n    }\r\n  }\r\n\r\n  updateElementsWidth = () => {\r\n    let elementsWidth = []\r\n    let totalWidth = 0\r\n\r\n    this.elements.forEach(element => {\r\n      if (!isNil(element)) {\r\n        let elementMeta = element.getBoundingClientRect()\r\n        elementsWidth.push(elementMeta.width)\r\n        totalWidth += elementMeta.width\r\n      }\r\n    })\r\n\r\n    this.setState({\r\n      elements: elementsWidth,\r\n      // we add 1 pixel to be sur that the last element is well displayed\r\n      totalWidth: Math.floor(totalWidth + 3),\r\n    })\r\n  }\r\n\r\n  updateContainerLeftValue = (left, negative = false, override = false) => {\r\n    let leftTemp = negative ? -1 * left : left\r\n    leftTemp = override ? leftTemp : this.state.containerMeta.left + leftTemp\r\n\r\n    this.setState({\r\n      containerMeta: {\r\n        ...this.state.containerMeta,\r\n        left: Math.floor(leftTemp),\r\n      },\r\n    })\r\n  }\r\n\r\n  updateScrollButtonState = () => {\r\n    let showLeft = false\r\n    let showRight = false\r\n\r\n    const { containerMeta, totalWidth } = this.state\r\n\r\n    if (containerMeta.left > 0) {\r\n      showLeft = true\r\n    }\r\n\r\n    const totalLeft = containerMeta.left > 0 ? containerMeta.left : 0\r\n    if (totalLeft + this.getMetaContainerWidth() < totalWidth) {\r\n      showRight = true\r\n    }\r\n\r\n    this.setState({\r\n      scrollButtons: {\r\n        showLeft,\r\n        showRight,\r\n      },\r\n    })\r\n  }\r\n\r\n  setFocusedElementBackInView = () => {\r\n    const widthToSelectedElement = this.getWidthToElement(this.state.selectedElementIndex)\r\n    let leftTemp = 0\r\n    let applyLeft = false\r\n\r\n    // if the focused element is behind the container view (left)\r\n    if (widthToSelectedElement < this.state.containerMeta.left) {\r\n      leftTemp = widthToSelectedElement\r\n      applyLeft = true\r\n      // if the focused element is after the container view (right)\r\n    } else if (\r\n      widthToSelectedElement + this.state.elements[this.state.selectedElementIndex] >\r\n      this.getMetaContainerWidth() + this.state.containerMeta.left\r\n    ) {\r\n      leftTemp =\r\n        this.state.containerMeta.left +\r\n        (this.state.totalWidth - (this.state.containerMeta.left + this.getMetaContainerWidth()))\r\n      applyLeft = true\r\n    }\r\n\r\n    // if the user is changing the size of container\r\n    // we should lower or raise the left value applied to the container so we can keep displaying the selected one\r\n    if (applyLeft) {\r\n      this.setState({\r\n        containerMeta: {\r\n          ...this.state.containerMeta,\r\n          left: leftTemp > 0 ? leftTemp : 0,\r\n        },\r\n      })\r\n    }\r\n  }\r\n\r\n  // this function is used to fill the blank (in case the user raise the width of viewport)\r\n  updateContainerLeftPosition = () => {\r\n    if (this.getMetaContainerWidth() > this.state.totalWidth - this.state.containerMeta.left) {\r\n      const leftTemp =\r\n        this.state.containerMeta.left -\r\n        Math.abs(\r\n          this.state.totalWidth - (this.state.containerMeta.left + this.getMetaContainerWidth())\r\n        )\r\n      this.setState({\r\n        containerMeta: {\r\n          ...this.state.containerMeta,\r\n          left: leftTemp > 0 ? leftTemp : 0,\r\n        },\r\n      })\r\n\r\n      return true\r\n    }\r\n    return false\r\n  }\r\n\r\n  handleResize = debounce(() => {\r\n    this.updateContainerBoundingClientRect()\r\n    if (!this.updateContainerLeftPosition()) {\r\n      this.setFocusedElementBackInView()\r\n    }\r\n    this.updateScrollButtonState()\r\n  }, this.props.debounceCounter)\r\n\r\n  moveTabsScroll = (restToScroll, containerWidth, multiplier) => {\r\n    if (restToScroll < containerWidth) {\r\n      this.updateContainerLeftValue(multiplier * restToScroll)\r\n    } else {\r\n      this.updateContainerLeftValue(multiplier * containerWidth)\r\n    }\r\n  }\r\n\r\n  handleLeftScrollClick = () => {\r\n    if (this.container) {\r\n      const { containerMeta } = this.state\r\n\r\n      const restToScroll = containerMeta.left\r\n      const containerWidth = this.getMetaContainerWidth()\r\n\r\n      this.moveTabsScroll(restToScroll, containerWidth, -1)\r\n    }\r\n  }\r\n\r\n  handleRightScrollClick = () => {\r\n    if (this.container) {\r\n      const { containerMeta, totalWidth } = this.state\r\n\r\n      const containerElementLength = totalWidth\r\n      const containerWidth = this.getMetaContainerWidth()\r\n      const restToScroll = containerElementLength - (containerMeta.left + containerWidth)\r\n\r\n      this.moveTabsScroll(restToScroll, containerWidth, 1)\r\n    }\r\n  }\r\n\r\n  handleOnClickElement = index => {\r\n    const leftPart = this.getWidthToElement(index)\r\n    const rightPart = this.getWidthToElement(index + 1)\r\n    const centerPart = (rightPart - leftPart) / 2 + leftPart\r\n\r\n    const metaContainerWidth = this.getMetaContainerWidth()\r\n    const leftValue = centerPart - metaContainerWidth / 2\r\n    const maxLeftValue = this.state.totalWidth - metaContainerWidth\r\n\r\n    if (metaContainerWidth > 0) {\r\n      if (leftValue >= 0 && leftValue <= maxLeftValue) {\r\n        this.updateContainerLeftValue(leftValue, false, true)\r\n      } else {\r\n        if (leftValue < 0) {\r\n          this.updateContainerLeftValue(0, false, true)\r\n        } else {\r\n          this.updateContainerLeftValue(maxLeftValue, false, true)\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  handleTouchStart = e => {\r\n    const touch = e.touches[0]\r\n    if (!isUndefined(touch)) {\r\n      this.setState({\r\n        swipeDirection: {\r\n          ...this.state.swipeDirection,\r\n          start: touch.clientX,\r\n        },\r\n      })\r\n    }\r\n  }\r\n\r\n  handleTouchEnd = e => {\r\n    const touch = e.changedTouches[0]\r\n    if (!isUndefined(touch)) {\r\n      this.setState({\r\n        swipeDirection: {\r\n          ...this.state.swipeDirection,\r\n          end: touch.clientX,\r\n        },\r\n      })\r\n\r\n      const difference = Math.abs(this.state.swipeDirection.start - touch.clientX)\r\n      if (difference > this.state.swipeDirection.minimum) {\r\n        // swipe to the left (wants to see what is on the right)\r\n        if (this.state.swipeDirection.start > touch.clientX) {\r\n          this.handleRightScrollClick()\r\n          // swipe to the right (wants to see what is on the left)\r\n        } else {\r\n          this.handleLeftScrollClick()\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      elements,\r\n      selectedElement,\r\n      getLabel,\r\n      getValue,\r\n      onChange,\r\n      classes,\r\n      leftScrollLabel,\r\n      rightScrollLabel,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <EventListener target=\"window\" onResize={this.handleResize} />\r\n        <div className={classes.arrowContainer}>\r\n          {this.state.scrollButtons.showLeft && (\r\n            <button\r\n              type=\"button\"\r\n              className={classes.arrow}\r\n              onClick={this.handleLeftScrollClick}\r\n              aria-label={leftScrollLabel}\r\n            >\r\n              <ArrowLeftIcon className={classes.icon} aria-hidden=\"true\" />\r\n            </button>\r\n          )}\r\n        </div>\r\n        <div\r\n          className={classes.container}\r\n          ref={node => {\r\n            this.container = node\r\n          }}\r\n        >\r\n          <div\r\n            className={classes.elementContainer}\r\n            role=\"tablist\"\r\n            style={{\r\n              width: `${this.state.totalWidth}px`,\r\n              left: `-${this.state.containerMeta.left}px`,\r\n            }}\r\n            onTouchStart={this.handleTouchStart}\r\n            onTouchEnd={this.handleTouchEnd}\r\n          >\r\n            {elements.map((element, index) => {\r\n              const isSelected = selectedElement.id === element.id\r\n              return (\r\n                // a11y: real <button> so each category/tab is reachable and operable with the keyboard (Tab + Enter/Space)\r\n                <button\r\n                  key={index}\r\n                  type=\"button\"\r\n                  role=\"tab\"\r\n                  aria-selected={isSelected}\r\n                  onClick={() => {\r\n                    this.handleOnClickElement(index)\r\n                    onChange(getValue(element))\r\n                  }}\r\n                  className={classes.tab}\r\n                  ref={node => {\r\n                    this.elements[index] = node\r\n                  }}\r\n                >\r\n                  {getLabel(element)}\r\n                  <Hidden xsUp={!isSelected}>\r\n                    <div className={classes.borderBottom} />\r\n                  </Hidden>\r\n                </button>\r\n              )\r\n            })}\r\n          </div>\r\n        </div>\r\n        <div className={classes.arrowContainer}>\r\n          {this.state.scrollButtons.showRight && (\r\n            <button\r\n              type=\"button\"\r\n              className={classes.arrow}\r\n              onClick={this.handleRightScrollClick}\r\n              aria-label={rightScrollLabel}\r\n            >\r\n              <ArrowRightIcon className={classes.icon} aria-hidden=\"true\" />\r\n            </button>\r\n          )}\r\n        </div>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nCarousel.defaultProps = {\r\n  debounceCounter: 166,\r\n  leftScrollLabel: 'Previous',\r\n  rightScrollLabel: 'Next',\r\n}\r\n\r\nCarousel.propTypes = {\r\n  // this array must contains object that has an \"id\" property\r\n  elements: PropTypes.array,\r\n  getLabel: PropTypes.func,\r\n  getValue: PropTypes.func,\r\n  onChange: PropTypes.func,\r\n  selectedElement: PropTypes.object,\r\n  classes: PropTypes.object,\r\n  // the time between we throw the handle resize's function\r\n  debounceCounter: PropTypes.number,\r\n  leftScrollLabel: PropTypes.string,\r\n  rightScrollLabel: PropTypes.string,\r\n}\r\n\r\nexport default withStyles(styles)(Carousel)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport compose from 'recompose/compose'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { setSelectedCategory, setParentCategories } from 'pmt-modules/orderPlugin'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\nimport { trOptional } from 'pmt-modules/i18n'\r\n\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Carousel from 'pmt-ui/Carousel'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      overflow: 'hidden',\r\n      marginLeft: theme.spacing(2),\r\n      marginRight: theme.spacing(2),\r\n    },\r\n  },\r\n  categoryCarousel: {\r\n    borderBottom: `1px solid ${theme.pmt.colors.greyBackground}`,\r\n  },\r\n  categoryName: {\r\n    width: '100%',\r\n    minHeight: 17,\r\n    maxHeight: 38,\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    textOverflow: 'ellipsis',\r\n    '-webkit-line-clamp': 2,\r\n    '-webkit-box-orient': 'vertical',\r\n    textAlign: 'center',\r\n  },\r\n  tabRoot: {\r\n    height: 72,\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.down('sm')]: {\r\n      height: 50,\r\n    },\r\n  },\r\n})\r\n\r\nclass Categories extends React.PureComponent {\r\n  handleCategoryChange = value => {\r\n    const category = this.props.categories.filter(category => category.id === value).pop()\r\n    EventManager.dispatch(EventManager.Events.ON_CATALOG_CATEGORY_SELECT, {\r\n      category,\r\n    })\r\n\r\n    this.props.setParentCategories([])\r\n    this.props.redirectTo(getRoute('ORDER__CATEGORY'), {\r\n      restaurantId: this.props.restaurant.id,\r\n      categoryId: category.id,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { categories, classes, selectedCategory, parentCategories } = this.props\r\n\r\n    return (\r\n      <Hidden smDown={!isEmpty(parentCategories)}>\r\n        <div className={classes.categoryCarousel}>\r\n          {!isNil(selectedCategory) && (\r\n            <Carousel\r\n              elements={categories}\r\n              getLabel={category => (\r\n                <TypographyCustom\r\n                  type={\r\n                    !isNil(selectedCategory) && selectedCategory.id === category.id ? '167' : '164'\r\n                  }\r\n                  className={classes.categoryName}\r\n                >\r\n                  {category.name}\r\n                </TypographyCustom>\r\n              )}\r\n              getValue={category => category.id}\r\n              selectedElement={selectedCategory}\r\n              onChange={this.handleCategoryChange}\r\n              classes={{ root: classes.tabRoot }}\r\n              leftScrollLabel={trOptional('order.catalog.categories.scroll_left') || 'Previous categories'}\r\n              rightScrollLabel={trOptional('order.catalog.categories.scroll_right') || 'Next categories'}\r\n            />\r\n          )}\r\n        </div>\r\n      </Hidden>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      setSelectedCategory,\r\n      setParentCategories,\r\n      redirectTo,\r\n    }\r\n  )\r\n)(Categories)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n  },\r\n  cents: {\r\n    fontSize: '0.8em',\r\n  },\r\n  hr: {\r\n    position: 'absolute',\r\n    top: 2,\r\n    height: 1,\r\n    width: '100%',\r\n    background: theme.pmt.colors.grey500,\r\n    border: 'none',\r\n    margin: theme.spacing(1, 0),\r\n  },\r\n  finalValue: {\r\n    float: 'left',\r\n  },\r\n  baseValue: {\r\n    float: 'left',\r\n    position: 'relative',\r\n    marginTop: theme.spacing(0.5),\r\n    marginLeft: theme.spacing(1),\r\n    fontSize: '0.8em',\r\n    fontWeight: 400,\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  rowReverse: {\r\n    flexDirection: 'row-reverse',\r\n  },\r\n  hrColumn: {\r\n    top: 0,\r\n  },\r\n  column: {\r\n    flexDirection: 'column',\r\n  },\r\n  columnReverse: {\r\n    flexDirection: 'column-reverse',\r\n  },\r\n})\r\n\r\nclass Price extends React.Component {\r\n  // Render component.\r\n  render() {\r\n    const {\r\n      value,\r\n      hasCartModifier,\r\n      rowReverse,\r\n      column,\r\n      columnReverse,\r\n      baseValue,\r\n      className,\r\n      classes,\r\n    } = this.props\r\n\r\n    const values = value.split(',')\r\n    const baseValues = hasCartModifier ? baseValue.split(',') : null\r\n\r\n    if (values.length === 1) {\r\n      return (\r\n        <div className={clsx('u-overflowHidden', className, classes.root)}>\r\n          <span>{value}</span>\r\n          {hasCartModifier && <span className={classes.baseValue}>{baseValue}</span>}\r\n        </div>\r\n      )\r\n    } else {\r\n      return (\r\n        <div\r\n          className={clsx('u-overflowHidden', className, classes.root, {\r\n            [classes.rowReverse]: rowReverse,\r\n            [classes.column]: column,\r\n            [classes.columnReverse]: columnReverse,\r\n          })}\r\n        >\r\n          <div className={classes.finalValue}>\r\n            <span>{values[0]}</span>\r\n            <span className={clsx(classes.cents)}>,{values[1]}</span>\r\n          </div>\r\n          {hasCartModifier && (\r\n            <div className={classes.baseValue}>\r\n              <span>{baseValues[0]}</span>\r\n              <span className={clsx(classes.cents)}>,{baseValues[1]}</span>\r\n              <hr\r\n                className={clsx(classes.hr, {\r\n                  [classes.hrColumn]: column || columnReverse,\r\n                })}\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n      )\r\n    }\r\n  }\r\n}\r\n\r\nPrice.defaultProps = {\r\n  value: '0,00 €',\r\n  baseValue: '0,00 €',\r\n  hasCartModifier: false,\r\n  rowReverse: false,\r\n  column: false,\r\n  columnReverse: false,\r\n}\r\n\r\nPrice.propTypes = {\r\n  value: PropTypes.string.isRequired,\r\n  hasCartModifier: PropTypes.bool,\r\n  rowReverse: PropTypes.bool,\r\n  column: PropTypes.bool,\r\n  columnReverse: PropTypes.bool,\r\n}\r\n\r\nexport default withStyles(styles)(Price)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet MapsRestaurant = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M11 9H9V2H7v7H5V2H3v7c0 2.12 1.66 3.84 3.75 3.97V22h2.5v-9.03C11.34 12.84 13 11.12 13 9V2h-2v7zm5-3v8h2.5v8H21V2c-2.76 0-5 2.24-5 4z\"/>\r\n  </SvgIcon>\r\n);\r\nMapsRestaurant = pure(MapsRestaurant);\r\nMapsRestaurant.displayName = 'MapsRestaurant';\r\nMapsRestaurant.muiName = 'SvgIcon';\r\n\r\nexport default MapsRestaurant;\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport PropTypes from 'prop-types'\r\nimport clsx from 'clsx'\r\nimport Card, { CardContent, CardMedia } from 'pmt-ui/Card'\r\nimport Price from 'pmt-ui/Price'\r\nimport Divider from 'pmt-ui/Divider'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport HardwareKeyboardArrowRight from 'pmt-ui/svg-icons/hardware/keyboard-arrow-right'\r\nimport PlaceholderLogo from 'pmt-ui/svg-icons/maps/restaurant'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    position: 'relative',\r\n    cursor: 'pointer',\r\n  },\r\n  content: {\r\n    padding: `${theme.spacing(2)}px`,\r\n    paddingBottom: `${theme.spacing(2)}px !important`,\r\n  },\r\n  contentProductAndMenu: {\r\n    // make all cards to have the same size\r\n    height: 130,\r\n    position: 'relative',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'space-between',\r\n  },\r\n  media: {\r\n    height: 160,\r\n    opacity: 1,\r\n    backgroundSize: 'cover',\r\n    cursor: 'pointer',\r\n  },\r\n  mediaPlaceholder: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    backgroundColor: theme.pmt.colors.itemPlaceholderBackground,\r\n  },\r\n  mediaRestaurantLogo: {\r\n    // https://paymytable.atlassian.net/browse/PP-158\r\n    // maxHeight: '80px',\r\n    width: '120px',\r\n    opacity: 0.3,\r\n  },\r\n  mediaPlaceholderLogo: {\r\n    // https://paymytable.atlassian.net/browse/PP-158\r\n    height: '80px',\r\n    width: '80px',\r\n    opacity: 0.3,\r\n  },\r\n  categoryContent: {\r\n    height: 72,\r\n  },\r\n  categoryMedia: {\r\n    display: 'block',\r\n    float: 'left',\r\n    width: 60,\r\n    height: 40,\r\n    marginRight: theme.spacing(3),\r\n  },\r\n  categoryNameContainer: {\r\n    position: 'relative',\r\n    float: 'left',\r\n    width: 'calc(100% - 110px)',\r\n    height: 40,\r\n  },\r\n  categoryName: {\r\n    position: 'absolute',\r\n    top: '50%',\r\n    left: 0,\r\n    transform: 'translateY(-50%)',\r\n    float: 'left',\r\n    minHeight: 18,\r\n    maxHeight: 40,\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    textOverflow: 'ellipsis',\r\n    '-webkit-line-clamp': 2,\r\n    '-webkit-box-orient': 'vertical',\r\n    lineHeight: '18px',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  categoryIcon: {\r\n    height: 40,\r\n    lineHeight: '40px',\r\n  },\r\n  title: {\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    '-webkit-line-clamp': 2,\r\n    '-webkit-box-orient': 'vertical',\r\n    minHeight: 17,\r\n    maxHeight: 35,\r\n    padding: `0 0 ${theme.spacing(0.25)}px`,\r\n    color: theme.palette.primary.main,\r\n  },\r\n  iconCategory: {\r\n    lineHeight: '76px',\r\n  },\r\n  itemInfo: {\r\n    height: 55,\r\n    overflow: 'hidden',\r\n  },\r\n  description: {\r\n    maxHeight: 29,\r\n    lineHeight: '14px',\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    '-webkit-line-clamp': 2,\r\n    '-webkit-box-orient': 'vertical',\r\n  },\r\n  unavailable: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    left: 0,\r\n    width: '100%',\r\n    height: '100%',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n  },\r\n  unavailableWhite: {\r\n    background: theme.pmt.overlay.background,\r\n  },\r\n  unavailableBlack: {\r\n    background: theme.pmt.overlay.backgroundBlack,\r\n  },\r\n  unavailableCategory: {\r\n    overflow: 'initial',\r\n    opacity: 0.6,\r\n    cursor: 'default',\r\n  },\r\n  unavailableLabel: {\r\n    position: 'absolute',\r\n    top: -theme.spacing(1),\r\n    right: theme.spacing(2),\r\n    padding: `${theme.spacing(0.5)}px ${theme.spacing(1)}px`,\r\n    color: theme.pmt.colors.white,\r\n    background: theme.pmt.colors.darkGrey,\r\n    borderRadius: 3,\r\n  },\r\n  white: {\r\n    color: theme.pmt.colors.white,\r\n  },\r\n  priceAndButtonContainer: {\r\n    // since we make all cards to have the same size, we need the bottom of the card to be\r\n    // absolute to the bottom of the card\r\n    display: 'flex',\r\n    flexDirection: 'initial',\r\n    verticalAlign: 'middle',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    width: '100%',\r\n  },\r\n  extraInfos: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    display: 'flex',\r\n    justifyContent: 'flex-end',\r\n    alignItems: 'flex-start',\r\n    width: `100%`,\r\n    padding: theme.spacing(2, 2, 0),\r\n  },\r\n  extraInfosWithoutPlaceholder: {\r\n    width: `calc(100% - ${theme.spacing(2)}px)`,\r\n  },\r\n  tagsOverlay: {\r\n    position: 'absolute',\r\n    bottom: 0,\r\n    left: 0,\r\n    right: 0,\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n    alignItems: 'flex-end',\r\n    pointerEvents: 'none',\r\n  },\r\n  menuChip: {\r\n    padding: theme.spacing(1),\r\n    borderRadius: '3px',\r\n    fontSize: 10,\r\n    fontWeight: 700,\r\n    textAlign: 'center',\r\n    backgroundColor: theme.pmt.colors.grey300,\r\n    color: theme.pmt.colors.grey700,\r\n    textTransform: 'uppercase',\r\n  },\r\n  cartModifierContainer: {\r\n    left: theme.spacing(1),\r\n  },\r\n  grey300: {\r\n    color: theme.pmt.colors.grey300,\r\n  },\r\n  focusVisible: {\r\n    '&:focus-visible': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: 2,\r\n    },\r\n  },\r\n})\r\n\r\nconst CardItemOrder = ({\r\n  classes,\r\n  image,\r\n  name,\r\n  item,\r\n  description,\r\n  price,\r\n  hasCartModifier,\r\n  basePrice,\r\n  cartModifierTag,\r\n  isCategory,\r\n  isSelectableAndDisabled,\r\n  onClickCard,\r\n  displayAddButtonIcon,\r\n  buttonAdd,\r\n  buttonElement,\r\n  restaurantLogo,\r\n  isAvailable,\r\n  tagsContent,\r\n  ui,\r\n  updateUI,\r\n  width,\r\n  ...props\r\n}) => {\r\n  const disableAdd = item.disableAdd\r\n  // we don't want to display the placeholder on mobile (i.e. xs)\r\n  // see: https://www.notion.so/paymytable/Finalisation-du-Menu-Digital-2228f83526ba4e8897619991c1f9c393\r\n  const isPlaceholderHidden = !isWidthUp('sm', width) && !image\r\n\r\n  // the whole card acts as a clickable element (opens category/product/menu detail),\r\n  // but until now it was only reachable via mouse (no tabIndex/keyboard support at all)\r\n  const handleCardKeyDown = onClick => event => {\r\n    if ((event.key === 'Enter' || event.key === ' ') && onClick) {\r\n      event.preventDefault()\r\n      onClick(event)\r\n    }\r\n  }\r\n\r\n  const ItemExtraDisplay = ({ hasPlaceholder = false }) => (\r\n    <React.Fragment>\r\n      {disableAdd && (\r\n        <div className={clsx(classes.unavailable, classes.unavailableBlack)}>\r\n          <TypographyCustom align=\"center\" type=\"167\" className={classes.white} skipColor>\r\n            {tr('order.catalog.unavailable')}\r\n          </TypographyCustom>\r\n        </div>\r\n      )}\r\n      {(item.isMenu || item.hasCartModifier) && (\r\n        <div\r\n          className={clsx(classes.extraInfos, {\r\n            [classes.extraInfosWithoutPlaceholder]: !hasPlaceholder,\r\n          })}\r\n        >\r\n          {item.hasCartModifier && (\r\n            <div className={classes.cartModifierContainer}>\r\n              {item.cartModifiers.list.map((cartModifier, index) => (\r\n                <React.Fragment key={index}>{cartModifierTag(cartModifier, index)}</React.Fragment>\r\n              ))}\r\n            </div>\r\n          )}\r\n          {item.isMenu && (\r\n            <span className={classes.menuChip}>{tr('global.card_item.menu_chip')}</span>\r\n          )}\r\n        </div>\r\n      )}\r\n    </React.Fragment>\r\n  )\r\n\r\n  return isCategory ? (\r\n    <Card\r\n      className={clsx(classes.root, classes.focusVisible, {\r\n        [classes.unavailableCategory]: disableAdd,\r\n      })}\r\n      onClick={!disableAdd && onClickCard}\r\n      tabIndex={disableAdd ? -1 : 0}\r\n      role=\"button\"\r\n      aria-label={name}\r\n      onKeyDown={!disableAdd ? handleCardKeyDown(onClickCard) : undefined}\r\n    >\r\n      <CardContent className={clsx(classes.content, classes.categoryContent)}>\r\n        {image && (\r\n          <span\r\n            className={classes.categoryMedia}\r\n            style={{\r\n              background: `url('${image}') no-repeat center center`,\r\n              backgroundSize: 'cover',\r\n            }}\r\n          />\r\n        )}\r\n        {!isAvailable && (\r\n          <TypographyCustom type=\"127\" className={classes.unavailableLabel}>\r\n            {tr('order.catalog.unavailable')}\r\n          </TypographyCustom>\r\n        )}\r\n        <div className={classes.categoryNameContainer}>\r\n          <TypographyCustom type=\"167\" className={classes.categoryName}>\r\n            {name}\r\n          </TypographyCustom>\r\n        </div>\r\n        <span className={`${classes.categoryIcon} u-floatRight`}>\r\n          <HardwareKeyboardArrowRight className={classes.categoryIcon} viewBox=\"0 0 17 24\" />\r\n        </span>\r\n      </CardContent>\r\n    </Card>\r\n  ) : (\r\n    <Card\r\n      className={clsx(classes.root, classes.focusVisible)}\r\n      onClick={onClickCard}\r\n      tabIndex={0}\r\n      role=\"button\"\r\n      aria-label={name}\r\n      onKeyDown={handleCardKeyDown(onClickCard)}\r\n    >\r\n      {!isPlaceholderHidden && (\r\n        <React.Fragment>\r\n          <div className=\"u-relative\">\r\n            {image ? (\r\n              <CardMedia\r\n                className={classes.media}\r\n                image={image}\r\n                title={name}\r\n                onClick={onClickCard}\r\n              />\r\n            ) : (\r\n              // default image\r\n              // see https://paymytable.atlassian.net/browse/PP-158\r\n              <div className={clsx(classes.media, classes.mediaPlaceholder)} onClick={onClickCard}>\r\n                {restaurantLogo ? (\r\n                  <img\r\n                    className={classes.mediaRestaurantLogo}\r\n                    src={restaurantLogo}\r\n                    alt=\"restauant logo\"\r\n                  />\r\n                ) : (\r\n                  <PlaceholderLogo className={classes.mediaPlaceholderLogo} />\r\n                )}\r\n              </div>\r\n            )}\r\n            <ItemExtraDisplay hasPlaceholder />\r\n            {tagsContent && (\r\n              <div className={classes.tagsOverlay}>{tagsContent}</div>\r\n            )}\r\n          </div>\r\n          <Divider />\r\n        </React.Fragment>\r\n      )}\r\n      <CardContent\r\n        className={clsx(classes.content, classes.contentProductAndMenu)}\r\n        onClick={onClickCard}\r\n      >\r\n        {isPlaceholderHidden && (\r\n          <div>\r\n            <ItemExtraDisplay />\r\n          </div>\r\n        )}\r\n        <div className={classes.itemInfo}>\r\n          {name && (\r\n            <TypographyCustom\r\n              align=\"left\"\r\n              type=\"167\"\r\n              className={`${classes.title} u-marginBottom5`}\r\n            >\r\n              {name}\r\n            </TypographyCustom>\r\n          )}\r\n          {description && (\r\n            <TypographyCustom type=\"144\" className={classes.description} onClick={onClickCard}>\r\n              {description}\r\n            </TypographyCustom>\r\n          )}\r\n        </div>\r\n        <div className={classes.priceAndButtonContainer}>\r\n          <div className={classes.price} onClick={onClickCard}>\r\n            {price && (\r\n              <TypographyCustom component=\"div\" type=\"204\">\r\n                {({ className }) => (\r\n                  <Price\r\n                    value={price}\r\n                    hasCartModifier={hasCartModifier}\r\n                    baseValue={basePrice}\r\n                    className={className}\r\n                  />\r\n                )}\r\n              </TypographyCustom>\r\n            )}\r\n          </div>\r\n          {/* debug: we enable adding locked items, display it is locked for the tests */}\r\n          {!disableAdd && !isAvailable && <span>LOCKED</span>}\r\n          {/* -- BUTTON ADD */}\r\n          {!disableAdd && buttonAdd ? buttonAdd : null}\r\n          {/* -- */}\r\n        </div>\r\n        {(disableAdd || isSelectableAndDisabled) && (\r\n          <div className={clsx(classes.unavailable, classes.unavailableWhite)} />\r\n        )}\r\n      </CardContent>\r\n    </Card>\r\n  )\r\n}\r\n\r\nCardItemOrder.propTypes = {\r\n  title: PropTypes.string,\r\n\r\n  // description of item, not set if category\r\n  description: PropTypes.string,\r\n\r\n  // set product/menu availability\r\n  isAvailable: PropTypes.bool,\r\n\r\n  // used in menu part to know if product is not selectable anymore\r\n  isSelectableAndDisabled: PropTypes.bool,\r\n\r\n  buttonAdd: PropTypes.any,\r\n\r\n  //rendered at the bottom-left of the product image\r\n  tagsContent: PropTypes.node,\r\n}\r\n\r\nCardItemOrder.defaultProps = {\r\n  isAvailable: true,\r\n  isSelectableAndDisabled: false,\r\n  buttonAdd: null,\r\n  tagsContent: null,\r\n}\r\n\r\nconst CardItemOrderToExport = withWidth()(withStyles(styles)(CardItemOrder))\r\n\r\n// add default styles to be used by parents\r\nCardItemOrderToExport.defaultStyles = theme => ({\r\n  mediaInactive: {\r\n    backgroundSize: 'contain',\r\n    opacity: 0.1,\r\n  },\r\n})\r\n\r\nexport default CardItemOrderToExport\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ContentAdd = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/>\r\n  </SvgIcon>\r\n);\r\nContentAdd = pure(ContentAdd);\r\nContentAdd.displayName = 'ContentAdd';\r\nContentAdd.muiName = 'SvgIcon';\r\n\r\nexport default ContentAdd;\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\n/**\r\n * State machine function as child component that handles state machine and custom transitions\r\n * configuration between states.\r\n *\r\n * TODO: change state.current if prop default change\r\n */\r\nclass StateMachine extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.state = {\r\n      current: props.default,\r\n    }\r\n\r\n    this.timeout = null\r\n  }\r\n\r\n  transitionTo = to => {\r\n    this.setState({ current: to })\r\n\r\n    //\r\n    // Handle custom transitions\r\n    //\r\n\r\n    const transitions = this.props.transitions\r\n    if (transitions) {\r\n      const transition = findOnArray(transitions, transition => transition.state === to)\r\n\r\n      // there is a custom transition for the state we go to\r\n      if (transition) {\r\n        if (transition.to && transition.duration) {\r\n          this.runTransitionTo(transition)\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  runTransitionTo = transition => {\r\n    // custom transition to a specific state, after x ms\r\n    if (this.timeout) {\r\n      clearTimeout(this.timeout)\r\n    }\r\n    this.timeout = setTimeout(() => {\r\n      this.transitionTo(transition.to)\r\n    }, transition.duration)\r\n  }\r\n\r\n  render() {\r\n    return this.props.children({\r\n      currentState: this.state.current,\r\n      transitionTo: this.transitionTo,\r\n    })\r\n  }\r\n}\r\n\r\nStateMachine.defaultProps = {\r\n  transitions: null,\r\n}\r\n\r\nStateMachine.propTypes = {\r\n  default: PropTypes.string.isRequired,\r\n  states: PropTypes.object.isRequired,\r\n\r\n  /**\r\n   * Object that defines specific behavior for transitions\r\n   *\r\n   * examples:\r\n   *\r\n   * - move to state `to` after\r\n   * {\r\n   *    state: 'STATE_A',\r\n   *    to: 'STATE_B',\r\n   *    duration: 100, // 100 ms\r\n   * }\r\n   */\r\n  transitions: PropTypes.array,\r\n}\r\n\r\nexport default StateMachine\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Button from 'pmt-ui/Button'\r\nimport Dialog, { DialogActions, DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\nimport Slide from 'pmt-ui/transitions/Slide'\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n  return <Slide direction=\"up\" {...props} ref={ref} />\r\n})\r\n\r\n/**\r\n * HOC func. Display an alert dialog, with a title and an optionnal message\r\n * The children must be a function that will receive:\r\n * - openAlertDialog: function\r\n */\r\nclass AlertDialog extends React.Component {\r\n  state = {\r\n    open: false,\r\n  }\r\n\r\n  handleClickOpen = e => {\r\n    if (e) {\r\n      e.stopPropagation()\r\n    }\r\n    this.setState({ open: true })\r\n  }\r\n\r\n  handleClose = e => {\r\n    if (e) {\r\n      e.stopPropagation()\r\n    }\r\n    this.setState({ open: false })\r\n  }\r\n\r\n  handleAgree = e => {\r\n    if (e) {\r\n      e.stopPropagation()\r\n    }\r\n    this.handleClose(e)\r\n    this.props.onAgree(e)\r\n  }\r\n\r\n  handleDisagree = e => {\r\n    if (e) {\r\n      e.stopPropagation()\r\n    }\r\n    this.handleClose(e)\r\n    this.props.onDisagree && this.props.onDisagree(e)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      children,\r\n      title,\r\n      content,\r\n      dialogProps,\r\n      cancelLabel = tr('global.cancel'),\r\n      okLabel = tr('global.validate'),\r\n      cancelBtnVariant = 'outlined',\r\n    } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        {children({\r\n          openAlertDialog: this.handleClickOpen,\r\n        })}\r\n        <Dialog\r\n          open={this.state.open}\r\n          TransitionComponent={Transition}\r\n          keepMounted\r\n          onClose={this.handleClose}\r\n          aria-labelledby=\"alert-dialog-slide-title\"\r\n          aria-describedby=\"alert-dialog-slide-description\"\r\n          {...dialogProps}\r\n        >\r\n          <DialogTitle id=\"alert-dialog-slide-title\">{title}</DialogTitle>\r\n          <DialogContent>{content}</DialogContent>\r\n          <DialogActions>\r\n            <Button size=\"large\" onClick={this.handleDisagree} color=\"primary\" variant={cancelBtnVariant}>\r\n              {cancelLabel}\r\n            </Button>\r\n            <Button size=\"large\" onClick={this.handleAgree} variant=\"contained\" color=\"primary\">\r\n              {okLabel}\r\n            </Button>\r\n          </DialogActions>\r\n        </Dialog>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nAlertDialog.propTypes = {\r\n  /**\r\n   * callaback called when the user agree\r\n   */\r\n  onAgree: PropTypes.func.isRequired,\r\n  /**\r\n   * callaback called when the user disagree\r\n   * optionnal\r\n   */\r\n  onDisagree: PropTypes.func,\r\n  /**\r\n   * Title of the dialog\r\n   */\r\n  title: PropTypes.string.isRequired,\r\n  /**\r\n   * Content of the dialog\r\n   * optionnal\r\n   */\r\n  content: PropTypes.any,\r\n  /**\r\n   * the rest of the view.\r\n   * Must be a function: ({ openAlertDialog }) => {}\r\n   */\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default AlertDialog\r\n","import React from 'react'\r\n\r\nimport AlertDialog from 'pmt-ui/AlertDialog/AlertDialog'\r\nimport Button from 'pmt-ui/Button'\r\n\r\nconst AlertButton = ({\r\n  onAgree,\r\n  onDisagree,\r\n  alertTitle,\r\n  alertContent,\r\n  okLabel,\r\n  cancelLabel,\r\n  children,\r\n  label,\r\n  button = <Button />,\r\n  ...buttonOtherProps\r\n}) => (\r\n  <AlertDialog\r\n    onAgree={onAgree}\r\n    onDisagree={onDisagree}\r\n    title={alertTitle}\r\n    content={alertContent}\r\n    okLabel={okLabel}\r\n    cancelLabel={cancelLabel}\r\n  >\r\n    {({ openAlertDialog }) =>\r\n      React.cloneElement(\r\n        button,\r\n        {\r\n          onClick: e => {\r\n            e.stopPropagation()\r\n            openAlertDialog(e)\r\n          },\r\n          onSelect: e => {\r\n            // for checkboxes (with <OptionValue/>)\r\n            e.stopPropagation()\r\n            openAlertDialog(e)\r\n          },\r\n\r\n          ...buttonOtherProps,\r\n        },\r\n        <div>{children || label}</div>\r\n      )\r\n    }\r\n  </AlertDialog>\r\n)\r\n\r\nexport default AlertButton\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    height: 24,\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    textOverflow: 'ellipsis',\r\n    '-webkit-line-clamp': 2,\r\n    '-webkit-box-orient': 'vertical',\r\n    lineHeight: '22px',\r\n    padding: `0 ${theme.spacing(1)}px`,\r\n    textAlign: 'center',\r\n    background: theme.pmt.colors.white,\r\n    color: theme.palette.primary.main,\r\n    border: `1px solid ${theme.palette.primary.main}`,\r\n  },\r\n  noBorder: {\r\n    border: 'none',\r\n  },\r\n})\r\n\r\nconst Chip = ({ label, noBorder, classes, otherProps }) => (\r\n  <TypographyCustom\r\n    type=\"147\"\r\n    className={classNames(classes.root, {\r\n      [classes.noBorder]: noBorder,\r\n    })}\r\n    component=\"span\"\r\n    {...otherProps}\r\n  >\r\n    {label}\r\n  </TypographyCustom>\r\n)\r\n\r\nChip.defaultProps = {\r\n  noBorder: false,\r\n}\r\n\r\nChip.propTypes = {\r\n  label: PropTypes.string.isRequired,\r\n  noBorder: PropTypes.bool,\r\n}\r\n\r\nexport default withStyles(styles)(Chip)\r\n","import React from 'react'\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nimport Tooltip from 'pmt-ui/Tooltip'\r\n\r\nconst CartModifierTag = ({ cartModifier, chipElement, key, tooltipMsg = '' }) => (\r\n  <Tooltip\r\n    key={key}\r\n    title={tooltipMsg}\r\n    placement=\"bottom\"\r\n    // on mobile, display the tooltip as soon as the CartModifierTag is touched (default value is 700ms, aka long touch)\r\n    // stackoverflow.com/questions/69030402/material-ui-tooltip-is-not-working-on-mobile\r\n    enterTouchDelay={0}\r\n  >\r\n    {/* By default disabled elements like <button> do not trigger user interactions so a Tooltip\r\n        will not activate on normal events like hover. To accommodate disabled elements, add a simple\r\n         wrapper element like a span.\r\n         https://material-ui.com/components/tooltips/\r\n */}\r\n    <span>{isFunction(chipElement) ? chipElement(cartModifier.tag, key) : chipElement}</span>\r\n  </Tooltip>\r\n)\r\n\r\nexport default CartModifierTag\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst MAX_TAGS = 4\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n    gap: theme.spacing(0.5),\r\n    padding: theme.spacing(0.75, 1),\r\n  },\r\n  tag: {\r\n    display: 'inline-block',\r\n    padding: `${theme.spacing(0.375)}px ${theme.spacing(1)}px`,\r\n    borderRadius: 20,\r\n    background: 'rgba(240, 240, 240, 0.92)',\r\n    color: theme.palette.text.primary,\r\n    fontSize: 15,\r\n    fontWeight: 600,\r\n    lineHeight: '16px',\r\n    letterSpacing: '0.2px',\r\n    whiteSpace: 'nowrap',\r\n    maxWidth: 150,\r\n    overflow: 'hidden',\r\n    textOverflow: 'ellipsis',\r\n    boxShadow: '0 1px 4px rgba(0,0,0,0.18)',\r\n    backdropFilter: 'blur(4px)',\r\n  },\r\n  more: {\r\n    display: 'inline-block',\r\n    padding: `${theme.spacing(0.375)}px ${theme.spacing(1)}px`,\r\n    borderRadius: 20,\r\n    background: 'rgba(220, 220, 220, 0.85)',\r\n    color: theme.palette.text.primary,\r\n    fontSize: 15,\r\n    fontWeight: 500,\r\n    lineHeight: '16px',\r\n    boxShadow: '0 1px 4px rgba(0,0,0,0.12)',\r\n    backdropFilter: 'blur(4px)',\r\n  },\r\n})\r\n\r\nconst ProductTagList = ({ tags, classes }) => {\r\n  if (!tags || tags.length === 0) {\r\n    return null\r\n  }\r\n\r\n  const visibleTags = tags.slice(0, MAX_TAGS)\r\n  const remaining = tags.length - visibleTags.length\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      {visibleTags.map((tag, index) => (\r\n        <span key={index} className={classes.tag} title={tag}>\r\n          {tag}\r\n        </span>\r\n      ))}\r\n      {remaining > 0 && (\r\n        <span className={classes.more}>+{remaining}</span>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n\r\nProductTagList.propTypes = {\r\n  tags: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(ProductTagList)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getOrderProperties } from 'pmt-modules/orderPlugin'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { CardItem } from 'pmt-ui/Card'\r\nimport { CardItemOrder } from 'pmt-ui/Card/components/CardItem'\r\nimport ContentAdd from 'pmt-ui/svg-icons/content/add'\r\nimport ActionDone from 'pmt-ui/svg-icons/action/done'\r\nimport StateMachine from 'pmt-ui/StateMachine'\r\nimport AlertButton from 'pmt-ui/AlertButton'\r\n\r\nimport Button from '../../../components/Button'\r\nimport Chip from '../../../components/Chip'\r\nimport CartModifierTag from '../../../components/CartModifier/CartModifierTag'\r\nimport ProductTagList from '../../../components/ProductTagList'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport { saveAlcoholApproval, getAppConfigFrontSettings } from 'pmt-modules/orderPlugin'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => {\r\n  const cardItemDefaultStyles = CardItemOrder.defaultStyles(theme)\r\n  return {\r\n    mediaInactive: {\r\n      ...cardItemDefaultStyles.mediaInactive,\r\n    },\r\n    title: {\r\n      color: theme.palette.primary.main,\r\n    },\r\n    categoryName: {\r\n      color: theme.palette.primary.main,\r\n    },\r\n    categoryIcon: {\r\n      color: theme.palette.primary.main,\r\n    },\r\n    mediaPlaceholder: {\r\n      [theme.breakpoints.down('sm')]: {\r\n        backgroundColor: theme.pmt.colors.itemPlaceholderBackgroundSecondary,\r\n      },\r\n    },\r\n    cartModifierChip: {\r\n      display: 'table',\r\n      marginBottom: theme.spacing(0.5),\r\n      cursor: 'pointer',\r\n      borderRadius: 4,\r\n    },\r\n    cartModifierUnavailable: {\r\n      opacity: 0.2,\r\n    },\r\n  }\r\n}\r\n\r\nconst State = {\r\n  NORMAL: 'NORMAL',\r\n  ADDING_TO_CART: 'ADDING_TO_CART',\r\n}\r\n\r\nconst Item = ({\r\n  classes,\r\n  item,\r\n  isCategory,\r\n  restaurant,\r\n  selectedCategory,\r\n  onClickCard,\r\n  orderProperties,\r\n  addToCartFromShortcut,\r\n  openMenu,\r\n  openProduct,\r\n  alreadySelectedQuantity,\r\n  width,\r\n  saveAlcoholApproval,\r\n  frontSettings,\r\n}) => {\r\n  const displaySelectedQuantity = isWidthDown('sm', width) && alreadySelectedQuantity > 0\r\n  return (\r\n    <StateMachine\r\n      states={State}\r\n      default={State.NORMAL}\r\n      transitions={[\r\n        {\r\n          state: State.ADDING_TO_CART,\r\n          to: State.NORMAL,\r\n          duration: 1000,\r\n        },\r\n      ]}\r\n    >\r\n      {({ currentState, transitionTo }) => {\r\n        const addBtnLabel =\r\n          currentState === State.NORMAL\r\n            ? displaySelectedQuantity\r\n              ? alreadySelectedQuantity\r\n              : tr('order.catalog.add')\r\n            : tr('order.catalog.added')\r\n\r\n        const addBtnIcon =\r\n          currentState === State.NORMAL && !displaySelectedQuantity ? (\r\n            <ContentAdd />\r\n          ) : (\r\n            <ActionDone />\r\n          )\r\n\r\n        const addBtnAccessibleLabel = `${tr('order.catalog.add')} ${item.name}`\r\n\r\n        const processAddSimpleProductToCart = () => {\r\n          transitionTo(State.ADDING_TO_CART)\r\n          if (!item.hasSuggestion) {\r\n            EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_ADD_PRODUCT, {\r\n              dueDate: orderProperties.dueDate,\r\n              item,\r\n              category: selectedCategory,\r\n              restaurant,\r\n            })\r\n          }\r\n          addToCartFromShortcut(item)\r\n        }\r\n\r\n        return (\r\n          <CardItem\r\n            type={<CardItemOrder />}\r\n            classes={{\r\n              media: classNames({}),\r\n              title: classes.title,\r\n              categoryName: classes.categoryName,\r\n              categoryIcon: classes.categoryIcon,\r\n              mediaPlaceholder: classes.mediaPlaceholder,\r\n            }}\r\n            // give item even if it is not used, to simplify debug on react dev tools\r\n            item={item}\r\n            description={item.description}\r\n            image={item.image}\r\n            restaurantLogo={!isNil(restaurant) ? restaurant.logo : null}\r\n            name={item.name}\r\n            price={item.priceFormatted}\r\n            hasCartModifier={item.hasCartModifier}\r\n            basePrice={item.hasCartModifier ? item.basePriceFormatted : null}\r\n            cartModifierTag={(cartModifier, index) => (\r\n              <CartModifierTag\r\n                cartModifier={cartModifier}\r\n                chipElement={\r\n                  <Chip\r\n                    key={index}\r\n                    label={cartModifier.tag}\r\n                    noBorder\r\n                    classes={{\r\n                      root: classNames(classes.cartModifierChip, {\r\n                        [classes.cartModifierUnavailable]: !item.available,\r\n                      }),\r\n                    }}\r\n                  />\r\n                }\r\n                key={index}\r\n                overEventsEnabled={false}\r\n              />\r\n            )}\r\n            isAvailable={item.available}\r\n            isCategory={isCategory}\r\n            tagsContent={\r\n              item.tags && item.tags.length > 0\r\n                ? <ProductTagList tags={item.tags} />\r\n                : null\r\n            }\r\n            onClickCard={() => {\r\n              onClickCard(item)\r\n            }}\r\n            buttonAdd={\r\n              frontSettings.display.ageCheckForAlcohol &&\r\n              item.isProduct &&\r\n              !item.isComplexItem &&\r\n              item.containsAlcohol &&\r\n              !orderProperties.alcoholApprovalAnswer ? (\r\n                <AlertButton\r\n                  button={<Button size=\"small\" icon={addBtnIcon} aria-label={addBtnAccessibleLabel} />}\r\n                  label={addBtnLabel}\r\n                  onAgree={e => {\r\n                    e.stopPropagation()\r\n                    saveAlcoholApproval()\r\n                    processAddSimpleProductToCart()\r\n                  }}\r\n                  alertTitle={tr('order.cart.age_check_for_alcohol.dialog.title')}\r\n                  alertContent={tr('order.cart.age_check_for_alcohol.dialog.description')}\r\n                  okLabel={tr('order.cart.age_check_for_alcohol.dialog.ok')}\r\n                  cancelLabel={tr('order.cart.age_check_for_alcohol.dialog.cancel')}\r\n                />\r\n              ) : (\r\n                <Button\r\n                  size=\"small\"\r\n                  icon={addBtnIcon}\r\n                  label={addBtnLabel}\r\n                  aria-label={addBtnAccessibleLabel}\r\n                  onClick={e => {\r\n                    e.stopPropagation()\r\n\r\n                    // we don't allow to add an item while the transition \"adding to cart\" in in progress\r\n                    // this will prevent unwanted double-click\r\n                    if (!item.disableAdd && currentState !== State.ADDING_TO_CART) {\r\n                      if (item.isComplexItem) {\r\n                        if (item.isProduct) {\r\n                          EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_DETAIL, {\r\n                            item,\r\n                            category: selectedCategory,\r\n                            restaurant,\r\n                          })\r\n                          openProduct(item, {\r\n                            restaurantId: restaurant.id,\r\n                            showDialog: false,\r\n                          })\r\n                        } else if (item.isMenu) {\r\n                          EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_DETAIL, {\r\n                            item,\r\n                            category: selectedCategory,\r\n                            restaurant,\r\n                          })\r\n                          openMenu(item, {\r\n                            restaurantId: restaurant.id,\r\n                          })\r\n                        }\r\n                      } else {\r\n                        processAddSimpleProductToCart()\r\n                      }\r\n                    }\r\n                  }}\r\n                />\r\n              )\r\n            }\r\n          />\r\n        )\r\n      }}\r\n    </StateMachine>\r\n  )\r\n}\r\n\r\nItem.defaultProps = {\r\n  isCategory: false,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  orderProperties: getOrderProperties(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  connect(mapStateToProps, { saveAlcoholApproval }),\r\n  withWidth()\r\n)(Item)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isArray from 'lodash/isArray'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { setParentCategories } from 'pmt-modules/orderPlugin'\r\nimport { openMenu } from 'pmt-modules/orderMenu'\r\nimport { openProduct } from 'pmt-modules/orderProduct'\r\nimport { addToCartFromShortcut } from 'pmt-modules/cart'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Item from './Item'\r\n\r\nconst styles = (theme) => ({\r\n  root: {\r\n    marginTop: theme.spacing(2),\r\n  },\r\n})\r\n\r\nclass ItemList extends React.PureComponent {\r\n  containerRef = React.createRef()\r\n\r\n  componentDidUpdate(prevProps) {\r\n    const prevCategoryId = prevProps.selectedCategory && prevProps.selectedCategory.id\r\n    const currentCategoryId = this.props.selectedCategory && this.props.selectedCategory.id\r\n\r\n    if (prevCategoryId !== currentCategoryId && this.containerRef.current) {\r\n      const firstFocusableCard = this.containerRef.current.querySelector(\r\n        '[role=\"button\"][tabindex], button'\r\n      )\r\n      if (firstFocusableCard) {\r\n        firstFocusableCard.focus()\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      items,\r\n      subCategories,\r\n      catalog,\r\n      restaurant,\r\n      openMenu,\r\n      openProduct,\r\n      addToCartFromShortcut,\r\n      parentCategories,\r\n      setParentCategories,\r\n      selectedCategory,\r\n      redirectTo,\r\n      itemListFromCart,\r\n    } = this.props\r\n\r\n    return (\r\n      <Grid spacing={2} container className={classes.root} ref={this.containerRef}>\r\n        {!isEmpty(subCategories) && (\r\n          <Grid item xs={12} className=\"u-marginBottom20\">\r\n            <Grid spacing={2} container>\r\n              {subCategories.map((item) => (\r\n                <Grid key={`item-${item.id}`} item xs={12} sm={6} md={6} lg={4}>\r\n                  <Item\r\n                    item={item}\r\n                    isCategory\r\n                    catalog={catalog}\r\n                    restaurant={restaurant}\r\n                    onClickCard={(category) => {\r\n                      // update parentCategories breadcrumb.\r\n                      const newParentCategories = isArray(parentCategories) ? parentCategories : []\r\n                      if (!selectedCategory.isRootCategory === true) {\r\n                        newParentCategories.push(selectedCategory)\r\n                      }\r\n                      EventManager.dispatch(EventManager.Events.ON_CATALOG_CATEGORY_SELECT, {\r\n                        category,\r\n                      })\r\n\r\n                      setParentCategories(newParentCategories)\r\n                      redirectTo(getRoute('ORDER__CATEGORY'), {\r\n                        restaurantId: restaurant.id,\r\n                        categoryId: category.id,\r\n                      })\r\n                    }}\r\n                  />\r\n                </Grid>\r\n              ))}\r\n            </Grid>\r\n          </Grid>\r\n        )}\r\n        <Grid item xs={12}>\r\n          <Grid spacing={2} container>\r\n            {items.map((item) => (\r\n              <Grid key={`item-${item.id}`} item xs={12} sm={6} md={6} lg={4}>\r\n                <Item\r\n                  item={item}\r\n                  catalog={catalog}\r\n                  restaurant={restaurant}\r\n                  openMenu={openMenu}\r\n                  openProduct={openProduct}\r\n                  addToCartFromShortcut={addToCartFromShortcut}\r\n                  selectedCategory={selectedCategory}\r\n                  alreadySelectedQuantity={\r\n                    // sum of the \"quantity\" of all items having the same id as the current item\r\n                    // eg. for a menu, we sum the quantities, whatever the choosen options\r\n\r\n                    // we add the comparison of names too, just in case a menu and a product have the same id\r\n                    itemListFromCart.reduce((total, i) => {\r\n                      if (i.id === item.id && i.name === item.name) {\r\n                        return total + i.quantity\r\n                      } else {\r\n                        return total\r\n                      }\r\n                    }, 0)\r\n                  }\r\n                  onClickCard={() => {\r\n                    if (item.available) {\r\n                      if (item.isProduct) {\r\n                        EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_DETAIL, {\r\n                          item,\r\n                          category: selectedCategory,\r\n                          restaurant,\r\n                        })\r\n                        openProduct(item, {\r\n                          restaurantId: restaurant.id,\r\n                          showDialog: false,\r\n                        })\r\n                      } else if (item.isMenu) {\r\n                        EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_DETAIL, {\r\n                          item,\r\n                          category: selectedCategory,\r\n                          restaurant,\r\n                        })\r\n                        openMenu(item, {\r\n                          restaurantId: restaurant.id,\r\n                        })\r\n                      }\r\n                    }\r\n                  }}\r\n                />\r\n              </Grid>\r\n            ))}\r\n          </Grid>\r\n        </Grid>\r\n      </Grid>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  connect(mapStateToProps, {\r\n    setParentCategories,\r\n    addToCartFromShortcut,\r\n    openMenu,\r\n    openProduct,\r\n    redirectTo,\r\n  })\r\n)(ItemList)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    boxShadow: theme.pmt.modern.shadows.sm,\r\n    border: '1px solid rgba(0, 0, 0, 0.04)',\r\n    overflow: 'hidden',\r\n    '& > div': {\r\n      borderRadius: 0,\r\n      boxShadow: 'none',\r\n      border: 'none',\r\n    },\r\n  },\r\n})\r\n\r\nconst BlockContainerGroup = ({ children, className, classes, ...otherProps }) => (\r\n  <div className={classNames(classes.root, className)} {...otherProps}>\r\n    {children}\r\n  </div>\r\n)\r\n\r\nBlockContainerGroup.propTypes = {\r\n  children: PropTypes.node.isRequired,\r\n  className: PropTypes.string,\r\n}\r\n\r\nexport default withStyles(styles)(BlockContainerGroup)\r\n","const Type = {\r\n  BIG: 'big',\r\n  SMALL: 'small',\r\n}\r\n\r\nexport default Type\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ContentRemove = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19 13H5v-2h14v2z\"/>\r\n  </SvgIcon>\r\n);\r\nContentRemove = pure(ContentRemove);\r\nContentRemove.displayName = 'ContentRemove';\r\nContentRemove.muiName = 'SvgIcon';\r\n\r\nexport default ContentRemove;\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet Trash = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M490.667,85.333H448h-68.693l-7.019-28.075C363.883,23.552,333.717,0,298.965,0h-85.931    c-34.752,0-64.917,23.552-73.323,57.259l-7.019,28.075H64H21.333C9.536,85.333,0,94.891,0,106.667S9.536,128,21.333,128h22.485    l17.963,323.541C63.68,485.44,91.776,512,125.717,512h260.565c33.941,0,62.037-26.56,63.936-60.459L468.181,128h22.485    c11.797,0,21.333-9.557,21.333-21.333S502.464,85.333,490.667,85.333z M181.077,67.605c3.691-14.677,16.811-24.939,31.957-24.939    h85.931c15.147,0,28.267,10.261,31.957,24.939l4.416,17.728H176.661L181.077,67.605z M192,405.333    c0,11.776-9.536,21.333-21.333,21.333c-11.797,0-21.333-9.557-21.333-21.333V192c0-11.776,9.536-21.333,21.333-21.333    c11.797,0,21.333,9.557,21.333,21.333V405.333z M277.333,405.333c0,11.776-9.536,21.333-21.333,21.333    s-21.333-9.557-21.333-21.333V192c0-11.776,9.536-21.333,21.333-21.333s21.333,9.557,21.333,21.333V405.333z M362.667,405.333    c0,11.776-9.536,21.333-21.333,21.333c-11.797,0-21.333-9.557-21.333-21.333V192c0-11.776,9.536-21.333,21.333-21.333    c11.797,0,21.333,9.557,21.333,21.333V405.333z\"/>\r\n  </SvgIcon>\r\n);\r\nTrash = pure(Trash);\r\nTrash.displayName = 'Trash';\r\nTrash.muiName = 'SvgIcon';\r\n\r\nexport default Trash;\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet CartIcon = (props) => (\r\n  <SvgIcon {...props} viewBox=\"0 0 512 466\">\r\n    <path d=\"M477.091,139.909 L438.691,139.909 L410.764,47.982 C407.273,34.018 393.309,23.546 378.182,23.546 L349.091,23.546 L349.091,11.909 C349.091,4.927 344.436,0.273 337.455,0.273 L174.545,0.273 C167.563,0.273 162.909,4.928 162.909,11.909 L162.909,23.545 L144.291,23.545 C129.164,23.545 116.364,31.69 111.709,45.654 L73.309,139.909 L34.909,139.909 C15.127,139.909 0,155.036 0,174.818 L0,221.363 C0,241.145 15.127,256.272 34.909,256.272 L36.073,256.272 L55.855,434.308 C58.182,452.926 73.31,465.726 90.764,465.726 L421.237,465.726 C438.692,465.726 453.819,452.926 456.146,434.308 L475.928,256.272 L477.092,256.272 C496.874,256.272 512.001,241.145 512.001,221.363 L512.001,174.818 C512,155.036 496.873,139.909 477.091,139.909 Z M186.182,23.545 L325.818,23.545 L325.818,46.818 L186.182,46.818 L186.182,23.545 Z M489.891,221.364 L488.727,221.364 C488.727,228.346 484.072,233 477.091,233 L465.455,233 L93.091,233 C86.109,233 81.455,237.655 81.455,244.636 C81.455,251.617 86.11,256.272 93.091,256.272 L452.655,256.272 L432.873,431.981 C431.709,437.799 427.055,442.454 421.237,442.454 L90.764,442.454 C84.946,442.454 80.291,437.799 79.128,431.981 L58.182,243.473 C57.018,237.655 52.364,233 46.545,233 L34.909,233 C27.927,233 23.273,228.345 23.273,221.364 L23.273,174.819 C23.273,167.837 27.928,163.183 34.909,163.183 L81.454,163.183 L384,163.183 C390.982,163.183 395.636,158.528 395.636,151.547 C395.636,144.566 390.981,139.911 384,139.911 L98.909,139.911 L132.655,53.8 C134.982,49.145 138.473,46.818 144.291,46.818 L162.909,46.818 L162.909,58.454 C162.909,65.436 167.564,70.09 174.545,70.09 L337.454,70.09 C344.436,70.09 349.09,65.435 349.09,58.454 L349.09,46.818 L378.181,46.818 C382.836,46.818 387.49,50.309 389.817,54.963 L420.072,155.036 C421.236,159.691 425.89,163.181 431.708,163.181 L478.253,163.181 C485.235,163.181 489.889,167.836 489.889,174.817 L489.889,221.364 L489.891,221.364 Z\" id=\"Shape\"/>\r\n    <path d=\"M326.482,316.492 L326.482,306.037 C326.482,301.895 323.125,298.537 318.982,298.537 C314.839,298.537 311.482,301.895 311.482,306.037 L311.482,316.492 C311.482,320.634 314.839,323.992 318.982,323.992 C323.125,323.992 326.482,320.634 326.482,316.492 Z\" id=\"Shape\"/>\r\n    <path d=\"M200.518,316.492 L200.518,306.037 C200.518,301.895 197.161,298.537 193.018,298.537 C188.875,298.537 185.518,301.895 185.518,306.037 L185.518,316.492 C185.518,320.634 188.875,323.992 193.018,323.992 C197.16,323.992 200.518,320.634 200.518,316.492 Z\" id=\"Shape\"/>\r\n    <path d=\"M256,340.02 C264.531,340.02 272.645,336.325 278.26,329.883 C280.982,326.761 280.657,322.023 277.533,319.301 C274.41,316.578 269.674,316.905 266.951,320.027 C264.186,323.2 260.194,325.02 256,325.02 C251.806,325.02 247.814,323.2 245.049,320.027 C242.326,316.904 237.588,316.579 234.467,319.301 C231.344,322.022 231.019,326.76 233.74,329.883 C239.355,336.326 247.469,340.02 256,340.02 Z\" id=\"Shape\" transform=\"translate(256.000372, 328.737182) scale(1, -1) translate(-256.000372, -328.737182) \"/>\r\n  </SvgIcon>\r\n);\r\nCartIcon = pure(CartIcon);\r\nCartIcon.displayName = 'CartIcon';\r\nCartIcon.muiName = 'SvgIcon';\r\n\r\nexport default CartIcon;\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = {\r\n  root: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  label: {},\r\n}\r\n\r\nclass IconLabel extends React.Component {\r\n  static propTypes = {\r\n    icon: PropTypes.element.isRequired,\r\n    label: PropTypes.oneOfType([PropTypes.string, PropTypes.element])\r\n      .isRequired,\r\n  }\r\n\r\n  render() {\r\n    const { icon, label, spacing = 15, classes } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        {icon}\r\n        <span style={{ marginLeft: spacing }} className={classes.label}>\r\n          {label}\r\n        </span>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(IconLabel)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet CommentOutline = props => (\r\n  <SvgIcon viewBox=\"0 0 20 20\" {...props}>\r\n    <path\r\n      d=\"M13.125,10.625 L6.875,10.625 C6.53,10.625 6.25,10.905 6.25,11.25 C6.25,11.595 6.53,11.875 6.875,11.875 L13.125,11.875 C13.47,11.875 13.75,11.595 13.75,11.25 C13.75,10.905 13.47,10.625 13.125,10.625 Z M14.375,6.875 L5.625,6.875 C5.28,6.875 5,7.155 5,7.5 C5,7.845 5.28,8.125 5.625,8.125 L14.375,8.125 C14.72,8.125 15,7.845 15,7.5 C15,7.155 14.72,6.875 14.375,6.875 Z M10,0 C4.47751634,0 0,3.91748366 0,8.75 C0,11.5118954 1.46562092,13.9706209 3.75,15.5743791 L3.75,20 L8.13062092,17.3418627 C8.73689542,17.4418954 9.36062092,17.5 10,17.5 C15.5231373,17.5 20,13.5825163 20,8.75 C20,3.91748366 15.5231373,0 10,0 Z M10,16.25 C9.27,16.25 8.565,16.165 7.88748366,16.0206209 L4.94496732,17.7893464 L4.98434641,14.8906209 C2.72875817,13.5337582 1.25,11.2912745 1.25,8.75 C1.25,4.60813725 5.16748366,1.25 10,1.25 C14.8325163,1.25 18.75,4.60813725 18.75,8.75 C18.75,12.8918627 14.8325163,16.25 10,16.25 Z\"\r\n      id=\"Shape\"\r\n    />\r\n  </SvgIcon>\r\n)\r\nCommentOutline = pure(CommentOutline)\r\nCommentOutline.displayName = 'CommentOutline'\r\nCommentOutline.muiName = 'SvgIcon'\r\n\r\nexport default CommentOutline\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport Type from '../Type'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport Box from 'pmt-ui/Box'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport IconLabel from 'pmt-ui/IconLabel'\r\nimport CommentOutlineIcon from 'pmt-ui/svg-icons/communication/comment-outline'\r\n\r\nconst styles = theme => ({\r\n  optionsFromMenu: {\r\n    marginLeft: theme.spacing(1),\r\n  },\r\n\r\n  commentFromMenu: {\r\n    marginLeft: theme.spacing(1),\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n\r\n  commentIcon: {\r\n    width: 18,\r\n  },\r\n\r\n  commentLabel: {},\r\n\r\n  productComment: {\r\n    marginTop: theme.spacing(1),\r\n    fontStyle: 'italic',\r\n  },\r\n\r\n  bigOptionFont: {\r\n    [theme.breakpoints.down('md')]: {\r\n      fontSize: 14,\r\n    },\r\n    lineHeight: '22px',\r\n  },\r\n  smallOptionFont: {\r\n    lineHeight: '18px',\r\n  },\r\n})\r\n\r\nconst ProductContent = ({ product, fromMenu, type, classes }) => (\r\n  <Box mt={0.5}>\r\n    {/* product options */}\r\n    <TypographyCustom\r\n      component=\"div\"\r\n      type={type === Type.BIG ? '164' : '144'}\r\n      className={classNames(classes[`${type}OptionFont`], classes.grey500, {\r\n        [classes.optionsFromMenu]: fromMenu,\r\n      })}\r\n    >\r\n      {product.optionsSelected.map(option =>\r\n        option.values.map(\r\n          value =>\r\n            value.quantity > 0 &&\r\n            isEmpty(value.unavailabilityReasons) && <div key={value.id}>{value.name}</div>\r\n        )\r\n      )}\r\n    </TypographyCustom>\r\n\r\n    {/* reclaim later */}\r\n    {product.reclaimLater && (\r\n      <TypographyCustom\r\n        component=\"div\"\r\n        type={type === Type.BIG ? '164' : '144'}\r\n        className={classNames(classes[`${type}OptionFont`], classes.grey500, {\r\n          [classes.optionsFromMenu]: fromMenu,\r\n        })}\r\n      >\r\n        {tr('order.product.reclaimLater.label')}\r\n      </TypographyCustom>\r\n    )}\r\n\r\n    {/* Product comment */}\r\n    {product.comment && (\r\n      <TypographyCustom\r\n        type={type === Type.BIG ? '164' : '144'}\r\n        component=\"div\"\r\n        className={classNames(\r\n          classes[`${type}OptionFont`],\r\n          classes.grey500,\r\n          classes.productComment,\r\n          {\r\n            [classes.commentFromMenu]: fromMenu,\r\n          }\r\n        )}\r\n      >\r\n        <IconLabel\r\n          spacing={1}\r\n          classes={{\r\n            label: classes.commentLabel,\r\n          }}\r\n          icon={<CommentOutlineIcon className={classes.commentIcon} />}\r\n          label={product.comment}\r\n        />\r\n      </TypographyCustom>\r\n    )}\r\n  </Box>\r\n)\r\n\r\nexport default withStyles(styles)(ProductContent)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport forEach from 'lodash/forEach'\r\nimport compose from 'recompose/compose'\r\nimport Grid from 'pmt-ui/Grid'\r\n\r\nimport LoyaltyIcon from '@material-ui/icons/Loyalty'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { deleteFromCart, duplicateItemOnCart, editItem, removeFromCart } from 'pmt-modules/cart'\r\nimport { getOrderPreview } from 'pmt-modules/orderPreview'\r\nimport AlertButton from 'pmt-ui/AlertButton'\r\nimport Type from './Type'\r\nimport {\r\n  withOrderProperties,\r\n  saveAlcoholApproval,\r\n  getAppConfigFrontSettings\r\n} from 'pmt-modules/orderPlugin'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Price from 'pmt-ui/Price'\r\nimport Tooltip from 'pmt-ui/Tooltip'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport ContentAdd from 'pmt-ui/svg-icons/content/add'\r\nimport ContentRemove from 'pmt-ui/svg-icons/content/remove'\r\nimport Trash from 'pmt-ui/svg-icons/pmt/Trash'\r\nimport CartIcon from 'pmt-ui/svg-icons/pmt/CartIcon'\r\n\r\nimport { existsOnArray } from 'pmt-utils/array'\r\n\r\nimport Chip from '../Chip'\r\nimport CartModifierTag from '../CartModifier/CartModifierTag'\r\n\r\nimport ProductContent from './components/ProductContent'\r\nimport { containsAlcohol } from 'pmt-modules/cart'\r\n\r\nconst styles = theme => ({\r\n  // common styles for both small and big cart\r\n  iconContainer: {\r\n    display: 'inline-block',\r\n    width: 24,\r\n    height: 24,\r\n    borderRadius: '50%',\r\n  },\r\n  iconContainerPrimary: {\r\n    border: `1px solid ${theme.palette.primary.main}`,\r\n\r\n    // transition with cartContentIconPrimary\r\n    // https://stackoverflow.com/questions/18376815/trigger-animation-on-element-click-in-pure-css\r\n    '&:not(:active)': {\r\n      transition: 'background-color 400ms step-end',\r\n    },\r\n\r\n    '&:active, &:hover': {\r\n      backgroundColor: theme.palette.primary.main,\r\n    },\r\n  },\r\n  iconContainerTrash: {\r\n    border: `1px solid ${theme.pmt.colors.grey500}`,\r\n\r\n    // transition with cartContentIconPrimary\r\n    // https://stackoverflow.com/questions/18376815/trigger-animation-on-element-click-in-pure-css\r\n    '&:not(:active)': {\r\n      transition: 'background-color 400ms, border-color 400ms step-end',\r\n    },\r\n\r\n    '&:active, &:hover': {\r\n      backgroundColor: theme.pmt.colors.red800,\r\n      borderColor: theme.pmt.colors.red800,\r\n    },\r\n  },\r\n  cartContentIcon: {\r\n    width: 22,\r\n    height: 22,\r\n    padding: 4,\r\n  },\r\n  cartContentIconPrimary: {\r\n    color: theme.palette.primary.main,\r\n\r\n    '&:not(:active)': {\r\n      transition: 'color 400ms step-end',\r\n    },\r\n\r\n    '&:active, &:hover': {\r\n      color: theme.palette.getContrastText(theme.palette.primary.main),\r\n    },\r\n  },\r\n  cartContentIconTrash: {\r\n    color: theme.pmt.colors.grey500,\r\n\r\n    '&:not(:active)': {\r\n      transition: 'color 400ms step-end',\r\n    },\r\n\r\n    '&:active, &:hover': {\r\n      color: theme.palette.getContrastText(theme.pmt.colors.red800),\r\n    },\r\n  },\r\n  cartContentText: {\r\n    width: 26,\r\n  },\r\n  deleteSection: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  deleteIconContainer: {\r\n    height: 24,\r\n    lineHeight: '24px',\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  divider: {\r\n    width: '100%',\r\n    height: 0,\r\n    borderBottom: `1px solid ${theme.pmt.colors.grey300}`,\r\n  },\r\n  cartIcon: {\r\n    display: 'block',\r\n    width: 80,\r\n    height: 80,\r\n    margin: '0 auto',\r\n    marginBottom: 20,\r\n  },\r\n\r\n  menuProductOption: {\r\n    marginLeft: theme.spacing(1),\r\n  },\r\n\r\n  // styles for big type\r\n  bigQuantityGrid: {\r\n    float: 'left',\r\n    width: 74,\r\n  },\r\n  bigNameAndOptionsGrid: {\r\n    float: 'left',\r\n    paddingLeft: 30,\r\n    width: 'calc(100% - ( 74px + 105px ) )',\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: 'calc(100% - ( 74px + 75px ) )',\r\n    },\r\n    lineHeight: '21px',\r\n  },\r\n  bigPriceGrid: {\r\n    float: 'left',\r\n    width: 105,\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: 75,\r\n    },\r\n  },\r\n  bigNameFont: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingTop:3,\r\n      fontSize: 16,\r\n    },\r\n  },\r\n  bigTotalPriceFont: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingTop:3,\r\n      fontSize: 16,\r\n    },\r\n  },\r\n  bigMathPriceFont: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      fontSize: 12,\r\n    },\r\n  },\r\n  bigMenuProductFont: {\r\n    lineHeight: '20px',\r\n  },\r\n\r\n  // styles for small type\r\n  smallQuantityGrid: {\r\n    float: 'left',\r\n    width: 40,\r\n  },\r\n  smallNameAndOptionsGrid: {\r\n    float: 'left',\r\n    paddingLeft: 10,\r\n    width: 'calc(100% - ( 40px + 85px ) )',\r\n    marginTop: 3,\r\n  },\r\n  smallPriceGrid: {\r\n    float: 'left',\r\n    width: 85,\r\n  },\r\n  smallNameFont: {\r\n      paddingTop: 3,\r\n    },\r\n  smallTotalPriceFont: {\r\n      paddingTop:3,\r\n  },\r\n  smallMenuProductFont: {\r\n    lineHeight: '18px',\r\n  },\r\n  smallMathPriceFont: {\r\n    paddingTop: 5,\r\n  },\r\n  cartModifierContainer: {\r\n    overflow: 'hidden',\r\n  },\r\n  cartModifierChip: {\r\n    float: 'left',\r\n    fontSize: 12,\r\n    padding: `0 ${theme.spacing(0.5)}px`,\r\n    marginTop: theme.spacing(0.5),\r\n    marginRight: theme.spacing(0.5),\r\n    cursor: 'pointer',\r\n    borderRadius: 4,\r\n  },\r\n  cartModifierUnavailable: {\r\n    color: theme.palette.action.disabled,\r\n    borderColor: theme.palette.action.disabled,\r\n  },\r\n  modifiers: {\r\n    '& > div:not(:last-child)': {\r\n      marginBottom: theme.spacing(1),\r\n    },\r\n  },\r\n  modifier: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  loyalty: {\r\n    color: theme.palette.primary.main,\r\n    width: 16,\r\n    height: 16,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n})\r\n\r\nconst ItemQuantity = ({\r\n  classes,\r\n  item,\r\n  enabledQuantityChange,\r\n  deleteFromCart,\r\n  removeFromCart,\r\n  duplicateItemOnCart,\r\n  alcoholApprovalAnswer,\r\n  saveAlcoholApproval,\r\n  frontSettings,\r\n}) => (\r\n  <div className={`u-alignMiddle`}>\r\n    {enabledQuantityChange && (\r\n      <React.Fragment>\r\n        {item.quantity === 1 ? (\r\n          <span className={classNames(classes.iconContainer, classes.iconContainerTrash)}>\r\n            <Trash\r\n              viewBox=\"0 0 512 512\"\r\n              className={classNames(\r\n                'u-alignBlock',\r\n                'u-cursorPointer',\r\n                classes.cartContentIcon,\r\n                classes.cartContentIconTrash\r\n              )}\r\n              onClick={() => {\r\n                deleteFromCart(item)\r\n              }}\r\n            />\r\n          </span>\r\n        ) : (\r\n          <span className={classNames(classes.iconContainer, classes.iconContainerPrimary)}>\r\n            <ContentRemove\r\n              className={classNames(\r\n                'u-alignBlock',\r\n                'u-cursorPointer',\r\n                classes.cartContentIcon,\r\n                classes.cartContentIconPrimary\r\n              )}\r\n              onClick={() => {\r\n                removeFromCart(item)\r\n              }}\r\n            />\r\n          </span>\r\n        )}\r\n      </React.Fragment>\r\n    )}\r\n    <TypographyCustom\r\n      component=\"span\"\r\n      type=\"164\"\r\n      align=\"center\"\r\n      className={classNames('u-alignBlock', classes.cartContentText)}\r\n    >\r\n      {item.quantity}\r\n    </TypographyCustom>\r\n    {enabledQuantityChange && (\r\n      <span className={classNames(classes.iconContainer, classes.iconContainerPrimary)}>\r\n        {frontSettings.display.ageCheckForAlcohol &&\r\n        containsAlcohol([item]) &&\r\n        !alcoholApprovalAnswer ? (\r\n          <AlertButton\r\n            button={\r\n              <ContentAdd\r\n                className={classNames(\r\n                  'u-alignBlock',\r\n                  'u-cursorPointer',\r\n                  classes.cartContentIcon,\r\n                  classes.cartContentIconPrimary\r\n                )}\r\n              />\r\n            }\r\n            onAgree={e => {\r\n              e.stopPropagation()\r\n              saveAlcoholApproval()\r\n              duplicateItemOnCart(item)\r\n            }}\r\n            alertTitle={tr('order.cart.age_check_for_alcohol.dialog.title')}\r\n            alertContent={tr('order.cart.age_check_for_alcohol.dialog.description')}\r\n            okLabel={tr('order.cart.age_check_for_alcohol.dialog.ok')}\r\n            cancelLabel={tr('order.cart.age_check_for_alcohol.dialog.cancel')}\r\n          />\r\n        ) : (\r\n          <ContentAdd\r\n            className={classNames(\r\n              'u-alignBlock',\r\n              'u-cursorPointer',\r\n              classes.cartContentIcon,\r\n              classes.cartContentIconPrimary\r\n            )}\r\n            onClick={() => {\r\n              duplicateItemOnCart(item)\r\n            }}\r\n          />\r\n        )}\r\n      </span>\r\n    )}\r\n  </div>\r\n)\r\nItemQuantity.propTypes = {\r\n  classes: PropTypes.object.isRequired,\r\n  enabledQuantityChange: PropTypes.bool.isRequired,\r\n  type: PropTypes.string.isRequired,\r\n  item: PropTypes.object.isRequired,\r\n  deleteFromCart: PropTypes.func.isRequired,\r\n  removeFromCart: PropTypes.func.isRequired,\r\n  duplicateItemOnCart: PropTypes.func.isRequired,\r\n  alcoholApprovalAnswer: PropTypes.bool.isRequired,\r\n  saveAlcoholApproval: PropTypes.func.isRequired,\r\n}\r\n\r\nconst ItemNameAndOptions = ({\r\n  classes,\r\n  type,\r\n  item,\r\n  onEditItem,\r\n  enabledClickableItems,\r\n  modifiersFromCart,\r\n}) => {\r\n  let hasComplexModifier = false\r\n  forEach(item.modifierIds, modifierId => {\r\n    if (existsOnArray(modifiersFromCart, ({ id, isComplex }) => id === modifierId && isComplex)) {\r\n      hasComplexModifier = true\r\n    }\r\n  })\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <TypographyCustom\r\n        type={type === Type.BIG ? '204' : '164'}\r\n        className={classNames(classes[`${type}NameFont`], {\r\n          'u-cursorPointer': enabledClickableItems,\r\n        })}\r\n        onClick={enabledClickableItems && onEditItem}\r\n      >\r\n        {hasComplexModifier && <LoyaltyIcon className={classes.loyalty} />}\r\n        {item.name}\r\n      </TypographyCustom>\r\n      {item.hasCartModifier && (\r\n        <div className={classes.cartModifierContainer}>\r\n          {item.cartModifiers.list.map((cartModifier, index) => {\r\n            // we disabled \"cartModifiers from catalog\" that are NOT really applied by the API\r\n            // eg. a discount can be displayed on the Catalog item, but not applied if this discount is not cumulative and another discount applied first\r\n\r\n            // item.cardModifiers and item.hasCartModifier come from the catalogProduct\r\n            // whereas item.modifierIds comes from the API orderProduct\r\n            const disabled = !item.modifierIds?.includes(cartModifier.id)\r\n\r\n            return (\r\n              <CartModifierTag\r\n                cartModifier={cartModifier}\r\n                chipElement={\r\n                  <Chip\r\n                    key={index}\r\n                    label={cartModifier.tag}\r\n                    classes={{\r\n                      root: classNames(classes.cartModifierChip, {\r\n                        [classes.cartModifierUnavailable]: disabled,\r\n                      }),\r\n                    }}\r\n                  />\r\n                }\r\n                key={index}\r\n                tooltipMsg={disabled ? tr('order.cart.cart_modifier.not_applied') : ''}\r\n              />\r\n            )\r\n          })}\r\n        </div>\r\n      )}\r\n      <div\r\n        className={classNames({\r\n          'u-cursorPointer': enabledClickableItems,\r\n        })}\r\n        onClick={enabledClickableItems && onEditItem}\r\n      >\r\n        {item.isProduct && <ProductContent fromMenu={false} product={item} type={type} />}\r\n\r\n        {item.isMenu && (\r\n          /* menu products */\r\n          <TypographyCustom\r\n            component=\"div\"\r\n            type={type === Type.BIG ? '164' : '144'}\r\n            className={classNames(classes[`${type}OptionFont`], classes.grey500)}\r\n          >\r\n            {item.selectedProducts.map((product, index) => (\r\n              <React.Fragment key={index}>\r\n                <span className={classes[`${type}MenuProductFont`]}>{product.name}</span>\r\n                <ProductContent fromMenu product={product} type={type} />\r\n              </React.Fragment>\r\n            ))}\r\n          </TypographyCustom>\r\n        )}\r\n      </div>\r\n    </React.Fragment>\r\n  )\r\n}\r\nItemNameAndOptions.propTypes = {\r\n  classes: PropTypes.object.isRequired,\r\n  type: PropTypes.string.isRequired,\r\n  item: PropTypes.object.isRequired,\r\n}\r\n\r\nconst ItemPrice = ({ classes, type, item }) => (\r\n  <div className=\"u-floatRight\">\r\n    <TypographyCustom\r\n      component=\"div\"\r\n      type={type === Type.BIG ? '204' : '164'}\r\n      align=\"right\"\r\n      className={classes[`${type}TotalPriceFont`]}\r\n    >\r\n      <Price value={item.totalPriceWithQuantityFormatted} />\r\n    </TypographyCustom>\r\n\r\n    {item.quantity > 1 && (\r\n      <TypographyCustom\r\n        type={type === Type.BIG ? '164' : '124'}\r\n        align=\"right\"\r\n        className={classNames(classes[`${type}MathPriceFont`], classes.grey500)}\r\n      >\r\n        {item.quantity}x{item.totalPriceFormatted}\r\n      </TypographyCustom>\r\n    )}\r\n  </div>\r\n)\r\nItemPrice.propTypes = {\r\n  classes: PropTypes.object.isRequired,\r\n  type: PropTypes.string.isRequired,\r\n  item: PropTypes.object.isRequired,\r\n}\r\n\r\nclass CartItemListView extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      restaurant,\r\n      classes,\r\n      type,\r\n      itemList,\r\n      enabledQuantityChange,\r\n      enabledClickableItems,\r\n      deleteFromCart,\r\n      removeFromCart,\r\n      duplicateItemOnCart,\r\n      editItem,\r\n      fromRoute,\r\n      appConfigPreset,\r\n      orderPreview,\r\n      orderModifiers,\r\n      orderProperties,\r\n      saveAlcoholApproval,\r\n      frontSettings,\r\n    } = this.props\r\n\r\n    // we don't want to display prices for preset other than order plugin\r\n    // https://www.notion.so/paymytable/Finalisation-du-Menu-Digital-2228f83526ba4e8897619991c1f9c393\r\n    const shouldDisplayPrices = appConfigPreset.isPluginOrder\r\n\r\n    const modifiers = orderModifiers || orderPreview?.modifiers || []\r\n\r\n    return (\r\n      <React.Fragment>\r\n        {isEmpty(itemList) ? (\r\n          <div className=\"u-textAlignCenter u-paddingBottom60 u-paddingTop60\">\r\n            <CartIcon className={classNames(classes.grey500, classes.cartIcon)} />\r\n            <TypographyCustom\r\n              type=\"167\"\r\n              component=\"span\"\r\n              align=\"center\"\r\n              className={classNames(classes.grey500, 'u-marginTop10')}\r\n            >\r\n              {tr('order.menu.cart.not_hungry')}\r\n              <br />\r\n              {tr('order.menu.cart.empty')}\r\n            </TypographyCustom>\r\n          </div>\r\n        ) : (\r\n          <React.Fragment>\r\n            <div className={classes.modifiers}>\r\n              {modifiers.map(\r\n                modifier =>\r\n                  (modifier.isComplex || !modifier.isAutomatic) && (\r\n                    <Tooltip\r\n                      key={modifier.id}\r\n                      title={modifier.description}\r\n                      placement=\"bottom-start\"\r\n                    >\r\n                      <TypographyCustom type=\"167\" className={classes.modifier}>\r\n                        <LoyaltyIcon className={classes.loyalty} />\r\n                        {modifier.name}\r\n                      </TypographyCustom>\r\n                    </Tooltip>\r\n                  )\r\n              )}\r\n            </div>\r\n            {itemList.map((item, index) => {\r\n              return (\r\n                <React.Fragment key={index}>\r\n                  {index !== 0 && type === Type.BIG && <div className={classes.divider} />}\r\n                  <div className=\"u-overflowHidden u-paddingTop20 u-paddingBottom20\">\r\n                    <Grid container spacing={4} justify={'space-between'} alignItems={'flex-start'}>\r\n                      <Grid item>\r\n                      <ItemQuantity\r\n                        classes={classes}\r\n                        type={type}\r\n                        item={item}\r\n                        deleteFromCart={item => {\r\n                          deleteFromCart(item)\r\n                          EventManager.dispatch(EventManager.Events.ON_CART_ITEM_DELETE, {\r\n                            item,\r\n                            restaurant,\r\n                          })\r\n                        }}\r\n                        removeFromCart={item => {\r\n                          removeFromCart(item)\r\n                          EventManager.dispatch(EventManager.Events.ON_CART_ITEM_DECREASE, {\r\n                            item,\r\n                          })\r\n                        }}\r\n                        duplicateItemOnCart={item => {\r\n                          duplicateItemOnCart(item)\r\n                          EventManager.dispatch(EventManager.Events.ON_CART_ITEM_INCREASE, {\r\n                            item,\r\n                          })\r\n                        }}\r\n                        enabledQuantityChange={enabledQuantityChange}\r\n                        saveAlcoholApproval={saveAlcoholApproval}\r\n                        alcoholApprovalAnswer={orderProperties.alcoholApprovalAnswer}\r\n                        frontSettings={frontSettings}\r\n                      />\r\n                      </Grid>\r\n\r\n                    <Grid item xs>\r\n                      <ItemNameAndOptions\r\n                        classes={classes}\r\n                        modifiersFromCart={modifiers}\r\n                        type={type}\r\n                        item={item}\r\n                        onEditItem={() => {\r\n                          EventManager.dispatch(EventManager.Events.ON_CART_ITEM_DETAIL, {\r\n                            item,\r\n                          })\r\n                          editItem(item, {\r\n                            restaurantId: restaurant.id,\r\n                            fromRoute,\r\n                          })\r\n                        }}\r\n                        enabledClickableItems={enabledClickableItems}\r\n                      />\r\n                    </Grid  >\r\n                    {shouldDisplayPrices && (\r\n                      <Grid item>\r\n                        <ItemPrice classes={classes} type={type} item={item} />\r\n                      </Grid>\r\n                    )}\r\n                    </Grid>\r\n                  </div>\r\n                </React.Fragment>\r\n              )\r\n            })}\r\n          </React.Fragment>\r\n        )}\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nCartItemListView.defaultProps = {\r\n  enabledQuantityChange: true,\r\n  enabledClickableItems: true,\r\n}\r\n\r\nCartItemListView.propTypes = {\r\n  classes: PropTypes.object.isRequired,\r\n  type: PropTypes.string.isRequired,\r\n  itemList: PropTypes.array.isRequired,\r\n  deleteFromCart: PropTypes.func.isRequired,\r\n  removeFromCart: PropTypes.func.isRequired,\r\n  enabledQuantityChange: PropTypes.bool,\r\n  enabledClickableItems: PropTypes.bool,\r\n  duplicateItemOnCart: PropTypes.func.isRequired,\r\n  /**\r\n   * the route (RoutingEnum) from where this component is displayed.\r\n   */\r\n  fromRoute: PropTypes.object.isRequired,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  orderPreview: getOrderPreview(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nconst CartItemList = compose(\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withStyles(styles),\r\n  connect(mapStateToProps, {\r\n    duplicateItemOnCart,\r\n    removeFromCart,\r\n    deleteFromCart,\r\n    editItem,\r\n    saveAlcoholApproval,\r\n  })\r\n)(CartItemListView)\r\n\r\nCartItemList.Type = Type\r\n\r\nexport default CartItemList\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport isNull from 'lodash/isNull'\r\n\r\n/**\r\n * Container that handle an `open` state to be toggled\r\n *\r\n */\r\nclass ToggleContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.state = {\r\n      open: !isNull(props.defaultOpen) ? props.defaultOpen : props.open,\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (nextProps.open !== this.props.open) {\r\n      this.setState({\r\n        open: nextProps.open,\r\n      })\r\n    }\r\n  }\r\n\r\n  handleOpen = () => {\r\n    this.setState({\r\n      open: true,\r\n    })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.setState({\r\n      open: false,\r\n    })\r\n  }\r\n\r\n  handleToggle = () => {\r\n    this.setState({\r\n      open: !this.state.open,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    return this.props.children({\r\n      isOpen: this.state.open,\r\n      open: this.handleOpen,\r\n      close: this.handleClose,\r\n      toggle: this.handleToggle,\r\n    })\r\n  }\r\n}\r\n\r\nToggleContainer.defaultProps = {\r\n  open: false,\r\n\r\n  defaultOpen: null,\r\n}\r\n\r\nToggleContainer.propTypes = {\r\n  /**\r\n   * Default value for the 'open'.\r\n   * The state is updated with this prop when changed\r\n   * Default: false\r\n   */\r\n  open: PropTypes.bool,\r\n\r\n  /**\r\n   * Default value for the 'open'.\r\n   * The state is not updated with this prop when changed\r\n   * Default: false\r\n   */\r\n  defaultOpen: PropTypes.bool,\r\n}\r\n\r\nexport default ToggleContainer\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet CommunicationMessage = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z\"/>\r\n  </SvgIcon>\r\n);\r\nCommunicationMessage = pure(CommunicationMessage);\r\nCommunicationMessage.displayName = 'CommunicationMessage';\r\nCommunicationMessage.muiName = 'SvgIcon';\r\n\r\nexport default CommunicationMessage;\r\n","import React, { Fragment } from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { tr, trOptional } from 'pmt-modules/i18n'\r\nimport { haveAuthCredentials } from 'pmt-modules/auth'\r\nimport { updateComment } from 'pmt-modules/cart'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getAppConfigFrontSettings } from 'pmt-modules/orderPlugin'\r\nimport { getOrderPreview, getOrderPreviewVerifications } from 'pmt-modules/orderPreview'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport TextField from 'pmt-ui/TextField'\r\nimport Tooltip from 'pmt-ui/Tooltip'\r\nimport Price from 'pmt-ui/Price'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ToggleContainer from 'pmt-ui/ToggleContainer'\r\nimport Typography, { TypographyCustom } from 'pmt-ui/Typography'\r\nimport CommunicationMessage from 'pmt-ui/svg-icons/communication/message'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\nimport withWidth, { isWidthDown, isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport BlockContainer from 'app/components/BlockContainer'\r\n\r\nimport Button, { ButtonLink } from '../Button'\r\nimport MessageBlock from '../MessageBlock'\r\n\r\nconst styles = theme => ({\r\n  orderModeLabelAndTotal: {},\r\n  fee: {\r\n    display: 'flex',\r\n    justifyContent: 'left',\r\n    alignItems: 'center',\r\n  },\r\n  feeIcon: {\r\n    width: 18,\r\n    height: 18,\r\n    marginLeft: theme.spacing(1),\r\n    color: theme.palette.primary.main,\r\n  },\r\n  gridInverse: {\r\n    flexDirection: 'row-reverse',\r\n    justifyContent: 'space-between',\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  italic: {\r\n    fontStyle: 'italic',\r\n  },\r\n  bigButton: {\r\n    width: '100%',\r\n  },\r\n  bigButtonMargin: {\r\n    marginTop: theme.spacing(3),\r\n  },\r\n  bigButtonMarginNeg: {\r\n    marginTop: -theme.spacing(0.5),\r\n  },\r\n  commentButton: {\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.up('sm')]: {\r\n      paddingRight: theme.spacing(4),\r\n    },\r\n  },\r\n  inputComment: {\r\n    marginBottom: theme.spacing(2), // keep space for the comment count\r\n  },\r\n  commentContainer: {\r\n    position: 'relative',\r\n  },\r\n  commentCount: {\r\n    position: 'absolute',\r\n    bottom: `-${theme.spacing(0.5)}px`,\r\n    right: theme.spacing(1),\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  centerTextMobile: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      textAlign: 'center',\r\n    },\r\n  },\r\n  cartCaption: {\r\n    borderTop: `1px solid ${theme.pmt.colors.grey500}`,\r\n    marginTop: theme.spacing(3),\r\n    paddingTop: theme.spacing(3),\r\n    color: theme.pmt.colors.grey600,\r\n    fontStyle: 'italic',\r\n    textAlign: 'justify',\r\n  },\r\n  subTotalWrapper: {\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  feeLabel: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  feePrice: {\r\n    float: 'right',\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  modifiers: {\r\n    fontStyle: 'italic',\r\n    color: theme.palette.primary.main,\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  modifierTotalPrice: {\r\n    fontStyle: 'italic',\r\n    float: 'right',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  restaurantUnavailable: {\r\n    marginTop: theme.spacing(1),\r\n    color: theme.pmt.status.error,\r\n  },\r\n})\r\n\r\nconst Type = {\r\n  BIG: 'big',\r\n  SMALL: 'small',\r\n}\r\n\r\nconst CartFooterView = ({\r\n  appConfigPreset,\r\n  classes,\r\n  errorPostOrder,\r\n  frontSettings,\r\n  haveAuthCredentials,\r\n  orderProperties,\r\n  type,\r\n  itemList,\r\n  enabledSubmitCart,\r\n  fees,\r\n  minimumPrice,\r\n  minimumPriceFormatted,\r\n  restaurant,\r\n  orderPreview,\r\n  orderPreviewVerifications,\r\n  totalCartPrice,\r\n  totalCartPriceAndFeesFormatted,\r\n  totalTaxAmount,\r\n  totalTaxAmountFormatted,\r\n  totalCartPriceFormatted,\r\n  containsAlcohol,\r\n  comment,\r\n  displayMinimumPricesForFree,\r\n  updateComment,\r\n  onSubmitAction,\r\n  shouldDisplayComment,\r\n  width,\r\n  orderAppConfig,\r\n  orderModifiers,\r\n}) => {\r\n  if (!orderModifiers) {\r\n    orderModifiers = orderPreview?.modifiers || []\r\n  }\r\n\r\n  const totalSubsidiesGrantAmount = get(\r\n    orderPreviewVerifications,\r\n    'userAccount.subsidies.grantAmount',\r\n    0\r\n  )\r\n\r\n  const totalAdmissionFeesAmountIncludingTax = get(\r\n    orderPreview,\r\n    'admissionFees.amountIncludingTax',\r\n    0\r\n  )\r\n\r\n  const targetTypeTotalModifiers = orderModifiers.filter(modifier => modifier.isTargetTypeTotal)\r\n\r\n  const shouldDisplayCartTotal =\r\n    !isEmpty(fees) ||\r\n    !isEmpty(targetTypeTotalModifiers) ||\r\n    (minimumPrice !== 0 && totalCartPrice < minimumPrice) ||\r\n    totalSubsidiesGrantAmount > 0 ||\r\n    totalAdmissionFeesAmountIncludingTax > 0\r\n\r\n  // we only display tax amount when item prices are \"excluding tax\", aka for USA\r\n  const shouldDisplayTaxAmount = restaurant?.address?.country === 'US' && totalTaxAmount > 0\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <Grid spacing={1} container className={classes.gridInverse}>\r\n        <Grid item xs={12} md={type === Type.BIG ? 6 : 12}>\r\n          {/* ------------------------------------------------------------ */}\r\n          {/* total prices                                   */}\r\n          {/* ------------------------------------------------------------ */}\r\n\r\n          {frontSettings.display.totalPrices && (\r\n            <Grid container spacing={0} className=\"u-marginBottom10\">\r\n              {/* ------------------------------------------------------------ */}\r\n              {/* cart total                                   */}\r\n              {/* ------------------------------------------------------------ */}\r\n\r\n              <Grid item xs={8}>\r\n                {shouldDisplayCartTotal && (\r\n                  <TypographyCustom type=\"164\">{tr('order.menu.cart.total')}</TypographyCustom>\r\n                )}\r\n\r\n                {minimumPrice !== 0 && totalCartPrice < minimumPrice && (\r\n                  <TypographyCustom\r\n                    type=\"144\"\r\n                    className={classNames(classes.grey500, classes.italic, classes.fee)}\r\n                  >\r\n                    {tr('order.cart.minimum_order.text', { amount: minimumPriceFormatted })}\r\n\r\n                    <ToggleContainer defaultOpen={false}>\r\n                      {({ toggle, isOpen }) => (\r\n                        <Tooltip\r\n                          id=\"minimum-order-tooltip\"\r\n                          title={tr('order.cart.minimum_order.tooltip')}\r\n                          placement=\"bottom\"\r\n                          // This trick is for mobile only\r\n                          // The tooltip does not react when we simply click it (only long click)\r\n                          // So we toggle it by clicking it\r\n                          onClick={toggle}\r\n                          open={isOpen}\r\n                        >\r\n                          <ActionInfoOutline className={classes.feeIcon} />\r\n                        </Tooltip>\r\n                      )}\r\n                    </ToggleContainer>\r\n                  </TypographyCustom>\r\n                )}\r\n              </Grid>\r\n\r\n              {/* ------------------------------------------------------------ */}\r\n              {/* cart total price                                  */}\r\n              {/* ------------------------------------------------------------ */}\r\n\r\n              <Grid item xs={4}>\r\n                {shouldDisplayCartTotal && (\r\n                  <TypographyCustom\r\n                    component=\"div\"\r\n                    type=\"204\"\r\n                    align=\"right\"\r\n                    className=\"u-floatRight\"\r\n                  >\r\n                    <Price value={totalCartPriceFormatted} />\r\n                  </TypographyCustom>\r\n                )}\r\n              </Grid>\r\n            </Grid>\r\n          )}\r\n\r\n          {/* ------------------------------------------------------------ */}\r\n          {/* FEES                                                         */}\r\n          {/* ------------------------------------------------------------ */}\r\n\r\n          {orderProperties &&\r\n            (fees || []).map((fee, i) => (\r\n              <Grid key={`fee${i}`} container spacing={0} className=\"u-marginBottom10\">\r\n                <Grid item xs={8}>\r\n                  <TypographyCustom type=\"164\" className={classes.fee}>\r\n                    {fee.nameFormatted}\r\n                    {fee.publicDescriptionFormatted && (\r\n                      <ToggleContainer>\r\n                        {({ toggle, isOpen }) => (\r\n                          <Tooltip\r\n                            id={`feee${i}-tooltip`}\r\n                            title={fee.publicDescriptionFormatted}\r\n                            placement=\"bottom\"\r\n                            // This trick is for mobile only\r\n                            // The tooltip does not react when we simply click it (only long click)\r\n                            // So we toggle it by clicking it\r\n                            onClick={toggle}\r\n                            open={isOpen}\r\n                          >\r\n                            <ActionInfoOutline className={classes.feeIcon} />\r\n                          </Tooltip>\r\n                        )}\r\n                      </ToggleContainer>\r\n                    )}\r\n                  </TypographyCustom>\r\n\r\n                  {fee.hasMinimumPriceForFree && displayMinimumPricesForFree && (\r\n                    <TypographyCustom\r\n                      type=\"144\"\r\n                      className={classNames(classes.grey500, classes.italic)}\r\n                    >\r\n                      {tr('order.menu.cart.fees_for_free', {\r\n                        amount: fee.minimumPriceForFreeFormatted,\r\n                      })}\r\n                    </TypographyCustom>\r\n                  )}\r\n                </Grid>\r\n\r\n                <Grid item xs={4}>\r\n                  <TypographyCustom\r\n                    component=\"div\"\r\n                    type=\"204\"\r\n                    align=\"right\"\r\n                    className=\"u-floatRight\"\r\n                  >\r\n                    <Price value={fee.amountIncludingTaxFormatted} />\r\n                  </TypographyCustom>\r\n                </Grid>\r\n              </Grid>\r\n            ))}\r\n\r\n          {frontSettings.display.totalPrices && (\r\n            <Grid container spacing={0} className=\"u-marginTop10\">\r\n              {/* ------------------------------------------------------------ */}\r\n              {/* admission fees                                               */}\r\n              {/* ------------------------------------------------------------ */}\r\n\r\n              {totalAdmissionFeesAmountIncludingTax > 0 && (\r\n                <Fragment>\r\n                  <Grid item xs={8} className={classes.subTotalWrapper}>\r\n                    <TypographyCustom type=\"164\" className={classes.feeLabel}>\r\n                      {tr('order.cart.admission_fees.amount')}\r\n                    </TypographyCustom>\r\n                  </Grid>\r\n                  <Grid item xs={4}>\r\n                    <TypographyCustom\r\n                      component=\"div\"\r\n                      type=\"204\"\r\n                      align=\"right\"\r\n                      className={classes.feePrice}\r\n                    >\r\n                      <Price value={orderPreview.admissionFees.amountIncludingTaxFormatted} />\r\n                    </TypographyCustom>\r\n                  </Grid>\r\n                </Fragment>\r\n              )}\r\n\r\n              {/* ------------------------------------------------------------ */}\r\n              {/* subsidies                                                    */}\r\n              {/* ------------------------------------------------------------ */}\r\n\r\n              {totalSubsidiesGrantAmount > 0 && (\r\n                <Fragment>\r\n                  <Grid item xs={8} className={classes.subTotalWrapper}>\r\n                    <TypographyCustom type=\"164\" className={classes.feeLabel}>\r\n                      {tr('order.cart.subsidy.amount')}\r\n                    </TypographyCustom>\r\n                  </Grid>\r\n                  <Grid item xs={4}>\r\n                    <TypographyCustom\r\n                      component=\"div\"\r\n                      type=\"204\"\r\n                      align=\"right\"\r\n                      className={classes.feePrice}\r\n                    >\r\n                      <Price\r\n                        value={`-${orderPreviewVerifications.userAccount.subsidies.grantAmountFormatted}`}\r\n                      />\r\n                    </TypographyCustom>\r\n                  </Grid>\r\n                </Fragment>\r\n              )}\r\n\r\n              {/* ------------------------------------------------------------ */}\r\n              {/* cart modifiers with a target type total                      */}\r\n              {/* ------------------------------------------------------------ */}\r\n\r\n              {targetTypeTotalModifiers.map(modifier => (\r\n                <Fragment key={modifier.id}>\r\n                  <Grid item xs={8} className={classes.modifiers}>\r\n                    <Tooltip title={modifier.description} placement=\"bottom-start\">\r\n                      <TypographyCustom type=\"164\" skipColor>\r\n                        {modifier.name}\r\n                      </TypographyCustom>\r\n                    </Tooltip>\r\n                  </Grid>\r\n                  <Grid item xs={4}>\r\n                    <TypographyCustom\r\n                      component=\"div\"\r\n                      type=\"204\"\r\n                      align=\"right\"\r\n                      className={classes.modifierTotalPrice}\r\n                    >\r\n                      <Price value={`-${modifier.action.valueFormatted}`} />\r\n                    </TypographyCustom>\r\n                  </Grid>\r\n                </Fragment>\r\n              ))}\r\n\r\n              {/* ------------------------------------------------------------ */}\r\n              {/* taxes                                                    */}\r\n              {/* ------------------------------------------------------------ */}\r\n\r\n              {shouldDisplayTaxAmount && (\r\n                <Fragment>\r\n                  <Grid item xs={8} className={classes.subTotalWrapper}>\r\n                    <TypographyCustom type=\"164\" className={classes.feeLabel}>\r\n                      {tr('order.cart.tax.amount')}\r\n                    </TypographyCustom>\r\n                  </Grid>\r\n                  <Grid item xs={4}>\r\n                    <TypographyCustom\r\n                      component=\"div\"\r\n                      type=\"204\"\r\n                      align=\"right\"\r\n                      className={classes.feePrice}\r\n                    >\r\n                      <Price value={totalTaxAmountFormatted} />\r\n                    </TypographyCustom>\r\n                  </Grid>\r\n                </Fragment>\r\n              )}\r\n\r\n              {/* ------------------------------------------------------------ */}\r\n              {/* order mode label                                             */}\r\n              {/* ------------------------------------------------------------ */}\r\n\r\n              <Grid item xs={8}>\r\n                <TypographyCustom\r\n                  type=\"207\"\r\n                  className={classNames(classes.orderModeLabelAndTotal, {\r\n                    [classes.grey500]: isEmpty(itemList),\r\n\r\n                  })}\r\n                >\r\n                  {orderProperties.isDelivery\r\n                    ? tr('order.cart.total.delivery')\r\n                    : orderProperties.isOnSite\r\n                    ? tr('order.cart.total.on_site')\r\n                    : tr('order.cart.total.take_away')}\r\n                </TypographyCustom>\r\n              </Grid>\r\n\r\n              {/* ------------------------------------------------------------ */}\r\n              {/* total cart price and fees                               */}\r\n              {/* ------------------------------------------------------------ */}\r\n\r\n              <Grid item xs={4}>\r\n                <TypographyCustom\r\n                  component=\"div\"\r\n                  type=\"247\"\r\n                  align=\"right\"\r\n                  className={classNames('u-floatRight', classes.orderModeLabelAndTotal, {\r\n                    [classes.grey500]: isEmpty(itemList),\r\n                  })}\r\n                >\r\n                  <Price value={totalCartPriceAndFeesFormatted} />\r\n                </TypographyCustom>\r\n              </Grid>\r\n            </Grid>\r\n          )}\r\n        </Grid>\r\n\r\n        {/* ------------------------------------------------------------ */}\r\n        {/* order comment modification                                   */}\r\n        {/* ------------------------------------------------------------ */}\r\n\r\n        {type === Type.BIG && shouldDisplayComment && (\r\n          <Grid item xs={12} md={5} className={classes.centerTextMobile}>\r\n            <ToggleContainer defaultOpen={!isEmpty(comment)}>\r\n              {({ toggle, isOpen }) =>\r\n                !isOpen ? (\r\n                  <TypographyCustom type=\"164\" skipColor>\r\n                    {({ className }) => (\r\n                      <ButtonLink\r\n                        className={classNames(className, classes.commentButton, {\r\n                          [classes.bigButtonMargin]: isWidthDown('sm', width),\r\n                          [classes.bigButtonMarginNeg]: isWidthUp('sm', width),\r\n                        })}\r\n                        onClick={() => {\r\n                          EventManager.dispatch(EventManager.Events.ON_CART_ADD_COMMENT)\r\n                          toggle()\r\n                        }}\r\n                      >\r\n                        <CommunicationMessage />\r\n                        <span className=\"u-marginLeft10\">{tr('order.cart.send_message')}</span>\r\n                      </ButtonLink>\r\n                    )}\r\n                  </TypographyCustom>\r\n                ) : (\r\n                  <div className={classes.commentContainer}>\r\n                    <TextField\r\n                      id=\"multiline-flexible\"\r\n                      multiline\r\n                      fullWidth\r\n                      placeholder={tr('order.cart.your_message')}\r\n                      value={comment}\r\n                      onChange={e => updateComment(e.target.value)}\r\n                      className={classes.inputComment}\r\n                      margin=\"normal\"\r\n                      InputProps={{\r\n                        inputProps: {\r\n                          maxLength: orderAppConfig.comments.global.maxLength,\r\n                        },\r\n                      }}\r\n                      InputLabelProps={{\r\n                        shrink: true,\r\n                      }}\r\n                    />\r\n                    <TypographyCustom type=\"124\" className={classes.commentCount} component=\"div\">\r\n                      {comment.length} / {orderAppConfig.comments.global.maxLength}\r\n                    </TypographyCustom>\r\n                  </div>\r\n                )\r\n              }\r\n            </ToggleContainer>\r\n          </Grid>\r\n        )}\r\n\r\n        {/* ------------------------------------------------------------ */}\r\n        {/* Age check about alcohol                                      */}\r\n        {/* ------------------------------------------------------------ */}\r\n\r\n        {type === Type.BIG && containsAlcohol && frontSettings.display.ageCheckForAlcohol && (\r\n          <Grid container spacing={0} className=\"u-marginTop10\">\r\n            <Grid item xs={12}>\r\n              <BlockContainer type={BlockContainer.Type.WHITE}>\r\n                <TypographyCustom type=\"207\">\r\n                  {tr('order.cart.age_check_for_alcohol.banner.title')}\r\n                </TypographyCustom>\r\n                <TypographyCustom type=\"204\" className=\"u-marginTop10\">\r\n                  {tr('order.cart.age_check_for_alcohol.banner.description')}\r\n                </TypographyCustom>\r\n              </BlockContainer>\r\n            </Grid>\r\n          </Grid>\r\n        )}\r\n      </Grid>\r\n\r\n      {/* ------------------------------------------------------------ */}\r\n      {/* post order error                                             */}\r\n      {/* ------------------------------------------------------------ */}\r\n\r\n      {!isNil(errorPostOrder) && !frontSettings.display.paymentPage && (\r\n        <div className=\"u-marginTop30\">\r\n          <ErrorBlock\r\n            error={errorPostOrder}\r\n            mode={ErrorBlock.Mode.CUSTOM}\r\n            customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n          />\r\n        </div>\r\n      )}\r\n\r\n      {/* ------------------------------------------------------------ */}\r\n      {/* submit cart button                                           */}\r\n      {/* ------------------------------------------------------------ */}\r\n\r\n      {enabledSubmitCart && (\r\n        <Grid container spacing={0} className={classes.gridInverse}>\r\n          <Grid item xs={12} md={type === Type.BIG ? 6 : 12}>\r\n            {restaurant?.isStatusDisabled && (\r\n              <TypographyCustom type=\"167\" className={classes.restaurantUnavailable}>\r\n                {tr('order.cart.restaurant_disabled')}\r\n              </TypographyCustom>\r\n            )}\r\n            <TypographyCustom type=\"247\">\r\n              <Button\r\n                size=\"large\"\r\n                disabled={\r\n                  isEmpty(itemList) ||\r\n                  (isNil(orderProperties.dueDate) && !orderProperties.isAsap) ||\r\n                  orderProperties.isMissingTableNumber ||\r\n                  (minimumPrice !== 0 && totalCartPrice < minimumPrice) ||\r\n                  restaurant?.isStatusDisabled\r\n                }\r\n                className={classNames({\r\n                  [classes.bigButtonMargin]:\r\n                    frontSettings.display.totalPrices || isWidthDown('sm', width),\r\n                })}\r\n                classes={{ root: classes.bigButton }}\r\n                label={\r\n                  type === Type.BIG\r\n                    ? frontSettings.display.paymentPage ||\r\n                      !haveAuthCredentials ||\r\n                      isEmpty(itemList) ||\r\n                      orderProperties.isDelivery\r\n                      ? tr('order.cart.confirm_order')\r\n                      : tr('order.cart.confirm_post_order')\r\n                    : appConfigPreset.isDigitalMenu\r\n                    ? tr('order.menu.cart.submit_button_digital_menu')\r\n                    : tr('order.menu.cart.submit_button')\r\n                }\r\n                onClick={onSubmitAction}\r\n              />\r\n            </TypographyCustom>\r\n          </Grid>\r\n        </Grid>\r\n      )}\r\n\r\n      {/* ------------------------------------------------------------ */}\r\n      {/* TEXTS CUSTOMS                                                */}\r\n      {/* ------------------------------------------------------------ */}\r\n\r\n      {((orderProperties.isOnSite && !isNil(trOptional('ORDER__CART__ON_SITE'))) ||\r\n        (orderProperties.isTakeAway && !isNil(trOptional('ORDER__CART__TAKE_AWAY'))) ||\r\n        (orderProperties.isDelivery && !isNil(trOptional('ORDER__CART__DELIVERY')))) && (\r\n        <Typography variant=\"caption\" component=\"div\" className={classes.cartCaption}>\r\n          {orderProperties.isOnSite && trOptional('ORDER__CART__ON_SITE')}\r\n          {orderProperties.isTakeAway && trOptional('ORDER__CART__TAKE_AWAY')}\r\n          {orderProperties.isDelivery && trOptional('ORDER__CART__DELIVERY')}\r\n        </Typography>\r\n      )}\r\n    </React.Fragment>\r\n  )\r\n}\r\n\r\nCartFooterView.defaultProps = {\r\n  enabledSubmitCart: true,\r\n\r\n  displayMinimumPricesForFree: true,\r\n}\r\n\r\nCartFooterView.propTypes = {\r\n  classes: PropTypes.object.isRequired,\r\n  type: PropTypes.string.isRequired,\r\n  itemList: PropTypes.array.isRequired,\r\n  enabledSubmitCart: PropTypes.bool,\r\n\r\n  displayMinimumPricesForFree: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  haveAuthCredentials: haveAuthCredentials(state),\r\n  orderPreview: getOrderPreview(state),\r\n  orderPreviewVerifications: getOrderPreviewVerifications(state),\r\n})\r\n\r\nconst CartFooter = compose(\r\n  withWidth(),\r\n  withStyles(styles),\r\n  connect(mapStateToProps, {\r\n    updateComment,\r\n  })\r\n)(CartFooterView)\r\n\r\nCartFooter.Type = Type\r\nCartFooter.displayName = 'CartFooter'\r\n\r\nexport default CartFooter\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    position: 'relative',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  tipIcon: {\r\n    float: 'left',\r\n  },\r\n  tipText: {\r\n    float: 'left',\r\n    width: `calc(100% - 24px)`,\r\n    paddingLeft: theme.spacing(1),\r\n    textAlign: 'left',\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginTop: theme.spacing(0.5),\r\n    },\r\n  },\r\n})\r\n\r\nclass TipWithIcon extends React.PureComponent {\r\n  static propTypes = {\r\n    icon: PropTypes.element.isRequired,\r\n    label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,\r\n  }\r\n\r\n  render() {\r\n    const { icon, label, classes } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        {React.cloneElement(icon, {\r\n          className: classes.tipIcon,\r\n        })}\r\n        <p className={classes.tipText}>{label}</p>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(TipWithIcon)\r\n","/**\r\n * the commented code below will be soon used from cart modifiers\r\n */\r\nimport React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport ui from 'pmt-modules/reduxUi'\r\n// import classNames from 'classnames'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\n// import isEmpty from 'lodash/isEmpty'\r\n\r\nimport { AppConfigContainer } from 'pmt-modules/appConfig'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getCartData, forceGetItemListFromCart } from 'pmt-modules/cart'\r\nimport { isFetchingCheck } from 'pmt-modules/payment/check'\r\nimport { tr } from 'pmt-modules/i18n'\r\n// import { displayCartModifierDialog } from 'pmt-modules/dialog'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport InfoOutlineIcon from 'pmt-ui/svg-icons/action/info-outline'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\n// import CartModifier from 'pmt-ui/svg-icons/pmt/CartModifier'\r\n\r\nimport { ButtonLink } from '../../../components/Button'\r\nimport BlockContainer from '../../../components/BlockContainer'\r\nimport BlockContainerGroup from '../../../components/BlockContainerGroup'\r\nimport SlotsContainer from '../../../components/Slots'\r\nimport { CartItemList, CartFooter } from '../../../components/Cart'\r\nimport TableNumberInput from '../../../components/TableNumberInput'\r\nimport TipWithIcon from '../../../components/TipWithIcon'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    minHeight: 450,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  sideSection: {\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  sideInformationTitle: {\r\n    paddingBottom: theme.spacing(2),\r\n  },\r\n  modifyButton: {\r\n    textTransform: 'initial',\r\n  },\r\n  tipWithIcon: {\r\n    float: 'left',\r\n    maxWidth: 'none',\r\n    paddingBottom: 0,\r\n    marginTop: theme.spacing(2),\r\n    textAlign: 'left',\r\n  },\r\n  tipWithIconText: {\r\n    paddingLeft: theme.spacing(4),\r\n  },\r\n  // cartModifierIcon: {\r\n  //   width: 36,\r\n  //   height: 36,\r\n  //   color: theme.palette.primary.main,\r\n  // },\r\n  // cartModifierText: {\r\n  //   float: 'left',\r\n  //   marginLeft: theme.spacing(2),\r\n  //   marginTop: theme.spacing(0.25),\r\n  // },\r\n  // cartModifierTitle: {\r\n  //   color: theme.palette.primary.main,\r\n  //   textTransform: 'uppercase',\r\n  // },\r\n  // cartModifierNumber: {\r\n  //   color: theme.palette.primary.main,\r\n  //   marginTop: theme.spacing(0.25),\r\n  // },\r\n  // cartModifierButton: {\r\n  //   float: 'right',\r\n  //   height: 36,\r\n  //   lineHeight: '36px',\r\n  // },\r\n})\r\n\r\nclass SideInformation extends React.PureComponent {\r\n  componentDidMount() {\r\n    if (this.props.orderProperties.isMissingTableNumber) {\r\n      this.props.updateUI({\r\n        showTableNumberForm: true,\r\n      })\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n    // when tableNumber is automatically set after fetching the Check with posCheckId\r\n    if (\r\n      props.orderProperties.isMissingTableNumber &&\r\n      !nextProps.orderProperties.isMissingTableNumber &&\r\n      !nextProps.enableModifyTableNumber\r\n    ) {\r\n      props.updateUI({\r\n        showTableNumberForm: false,\r\n      })\r\n    }\r\n  }\r\n\r\n  toggleTableShow = () => {\r\n    EventManager.dispatch(EventManager.Events.ON_CHANGE_TABLE)\r\n    this.props.updateUI({\r\n      showTableNumberForm: !this.props.ui.showTableNumberForm,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      onRedirectToCart,\r\n      orderProperties,\r\n      // cartModifiers,\r\n      itemListFromCart,\r\n      cartData,\r\n      enableModifyTableNumber,\r\n      restaurant,\r\n      // displayCartModifierDialog,\r\n      route,\r\n      ui,\r\n      updateUI,\r\n      isFetchingCheck,\r\n    } = this.props\r\n\r\n    return (\r\n      <AppConfigContainer>\r\n        {({ appConfigPreset, orderAppConfig }) => (\r\n          <div className={classes.root}>\r\n            {appConfigPreset.isPluginOrder && (\r\n              <BlockContainer type={BlockContainer.Type.WHITE} className={classes.sideSection}>\r\n                {orderProperties.mustChooseTableNumber && (\r\n                  <React.Fragment>\r\n                    {/* ------------------------------------------------------------ */}\r\n                    {/* table number                                                 */}\r\n                    {/* ------------------------------------------------------------ */}\r\n\r\n                    <TypographyCustom\r\n                      type=\"284\"\r\n                      component=\"div\"\r\n                      className={classes.sideInformationTitle}\r\n                    >\r\n                      {tr('order.menu.table_number.title')}\r\n                    </TypographyCustom>\r\n                    <div className=\"u-marginTop10\">\r\n                      <LoadingBlock show={isFetchingCheck}>\r\n                        {ui.showTableNumberForm || orderProperties.isMissingTableNumber ? (\r\n                          <TableNumberInput\r\n                            type={TableNumberInput.Type.SMALL}\r\n                            tableNumber={orderProperties.tableNumber}\r\n                            handleCloseInput={() => {\r\n                              updateUI({ showTableNumberForm: false })\r\n                            }}\r\n                            displayError\r\n                          />\r\n                        ) : (\r\n                          !ui.showTableNumberForm && (\r\n                            <div className=\"u-flex\">\r\n                              <TypographyCustom className=\"u-floatLeft\" component=\"p\" type=\"167\">\r\n                                {tr('order.menu.table_number.catch_phrase', {\r\n                                  tableNumber: orderProperties.tableNumber,\r\n                                })}\r\n                              </TypographyCustom>\r\n                              {!isNil(restaurant) && enableModifyTableNumber && (\r\n                                <ButtonLink\r\n                                  classes={{ root: 'u-marginLeft10' }}\r\n                                  onClick={this.toggleTableShow}\r\n                                  label={tr('order.global.modify')}\r\n                                />\r\n                              )}\r\n                            </div>\r\n                          )\r\n                        )}\r\n                      </LoadingBlock>\r\n                    </div>\r\n                  </React.Fragment>\r\n                )}\r\n\r\n                {(orderProperties.canOrderUsingSlots ||\r\n                  (!orderProperties.mustChooseTableNumber &&\r\n                    orderProperties.canOrderUsingAsap)) && (\r\n                  <div>\r\n                    {/* Date */}\r\n                    <TypographyCustom type=\"284\" className={classes.sideInformationTitle}>\r\n                      {tr('order.menu.cart.when')}\r\n                    </TypographyCustom>\r\n\r\n                    {/* ------------------------------------------------------------ */}\r\n                    {/* slots                                   */}\r\n                    {/* ------------------------------------------------------------ */}\r\n\r\n                    <SlotsContainer\r\n                      type={SlotsContainer.Type.SMALL}\r\n                      showSlots={!orderProperties.isAsap && isNil(orderProperties.slot)}\r\n                      orderProperties={orderProperties}\r\n                      modificationEnabled={orderProperties.canOrderUsingSlots}\r\n                      checkCartDiff\r\n                    />\r\n\r\n                    {/* ------------------------------------------------------------ */}\r\n                    {/* closing hour                                                 */}\r\n                    {/* ------------------------------------------------------------ */}\r\n\r\n                    {!orderAppConfig.bypassOpeningHours &&\r\n                      get(orderProperties, 'closingHourFormatted.show', false) && (\r\n                        <TipWithIcon\r\n                          classes={{ root: classes.tipWithIcon, tipText: classes.tipWithIconText }}\r\n                          icon={<InfoOutlineIcon />}\r\n                          label={tr(`order.sideInformations.closingHour.${orderProperties.mode}`, {\r\n                            closingHour: orderProperties.closingHourFormatted.time.hourFormatted,\r\n                            closingMinute:\r\n                              orderProperties.closingHourFormatted.time.minuteFormatted,\r\n                            lastTimeToOrderHour:\r\n                              orderProperties.closingHourFormatted.lastTimeToOrder.hourFormatted,\r\n                            lastTimeToOrderMinute:\r\n                              orderProperties.closingHourFormatted.lastTimeToOrder.minuteFormatted,\r\n                          })}\r\n                        />\r\n                      )}\r\n                  </div>\r\n                )}\r\n              </BlockContainer>\r\n            )}\r\n\r\n            {/* {!isEmpty(cartModifiers) && (\r\n          <BlockContainer\r\n            className={classNames('u-overflowHidden', classes.sideSection)}\r\n            type={BlockContainer.Type.WHITE}\r\n          >\r\n            <div className=\"u-floatLeft\">\r\n              <CartModifier className={classes.cartModifierIcon} />\r\n            </div>\r\n            <div className={classes.cartModifierText}>\r\n              <TypographyCustom component=\"div\" type=\"124\" className={classes.cartModifierTitle}>\r\n                {tr('order.catalog.cartModifier.title')}\r\n              </TypographyCustom>\r\n              <TypographyCustom component=\"div\" type=\"167\" className={classes.cartModifierNumber}>\r\n                {tr('order.catalog.cartModifier.available', {\r\n                  smart_count: cartModifiers.length,\r\n                })}\r\n              </TypographyCustom>\r\n            </div>\r\n            <div className={classes.cartModifierButton}>\r\n              <ButtonLink\r\n                classes={{ root: 'u-marginLeft10' }}\r\n                onClick={() => {\r\n                  displayCartModifierDialog(cartModifiers)\r\n                }}\r\n                label={tr('order.global.see')}\r\n              />\r\n            </div>\r\n          </BlockContainer>\r\n        )} */}\r\n\r\n            {/* ------------------------------------------------------------ */}\r\n            {/* Cart itel list (SMALL version)                               */}\r\n            {/* ------------------------------------------------------------ */}\r\n\r\n            <BlockContainerGroup className=\"u-flex1\">\r\n              <BlockContainer type={BlockContainer.Type.WHITE}>\r\n                <TypographyCustom type=\"284\" component=\"div\" className={classes.sideInformationTitle}>\r\n                  {/*\r\n                    display a different label for digital menu\r\n                    https://www.notion.so/paymytable/Finalisation-du-Menu-Digital-2228f83526ba4e8897619991c1f9c393\r\n                  */}\r\n                  {appConfigPreset.isDigitalMenu\r\n                    ? tr('order.cart.title_digital_menu')\r\n                    : tr('order.cart.title')}\r\n                </TypographyCustom>\r\n\r\n                <CartItemList\r\n                  orderProperties={orderProperties}\r\n                  itemList={itemListFromCart}\r\n                  type={CartItemList.Type.SMALL}\r\n                  fromRoute={route}\r\n                  appConfigPreset={appConfigPreset}\r\n                />\r\n              </BlockContainer>\r\n\r\n              {/* ------------------------------------------------------------ */}\r\n              {/* cart footer                                                  */}\r\n              {/* ------------------------------------------------------------ */}\r\n\r\n              <BlockContainer type={BlockContainer.Type.LIGHTGREY}>\r\n                <CartFooter\r\n                  appConfigPreset={appConfigPreset}\r\n                  orderProperties={orderProperties}\r\n                  itemList={itemListFromCart}\r\n                  comment={cartData.comment}\r\n                  fees={orderProperties.fees}\r\n                  minimumPrice={cartData.minimumPrice}\r\n                  minimumPriceFormatted={cartData.minimumPriceFormatted}\r\n                  restaurant={restaurant}\r\n                  totalCartPrice={cartData.totalCartPrice}\r\n                  totalCartPriceFormatted={cartData.totalCartPriceFormatted}\r\n                  // total without taxes + no display of the tax amount\r\n                  totalCartPriceAndFeesFormatted={\r\n                    orderProperties.totalCartPriceAndFeesWithoutTaxesFormatted\r\n                  }\r\n                  onSubmitAction={onRedirectToCart}\r\n                  type={CartFooter.Type.SMALL}\r\n                />\r\n              </BlockContainer>\r\n            </BlockContainerGroup>\r\n          </div>\r\n        )}\r\n      </AppConfigContainer>\r\n    )\r\n  }\r\n}\r\n\r\nSideInformation.defaultProps = {\r\n  enableModifyTableNumber: true,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  itemListFromCart: forceGetItemListFromCart(state),\r\n  cartData: getCartData(state),\r\n  isFetchingCheck: isFetchingCheck(state),\r\n})\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      showTableNumberForm: false,\r\n    },\r\n  }),\r\n  connect(mapStateToProps, {\r\n    // displayCartModifierDialog,\r\n  }),\r\n  withStyles(styles)\r\n)(SideInformation)\r\n","import React from 'react'\r\n\r\nimport last from 'lodash/last'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isEqual from 'lodash/isEqual'\r\nimport classNames from 'classnames'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport ArrowRightIcon from 'pmt-ui/svg-icons/hardware/keyboard-arrow-right'\r\nimport Select from 'pmt-ui/Select'\r\nimport { MenuItem } from 'pmt-ui/Menu'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n  },\r\n  name: {\r\n    lineHeight: '16px', // height of the Icon\r\n  },\r\n  formControl: {\r\n    minWidth: 40,\r\n  },\r\n  icon: {\r\n    width: 16,\r\n    height: 16,\r\n  },\r\n  parent: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  separator: {\r\n    padding: `0 ${theme.spacing(1)}px`,\r\n  },\r\n  pointer: {\r\n    cursor: 'pointer',\r\n  },\r\n})\r\n\r\nconst SimpleCategory = ({ category }) => <span>{category.name}</span>\r\n\r\nconst SelectedCategory = ({ onSelect, category, parentCategories, classes }) => {\r\n  if (isEmpty(parentCategories)) {\r\n    return <SimpleCategory category={category} />\r\n  }\r\n\r\n  const otherCategories = last(parentCategories).categories // we only want the categories that are alongside our current category, plus our current\r\n  // category\r\n\r\n  // there is no category or one subcategory, so no need to display a Select\r\n  if (isEqual(otherCategories.length, 1)) {\r\n    return <SimpleCategory category={category} />\r\n  }\r\n\r\n  return (\r\n    <Select\r\n      // Note: we need to use the id as value, otherwise the 'selected' prop on MenuItem is set to\r\n      // false, since Select can't compare objects.\r\n      value={category && category.id}\r\n      // the event value contains the 'id', we need to find on the array the corresponding category\r\n      onChange={event =>\r\n        onSelect(findOnArray(otherCategories, event.target.value), parentCategories)\r\n      }\r\n      // trick to display our current category name as value\r\n      // we don't take any argument since it would be the value (category.id)\r\n      renderValue={() => <span>{category.name}</span>}\r\n      native={false}\r\n      className={classes.pointer}\r\n    >\r\n      {otherCategories.map((otherCategory, index) => (\r\n        <MenuItem\r\n          // it could have same category multiple times (should not, but we ensure we don't\r\n          // have a bug if it happens)\r\n          key={`${index}_${otherCategory.id}`}\r\n          // must put id\r\n          value={otherCategory.id}\r\n          //selected={otherCategory.id === category.id}\r\n        >\r\n          {otherCategory.name}\r\n        </MenuItem>\r\n      ))}\r\n    </Select>\r\n  )\r\n}\r\n\r\n// https://zpl.io/Vq6xzkN\r\nconst CategoryBreadcrumb = ({ category, isSelected, parentCategories = [], onSelect, classes }) => (\r\n  <div className={classes.root}>\r\n    <TypographyCustom\r\n      type=\"144\"\r\n      component=\"div\"\r\n      className={classNames(classes.name, classes.pointer, {\r\n        [classes.parent]: !isSelected,\r\n      })}\r\n      onClick={() => {\r\n        if (!isSelected) {\r\n          onSelect(category, parentCategories)\r\n        }\r\n      }}\r\n    >\r\n      {isSelected ? (\r\n        <SelectedCategory\r\n          onSelect={onSelect}\r\n          category={category}\r\n          parentCategories={parentCategories}\r\n          classes={classes}\r\n        />\r\n      ) : (\r\n        <SimpleCategory category={category} />\r\n      )}\r\n    </TypographyCustom>\r\n\r\n    {!isSelected && (\r\n      // TODO: icon\r\n      <span className={classes.separator}>\r\n        <ArrowRightIcon className={classes.icon} />\r\n      </span>\r\n    )}\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(CategoryBreadcrumb)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isArray from 'lodash/isArray'\r\n\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\nimport { setSelectedCategory, setParentCategories } from 'pmt-modules/orderPlugin/actions'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\n\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport CategoryBreadcrumb from './CategoryBreadcrumb'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    margin: `${theme.spacing(3)}px 0`,\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n    flexWrap: 'wrap',\r\n  },\r\n})\r\n\r\n// https://zpl.io/Vq6xzkN\r\nconst CategoriesBreadcrumb = ({\r\n  setSelectedCategory,\r\n  setParentCategories,\r\n  selectedCategory,\r\n  parentCategories = [],\r\n  restaurant,\r\n  redirectTo,\r\n  classes,\r\n}) =>\r\n  !selectedCategory || !isArray(parentCategories) || isEmpty(parentCategories) ? null : (\r\n    <Hidden smDown>\r\n      <div className={classes.root}>\r\n        {parentCategories.map((parentCategory, index) => (\r\n          <CategoryBreadcrumb\r\n            // need index since a category can be a child of itself\r\n            key={`${index}_${selectedCategory.id}`}\r\n            category={parentCategory}\r\n            isSelected={false}\r\n            parentCategories={parentCategories.slice(0, index)}\r\n            onSelect={(category, parents) => {\r\n              EventManager.dispatch(EventManager.Events.ON_CATALOG_CATEGORY_SELECT, {\r\n                category,\r\n              })\r\n\r\n              setParentCategories(parents)\r\n              redirectTo(getRoute('ORDER__CATEGORY'), {\r\n                restaurantId: restaurant.id,\r\n                categoryId: category.id,\r\n              })\r\n            }}\r\n          />\r\n        ))}\r\n        <CategoryBreadcrumb\r\n          // need 'selected' since a category can be a child of itself\r\n          key={`selected_${selectedCategory.id}`}\r\n          category={selectedCategory}\r\n          isSelected\r\n          onSelect={(category, parents) => {\r\n            EventManager.dispatch(EventManager.Events.ON_CATALOG_CATEGORY_SELECT, {\r\n              category,\r\n            })\r\n            setParentCategories(parents)\r\n            redirectTo(getRoute('ORDER__CATEGORY'), {\r\n              restaurantId: restaurant.id,\r\n              categoryId: category.id,\r\n            })\r\n          }}\r\n          parentCategories={parentCategories}\r\n        />\r\n      </div>\r\n    </Hidden>\r\n  )\r\n\r\nconst mapStateToProps = (state, props) => ({})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      setSelectedCategory,\r\n      setParentCategories,\r\n      redirectTo,\r\n    }\r\n  )\r\n)(CategoriesBreadcrumb)\r\n","import React from 'react'\r\n\r\nimport clsx from 'clsx'\r\n\r\nimport compose from 'recompose/compose'\r\n\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ArrowLeftIcon from 'pmt-ui/svg-icons/hardware/keyboard-arrow-left'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    height: theme.pmt.header.mobile.height,\r\n    padding: `${theme.pmt.header.mobile.verticalPadding}px ${\r\n      theme.pmt.header.mobile.horizontalPadding\r\n    }px`,\r\n    lineHeight: `${theme.pmt.header.mobile.contentHeight}px`,\r\n    boxShadow: '0 2px 4px 0 rgba(74, 74, 74, 0.77)',\r\n  },\r\n  content: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    width: 'calc(100% - 50px)',\r\n  },\r\n  hiddenOnMobile: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  backArea: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n    width: 40,\r\n    height: theme.pmt.header.mobile.height,\r\n    textAlign: 'center',\r\n    color: theme.palette.primary.main,\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    font: 'inherit',\r\n    cursor: 'pointer',\r\n  },\r\n  backIcon: {\r\n    width: 32,\r\n    height: 32,\r\n  },\r\n  formControl: {\r\n    minWidth: 40,\r\n  },\r\n  icon: {\r\n    width: 16,\r\n    height: 16,\r\n  },\r\n  separator: {\r\n    width: 2,\r\n    height: theme.pmt.header.mobile.contentHeight,\r\n    background: theme.pmt.colors.grey300,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n})\r\n\r\n//\r\n// This component display a mobile header, using the theme.pmt.header data\r\n//\r\nconst MobileHeader = ({\r\n  children,\r\n  withBack,\r\n  onBack,\r\n  classes,\r\n  // on some cases, we want to hide the header\r\n  hiddenMobile = false,\r\n  backLabel,\r\n}) => (\r\n  // hide the header when we are on mobile and are on the root category, since we display\r\n  // the categories slider\r\n  <Hidden mdUp smDown={hiddenMobile}>\r\n    <div className={clsx(classes.root)}>\r\n      {withBack && (\r\n        <button type=\"button\" className={classes.backArea} onClick={onBack} aria-label={backLabel}>\r\n          <ArrowLeftIcon className={classes.backIcon} aria-hidden=\"true\" />\r\n        </button>\r\n      )}\r\n\r\n      <div className={classes.separator} />\r\n\r\n      <div className={classes.content}>\r\n        {children}\r\n\r\n        {/* TODO: restaurant logo */}\r\n      </div>\r\n    </div>\r\n  </Hidden>\r\n)\r\n\r\nexport default compose(withStyles(styles))(MobileHeader)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport last from 'lodash/last'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport { setSelectedCategory, setParentCategories } from 'pmt-modules/orderPlugin'\r\nimport { trOptional } from 'pmt-modules/i18n'\r\n\r\nimport MobileHeader from 'pmt-ui/MobileHeader'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Select from 'pmt-ui/Select'\r\nimport { MenuItem } from 'pmt-ui/Menu'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    background: 'white',\r\n  },\r\n  formControl: {\r\n    minWidth: 40,\r\n  },\r\n  separator: {\r\n    width: 2,\r\n    height: theme.pmt.header.contentHeight,\r\n    background: theme.pmt.colors.grey300,\r\n  },\r\n  categorySelect: {\r\n    maxWidth: '100%',\r\n  },\r\n  lineHeight16: {\r\n    lineHeight: '16px',\r\n  },\r\n})\r\n\r\nconst SimpleCategory = ({ category, classes }) => (\r\n  <span className={classes.lineHeight16}>{category.name}</span>\r\n)\r\n\r\nconst SelectedCategory = ({ onSelect, category, parentCategories, classes }) => {\r\n  // there is no category alongside our selected category, so no need to display a Select\r\n  if (isEmpty(parentCategories)) {\r\n    return <SimpleCategory category={category} classes={classes} />\r\n  }\r\n\r\n  const otherCategories = last(parentCategories).categories // we only want the categories that are alongside our current category, plus our current\r\n  // category\r\n\r\n  // there is no category alongside our selected category, so no need to display a Select\r\n  if (isEqual(otherCategories.length, 1)) {\r\n    return <SimpleCategory category={category} classes={classes} />\r\n  }\r\n\r\n  return (\r\n    <Select\r\n      disableUnderline\r\n      // Note: we need to use the id as value, otherwise the 'selected' prop on MenuItem is set to\r\n      // false, since Select can't compare objects.\r\n      value={category && category.id}\r\n      onChange={event =>\r\n        onSelect(findOnArray(otherCategories, event.target.value), parentCategories)\r\n      }\r\n      // trick to display our current category name as value\r\n      // we don't take any argument since it would be the value (category.id)\r\n      renderValue={() => <span>{category.name}</span>}\r\n      native={false}\r\n      className={classes.categorySelect}\r\n    >\r\n      {otherCategories.map((otherCategory, index) => (\r\n        <MenuItem\r\n          // it could have same category multiple times (should not, but we ensure we don't\r\n          // have a bug if it happens)\r\n          key={`${index}_${otherCategory.id}`}\r\n          // must put id\r\n          value={otherCategory.id}\r\n        >\r\n          {otherCategory.name}\r\n        </MenuItem>\r\n      ))}\r\n    </Select>\r\n  )\r\n}\r\n\r\n// https://zpl.io/aRNqder\r\nconst CategoryMobileHeader = ({\r\n  selectedCategory,\r\n  parentCategories = [],\r\n  restaurant,\r\n  setSelectedCategory,\r\n  setParentCategories,\r\n  redirectTo,\r\n  classes,\r\n}) => (\r\n  // hide the header when we are on mobile and are on the root category, since we display\r\n  // the categories slider\r\n  <MobileHeader\r\n    hiddenMobile={isEmpty(parentCategories)}\r\n    withBack\r\n    backLabel={trOptional('order.global.back') || 'Back'}\r\n    classes={{\r\n      root: classes.root,\r\n    }}\r\n    onBack={() => {\r\n      let newParentCategories = []\r\n      if (!isEmpty(parentCategories)) {\r\n        newParentCategories = parentCategories.slice(0, -1)\r\n      }\r\n      EventManager.dispatch(EventManager.Events.ON_CATALOG_CATEGORY_SELECT, {\r\n        category: last(parentCategories),\r\n      })\r\n\r\n      setParentCategories(newParentCategories)\r\n\r\n      const parentCategory = last(parentCategories)\r\n      redirectTo(getRoute('ORDER__CATEGORY'), {\r\n        restaurantId: restaurant.id,\r\n        categoryId: parentCategory.id,\r\n      })\r\n    }}\r\n  >\r\n    <SelectedCategory\r\n      onSelect={(category, parents) => {\r\n        EventManager.dispatch(EventManager.Events.ON_CATALOG_CATEGORY_SELECT, {\r\n          category,\r\n        })\r\n        setParentCategories(parents)\r\n        redirectTo(getRoute('ORDER__CATEGORY'), {\r\n          restaurantId: restaurant.id,\r\n          categoryId: category.id,\r\n        })\r\n      }}\r\n      category={selectedCategory}\r\n      parentCategories={parentCategories}\r\n      classes={classes}\r\n    />\r\n  </MobileHeader>\r\n)\r\n\r\nconst mapStateToProps = (state, props) => ({})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      setSelectedCategory,\r\n      setParentCategories,\r\n      redirectTo,\r\n    }\r\n  )\r\n)(CategoryMobileHeader)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\n\r\nimport { getCartData } from 'pmt-modules/cart'\r\nimport { getAppConfigFrontSettings } from 'pmt-modules/orderPlugin'\r\n\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    position: 'fixed',\r\n    bottom: theme.spacing(1.5),\r\n    left: theme.spacing(2),\r\n    right: theme.spacing(2),\r\n    color: theme.palette.getContrastText(theme.palette.primary.main),\r\n    background: theme.palette.primary.main,\r\n    height: 56,\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    cursor: 'pointer',\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    boxShadow: theme.pmt.modern.shadows.lg,\r\n    transition: theme.pmt.modern.transitions.smooth,\r\n    zIndex: theme.zIndex.stickyButton,\r\n  },\r\n})\r\n\r\n//https://zpl.io/aRNPw7E\r\nconst MobileCartButton = ({\r\n  appConfigPreset,\r\n  classes,\r\n  cartData,\r\n  onRedirectToCart,\r\n  frontSettings,\r\n}) => (\r\n  <Hidden mdUp smDown={!cartData.hasItems}>\r\n    <div className={classes.root} onClick={onRedirectToCart}>\r\n      <TypographyCustom type=\"204\" align=\"center\" skipColor>\r\n        {/*\r\n          display a different label for digital menu\r\n          https://www.notion.so/paymytable/Finalisation-du-Menu-Digital-2228f83526ba4e8897619991c1f9c393\r\n         */}\r\n        {appConfigPreset.isDigitalMenu\r\n          ? tr('order.menu.cart.submit_button_mobile_digital_menu')\r\n          : tr('order.menu.cart.submit_button_mobile')}\r\n        {frontSettings.display.totalPrices && ` (${cartData.totalCartPriceFormatted})`}\r\n      </TypographyCustom>\r\n    </div>\r\n  </Hidden>\r\n)\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  cartData: getCartData(state),\r\n})\r\n\r\nexport default compose(withStyles(styles), connect(mapStateToProps, {}))(MobileCartButton)\r\n","import React, { useEffect } from 'react'\r\nimport compose from 'recompose/compose'\r\n\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { trOptional } from 'pmt-modules/i18n'\r\nimport Divider from 'pmt-ui/Divider'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\n\r\nimport { Categories, ItemList, SideInformation } from './components'\r\nimport BlockContainer from '../../components/BlockContainer'\r\nimport CategoriesBreadcrumb from './components/CategoriesBreadcrumb'\r\nimport CategoryMobileHeader from './components/CategoryMobileHeader'\r\nimport MobileCartButton from './components/MobileCartButton'\r\nimport MessageBlock from '../../components/MessageBlock'\r\nimport { ButtonLink } from '../../components/Button'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\n\r\nimport TableNumberInput from 'app/components/TableNumberInput'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  catalogWrapper: {\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    overflow: 'hidden',\r\n    background: theme.pmt.modern.surface.elevated.background,\r\n    boxShadow: theme.pmt.modern.shadows.sm,\r\n    border: '1px solid rgba(0, 0, 0, 0.04)',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n  },\r\n  catalogBlockContainer: {\r\n    borderRadius: 0,\r\n    boxShadow: 'none',\r\n    border: 'none',\r\n  },\r\n  content: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: `0 ${theme.spacing(2)}px`,\r\n      paddingBottom: theme.spacing(2),\r\n    },\r\n  },\r\n  iconInfo: {\r\n    width: 30,\r\n    height: 30,\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  loadingBlock: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      background: theme.pmt.colors.greyBackground,\r\n    },\r\n  },\r\n  catalogError: {\r\n    textAlign: 'center',\r\n    '&> button': {\r\n      marginTop: theme.spacing(3),\r\n    },\r\n  },\r\n  catalogErrorTechnicalDetails: {\r\n    marginTop: theme.spacing(1),\r\n    color: theme.pmt.colors.grey500,\r\n    fontFamily: 'monospace',\r\n    userSelect: 'text', // so support/staff can easily select & copy it\r\n  },\r\n  textFooter: {\r\n    marginTop: theme.spacing(5),\r\n    color: theme.pmt.colors.grey600,\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginBottom: theme.spacing(2),\r\n      paddingLeft: theme.spacing(2),\r\n    },\r\n    whiteSpace: 'pre-line', // to display \\n as new lines\r\n    lineHeight: '1.5',\r\n    '&> a': {\r\n      color: theme.palette.primary.main,\r\n      textDecoration: 'underline',\r\n    },\r\n  },\r\n})\r\n\r\nconst MobileCatalogTableNumberForm = ({\r\n  orderProperties,\r\n  classes,\r\n  ui,\r\n  updateUI,\r\n  enableModifyTableNumber,\r\n}) => {\r\n  useEffect(() => {\r\n    if (orderProperties.isMissingTableNumber) {\r\n      // this init the form\r\n      updateUI({ showTableNumberForm: true })\r\n    } else if (!enableModifyTableNumber) {\r\n      // when tableNumber is automatically set after fetching the Check with posCheckId\r\n      updateUI({ showTableNumberForm: false })\r\n    }\r\n  }, [orderProperties.isMissingTableNumber, enableModifyTableNumber, updateUI])\r\n\r\n  return (\r\n    <Grid item xs={12} md={6} lg={5}>\r\n      <BlockContainer type={BlockContainer.Type.WHITE} className={classes.root}>\r\n        <div>\r\n          <TypographyCustom type={247}>{tr('order.store_locator.table_number')}</TypographyCustom>\r\n          <TableNumberInput\r\n            tableNumber={orderProperties.tableNumber}\r\n            type={TableNumberInput.Type.SMALL}\r\n            handleCloseInput={() => {\r\n              updateUI({ showTableNumberForm: false })\r\n            }}\r\n            tableNumberInputButtonLabel={tr('order.global.continue')}\r\n          />\r\n          <TypographyCustom\r\n            type=\"164\"\r\n            className={classNames('u-marginTop30 u-marginBottom30', classes.grey500)}\r\n          >\r\n            {tr('order.store_locator.table_number.helper')}\r\n          </TypographyCustom>\r\n        </div>\r\n      </BlockContainer>\r\n    </Grid>\r\n  )\r\n}\r\n\r\nconst View = ({\r\n  appConfigPreset,\r\n  classes,\r\n  isFetchingCatalog,\r\n  isFetchingRestaurant,\r\n  catalog,\r\n  catalogError,\r\n  restaurantError,\r\n  restaurant,\r\n  route,\r\n  onRedirectToCart,\r\n  selectedCategory,\r\n  parentCategories,\r\n  isSubCategory,\r\n  from,\r\n  orderProperties,\r\n  handleRedirectToStoreLocator,\r\n  width,\r\n  ui,\r\n  updateUI,\r\n  enableModifyTableNumber,\r\n  itemListFromCart,\r\n}) => {\r\n  if (\r\n    isWidthDown('sm', width) &&\r\n    (orderProperties.isMissingTableNumber || ui.showTableNumberForm)\r\n  ) {\r\n    return (\r\n      <MobileCatalogTableNumberForm\r\n        orderProperties={orderProperties}\r\n        classes={classes}\r\n        ui={ui}\r\n        updateUI={updateUI}\r\n        enableModifyTableNumber={enableModifyTableNumber}\r\n      />\r\n    )\r\n  } else {\r\n    return (\r\n      <div className={classes.root}>\r\n        <Grid spacing={2} container>\r\n          <Grid item container direction=\"column\" spacing={0} xs={12} md={7} lg={8} wrap=\"nowrap\">\r\n            <div className={classes.catalogWrapper}>\r\n              {!isFetchingRestaurant && restaurant && !isFetchingCatalog && catalog && (\r\n                <React.Fragment>\r\n                  {selectedCategory ? (\r\n                    <Categories\r\n                      catalog={catalog}\r\n                      categories={catalog.categories}\r\n                      restaurant={restaurant}\r\n                      selectedCategory={selectedCategory}\r\n                      parentCategories={parentCategories}\r\n                    />\r\n                  ) : (\r\n                    <Categories\r\n                      categories={catalog.categories}\r\n                      restaurant={restaurant}\r\n                      selectedCategory={null}\r\n                    />\r\n                  )}\r\n                </React.Fragment>\r\n              )}\r\n              <BlockContainer\r\n                className=\"u-flex1\"\r\n                type={BlockContainer.Type.WHITE}\r\n                mobileType={BlockContainer.Type.GREY}\r\n                mobilePadding={isSubCategory ? 0 : '10px 0'}\r\n                classes={{ root: classes.catalogBlockContainer, white: classes.catalogBlockContainer }}\r\n              >\r\n              {(isFetchingRestaurant || isNil(restaurant) || isFetchingCatalog || isNil(catalog)) &&\r\n              isNil(restaurantError) &&\r\n              isNil(catalogError) ? (\r\n                <LoadingBlock\r\n                  show\r\n                  classes={{\r\n                    loadingBlock: classNames('u-marginTop20', classes.loadingBlock),\r\n                  }}\r\n                />\r\n              ) : isNil(restaurant) && !isFetchingRestaurant && restaurantError ? (\r\n                <ErrorBlock\r\n                  error={restaurantError}\r\n                  mode={ErrorBlock.Mode.CUSTOM}\r\n                  customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n                />\r\n              ) : isNil(catalog) && !isFetchingCatalog && catalogError ? (\r\n                <div className={classes.catalogError}>\r\n                  <ErrorBlock\r\n                    error={catalogError}\r\n                    mode={ErrorBlock.Mode.CUSTOM}\r\n                    customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n                  />\r\n                  {(catalogError.code || catalogError.errorCode) && (\r\n                    <TypographyCustom type=\"144\" className={classes.catalogErrorTechnicalDetails}>\r\n                      {tr('global.catalog.errors.technical_details', {\r\n                        code: catalogError.code || '?',\r\n                        errorCode: catalogError.errorCode || '?',\r\n                      })}\r\n                      {!isEmpty(catalogError.message) && ` - ${catalogError.message}`}\r\n                    </TypographyCustom>\r\n                  )}\r\n                  <ButtonLink onClick={handleRedirectToStoreLocator}>\r\n                    {tr('order.global.choose_restaurant')}\r\n                  </ButtonLink>\r\n                </div>\r\n              ) : selectedCategory ? (\r\n                <React.Fragment>\r\n                  <CategoryMobileHeader\r\n                    selectedCategory={selectedCategory}\r\n                    parentCategories={parentCategories}\r\n                    restaurant={restaurant}\r\n                  />\r\n                  <div className={classes.content}>\r\n                    <CategoriesBreadcrumb\r\n                      selectedCategory={selectedCategory}\r\n                      parentCategories={parentCategories}\r\n                      restaurant={restaurant}\r\n                    />\r\n                    <ItemList\r\n                      items={selectedCategory.items}\r\n                      subCategories={selectedCategory.categories}\r\n                      catalog={catalog}\r\n                      restaurant={restaurant}\r\n                      selectedCategory={selectedCategory}\r\n                      parentCategories={parentCategories}\r\n                      itemListFromCart={itemListFromCart}\r\n                    />\r\n                  </div>\r\n                  {!isNil(trOptional('ORDER__CATALOG__MENU__FOOTER')) && (\r\n                    <TypographyCustom\r\n                      type=\"124\"\r\n                      className={classNames(\r\n                        'custom-css-ORDER__CATALOG__MENU__FOOTER custom-css-ORDER__CATALOG__MENU__FOOTER-on-catalog',\r\n                        classes.textFooter\r\n                      )}\r\n                      html={trOptional('ORDER__CATALOG__MENU__FOOTER')} // we allow html so they can put links\r\n                    />\r\n                  )}\r\n                </React.Fragment>\r\n              ) : (\r\n                <React.Fragment>\r\n                  <Divider className={classes.divider} />\r\n                  <div className=\"u-marginTop60 u-marginBottom60 u-textAlignCenter\">\r\n                    <ActionInfoOutline className={classNames(classes.iconInfo, classes.grey500)} />\r\n                    <TypographyCustom type=\"207\" align=\"center\" className={classes.grey500}>\r\n                      {tr('order.menu.no_item_in_selected_category')}\r\n                    </TypographyCustom>\r\n                  </div>\r\n                </React.Fragment>\r\n              )}\r\n            </BlockContainer>\r\n            </div>\r\n          </Grid>\r\n\r\n          {!isFetchingRestaurant && restaurant && (\r\n            // price formatting is depending on Restaurant (because of the currency),\r\n            // so we don't display it until the restaurant is loaded\r\n            <React.Fragment>\r\n              <Hidden smDown>\r\n                <Grid item md={5} lg={4}>\r\n                  <SideInformation\r\n                    orderProperties={orderProperties}\r\n                    restaurant={restaurant}\r\n                    enableModifyTableNumber={enableModifyTableNumber}\r\n                    // cartModifiers={catalog ? catalog.cartModifiers : []}\r\n                    onRedirectToCart={onRedirectToCart}\r\n                    route={route}\r\n                  />\r\n                </Grid>\r\n              </Hidden>\r\n              <MobileCartButton\r\n                appConfigPreset={appConfigPreset}\r\n                onRedirectToCart={onRedirectToCart}\r\n              />\r\n            </React.Fragment>\r\n          )}\r\n        </Grid>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default compose(withStyles(styles), withWidth())(View)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\nimport ui from 'pmt-modules/reduxUi'\r\n\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { withCatalog } from 'pmt-modules/catalog'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { hideSuggestionDialog, SuggestionActionType } from 'pmt-modules/suggestion'\r\nimport {\r\n  fromApp,\r\n  getAppConfigFrontSettings,\r\n  goBackToStoreLocator,\r\n  OrderPluginUrlCheckerContainer,\r\n  SelectedCategoryContainer,\r\n  showRestaurantDisabledDialog,\r\n  showRestaurantClosedDialog,\r\n  withCategory,\r\n  withOrderProperties,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { prepareForFetchingUpsells } from 'pmt-modules/upselling'\r\nimport { displayDeleteCartDialog } from 'pmt-modules/dialog'\r\nimport {\r\n  addOrderMenuToCart,\r\n  addOrderProductToCart,\r\n  getItemListFromCart,\r\n  getSuspendedDatas,\r\n  setSuspendedDatas,\r\n} from 'pmt-modules/cart'\r\nimport OrderRestaurantContextContainer from 'pmt-modules/orderRestaurantContext/container/OrderRestaurantContextContainer'\r\n\r\nimport withWidth, { isWidthDown, isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\nimport View from './View'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nclass CatalogPageWrapper extends React.Component {\r\n  render() {\r\n    const { restaurant } = this.props\r\n    return (\r\n      <OrderRestaurantContextContainer\r\n        restaurantId={restaurant && restaurant.id}\r\n        withAvailabilities\r\n      >\r\n        {({ orderContext }) => <CatalogPageInner orderContext={orderContext} {...this.props} />}\r\n      </OrderRestaurantContextContainer>\r\n    )\r\n  }\r\n}\r\n\r\nclass CatalogPageInner extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.addSuspendedItem()\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (!prevProps.restaurant && this.props.restaurant && this.props.restaurant.isStatusDisabled) {\r\n      this.props.showRestaurantDisabledDialog()\r\n    }\r\n    if (!prevProps.orderContext && this.props.orderContext && !this.props.orderContext.canOrder) {\r\n      if (getQueryParam('disableRestaurantClosedDialog') !== 'true') {\r\n        this.props.showRestaurantClosedDialog(this.props.orderContext, this.props.restaurant)\r\n      }\r\n    }\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    this.props.hideSuggestionDialog()\r\n  }\r\n\r\n  addSuspendedItem = () => {\r\n    const { cartSuspendedDatas, addOrderProductToCart, addOrderMenuToCart, setSuspendedDatas } =\r\n      this.props\r\n\r\n    // we check if we have suspended item to be added to cart\r\n    // we need to be in replace mode because the compose mode is already added\r\n    if (\r\n      !isNil(cartSuspendedDatas) &&\r\n      cartSuspendedDatas.suspendedActionType === SuggestionActionType.REPLACE\r\n    ) {\r\n      if (cartSuspendedDatas.suspendedItem.isProduct) {\r\n        addOrderProductToCart(cartSuspendedDatas.suspendedItem, { skipSuggestion: true })\r\n      } else if (cartSuspendedDatas.suspendedItem.isMenu) {\r\n        addOrderMenuToCart(cartSuspendedDatas.suspendedItem, { skipSuggestion: true })\r\n      }\r\n      setSuspendedDatas(null, null)\r\n    }\r\n  }\r\n\r\n  hasRedirectUriDefined = () => this.props.frontSettings && this.props.frontSettings.redirectUri\r\n\r\n  handleRedirectToCart = () => {\r\n    if (!this.props.orderProperties.hasAlreadyDisplayedUpselling) {\r\n      // once the upsells are fetched, if there are some, it will trigger the display of the UpsellingDialog\r\n      this.props.prepareForFetchingUpsells()\r\n    }\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_CATALOG_CART_SUBMIT, {\r\n      items: this.props.itemListFromCart,\r\n      restaurant: this.props.restaurant,\r\n    })\r\n\r\n    this.props.redirectTo(getRoute('ORDER__CART'))\r\n  }\r\n\r\n  handleRedirectToStoreLocatorOrToRedirectUri = () => {\r\n    if (this.hasRedirectUriDefined()) {\r\n      window.location.href = this.props.frontSettings.redirectUri\r\n    } else {\r\n      this.props.itemListFromCart.length > 0\r\n        ? this.props.displayDeleteCartDialog()\r\n        : this.props.goBackToStoreLocator()\r\n    }\r\n  }\r\n\r\n  handleRedirectToMobileCatalogTableNumberForm = () => {\r\n    this.props.updateUI({ showTableNumberForm: true })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      appConfigPreset,\r\n      isFetchingCatalog,\r\n      isFetchingRestaurant,\r\n      catalog,\r\n      catalogError,\r\n      orderProperties,\r\n      restaurantError,\r\n      restaurant,\r\n      location,\r\n      params,\r\n      route,\r\n      width,\r\n      ui,\r\n      updateUI,\r\n      itemListFromCart,\r\n    } = this.props\r\n\r\n    const enableModifyTableNumber = !orderProperties.disableModifyTableNumber\r\n\r\n    return (\r\n      <SelectedCategoryContainer catalog={catalog}>\r\n        {({ selectedCategory, parentCategories, isSubCategory }) => (\r\n          <OrderPage\r\n            headerProps={{\r\n              // hide the header when there is a selected children category, since we display\r\n              // the category header\r\n              displayHeader: isWidthUp('md', width) || !isSubCategory,\r\n              backLink:\r\n                isWidthDown('sm', width) &&\r\n                (orderProperties.mustChooseTableNumber &&\r\n                enableModifyTableNumber &&\r\n                !ui.showTableNumberForm // not already on tableNumberForm\r\n                  ? this.handleRedirectToMobileCatalogTableNumberForm\r\n                  : orderProperties.isOnSite && orderProperties.from !== fromApp.WEBAPP\r\n                    ? // onSite, it doesn't make sense to go to store-locator\r\n                      // (as the user is in a specific store),\r\n                      // so we allow him to \"go back\" only if coming from the Web customer\r\n                      null\r\n                    : this.handleRedirectToStoreLocatorOrToRedirectUri),\r\n              displayRestaurantName: true,\r\n              displayRestaurantLogo: isWidthUp('sm', width),\r\n              displayTitle: isWidthUp('md', width),\r\n              displayOrderMode: true,\r\n              displayAddress: true,\r\n              changeButton:\r\n                isWidthUp('md', width) && this.handleRedirectToStoreLocatorOrToRedirectUri,\r\n              displayDueDate: isWidthDown('sm', width),\r\n              displayTableNumber: isWidthDown('sm', width),\r\n              displayUser: true,\r\n            }}\r\n            orderProperties={orderProperties}\r\n            restaurant={restaurant}\r\n            location={location}\r\n          >\r\n            <OrderPluginUrlCheckerContainer\r\n              location={location}\r\n              params={params}\r\n              orderProperties={orderProperties}\r\n              checkApiConsumer\r\n              verifyMode\r\n              verifyRestaurantId\r\n              verifyIsAsap\r\n              verifyTableNumber\r\n              verifyFrom\r\n            >\r\n              <SendEventContainer\r\n                send={\r\n                  orderProperties &&\r\n                  !isNil(orderProperties.restaurant) &&\r\n                  !isNil(orderProperties.dueDate)\r\n                }\r\n                event={EventManager.Events.ON_PAGE_LOADED}\r\n                eventProps={() => ({\r\n                  restaurant: orderProperties.restaurant,\r\n                  dueDate: orderProperties.dueDate,\r\n                })}\r\n              >\r\n                <View\r\n                  appConfigPreset={appConfigPreset}\r\n                  isFetchingCatalog={isFetchingCatalog && !catalog}\r\n                  isFetchingRestaurant={isFetchingRestaurant}\r\n                  catalog={catalog}\r\n                  catalogError={catalogError}\r\n                  restaurantError={restaurantError}\r\n                  restaurant={restaurant}\r\n                  orderProperties={orderProperties}\r\n                  hideSideInformations={this.hideSideInformations}\r\n                  showSideInformations={this.showSideInformations}\r\n                  onRedirectToCart={this.handleRedirectToCart}\r\n                  route={route}\r\n                  selectedCategory={selectedCategory}\r\n                  parentCategories={parentCategories}\r\n                  isSubCategory={isSubCategory}\r\n                  handleRedirectToStoreLocator={this.handleRedirectToStoreLocatorOrToRedirectUri}\r\n                  from={orderProperties.from}\r\n                  ui={ui}\r\n                  updateUI={updateUI}\r\n                  enableModifyTableNumber={enableModifyTableNumber}\r\n                  itemListFromCart={itemListFromCart}\r\n                />\r\n              </SendEventContainer>\r\n            </OrderPluginUrlCheckerContainer>\r\n          </OrderPage>\r\n        )}\r\n      </SelectedCategoryContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  itemListFromCart: getItemListFromCart(state),\r\n  cartSuspendedDatas: getSuspendedDatas(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withCatalog,\r\n  withCategory,\r\n  withScrollToTop({\r\n    isInactive: (prevProps, props) => {\r\n      // we don't want to scroll to top if we change category\r\n      // because we can use the horizontal breadcrumb to go from one subcategory to another\r\n      // or to go from one subcategory to its parent category\r\n      // this horizontal breadcrumb is already quite at the top of the screen\r\n      // and above the first items, so no need to scroll to top to see the first items\r\n      // moreover, for some website with a large header,\r\n      // going at the top of the screen will be bothering because the first items won't be visible due to the header\r\n\r\n      // BUT we want to scroll to the top if we go from the parent category to one of its subcategory\r\n      // because this is done by clicking the subcategory in the subcategory list\r\n      // which can be quite long and would need the user to scroll down to see the subcategory name (especially on mobile)\r\n      // and be able to click on it. After the click, we don't want the user to stay \"scrolled down\", we want them\r\n      // to be at the top of the subcategory items list\r\n      let newCategoryIsChildrenOfPreviousOne = prevProps.category?.categories\r\n        ?.map(c => c.id)\r\n        .includes(props.categoryId)\r\n      return (\r\n        (isNil(prevProps.categoryId) && !isNil(props.categoryId)) ||\r\n        (prevProps.categoryId !== props.categoryId &&\r\n          // we are not coming from the parent category\r\n          !newCategoryIsChildrenOfPreviousOne)\r\n      )\r\n    },\r\n  }),\r\n  connect(mapStateToProps, {\r\n    showRestaurantDisabledDialog,\r\n    showRestaurantClosedDialog,\r\n    displayDeleteCartDialog,\r\n    goBackToStoreLocator,\r\n    addOrderMenuToCart,\r\n    addOrderProductToCart,\r\n    getSuspendedDatas,\r\n    setSuspendedDatas,\r\n    hideSuggestionDialog,\r\n    redirectTo,\r\n    prepareForFetchingUpsells,\r\n  }),\r\n  ui({\r\n    state: {\r\n      showTableNumberForm: false,\r\n    },\r\n  }),\r\n  withWidth()\r\n)(CatalogPageWrapper)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport { getCategoryFromCatalog, getMenuFromCatalog } from 'pmt-modules/catalog/utils'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport { makeGetSelectedMenu, getOrderMenu } from '../selectors'\r\nimport { selectMenu } from '../actions'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that returns the selected Menu from store\r\n *\r\n * Requirements:\r\n * - catalog\r\n *\r\n */\r\nclass SelectedMenuContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (!isNil(props.catalog)) {\r\n      this.openMenuFromProps(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (\r\n      (!isNil(nextProps.catalog) && !isEqual(this.props.catalog, nextProps.catalog)) ||\r\n      this.props.menuId !== nextProps.menuId\r\n    ) {\r\n      this.openMenuFromProps(nextProps)\r\n    }\r\n  }\r\n\r\n  openMenuFromProps(props) {\r\n    let menu = null\r\n    if (isNil(props.selectedMenu)) {\r\n      if (!isNil(props.selectedCategory)) {\r\n        const category = getCategoryFromCatalog(props.catalog, props.selectedCategory.id)\r\n        if (category) {\r\n          menu = findOnArray(category.items, menu => menu.id === props.menuId)\r\n        } else {\r\n          // menu not found for category, redirect to somewhere ?\r\n          return\r\n        }\r\n        // no category selected, we need to find the menu from each category\r\n      } else {\r\n        menu = getMenuFromCatalog(props.catalog, props.upsellingData, props.menuId)\r\n      }\r\n\r\n      if (isNil(menu)) {\r\n        // redirectTo somewhere when menu not found\r\n        return\r\n      }\r\n\r\n      props.selectMenu(menu, {\r\n        restaurantId: props.catalog.restaurantId,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { children, ...otherProps } = this.props\r\n\r\n    return children({\r\n      // does not really tell if we are loading the menu (handled by withCatalog)\r\n      // could be a 404\r\n      isLoadingMenu: isNil(otherProps.selectedMenu),\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nSelectedMenuContainer.propTypes = {\r\n  catalog: PropTypes.object.isRequired,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n  upsellingData: PropTypes.object,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getSelectedMenu = makeGetSelectedMenu()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      selectedMenu: getSelectedMenu(state, props),\r\n      orderMenu: getOrderMenu(state),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    selectMenu,\r\n  }\r\n)(SelectedMenuContainer)\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar getHash = exports.getHash = function getHash() {\n  return decodeURI(window.location.hash.slice(1));\n};\n\nvar updateHash = exports.updateHash = function updateHash(hash, affectHistory) {\n  if (affectHistory) {\n    window.location.hash = hash;\n  } else {\n    window.location.replace(\"#\" + hash);\n  }\n};\n\n// remove hash in url without affecting history or forcing reload\nvar removeHash = exports.removeHash = function removeHash() {\n  history.replaceState(\"\", document.title, window.location.pathname + window.location.search);\n};","// Robert Penner's easeInOutQuad\n\n// find the rest of his easing functions here: http://robertpenner.com/easing/\n// find them exported for ES6 consumption here: https://github.com/jaxgeller/ez.js\n\nexport default (t, b, c, d) => {\n  t /= d / 2\n  if(t < 1) return c / 2 * t * t + b\n  t--\n  return -c / 2 * (t * (t - 2) - 1) + b\n}\n","import easeInOutQuad from './easing.js'\n\nconst jumper = () => {\n  // private variable cache\n  // no variables are created during a jump, preventing memory leaks\n\n  let element         // element to scroll to                   (node)\n\n  let start           // where scroll starts                    (px)\n  let stop            // where scroll stops                     (px)\n\n  let offset          // adjustment from the stop position      (px)\n  let easing          // easing function                        (function)\n  let a11y            // accessibility support flag             (boolean)\n\n  let distance        // distance of scroll                     (px)\n  let duration        // scroll duration                        (ms)\n\n  let timeStart       // time scroll started                    (ms)\n  let timeElapsed     // time spent scrolling thus far          (ms)\n\n  let next            // next scroll position                   (px)\n\n  let callback        // to call when done scrolling            (function)\n\n  // scroll position helper\n\n  function location() {\n    return window.scrollY || window.pageYOffset\n  }\n\n  // element offset helper\n\n  function top(element) {\n    return element.getBoundingClientRect().top + start\n  }\n\n  // rAF loop helper\n\n  function loop(timeCurrent) {\n    // store time scroll started, if not started already\n    if(!timeStart) {\n      timeStart = timeCurrent\n    }\n\n    // determine time spent scrolling so far\n    timeElapsed = timeCurrent - timeStart\n\n    // calculate next scroll position\n    next = easing(timeElapsed, start, distance, duration)\n\n    // scroll to it\n    window.scrollTo(0, next)\n\n    // check progress\n    timeElapsed < duration\n      ? requestAnimationFrame(loop)       // continue scroll loop\n      : done()                            // scrolling is done\n  }\n\n  // scroll finished helper\n\n  function done() {\n    // account for rAF time rounding inaccuracies\n    window.scrollTo(0, start + distance)\n\n    // if scrolling to an element, and accessibility is enabled\n    if(element && a11y) {\n      // add tabindex indicating programmatic focus\n      element.setAttribute('tabindex', '-1')\n\n      // focus the element\n      element.focus()\n    }\n\n    // if it exists, fire the callback\n    if(typeof callback === 'function') {\n      callback()\n    }\n\n    // reset time for next jump\n    timeStart = false\n  }\n\n  // API\n\n  function jump(target, options = {}) {\n    // resolve options, or use defaults\n    duration = options.duration || 1000\n    offset   = options.offset   || 0\n    callback = options.callback                       // \"undefined\" is a suitable default, and won't be called\n    easing   = options.easing   || easeInOutQuad\n    a11y     = options.a11y     || false\n\n    // cache starting position\n    start = location()\n\n    // resolve target\n    switch(typeof target) {\n      // scroll from current position\n      case 'number':\n        element = undefined           // no element to scroll to\n        a11y    = false               // make sure accessibility is off\n        stop    = start + target\n      break\n\n      // scroll to element (node)\n      // bounding rect is relative to the viewport\n      case 'object':\n        element = target\n        stop    = top(element)\n      break\n\n      // scroll to element (selector)\n      // bounding rect is relative to the viewport\n      case 'string':\n        element = document.querySelector(target)\n        stop    = top(element)\n      break\n    }\n\n    // resolve scroll distance, accounting for offset\n    distance = stop - start + offset\n\n    // resolve duration\n    switch(typeof options.duration) {\n      // number in ms\n      case 'number':\n        duration = options.duration\n      break\n\n      // function passed the distance of the scroll\n      case 'function':\n        duration = options.duration(distance)\n      break\n    }\n\n    // start the loop\n    requestAnimationFrame(loop)\n  }\n\n  // expose only the jump method\n  return jump\n}\n\n// export singleton\n\nconst singleton = jumper()\n\nexport default singleton\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar _arguments = arguments;\nvar debounce = exports.debounce = function debounce(func, wait, immediate) {\n  var timeout = void 0;\n  return function () {\n    var context = undefined;\n    var args = _arguments;\n    var later = function later() {\n      timeout = null;\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n    var callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar getScrollTop = exports.getScrollTop = function getScrollTop() {\n  return document.body.scrollTop || document.documentElement.scrollTop;\n};\n\n// get vertical offsets of element, taking scrollTop into consideration\nvar getElementOffset = exports.getElementOffset = function getElementOffset(element) {\n  var scrollTop = getScrollTop();\n\n  var _element$getBoundingC = element.getBoundingClientRect(),\n      top = _element$getBoundingC.top,\n      bottom = _element$getBoundingC.bottom;\n\n  return {\n    top: Math.floor(top + scrollTop),\n    bottom: Math.floor(bottom + scrollTop)\n  };\n};\n\n// does scrollTop live within element bounds?\nvar doesElementContainScrollTop = exports.doesElementContainScrollTop = function doesElementContainScrollTop(element) {\n  var extraOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  var scrollTop = getScrollTop();\n  var offsetTop = getElementOffset(element).top + extraOffset;\n  return scrollTop >= offsetTop && scrollTop < offsetTop + element.offsetHeight;\n};\n\n// is el2's location more relevant than el2,\n// parent-child relationship aside?\nvar checkLocationRelevance = exports.checkLocationRelevance = function checkLocationRelevance(el1, el2) {\n  var _getElementOffset = getElementOffset(el1),\n      top1 = _getElementOffset.top,\n      bottom1 = _getElementOffset.bottom;\n\n  var _getElementOffset2 = getElementOffset(el2),\n      top2 = _getElementOffset2.top,\n      bottom2 = _getElementOffset2.bottom;\n\n  if (top1 === top2) {\n    if (bottom1 === bottom2) {\n      // top and bottom of compared elements are the same,\n      // so return one randomly in a deterministic way\n      return el1 < el2;\n    }\n    // top of compared elements is the same, so return whichever\n    // element has its bottom higher on the page\n    return bottom2 < bottom1;\n  }\n  // top of compared elements differ, so return true\n  // if tested element has its top lower on the page\n  return top2 > top1;\n};\n\n// check if el2 is more relevant than el1, considering child-parent\n// relationships as well as node location.\nvar checkElementRelevance = exports.checkElementRelevance = function checkElementRelevance(el1, el2) {\n  if (el1.contains(el2)) {\n    // el2 is child, so it gains relevance priority\n    return true;\n  } else if (!el2.contains(el1) && checkLocationRelevance(el1, el2)) {\n    // el1 and el2 are unrelated, but el2 has a better location,\n    // so it gains relevance priority\n    return true;\n  }\n  return false;\n};\n\n// given a set of anchors, find which one is, given the following logic:\n// 1. children nodes are more relevant than parent nodes\n// 2. if neither node contains the other, and their top locations differ,\n//    the node with the top lower on the page is more relevant\n// 3. if neither node contains the other, and their top locations are the same,\n//    the node with the bottom higher on the page is more relevant\n// 4. if neither node contains the other, and their top and bottom locations\n//    are the same, a node is chosen at random, in a deterministic way,\n//    to be more relevant.\nvar getBestAnchorGivenScrollLocation = exports.getBestAnchorGivenScrollLocation = function getBestAnchorGivenScrollLocation(anchors, offset) {\n  var bestId = void 0,\n      bestElement = void 0;\n\n  Object.keys(anchors).forEach(function (id) {\n    var element = anchors[id];\n    if (doesElementContainScrollTop(element, offset)) {\n      if (!bestElement || checkElementRelevance(bestElement, element)) {\n        bestElement = element;\n        bestId = id;\n      }\n    }\n  });\n  return bestId;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _jump = require('jump.js');\n\nvar _jump2 = _interopRequireDefault(_jump);\n\nvar _func = require('./utils/func');\n\nvar _scroll = require('./utils/scroll');\n\nvar _hash = require('./utils/hash');\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\nvar defaultConfig = {\n  offset: 0,\n  scrollDuration: 400,\n  keepLastAnchorHash: false\n};\n\nvar Manager = function Manager() {\n  var _this = this;\n\n  _classCallCheck(this, Manager);\n\n  this.addListeners = function () {\n    window.addEventListener('scroll', _this.scrollHandler, false);\n    window.addEventListener('hashchange', _this.handleHashChange);\n  };\n\n  this.removeListeners = function () {\n    window.removeEventListener('scroll', _this.scrollHandler, false);\n    window.removeEventListener('hashchange', _this.handleHashChange);\n  };\n\n  this.configure = function (config) {\n    _this.config = _extends({}, defaultConfig, config);\n  };\n\n  this.goToTop = function () {\n    if ((0, _scroll.getScrollTop)() === 0) return;\n    _this.forcedHash = true;\n    window.scroll(0, 0);\n  };\n\n  this.addAnchor = function (id, component) {\n    // if this is the first anchor, set up listeners\n    if (Object.keys(_this.anchors).length === 0) {\n      _this.addListeners();\n    }\n    _this.forceHashUpdate();\n    _this.anchors[id] = component;\n  };\n\n  this.removeAnchor = function (id) {\n    delete _this.anchors[id];\n    // if this is the last anchor, remove listeners\n    if (Object.keys(_this.anchors).length === 0) {\n      _this.removeListeners();\n    }\n  };\n\n  this.handleScroll = function () {\n    var _config = _this.config,\n        offset = _config.offset,\n        keepLastAnchorHash = _config.keepLastAnchorHash;\n\n    var bestAnchorId = (0, _scroll.getBestAnchorGivenScrollLocation)(_this.anchors, offset);\n\n    if (bestAnchorId && (0, _hash.getHash)() !== bestAnchorId) {\n      _this.forcedHash = true;\n      (0, _hash.updateHash)(bestAnchorId, false);\n    } else if (!bestAnchorId && !keepLastAnchorHash) {\n      (0, _hash.removeHash)();\n    }\n  };\n\n  this.handleHashChange = function (e) {\n    if (_this.forcedHash) {\n      _this.forcedHash = false;\n    } else {\n      _this.goToSection((0, _hash.getHash)());\n    }\n  };\n\n  this.goToSection = function (id) {\n    var element = _this.anchors[id];\n    if (element) {\n      (0, _jump2.default)(element, {\n        duration: _this.config.scrollDuration,\n        offset: _this.config.offset\n      });\n    } else {\n      // make sure that standard hash anchors don't break.\n      // simply jump to them.\n      element = document.getElementById(id);\n      if (element) {\n        (0, _jump2.default)(element, {\n          duration: 0,\n          offset: _this.config.offset\n        });\n      }\n    }\n  };\n\n  this.anchors = {};\n  this.forcedHash = false;\n  this.config = defaultConfig;\n\n  this.scrollHandler = (0, _func.debounce)(this.handleScroll, 100);\n  this.forceHashUpdate = (0, _func.debounce)(this.handleHashChange, 1);\n};\n\nexports.default = new Manager();","'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 _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _Manager = require('./Manager');\n\nvar _Manager2 = _interopRequireDefault(_Manager);\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 ScrollableAnchor = function (_Component) {\n  _inherits(ScrollableAnchor, _Component);\n\n  function ScrollableAnchor(props) {\n    _classCallCheck(this, ScrollableAnchor);\n\n    var _this = _possibleConstructorReturn(this, (ScrollableAnchor.__proto__ || Object.getPrototypeOf(ScrollableAnchor)).call(this, props));\n\n    _this.id = props.id || props.children.ref;\n    return _this;\n  }\n\n  _createClass(ScrollableAnchor, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var element = _reactDom2.default.findDOMNode(this.refs[Object.keys(this.refs)[0]]);\n      _Manager2.default.addAnchor(this.id, element);\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      _Manager2.default.removeAnchor(this.id);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          children = _props.children,\n          id = _props.id;\n\n\n      return _react2.default.cloneElement(children, {\n        ref: children.ref || id\n      });\n    }\n  }]);\n\n  return ScrollableAnchor;\n}(_react.Component);\n\nScrollableAnchor.propTypes = {\n  children: _propTypes2.default.node,\n  id: _propTypes2.default.string\n};\nexports.default = ScrollableAnchor;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.removeHash = exports.goToAnchor = exports.configureAnchors = exports.goToTop = undefined;\n\nvar _hash = require('./utils/hash');\n\nObject.defineProperty(exports, 'goToAnchor', {\n  enumerable: true,\n  get: function get() {\n    return _hash.updateHash;\n  }\n});\nObject.defineProperty(exports, 'removeHash', {\n  enumerable: true,\n  get: function get() {\n    return _hash.removeHash;\n  }\n});\n\nvar _ScrollableAnchor = require('./ScrollableAnchor');\n\nObject.defineProperty(exports, 'default', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_ScrollableAnchor).default;\n  }\n});\n\nvar _Manager = require('./Manager');\n\nvar _Manager2 = _interopRequireDefault(_Manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar goToTop = exports.goToTop = _Manager2.default.goToTop;\nvar configureAnchors = exports.configureAnchors = _Manager2.default.configure;","function _interopRequireDefault(e) {\n  return e && e.__esModule ? e : {\n    \"default\": e\n  };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(t, e) {\n  return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _setPrototypeOf(t, e);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nmodule.exports = _inheritsLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nexports.__esModule = true;\nexports[\"default\"] = void 0;\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != typeof e && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nvar Sticky = exports[\"default\"] = /*#__PURE__*/function (_Component) {\n  function Sticky() {\n    var _this;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _Component.call.apply(_Component, [this].concat(args)) || this;\n    _this.state = {\n      isSticky: false,\n      wasSticky: false,\n      style: {}\n    };\n    _this.handleContainerEvent = function (_ref) {\n      var distanceFromTop = _ref.distanceFromTop,\n        distanceFromBottom = _ref.distanceFromBottom,\n        eventSource = _ref.eventSource;\n      var parent = _this.context.getParent();\n      var preventingStickyStateChanges = false;\n      if (_this.props.relative) {\n        preventingStickyStateChanges = eventSource !== parent;\n        distanceFromTop = -(eventSource.scrollTop + eventSource.offsetTop) + _this.placeholder.offsetTop;\n      }\n      var placeholderClientRect = _this.placeholder.getBoundingClientRect();\n      var contentClientRect = _this.content.getBoundingClientRect();\n      var calculatedHeight = contentClientRect.height;\n      var bottomDifference = distanceFromBottom - _this.props.bottomOffset - calculatedHeight;\n      var wasSticky = !!_this.state.isSticky;\n      var isSticky = preventingStickyStateChanges ? wasSticky : distanceFromTop <= -_this.props.topOffset && distanceFromBottom > -_this.props.bottomOffset;\n      distanceFromBottom = (_this.props.relative ? parent.scrollHeight - parent.scrollTop : distanceFromBottom) - calculatedHeight;\n      var style = !isSticky ? {} : {\n        position: \"fixed\",\n        top: bottomDifference > 0 ? _this.props.relative ? parent.offsetTop - parent.offsetParent.scrollTop : 0 : bottomDifference,\n        left: placeholderClientRect.left,\n        width: placeholderClientRect.width\n      };\n      if (!_this.props.disableHardwareAcceleration) {\n        style.transform = \"translateZ(0)\";\n      }\n      _this.setState({\n        isSticky: isSticky,\n        wasSticky: wasSticky,\n        distanceFromTop: distanceFromTop,\n        distanceFromBottom: distanceFromBottom,\n        calculatedHeight: calculatedHeight,\n        style: style\n      });\n    };\n    return _this;\n  }\n  (0, _inheritsLoose2[\"default\"])(Sticky, _Component);\n  var _proto = Sticky.prototype;\n  _proto.componentWillMount = function componentWillMount() {\n    if (!this.context.subscribe) throw new TypeError(\"Expected Sticky to be mounted within StickyContainer\");\n    this.context.subscribe(this.handleContainerEvent);\n  };\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.context.unsubscribe(this.handleContainerEvent);\n  };\n  _proto.componentDidUpdate = function componentDidUpdate() {\n    this.placeholder.style.paddingBottom = this.props.disableCompensation ? 0 : (this.state.isSticky ? this.state.calculatedHeight : 0) + \"px\";\n  };\n  _proto.render = function render() {\n    var _this2 = this;\n    var element = /*#__PURE__*/_react[\"default\"].cloneElement(this.props.children({\n      isSticky: this.state.isSticky,\n      wasSticky: this.state.wasSticky,\n      distanceFromTop: this.state.distanceFromTop,\n      distanceFromBottom: this.state.distanceFromBottom,\n      calculatedHeight: this.state.calculatedHeight,\n      style: this.state.style\n    }), {\n      ref: function ref(content) {\n        _this2.content = _reactDom[\"default\"].findDOMNode(content);\n      }\n    });\n    return /*#__PURE__*/_react[\"default\"].createElement(\"div\", null, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n      ref: function ref(placeholder) {\n        return _this2.placeholder = placeholder;\n      }\n    }), element);\n  };\n  return Sticky;\n}(_react.Component);\nSticky.propTypes = {\n  topOffset: _propTypes[\"default\"].number,\n  bottomOffset: _propTypes[\"default\"].number,\n  relative: _propTypes[\"default\"].bool,\n  children: _propTypes[\"default\"].func.isRequired\n};\nSticky.defaultProps = {\n  relative: false,\n  topOffset: 0,\n  bottomOffset: 0,\n  disableCompensation: false,\n  disableHardwareAcceleration: false\n};\nSticky.contextTypes = {\n  subscribe: _propTypes[\"default\"].func,\n  unsubscribe: _propTypes[\"default\"].func,\n  getParent: _propTypes[\"default\"].func\n};","function _extends() {\n  return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// Generated by CoffeeScript 1.12.2\n(function() {\n  var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;\n\n  if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n    module.exports = function() {\n      return performance.now();\n    };\n  } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n    module.exports = function() {\n      return (getNanoSeconds() - nodeLoadTime) / 1e6;\n    };\n    hrtime = process.hrtime;\n    getNanoSeconds = function() {\n      var hr;\n      hr = hrtime();\n      return hr[0] * 1e9 + hr[1];\n    };\n    moduleLoadTime = getNanoSeconds();\n    upTime = process.uptime() * 1e9;\n    nodeLoadTime = moduleLoadTime - upTime;\n  } else if (Date.now) {\n    module.exports = function() {\n      return Date.now() - loadTime;\n    };\n    loadTime = Date.now();\n  } else {\n    module.exports = function() {\n      return new Date().getTime() - loadTime;\n    };\n    loadTime = new Date().getTime();\n  }\n\n}).call(this);\n\n//# sourceMappingURL=performance-now.js.map\n","var now = require('performance-now')\n  , root = typeof window === 'undefined' ? global : window\n  , vendors = ['moz', 'webkit']\n  , suffix = 'AnimationFrame'\n  , raf = root['request' + suffix]\n  , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n  raf = root[vendors[i] + 'Request' + suffix]\n  caf = root[vendors[i] + 'Cancel' + suffix]\n      || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n  var last = 0\n    , id = 0\n    , queue = []\n    , frameDuration = 1000 / 60\n\n  raf = function(callback) {\n    if(queue.length === 0) {\n      var _now = now()\n        , next = Math.max(0, frameDuration - (_now - last))\n      last = next + _now\n      setTimeout(function() {\n        var cp = queue.slice(0)\n        // Clear queue here to prevent\n        // callbacks from appending listeners\n        // to the current frame's queue\n        queue.length = 0\n        for(var i = 0; i < cp.length; i++) {\n          if(!cp[i].cancelled) {\n            try{\n              cp[i].callback(last)\n            } catch(e) {\n              setTimeout(function() { throw e }, 0)\n            }\n          }\n        }\n      }, Math.round(next))\n    }\n    queue.push({\n      handle: ++id,\n      callback: callback,\n      cancelled: false\n    })\n    return id\n  }\n\n  caf = function(handle) {\n    for(var i = 0; i < queue.length; i++) {\n      if(queue[i].handle === handle) {\n        queue[i].cancelled = true\n      }\n    }\n  }\n}\n\nmodule.exports = function(fn) {\n  // Wrap in a new function to prevent\n  // `cancel` potentially being assigned\n  // to the native rAF function\n  return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n  caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n  if (!object) {\n    object = root;\n  }\n  object.requestAnimationFrame = raf\n  object.cancelAnimationFrame = caf\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nexports.__esModule = true;\nexports[\"default\"] = void 0;\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _raf = _interopRequireDefault(require(\"raf\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != typeof e && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nvar Container = exports[\"default\"] = /*#__PURE__*/function (_PureComponent) {\n  function Container() {\n    var _this;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _PureComponent.call.apply(_PureComponent, [this].concat(args)) || this;\n    _this.events = [\"resize\", \"scroll\", \"touchstart\", \"touchmove\", \"touchend\", \"pageshow\", \"load\"];\n    _this.subscribers = [];\n    _this.rafHandle = null;\n    _this.subscribe = function (handler) {\n      _this.subscribers = _this.subscribers.concat(handler);\n    };\n    _this.unsubscribe = function (handler) {\n      _this.subscribers = _this.subscribers.filter(function (current) {\n        return current !== handler;\n      });\n    };\n    _this.notifySubscribers = function (evt) {\n      if (!_this.framePending) {\n        var currentTarget = evt.currentTarget;\n        _this.rafHandle = (0, _raf[\"default\"])(function () {\n          _this.framePending = false;\n          var _this$node$getBoundin = _this.node.getBoundingClientRect(),\n            top = _this$node$getBoundin.top,\n            bottom = _this$node$getBoundin.bottom;\n          _this.subscribers.forEach(function (handler) {\n            return handler({\n              distanceFromTop: top,\n              distanceFromBottom: bottom,\n              eventSource: currentTarget === window ? document.body : _this.node\n            });\n          });\n        });\n        _this.framePending = true;\n      }\n    };\n    _this.getParent = function () {\n      return _this.node;\n    };\n    return _this;\n  }\n  (0, _inheritsLoose2[\"default\"])(Container, _PureComponent);\n  var _proto = Container.prototype;\n  _proto.getChildContext = function getChildContext() {\n    return {\n      subscribe: this.subscribe,\n      unsubscribe: this.unsubscribe,\n      getParent: this.getParent\n    };\n  };\n  _proto.componentDidMount = function componentDidMount() {\n    var _this2 = this;\n    this.events.forEach(function (event) {\n      return window.addEventListener(event, _this2.notifySubscribers);\n    });\n  };\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    var _this3 = this;\n    if (this.rafHandle) {\n      _raf[\"default\"].cancel(this.rafHandle);\n      this.rafHandle = null;\n    }\n    this.events.forEach(function (event) {\n      return window.removeEventListener(event, _this3.notifySubscribers);\n    });\n  };\n  _proto.render = function render() {\n    var _this4 = this;\n    return /*#__PURE__*/_react[\"default\"].createElement(\"div\", (0, _extends2[\"default\"])({}, this.props, {\n      ref: function ref(node) {\n        return _this4.node = node;\n      },\n      onScroll: this.notifySubscribers,\n      onTouchStart: this.notifySubscribers,\n      onTouchMove: this.notifySubscribers,\n      onTouchEnd: this.notifySubscribers\n    }));\n  };\n  return Container;\n}(_react.PureComponent);\nContainer.childContextTypes = {\n  subscribe: _propTypes[\"default\"].func,\n  unsubscribe: _propTypes[\"default\"].func,\n  getParent: _propTypes[\"default\"].func\n};","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nexports.__esModule = true;\nexports[\"default\"] = void 0;\nvar _Sticky = _interopRequireDefault(require(\"./Sticky\"));\nexports.Sticky = _Sticky[\"default\"];\nvar _Container = _interopRequireDefault(require(\"./Container\"));\nexports.StickyContainer = _Container[\"default\"];\nvar _default = exports[\"default\"] = _Sticky[\"default\"];","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport InfoOutlineIcon from 'pmt-ui/svg-icons/action/info-outline'\r\nimport WheatIcon from 'pmt-ui/svg-icons/food/wheat'\r\nimport Price from 'pmt-ui/Price'\r\nimport PlaceholderLogo from 'pmt-ui/svg-icons/maps/restaurant'\r\n\r\nimport Button, { ButtonLink } from '../../../components/Button'\r\nimport TipWithIcon from '../../../components/TipWithIcon'\r\nimport Chip from '../../../components/Chip'\r\nimport CartModifierTag from '../../../components/CartModifier/CartModifierTag'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { CardMedia } from 'pmt-ui/Card'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(4)}px`,\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: `${theme.spacing(4)}px ${theme.spacing(2)}px`,\r\n    },\r\n  },\r\n  image: {\r\n    height: 164,\r\n    opacity: 1,\r\n    backgroundSize: 'cover',\r\n  },\r\n  mediaPlaceHolderContainer: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    //background: theme.pmt.colors.itemPlaceholderBackground,\r\n    width: '100%',\r\n  },\r\n  mediaRestaurantLogo: {\r\n    height: '120px',\r\n    opacity: 0.3,\r\n  },\r\n  mediaPlaceholderLogo: {\r\n    height: '80px',\r\n    width: '100%',\r\n    opacity: 0.3,\r\n  },\r\n  nameArea: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'center',\r\n  },\r\n  name: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  description: {\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingTop: theme.spacing(1),\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingTop: theme.spacing(2),\r\n    },\r\n  },\r\n  menuChip: {\r\n    marginLeft: theme.spacing(1),\r\n    marginTop: 3,\r\n    minWidth: 40,\r\n    padding: `2px 5px`,\r\n    borderRadius: '8%',\r\n    fontSize: 12,\r\n    height: 18,\r\n    lineHeight: '18px',\r\n    fontWeight: 700,\r\n    textAlign: 'center',\r\n    backgroundColor: theme.pmt.colors.grey300,\r\n    color: theme.pmt.colors.grey700,\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  allergen: {\r\n    marginTop: theme.spacing(1),\r\n    justifyContent: 'flex-start',\r\n    marginLeft: `-${theme.spacing(0.5)}px`,\r\n    '& svg': {\r\n      marginRight: `0 !important`,\r\n    },\r\n    textDecoration: 'underline',\r\n  },\r\n  infoArea: {\r\n    [theme.breakpoints.up('md')]: {\r\n      // align price to bottom\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n      justifyContent: 'space-between',\r\n    },\r\n  },\r\n  actionArea: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'flex-end',\r\n    [theme.breakpoints.up('md')]: {\r\n      alignItems: 'flex-end',\r\n    },\r\n  },\r\n  addToCartTip: {\r\n    color: theme.palette.primary.main,\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingBottom: theme.spacing(2),\r\n      textAlign: 'right',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'flex-end',\r\n      maxWidth: 320,\r\n      float: 'right',\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      textAlign: 'left',\r\n      paddingBottom: theme.spacing(1),\r\n    },\r\n  },\r\n  addToCartTipIcon: {\r\n    marginTop: -14,\r\n  },\r\n  addToCartTipText: {},\r\n  basePrice: {\r\n    display: 'block',\r\n    textDecoration: 'line-through',\r\n    color: theme.pmt.colors.grey300,\r\n  },\r\n  priceContainer: {\r\n    display: 'flex',\r\n    alignItems: 'flex-end',\r\n    flexDirection: 'row',\r\n  },\r\n  price: {\r\n    float: 'left',\r\n    marginTop: theme.spacing(2),\r\n    marginRight: theme.spacing(2),\r\n  },\r\n  cartModifierChip: {\r\n    float: 'left',\r\n    marginRight: theme.spacing(0.5),\r\n    cursor: 'pointer',\r\n    borderRadius: 4,\r\n  },\r\n  tipWithIcon: {\r\n    textAlign: 'right',\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingBottom: theme.spacing(2),\r\n      maxWidth: 320,\r\n      float: 'right',\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingBottom: theme.spacing(1),\r\n      textAlign: 'left',\r\n    },\r\n  },\r\n  submitBtn: {\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  mobileAdd: {\r\n    // same as Product#Header\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: 0,\r\n      minWidth: theme.spacing(5),\r\n      minHeight: theme.spacing(5),\r\n    },\r\n  },\r\n})\r\n\r\nconst HeaderView = ({\r\n  appConfigPreset,\r\n  orderMenu,\r\n  restaurantLogo,\r\n  isEditMode,\r\n  classes,\r\n  onSubmit,\r\n  showDietaryInfoDialog,\r\n}) => {\r\n  return (\r\n    <Grid container>\r\n      {/** PICTURE AREA\r\n       * on desktop we always display this Grid item\r\n       * on mobile, we display it only if there is an image, to avoid an empty block with padding\r\n       */}\r\n      <Hidden smDown={!orderMenu.hasImage}>\r\n        <Grid item xs={12} md={3}>\r\n          {orderMenu.hasImage ? (\r\n\r\n            <CardMedia\r\n              className={classes.image}\r\n              image={orderMenu.image}\r\n              title={orderMenu.name}\r\n            />\r\n          ) : !isEmpty(restaurantLogo) ? (\r\n            <div className={classNames(classes.image,\r\n              classes.mediaPlaceHolderContainer)}>\r\n              <img\r\n                className={classes.mediaRestaurantLogo}\r\n                src={restaurantLogo}\r\n                alt={orderMenu.name}\r\n              />\r\n            </div>\r\n          ) : (\r\n            <div className={classNames(classes.image,\r\n              classes.mediaPlaceHolderContainer)}>\r\n              <PlaceholderLogo className={classes.mediaPlaceholderLogo} />\r\n            </div>\r\n          )}\r\n        </Grid>\r\n      </Hidden>\r\n\r\n\r\n      <Grid item xs={12} md={9}>\r\n        <Grid container spacing={2} className={classes.root}>\r\n          {/* INFO AREA */}\r\n          <Grid item xs={12} md={7} className={classes.infoArea}>\r\n            <div>\r\n              <div className={classes.nameArea}>\r\n                {/* name */}\r\n                <TypographyCustom type=\"247\" component=\"h1\"\r\n                                  className={classes.name}>\r\n                  {orderMenu.name}\r\n\r\n                  <span className={classes.menuChip}>MENU</span>\r\n                </TypographyCustom>\r\n              </div>\r\n\r\n              {/* description */}\r\n              <TypographyCustom type=\"164\" component=\"h2\"\r\n                                className={classes.description}>\r\n                {orderMenu.description}\r\n              </TypographyCustom>\r\n              {orderMenu.hasAllergens && (\r\n                <ButtonLink\r\n                  onClick={showDietaryInfoDialog}\r\n                  className={classes.allergen}\r\n                  icon={<WheatIcon />}\r\n                  label={tr('order.dietary_info.title')}\r\n                  color=\"default\"\r\n                />\r\n              )}\r\n            </div>\r\n            {/* Price */}\r\n            <TypographyCustom type=\"247\" className={classes.priceContainer}>\r\n              <Price\r\n                value={orderMenu.priceFormatted}\r\n                hasCartModifier={orderMenu.hasCartModifier}\r\n                baseValue={orderMenu.hasCartModifier\r\n                  ? orderMenu.basePriceFormatted : null}\r\n                classes={{ root: classes.price }}\r\n              />\r\n              {orderMenu.hasCartModifier &&\r\n                orderMenu.cartModifiers.list.map((cartModifier, index) => (\r\n                  <CartModifierTag\r\n                    cartModifier={cartModifier}\r\n                    chipElement={\r\n                      <Chip\r\n                        key={index}\r\n                        label={cartModifier.tag}\r\n                        classes={{ root: classes.cartModifierChip }}\r\n                      />\r\n                    }\r\n                    key={index}\r\n                  />\r\n                ))}\r\n            </TypographyCustom>\r\n          </Grid>\r\n\r\n          {/* ACTIONS AREA */}\r\n          <Grid item xs={12} md={5} className={classes.actionArea}>\r\n            <TypographyCustom\r\n              type=\"164\"\r\n              className={classNames({\r\n                'u-invisible': orderMenu.isValid,\r\n              })}\r\n            >\r\n              <TipWithIcon\r\n                icon={<InfoOutlineIcon />}\r\n                label={tr('order.menu.products.select_cart')}\r\n                classes={{\r\n                  root: classes.tipWithIcon,\r\n                }}\r\n              />\r\n            </TypographyCustom>\r\n\r\n            <Hidden smDown>\r\n              <Button\r\n                disabled={!orderMenu.isValid || !orderMenu.available}\r\n                onClick={onSubmit}\r\n                size=\"large\"\r\n                classes={{ root: classes.submitBtn }}\r\n              >\r\n                {tr(\r\n                  appConfigPreset.isDigitalMenu\r\n                    ? isEditMode\r\n                      ? 'order.catalog.update'\r\n                      : 'order.catalog.add_to_cart_digital_menu'\r\n                    : isEditMode\r\n                      ? 'order.catalog.update_with_price'\r\n                      : 'order.catalog.add_to_cart_with_price',\r\n                  {\r\n                    price: orderMenu.totalPriceFormatted,\r\n                  },\r\n                )}\r\n              </Button>\r\n            </Hidden>\r\n          </Grid>\r\n        </Grid>\r\n      </Grid>\r\n    </Grid>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(HeaderView)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Card from 'pmt-ui/Card'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport HardwareKeyboardArrowRight from 'pmt-ui/svg-icons/hardware/keyboard-arrow-right'\r\n\r\nimport Button from '../Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    cursor: 'pointer',\r\n    overflow: 'initial',\r\n  },\r\n  imageContainer: {\r\n    position: 'relative',\r\n    height: 161,\r\n    padding: theme.spacing(2),\r\n    textAlign: 'center',\r\n    [theme.breakpoints.down('xs')]: {\r\n      height: 'auto',\r\n      float: 'left',\r\n    },\r\n  },\r\n  image: {\r\n    width: 110,\r\n    height: 110,\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: 60,\r\n      height: 40,\r\n    },\r\n  },\r\n  placeholder: {\r\n    opacity: 0.3,\r\n  },\r\n  textContainer: {\r\n    position: 'relative',\r\n    height: 130,\r\n    textAlign: 'center',\r\n    [theme.breakpoints.down('xs')]: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      height: 66,\r\n      padding: `0 ${theme.spacing(2)}px`,\r\n    },\r\n  },\r\n  name: {\r\n    float: 'left',\r\n    height: 35,\r\n    width: '100%',\r\n    padding: `0 ${theme.spacing(2)}px`,\r\n    marginTop: theme.spacing(2),\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    textOverflow: 'ellipsis',\r\n    '-webkit-line-clamp': 2,\r\n    '-webkit-box-orient': 'vertical',\r\n    fontWeight: 'bold',\r\n    color: theme.palette.primary.main,\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: 'calc(100% - 30px)',\r\n      height: 'auto',\r\n      minHeight: 16,\r\n      maxHeight: 35,\r\n      marginTop: 0,\r\n      padding: 0,\r\n    },\r\n  },\r\n  categoryIcon: {\r\n    width: 30,\r\n    height: 30,\r\n    color: theme.palette.primary.main,\r\n  },\r\n  buttonSee: {\r\n    position: 'absolute',\r\n    bottom: theme.spacing(3),\r\n    right: 'calc(50% - 34px)',\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  unavailableLayout: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    bottom: 0,\r\n    right: 0,\r\n    left: 0,\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    background: 'rgba(0, 0, 0, 0.6)',\r\n  },\r\n  unavailableText: {\r\n    color: theme.pmt.colors.white,\r\n  },\r\n  unavailableOpacity: {\r\n    opacity: 0.6,\r\n  },\r\n  unavailableLabel: {\r\n    position: 'absolute',\r\n    top: -theme.spacing(1),\r\n    right: theme.spacing(2),\r\n    padding: `${theme.spacing(0.5)}px ${theme.spacing(1)}px`,\r\n    color: theme.pmt.colors.white,\r\n    background: theme.pmt.colors.darkGrey,\r\n    borderRadius: 3,\r\n  },\r\n})\r\n\r\nconst CategoryCard = ({ category, restaurant, isMobile, onClick, classes }) => (\r\n  <Card\r\n    className={classes.root}\r\n    onClick={e => {\r\n      if (category.available) {\r\n        onClick(e)\r\n      }\r\n    }}\r\n\r\n    role=\"button\"\r\n    tabIndex={category.available ? 0 : -1}\r\n    aria-disabled={!category.available}\r\n    onKeyDown={e => {\r\n      if (category.available && (e.key === 'Enter' || e.key === ' ')) {\r\n        e.preventDefault()\r\n        onClick(e)\r\n      }\r\n    }}\r\n  >\r\n    {!isMobile && (\r\n      <div className={classes.imageContainer}>\r\n        {!isEmpty(category.image) ? (\r\n          <img src={category.image} alt={category.name} className={classes.image} />\r\n        ) : (\r\n          <img\r\n            src={restaurant.logo}\r\n            alt={category.name}\r\n            className={classNames(classes.image, classes.placeholder)}\r\n          />\r\n        )}\r\n        {!category.available && (\r\n          <div className={classes.unavailableLayout}>\r\n            <TypographyCustom type=\"167\" className={classes.unavailableText}>\r\n              {tr('order.catalog.unavailable')}\r\n            </TypographyCustom>\r\n          </div>\r\n        )}\r\n      </div>\r\n    )}\r\n    <div\r\n      className={classNames(classes.textContainer, {\r\n        [classes.unavailableOpacity]: !category.available,\r\n      })}\r\n    >\r\n      {!category.available && isMobile && (\r\n        <TypographyCustom type=\"127\" className={classes.unavailableLabel}>\r\n          {tr('order.catalog.unavailable')}\r\n        </TypographyCustom>\r\n      )}\r\n      <TypographyCustom type=\"167\" align={isMobile ? 'left' : 'center'} className={classes.name}>\r\n        {category.name}\r\n      </TypographyCustom>\r\n      {isMobile ? (\r\n        <span className={`${classes.categoryIcon} u-floatRight`}>\r\n          <HardwareKeyboardArrowRight className={classes.categoryIcon} viewBox=\"0 0 17 24\" />\r\n        </span>\r\n      ) : (\r\n        <Button\r\n          variant=\"outlined\"\r\n          label={tr('order.global.see')}\r\n          className={classes.buttonSee}\r\n          disabled={!category.available}\r\n        />\r\n      )}\r\n    </div>\r\n  </Card>\r\n)\r\n\r\nexport default withStyles(styles)(CategoryCard)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet NavigationChevronLeft = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\r\n  </SvgIcon>\r\n);\r\nNavigationChevronLeft = pure(NavigationChevronLeft);\r\nNavigationChevronLeft.displayName = 'NavigationChevronLeft';\r\nNavigationChevronLeft.muiName = 'SvgIcon';\r\n\r\nexport default NavigationChevronLeft;\r\n","import React from 'react'\r\n\r\nimport { trOptional } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Card, { CardContent } from 'pmt-ui/Card'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport NavigationChevronLeft from 'pmt-ui/svg-icons/navigation/chevron-left'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    padding: theme.spacing(3),\r\n  },\r\n  content: {\r\n    padding: '0 !important',\r\n  },\r\n  backLink: {\r\n    marginLeft: theme.spacing(1) * -1.5,\r\n    height: 26,\r\n    lineHeight: '26px',\r\n    color: theme.palette.primary.main,\r\n    cursor: 'pointer',\r\n\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    font: 'inherit',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  icon: {\r\n    float: 'left',\r\n    width: 26,\r\n    height: 26,\r\n  },\r\n  hr: {\r\n    borderTop: `1px solid ${theme.pmt.colors.grey500}`,\r\n    marginTop: theme.spacing(3),\r\n    marginBottom: theme.spacing(4),\r\n  },\r\n  categoryContainer: {\r\n    height: 160,\r\n    [theme.breakpoints.down('xs')]: {\r\n      height: 'auto',\r\n    },\r\n  },\r\n  category: {\r\n    overflow: 'hidden',\r\n    minHeight: 28,\r\n    maxHeight: 84,\r\n    display: '-webkit-box',\r\n    textOverflow: 'ellipsis',\r\n    '-webkit-line-clamp': 3,\r\n    '-webkit-box-orient': 'vertical',\r\n    lineHeight: '26px',\r\n    [theme.breakpoints.down('xs')]: {\r\n      lineHeight: '20px',\r\n      minHeight: 23,\r\n      maxHeight: 51,\r\n      '-webkit-line-clamp': 2,\r\n    },\r\n  },\r\n})\r\n\r\nconst ParentCategoryCard = ({ category, parentCategory, isMobile, onClick, classes }) => (\r\n  <Card className={classes.root}>\r\n    <CardContent className={classes.content}>\r\n      <button\r\n        type=\"button\"\r\n        className={classes.backLink}\r\n        onClick={e => {\r\n          e.stopPropagation()\r\n          onClick(parentCategory)\r\n        }}\r\n      >\r\n        <NavigationChevronLeft className={classes.icon} />\r\n        <TypographyCustom type=\"167\" component=\"span\" skipColor>\r\n          {trOptional('order.global.back') || 'Back'}\r\n        </TypographyCustom>\r\n      </button>\r\n      <hr className={classes.hr} />\r\n      <div className={classes.categoryContainer}>\r\n        <TypographyCustom type={isMobile ? '207' : '247'} className={classes.category}>\r\n          {category.name}\r\n        </TypographyCustom>\r\n      </div>\r\n    </CardContent>\r\n  </Card>\r\n)\r\n\r\nexport default withStyles(styles)(ParentCategoryCard)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport ActionDone from 'pmt-ui/svg-icons/action/done'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  quantityTip: {\r\n    color: theme.pmt.colors.grey500,\r\n    fontStyle: 'italic',\r\n  },\r\n  quantityTipForValidPart: {\r\n    // color: theme.palette.primary.main,\r\n  },\r\n  selectedItemsString: {\r\n    color: theme.palette.primary.main,\r\n    ...theme.pmt.mixins.textEllipsis,\r\n    fontStyle: 'normal',\r\n  },\r\n  quantitySelected: {\r\n    fontStyle: 'italic',\r\n    color: theme.palette.primary.main,\r\n    marginRight: 2,\r\n  },\r\n  lineHeight25: {\r\n    padding: '0 !important',\r\n    display: 'block',\r\n    float: 'left',\r\n    lineHeight: '25px',\r\n    height: 25,\r\n  },\r\n})\r\n\r\n/*\r\n * - MIN to MAX where MIN >= 0 and MAX != MIN\r\n * - MIN == MAX\r\n *\r\n *\r\n * MIN to MAX where MIN >= 0 and MAX != MIN\r\n */\r\nconst PartQuantity = ({ part, displaySelectedItems, classes, typographyType }) => (\r\n  <React.Fragment>\r\n    {displaySelectedItems && part.nbChosenValues > 0 ? (\r\n      <TypographyCustom\r\n        component=\"div\"\r\n        type={typographyType}\r\n        className={classes.selectedItemsString}\r\n      >\r\n        {part.selectedItemsString}\r\n      </TypographyCustom>\r\n    ) : part.nbChosenValues > 0 ? (\r\n      <TypographyCustom component=\"div\" type={typographyType}>\r\n        <span className={classNames(classes.quantitySelected, classes.lineHeight25)}>\r\n          {part.hasReachedMaxQuantity && <ActionDone className={'u-floatLeft u-marginRight5'} />}\r\n          {part.min === 1 && part.max === 1\r\n            ? tr('order.menu.part.quantity.product_selected')\r\n            : tr('order.menu.part.quantity.product_selected_value', {\r\n                smart_count: part.nbChosenValues,\r\n              })}\r\n        </span>\r\n        {!part.hasReachedMaxQuantity && (\r\n          <span className={classNames(classes.quantityTip, classes.lineHeight25)}>\r\n            {part.min !== part.max\r\n              ? tr('order.menu.part.quantity.on_maximum', { value: part.max })\r\n              : tr('order.menu.part.quantity.on', { value: part.max })}\r\n          </span>\r\n        )}\r\n      </TypographyCustom>\r\n    ) : (\r\n      <TypographyCustom\r\n        component=\"div\"\r\n        type={typographyType}\r\n        className={classNames(classes.quantityTip, {\r\n          [classes.quantityTipForValidPart]: part.isValid && part.nbChosenValues >= 1,\r\n        })}\r\n      >\r\n        {part.min >= 0 && part.max !== part.min && (\r\n          <span>\r\n            {tr('order.menu.part.quantity.min_max_product_to_select.min', {\r\n              min: part.min,\r\n            })}\r\n            {tr('order.menu.part.quantity.min_max_product_to_select.max', {\r\n              smart_count: part.max,\r\n            })}\r\n          </span>\r\n        )}\r\n\r\n        {/* min equals max */}\r\n        {part.min === part.max && (\r\n          <span>\r\n            {tr('order.menu.part.quantity.min_product_to_select', { smart_count: part.min })}\r\n          </span>\r\n        )}\r\n      </TypographyCustom>\r\n    )}\r\n  </React.Fragment>\r\n)\r\n\r\nexport default withStyles(styles)(PartQuantity)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport classNames from 'classnames'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { CardItem } from 'pmt-ui/Card'\r\nimport { CardItemOrder } from 'pmt-ui/Card/components/CardItem'\r\nimport Snackbar from 'pmt-ui/Snackbar'\r\nimport DoneIcon from 'pmt-ui/svg-icons/action/done'\r\nimport AlertButton from 'pmt-ui/AlertButton'\r\nimport Button from '../../../../components/Button'\r\nimport ProductTagList from '../../../../components/ProductTagList'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => {\r\n  const cardItemDefaultStyles = CardItemOrder.defaultStyles(theme)\r\n  return {\r\n    mediaInactive: {\r\n      ...cardItemDefaultStyles.mediaInactive,\r\n    },\r\n    mediaPlaceholder: {\r\n      backgroundColor: theme.pmt.colors.itemPlaceholderBackgroundSecondary,\r\n    },\r\n  }\r\n}\r\n\r\nfunction onBtnClick(\r\n  product,\r\n  onUnselectOrderProduct,\r\n  isSelectable,\r\n  orderMenu,\r\n  restaurant,\r\n  onSelectOrderProduct,\r\n  onAddToCartFromShortcut\r\n) {\r\n  if (product.available) {\r\n    if (product.quantity > 0) {\r\n      onUnselectOrderProduct()\r\n    } else if (isSelectable) {\r\n      if (product.isComplexItem) {\r\n        EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_ITEM_DETAIL, {\r\n          item: product,\r\n          menu: orderMenu,\r\n          restaurant,\r\n        })\r\n        if (product.isProduct) {\r\n          onSelectOrderProduct()\r\n        }\r\n      } else {\r\n        onAddToCartFromShortcut()\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nclass ProductItem extends React.PureComponent {\r\n  handleOnClickDisabledOption = () => {\r\n    this.props.updateUI({ openedSnackbar: true })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.props.updateUI({ openedSnackbar: false })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      product,\r\n      orderMenu,\r\n      restaurant,\r\n      // true if the product can't be selected\r\n      // (part hasReachedMaxQuantity)\r\n      isSelectable,\r\n      classes,\r\n      onSelectOrderProduct,\r\n      onUnselectOrderProduct,\r\n      onEditOrderProduct,\r\n      onAddToCartFromShortcut,\r\n      ui,\r\n      orderProperties,\r\n      saveAlcoholApproval,\r\n      frontSettings,\r\n    } = this.props\r\n\r\n    const isSelectableAndDisabled = product.available && !isSelectable && product.quantity === 0\r\n\r\n    const btnLabel = tr(\r\n      product.quantity === 0\r\n        ? 'order.menu.select'\r\n        : product.totalPrice > 0\r\n        ? 'order.menu.selected_with_price_with_plus'\r\n        : 'order.menu.selected',\r\n      {\r\n        price: product.totalPriceFormatted,\r\n      }\r\n    )\r\n    return (\r\n      <React.Fragment>\r\n        <CardItem\r\n          type={<CardItemOrder />}\r\n          item={product}\r\n          classes={{\r\n            media: classNames({}),\r\n            mediaPlaceholder: classes.mediaPlaceholder,\r\n          }}\r\n          description={product.description}\r\n          image={product.image}\r\n          restaurantLogo={restaurant.logo}\r\n          name={product.name}\r\n          price={product.additionalPrice !== 0 ? `+${product.additionalPriceFormatted}` : null}\r\n          isAvailable={product.available}\r\n          isSelectableAndDisabled={isSelectableAndDisabled}\r\n          isCategory={product.isCategory}\r\n          tagsContent={\r\n            product.tags && product.tags.length > 0\r\n              ? <ProductTagList tags={product.tags} />\r\n              : null\r\n          }\r\n          onClickCard={() => {\r\n            if (isSelectableAndDisabled) {\r\n              this.handleOnClickDisabledOption()\r\n            } else if (product.available) {\r\n              EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_ITEM_DETAIL, {\r\n                item: product,\r\n                menu: orderMenu,\r\n                restaurant,\r\n              })\r\n              if (product.quantity > 0) {\r\n                onEditOrderProduct()\r\n              } else if (isSelectable) {\r\n                onSelectOrderProduct()\r\n              }\r\n            }\r\n          }}\r\n          buttonAdd={\r\n            <div\r\n              onClick={e => {\r\n                e.stopPropagation()\r\n                if (isSelectableAndDisabled) {\r\n                  this.handleOnClickDisabledOption()\r\n                }\r\n              }}\r\n            >\r\n              {frontSettings.display.ageCheckForAlcohol &&\r\n              product.containsAlcohol &&\r\n              !orderProperties.alcoholApprovalAnswer ? (\r\n                <AlertButton\r\n                  alertTitle={tr('order.cart.age_check_for_alcohol.dialog.title')}\r\n                  alertContent={tr('order.cart.age_check_for_alcohol.dialog.description')}\r\n                  okLabel={tr('order.cart.age_check_for_alcohol.dialog.ok')}\r\n                  cancelLabel={tr('order.cart.age_check_for_alcohol.dialog.cancel')}\r\n                  button={<Button />}\r\n                  label={btnLabel}\r\n                  onAgree={e => {\r\n                    e.stopPropagation()\r\n                    saveAlcoholApproval()\r\n                    onBtnClick(\r\n                      product,\r\n                      onUnselectOrderProduct,\r\n                      isSelectable,\r\n                      orderMenu,\r\n                      restaurant,\r\n                      onSelectOrderProduct,\r\n                      onAddToCartFromShortcut\r\n                    )\r\n                  }}\r\n                  size=\"small\"\r\n                  variant={product.quantity === 0 ? 'outlined' : 'contained'}\r\n                  disabled={isSelectableAndDisabled}\r\n                  icon={product.quantity > 0 && <DoneIcon />}\r\n                />\r\n              ) : (\r\n                <Button\r\n                  size=\"small\"\r\n                  variant={product.quantity === 0 ? 'outlined' : 'contained'}\r\n                  disabled={isSelectableAndDisabled}\r\n                  icon={product.quantity > 0 && <DoneIcon />}\r\n                  onClick={e => {\r\n                    e.stopPropagation()\r\n                    onBtnClick(\r\n                      product,\r\n                      onUnselectOrderProduct,\r\n                      isSelectable,\r\n                      orderMenu,\r\n                      restaurant,\r\n                      onSelectOrderProduct,\r\n                      onAddToCartFromShortcut\r\n                    )\r\n                  }}\r\n                  label={btnLabel}\r\n                />\r\n              )}\r\n            </div>\r\n          }\r\n        />\r\n        <Snackbar\r\n          anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\r\n          open={ui.openedSnackbar}\r\n          autoHideDuration={4000}\r\n          onClose={this.handleClose}\r\n          ContentProps={{\r\n            'aria-describedby': 'message-id',\r\n          }}\r\n          message={<span id=\"message-id\">{tr('global.menu.product.disabled')}</span>}\r\n        />\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      openedSnackbar: false,\r\n    },\r\n  }),\r\n  withStyles(styles)\r\n)(ProductItem)\r\n","import React from 'react'\r\n\r\nimport ProductItem from './ProductItem'\r\n\r\nconst Item = ({\r\n  item,\r\n  orderMenu,\r\n  restaurant,\r\n  partHasReachedMaxQuantity,\r\n  onSelectOrderProduct,\r\n  onUnselectOrderProduct,\r\n  onEditOrderProduct,\r\n  onAddToCartFromShortcut,\r\n  orderProperties,\r\n  saveAlcoholApproval,\r\n  frontSettings,\r\n}) => (\r\n  <ProductItem\r\n    orderMenu={orderMenu}\r\n    product={item}\r\n    restaurant={restaurant}\r\n    isSelectable={!partHasReachedMaxQuantity}\r\n    onSelectOrderProduct={onSelectOrderProduct}\r\n    onUnselectOrderProduct={onUnselectOrderProduct}\r\n    onEditOrderProduct={onEditOrderProduct}\r\n    onAddToCartFromShortcut={onAddToCartFromShortcut}\r\n    orderProperties={orderProperties}\r\n    saveAlcoholApproval={saveAlcoholApproval}\r\n    frontSettings={frontSettings}\r\n  />\r\n)\r\n\r\nexport default Item\r\n","import React from 'react'\r\n// import ReactDOM from 'react-dom'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { setCurrentPart } from 'pmt-modules/orderMenu'\r\nimport {\r\n  getPartSelectedCategory,\r\n  getPartParentCategory,\r\n  getCategoryFromPart,\r\n  resetPartParentCategories,\r\n  resetPartSelectedCategory,\r\n} from 'pmt-modules/orderMenu'\r\n\r\nimport {\r\n  getOrderProperties,\r\n  saveAlcoholApproval,\r\n  getAppConfigFrontSettings,\r\n} from 'pmt-modules/orderPlugin'\r\n\r\nimport classNames from 'classnames'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { Sticky, StickyContainer } from 'pmt-ui/Sticky'\r\nimport ScrollableAnchor, { goToAnchor, configureAnchors } from 'pmt-ui/ScrollableAnchor'\r\nimport ArrowDownIcon from 'pmt-ui/svg-icons/hardware/keyboard-arrow-down'\r\nimport ArrowUpIcon from 'pmt-ui/svg-icons/hardware/keyboard-arrow-up'\r\nimport ContentClear from 'pmt-ui/svg-icons/content/clear'\r\n\r\nimport CategoryCard from '../../../../components/CategoryCard'\r\nimport ParentCategoryCard from '../../../../components/ParentCategoryCard'\r\n\r\nimport PartQuantity from '../PartQuantity'\r\nimport Item from './Item'\r\n\r\nconst styles = (theme) => ({\r\n  part: {\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingTop: theme.spacing(8),\r\n      borderTop: `1px solid ${theme.pmt.colors.grey500}`,\r\n      '&>:first-child': {\r\n        paddingTop: 0,\r\n      },\r\n    },\r\n    [theme.breakpoints.down('sm')]: {},\r\n  },\r\n  scrollableSection: {\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingBottom: theme.spacing(8),\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginBottom: theme.spacing(2),\r\n      paddingLeft: theme.spacing(1),\r\n      paddingRight: theme.spacing(1),\r\n    },\r\n  },\r\n  partTitle: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    paddingLeft: theme.spacing(1),\r\n    paddingRight: theme.spacing(1),\r\n\r\n    [theme.breakpoints.up('md')]: {\r\n      marginBottom: theme.spacing(1),\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      flexDirection: 'column',\r\n    },\r\n  },\r\n  partTitleSticky: {\r\n    [theme.breakpoints.up('md')]: {\r\n      height: 50,\r\n    },\r\n    backgroundColor: 'white',\r\n    boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.5)',\r\n    zIndex: 500,\r\n    ...theme.pmt.appConfig.menuPartTitleSticky,\r\n  },\r\n  partName: {\r\n    ...theme.pmt.mixins.textEllipsis,\r\n    float: 'left',\r\n    marginRight: theme.spacing(3),\r\n    minHeight: 25,\r\n    [theme.breakpoints.down('sm')]: {\r\n      minHeight: 21,\r\n    },\r\n  },\r\n  partQuantityQuantityTip: {\r\n    paddingTop: 2,\r\n    color: theme.pmt.colors.grey500,\r\n    ...theme.pmt.mixins.textEllipsis,\r\n  },\r\n  headerFirstLine: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    width: '100%',\r\n    [theme.breakpoints.up('md')]: {\r\n      alignItems: 'center',\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      justifyContent: 'space-between',\r\n    },\r\n  },\r\n  headerFirstLineSticky: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginTop: theme.spacing(1),\r\n    },\r\n  },\r\n  partTitleNbProducts: {\r\n    color: theme.pmt.colors.grey500,\r\n    marginLeft: theme.spacing(1),\r\n  },\r\n  mobileArrow: {\r\n    float: 'right',\r\n    marginRight: theme.spacing(1),\r\n    width: 30,\r\n    height: 30,\r\n  },\r\n  partContent: {\r\n    padding: theme.spacing(1),\r\n  },\r\n  mobileDescription: {\r\n    width: '100%',\r\n    borderBottom: 'solid 1px #979797',\r\n    paddingBottom: theme.spacing(1),\r\n    marginRight: theme.spacing(1),\r\n    marginLeft: theme.spacing(1),\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  mobileDescriptionSticky: {\r\n    margin: 0,\r\n    border: 'none',\r\n  },\r\n  selectedProductsContainer: {\r\n    overflow: 'hidden',\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  selectedProductContainer: {\r\n    display: 'inline-block',\r\n    maxWidth: '33.3333334%',\r\n    padding: theme.spacing(1),\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'table',\r\n      maxWidth: '100%',\r\n    },\r\n  },\r\n  selectedProduct: {\r\n    overflow: 'hidden',\r\n    marginLeft: theme.spacing(1),\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(2)}px`,\r\n    border: `1px solid ${theme.palette.primary.main}`,\r\n    background: theme.pmt.colors.white,\r\n    borderRadius: 4,\r\n    '&:first-child': {\r\n      marginLeft: 0,\r\n    },\r\n  },\r\n  selectedProductName: {\r\n    float: 'left',\r\n    maxWidth: 'calc(100% - 40px)',\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    textOverflow: 'ellipsis',\r\n    '-webkit-line-clamp': 1,\r\n    '-webkit-box-orient': 'vertical',\r\n    lineHeight: '20px',\r\n    height: 20,\r\n    marginTop: theme.spacing(0.25),\r\n    marginRight: theme.spacing(2),\r\n  },\r\n  selectedProductIcon: {\r\n    float: 'right',\r\n    color: theme.palette.primary.main,\r\n    cursor: 'pointer',\r\n  },\r\n})\r\n\r\n// https://stackoverflow.com/questions/45585542/detecting-when-user-scrolls-to-bottom-of-div-with-react-js\r\nclass PartView extends React.Component {\r\n  //\r\n  // We need to track the scrolling position of the PartView, to know if it is currenctly display.\r\n  // Some parts could be display on the screen altogether: we take the part that is the closest\r\n  // from the top of the screen.\r\n  // We listen for the scroll listener, and deduce in `isTop` is the part is the one that should be\r\n  // set as `currentPart`.\r\n  //\r\n\r\n  static DEBOUNCE_TIMEOUT = 300\r\n\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    configureAnchors({ keepLastAnchorHash: true })\r\n\r\n    if (\r\n      props.part.products.length === 1 &&\r\n      !props.part.products[0].isComplexItem &&\r\n      isEmpty(props.part.categories) &&\r\n      props.part.mandatory\r\n    ) {\r\n      props.onAddToCartFromShortcut(props.part, props.part, props.part.products[0])\r\n      props.onOpen(false)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    // if the part has reached its max,\r\n    // we scroll to the next part (if possible)\r\n    if (nextProps.part.hasReachedMaxQuantity) {\r\n      const isMobile = isWidthDown('sm', nextProps.width)\r\n\r\n      if (\r\n        !this.props.part.hasReachedMaxQuantity &&\r\n        !isNil(nextProps.part.nextPart) &&\r\n        this.props.part.nbChosenValues !== nextProps.part.nbChosenValues\r\n      ) {\r\n        if (!isMobile) {\r\n          if (!isNil(nextProps.part.nextPart.anchor)) {\r\n            goToAnchor(nextProps.part.nextPart.anchor, true)\r\n          }\r\n        } else {\r\n          nextProps.onOpen(false)\r\n        }\r\n\r\n        this.props.resetPartParentCategories()\r\n        this.props.resetPartSelectedCategory()\r\n\r\n        return\r\n      }\r\n\r\n      if (\r\n        isMobile &&\r\n        this.props.isOpen &&\r\n        !this.props.hasReachedMaxQuantity &&\r\n        this.props.part.nbChosenValues !== nextProps.part.nbChosenValues\r\n      ) {\r\n        this.props.resetPartParentCategories()\r\n        this.props.resetPartSelectedCategory()\r\n\r\n        nextProps.onOpen(false)\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      part,\r\n      isOpen,\r\n      onOpen,\r\n      width,\r\n      restaurant,\r\n      classes,\r\n      orderMenu,\r\n      partParentCategory,\r\n      partSelectedCategory,\r\n      onSelectOrderProduct,\r\n      onUnselectOrderProduct,\r\n      onEditOrderProduct,\r\n      onAddToCartFromShortcut,\r\n      onSelectCategory,\r\n      onReturnToPreviousPartCategory,\r\n      resetPartParentCategories,\r\n      resetPartSelectedCategory,\r\n      orderProperties,\r\n      saveAlcoholApproval,\r\n      frontSettings,\r\n    } = this.props\r\n\r\n    let partCategory = part\r\n    let categoryFromPart = null\r\n    if (!isNil(partSelectedCategory)) {\r\n      categoryFromPart = getCategoryFromPart(part, partSelectedCategory)\r\n      partCategory = !isNil(categoryFromPart) ? categoryFromPart : part\r\n    }\r\n\r\n    const isMobile = isWidthDown('sm', width)\r\n    const isMobileSmall = isWidthDown('xs', width)\r\n\r\n    return (\r\n      <StickyContainer\r\n        className={classes.part}\r\n        ref={(ref) => {\r\n          this.rootRef = ref\r\n        }}\r\n      >\r\n        <ScrollableAnchor id={part.anchor}>\r\n          {/* div required for ScrollableAnchor. we need the anchor to be a parent of the\r\n            sticky, otherwise, the anchor position taken is the sticky position, not the\r\n            original position\r\n            */}\r\n          <div className={classes.scrollableSection}>\r\n            <Sticky>\r\n              {({ isSticky, style }) => {\r\n                // on mobile we don't want to stick a not-opened part header\r\n                const shouldStick = isSticky && (!isMobile || isOpen)\r\n\r\n                return (\r\n                  <div\r\n                    style={\r\n                      shouldStick\r\n                        ? {\r\n                            ...style,\r\n                            // override on mobile\r\n                            ...(isMobile\r\n                              ? {\r\n                                  // override style\r\n                                  // keep sticky part on border of the screen\r\n                                  right: 0,\r\n                                  left: 0,\r\n                                  width: '100%',\r\n                                  // set same padding on sticky\r\n                                  paddingLeft: 16,\r\n                                  paddingRight: 16,\r\n                                }\r\n                              : {}),\r\n                          }\r\n                        : null\r\n                    }\r\n                    className={classNames(classes.partTitle, {\r\n                      [classes.partTitleSticky]: shouldStick,\r\n                    })}\r\n                    onClick={() => {\r\n                      onOpen()\r\n                      resetPartParentCategories()\r\n                      resetPartSelectedCategory()\r\n                    }}\r\n                  >\r\n                    <div\r\n                      className={classNames(classes.headerFirstLine, {\r\n                        [classes.headerFirstLineSticky]: isSticky,\r\n                      })}\r\n                    >\r\n                      <TypographyCustom className={classes.partName} type={isMobile ? 204 : 244}>\r\n                        {part.name}\r\n                      </TypographyCustom>\r\n                      <Hidden smDown>\r\n                        <PartQuantity\r\n                          part={part}\r\n                          typographyType={144}\r\n                          classes={{\r\n                            quantityTip: classNames(\r\n                              classes.partQuantityQuantityTip,\r\n                              'u-marginLeft5'\r\n                            ),\r\n                          }}\r\n                        />\r\n                      </Hidden>\r\n\r\n                      <Hidden mdUp>\r\n                        {isMobile && this.props.isOpen ? (\r\n                          <ArrowUpIcon className={classes.mobileArrow} />\r\n                        ) : (\r\n                          <ArrowDownIcon className={classes.mobileArrow} />\r\n                        )}\r\n                      </Hidden>\r\n                    </div>\r\n\r\n                    <Hidden mdUp>\r\n                      <div\r\n                        className={classNames(classes.mobileDescription, 'u-marginRight10', {\r\n                          [classes.mobileDescriptionSticky]: shouldStick,\r\n                        })}\r\n                      >\r\n                        <PartQuantity\r\n                          part={part}\r\n                          displaySelectedItems={!this.props.isOpen}\r\n                          typographyType={144}\r\n                          classes={{\r\n                            quantityTip: classes.partQuantityQuantityTip,\r\n                          }}\r\n                        />\r\n                      </div>\r\n                    </Hidden>\r\n                  </div>\r\n                )\r\n              }}\r\n            </Sticky>\r\n            {/* in mobile, we hide the content of the parts that are not opened */}\r\n            <Hidden mdDown={!isOpen && isMobile}>\r\n              <div className={classes.selectedProductsContainer}>\r\n                {!isEmpty(part.selectedProducts) &&\r\n                  part.selectedProducts.map((selectedProduct) => (\r\n                    <div\r\n                      key={`selectedProduct-${selectedProduct.partCategory.id}-${selectedProduct.id}`}\r\n                      className={classes.selectedProductContainer}\r\n                    >\r\n                      <div className={classes.selectedProduct}>\r\n                        <TypographyCustom\r\n                          type={isMobile ? '144' : '164'}\r\n                          className={classes.selectedProductName}\r\n                        >\r\n                          {selectedProduct.name}\r\n                          {selectedProduct.totalPrice > 0 && (\r\n                            <React.Fragment>\r\n                              {' '}\r\n                              ({`+${selectedProduct.totalPriceFormatted}`})\r\n                            </React.Fragment>\r\n                          )}\r\n                        </TypographyCustom>\r\n                        <ContentClear\r\n                          className={classes.selectedProductIcon}\r\n                          onClick={(e) => {\r\n                            e.stopPropagation()\r\n                            onUnselectOrderProduct(\r\n                              part,\r\n                              selectedProduct.partCategory,\r\n                              selectedProduct\r\n                            )\r\n                          }}\r\n                        />\r\n                      </div>\r\n                    </div>\r\n                  ))}\r\n              </div>\r\n              <Grid spacing={2} container className={classes.partContent}>\r\n                {!isNil(categoryFromPart) && !isEmpty(partParentCategory) && (\r\n                  <Grid\r\n                    key={`partParentCategory-${partParentCategory.id}`}\r\n                    item\r\n                    xs={12}\r\n                    sm={6}\r\n                    md={6}\r\n                    lg={4}\r\n                  >\r\n                    <ParentCategoryCard\r\n                      category={partCategory}\r\n                      parentCategory={partParentCategory}\r\n                      isMobile={isMobileSmall}\r\n                      onClick={(parentCategory) => {\r\n                        onReturnToPreviousPartCategory(parentCategory)\r\n                      }}\r\n                    />\r\n                  </Grid>\r\n                )}\r\n                {!isNil(partCategory.categories) &&\r\n                  partCategory.categories.map((category) => (\r\n                    <Grid key={`category-${category.id}`} item xs={12} sm={6} md={6} lg={4}>\r\n                      <CategoryCard\r\n                        category={category}\r\n                        restaurant={restaurant}\r\n                        isMobile={isMobileSmall}\r\n                        onClick={() => onSelectCategory(category, partCategory)}\r\n                      />\r\n                    </Grid>\r\n                  ))}\r\n                {!isNil(partCategory.products) &&\r\n                  partCategory.products.map((item) => (\r\n                    <Grid key={`item-${item.id}`} item xs={12} sm={6} md={6} lg={4}>\r\n                      <Item\r\n                        orderMenu={orderMenu}\r\n                        item={item}\r\n                        restaurant={restaurant}\r\n                        partHasReachedMaxQuantity={part.hasReachedMaxQuantity}\r\n                        onEditOrderProduct={() => onEditOrderProduct(part, partCategory, item)}\r\n                        onUnselectOrderProduct={() =>\r\n                          onUnselectOrderProduct(part, partCategory, item)\r\n                        }\r\n                        onSelectOrderProduct={() => onSelectOrderProduct(part, partCategory, item)}\r\n                        onAddToCartFromShortcut={() =>\r\n                          onAddToCartFromShortcut(part, partCategory, item)\r\n                        }\r\n                        orderProperties={orderProperties}\r\n                        saveAlcoholApproval={saveAlcoholApproval}\r\n                        frontSettings={frontSettings}\r\n                      />\r\n                    </Grid>\r\n                  ))}\r\n              </Grid>\r\n            </Hidden>\r\n          </div>\r\n        </ScrollableAnchor>\r\n      </StickyContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  partSelectedCategory: getPartSelectedCategory(state),\r\n  partParentCategory: getPartParentCategory(state),\r\n  orderProperties: getOrderProperties(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nexport default compose(\r\n  connect(mapStateToProps, {\r\n    resetPartParentCategories,\r\n    resetPartSelectedCategory,\r\n    setCurrentPart,\r\n    saveAlcoholApproval,\r\n  }),\r\n  withWidth(),\r\n  withStyles(styles)\r\n)(PartView)\r\n","import React from 'react'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport compose from 'recompose/compose'\r\n\r\nimport PartView from './PartView'\r\nimport { goToAnchor } from 'pmt-ui/ScrollableAnchor'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingTop: theme.spacing(2),\r\n      paddingRight: theme.spacing(4),\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginTop: theme.spacing(1),\r\n    },\r\n    '&>:first-child': {\r\n      paddingTop: '0px !important',\r\n      borderTop: 'none',\r\n    },\r\n  },\r\n})\r\n\r\nclass PartsView extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // for each part, we add a product to the menu\r\n    // if only one product in part, no option, and min === max === 1\r\n    props.orderMenu.parts.forEach(part => {\r\n      if (\r\n        part.min === 1 &&\r\n        part.min === part.max &&\r\n        part.products.length === 1 &&\r\n        isNil(part.categories) &&\r\n        part.nbChosenValues === 0\r\n      ) {\r\n        const productSelected = part.products[0]\r\n        if (!productSelected.hasOptions) {\r\n          props.onAddToCartFromShortcut(part, part, productSelected)\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      orderMenu,\r\n      restaurant,\r\n      classes,\r\n      onSelectOrderProduct,\r\n      onUnselectOrderProduct,\r\n      onEditOrderProduct,\r\n      onAddToCartFromShortcut,\r\n      onSelectCategory,\r\n      onReturnToPreviousPartCategory,\r\n      ui,\r\n      updateUI,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        {orderMenu.parts.map(part => (\r\n          <PartView\r\n            orderMenu={orderMenu}\r\n            key={part.id}\r\n            part={part}\r\n            currentPart={orderMenu.currentPart}\r\n            restaurant={restaurant}\r\n            onSelectOrderProduct={onSelectOrderProduct}\r\n            onUnselectOrderProduct={onUnselectOrderProduct}\r\n            onEditOrderProduct={onEditOrderProduct}\r\n            onAddToCartFromShortcut={onAddToCartFromShortcut}\r\n            onSelectCategory={onSelectCategory}\r\n            onReturnToPreviousPartCategory={onReturnToPreviousPartCategory}\r\n            // on desktop, the parts are always opened.\r\n            // on mobile, we chose the one to display\r\n            isOpen={ui.openedPart === part.id}\r\n            onOpen={(toggleAnchor = true) => {\r\n              updateUI({\r\n                // toggle opened part\r\n                openedPart: ui.openedPart === part.id ? null : part.id,\r\n              })\r\n              if (toggleAnchor) {\r\n                goToAnchor(part.anchor, true)\r\n              }\r\n            }}\r\n          />\r\n        ))}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      // on mobile mode, we toggle the part to display\r\n      // by default, no part is shown\r\n      openedPart: null,\r\n    },\r\n  }),\r\n  withStyles(styles)\r\n)(PartsView)\r\n","import React from 'react'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { goToAnchor, removeHash, configureAnchors } from 'pmt-ui/ScrollableAnchor'\r\nimport { MuiStepper, MuiStep, MuiStepLabel, MuiStepIcon } from 'pmt-ui/Stepper'\r\nimport PartQuantity from '../PartQuantity'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\n// Offset all anchors by -40 to account for a fixed header\r\n// and scroll more quickly than the default 400ms\r\n// TODO: put on constructor ?\r\nconfigureAnchors({ offset: -40, scrollDuration: 300 })\r\n\r\nconst styles = theme => ({\r\n  // TODO: position static\r\n  root: {\r\n    backgroundColor: 'white',\r\n    [theme.breakpoints.up('lg')]: {\r\n      padding: `${theme.spacing(4)}px ${theme.spacing(3)}px`,\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px ${theme.spacing(1)}px`,\r\n    },\r\n  },\r\n  title: {\r\n    textTransform: 'uppercase',\r\n    marginLeft: theme.spacing(2),\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  partList: {\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  part: {\r\n    display: 'block',\r\n    cursor: 'pointer',\r\n  },\r\n  labelContainer: {\r\n    width: 'calc(100% - 32px)',\r\n  },\r\n  partName: {},\r\n  partQuantityQuantityTip: {\r\n    paddingTop: 4,\r\n    display: 'block',\r\n    lineHeight: '14px',\r\n  },\r\n  stepperRoot: {\r\n    padding: 0,\r\n    [theme.breakpoints.up('lg')]: {\r\n      padding: `${theme.spacing(2)}px ${theme.spacing(1)}px`,\r\n      margin: '0 auto',\r\n    },\r\n  },\r\n  stepIconInvalid: {\r\n    border: `1px solid ${theme.pmt.colors.grey500}!important`,\r\n    width: 24,\r\n    height: 24,\r\n    borderRadius: 90,\r\n  },\r\n})\r\n\r\nconst SideMenu = ({ orderMenu, classes }) => (\r\n  <div className={classes.root}>\r\n    <TypographyCustom type=\"144\" className={classes.title}>\r\n      {tr('order.menu.side_menu.title')}\r\n    </TypographyCustom>\r\n\r\n    <div className={classes.partList}>\r\n      <MuiStepper activeStep={null} orientation=\"vertical\" classes={{ root: classes.stepperRoot }}>\r\n        {orderMenu.parts.map(part => (\r\n          <MuiStep\r\n            key={part.id}\r\n            completed={part.isValid && part.nbChosenValues >= 1}\r\n            // always false since there is nothing in the content\r\n            active={false}\r\n          >\r\n            <MuiStepLabel\r\n              icon={\r\n                // see https://github.com/mui-org/material-ui/blob/v1-beta/src/Stepper/StepIcon.js\r\n                // we want to render the default icon when the part is valid.\r\n                // When it is not valid, the default display the index of the step, we want to use\r\n                // our custom component instead\r\n                <MuiStepIcon\r\n                  icon={\r\n                    part.isValid && part.nbChosenValues >= 1 ? (\r\n                      0\r\n                    ) : (\r\n                      <div className={classes.stepIconInvalid} />\r\n                    )\r\n                  }\r\n                  completed={part.isValid && part.nbChosenValues >= 1}\r\n                />\r\n              }\r\n              className={classes.labelContainer}\r\n            >\r\n              <span\r\n                key={part.id}\r\n                className={classes.part}\r\n                onClick={() => {\r\n                  // trick: we have two parts, and scrolled to the last one\r\n                  // but the first one is still a little bit visible (with its header sticky)\r\n                  // the url hash correspond to the first part, and not the second one\r\n                  // that is visually feeled as the currently displayed part.\r\n                  // so when we click on the anchor to display the first part, it does not work,\r\n                  // since the hash in url is the same as the anchor we want to scroll to.\r\n                  // So we remove the hash before scrolling to the anchor if the url hash and the\r\n                  // anchor are the same, otherwise it does not scroll at all.\r\n                  // Problems with this trick: it display a little 'blink' on the url while we\r\n                  // remove the hash / add a new one\r\n                  const hash = window.location.hash // ex: #plat\r\n                  const anchor = part.anchor // ex: plat\r\n                  // we remove the hash only if we want to scroll to the same hash\r\n                  if (hash.substring(1) === anchor) {\r\n                    removeHash()\r\n                  }\r\n\r\n                  EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_BREADCRUMB, {\r\n                    item: orderMenu,\r\n                    part,\r\n                  })\r\n                  // scroll to the anchor, without saving that hash update in history (false)\r\n                  goToAnchor(anchor, false)\r\n                }}\r\n              >\r\n                <TypographyCustom type=\"167\" component=\"span\" className={classes.partName}>\r\n                  {part.name}\r\n                </TypographyCustom>\r\n\r\n                <br />\r\n\r\n                <PartQuantity\r\n                  part={part}\r\n                  typographyType={144}\r\n                  displaySelectedItems\r\n                  classes={{\r\n                    quantityTip: classes.partQuantityQuantityTip,\r\n                  }}\r\n                />\r\n              </span>\r\n            </MuiStepLabel>\r\n          </MuiStep>\r\n        ))}\r\n      </MuiStepper>\r\n    </div>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(SideMenu)\r\n","import React, { useEffect, useRef } from 'react'\r\n\r\nimport classNames from 'classnames'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Add from 'pmt-ui/svg-icons/content/add'\r\n\r\nimport Button from '../../../../components/Button'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    textAlign: 'center',\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  mobileRoot: {\r\n    padding: `0 ${theme.spacing(2)}px`,\r\n  },\r\n})\r\n\r\n/**\r\n * Also used as bottom of the page on mobile: https://zpl.io/VxBkdkk. see View. We use the forMobile\r\n * prop set to true\r\n *\r\n */\r\nconst Actions = ({ appConfigPreset, classes, orderMenu, forMobile, isEditMode, onSubmit }) => {\r\n  const containerRef = useRef(null)\r\n  const wasValidRef = useRef(orderMenu.isValid)\r\n\r\n  useEffect(() => {\r\n    const becameValid = orderMenu.isValid && !wasValidRef.current\r\n    wasValidRef.current = orderMenu.isValid\r\n\r\n    if (becameValid && containerRef.current && containerRef.current.offsetParent !== null) {\r\n      const button = containerRef.current.querySelector('button')\r\n      if (button) {\r\n        button.focus()\r\n      }\r\n    }\r\n  }, [orderMenu.isValid])\r\n\r\n  return (\r\n    <div\r\n      ref={containerRef}\r\n      className={classNames(classes.root, {\r\n        [classes.mobileRoot]: forMobile,\r\n      })}\r\n    >\r\n      <Button\r\n        disabled={!orderMenu.isValid}\r\n        onClick={onSubmit}\r\n        size=\"large\"\r\n        fullWidth\r\n        icon={!isEditMode && <Add />}\r\n        label={tr(\r\n          !isEditMode\r\n            ? appConfigPreset.isDigitalMenu\r\n              ? 'order.catalog.add_to_cart_digital_menu'\r\n              : 'order.catalog.add_to_cart_with_price'\r\n            : 'order.catalog.update_with_price',\r\n          {\r\n            price: orderMenu.totalPriceFormatted,\r\n          }\r\n        )}\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(Actions)\r\n","import React from 'react'\r\n\r\nimport classNames from 'classnames'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { Sticky } from 'pmt-ui/Sticky'\r\nimport SideMenu from './SideMenu'\r\nimport Actions from './Actions'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    // do not put padding / margin here because of sticky\r\n    [theme.breakpoints.up('lg')]: {\r\n      margin: `0 ${theme.spacing(6)}px`,\r\n    },\r\n    [theme.breakpoints.down('lg')]: {\r\n      margin: `0 ${theme.spacing(4)}px`,\r\n    },\r\n  },\r\n  stickyPart: {\r\n    padding: `${theme.spacing(2)}px 0`,\r\n  },\r\n  menuPartLeftAreaSticky: {\r\n    ...theme.pmt.appConfig.menuPartLeftAreaSticky,\r\n    // do not put padding / margin here because of sticky\r\n  },\r\n})\r\n\r\n/**\r\n *\r\n */\r\nconst LeftArea = ({ appConfigPreset, classes, orderMenu, isEditMode, onSubmit }) => (\r\n  <div className={classes.root}>\r\n    <Sticky>\r\n      {({ isSticky, style }) => (\r\n        <div\r\n          style={style}\r\n          className={classNames(classes.stickyPart, {\r\n            [classes.menuPartLeftAreaSticky]: isSticky,\r\n          })}\r\n        >\r\n          <SideMenu orderMenu={orderMenu} onSubmit={onSubmit} />\r\n\r\n          <Actions\r\n            appConfigPreset={appConfigPreset}\r\n            orderMenu={orderMenu}\r\n            onSubmit={onSubmit}\r\n            isEditMode={isEditMode}\r\n          />\r\n        </div>\r\n      )}\r\n    </Sticky>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(LeftArea)\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { Link } from 'pmt-modules/routing'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport ArrowLeftIcon from 'pmt-ui/svg-icons/hardware/keyboard-arrow-left'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    backgroundColor: theme.palette.primary.main,\r\n    color: theme.palette.getContrastText(theme.palette.primary.main),\r\n    height: '55px',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    cursor: 'pointer',\r\n    paddingLeft: theme.spacing(3),\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    margin: `${theme.spacing(1)}px 0`,\r\n    boxShadow: theme.pmt.modern.shadows.sm,\r\n    transition: theme.pmt.modern.transitions.smooth,\r\n    width: '100%',\r\n    textAlign: 'left',\r\n    font: 'inherit',\r\n    textDecoration: 'none',\r\n    boxSizing: 'border-box',\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingLeft: theme.spacing(1),\r\n    },\r\n  },\r\n  content: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n})\r\n\r\nconst BannerView = ({\r\n  classes,\r\n  isFromCart,\r\n  returnLabel = false,\r\n  to,\r\n  params,\r\n  onBeforeRedirect,\r\n}) => (\r\n  <Link to={to} params={params} className={classes.root} onClick={onBeforeRedirect}>\r\n    <TypographyCustom type=\"164\" component=\"span\" skipColor>\r\n      <span className={classes.content}>\r\n        <ArrowLeftIcon />\r\n        {returnLabel\r\n          ? returnLabel\r\n          : !isFromCart\r\n          ? tr('order.global.back_to_catalog')\r\n          : tr('order.global.back_to_cart')}\r\n      </span>\r\n    </TypographyCustom>\r\n  </Link>\r\n)\r\n\r\nexport default withStyles(styles)(BannerView)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\nimport { trOptional } from 'pmt-modules/i18n'\r\nimport { EventManager } from 'pmt-modules/event'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport { StickyContainer } from 'pmt-ui/Sticky'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\n\r\nimport Header from './components/Header'\r\nimport PartsView from './components/PartsView'\r\nimport LeftArea from './components/LeftArea'\r\nimport Actions from './components/LeftArea/Actions'\r\n\r\nimport BannerView from '../../components/BannerView'\r\nimport BlockContainer from '../../components/BlockContainer'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport Card from 'pmt-ui/Card'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    height: '100%',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  blockContainer: {\r\n    width: '100%',\r\n    padding: 0,\r\n  },\r\n  body: {\r\n    backgroundColor: theme.pmt.colors.greyBackground,\r\n\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingTop: theme.spacing(5),\r\n    },\r\n    [theme.breakpoints.down('md')]: {\r\n      paddingTop: theme.spacing(1),\r\n      padding: `0 0 ${theme.spacing(4)}px 0`,\r\n    },\r\n  },\r\n  // only on mobile\r\n  composeYourMenu: {\r\n    textTransform: 'uppercase',\r\n    paddingLeft: theme.spacing(2),\r\n    paddingRight: theme.spacing(2),\r\n    paddingTop: theme.spacing(1),\r\n    fontSize: 14,\r\n  },\r\n  textFooter: {\r\n    padding: `0 ${theme.spacing(2)}px ${theme.spacing(2)}px ${theme.spacing(4)}px`,\r\n    [theme.breakpoints.down('md')]: {\r\n      paddingLeft: theme.spacing(2),\r\n      paddingTop: theme.spacing(2),\r\n      paddingBottom: 0,\r\n    },\r\n    whiteSpace: 'pre-line', // to display \\n as new lines\r\n    lineHeight: '1.5',\r\n    '&> a': {\r\n      color: theme.palette.primary.main,\r\n      textDecoration: 'underline',\r\n    },\r\n  },\r\n})\r\n\r\n/**\r\n * https://app.zeplin.io/project/5a68b6a766a4c4334877beda/screen/5a699c8a74384ff7e7596062\r\n */\r\nconst View = ({\r\n  appConfigPreset,\r\n  classes,\r\n  orderMenu,\r\n  restaurant,\r\n  isEditMode,\r\n  isFromCart,\r\n  onSelectOrderProduct,\r\n  onUnselectOrderProduct,\r\n  onEditOrderProduct,\r\n  onAddToCartFromShortcut,\r\n  previousPageRoute,\r\n  onBeforeRedirectToPreviousPage,\r\n  onReturnToPreviousPartCategory,\r\n  onSelectCategory,\r\n  onSubmit,\r\n  isFetchingAppConfig,\r\n  isFetchingCatalog,\r\n  isFetchingRestaurant,\r\n  catalog,\r\n  showDietaryInfoDialog,\r\n  menu,\r\n}) => (\r\n  <div className={classes.root}>\r\n\r\n      {isFetchingAppConfig ||\r\n      isFetchingCatalog ||\r\n      isFetchingRestaurant ||\r\n      isNil(catalog) ||\r\n      !orderMenu ? (\r\n        <BlockContainer type={BlockContainer.Type.WHITE} classes={{ root: classes.blockContainer }}>\r\n        <LoadingBlock\r\n          show\r\n          classes={{\r\n            loadingBlock: classNames('u-padding20', classes.loadingBlock),\r\n          }}\r\n        />\r\n        </BlockContainer>\r\n      ) : (\r\n        <React.Fragment>\r\n          <BannerView\r\n            to={previousPageRoute.to}\r\n            params={previousPageRoute.params}\r\n            onBeforeRedirect={onBeforeRedirectToPreviousPage}\r\n            isFromCart={isFromCart}\r\n          />\r\n          <Card>\r\n          <Header\r\n            appConfigPreset={appConfigPreset}\r\n            orderMenu={orderMenu}\r\n            restaurantLogo={restaurant.logo}\r\n            isFromCart={isFromCart}\r\n            isEditMode={isEditMode}\r\n            onSubmit={orderMenu => {\r\n              EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_ADD_TOP, {\r\n                item: orderMenu,\r\n              })\r\n              onSubmit(orderMenu)\r\n            }}\r\n            showDietaryInfoDialog={showDietaryInfoDialog}\r\n          />\r\n          <StickyContainer>\r\n            <Grid spacing={2} container className={classes.body}>\r\n              <Hidden smDown>\r\n                <Grid item md={3}>\r\n                  <LeftArea\r\n                    appConfigPreset={appConfigPreset}\r\n                    orderMenu={orderMenu}\r\n                    isEditMode={isEditMode}\r\n                    onSubmit={orderMenu => {\r\n                      EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_ADD_STICKY, {\r\n                        item: orderMenu,\r\n                      })\r\n                      onSubmit(orderMenu)\r\n                    }}\r\n                  />\r\n                </Grid>\r\n              </Hidden>\r\n              <Hidden smUp>\r\n                <Grid item sm={12}>\r\n                  <div className={classes.composeYourMenu}>{tr('order.menu.side_menu.title')}</div>\r\n                </Grid>\r\n              </Hidden>\r\n              <Grid item xs={12} md={9}>\r\n                <PartsView\r\n                  orderMenu={orderMenu}\r\n                  restaurant={restaurant}\r\n                  onSelectOrderProduct={onSelectOrderProduct}\r\n                  onUnselectOrderProduct={onUnselectOrderProduct}\r\n                  onEditOrderProduct={onEditOrderProduct}\r\n                  onAddToCartFromShortcut={onAddToCartFromShortcut}\r\n                  onSelectCategory={onSelectCategory}\r\n                  onReturnToPreviousPartCategory={onReturnToPreviousPartCategory}\r\n                />\r\n              </Grid>\r\n              <Hidden mdUp>\r\n                <Grid item xs={12} md={9}>\r\n                  <Actions\r\n                    appConfigPreset={appConfigPreset}\r\n                    orderMenu={orderMenu}\r\n                    onSubmit={orderMenu => {\r\n                      EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_ADD_BOTTOM, {\r\n                        item: orderMenu,\r\n                      })\r\n                      onSubmit(orderMenu)\r\n                    }}\r\n                    isEditMode={isEditMode}\r\n                    forMobile\r\n                  />\r\n                </Grid>\r\n              </Hidden>\r\n              {!isNil(trOptional('ORDER__CATALOG__MENU__FOOTER')) && (\r\n                <TypographyCustom\r\n                  type=\"124\"\r\n                  className={classNames(\r\n                    'custom-css-ORDER__CATALOG__MENU__FOOTER custom-css-ORDER__CATALOG__MENU__FOOTER-on-menu',\r\n                    classes.textFooter\r\n                  )}\r\n                  html={trOptional('ORDER__CATALOG__MENU__FOOTER')} // we allow html so they can put links\r\n                />\r\n              )}\r\n            </Grid>\r\n          </StickyContainer>\r\n          </Card>\r\n          </React.Fragment>\r\n      )}\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { showDietaryInfoDialog, withCatalog } from 'pmt-modules/catalog'\r\nimport SelectedMenuContainer from 'pmt-modules/orderMenu/components/SelectedMenuContainer'\r\nimport {\r\n  selectMenuProduct,\r\n  unselectMenuProduct,\r\n  addProductItemToMenu,\r\n  editMenuProduct,\r\n  getViewOptions,\r\n  setPartParentCategories,\r\n  resetPartParentCategories,\r\n  setPartSelectedCategory,\r\n  resetPartSelectedCategory,\r\n  getPartParentCategories,\r\n  getParentCategoriesLeft,\r\n} from 'pmt-modules/orderMenu'\r\nimport { displayDeleteCartDialog } from 'pmt-modules/dialog'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport {\r\n  SelectedCategoryContainer,\r\n  OrderPluginUrlCheckerContainer,\r\n  redirectToCatalogPage,\r\n  redirectToCart,\r\n  withOrderProperties,\r\n} from 'pmt-modules/orderPlugin'\r\nimport {\r\n  getItemListFromCart,\r\n  addOrderMenuToCart,\r\n  updateOrderMenuOnCart,\r\n  getSuspendedDatas,\r\n  setSuspendedDatas,\r\n} from 'pmt-modules/cart'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\n\r\nimport { removeHash } from 'pmt-ui/ScrollableAnchor'\r\nimport withWidth, { isWidthUp, isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\n\r\nimport View from './View'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass MenuPage extends React.Component {\r\n  componentWillUnmount() {\r\n    removeHash()\r\n  }\r\n\r\n  resetPartCategory = () => {\r\n    this.props.resetPartParentCategories()\r\n    this.props.resetPartSelectedCategory()\r\n  }\r\n\r\n  handleAddProductFromShortcut = (part, partCategory, productItem, menu, category) => {\r\n    const options = {\r\n      restaurantId: this.props.restaurant.id,\r\n    }\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_ADD_PRODUCT, {\r\n      dueDate: this.props.orderProperties.dueDate,\r\n      category,\r\n      item: productItem,\r\n      menu,\r\n      restaurant: this.props.restaurant,\r\n    })\r\n\r\n    this.props.addProductItemToMenu(part, partCategory, productItem, options)\r\n  }\r\n\r\n  handleSelectOrderProduct = (part, partCategory, productItem, menu, selectedCategory) => {\r\n    const options = {\r\n      restaurantId: this.props.restaurant.id,\r\n      menu,\r\n      selectedCategory,\r\n    }\r\n\r\n    this.props.selectMenuProduct(part, partCategory, productItem, options)\r\n  }\r\n\r\n  handleUnselectOrderProduct = (part, partCategory, productItem) => {\r\n    const options = {\r\n      restaurantId: this.props.restaurant.id,\r\n    }\r\n\r\n    this.props.unselectMenuProduct(part, partCategory, productItem, options)\r\n  }\r\n\r\n  handleEditOrderProduct = (part, partCategory, orderProduct) => {\r\n    const options = {\r\n      restaurantId: this.props.restaurant.id,\r\n    }\r\n\r\n    this.props.editMenuProduct(part, partCategory, orderProduct, options)\r\n  }\r\n\r\n  handleSelectCategory = (category, parentCategory) => {\r\n    const { partParentCategories, setPartParentCategories, setPartSelectedCategory } = this.props\r\n\r\n    setPartSelectedCategory({ id: category.id })\r\n    partParentCategories.push({\r\n      id: parentCategory.id,\r\n      name: parentCategory.name,\r\n      categories: parentCategory.categories,\r\n      products: parentCategory.products,\r\n    })\r\n    setPartParentCategories(partParentCategories)\r\n  }\r\n\r\n  handleReturnToPreviousPartCategory = parentCategory => {\r\n    const { setPartParentCategories, setPartSelectedCategory } = this.props\r\n    const partParentCategories = getParentCategoriesLeft(\r\n      parentCategory,\r\n      this.props.partParentCategories\r\n    )\r\n\r\n    setPartParentCategories(partParentCategories)\r\n    setPartSelectedCategory({ id: parentCategory.id })\r\n  }\r\n\r\n  handleOnSubmit = (orderMenu, category) => {\r\n    const {\r\n      viewOptions,\r\n      restaurant,\r\n      updateOrderMenuOnCart,\r\n      addOrderMenuToCart,\r\n      cartSuspendedDatas,\r\n      orderProperties,\r\n      setSuspendedDatas,\r\n    } = this.props\r\n\r\n    if (orderMenu.isValid) {\r\n      if (!viewOptions.isEditMode) {\r\n        EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_ADD_MENU, {\r\n          category,\r\n          dueDate: orderProperties.dueDate,\r\n          item: orderMenu,\r\n          restaurant: restaurant,\r\n        })\r\n      }\r\n\r\n      if (viewOptions.isEditMode) {\r\n        updateOrderMenuOnCart(orderMenu)\r\n        this.handleRedirectToPreviousPage()\r\n      } else {\r\n        if (!isNil(cartSuspendedDatas)) {\r\n          setSuspendedDatas(null, null)\r\n        }\r\n        addOrderMenuToCart(orderMenu)\r\n        this.handleRedirectToCatalogPage()\r\n      }\r\n    }\r\n  }\r\n\r\n  handleRedirectToStoreLocator = () => {\r\n    this.resetPartCategory()\r\n\r\n    this.props.itemListFromCart.length > 0\r\n      ? this.props.displayDeleteCartDialog()\r\n      : this.props.redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n  }\r\n\r\n  handleRedirectToPreviousPage = () => {\r\n    this.resetPartCategory()\r\n\r\n    if (this.props.isFromCart) {\r\n      this.handleRedirectToCartPage()\r\n    } else {\r\n      this.handleRedirectToCatalogPage()\r\n    }\r\n  }\r\n\r\n  getPreviousPageRoute = () => {\r\n    const { isFromCart, restaurant } = this.props\r\n\r\n    return isFromCart\r\n      ? { to: getRoute('ORDER__CART') }\r\n      : { to: getRoute('ORDER__CATALOG'), params: { restaurantId: restaurant.id } }\r\n  }\r\n\r\n  handleBeforeRedirectToPreviousPage = () => {\r\n    this.resetPartCategory()\r\n\r\n    if (!this.props.isFromCart) {\r\n      removeHash()\r\n    }\r\n  }\r\n\r\n  handleRedirectToCatalogPage = () => {\r\n    this.resetPartCategory()\r\n    removeHash()\r\n\r\n    this.props.redirectToCatalogPage(this.props.restaurant.id)\r\n  }\r\n\r\n  handleRedirectToCartPage = () => {\r\n    removeHash()\r\n    this.props.redirectToCart()\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      appConfigPreset,\r\n      catalog,\r\n      upsellingData,\r\n      isFetchingCatalog,\r\n      location,\r\n      restaurant,\r\n      isFetchingRestaurant,\r\n      orderProperties,\r\n      showDietaryInfoDialog,\r\n      viewOptions,\r\n      width,\r\n    } = this.props\r\n\r\n    let isEditMode = false\r\n    if (!isNil(viewOptions)) {\r\n      isEditMode = viewOptions.isEditMode\r\n    }\r\n\r\n    return (\r\n      <SelectedCategoryContainer catalog={catalog}>\r\n        {({ selectedCategory }) => (\r\n          <OrderPage\r\n            headerProps={{\r\n              // hide the header when there is a selected children category, since we display\r\n              // the category header\r\n              displayHeader: isWidthUp('md', width),\r\n              displayRestaurantName: true,\r\n              displayTitle: isWidthUp('md', width),\r\n              displayOrderMode: true,\r\n              displayAddress: true,\r\n              changeButton: isWidthUp('md', width) && this.handleRedirectToStoreLocator,\r\n              displayDueDate: isWidthDown('sm', width),\r\n              displayTableNumber: isWidthDown('sm', width),\r\n              displayUser: true,\r\n            }}\r\n            orderProperties={orderProperties}\r\n            restaurant={restaurant}\r\n            location={location}\r\n          >\r\n            <OrderPluginUrlCheckerContainer location={location} verifyMode>\r\n              {({ isFetchingAppConfig, appConfig }) => (\r\n                <SelectedMenuContainer\r\n                  catalog={catalog}\r\n                  selectedCategory={selectedCategory}\r\n                  menuId={this.props.params.menuId}\r\n                  upsellingData={upsellingData}\r\n                >\r\n                  {({ selectedMenu, orderMenu }) => (\r\n                    <SendEventContainer\r\n                      send={\r\n                        orderProperties &&\r\n                        !isNil(orderProperties.restaurant) &&\r\n                        !isNil(selectedCategory)\r\n                      }\r\n                      event={EventManager.Events.ON_PAGE_LOADED}\r\n                      eventProps={() => ({\r\n                        category: selectedCategory,\r\n                        dueDate: orderProperties.dueDate,\r\n                        item: orderMenu,\r\n                        restaurant: orderProperties.restaurant,\r\n                      })}\r\n                    >\r\n                      <View\r\n                        appConfigPreset={appConfigPreset}\r\n                        menu={selectedMenu}\r\n                        orderMenu={orderMenu}\r\n                        restaurant={restaurant}\r\n                        isEditMode={isEditMode}\r\n                        isFromCart={this.props.isFromCart}\r\n                        previousPageRoute={this.getPreviousPageRoute()}\r\n                        onBeforeRedirectToPreviousPage={this.handleBeforeRedirectToPreviousPage}\r\n                        onSelectCategory={this.handleSelectCategory}\r\n                        onSelectOrderProduct={(part, partCategory, productItem) =>\r\n                          this.handleSelectOrderProduct(\r\n                            part,\r\n                            partCategory,\r\n                            productItem,\r\n                            orderMenu,\r\n                            selectedCategory\r\n                          )\r\n                        }\r\n                        onUnselectOrderProduct={(part, partCategory, productItem) =>\r\n                          this.handleUnselectOrderProduct(part, partCategory, productItem)\r\n                        }\r\n                        onEditOrderProduct={this.handleEditOrderProduct}\r\n                        onReturnToPreviousPartCategory={this.handleReturnToPreviousPartCategory}\r\n                        onAddToCartFromShortcut={(part, partCategory, productItem) =>\r\n                          this.handleAddProductFromShortcut(\r\n                            part,\r\n                            partCategory,\r\n                            productItem,\r\n                            orderMenu,\r\n                            selectedCategory\r\n                          )\r\n                        }\r\n                        onSubmit={() => this.handleOnSubmit(orderMenu, selectedCategory)}\r\n                        isFetchingAppConfig={isFetchingAppConfig}\r\n                        isFetchingCatalog={isFetchingCatalog}\r\n                        isFetchingRestaurant={isFetchingRestaurant}\r\n                        catalog={catalog}\r\n                        showDietaryInfoDialog={() => showDietaryInfoDialog(selectedMenu)}\r\n                      />\r\n                    </SendEventContainer>\r\n                  )}\r\n                </SelectedMenuContainer>\r\n              )}\r\n            </OrderPluginUrlCheckerContainer>\r\n          </OrderPage>\r\n        )}\r\n      </SelectedCategoryContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const viewOptions = getViewOptions(state)\r\n\r\n  return {\r\n    viewOptions,\r\n    itemListFromCart: getItemListFromCart(state),\r\n    cartSuspendedDatas: getSuspendedDatas(state),\r\n    isFromCart:\r\n      viewOptions &&\r\n      viewOptions.fromRoute &&\r\n      viewOptions.fromRoute.name === getRoute('ORDER__CART').name,\r\n    partParentCategories: getPartParentCategories(state),\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withCatalog,\r\n  withScrollToTop(),\r\n  connect(mapStateToProps, {\r\n    selectMenuProduct,\r\n    unselectMenuProduct,\r\n    addOrderMenuToCart,\r\n    updateOrderMenuOnCart,\r\n    addProductItemToMenu,\r\n    editMenuProduct,\r\n    getSuspendedDatas,\r\n    setSuspendedDatas,\r\n    redirectToCatalogPage,\r\n    redirectToCart,\r\n    displayDeleteCartDialog,\r\n    redirectTo,\r\n    setPartParentCategories,\r\n    setPartSelectedCategory,\r\n    resetPartParentCategories,\r\n    resetPartSelectedCategory,\r\n    showDietaryInfoDialog,\r\n  }),\r\n  withWidth()\r\n)(MenuPage)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getCategoryFromCatalog, getProductFromCatalog } from 'pmt-modules/catalog/utils'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport { makeGetSelectedProduct, getOrderProduct } from '../selectors'\r\nimport { openProduct } from '../actions'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that returns the selected Product from store\r\n *\r\n * Requirements:\r\n * - catalog\r\n *\r\n */\r\nclass SelectedProductContainerById extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (!isNil(props.catalog)) {\r\n      this.openProductFromProps(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (!isEqual(this.props.catalog, nextProps.catalog) && !isNil(nextProps.catalog)) {\r\n      this.openProductFromProps(nextProps)\r\n    }\r\n  }\r\n\r\n  openProductFromProps = props => {\r\n    let product = null\r\n\r\n    if (isNil(props.selectedProduct)) {\r\n      if (!isNil(props.selectedCategory)) {\r\n        const category = getCategoryFromCatalog(props.catalog, props.selectedCategory.id)\r\n        if (category) {\r\n          product = findOnArray(category.items, product => product.id === this.props.productId)\r\n        } else {\r\n          return\r\n        }\r\n        // no category selected, we need to find the product from each category\r\n      } else {\r\n        product = getProductFromCatalog(props.catalog, props.upsellingData, this.props.productId)\r\n      }\r\n\r\n      if (isNil(product)) {\r\n        // redirectTo somewhere when product not found\r\n        return\r\n      }\r\n\r\n      props.openProduct(product, {\r\n        restaurantId: props.catalog.restaurantId,\r\n        showDialog: null,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { children, ...otherProps } = this.props\r\n\r\n    return children({\r\n      // does not really tell if we are loading the product (handled by withCatalog)\r\n      // could be a 404\r\n      isLoadingProduct: isNil(otherProps.selectedProduct),\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nSelectedProductContainerById.propTypes = {\r\n  catalog: PropTypes.object,\r\n  upsellingData: PropTypes.object,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getSelectedProduct = makeGetSelectedProduct()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      selectedProduct: getSelectedProduct(state, props),\r\n      orderProduct: getOrderProduct(state),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    openProduct,\r\n  }\r\n)(SelectedProductContainerById)\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\n/**\r\n * Contains the text to put on the submit buttons\r\n */\r\nconst SubmitBtnText = ({ appConfigPreset, orderProduct, isMenuMode, isEditMode }) => {\r\n  let wording = isEditMode\r\n    ? 'order.catalog.update'\r\n    : isMenuMode\r\n    ? 'order.catalog.add_to_menu'\r\n    : 'order.catalog.add_to_cart'\r\n\r\n  if (!isMenuMode || orderProduct.totalPrice > 0) {\r\n    wording += '_with_price'\r\n\r\n    if (isMenuMode) {\r\n      wording += '_with_plus'\r\n    }\r\n  }\r\n\r\n  if (appConfigPreset.isDigitalMenu) {\r\n    wording = 'order.catalog.add_to_cart_digital_menu'\r\n  }\r\n\r\n  return tr(wording, {\r\n    price: orderProduct.totalPriceFormatted,\r\n  })\r\n}\r\n\r\nexport default SubmitBtnText\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport Add from 'pmt-ui/svg-icons/content/add'\r\nimport AlertButton from 'pmt-ui/AlertButton'\r\n\r\nimport Button, { ButtonLink } from '../../../components/Button'\r\nimport SubmitBtnText from './SubmitBtnText'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    width: '100%',\r\n    justifyContent: 'center',\r\n    flex: '0 0 auto',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    marginTop: theme.spacing(3),\r\n  },\r\n  rootDialog: {\r\n    margin: 0,\r\n    borderRadius: 0,\r\n  },\r\n  cancelBtn: {\r\n  },\r\n  submitBtn: {\r\n      marginLeft: theme.spacing(1),\r\n  },\r\n  submitBtnMobile: {\r\n  },\r\n})\r\n\r\nconst Actions = ({\r\n  appConfigPreset,\r\n  fromDialog,\r\n  orderProduct,\r\n  isMenuMode,\r\n  isEditMode,\r\n  isMobile,\r\n  classes,\r\n  onClose,\r\n  onSubmit,\r\n  width,\r\n  orderProperties,\r\n  saveAlcoholApproval,\r\n  frontSettings,\r\n}) =>\r\n  // see https://zpl.io/b6QwNnP\r\n  {\r\n    const btnDisabled = !orderProduct.isValid || !orderProduct.available\r\n    return (\r\n      <div\r\n        className={classNames(classes.root, {\r\n          [classes.rootDialog]: fromDialog,\r\n        })}\r\n      >\r\n        <Button\r\n          variant=\"outlined\"\r\n              onClick={onClose}\r\n              classes={{ root: classes.cancelBtn }}\r\n              size=\"large\"\r\n            >\r\n              {tr('order.global.cancel')}\r\n            </Button>\r\n          {frontSettings.display.ageCheckForAlcohol &&\r\n          orderProduct.containsAlcohol &&\r\n          !orderProperties.alcoholApprovalAnswer ? (\r\n            <AlertButton\r\n              alertTitle={tr('order.cart.age_check_for_alcohol.dialog.title')}\r\n              alertContent={tr('order.cart.age_check_for_alcohol.dialog.description')}\r\n              okLabel={tr('order.cart.age_check_for_alcohol.dialog.ok')}\r\n              cancelLabel={tr('order.cart.age_check_for_alcohol.dialog.cancel')}\r\n              button={<Button />}\r\n              disabled={btnDisabled}\r\n              fullWidth={isMobile}\r\n              onAgree={e => {\r\n                e.stopPropagation()\r\n                saveAlcoholApproval()\r\n                onSubmit(e)\r\n              }}\r\n              classes={{\r\n                root: classNames(classes.submitBtn, {\r\n                  [classes.submitBtnMobile]: fromDialog && isWidthDown('sm', width),\r\n                }),\r\n              }}\r\n              size=\"large\"\r\n              icon={!isEditMode && !isMenuMode && <Add />}\r\n            >\r\n              <SubmitBtnText\r\n                appConfigPreset={appConfigPreset}\r\n                orderProduct={orderProduct}\r\n                isMenuMode={isMenuMode}\r\n                isEditMode={isEditMode}\r\n              />\r\n            </AlertButton>\r\n          ) : (\r\n            <Button\r\n              disabled={btnDisabled}\r\n              fullWidth={isMobile}\r\n              onClick={onSubmit}\r\n              classes={{\r\n                root: classNames(classes.submitBtn, {\r\n                  [classes.submitBtnMobile]: fromDialog && isWidthDown('sm', width),\r\n                }),\r\n              }}\r\n              size=\"large\"\r\n              icon={!isEditMode && !isMenuMode && <Add />}\r\n            >\r\n              <SubmitBtnText\r\n                appConfigPreset={appConfigPreset}\r\n                orderProduct={orderProduct}\r\n                isMenuMode={isMenuMode}\r\n                isEditMode={isEditMode}\r\n              />\r\n            </Button>\r\n          )}\r\n        </div>\r\n      )\r\n  }\r\n\r\nexport default compose(withStyles(styles), withWidth())(Actions)\r\n","import React from 'react'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\n\r\nimport { updateOrderProductComment } from 'pmt-modules/orderProduct'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport TextField from 'pmt-ui/TextField'\r\nimport CommentOutlineIcon from 'pmt-ui/svg-icons/communication/comment-outline'\r\n\r\nimport { ButtonLink } from '../../../components/Button'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  title: {\r\n  },\r\n  commentContainer: {\r\n    position: 'relative',\r\n  },\r\n  commentTextField: {\r\n    marginBottom: theme.spacing(2), // keep space for the comment count\r\n  },\r\n  commentCount: {\r\n    position: 'absolute',\r\n    bottom: `-${theme.spacing(0.5)}px`,\r\n    right: theme.spacing(1),\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n})\r\n\r\n/**\r\n * This view contains two modes:\r\n * - simple, we just a tip asking to add a comment\r\n * - the comment area\r\n */\r\nclass Comment extends React.Component {\r\n  state = {\r\n    displayComment: this.shouldDisplayComment(),\r\n    // used to avoid autoFocus if we display the comment area on first render\r\n    commentDisplayedAtMount: this.shouldDisplayComment(),\r\n  }\r\n\r\n  shouldDisplayComment() {\r\n    return !isEmpty(this.props.comment)\r\n  }\r\n\r\n  handleDisplayComment = () => {\r\n    this.setState(\r\n      {\r\n        displayComment: true,\r\n      },\r\n      () => {\r\n        // scroll to top when displayed\r\n        setTimeout(() => {\r\n          this.rootElement.scrollIntoView(true)\r\n        }, 1000)\r\n      }\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const { classes, comment, orderAppConfig, updateOrderProductComment } = this.props\r\n\r\n    if (!orderAppConfig.comments.items.enabled) {\r\n      return null\r\n    }\r\n\r\n    return (\r\n      <div ref={e => (this.rootElement = e)} className=\"u-marginTop40\">\r\n        {!this.state.displayComment ? (\r\n          /* -- TIP MODE */\r\n          <ButtonLink\r\n            label={tr('order.product.comment.label')}\r\n            icon={<CommentOutlineIcon className=\"u-marginRight10\" />}\r\n            onClick={this.handleDisplayComment}\r\n            classes={{ root: 'u-textAlignLeft' }}\r\n          />\r\n        ) : (\r\n          /* -- COMMENT AREA MODE */\r\n          <div>\r\n            <TypographyCustom type=\"207\" className={classes.title} component=\"div\">\r\n              {tr('order.product.comment.title')}\r\n            </TypographyCustom>\r\n\r\n            <div className={classes.commentContainer}>\r\n              <TextField\r\n                id=\"multiline-flexible\"\r\n                multiline\r\n                fullWidth\r\n                placeholder={tr('order.product.comment.placeholder')}\r\n                value={comment}\r\n                onChange={e => updateOrderProductComment(e.target.value)}\r\n                className={classes.commentTextField}\r\n                margin=\"normal\"\r\n                // we want to autoFocus only if the text field has been shown via an user interaction\r\n                // on the tip title\r\n                autoFocus={!this.state.commentDisplayedAtMount}\r\n                InputProps={{\r\n                  inputProps: {\r\n                    maxLength: orderAppConfig.comments.items.maxLength,\r\n                  },\r\n                }}\r\n                InputLabelProps={{\r\n                  shrink: true,\r\n                }}\r\n              />\r\n              <TypographyCustom type=\"124\" className={classes.commentCount} component=\"div\">\r\n                {comment.length} / {orderAppConfig.comments.items.maxLength}\r\n              </TypographyCustom>\r\n            </div>\r\n          </div>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  connect(mapStateToProps, {\r\n    updateOrderProductComment,\r\n  })\r\n)(Comment)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Add from 'pmt-ui/svg-icons/content/add'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport InfoOutlineIcon from 'pmt-ui/svg-icons/action/info-outline'\r\nimport WheatIcon from 'pmt-ui/svg-icons/food/wheat'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport Price from 'pmt-ui/Price'\r\nimport PlaceholderLogo from 'pmt-ui/svg-icons/maps/restaurant'\r\n\r\nimport Button, { ButtonLink } from '../../../components/Button'\r\nimport CartModifierTag from '../../../components/CartModifier/CartModifierTag'\r\nimport Chip from '../../../components/Chip'\r\nimport TipWithIcon from '../../../components/TipWithIcon'\r\n\r\nimport SubmitBtnText from './SubmitBtnText'\r\nimport AlertButton from 'pmt-ui/AlertButton'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { CardMedia } from 'pmt-ui/Card'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(4)}px`,\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: `${theme.spacing(4)}px ${theme.spacing(2)}px`,\r\n    },\r\n  },\r\n  spaceBetween: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'space-between',\r\n  },\r\n  alignItems: {\r\n    [theme.breakpoints.up('lg')]: {\r\n      alignItems: 'flex-end',\r\n    },\r\n  },\r\n  image: {\r\n    height: 164,\r\n    opacity: 1,\r\n    backgroundSize: 'cover',\r\n  },\r\n  mediaPlaceHolderContainer: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    //background: theme.pmt.colors.itemPlaceholderBackground,\r\n    width: '100%',\r\n  },\r\n  mediaRestaurantLogo: {\r\n    height: '120px',\r\n    opacity: 0.3,\r\n  },\r\n  mediaPlaceholderLogo: {\r\n    height: '80px',\r\n    width: '100%',\r\n    opacity: 0.3,\r\n  },\r\n  name: {\r\n    clear: 'both',\r\n    color: theme.palette.primary.main,\r\n    paddingRight: 24,\r\n  },\r\n  allergen: {\r\n    marginTop: theme.spacing(1),\r\n    justifyContent: 'flex-start',\r\n    marginLeft: `-${theme.spacing(1)}px`,\r\n    '& svg': {\r\n      marginRight: `0 !important`,\r\n    },\r\n    textDecoration: 'underline',\r\n  },\r\n  tipAndButtonContainer: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginTop: 10,\r\n    },\r\n  },\r\n  tipWithIcon: {\r\n    textAlign: 'right',\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingBottom: theme.spacing(3),\r\n      maxWidth: 320,\r\n      float: 'right',\r\n    },\r\n    [theme.breakpoints.down('md')]: {\r\n      paddingBottom: theme.spacing(1),\r\n      textAlign: 'left',\r\n      marginBottom: theme.spacing(2),\r\n    },\r\n  },\r\n  submitButtonWithText: {\r\n    float: 'right',\r\n  },\r\n  priceContainer: {\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  price: {\r\n    float: 'left',\r\n    marginRight: theme.spacing(2),\r\n    [theme.breakpoints.down('sm')]: {\r\n      float: 'none',\r\n      margin: 0,\r\n      width: '100%',\r\n    },\r\n  },\r\n  cartModifierContainer: {\r\n    float: 'left',\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginTop: theme.spacing(1),\r\n    },\r\n  },\r\n  cartModifierChip: {\r\n    float: 'left',\r\n    marginRight: theme.spacing(0.5),\r\n    cursor: 'pointer',\r\n    borderRadius: 4,\r\n  },\r\n})\r\n\r\nconst Header = ({\r\n  appConfigPreset,\r\n  fromDialog,\r\n  orderProduct,\r\n  isMenuMode,\r\n  isEditMode,\r\n  restaurantLogo,\r\n  onSubmit,\r\n  classes,\r\n  showDietaryInfoDialog,\r\n  orderProperties,\r\n  saveAlcoholApproval,\r\n  frontSettings,\r\n}) => {\r\n  const btnDisabled = !orderProduct.isValid || !orderProduct.available\r\n  return (\r\n    <React.Fragment>\r\n      <Grid container>\r\n        {/** PICTURE AREA\r\n         * on desktop we always display this Grid item\r\n         * on mobile, we display it only if there is an image, to avoid an empty block with padding\r\n         */}\r\n        <Hidden smDown={!orderProduct.hasImage}>\r\n          <Grid item xs={12} md={3}>\r\n            {orderProduct.hasImage ? (\r\n              <CardMedia\r\n                className={classes.image}\r\n                image={orderProduct.image}\r\n                title={orderProduct.name}\r\n              />\r\n            ) : !isEmpty(restaurantLogo) ? (\r\n              <div className={classNames(classes.image,\r\n                classes.mediaPlaceHolderContainer)}>\r\n                <img\r\n                  className={classes.mediaRestaurantLogo}\r\n                  src={restaurantLogo}\r\n                  alt={orderProduct.name}\r\n                />\r\n              </div>\r\n            ) : (\r\n              <div className={classNames(classes.image,\r\n                classes.mediaPlaceHolderContainer)}>\r\n                <PlaceholderLogo className={classes.mediaPlaceholderLogo} />\r\n              </div>\r\n            )}\r\n          </Grid>\r\n        </Hidden>\r\n\r\n        <Grid item xs={12} md={9}>\r\n          <Grid container className={classes.root}>\r\n\r\n        {/* TITLE AREA */}\r\n        <Grid item xs={12} md={fromDialog ? 6 : 7} className={classes.spaceBetween}>\r\n          {/* Name */}\r\n          <TypographyCustom type=\"247\" className={classes.name}>\r\n            {orderProduct.name}\r\n            <div className=\"u-marginTop10\">\r\n              <TypographyCustom type=\"164\" component=\"p\">\r\n                {orderProduct.description}\r\n              </TypographyCustom>\r\n            </div>\r\n          </TypographyCustom>\r\n          {orderProduct.hasAllergens && (\r\n            <ButtonLink\r\n              onClick={showDietaryInfoDialog}\r\n              className={classes.allergen}\r\n              icon={<WheatIcon />}\r\n              label={tr('order.dietary_info.title')}\r\n              color=\"default\"\r\n            />\r\n          )}\r\n          {/* Price */}\r\n          {(!isMenuMode || orderProduct.additionalPrice !== 0) && (\r\n            <TypographyCustom type=\"247\" className={classes.priceContainer}>\r\n              <Price\r\n                value={\r\n                  isMenuMode ? orderProduct.additionalPriceFormatted : orderProduct.priceFormatted\r\n                }\r\n                hasCartModifier={orderProduct.hasCartModifier}\r\n                baseValue={orderProduct.hasCartModifier ? orderProduct.basePriceFormatted : null}\r\n                classes={{ root: classes.price }}\r\n              />\r\n              {orderProduct.hasCartModifier && (\r\n                <div className={classes.cartModifierContainer}>\r\n                  {orderProduct.cartModifiers.list.map((cartModifier, index) => (\r\n                    <CartModifierTag\r\n                      cartModifier={cartModifier}\r\n                      chipElement={\r\n                        <Chip\r\n                          key={index}\r\n                          label={cartModifier.tag}\r\n                          classes={{ root: classes.cartModifierChip }}\r\n                        />\r\n                      }\r\n                      key={index}\r\n                    />\r\n                  ))}\r\n                </div>\r\n              )}\r\n            </TypographyCustom>\r\n          )}\r\n        </Grid>\r\n\r\n        {/* RIGHT AREA */}\r\n        <Hidden smDown={!orderProduct.hasOptions || !orderProduct.hasMandatoryOptions}>\r\n          <Grid\r\n            item\r\n            xs={12}\r\n            md={fromDialog ? 6 : 5}\r\n            className={classNames(classes.tipAndButtonContainer, classes.alignItems)}\r\n          >\r\n            <TypographyCustom type=\"164\">\r\n              <TipWithIcon\r\n                classes={{\r\n                  root: classNames(classes.tipWithIcon, 'u-marginTop10', {\r\n                    'u-hide': orderProduct.isValid,\r\n                  }),\r\n                }}\r\n                icon={<InfoOutlineIcon />}\r\n                label={\r\n                  isMenuMode ? (\r\n                    <span>{tr('order.product.options.select_menu')}</span>\r\n                  ) : (\r\n                    <span>{tr('order.product.options.select_cart')}</span>\r\n                  )\r\n                }\r\n              />\r\n            </TypographyCustom>\r\n            <Hidden smDown>\r\n              {frontSettings.display.ageCheckForAlcohol &&\r\n              orderProduct.containsAlcohol &&\r\n              !orderProperties.alcoholApprovalAnswer ? (\r\n                <AlertButton\r\n                  alertTitle={tr('order.cart.age_check_for_alcohol.dialog.title')}\r\n                  alertContent={tr('order.cart.age_check_for_alcohol.dialog.description')}\r\n                  okLabel={tr('order.cart.age_check_for_alcohol.dialog.ok')}\r\n                  cancelLabel={tr('order.cart.age_check_for_alcohol.dialog.cancel')}\r\n                  button={<Button />}\r\n                  disabled={btnDisabled}\r\n                  onAgree={e => {\r\n                    e.stopPropagation()\r\n                    saveAlcoholApproval()\r\n                    onSubmit(e)\r\n                  }}\r\n                  size=\"large\"\r\n                  icon={!isEditMode && <Add />}\r\n                  className={classes.submitButtonWithText}\r\n                >\r\n                  <SubmitBtnText\r\n                    appConfigPreset={appConfigPreset}\r\n                    orderProduct={orderProduct}\r\n                    isMenuMode={isMenuMode}\r\n                    isEditMode={isEditMode}\r\n                  />\r\n                </AlertButton>\r\n              ) : (\r\n                <Button\r\n                  disabled={btnDisabled}\r\n                  onClick={onSubmit}\r\n                  size=\"large\"\r\n                  icon={!isEditMode && <Add />}\r\n                  className={classes.submitButtonWithText}\r\n                >\r\n                  <SubmitBtnText\r\n                    appConfigPreset={appConfigPreset}\r\n                    orderProduct={orderProduct}\r\n                    isMenuMode={isMenuMode}\r\n                    isEditMode={isEditMode}\r\n                  />\r\n                </Button>\r\n              )}\r\n            </Hidden>\r\n          </Grid>\r\n        </Hidden>\r\n      </Grid>\r\n        </Grid>\r\n      </Grid>\r\n    </React.Fragment>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(Header)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\nimport { withStyles, withTheme } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  disabled: {\r\n    color: theme.palette.primary.main,\r\n    opacity: 0.4,\r\n  },\r\n})\r\n\r\n// CheckboxCustom - used to add special style in disable for order plugin\r\nconst CheckboxCustom = ({ disabled, classes, ...otherProps }) => (\r\n  <Checkbox\r\n    disabled={disabled}\r\n    classes={{ disabled: classes.disabled, ...classes }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nCheckboxCustom.defaultProps = {\r\n  disabled: false,\r\n}\r\n\r\nCheckboxCustom.propTypes = {\r\n  disabled: PropTypes.bool,\r\n}\r\n\r\nexport default withStyles(styles)(withTheme(CheckboxCustom))\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { FormGroup, FormControlLabel } from 'pmt-ui/Form'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Radio from 'pmt-ui/Radio'\r\n\r\nimport Checkbox from '../../../components/Checkbox'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst ButtonType = {\r\n  ROUND: 'ROUND',\r\n  SQUARE: 'SQUARE',\r\n}\r\n\r\nconst styles = theme => ({\r\n  grey300: {\r\n    color: theme.pmt.colors.grey300,\r\n  },\r\n})\r\n\r\nconst getButton = (type, value, disabled, onSelect) => {\r\n  // for now, we can select a value only once, so we consider it as checked if the quantity is 1\r\n  const checked = value.quantity === 1\r\n\r\n  switch (type) {\r\n    case ButtonType.ROUND:\r\n      return (\r\n        <Radio checked={checked} onClick={onSelect} value=\"\" color=\"primary\" disabled={disabled} />\r\n      )\r\n\r\n    case ButtonType.SQUARE:\r\n      return (\r\n        <Checkbox\r\n          checked={checked}\r\n          onChange={onSelect}\r\n          value=\"\"\r\n          color=\"primary\"\r\n          disabled={disabled}\r\n        />\r\n      )\r\n\r\n    default:\r\n      return null\r\n  }\r\n}\r\n\r\nconst getLabel = (value, disabled) => {\r\n  let additionalPrice = ''\r\n\r\n  if (value.additionalPrice !== 0) {\r\n    additionalPrice = ` (+${value.additionalPriceFormatted})`\r\n  }\r\n\r\n  return (\r\n    <TypographyCustom type=\"164\" skipColor={disabled} component=\"div\">\r\n      {value.name}\r\n      {additionalPrice}\r\n      {value.stock === 0 && ` (${tr('order.catalog.unavailable')})`}\r\n    </TypographyCustom>\r\n  )\r\n}\r\n\r\nconst OptionValue = ({ value, buttonType, disabled, onSelect }) => (\r\n  <FormGroup row>\r\n    <FormControlLabel\r\n      control={getButton(buttonType, value, disabled, onSelect)}\r\n      label={getLabel(value, disabled)}\r\n      disabled={disabled}\r\n    />\r\n  </FormGroup>\r\n)\r\n\r\nOptionValue.ButtonType = ButtonType\r\n\r\nexport default withStyles(styles)(OptionValue)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport ui from 'pmt-modules/reduxUi'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport OptionValue from './OptionValue'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Snackbar from 'pmt-ui/Snackbar'\r\nimport AlertButton from 'pmt-ui/AlertButton'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport isNil from 'lodash/isNil'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    paddingTop: theme.spacing(3),\r\n    paddingBottom: theme.spacing(2),\r\n  },\r\n  header: {\r\n    marginBottom: theme.spacing(1),\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingBottom: theme.spacing(1),\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingBottom: theme.spacing(2),\r\n    },\r\n    borderBottom: `1px solid ${theme.palette.primary.main}`,\r\n  },\r\n  quantityTip: {\r\n    paddingTop: theme.spacing(1),\r\n    color: theme.pmt.colors.grey500,\r\n    fontSize: 16,\r\n  },\r\n  valueGrid: {\r\n    padding: 0,\r\n  },\r\n})\r\n\r\nclass OptionView extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // we automatically select the option values if their number is matching the min and max quantities\r\n    // eg. min = 1 and max = 1, if there is only one value, we select it by default\r\n    // eg. min = 2 and max = 2, if there is only two values, we select them by default\r\n    if (\r\n      props.option.quantityMin === props.option.quantityMax &&\r\n      props.option.values.length === props.option.quantityMin\r\n    ) {\r\n      props.option.values.forEach(value => {\r\n        // if the value is not already selected\r\n        if (value.quantity === 0) {\r\n          props.onSelectOptionValue(props.option, value)\r\n        }\r\n      })\r\n    }\r\n  }\r\n\r\n  handleOnClickDisabledOption = () => {\r\n    this.props.updateUI({ openedSnackbar: true })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.props.updateUI({ openedSnackbar: false })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      option,\r\n      onSelectOptionValue,\r\n      onUnselectOptionValue,\r\n      classes,\r\n      ui,\r\n      orderProperties,\r\n      saveAlcoholApproval,\r\n      frontSettings,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <div className={classes.header}>\r\n          <TypographyCustom type=\"207\">\r\n            {option.name}\r\n            {option.mandatory && '*'}\r\n          </TypographyCustom>\r\n\r\n          {/*\r\n           * - 0 to MAX\r\n           * - MIN to MAX where MIN > 0 and MAX !== MIN\r\n           * - mandatory: nothing to display\r\n           */}\r\n\r\n          {/* 0 to MAX */}\r\n          {option.quantityMin === 0 && option.quantityMax > 1 && (\r\n            <div className={classes.quantityTip}>\r\n              {tr('order.product.options.up_quantity', { max: option.quantityMax })}\r\n            </div>\r\n          )}\r\n\r\n          {/* MIN to MAX where MIN > 0 and MAX !== MIN */}\r\n          {option.quantityMin > 0 && option.quantityMax !== option.quantityMin && (\r\n            <div className={classes.quantityTip}>\r\n              {tr('order.product.options.from_quantity', {\r\n                min: option.quantityMin,\r\n                max: option.quantityMax,\r\n              })}\r\n            </div>\r\n          )}\r\n\r\n          {/* MAX === MIN && MIN === 1 */}\r\n          {option.quantityMin === 1 && option.quantityMax === option.quantityMin && (\r\n            <div className={classes.quantityTip}>\r\n              {tr('order.product.options.quantity.singular', {\r\n                count: option.quantityMax,\r\n              })}\r\n            </div>\r\n          )}\r\n\r\n          {/* MAX === MIN && MIN > 1 */}\r\n          {option.quantityMin > 1 && option.quantityMax === option.quantityMin && (\r\n            <div className={classes.quantityTip}>\r\n              {tr('order.product.options.quantity.plural', {\r\n                count: option.quantityMax,\r\n              })}\r\n            </div>\r\n          )}\r\n        </div>\r\n\r\n        <Grid container spacing={0}>\r\n          {option.values.map(value => {\r\n            // when there is multiple choices (square buttons), we disabled the values that can't\r\n            // be selected (hasReachedMaxQuantity)\r\n            const disabled =\r\n              option.hasReachedMaxQuantity &&\r\n              (option.quantityMax !== option.quantityMin || option.quantityMin > 1) &&\r\n              value.quantity === 0\r\n\r\n            //\r\n            // - Option is mandatory: display radio button. The user can select only one value. If he\r\n            // select another value, the already selected one is replaced.\r\n            // - 0 to N / 1 to N: display square button. Block the number that can be selected to N.\r\n            //  If the number of selected values equals N, and the user want another value, he must\r\n            // unselect a value first.\r\n            //\r\n            const buttonType =\r\n              option.quantityMin === option.quantityMax && option.quantityMin === 1\r\n                ? OptionValue.ButtonType.ROUND\r\n                : OptionValue.ButtonType.SQUARE\r\n            const optionDisabled = (disabled || value.isOutOfStock) && value.disableAdd\r\n            const onSelect = () => {\r\n              // for now, an option value can be selected only once\r\n              if (value.quantity === 0) {\r\n                onSelectOptionValue(option, value)\r\n              } else {\r\n                onUnselectOptionValue(option, value)\r\n              }\r\n            }\r\n            return (\r\n              <Grid\r\n                key={value.id}\r\n                item\r\n                xs={12}\r\n                sm={6}\r\n                className={{ root: classes.valueGrid }}\r\n                onClick={() => {\r\n                  if (disabled) {\r\n                    this.handleOnClickDisabledOption()\r\n                  }\r\n                }}\r\n              >\r\n                {!disabled &&\r\n                frontSettings.display.ageCheckForAlcohol &&\r\n                value.containsAlcohol &&\r\n                !orderProperties.alcoholApprovalAnswer ? (\r\n                  <AlertButton\r\n                    key={value.id}\r\n                    alertTitle={tr('order.cart.age_check_for_alcohol.dialog.title')}\r\n                    alertContent={tr('order.cart.age_check_for_alcohol.dialog.description')}\r\n                    okLabel={tr('order.cart.age_check_for_alcohol.dialog.ok')}\r\n                    cancelLabel={tr('order.cart.age_check_for_alcohol.dialog.cancel')}\r\n                    button={\r\n                      <OptionValue\r\n                        key={value.id}\r\n                        value={value}\r\n                        buttonType={buttonType}\r\n                        disabled={optionDisabled}\r\n                      />\r\n                    }\r\n                    disabled={optionDisabled}\r\n                    onAgree={e => {\r\n                      e.stopPropagation()\r\n                      saveAlcoholApproval()\r\n                      onSelect()\r\n                    }}\r\n                  />\r\n                ) : (\r\n                  <OptionValue\r\n                    key={value.id}\r\n                    value={value}\r\n                    buttonType={buttonType}\r\n                    disabled={optionDisabled}\r\n                    onSelect={onSelect}\r\n                  />\r\n                )}\r\n              </Grid>\r\n            )\r\n          })}\r\n        </Grid>\r\n        <Snackbar\r\n          anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\r\n          open={ui.openedSnackbar}\r\n          autoHideDuration={6000}\r\n          onClose={this.handleClose}\r\n          ContentProps={{\r\n            'aria-describedby': 'message-id',\r\n          }}\r\n          message={<span id=\"message-id\">{tr('global.option.disabled')}</span>}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      openedSnackbar: false,\r\n    },\r\n  }),\r\n  withStyles(styles)\r\n)(OptionView)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport OptionView from './OptionView'\r\n\r\nconst styles = (theme) => ({\r\n  root: {\r\n    marginTop: theme.spacing(3),\r\n  },\r\n})\r\n\r\nconst OptionsView = ({\r\n  orderProduct,\r\n  classes,\r\n  onSelectOptionValue,\r\n  onUnselectOptionValue,\r\n  orderProperties,\r\n  saveAlcoholApproval,\r\n  frontSettings,\r\n}) => (\r\n  <div className={classes.root}>\r\n    {orderProduct.options.map((option) => (\r\n      <OptionView\r\n        key={option.id}\r\n        option={option}\r\n        onSelectOptionValue={onSelectOptionValue}\r\n        onUnselectOptionValue={onUnselectOptionValue}\r\n        orderProperties={orderProperties}\r\n        saveAlcoholApproval={saveAlcoholApproval}\r\n        frontSettings={frontSettings}\r\n      />\r\n    ))}\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(OptionsView)\r\n","import React from 'react'\r\n\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    paddingTop: theme.spacing(3),\r\n    paddingBottom: theme.spacing(2),\r\n  },\r\n  header: {\r\n    marginBottom: theme.spacing(1),\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingBottom: theme.spacing(1),\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      paddingBottom: theme.spacing(2),\r\n    },\r\n    borderBottom: `1px solid ${theme.palette.primary.main}`,\r\n  },\r\n}))\r\n\r\nconst ReclaimLater = ({ orderProduct, setReclaimLater }) => {\r\n  const classes = useStyles()\r\n\r\n  if (!orderProduct.reclaimLaterEnabled) {\r\n    return null\r\n  }\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <div className={classes.header}>\r\n        <TypographyCustom type=\"207\">{tr('order.product.reclaimLater.title')}</TypographyCustom>\r\n      </div>\r\n      <FormControlLabel\r\n        control={\r\n          <Checkbox\r\n            color=\"primary\"\r\n            checked={orderProduct.reclaimLater}\r\n            onChange={e => setReclaimLater(e.target.checked)}\r\n          />\r\n        }\r\n        label={\r\n          <TypographyCustom type=\"164\" component=\"div\">\r\n            {tr('order.product.reclaimLater.label')}\r\n          </TypographyCustom>\r\n        }\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default ReclaimLater\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport { DialogContent, DialogActions } from 'pmt-ui/Dialog'\r\n\r\nimport Actions from './Actions'\r\nimport Comment from './Comment'\r\nimport Header from './Header'\r\nimport OptionsView from './OptionsView'\r\nimport ReclaimLater from './ReclaimLater'\r\n\r\nconst styles = (theme) => {\r\n  const rootStyle = {\r\n    overflow: 'auto',\r\n    padding: `0 ${theme.spacing(3)}px ${theme.spacing(3)}px`,\r\n  }\r\n\r\n  return {\r\n    root: {},\r\n    // different style when there is options\r\n    rootWithOptions: {\r\n      ...rootStyle,\r\n    },\r\n    rootWithoutOptions: {\r\n      ...rootStyle,\r\n    },\r\n    belowHeader:{\r\n      padding: `0px ${theme.spacing(4)}px !important`,\r\n    },\r\n    dialogContent: {\r\n      padding: `0px 0px ${theme.spacing(4)}px 0px !important`,\r\n      borderRadius: theme.shape.borderRadiusLg,\r\n    },\r\n    dialogActions: {\r\n      padding: `${theme.spacing(3)}px`,\r\n      justifyContent: 'center',\r\n      zIndex: 1,\r\n    },\r\n    dialogActionsMobile: {\r\n      margin: 0,\r\n    },\r\n  }\r\n}\r\n\r\nconst View = ({\r\n  classes,\r\n  appConfigPreset,\r\n  orderAppConfig,\r\n  fromDialog = true,\r\n  orderProduct,\r\n  isMenuMode,\r\n  isEditMode,\r\n  onSelectOptionValue,\r\n  onUnselectOptionValue,\r\n  onSubmit,\r\n  onClose,\r\n  restaurant,\r\n  setReclaimLater,\r\n  showDietaryInfoDialog,\r\n  width,\r\n  orderProperties,\r\n  saveAlcoholApproval,\r\n  frontSettings,\r\n}) => {\r\n  const isMobile = isWidthDown('sm', width)\r\n\r\n  return (\r\n    <React.Fragment>\r\n      <DialogContent\r\n        classes={{\r\n          root: classNames(\r\n            {\r\n              [classes.rootWithOptions]: orderProduct.hasOptions,\r\n              [classes.rootWithoutOptions]: !orderProduct.hasOptions,\r\n            },\r\n            classes.dialogContent\r\n          ),\r\n        }}\r\n      >\r\n        <React.Fragment>\r\n          <Header\r\n            appConfigPreset={appConfigPreset}\r\n            orderProduct={orderProduct}\r\n            isMenuMode={isMenuMode}\r\n            isEditMode={isEditMode}\r\n            isMobile={isMobile}\r\n            onSubmit={onSubmit}\r\n            onClose={onClose}\r\n            restaurantLogo={!isNil(restaurant) ? restaurant.logo : null}\r\n            showDietaryInfoDialog={showDietaryInfoDialog}\r\n            fromDialog={fromDialog}\r\n            orderProperties={orderProperties}\r\n            saveAlcoholApproval={saveAlcoholApproval}\r\n            frontSettings={frontSettings}\r\n          />\r\n          <div className={classes.belowHeader}>\r\n            <OptionsView\r\n              orderProduct={orderProduct}\r\n              onSelectOptionValue={onSelectOptionValue}\r\n              onUnselectOptionValue={onUnselectOptionValue}\r\n              orderProperties={orderProperties}\r\n              saveAlcoholApproval={saveAlcoholApproval}\r\n              frontSettings={frontSettings}\r\n            />\r\n            <ReclaimLater orderProduct={orderProduct}\r\n                          setReclaimLater={setReclaimLater} />\r\n            <Comment orderAppConfig={orderAppConfig}\r\n                     comment={orderProduct.comment} />\r\n          </div>\r\n        </React.Fragment>\r\n      </DialogContent>\r\n      <DialogActions\r\n        classes={{\r\n          root: classNames(classes.dialogActions, {\r\n            [classes.dialogActionsMobile]: fromDialog && isMobile,\r\n          }),\r\n        }}\r\n      >\r\n        <Actions\r\n          appConfigPreset={appConfigPreset}\r\n          fromDialog={fromDialog}\r\n          orderProduct={orderProduct}\r\n          isMenuMode={isMenuMode}\r\n          isEditMode={isEditMode}\r\n          isMobile={isMobile}\r\n          onSubmit={onSubmit}\r\n          onClose={onClose}\r\n          orderProperties={orderProperties}\r\n          saveAlcoholApproval={saveAlcoholApproval}\r\n          frontSettings={frontSettings}\r\n        />\r\n      </DialogActions>\r\n    </React.Fragment>\r\n  )\r\n}\r\n\r\nexport default compose(withWidth(), withStyles(styles))(View)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport Divider from 'pmt-ui/Divider'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\n\r\nimport { getRoute } from 'pmt-modules/routing'\r\n\r\nimport BlockContainer from '../../components/BlockContainer'\r\nimport MessageBlock from '../../components/MessageBlock'\r\nimport { ButtonLink } from '../../components/Button'\r\nimport BannerView from '../../components/BannerView'\r\n\r\nimport { default as ViewProduct } from './components/View'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  rootContent: {\r\n    padding: `${theme.spacing(4)}px !important`,\r\n  },\r\n  iconInfo: {\r\n    width: 30,\r\n    height: 30,\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  loadingBlock: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      background: theme.pmt.colors.greyBackground,\r\n    },\r\n  },\r\n  catalogError: {\r\n    textAlign: 'center',\r\n    '&> button': {\r\n      marginTop: theme.spacing(3),\r\n    },\r\n  },\r\n})\r\n\r\nconst View = ({\r\n  classes,\r\n  appConfigPreset,\r\n  orderAppConfig,\r\n  orderProduct,\r\n  isMenuMode,\r\n  isEditMode,\r\n  onSubmit,\r\n  onClose,\r\n  onSelectOptionValue,\r\n  onUnselectOptionValue,\r\n  isFetchingRestaurant,\r\n  isFetchingCatalog,\r\n  catalog,\r\n  catalogError,\r\n  restaurant,\r\n  selectedCategory,\r\n  handleRedirectToStoreLocator,\r\n  showDietaryInfoDialog,\r\n  setReclaimLater,\r\n  orderProperties,\r\n  saveAlcoholApproval,\r\n  frontSettings,\r\n}) => (\r\n  <div className={classes.root}>\r\n    <Grid spacing={2} container>\r\n      <Grid item container direction=\"column\" spacing={0} xs={12} wrap=\"nowrap\">\r\n        <BannerView\r\n          to={\r\n            !isNil(restaurant) && !isNil(selectedCategory)\r\n              ? getRoute('ORDER__CATEGORY')\r\n              : getRoute('ORDER__MODE')\r\n          }\r\n          params={\r\n            !isNil(restaurant) && !isNil(selectedCategory)\r\n              ? { restaurantId: restaurant.id, categoryId: selectedCategory.id }\r\n              : undefined\r\n          }\r\n          isFromCart={false}\r\n        />\r\n        <BlockContainer className=\"u-flex1\" type={BlockContainer.Type.WHITE} disablePadding>\r\n          {isFetchingRestaurant || !restaurant || isFetchingCatalog || !orderProduct ? (\r\n            <LoadingBlock\r\n              show\r\n              classes={{\r\n                loadingBlock: classNames('u-marginTop20 u-marginBottom20', classes.loadingBlock),\r\n              }}\r\n            />\r\n          ) : !catalog ? (\r\n            <div className={classes.catalogError}>\r\n              <ErrorBlock\r\n                error={catalogError}\r\n                mode={ErrorBlock.Mode.CUSTOM}\r\n                customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n              />\r\n              <ButtonLink onClick={handleRedirectToStoreLocator}>\r\n                {tr('order.global.choose_restaurant')}\r\n              </ButtonLink>\r\n            </div>\r\n          ) : selectedCategory ? (\r\n            <div className={classes.content}>\r\n              <ViewProduct\r\n                appConfigPreset={appConfigPreset}\r\n                orderAppConfig={orderAppConfig}\r\n                fromDialog={false}\r\n                orderProduct={orderProduct}\r\n                isMenuMode={isMenuMode}\r\n                isEditMode={isEditMode}\r\n                onSelectOptionValue={onSelectOptionValue}\r\n                onUnselectOptionValue={onUnselectOptionValue}\r\n                onSubmit={onSubmit}\r\n                onClose={onClose}\r\n                restaurant={restaurant}\r\n                classes={{ rootContent: classes.rootContent }}\r\n                showDietaryInfoDialog={showDietaryInfoDialog}\r\n                setReclaimLater={setReclaimLater}\r\n                orderProperties={orderProperties}\r\n                saveAlcoholApproval={saveAlcoholApproval}\r\n                frontSettings={frontSettings}\r\n              />\r\n            </div>\r\n          ) : (\r\n            <React.Fragment>\r\n              <Divider className={classes.divider} />\r\n              <div className=\"u-marginTop60 u-marginBottom60 u-textAlignCenter\">\r\n                <ActionInfoOutline className={classNames(classes.iconInfo, classes.grey500)} />\r\n                <TypographyCustom type=\"207\" align=\"center\" className={classes.grey500}>\r\n                  {tr('order.menu.no_item_in_selected_category')}\r\n                </TypographyCustom>\r\n              </div>\r\n            </React.Fragment>\r\n          )}\r\n        </BlockContainer>\r\n      </Grid>\r\n    </Grid>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { showDietaryInfoDialog, withCatalog } from 'pmt-modules/catalog'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { SuggestionActionType, hideSuggestionDialog } from 'pmt-modules/suggestion'\r\nimport SelectedProductContainerById from 'pmt-modules/orderProduct/components/SelectedProductContainerById'\r\nimport {\r\n  withCategory,\r\n  SelectedCategoryContainer,\r\n  OrderPluginUrlCheckerContainer,\r\n  goBackToStoreLocator,\r\n  redirectToCatalogPage,\r\n  redirectToCart,\r\n  withOrderProperties,\r\n  getAppConfigFrontSettings,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { prepareForFetchingUpsells } from 'pmt-modules/upselling'\r\nimport {\r\n  getViewOptions,\r\n  selectOptionValue,\r\n  unselectOptionValue,\r\n  setReclaimLater,\r\n} from 'pmt-modules/orderProduct'\r\nimport { displayDeleteCartDialog } from 'pmt-modules/dialog'\r\nimport {\r\n  getItemListFromCart,\r\n  addOrderMenuToCart,\r\n  addOrderProductToCart,\r\n  updateOrderProductOnCart,\r\n  getSuspendedDatas,\r\n  setSuspendedDatas,\r\n} from 'pmt-modules/cart'\r\n\r\nimport withWidth, { isWidthUp, isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\nimport { saveAlcoholApproval } from 'pmt-modules/orderPlugin'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\nimport View from './View'\r\nimport { getUpsellingData } from 'pmt-modules/upselling'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass CatalogPage extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.addSuspendedItem()\r\n  }\r\n\r\n  addSuspendedItem = () => {\r\n    const { cartSuspendedDatas, addOrderProductToCart, addOrderMenuToCart, setSuspendedDatas } =\r\n      this.props\r\n\r\n    // we check if we have suspended item to be added to cart\r\n    // we need to be in replace mode because the compose mode is already added\r\n    if (\r\n      !isNil(cartSuspendedDatas) &&\r\n      cartSuspendedDatas.suspendedActionType === SuggestionActionType.REPLACE\r\n    ) {\r\n      if (cartSuspendedDatas.suspendedItem.isProduct) {\r\n        addOrderProductToCart(cartSuspendedDatas.suspendedItem, { skipSuggestion: true })\r\n      } else if (cartSuspendedDatas.suspendedItem.isMenu) {\r\n        addOrderMenuToCart(cartSuspendedDatas.suspendedItem, { skipSuggestion: true })\r\n      }\r\n      setSuspendedDatas(null, null)\r\n    }\r\n  }\r\n\r\n  handleSelectOptionValue = (option, value) => {\r\n    this.props.selectOptionValue(option, value)\r\n  }\r\n\r\n  handleUnselectOptionValue = (option, value) => {\r\n    this.props.unselectOptionValue(option, value)\r\n  }\r\n\r\n  hasRedirectUriDefined = () => this.props.frontSettings && this.props.frontSettings.redirectUri\r\n\r\n  handleRedirectToCart = () => {\r\n    if (!this.props.orderProperties.hasAlreadyDisplayedUpselling) {\r\n      // once the upsells are fetched, if there are some, it will trigger the display of the UpsellingDialog\r\n      this.props.prepareForFetchingUpsells()\r\n    }\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_CATALOG_CART_SUBMIT, {\r\n      items: this.props.itemListFromCart,\r\n      restaurant: this.props.restaurant,\r\n    })\r\n\r\n    this.props.redirectTo(getRoute('ORDER__CART'))\r\n  }\r\n\r\n  handleRedirectToStoreLocator = () => {\r\n    if (this.hasRedirectUriDefined()) {\r\n      window.location.href = this.props.frontSettings.redirectUri\r\n    } else {\r\n      this.props.itemListFromCart.length > 0\r\n        ? this.props.displayDeleteCartDialog()\r\n        : this.props.goBackToStoreLocator()\r\n    }\r\n  }\r\n\r\n  handleOnSubmit = (orderProduct, category) => {\r\n    const {\r\n      viewOptions,\r\n      updateOrderProductOnCart,\r\n      addOrderProductToCart,\r\n      orderProperties,\r\n      restaurant,\r\n      cartSuspendedDatas,\r\n      setSuspendedDatas,\r\n    } = this.props\r\n\r\n    if (orderProduct.isValid) {\r\n      if (!orderProduct.hasSuggestion) {\r\n        EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_ADD_PRODUCT, {\r\n          category,\r\n          dueDate: orderProperties.dueDate,\r\n          item: orderProduct,\r\n          restaurant: restaurant,\r\n        })\r\n      }\r\n\r\n      // product mode\r\n      if (viewOptions.isEditMode) {\r\n        updateOrderProductOnCart(orderProduct)\r\n        this.handleRedirectToPreviousPage()\r\n      } else {\r\n        // if the user submit the product to add\r\n        // we reset suspended item in cart\r\n        if (!isNil(cartSuspendedDatas)) {\r\n          setSuspendedDatas(null, null)\r\n        }\r\n\r\n        addOrderProductToCart(orderProduct, {\r\n          skipSuggestion: viewOptions.skipSuggestion ? viewOptions.skipSuggestion : false,\r\n        })\r\n        this.handleRedirectToCatalogPage()\r\n      }\r\n    }\r\n  }\r\n\r\n  handleRedirectToPreviousPage = () => {\r\n    if (this.props.isFromCart) {\r\n      this.handleRedirectToCartPage()\r\n    } else {\r\n      this.handleRedirectToCatalogPage()\r\n    }\r\n  }\r\n\r\n  handleRedirectToCatalogPage = () => {\r\n    this.props.redirectToCatalogPage(this.props.restaurant.id)\r\n  }\r\n\r\n  handleRedirectToCartPage = () => {\r\n    this.props.redirectToCart()\r\n  }\r\n\r\n  setReclaimLater = isChecked => {\r\n    this.props.setReclaimLater(isChecked)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      isFetchingCatalog,\r\n      isFetchingRestaurant,\r\n      catalog,\r\n      upsellingData,\r\n      orderProperties,\r\n      restaurant,\r\n      location,\r\n      params,\r\n      width,\r\n      viewOptions,\r\n      redirectTo,\r\n      showDietaryInfoDialog,\r\n      orderAppConfig,\r\n      appConfigPreset,\r\n      saveAlcoholApproval,\r\n      frontSettings,\r\n    } = this.props\r\n\r\n    return (\r\n      <SelectedCategoryContainer catalog={catalog}>\r\n        {({ selectedCategory }) => (\r\n          <OrderPage\r\n            headerProps={{\r\n              // hide the header when there is a selected children category, since we display\r\n              // the category header\r\n              displayHeader: isWidthUp('md', width),\r\n              displayRestaurantName: true,\r\n              displayTitle: isWidthUp('md', width),\r\n              displayOrderMode: true,\r\n              displayAddress: true,\r\n              changeButton: isWidthUp('md', width) && this.handleRedirectToStoreLocator,\r\n              displayDueDate: isWidthDown('sm', width),\r\n              displayTableNumber: isWidthDown('sm', width),\r\n              displayUser: true,\r\n            }}\r\n            isWhiteBackground={isWidthDown('sm', width)}\r\n            orderProperties={orderProperties}\r\n            restaurant={restaurant}\r\n            location={location}\r\n          >\r\n            <OrderPluginUrlCheckerContainer\r\n              location={location}\r\n              params={params}\r\n              orderProperties={orderProperties}\r\n              verifyMode\r\n              verifyRestaurantId\r\n              verifyTableNumber\r\n              verifyFrom\r\n            >\r\n              {({ isFetchingAppConfig, appConfig }) => (\r\n                <SelectedProductContainerById\r\n                  catalog={catalog}\r\n                  upsellingData={upsellingData}\r\n                  selectedCategory={selectedCategory}\r\n                  productId={params.productId}\r\n                >\r\n                  {({ orderProduct }) => (\r\n                    <SendEventContainer\r\n                      send={\r\n                        orderProperties &&\r\n                        !isNil(orderProperties.restaurant) &&\r\n                        !isNil(orderProperties.dueDate)\r\n                      }\r\n                      event={EventManager.Events.ON_PAGE_LOADED}\r\n                      eventProps={() => ({\r\n                        restaurant: orderProperties.restaurant,\r\n                        dueDate: orderProperties.dueDate,\r\n                      })}\r\n                    >\r\n                      <View\r\n                        appConfigPreset={appConfigPreset}\r\n                        orderAppConfig={orderAppConfig}\r\n                        isFetchingRestaurant={isFetchingRestaurant}\r\n                        restaurant={restaurant}\r\n                        isFetchingCatalog={isFetchingCatalog}\r\n                        catalog={catalog}\r\n                        orderProduct={orderProduct}\r\n                        orderProperties={orderProperties}\r\n                        isMenuMode={false}\r\n                        isEditMode={!isNil(viewOptions) ? viewOptions.isEditMode : false}\r\n                        route={this.props.route}\r\n                        selectedCategory={selectedCategory}\r\n                        hideSideInformations={this.hideSideInformations}\r\n                        showSideInformations={this.showSideInformations}\r\n                        onRedirectToCart={this.handleRedirectToCart}\r\n                        onSelectOptionValue={this.handleSelectOptionValue}\r\n                        onUnselectOptionValue={this.handleUnselectOptionValue}\r\n                        setReclaimLater={this.setReclaimLater}\r\n                        handleRedirectToStoreLocator={this.handleRedirectToStoreLocator}\r\n                        onSubmit={() => this.handleOnSubmit(orderProduct, selectedCategory)}\r\n                        onClose={() => {\r\n                          redirectTo(getRoute('ORDER__CATEGORY'), {\r\n                            restaurantId: restaurant.id,\r\n                            categoryId: selectedCategory.id,\r\n                          })\r\n                        }}\r\n                        showDietaryInfoDialog={() => showDietaryInfoDialog(orderProduct)}\r\n                        saveAlcoholApproval={saveAlcoholApproval}\r\n                        frontSettings={frontSettings}\r\n                      />\r\n                    </SendEventContainer>\r\n                  )}\r\n                </SelectedProductContainerById>\r\n              )}\r\n            </OrderPluginUrlCheckerContainer>\r\n          </OrderPage>\r\n        )}\r\n      </SelectedCategoryContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const viewOptions = getViewOptions(state)\r\n\r\n  return {\r\n    itemListFromCart: getItemListFromCart(state),\r\n    cartSuspendedDatas: getSuspendedDatas(state),\r\n    viewOptions: getViewOptions(state),\r\n    isFromCart:\r\n      viewOptions &&\r\n      viewOptions.fromRoute &&\r\n      viewOptions.fromRoute.name === getRoute('ORDER__CART').name,\r\n    frontSettings: getAppConfigFrontSettings(state),\r\n    upsellingData: getUpsellingData(state),\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withCatalog,\r\n  withCategory,\r\n  withScrollToTop(),\r\n  connect(mapStateToProps, {\r\n    displayDeleteCartDialog,\r\n    goBackToStoreLocator,\r\n    addOrderMenuToCart,\r\n    addOrderProductToCart,\r\n    updateOrderProductOnCart,\r\n    getSuspendedDatas,\r\n    setSuspendedDatas,\r\n    hideSuggestionDialog,\r\n    redirectTo,\r\n    redirectToCatalogPage,\r\n    redirectToCart,\r\n    selectOptionValue,\r\n    unselectOptionValue,\r\n    prepareForFetchingUpsells,\r\n    showDietaryInfoDialog,\r\n    setReclaimLater,\r\n    saveAlcoholApproval,\r\n  }),\r\n  withWidth()\r\n)(CatalogPage)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getRegisterData = state => state.entities.registration\r\n\r\nexport const getRegisterError = createSelector(\r\n  [ getRegisterData ],\r\n  (authData) => {\r\n    const error = authData.get('error')\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n    return error.toJS()\r\n  }\r\n)\r\n\r\nexport const isFetchingRegister = createSelector(\r\n  [ getRegisterData ],\r\n  (authData) => {\r\n    return authData.get('isFetching')\r\n  }\r\n)\r\n","import { LOCATION_CHANGE } from 'pmt-modules/routing'\r\n\r\nimport Immutable from 'immutable'\r\n\r\nimport { RegisterUserAction, RegisterUserLightAction, RegisterIncognitoUserAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  user: null,\r\n  isFetching: false,\r\n  error: null,\r\n})\r\n\r\nexport const registrationReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case LOCATION_CHANGE:\r\n      return state.merge({\r\n        error: null,\r\n      })\r\n\r\n    case RegisterUserAction.REQUEST:\r\n    case RegisterUserLightAction.REQUEST:\r\n    case RegisterIncognitoUserAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        user: null,\r\n        error: null,\r\n      })\r\n\r\n    case RegisterUserAction.SUCCESS:\r\n    case RegisterUserLightAction.SUCCESS:\r\n    case RegisterIncognitoUserAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        user: action.response,\r\n        error: null,\r\n      })\r\n\r\n    case RegisterUserAction.FAILURE:\r\n    case RegisterUserLightAction.FAILURE:\r\n    case RegisterIncognitoUserAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        user: null,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import classNames from 'classnames'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\n\r\nimport { getOrderSettings } from 'pmt-modules/appConfig'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getGeolocationComputeAddress } from 'pmt-modules/geolocation'\r\nimport { DEFAULT_GEOLOCATION_ID } from 'pmt-modules/geolocation/constants'\r\nimport { getAppConfigFrontSettings, getOrderProperties } from 'pmt-modules/orderPlugin'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport UserType from 'pmt-modules/user/constants/UserType'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport Price from 'pmt-ui/Price'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\nimport Tooltip from 'pmt-ui/Tooltip'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport BlockContainer from '../BlockContainer'\r\nimport { ButtonLink } from '../Button'\r\nimport SlotsContainer from '../Slots'\r\nimport TipWithIcon from '../TipWithIcon'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    height: '100%',\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'none',\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      minHeight: 500,\r\n    },\r\n  },\r\n  blockContainerPrimary: {\r\n    background: theme.palette.primary.main,\r\n    minHeight: '100%',\r\n  },\r\n  deliveryInfoContainer: {\r\n    marginTop: 5,\r\n    lineHeight: '16px',\r\n  },\r\n  iconInfo: {\r\n    float: 'left',\r\n    width: 16,\r\n    height: 16,\r\n  },\r\n  opacity9: {\r\n    opacity: 0.9,\r\n  },\r\n  loadingBlock: {\r\n    background: 'none',\r\n  },\r\n  progress: {\r\n    color: theme.palette.getContrastText(theme.palette.primary.main),\r\n  },\r\n  white: {\r\n    color: `${theme.palette.getContrastText(theme.palette.primary.main)} !important`,\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  italic: {\r\n    fontStyle: 'italic',\r\n  },\r\n  closingWarningContainer: {\r\n    overflow: 'hidden',\r\n    background: theme.pmt.colors.greyBackground,\r\n    padding: theme.spacing(2),\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  tipWithIcon: {\r\n    float: 'left',\r\n    maxWidth: 'none',\r\n    paddingBottom: 0,\r\n    textAlign: 'left',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  tipWithIconText: {\r\n    paddingLeft: theme.spacing(4),\r\n    color: theme.palette.primary.main,\r\n  },\r\n  divider: {\r\n    width: '100%',\r\n    height: 0,\r\n    borderBottom: `1px solid ${theme.pmt.colors.white}`,\r\n  },\r\n  lineHeight20: {\r\n    lineHeight: '20px',\r\n  },\r\n  lineHeight28: {\r\n    lineHeight: '28px',\r\n  },\r\n})\r\n\r\nconst RestaurantInformation = ({\r\n  classes,\r\n  orderProperties,\r\n  restaurant,\r\n  dueDateModificationEnabled,\r\n  modeInformationTooltipEnabled,\r\n  modeInformationText,\r\n  orderAppConfig,\r\n  computeAddress,\r\n  updateUI,\r\n  ui,\r\n}) => (\r\n  <React.Fragment>\r\n    <Hidden smDown>\r\n      <TypographyCustom\r\n        type=\"284\"\r\n        component=\"h3\"\r\n        className={classNames('u-marginBottom20', classes.white)}\r\n      >\r\n        {tr('order.cart.choice')}\r\n      </TypographyCustom>\r\n    </Hidden>\r\n    <React.Fragment>\r\n      {/* ------------------------------------------------------------ */}\r\n      {/* order mode info                                              */}\r\n      {/* ------------------------------------------------------------ */}\r\n\r\n      <TypographyCustom\r\n        type=\"164\"\r\n        component=\"h3\"\r\n        className={classNames(classes.deliveryInfoContainer, classes.white, 'u-overflowHidden')}\r\n      >\r\n        <span className=\"u-floatLeft\">\r\n          {orderProperties.isDelivery\r\n            ? tr('order.global.delivery')\r\n            : orderProperties.isOnSite\r\n            ? tr('order.global.on_site')\r\n            : tr('order.global.take_away')}\r\n          {orderProperties.isOnSite &&\r\n            orderAppConfig.hasTableNumber &&\r\n            tr('order.sideSummary.table', {\r\n              tableNumber: orderProperties.tableNumber,\r\n            })}\r\n        </span>\r\n\r\n        {modeInformationTooltipEnabled && (\r\n          <Hidden mdUp>\r\n            <Tooltip\r\n              id=\"tooltip-bottom\"\r\n              title={modeInformationText}\r\n              placement=\"bottom\"\r\n              // This trick is for mobile only\r\n              // The tooltip does not react when we simply click it (only long click)\r\n              // So we toggle it by clicking it via redux-ui :D\r\n              onClick={() => {\r\n                updateUI({ showTooltip: !ui.showTooltip })\r\n              }}\r\n              open={ui.showTooltip}\r\n            >\r\n              <ActionInfoOutline className={classNames('u-marginLeft5', classes.iconInfo)} />\r\n            </Tooltip>\r\n          </Hidden>\r\n        )}\r\n      </TypographyCustom>\r\n\r\n      {/* ------------------------------------------------------------ */}\r\n      {/* delivery info                                                */}\r\n      {/* ------------------------------------------------------------ */}\r\n\r\n      {orderProperties.isDelivery && (\r\n        <React.Fragment>\r\n          <TypographyCustom\r\n            type=\"124\"\r\n            component=\"p\"\r\n            className={classNames('u-marginTop5', classes.white)}\r\n          >\r\n            {!isNil(orderProperties.deliveryAddress) ? (\r\n              <React.Fragment>{orderProperties.deliveryAddress.formattedAddress}</React.Fragment>\r\n            ) : (\r\n              <React.Fragment>\r\n                {computeAddress ? computeAddress.formattedAddress : ''}\r\n              </React.Fragment>\r\n            )}\r\n          </TypographyCustom>\r\n        </React.Fragment>\r\n      )}\r\n\r\n      {modeInformationText && (\r\n        <Hidden smDown>\r\n          <TypographyCustom\r\n            type=\"124\"\r\n            component=\"p\"\r\n            className={classNames(\r\n              classes.deliveryInfoContainer,\r\n              classes.opacity9,\r\n              classes.white,\r\n              classes.italic\r\n            )}\r\n          >\r\n            <ActionInfoOutline className={classNames('u-marginRight5', classes.iconInfo)} />\r\n            {modeInformationText}\r\n          </TypographyCustom>\r\n        </Hidden>\r\n      )}\r\n    </React.Fragment>\r\n\r\n    {/* ------------------------------------------------------------ */}\r\n    {/* restaurant name                                              */}\r\n    {/* ------------------------------------------------------------ */}\r\n\r\n    <TypographyCustom\r\n      type=\"164\"\r\n      component=\"p\"\r\n      className={classNames('u-marginTop20', classes.white)}\r\n    >\r\n      <b>{restaurant.name}</b>\r\n      <Hidden mdUp>\r\n        <br />\r\n        {` ${restaurant.formattedAddress}`}\r\n      </Hidden>\r\n    </TypographyCustom>\r\n\r\n    {/* ------------------------------------------------------------ */}\r\n    {/* order with table number                                      */}\r\n    {/* ------------------------------------------------------------ */}\r\n\r\n    {(orderProperties.isTakeAway ||\r\n      (orderProperties.isOnSite && !orderProperties.mustChooseTableNumber)) && (\r\n      <Hidden smDown>\r\n        <TypographyCustom\r\n          type=\"144\"\r\n          component=\"p\"\r\n          className={classNames('u-marginTop5', classes.white)}\r\n        >\r\n          {({ className }) => (\r\n            <p className={className}>\r\n              {restaurant.address.street}\r\n              <br />\r\n              {`${restaurant.address.postCode} ${restaurant.address.city}`}\r\n            </p>\r\n          )}\r\n        </TypographyCustom>\r\n      </Hidden>\r\n    )}\r\n\r\n    {/* ------------------------------------------------------------ */}\r\n    {/* slots                                                        */}\r\n    {/* ------------------------------------------------------------ */}\r\n\r\n    {(orderProperties.canOrderUsingSlots ||\r\n      (!orderProperties.mustChooseTableNumber && orderProperties.canOrderUsingAsap)) && (\r\n      <SlotsContainer\r\n        type={SlotsContainer.Type.SMALL}\r\n        showSlots={!orderProperties.isAsap && isNil(orderProperties.slot)}\r\n        orderProperties={orderProperties}\r\n        dueDateClassnameColor={classes.white}\r\n        modificationEnabled={dueDateModificationEnabled && orderProperties.canOrderUsingSlots}\r\n        classes={{ root: 'u-marginTop20 u-overflowHidden' }}\r\n        checkCartDiff\r\n      />\r\n    )}\r\n\r\n    {/* ------------------------------------------------------------ */}\r\n    {/* closing hour                                                 */}\r\n    {/* ------------------------------------------------------------ */}\r\n\r\n    {!orderAppConfig.bypassOpeningHours &&\r\n      get(orderProperties, 'closingHourFormatted.show', false) && (\r\n        <div className={classes.closingWarningContainer}>\r\n          <TipWithIcon\r\n            classes={{ root: classes.tipWithIcon, tipText: classes.tipWithIconText }}\r\n            icon={<ActionInfoOutline />}\r\n            label={tr(`order.sideInformations.closingHour.${orderProperties.mode}`, {\r\n              closingHour: orderProperties.closingHourFormatted.time.hourFormatted,\r\n              closingMinute: orderProperties.closingHourFormatted.time.minuteFormatted,\r\n              lastTimeToOrderHour:\r\n                orderProperties.closingHourFormatted.lastTimeToOrder.hourFormatted,\r\n              lastTimeToOrderMinute:\r\n                orderProperties.closingHourFormatted.lastTimeToOrder.minuteFormatted,\r\n            })}\r\n          />\r\n        </div>\r\n      )}\r\n  </React.Fragment>\r\n)\r\n\r\nconst CartResume = ({ classes, orderProperties }) => (\r\n  <React.Fragment>\r\n    <Hidden smDown>\r\n      <div className={classNames('u-marginTop40 u-marginBottom40', classes.divider)} />\r\n    </Hidden>\r\n\r\n    <Hidden smDown>\r\n      <TypographyCustom\r\n        type=\"284\"\r\n        component=\"h3\"\r\n        className={classNames('u-marginBottom20', classes.white)}\r\n      >\r\n        {tr('order.sideSummary.cart')}\r\n      </TypographyCustom>\r\n\r\n      {/* ------------------------------------------------------------ */}\r\n      {/* total cart and fees                                          */}\r\n      {/* ------------------------------------------------------------ */}\r\n\r\n      <TypographyCustom\r\n        type=\"164\"\r\n        component=\"div\"\r\n        className={classNames(classes.lineHeight20, 'u-marginTop20', classes.white)}\r\n      >\r\n        {tr('order.sideSummary.total')}\r\n        <TypographyCustom type=\"204\" component=\"div\" className=\"u-floatRight\" skipColor>\r\n          <Price value={orderProperties.totalCartPriceAndFeesFormatted} />\r\n        </TypographyCustom>\r\n      </TypographyCustom>\r\n    </Hidden>\r\n  </React.Fragment>\r\n)\r\n\r\nconst UserInformations = ({\r\n  classes,\r\n  orderProperties,\r\n  user,\r\n  redirectTo,\r\n  userProfileModificationEnabled,\r\n}) => (\r\n  <React.Fragment>\r\n    <Hidden smDown>\r\n      <div\r\n        className={classNames(\r\n          classes.hiddenMobile,\r\n          'u-marginTop40 u-marginBottom40',\r\n          classes.divider\r\n        )}\r\n      />\r\n\r\n      <TypographyCustom\r\n        type=\"284\"\r\n        component=\"h3\"\r\n        className={classNames(classes.hiddenMobile, 'u-marginBottom20', classes.white)}\r\n      >\r\n        {tr('order.global.your_informations')}\r\n\r\n        {userProfileModificationEnabled && (\r\n          <ButtonLink\r\n            classes={{ root: classNames(classes.white, classes.lineHeight28, 'u-floatRight') }}\r\n            disabled={isNil(orderProperties.mode)}\r\n            onClick={() => {\r\n              EventManager.dispatch(EventManager.Events.ON_CHANGE_SLOT)\r\n              redirectTo(getRoute('USER_PROFILE'), {\r\n                userId: user.id,\r\n              })\r\n            }}\r\n            label={tr('order.global.modify')}\r\n          />\r\n        )}\r\n      </TypographyCustom>\r\n      <TypographyCustom\r\n        type=\"164\"\r\n        component=\"p\"\r\n        className={classNames(classes.lineHeight20, 'u-marginTop20', classes.white)}\r\n      >\r\n        {[user.firstName, user.lastName].filter(Boolean).join(' ')}\r\n      </TypographyCustom>\r\n      <TypographyCustom\r\n        type=\"164\"\r\n        component=\"p\"\r\n        className={classNames(classes.lineHeight20, 'u-marginTop5', classes.white)}\r\n      >\r\n        {user.email}\r\n      </TypographyCustom>\r\n      <TypographyCustom\r\n        type=\"164\"\r\n        component=\"p\"\r\n        className={classNames(classes.lineHeight20, 'u-marginTop5', classes.white)}\r\n      >\r\n        {user.phone}\r\n      </TypographyCustom>\r\n    </Hidden>\r\n  </React.Fragment>\r\n)\r\n\r\nclass SideSummary extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      classes,\r\n      frontSettings,\r\n      orderProperties,\r\n      restaurant,\r\n      user,\r\n      dueDateModificationEnabled,\r\n      cartResumeEnabled,\r\n      userProfileModificationEnabled,\r\n      modeInformationTooltipEnabled,\r\n      modeInformationText,\r\n      orderAppConfig,\r\n      computeAddress,\r\n      updateUI,\r\n      ui,\r\n      redirectTo,\r\n      userInformationsEnabled,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <BlockContainer className={classes.blockContainerPrimary}>\r\n          {!isNil(orderProperties.mode) && !isNil(restaurant) ? (\r\n            <React.Fragment>\r\n              <RestaurantInformation\r\n                classes={classes}\r\n                orderProperties={orderProperties}\r\n                computeAddress={computeAddress}\r\n                restaurant={restaurant}\r\n                dueDateModificationEnabled={dueDateModificationEnabled}\r\n                modeInformationTooltipEnabled={modeInformationTooltipEnabled}\r\n                modeInformationText={modeInformationText}\r\n                orderAppConfig={orderAppConfig}\r\n                updateUI={updateUI}\r\n                ui={ui}\r\n              />\r\n\r\n              {cartResumeEnabled && frontSettings.display.totalPrices && (\r\n                <CartResume classes={classes} orderProperties={orderProperties} />\r\n              )}\r\n\r\n              {userInformationsEnabled &&\r\n                user &&\r\n                (user.firstName || user.lastName || user.email || user.phone) && (\r\n                  <UserInformations\r\n                    classes={classes}\r\n                    user={user}\r\n                    orderProperties={orderProperties}\r\n                    redirectTo={redirectTo}\r\n                    userProfileModificationEnabled={\r\n                      userProfileModificationEnabled &&\r\n                      user.type !== UserType.LIGHT &&\r\n                      user.type !== UserType.INCOGNITO\r\n                    }\r\n                  />\r\n                )}\r\n            </React.Fragment>\r\n          ) : (\r\n            <LoadingBlock\r\n              show\r\n              classes={{\r\n                loadingBlock: classNames('u-marginTop20', classes.loadingBlock),\r\n                circularProgress: classes.progress,\r\n              }}\r\n            />\r\n          )}\r\n        </BlockContainer>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nSideSummary.defaultProps = {\r\n  dueDateModificationEnabled: true,\r\n  cartResumeEnabled: false,\r\n  modeInformationText: false,\r\n  modeInformationTooltipEnabled: false,\r\n}\r\n\r\nSideSummary.propTypes = {\r\n  dueDateModificationEnabled: PropTypes.bool,\r\n  cartResumeEnabled: PropTypes.bool,\r\n  modeInformationTooltipEnabled: PropTypes.bool,\r\n  modeInformationText: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  orderProperties: getOrderProperties(state),\r\n  orderAppConfig: getOrderSettings(state),\r\n  computeAddress: getGeolocationComputeAddress(state, { geolocationId: DEFAULT_GEOLOCATION_ID }),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nexport default compose(\r\n  connect(mapStateToProps, {\r\n    redirectTo,\r\n  }),\r\n  ui({\r\n    state: {\r\n      showTooltip: false,\r\n    },\r\n  }),\r\n  withStyles(styles)\r\n)(SideSummary)\r\n","import BlockContainer from 'components/BlockContainer'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport isNil from 'lodash/isNil'\r\nimport HardwareKeyboardArrowLeft from 'pmt-ui/svg-icons/hardware/keyboard-arrow-left'\r\nimport React from 'react'\r\n\r\nimport { RoutingContainer } from 'pmt-modules/routing'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    lineHeight: '22px',\r\n    color: theme.palette.primary.main,\r\n    cursor: 'pointer',\r\n\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    margin: 0,\r\n    font: 'inherit',\r\n    textAlign: 'inherit',\r\n    display: 'inline-flex',\r\n    alignItems: 'center',\r\n  },\r\n})\r\n\r\nconst BackToBlock = ({ classes, restaurant, label, routeName }) => {\r\n  return (<RoutingContainer>\r\n    {({ redirectTo, getRoute }) => (\r\n      <BlockContainer className={'u-marginBottom7'}>\r\n          <button\r\n            type=\"button\"\r\n            className={classes.root}\r\n            onClick={() => {\r\n              if (!isNil(restaurant)) {\r\n                redirectTo(getRoute(routeName), {\r\n                  restaurantId: restaurant.id,\r\n                })\r\n              } else {\r\n                redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n              }\r\n            }}\r\n          >\r\n            <TypographyCustom type=\"164\" component=\"span\" skipColor>\r\n              <HardwareKeyboardArrowLeft className=\"u-floatLeft u-marginRight10\" />\r\n              {label}\r\n            </TypographyCustom>\r\n          </button>\r\n        </BlockContainer>\r\n      )}\r\n    </RoutingContainer>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(BackToBlock)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getOrderProperties } from 'pmt-modules/orderPlugin'\r\nimport { forceGetItemListFromCart, getCartData } from 'pmt-modules/cart'\r\n\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Card, { CardContent } from 'pmt-ui/Card'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nimport { CartFooter, CartItemList } from 'app/components/Cart'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport BackToBlock from 'components/BackToBlock'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  '@keyframes fadeInUp': {\r\n    '0%': { opacity: 0, transform: 'translateY(16px)' },\r\n    '100%': { opacity: 1, transform: 'translateY(0)' },\r\n  },\r\n  globalContainer: {\r\n    height: '100%',\r\n    [theme.breakpoints.up('md')]: {\r\n      display: 'flex',\r\n      flexDirection: 'column',\r\n    },\r\n  },\r\n  itemListCard: {\r\n    animation: '$fadeInUp 0.5s ease-out',\r\n    [theme.breakpoints.up('md')]: {\r\n      flexGrow: 1,\r\n    },\r\n  },\r\n  itemListCardContent: {\r\n    padding: theme.pmt.modern.spacing.card,\r\n    '&:last-child': {\r\n      paddingBottom: theme.pmt.modern.spacing.card,\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: theme.spacing(2),\r\n      '&:last-child': {\r\n        paddingBottom: theme.spacing(2),\r\n      },\r\n    },\r\n  },\r\n  title: {\r\n    animation: '$fadeInUp 0.5s ease-out 0.1s both',\r\n    marginBottom: theme.spacing(2.5),\r\n  },\r\n  itemListWrapper: {\r\n    animation: '$fadeInUp 0.5s ease-out 0.2s both',\r\n  },\r\n  footerCard: {\r\n    marginTop: theme.spacing(2),\r\n    animation: '$fadeInUp 0.5s ease-out 0.3s both',\r\n    background: theme.pmt.modern.surface.subtle.background,\r\n    border: '1px solid rgba(0, 0, 0, 0.04)',\r\n  },\r\n  footerCardContent: {\r\n    padding: theme.pmt.modern.spacing.card,\r\n    '&:last-child': {\r\n      paddingBottom: theme.pmt.modern.spacing.card,\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: theme.spacing(2),\r\n      '&:last-child': {\r\n        paddingBottom: theme.spacing(2),\r\n      },\r\n    },\r\n  },\r\n}))\r\n\r\n\r\nconst Cart = ({\r\n  errorPostOrder,\r\n  itemListFromCart,\r\n  cartData,\r\n  orderProperties,\r\n  restaurant,\r\n  route,\r\n  handleCartSubmission,\r\n  shouldDisplayComment,\r\n  shouldEnableSubmitCart,\r\n  orderAppConfig,\r\n  appConfigPreset,\r\n}) => {\r\n  const classes = useStyles()\r\n\r\n  return (\r\n    <div className={classNames('u-relative', classes.globalContainer)}>\r\n\r\n      <Hidden mdDown={appConfigPreset.isPluginOrder}>\r\n        <BackToBlock restaurant={restaurant} routeName={'ORDER__CATALOG'} label={tr('order.sideSummary.back_to_catalog')} />\r\n      </Hidden>\r\n\r\n\r\n      {/* ------------------------------------------------------------ */}\r\n      {/* cart title and item list (BIG version)                       */}\r\n      {/* ------------------------------------------------------------ */}\r\n\r\n      <Card className={classes.itemListCard} elevation={0}>\r\n        <CardContent className={classes.itemListCardContent}>\r\n          {!isNil(restaurant) ? (\r\n            <React.Fragment>\r\n              <TypographyCustom type=\"207\" component=\"h3\" className={classes.title}>\r\n                {appConfigPreset.isDigitalMenu\r\n                  ? tr('order.cart.title_digital_menu')\r\n                  : tr('order.cart.title')}\r\n              </TypographyCustom>\r\n\r\n              <div className={classes.itemListWrapper}>\r\n                {!isNil(itemListFromCart) ? (\r\n                  <CartItemList\r\n                    orderProperties={orderProperties}\r\n                    itemList={itemListFromCart}\r\n                    type={CartItemList.Type.BIG}\r\n                    fromRoute={route}\r\n                    appConfigPreset={appConfigPreset}\r\n                  />\r\n                ) : (\r\n                  <LoadingBlock show />\r\n                )}\r\n              </div>\r\n            </React.Fragment>\r\n          ) : (\r\n            <LoadingBlock show />\r\n          )}\r\n        </CardContent>\r\n      </Card>\r\n\r\n      {/* ------------------------------------------------------------ */}\r\n      {/* CART FOOTER (BIG version)                                    */}\r\n      {/* ------------------------------------------------------------ */}\r\n\r\n      <Card className={classes.footerCard} elevation={0}>\r\n        <CardContent className={classes.footerCardContent}>\r\n          {!isNil(restaurant) && !isNil(itemListFromCart) ? (\r\n            <CartFooter\r\n              errorPostOrder={errorPostOrder}\r\n              orderProperties={orderProperties}\r\n              itemList={itemListFromCart}\r\n              comment={cartData.comment}\r\n              fees={orderProperties.fees}\r\n              minimumPrice={cartData.minimumPrice}\r\n              minimumPriceFormatted={cartData.minimumPriceFormatted}\r\n              restaurant={restaurant}\r\n              totalCartPrice={cartData.totalCartPrice}\r\n              totalCartPriceFormatted={cartData.totalCartPriceFormatted}\r\n              containsAlcohol={cartData.containsAlcohol}\r\n              totalCartPriceAndFeesFormatted={orderProperties.totalCartPriceAndFeesFormatted}\r\n              totalTaxAmount={orderProperties.totalTaxAmount}\r\n              totalTaxAmountFormatted={orderProperties.totalTaxAmountFormatted}\r\n              type={CartFooter.Type.BIG}\r\n              onSubmitAction={handleCartSubmission}\r\n              enabledSubmitCart={shouldEnableSubmitCart}\r\n              shouldDisplayComment={shouldDisplayComment}\r\n              orderAppConfig={orderAppConfig}\r\n            />\r\n          ) : (\r\n            <LoadingBlock show />\r\n          )}\r\n        </CardContent>\r\n      </Card>\r\n    </div>\r\n  )\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  itemListFromCart: forceGetItemListFromCart(state),\r\n  cartData: getCartData(state),\r\n  orderProperties: getOrderProperties(state),\r\n})\r\n\r\nexport default connect(mapStateToProps, {})(Cart)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport SideSummary from '../../components/SideSummary'\r\nimport Cart from './components/Cart'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport BackToBlock from 'components/BackToBlock'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  blockContainerPrimary: {\r\n    background: theme.palette.primary.main,\r\n    color: theme.palette.getContrastText(theme.palette.primary.main),\r\n  },\r\n  gridInverse: {\r\n    flexDirection: 'row-reverse',\r\n  },\r\n}))\r\n\r\nconst View = ({\r\n  appConfigPreset,\r\n  isFetching,\r\n  route,\r\n  handleCartSubmission,\r\n  orderProperties,\r\n  orderAppConfig,\r\n  restaurant,\r\n  width,\r\n  errorPostOrder,\r\n}) => {\r\n  const classes = useStyles()\r\n\r\n  let modeInformationText = false\r\n  let modeInformationTooltipEnabled = false\r\n  switch (true) {\r\n    case orderProperties.isDelivery:\r\n      modeInformationText = (\r\n        <React.Fragment>{tr('order.sideSummary.deliveryModeInformation')}</React.Fragment>\r\n      )\r\n      modeInformationTooltipEnabled = true\r\n      break\r\n    case orderProperties.isOnSite:\r\n      modeInformationText = orderAppConfig.hasTableNumber && (\r\n        <React.Fragment>{tr('order.sideSummary.onSiteModeInformation')}</React.Fragment>\r\n      )\r\n      modeInformationTooltipEnabled = orderAppConfig.hasTableNumber\r\n      break\r\n    default:\r\n      modeInformationText = false\r\n      break\r\n  }\r\n\r\n  const shouldDisplayComment = orderAppConfig.comments.global.enabled\r\n  const shouldDisplaySummary = appConfigPreset.isPluginOrder\r\n  const shouldEnableSubmitCart = appConfigPreset.isPluginOrder\r\n\r\n  return (\r\n\r\n        <div className={classes.root}>\r\n          <Grid container spacing={2} className={classes.gridInverse}>\r\n            <Grid item xs={12} md={shouldDisplaySummary && 4}\r\n                  lg={shouldDisplaySummary && 3}>\r\n              <Hidden mdUp={appConfigPreset.isPluginOrder}>\r\n                <BackToBlock restaurant={restaurant} routeName={'ORDER__CATALOG'} label={tr('order.sideSummary.back_to_catalog')} />\r\n              </Hidden>\r\n              {shouldDisplaySummary && (\r\n                <SideSummary\r\n                  classes={{\r\n                    root: classNames({ 'u-block': isWidthDown('sm', width) })\r\n                  }}\r\n                  orderProperties={orderProperties}\r\n                  restaurant={restaurant}\r\n                  modeInformationText={modeInformationText}\r\n                  modeInformationTooltipEnabled={modeInformationTooltipEnabled}\r\n                />\r\n              )}\r\n            </Grid>\r\n            <Grid item xs={12} md={shouldDisplaySummary && 8}\r\n                  lg={shouldDisplaySummary && 9}>\r\n              <LoadingBlockWrapper show={isFetching} />\r\n                <Cart\r\n                  appConfigPreset={appConfigPreset}\r\n                  orderAppConfig={orderAppConfig}\r\n                  orderProperties={orderProperties}\r\n                  restaurant={restaurant}\r\n                  handleCartSubmission={handleCartSubmission}\r\n                  route={route}\r\n                  shouldDisplayComment={shouldDisplayComment}\r\n                  shouldEnableSubmitCart={shouldEnableSubmitCart}\r\n                  errorPostOrder={errorPostOrder}\r\n                />\r\n            </Grid>\r\n          </Grid>\r\n        </div>\r\n  )\r\n}\r\n\r\nexport default withWidth()(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { haveAuthCredentials } from 'pmt-modules/auth'\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { withCatalog } from 'pmt-modules/catalog'\r\nimport { registerAsIncognito } from 'pmt-modules/registration'\r\nimport {\r\n  redirectTo,\r\n  getRoute,\r\n} from 'pmt-modules/routing'\r\nimport { displayCart, getItemListFromCart } from 'pmt-modules/cart'\r\nimport {\r\n  getAppConfigFrontSettings,\r\n  OrderPluginUrlCheckerContainer,\r\n  getOrderData,\r\n  withOrderProperties,\r\n  resetSelectedCategory,\r\n  selectSlot,\r\n  setParentCategories,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { setPaymentMethod } from 'pmt-modules/orderFront'\r\nimport {\r\n  getOpeningHours,\r\n  PaymentMethodsAllowed,\r\n} from 'pmt-modules/orderSettings'\r\nimport {\r\n  isFetchingOrderPost,\r\n  postOrder,\r\n  resetPostOrder,\r\n  getErrorOrderPost,\r\n} from 'pmt-modules/orderPost'\r\nimport { isFetchingUpsells } from 'pmt-modules/upselling'\r\n\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\nimport View from './View'\r\nimport { isFetchingRegister } from 'pmt-modules/registration'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass CartPage extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (isNil(props.orderProperties.restaurantId)) {\r\n      props.redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n    }\r\n\r\n    // reset parent categories and selected categories once we reach to cart\r\n    this.props.setParentCategories([])\r\n    this.props.resetSelectedCategory()\r\n\r\n    // dispatch a displayCart action in order to trigger an order preview\r\n    this.props.displayCart()\r\n\r\n    // init (or reset if already selected) payment method\r\n    // basically we want to be sure not to have any previously payment method set from previous order\r\n    // this is mandatory, don't you dare ever touch it!\r\n    props.setPaymentMethod(null)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    // we just refreshed to cart page, catalog has not been loaded yet, so we wait for it to be\r\n    // fully loaded and then dispatch a display cart in order to throw an order preview\r\n    if (isNil(this.props.catalog) && !isNil(nextProps.catalog)) {\r\n      nextProps.displayCart()\r\n    }\r\n\r\n    // display error only once\r\n    if (nextProps.errorPostOrder) {\r\n      this.previousErrorPostOrder = nextProps.errorPostOrder\r\n      nextProps.resetPostOrder()\r\n    }\r\n  }\r\n\r\n  handleCartSubmission = () => {\r\n    // forget about previous order before submitting a new order\r\n    this.props.resetPostOrder()\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_CART_SUBMIT, {\r\n      items: this.props.itemListFromCart,\r\n      restaurant: this.props.restaurant,\r\n    })\r\n\r\n    // next step requires being logged in, so we redirect to login page if not already logged in\r\n    if (!this.props.haveAuthCredentials) {\r\n\r\n      // fromOrderWorkflow signals to the login page (and to the authSuccess middleware) that\r\n      // this login is a mandatory step in the order workflow, so it should auto-post or redirect\r\n      // to payment after successful authentication.\r\n      // Without this flag (e.g. header login button), no auto-post will happen.\r\n      let redirectParams = { fromOrderWorkflow: true }\r\n\r\n      // we redirect to the login page (without redirectTo param), and the login page will redirect us (after login)\r\n      // cf. LoginPage.redirectCorrectlyAuthenticatedUser\r\n      this.props.redirectTo(getRoute('LOGIN'), null, redirectParams)\r\n      return\r\n    }\r\n\r\n    // here, haveAuthCredentials=true\r\n    if (!this.props.frontSettings.display.paymentPage) {\r\n      /**\r\n       * when skipping payment page, we set payment method as IRL\r\n       * and redirect to delivery address on delivery mode\r\n       * otherwise, we post order directly\r\n       */\r\n      this.props.setPaymentMethod(PaymentMethodsAllowed.IRL) // this doesn't change the orderData we use for postOrder, so the API receive paymentMethod=null\r\n      if (this.props.orderProperties.isDelivery) {\r\n        this.props.redirectTo(getRoute('ORDER__DELIVERY_ADDRESS'))\r\n      } else {\r\n        this.props.postOrder(this.props.orderData)\r\n      }\r\n    } else {\r\n      // here display.paymentPage=true\r\n      // let's go to payment page (or first to delivery page if relevant, and then to payment page)\r\n      if (this.props.orderProperties.isDelivery) {\r\n        this.props.redirectTo(getRoute('ORDER__DELIVERY_ADDRESS'))\r\n      } else {\r\n        this.props.redirectTo(getRoute('ORDER__PAYMENT'))\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      appConfigPreset,\r\n      isFetchingOrderPost,\r\n      isFetchingRegister,\r\n      isFetchingUpsells,\r\n      itemListFromCart,\r\n      restaurant,\r\n      isFetchingRestaurant,\r\n      location,\r\n      orderProperties,\r\n      orderAppConfig,\r\n      appConfig,\r\n      width,\r\n    } = this.props\r\n\r\n    return (\r\n      <OrderPage\r\n        headerProps={{\r\n          displayTitle: isWidthUp('md', width),\r\n          displayUser: true,\r\n        }}\r\n        orderProperties={orderProperties}\r\n        restaurant={restaurant}\r\n        location={location}\r\n      >\r\n        <OrderPluginUrlCheckerContainer location={location} verifyMode>\r\n          <SendEventContainer\r\n            send={orderProperties && !isNil(orderProperties.restaurant)}\r\n            event={EventManager.Events.ON_PAGE_LOADED}\r\n            eventProps={() => ({\r\n              items: itemListFromCart,\r\n              restaurant: orderProperties.restaurant,\r\n              dueDate: orderProperties.dueDate,\r\n            })}\r\n          >\r\n            <View\r\n              appConfigPreset={appConfigPreset}\r\n              isFetching={\r\n                isFetchingOrderPost ||\r\n                isFetchingRegister ||\r\n                isFetchingRestaurant ||\r\n                isFetchingUpsells\r\n              }\r\n              orderProperties={orderProperties}\r\n              restaurant={restaurant}\r\n              handleCartSubmission={this.handleCartSubmission}\r\n              orderAppConfig={orderAppConfig}\r\n              appConfig={appConfig}\r\n              route={this.props.route}\r\n              errorPostOrder={this.previousErrorPostOrder}\r\n            />\r\n          </SendEventContainer>\r\n        </OrderPluginUrlCheckerContainer>\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  haveAuthCredentials: haveAuthCredentials(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  itemListFromCart: getItemListFromCart(state),\r\n  openingHours: getOpeningHours(state),\r\n  isFetchingOrderPost: isFetchingOrderPost(state),\r\n  isFetchingRegister: isFetchingRegister(state),\r\n  isFetchingUpsells: isFetchingUpsells(state),\r\n  orderData: getOrderData(state),\r\n  errorPostOrder: getErrorOrderPost(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withCatalog,\r\n  withScrollToTop(),\r\n  connect(mapStateToProps, {\r\n    displayCart,\r\n    redirectTo,\r\n    resetSelectedCategory,\r\n    resetPostOrder,\r\n    postOrder,\r\n    setPaymentMethod,\r\n    selectSlot,\r\n    setParentCategories,\r\n    registerAsIncognito,\r\n  }),\r\n  withWidth(),\r\n)(CartPage)\r\n","import isNil from 'lodash/isNil'\r\n\r\nexport const getFormattedAddressFromAddressComponents = address => {\r\n  if (isNil(address)){\r\n    return null\r\n  }\r\n\r\n  if (isNil(address.street)) {\r\n    return ''\r\n  }\r\n\r\n  let addressFormatted = `${address.street}, ${address.postCode} ${address.city}`\r\n  if (!isNil(address.country)) {\r\n    addressFormatted += `, ${address.country}`\r\n  }\r\n\r\n  return addressFormatted\r\n}\r\n\r\nexport const withFormattedAddress = address => \r\n({\r\n  ...address,\r\n  formattedAddress: getFormattedAddressFromAddressComponents(address)\r\n})\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet ImageEdit = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\" />\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n  </SvgIcon>\r\n)\r\nImageEdit = pure(ImageEdit)\r\nImageEdit.displayName = 'ImageEdit'\r\nImageEdit.muiName = 'SvgIcon'\r\n\r\nexport default ImageEdit\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Delete = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"/>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n  </SvgIcon>\r\n)\r\n\r\nDelete = pure(Delete)\r\nDelete.displayName = 'Delete'\r\nDelete.pmtName = 'SvgIcon'\r\n\r\nexport default Delete\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport clsx from 'clsx'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport TextField from 'pmt-ui/TextField'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  formContainer: {},\r\n  inputStyles: {\r\n    width: '100%',\r\n  },\r\n  inputStreet: {},\r\n  inputPostCode: {},\r\n  inputCity: {},\r\n  inputCountry: {},\r\n  inputComplement: {},\r\n  inputName: {},\r\n})\r\n\r\nclass EditUserAddressFormView extends React.Component {\r\n  render() {\r\n    const { classes, formData, formErrors, onChange, labels, placeholders } = this.props\r\n\r\n    return (\r\n      <div className={classes.formContainer}>\r\n        <TextField\r\n          id=\"street\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputStreet)}\r\n          label={\r\n            !isUndefined(labels.street) ? labels.street : tr('global.form.user.address.street')\r\n          }\r\n          placeholder={\r\n            !isUndefined(placeholders.street)\r\n              ? placeholders.street\r\n              : tr('global.form.user.address.street')\r\n          }\r\n          value={formData.street || ''}\r\n          error={formData.street !== null && !isEmpty(formErrors.street.message)}\r\n          onChange={event => onChange({ ...formData, street: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"postCode\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputPostCode)}\r\n          label={\r\n            !isUndefined(labels.postCode)\r\n              ? labels.postCode\r\n              : tr('global.form.user.address.postCode')\r\n          }\r\n          placeholder={\r\n            !isUndefined(placeholders.postCode)\r\n              ? placeholders.postCode\r\n              : tr('global.form.user.address.postCode')\r\n          }\r\n          value={formData.postCode || ''}\r\n          error={formData.postCode !== null && !isEmpty(formErrors.postCode.message)}\r\n          onChange={event => onChange({ ...formData, postCode: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"city\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputCity)}\r\n          label={!isUndefined(labels.city) ? labels.city : tr('global.form.user.address.city')}\r\n          placeholder={\r\n            !isUndefined(placeholders.city)\r\n              ? placeholders.city\r\n              : tr('global.form.user.address.city')\r\n          }\r\n          value={formData.city || ''}\r\n          error={formData.city !== null && !isEmpty(formErrors.city.message)}\r\n          onChange={event => onChange({ ...formData, city: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"country\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputCountry)}\r\n          label={\r\n            !isUndefined(labels.country) ? labels.country : tr('global.form.user.address.country')\r\n          }\r\n          placeholder={\r\n            !isUndefined(placeholders.country)\r\n              ? placeholders.country\r\n              : tr('global.form.user.address.country')\r\n          }\r\n          value={formData.country || ''}\r\n          error={formData.country !== null && !isEmpty(formErrors.country.message)}\r\n          onChange={event => onChange({ ...formData, country: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"complement\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputComplement)}\r\n          label={\r\n            !isUndefined(labels.complement)\r\n              ? labels.complement\r\n              : tr('global.form.user.address.complement')\r\n          }\r\n          placeholder={\r\n            !isUndefined(placeholders.complement)\r\n              ? placeholders.complement\r\n              : tr('global.form.user.address.complement')\r\n          }\r\n          value={formData.complement || ''}\r\n          error={formData.complement !== null && !isEmpty(formErrors.complement.message)}\r\n          onChange={event => onChange({ ...formData, complement: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"name\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputName)}\r\n          label={!isUndefined(labels.name) ? labels.name : tr('global.form.user.address.name')}\r\n          placeholder={\r\n            !isUndefined(placeholders.name)\r\n              ? placeholders.name\r\n              : tr('global.form.user.address.name')\r\n          }\r\n          value={formData.name || ''}\r\n          error={formData.name !== null && !isEmpty(formErrors.name.message)}\r\n          onChange={event => onChange({ ...formData, name: event.target.value })}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nEditUserAddressFormView.defaultProps = {\r\n  labels: {},\r\n  placeholders: {},\r\n}\r\n\r\nexport default withStyles(styles)(EditUserAddressFormView)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport compose from 'recompose/compose'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { FormType, resetForm, withForm } from 'pmt-modules/form'\r\nimport GeolocationContainer from 'pmt-modules/geolocation/container/GeolocationContainer'\r\nimport EditUserAddressFormView from 'pmt-modules/userAddress/forms/edit/EditUserAddressFormView'\r\nimport { isAddressTypeValid, editUserAddress, deleteUserAddress } from 'pmt-modules/userAddress'\r\nimport { getAppConfigFrontSettings } from 'pmt-modules/orderPlugin'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { getAddressElementsFromGooglePlace } from 'pmt-utils/google'\r\nimport { withFormattedAddress } from 'pmt-utils/address'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\n\r\nimport SearchAddress from '../SearchAddress'\r\nimport Button from '../Button'\r\n\r\nclass GeolocationAddress extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.state = {\r\n      isGeolocating: false,\r\n      addressLocationNotGood: false,\r\n    }\r\n\r\n    props.resetGeolocation()\r\n\r\n    props.setGeolocationComputeAddress(\r\n      withFormattedAddress({\r\n        street: props.formData.street,\r\n        postCode: props.formData.postCode,\r\n        city: props.formData.city,\r\n        country: props.formData.country,\r\n      })\r\n    )\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (!isEqual(nextProps.formData, this.props.formData)) {\r\n      nextProps.setGeolocationComputeAddress(\r\n        withFormattedAddress({\r\n          street: nextProps.formData.street,\r\n          postCode: nextProps.formData.postCode,\r\n          city: nextProps.formData.city,\r\n          country: nextProps.formData.country,\r\n        })\r\n      )\r\n    }\r\n  }\r\n\r\n  handleReverseGeocodingSuccess = ({ addressElements, types }) => {\r\n    if (this.handleAddressEdition({ addressElements, types })) {\r\n      this.props.setGeolocationComputeAddress(addressElements)\r\n      this.props.setGeolocationComputeAddressExtra(types)\r\n      this.props.setGeolocationAddress(null)\r\n    }\r\n\r\n    // reverse geocoding is done, we reset its state\r\n    this.setState({ ...this.state, isGeolocating: false })\r\n  }\r\n\r\n  handleSelectLocation = autocomplete => {\r\n    const place = autocomplete.getPlace()\r\n\r\n    if (isUndefined(place.geometry)) {\r\n      return\r\n    }\r\n    const lat = place.geometry.location.lat()\r\n    const lng = place.geometry.location.lng()\r\n\r\n    this.props.setGeolocationCoordinates(lat, lng)\r\n    const addressElements = getAddressElementsFromGooglePlace(place)\r\n    this.props.setGeolocationComputeAddress(addressElements)\r\n    this.props.setGeolocationComputeAddressExtra(place.types)\r\n    this.props.setGeolocationAddress(null)\r\n\r\n    this.handleAddressEdition({ addressElements, types: place.types })\r\n  }\r\n\r\n  handleAddressEdition = ({ addressElements, types }) => {\r\n    if (isAddressTypeValid(types)) {\r\n      if (!isNil(addressElements)) {\r\n        const { street, postCode, city, country } = addressElements\r\n\r\n        this.setState({ ...this.state, addressLocationNotGood: false })\r\n\r\n        this.props.onChange({\r\n          ...this.props.formData,\r\n          street,\r\n          postCode,\r\n          city,\r\n          country,\r\n        })\r\n\r\n        return true\r\n      } else {\r\n        this.resetAddressFormDatas()\r\n        this.setState({ ...this.state, addressLocationNotGood: true })\r\n        return false\r\n      }\r\n    }\r\n\r\n    this.setState({ ...this.state, addressLocationNotGood: true })\r\n    return false\r\n  }\r\n\r\n  resetAddressFormDatas = () => {\r\n    this.props.onChange({\r\n      ...this.props.formData,\r\n      street: null,\r\n      postCode: null,\r\n      city: null,\r\n      country: null,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    // we only want the address to be reverse geocoded when the user click on \"geolocate me\".\r\n    // Otherwise GoogleMapsReverseGeocoding will change the adress to the current location on mount.\r\n    const { addressLocationNotGood, isGeolocating } = this.state\r\n\r\n    const {\r\n      geolocationId,\r\n      geolocateUser,\r\n      geolocationAddress,\r\n      geolocationComputeAddress,\r\n      geolocationError,\r\n      geolocationLatitude,\r\n      geolocationLongitude,\r\n      geolocationOrigin,\r\n      isFetchingGeolocation,\r\n      resetGeolocation,\r\n      setGeolocationAddress,\r\n      setGeolocationComputeAddress,\r\n      setGeolocationComputeAddressExtra,\r\n      countryRestriction,\r\n    } = this.props\r\n\r\n    if (!geolocationComputeAddress) {\r\n      // TODO: mini lag, add loading or do not care ? Maybe only on dev mode.\r\n    }\r\n\r\n    return (\r\n      <SearchAddress\r\n        label={tr('order.addresses.form.edit.labels.address')}\r\n        placeholder={tr('order.addresses.form.edit.placeholders.address')}\r\n        error={addressLocationNotGood}\r\n        errorText={tr('order.addresses.form.error_message.address')}\r\n        geolocationAddress={geolocationAddress}\r\n        geolocationComputeAddress={geolocationComputeAddress}\r\n        geolocationError={geolocationError}\r\n        geolocationId={geolocationId}\r\n        geolocationLatitude={geolocationLatitude}\r\n        geolocationLongitude={geolocationLongitude}\r\n        geolocationOrigin={geolocationOrigin}\r\n        onChangeCallback={event => {\r\n          setGeolocationAddress(event.target.value)\r\n          if (!isNil(geolocationComputeAddress)) {\r\n            setGeolocationComputeAddress(null)\r\n            setGeolocationComputeAddressExtra(null)\r\n          }\r\n\r\n          if (this.state.addressLocationNotGood) {\r\n            this.setState({ ...this.state, addressLocationNotGood: false })\r\n          }\r\n        }}\r\n        reverseGeocoding={isGeolocating}\r\n        reverseGeocodingSuccessCallback={this.handleReverseGeocodingSuccess}\r\n        resetAddressCallback={() => {\r\n          this.resetAddressFormDatas()\r\n          resetGeolocation()\r\n        }}\r\n        selectLocationCallback={this.handleSelectLocation}\r\n        countryRestriction={countryRestriction}\r\n        onGeolocate={() => {\r\n          this.setState({ ...this.state, isGeolocating: true })\r\n          EventManager.dispatch(EventManager.Events.ON_DELIVERY_ADDRESS_EDIT_GEOLOCATION)\r\n          geolocateUser()\r\n        }}\r\n        isGeolocating={isFetchingGeolocation}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nclass AddressEditForm extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.state = {\r\n      editAddressLocationNotPrecise: false,\r\n    }\r\n\r\n    //props.resetForm(FormType.EDIT_USER_ADDRESS, this.props.defaultData)\r\n  }\r\n\r\n  handleSubmitEditUserAddress = (addressId, addressData) => {\r\n    const { editUserAddress, user } = this.props\r\n\r\n    editUserAddress(user.id, addressId, addressData)\r\n  }\r\n\r\n  handleDeleteUserAddress = addressId => {\r\n    const { deleteUserAddress, user } = this.props\r\n\r\n    deleteUserAddress(user.id, addressId)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      address,\r\n      formData,\r\n      formErrors,\r\n      onChange,\r\n      formIsValid,\r\n      classes,\r\n      frontSettings,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className={classes.formContainer}>\r\n        <form\r\n          onSubmit={e => {\r\n            e.preventDefault()\r\n            EventManager.dispatch(EventManager.Events.ON_DELIVERY_ADDRESS_EDIT_ADDRESS)\r\n            this.handleSubmitEditUserAddress(address.id, formData)\r\n          }}\r\n        >\r\n          <GeolocationContainer geolocationId={String(address.id)}>\r\n            {geoLocationProps => (\r\n              <GeolocationAddress\r\n                {...geoLocationProps}\r\n                classes={classes}\r\n                formData={formData}\r\n                onChange={onChange}\r\n                countryRestriction={frontSettings.geoApiCountryRestriction}\r\n              />\r\n            )}\r\n          </GeolocationContainer>\r\n\r\n          <EditUserAddressFormView\r\n            formData={formData}\r\n            formErrors={formErrors}\r\n            onChange={onChange}\r\n            labels={{\r\n              complement: tr('order.addresses.form.edit.labels.complement'),\r\n              name: tr('order.addresses.form.edit.labels.name'),\r\n            }}\r\n            placeholders={{\r\n              complement: tr('order.addresses.form.edit.placeholders.complement'),\r\n              name: tr('order.addresses.form.edit.placeholders.name'),\r\n            }}\r\n            classes={{\r\n              inputStyles: classes.editFormInputStyles,\r\n              inputStreet: classes.hidden,\r\n              inputPostCode: classes.hidden,\r\n              inputCity: classes.hidden,\r\n              inputCountry: classes.hidden,\r\n            }}\r\n          />\r\n\r\n          <Grid container spacing={0}>\r\n            <Grid item xs={12}>\r\n              <Button\r\n                type=\"submit\"\r\n                size=\"large\"\r\n                label={tr('order.addresses.form.edit.submit_button')}\r\n                disabled={!formIsValid}\r\n                classes={{ root: 'u-marginTop20 u-sizeFullWidth' }}\r\n              />\r\n            </Grid>\r\n            <Grid item xs={12}>\r\n              <Button\r\n                variant=\"outlined\"\r\n                size=\"large\"\r\n                label={tr('order.addresses.form.edit.delete_button')}\r\n                classes={{ root: 'u-marginTop10 u-sizeFullWidth' }}\r\n                onClick={() => {\r\n                  EventManager.dispatch(EventManager.Events.ON_DELIVERY_ADDRESS_DELETE_ADDRESS)\r\n                  this.handleDeleteUserAddress(address.id)\r\n                }}\r\n              />\r\n            </Grid>\r\n          </Grid>\r\n        </form>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nexport default compose(\r\n  withForm(FormType.EDIT_USER_ADDRESS),\r\n  connect(mapStateToProps, {\r\n    editUserAddress,\r\n    deleteUserAddress,\r\n    resetForm,\r\n  })\r\n)(AddressEditForm)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport PropTypes from 'prop-types'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport { isFetchingUserAddressEdit } from 'pmt-modules/userAddress'\r\nimport { getFormattedAddressFromAddressComponents } from 'pmt-utils/address'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport ImageEdit from 'pmt-ui/svg-icons/image/edit'\r\nimport Delete from 'pmt-ui/svg-icons/action/delete'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Card, { CardContent } from 'pmt-ui/Card'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { Radio } from 'pmt-ui/Radio'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport EditorModeEdit from 'pmt-ui/svg-icons/editor/mode-edit'\r\n\r\nimport AddressEditForm from './AddressEditForm'\r\nimport { ButtonLink } from '../Button'\r\n\r\nconst styles = theme => ({\r\n  card: {\r\n    padding: `${theme.spacing(0.5)}px 0`,\r\n    minWidth: 240,\r\n  },\r\n  cardDisabled: {\r\n    background: theme.pmt.colors.grey100,\r\n    border: `1px solid ${theme.pmt.colors.grey300}`,\r\n    boxShadow: 'none',\r\n  },\r\n  cardSelected: {\r\n    border: `1px solid ${theme.palette.primary.main}`,\r\n  },\r\n  cardContentLabel: {\r\n    paddingTop: '0 !important',\r\n    paddingBottom: '0 !important',\r\n  },\r\n  cardContentClassicClosed: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    padding: `${theme.spacing(1.5)}px 0 !important`,\r\n  },\r\n  cardContentClassicOpened: {\r\n    overflow: 'hidden',\r\n    padding: `0 !important`,\r\n  },\r\n  cardContentAccount: {\r\n    overflow: 'hidden',\r\n    paddingBottom: `${theme.spacing(2)}px !important`,\r\n  },\r\n  onClickZone: {\r\n    float: 'left',\r\n    overflow: 'hidden',\r\n    width: '100%',\r\n    cursor: 'pointer',\r\n  },\r\n  onClickZoneClosed: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    width: 'calc(100% - 48px)',\r\n  },\r\n  actionContainer: {\r\n    float: 'left',\r\n    width: 48,\r\n    height: 48,\r\n    textAlign: 'center',\r\n    cursor: 'pointer',\r\n  },\r\n  textContainerClassic: {\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    float: 'left',\r\n    width: 'calc(100% - 48px * 2)',\r\n    textOverflow: 'ellipsis',\r\n    '-webkit-line-clamp': 1,\r\n    '-webkit-box-orient': 'vertical',\r\n  },\r\n  label: {\r\n    marginBottom: theme.spacing(1),\r\n    color: theme.pmt.colors.grey91,\r\n    textTransform: 'uppercase',\r\n  },\r\n  address: {\r\n    overflow: 'hidden',\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  complement: {\r\n    marginBottom: theme.spacing(0.25),\r\n    fontStyle: 'italic',\r\n  },\r\n  textContainerNew: {\r\n    height: 48,\r\n    lineHeight: '48px',\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    textOverflow: 'ellipsis',\r\n    '-webkit-line-clamp': 1,\r\n    '-webkit-box-orient': 'vertical',\r\n  },\r\n  closeButton: {\r\n    float: 'right',\r\n    marginRight: theme.spacing(2),\r\n  },\r\n  editIcon: {\r\n    color: theme.palette.primary.main,\r\n    marginTop: 12,\r\n  },\r\n  editFormInputStyles: {\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  formContainer: {\r\n    padding: theme.spacing(2),\r\n  },\r\n  actionsContainer: {\r\n    float: 'left',\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  geolocButton: {\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  hidden: {\r\n    display: 'none',\r\n  },\r\n  buttonRoot: {\r\n    width: '100%',\r\n  },\r\n  buttonLabel: {\r\n    fontSize: 14,\r\n  },\r\n})\r\n\r\nconst Type = {\r\n  CLASSIC: 'CLASSIC',\r\n  LABEL: 'LABEL',\r\n  ACCOUNT: 'ACCOUNT',\r\n}\r\n\r\nclass AddressElement extends React.Component {\r\n  componentWillReceiveProps(nextProps) {\r\n    if (!isEqual(nextProps.address, this.props.address)) {\r\n      this.props.handleEditActionSuccess()\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      className,\r\n      type,\r\n      label,\r\n      labelEdit,\r\n      address,\r\n      selected,\r\n      disabled,\r\n      onSelect,\r\n      handleEditAction,\r\n      handleDeleteAction,\r\n      showEditAddressForm,\r\n      isFetchingUserAddressEdit,\r\n      user,\r\n      onClose,\r\n    } = this.props\r\n\r\n    return (\r\n      <Card\r\n        className={classNames(\r\n          classes.card,\r\n          {\r\n            [classes.cardDisabled]: disabled,\r\n            [classes.cardSelected]: selected,\r\n          },\r\n          className\r\n        )}\r\n      >\r\n        <CardContent\r\n          className={classNames({\r\n            [classes.cardContentLabel]: type === Address.Type.LABEL,\r\n            [classes.cardContentClassicOpened]:\r\n              type === Address.Type.CLASSIC && showEditAddressForm,\r\n            [classes.cardContentClassicClosed]:\r\n              type === Address.Type.CLASSIC && !showEditAddressForm,\r\n            [classes.cardContentAccount]: type === Address.Type.ACCOUNT,\r\n          })}\r\n        >\r\n          {isFetchingUserAddressEdit && showEditAddressForm ? (\r\n            <LoadingBlock show />\r\n          ) : (\r\n            <React.Fragment>\r\n              <div\r\n                className={classNames(classes.onClickZone, {\r\n                  [classes.onClickZoneClosed]: !showEditAddressForm,\r\n                })}\r\n              >\r\n                {type === Address.Type.CLASSIC && (\r\n                  <Radio\r\n                    color=\"primary\"\r\n                    name=\"select_address\"\r\n                    className={'u-floatLeft'}\r\n                    checked={selected}\r\n                    disabled={disabled}\r\n                    value=\"select_address\"\r\n                    onClick={onSelect}\r\n                  />\r\n                )}\r\n                <React.Fragment>\r\n                  {type === Address.Type.CLASSIC || type === Address.Type.ACCOUNT ? (\r\n                    <React.Fragment>\r\n                      {!showEditAddressForm ? (\r\n                        <div\r\n                          className={classNames({\r\n                            [classes.textContainerClassic]: type === Address.Type.CLASSIC,\r\n                          })}\r\n                          onClick={onSelect}\r\n                        >\r\n                          <TypographyCustom component=\"p\" type={'107'} className={classes.label}>\r\n                            {label}\r\n                          </TypographyCustom>\r\n                          <TypographyCustom component=\"p\" type={'164'} className={classes.address}>\r\n                            {getFormattedAddressFromAddressComponents(address)}\r\n                          </TypographyCustom>\r\n                        </div>\r\n                      ) : (\r\n                        <React.Fragment>\r\n                          <TypographyCustom\r\n                            component=\"p\"\r\n                            type=\"164\"\r\n                            className={classNames(classes.textContainerNew, 'u-floatLeft')}\r\n                          >\r\n                            {labelEdit}\r\n                          </TypographyCustom>\r\n                          <ButtonLink\r\n                            label={tr('order.global.close')}\r\n                            classes={{\r\n                              root: classNames(classes.textContainerNew, classes.closeButton),\r\n                            }}\r\n                            onClick={onClose}\r\n                          />\r\n                          <AddressEditForm\r\n                            user={user}\r\n                            address={address}\r\n                            defaultData={address}\r\n                            classes={classes}\r\n                          />\r\n                        </React.Fragment>\r\n                      )}\r\n                    </React.Fragment>\r\n                  ) : (\r\n                    <TypographyCustom\r\n                      component=\"p\"\r\n                      type=\"164\"\r\n                      className={classNames(classes.textContainerNew, 'u-floatLeft')}\r\n                      onClick={onSelect}\r\n                    >\r\n                      {showEditAddressForm ? labelEdit : label}\r\n                    </TypographyCustom>\r\n                  )}\r\n                </React.Fragment>\r\n              </div>\r\n\r\n              {type === Address.Type.CLASSIC && !showEditAddressForm && (\r\n                <div className={classes.actionContainer} onClick={handleEditAction}>\r\n                  <EditorModeEdit className={classes.editIcon} />\r\n                </div>\r\n              )}\r\n\r\n              {type === Address.Type.ACCOUNT && !showEditAddressForm && (\r\n                <Grid container alignItems=\"center\" className={classes.actionsContainer}>\r\n                  <Grid item xs={6}>\r\n                    <ButtonLink\r\n                      classes={{ root: classes.buttonRoot }}\r\n                      label={tr('order.global.modify')}\r\n                      icon={<ImageEdit />}\r\n                      onClick={handleEditAction}\r\n                    />\r\n                  </Grid>\r\n                  <Grid item xs={6}>\r\n                    <ButtonLink\r\n                      classes={{ root: classes.buttonRoot }}\r\n                      label={tr('order.global.delete')}\r\n                      icon={<Delete />}\r\n                      onClick={handleDeleteAction}\r\n                    />\r\n                  </Grid>\r\n                </Grid>\r\n              )}\r\n            </React.Fragment>\r\n          )}\r\n        </CardContent>\r\n      </Card>\r\n    )\r\n  }\r\n}\r\n\r\nAddressElement.defaultProps = {\r\n  selected: false,\r\n  disabled: false,\r\n  onSelect: () => {},\r\n  handleEditAction: () => {},\r\n  handleDeleteAction: () => {},\r\n  type: Type.CLASSIC,\r\n  label: '',\r\n  labelEdit: '',\r\n}\r\n\r\nAddressElement.propTypes = {\r\n  label: PropTypes.string.isRequired,\r\n  address: PropTypes.object,\r\n  selected: PropTypes.bool,\r\n  disabled: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  isFetchingUserAddressEdit: isFetchingUserAddressEdit(state),\r\n})\r\n\r\nconst Address = compose(connect(mapStateToProps, {}), withStyles(styles))(AddressElement)\r\n\r\nAddress.Type = Type\r\n\r\nexport default Address\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getAppConfigFrontSettings } from 'pmt-modules/orderPlugin'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport { existsOnArray } from 'pmt-utils/array'\r\n\r\nimport Button from 'app/components/Button'\r\nimport Address from 'app/components/Address'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nclass RegisteredAddresses extends React.Component {\r\n  componentWillUpdate(nextProps) {\r\n    const { selectedDeliveryAddress, userAddressListOutOfRange } = nextProps\r\n\r\n    // handle when the address could have been edited and is no longer on the range.\r\n    if (selectedDeliveryAddress) {\r\n      const existsOnOutOfRange = existsOnArray(\r\n        userAddressListOutOfRange,\r\n        address => address.id === selectedDeliveryAddress.id\r\n      )\r\n\r\n      if (existsOnOutOfRange) {\r\n        this.props.onResetDeliveryAddress()\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      // --\r\n      selectedDeliveryAddress,\r\n      onSelectDeliveryAddress,\r\n      onResetDeliveryAddress,\r\n      // --\r\n      frontSettings,\r\n      isFetchingUserAddressList,\r\n      onSubmit,\r\n      userAddressListInRange,\r\n      userAddressListOutOfRange,\r\n      user,\r\n      onEditAddress,\r\n      onCloseEditAddress,\r\n      addressToEdit,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className={classes.registered_addresses}>\r\n        <TypographyCustom type=\"164\" component=\"h2\" className={classes.subtitle}>\r\n          {tr('order.addresses.registered_addresses')}\r\n        </TypographyCustom>\r\n        <div className={classes.subContainerWidth}>\r\n          {isFetchingUserAddressList || isNil(userAddressListInRange) ? (\r\n            <LoadingBlock show />\r\n          ) : isEmpty(userAddressListInRange) ? (\r\n            <TypographyCustom component=\"p\" type=\"144\">\r\n              {tr('order.addresses.in_range_missing')}\r\n            </TypographyCustom>\r\n          ) : (\r\n            <React.Fragment>\r\n              {userAddressListInRange.map((address, index) => (\r\n                <Address\r\n                  key={index}\r\n                  label={address.name}\r\n                  labelEdit={tr('order.addresses.form.edit.title')}\r\n                  defaultData={address}\r\n                  address={address}\r\n                  user={user}\r\n                  className={'u-marginBottom10'}\r\n                  selected={\r\n                    !isNil(selectedDeliveryAddress) && selectedDeliveryAddress.id === address.id\r\n                  }\r\n                  showEditAddressForm={addressToEdit && addressToEdit.id === address.id}\r\n                  onSelect={() => {\r\n                    onSelectDeliveryAddress(address)\r\n                  }}\r\n                  onClose={onCloseEditAddress}\r\n                  handleEditAction={() => {\r\n                    onEditAddress(address)\r\n                  }}\r\n                  handleEditActionSuccess={onCloseEditAddress}\r\n                />\r\n              ))}\r\n              <Hidden xsDown>\r\n                <div className=\"u-overflowHidden\">\r\n                  <Button\r\n                    size=\"large\"\r\n                    disabled={isNil(selectedDeliveryAddress)}\r\n                    classes={{ root: classNames(classes.bigButton, 'u-floatRight u-marginTop15') }}\r\n                    label={tr(\r\n                      frontSettings.display.paymentPage\r\n                        ? 'order.global.validate'\r\n                        : 'order.global.validate_and_order'\r\n                    )}\r\n                    onClick={onSubmit}\r\n                  />\r\n                </div>\r\n              </Hidden>\r\n            </React.Fragment>\r\n          )}\r\n        </div>\r\n        {(isFetchingUserAddressList ||\r\n          (!isFetchingUserAddressList && !isEmpty(userAddressListOutOfRange))) && (\r\n          <div className={classNames(classes.subContainerWidth, 'u-marginTop40')}>\r\n            <TypographyCustom\r\n              type=\"124\"\r\n              component=\"p\"\r\n              className={classNames(classes.subtitle, classes.italic)}\r\n            >\r\n              {tr('order.addresses.out_of_zone')}\r\n            </TypographyCustom>\r\n            {isFetchingUserAddressList || isNil(userAddressListOutOfRange) ? (\r\n              <LoadingBlock show />\r\n            ) : (\r\n              <React.Fragment>\r\n                {userAddressListOutOfRange.map((address, index) => (\r\n                  <Address\r\n                    key={index}\r\n                    disabled\r\n                    label={address.name}\r\n                    address={address}\r\n                    className={'u-marginBottom10'}\r\n                    user={user}\r\n                    showEditAddressForm={addressToEdit && addressToEdit.id === address.id}\r\n                    onSelect={onResetDeliveryAddress}\r\n                    onClose={onCloseEditAddress}\r\n                    handleEditAction={() => {\r\n                      onEditAddress(address)\r\n                    }}\r\n                    handleEditActionSuccess={onCloseEditAddress}\r\n                  />\r\n                ))}\r\n              </React.Fragment>\r\n            )}\r\n          </div>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nexport default connect(mapStateToProps)(RegisteredAddresses)\r\n","import React from 'react'\r\nimport clsx from 'clsx'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport TextField from 'pmt-ui/TextField'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  formContainer: {},\r\n  inputStyles: {\r\n    width: '100%',\r\n  },\r\n  inputStreet: {},\r\n  inputPostCode: {},\r\n  inputCity: {},\r\n  inputCountry: {},\r\n  inputComplement: {},\r\n  inputName: {},\r\n})\r\n\r\nclass AddUserAddressFormView extends React.Component {\r\n  render() {\r\n    const { classes, formData, formErrors, onChange, labels, placeholders } = this.props\r\n\r\n    return (\r\n      <div className={classes.formContainer}>\r\n        <TextField\r\n          id=\"street\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputStreet)}\r\n          label={!isUndefined(labels.street) ? labels.street : 'Rue'}\r\n          placeholder={!isUndefined(placeholders.street) ? placeholders.street : 'Rue'}\r\n          value={formData.street || ''}\r\n          error={formData.street !== null && !isEmpty(formErrors.street.message)}\r\n          onChange={event => onChange({ ...formData, street: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"postCode\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputPostCode)}\r\n          label={!isUndefined(labels.postCode) ? labels.postCode : 'Code postal'}\r\n          placeholder={!isUndefined(placeholders.postCode) ? placeholders.postCode : 'Code postal'}\r\n          value={formData.postCode || ''}\r\n          error={formData.postCode !== null && !isEmpty(formErrors.postCode.message)}\r\n          onChange={event => onChange({ ...formData, postCode: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"city\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputCity)}\r\n          label={!isUndefined(labels.city) ? labels.city : 'Ville'}\r\n          placeholder={!isUndefined(placeholders.city) ? placeholders.city : 'Ville'}\r\n          value={formData.city || ''}\r\n          error={formData.city !== null && !isEmpty(formErrors.city.message)}\r\n          onChange={event => onChange({ ...formData, city: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"country\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputCountry)}\r\n          label={!isUndefined(labels.country) ? labels.country : 'Pays'}\r\n          placeholder={!isUndefined(placeholders.country) ? placeholders.country : 'Pays'}\r\n          value={formData.country || ''}\r\n          error={formData.country !== null && !isEmpty(formErrors.country.message)}\r\n          onChange={event => onChange({ ...formData, country: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"complement\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputComplement)}\r\n          label={!isUndefined(labels.complement) ? labels.complement : 'Complément'}\r\n          placeholder={\r\n            !isUndefined(placeholders.complement) ? placeholders.complement : 'Complément'\r\n          }\r\n          value={formData.complement || ''}\r\n          error={formData.complement !== null && !isEmpty(formErrors.complement.message)}\r\n          onChange={event => onChange({ ...formData, complement: event.target.value })}\r\n        />\r\n        <TextField\r\n          id=\"name\"\r\n          type=\"text\"\r\n          className={clsx(classes.inputStyles, classes.inputName)}\r\n          label={!isUndefined(labels.name) ? labels.name : 'Nom'}\r\n          placeholder={!isUndefined(placeholders.name) ? placeholders.name : 'Nom'}\r\n          value={formData.name || ''}\r\n          error={formData.name !== null && !isEmpty(formErrors.name.message)}\r\n          onChange={event => onChange({ ...formData, name: event.target.value })}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nAddUserAddressFormView.defaultProps = {\r\n  labels: {},\r\n  placeholders: {},\r\n}\r\n\r\nexport default withStyles(styles)(AddUserAddressFormView)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { withForm, FormType } from 'pmt-modules/form'\r\nimport GeolocationContainer from 'pmt-modules/geolocation/container/GeolocationContainer'\r\nimport {\r\n  getGeolocationComputeAddress,\r\n  getGeolocationComputeAddressExtra,\r\n} from 'pmt-modules/geolocation/selectors'\r\nimport {\r\n  postUserAddress,\r\n  getCreatedUserAddress,\r\n  isFetchingUserAddressPost,\r\n  isAddressTypeValid,\r\n} from 'pmt-modules/userAddress'\r\nimport AddUserAddressFormView from 'pmt-modules/userAddress/forms/add/AddUserAddressFormView'\r\nimport {\r\n  getAppConfigFrontSettings,\r\n  getOrderProperties,\r\n  resetDeliveryAddress,\r\n} from 'pmt-modules/orderPlugin'\r\n\r\nimport { getAddressElementsFromGooglePlace } from 'pmt-utils/google'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport Address from '../../../components/Address'\r\nimport SearchAddress from '../../../components/SearchAddress'\r\nimport Button from '../../../components/Button'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nclass NewAddress extends React.Component {\r\n  state = {\r\n    shouldReverseGeocoding: false,\r\n  }\r\n\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (!isNil(props.geolocationComputeAddress)) {\r\n      this.handleAddressEdition({\r\n        addressElements: props.geolocationComputeAddress,\r\n        types: props.geolocationComputeAddressExtra,\r\n      })\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (\r\n      nextProps.createdUserAddress !== this.props.createdUserAddress &&\r\n      !isNil(nextProps.createdUserAddress)\r\n    ) {\r\n      // a new address has been successfully created, hide the form\r\n      this.props.updateUI({\r\n        showAddressForm: false,\r\n      })\r\n    }\r\n  }\r\n\r\n  resetAddressFormDatas = () => {\r\n    this.props.onChange({\r\n      ...this.props.formData,\r\n      street: null,\r\n      postCode: null,\r\n      city: null,\r\n      country: null,\r\n    })\r\n  }\r\n\r\n  onSelect = () => {\r\n    if (!this.props.ui.showAddressForm) {\r\n      this.props.updateUI({\r\n        showAddressForm: true,\r\n        edit: {\r\n          showAddressForm: false,\r\n        },\r\n      })\r\n      this.props.resetDeliveryAddress()\r\n    }\r\n  }\r\n\r\n  handleAddressEdition = ({ addressElements, types }) => {\r\n    if (isAddressTypeValid(types)) {\r\n      if (!isNil(addressElements)) {\r\n        const addressComponents = addressElements\r\n\r\n        if (isNil(addressComponents)) {\r\n          this.resetAddressFormDatas()\r\n          this.props.updateUI({\r\n            addressLocationNotGood: true,\r\n          })\r\n          return false\r\n        }\r\n\r\n        const { street, postCode, city, country } = addressComponents\r\n\r\n        this.props.updateUI({\r\n          addressLocationNotGood: false,\r\n        })\r\n        this.props.onChange({\r\n          ...this.props.formData,\r\n          street,\r\n          postCode,\r\n          city,\r\n          country,\r\n        })\r\n\r\n        return true\r\n      }\r\n      return false\r\n    }\r\n\r\n    this.resetAddressFormDatas()\r\n    this.props.updateUI({\r\n      addressLocationNotGood: true,\r\n    })\r\n    return false\r\n  }\r\n\r\n  handleSubmitcreatedUserAddress = () => {\r\n    const { restaurant } = this.props\r\n    const { city, complement, country, name, postCode, street } = this.props.formData\r\n\r\n    this.props.postUserAddress(\r\n      this.props.user.id,\r\n      {\r\n        city,\r\n        complement,\r\n        country,\r\n        name,\r\n        postCode,\r\n        street,\r\n      },\r\n      {\r\n        restaurant,\r\n      }\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      frontSettings,\r\n      orderProperties,\r\n      isFetchingUserAddressPost,\r\n      ui,\r\n      updateUI,\r\n      classes,\r\n      formData,\r\n      formErrors,\r\n      formIsValid,\r\n      onChange,\r\n    } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <TypographyCustom type=\"164\" component=\"h2\" className={classes.subtitle}>\r\n          {tr('order.addresses.new_address')}\r\n        </TypographyCustom>\r\n        <Address\r\n          type={Address.Type.LABEL}\r\n          label={tr('order.addresses.form.add.title')}\r\n          selected={ui.showAddressForm}\r\n          className={classNames(classes.subContainerWidth, 'u-marginBottom10')}\r\n          onSelect={this.onSelect}\r\n        />\r\n        {ui.showAddressForm && (\r\n          <form\r\n            onSubmit={e => {\r\n              e.preventDefault()\r\n              this.handleSubmitcreatedUserAddress()\r\n            }}\r\n          >\r\n            <div className={classes.subContainerWidth}>\r\n              <GeolocationContainer>\r\n                {({\r\n                  geolocationId,\r\n                  geolocateUser,\r\n                  geolocationAddress,\r\n                  geolocationComputeAddress,\r\n                  geolocationError,\r\n                  geolocationLatitude,\r\n                  geolocationLongitude,\r\n                  geolocationOrigin,\r\n                  isFetchingGeolocation,\r\n                  resetGeolocation,\r\n                  setGeolocationAddress,\r\n                  setGeolocationComputeAddress,\r\n                  setGeolocationComputeAddressExtra,\r\n                  setGeolocationCoordinates,\r\n                }) => {\r\n                  const handleReverseGeocodingSuccess = ({ addressElements, types }) => {\r\n                    if (this.handleAddressEdition({ addressElements, types })) {\r\n                      setGeolocationComputeAddress(addressElements)\r\n                      setGeolocationComputeAddressExtra(types)\r\n                      setGeolocationAddress(null)\r\n                    }\r\n                    // reverse geocoding is done, we reset its state\r\n                    this.setState({ shouldReverseGeocoding: false })\r\n                  }\r\n\r\n                  const handleSelectLocation = autocomplete => {\r\n                    const place = autocomplete.getPlace()\r\n\r\n                    if (isUndefined(place.geometry)) {\r\n                      return\r\n                    }\r\n                    const lat = place.geometry.location.lat()\r\n                    const lng = place.geometry.location.lng()\r\n\r\n                    const addressElements = getAddressElementsFromGooglePlace(place)\r\n\r\n                    setGeolocationCoordinates(lat, lng)\r\n                    setGeolocationComputeAddress(addressElements)\r\n                    setGeolocationComputeAddressExtra(place.types)\r\n                    setGeolocationAddress(null)\r\n\r\n                    this.handleAddressEdition({ addressElements, types: place.types })\r\n                  }\r\n\r\n                  return (\r\n                    <React.Fragment>\r\n                      <SearchAddress\r\n                        classes={{ geoSuggestBlock: 'u-marginTop20' }}\r\n                        label={tr('order.addresses.form.add.labels.address')}\r\n                        error={ui.addressLocationNotGood}\r\n                        errorText={tr('order.addresses.form.error_message.address')}\r\n                        geolocationAddress={geolocationAddress}\r\n                        geolocationComputeAddress={geolocationComputeAddress}\r\n                        geolocationError={geolocationError}\r\n                        geolocationId={geolocationId}\r\n                        geolocationLatitude={geolocationLatitude}\r\n                        geolocationLongitude={geolocationLongitude}\r\n                        geolocationOrigin={geolocationOrigin}\r\n                        onChangeCallback={event => {\r\n                          setGeolocationAddress(event.target.value)\r\n                          if (!isNil(geolocationComputeAddress)) {\r\n                            setGeolocationComputeAddress(null)\r\n                            setGeolocationComputeAddressExtra(null)\r\n                          }\r\n\r\n                          if (ui.addressLocationNotGood) {\r\n                            updateUI({ addressLocationNotGood: false })\r\n                          }\r\n                        }}\r\n                        reverseGeocoding={this.state.shouldReverseGeocoding}\r\n                        reverseGeocodingSuccessCallback={handleReverseGeocodingSuccess}\r\n                        resetAddressCallback={() => {\r\n                          this.resetAddressFormDatas()\r\n                          resetGeolocation()\r\n                        }}\r\n                        selectLocationCallback={handleSelectLocation}\r\n                        countryRestriction={frontSettings.geoApiCountryRestriction}\r\n                        onGeolocate={() => {\r\n                          this.setState({ shouldReverseGeocoding: true })\r\n                          EventManager.dispatch(\r\n                            EventManager.Events.ON_DELIVERY_ADDRESS_ADD_GEOLOCATION\r\n                          )\r\n                          geolocateUser()\r\n                        }}\r\n                        isGeolocating={isFetchingGeolocation}\r\n                      />\r\n                    </React.Fragment>\r\n                  )\r\n                }}\r\n              </GeolocationContainer>\r\n              <AddUserAddressFormView\r\n                formData={formData}\r\n                formErrors={formErrors}\r\n                onChange={onChange}\r\n                labels={{\r\n                  complement: tr('order.addresses.form.add.labels.complement'),\r\n                  name: tr('order.addresses.form.add.labels.name'),\r\n                }}\r\n                placeholders={{\r\n                  complement: tr('order.addresses.form.add.placeholders.complement'),\r\n                  name: tr('order.addresses.form.add.placeholders.name'),\r\n                }}\r\n                classes={{\r\n                  formContainer: classes.subContainerWidth,\r\n                  inputStyles: classes.textField,\r\n                  inputStreet: classes.hidden,\r\n                  inputPostCode: classes.hidden,\r\n                  inputCity: classes.hidden,\r\n                  inputCountry: classes.hidden,\r\n                }}\r\n              />\r\n              <TypographyCustom\r\n                type=\"124\"\r\n                component=\"p\"\r\n                className={classNames('u-marginTop5', classes.subtitle)}\r\n              >\r\n                {tr('order.addresses.form.add.save_address_message')}\r\n              </TypographyCustom>\r\n              {get(orderProperties, 'deliveryAddress.errorMessage', null) && (\r\n                <TypographyCustom\r\n                  type=\"144\"\r\n                  component=\"p\"\r\n                  className={classNames('u-marginTop5', classes.errorMessage)}\r\n                >\r\n                  {tr('order.addresses.form.add.error.address_far')}\r\n                </TypographyCustom>\r\n              )}\r\n              <div className=\"u-overflowHidden\">\r\n                <Button\r\n                  type=\"submit\"\r\n                  size=\"large\"\r\n                  disabled={!formIsValid || isFetchingUserAddressPost}\r\n                  classes={{ root: classNames(classes.bigButton, 'u-floatRight u-marginTop15') }}\r\n                  label={tr(\r\n                    frontSettings.display.paymentPage\r\n                      ? 'order.addresses.form.add.submit_button'\r\n                      : 'order.addresses.form.add.submit_button_and_order'\r\n                  )}\r\n                />\r\n              </div>\r\n            </div>\r\n          </form>\r\n        )}\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  isFetchingUserAddressPost: isFetchingUserAddressPost(state),\r\n  createdUserAddress: getCreatedUserAddress(state),\r\n  orderProperties: getOrderProperties(state),\r\n  geolocationComputeAddress: getGeolocationComputeAddress(state, props),\r\n  geolocationComputeAddressExtra: getGeolocationComputeAddressExtra(state, props),\r\n})\r\n\r\nexport default compose(\r\n  withForm(FormType.ADD_USER_ADDRESS),\r\n  connect(mapStateToProps, {\r\n    resetDeliveryAddress,\r\n    postUserAddress,\r\n  })\r\n)(NewAddress)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport {\r\n  getAppConfigFrontSettings,\r\n  getOrderData,\r\n  setDeliveryAddress,\r\n  resetDeliveryAddress,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { setPaymentMethod } from 'pmt-modules/orderFront'\r\nimport { isFetchingOrderPost, postOrder } from 'pmt-modules/orderPost'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/orderSettings'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\nimport { UserAddressListContainer, isFetchingUserAddressPost } from 'pmt-modules/userAddress'\r\n\r\nimport LoadingBlock, { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Hidden from 'pmt-ui/Hidden'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport BlockContainer from '../../../components/BlockContainer'\r\nimport Button from '../../../components/Button'\r\n\r\nimport RegisteredAddresses from './RegisteredAddresses'\r\nimport NewAddress from './NewAddress'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  subtitle: {\r\n    color: theme.pmt.colors.grey500,\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  geolocButton: {\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  registered_addresses: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginBottom: 20,\r\n    },\r\n  },\r\n  subContainerWidth: {\r\n    maxWidth: 450,\r\n  },\r\n  stickyButton: {\r\n    position: 'fixed',\r\n    bottom: theme.spacing(1.5),\r\n    left: theme.spacing(2),\r\n    right: theme.spacing(2),\r\n    width: `calc(100% - ${theme.spacing(4)}px)`,\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    boxShadow: theme.pmt.modern.shadows.lg,\r\n    transition: theme.pmt.modern.transitions.smooth,\r\n    marginTop: theme.spacing(1),\r\n    zIndex: theme.zIndex.stickyButton,\r\n    '&.Mui-disabled': {\r\n      backgroundColor: theme.pmt.colors.grey300,\r\n      color: theme.pmt.colors.grey600,\r\n    },\r\n  },\r\n  submitButton: {\r\n    float: 'right',\r\n    marginTop: 5,\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n    },\r\n  },\r\n  bigButton: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n    },\r\n  },\r\n  errorMessage: {\r\n    color: theme.pmt.status.error,\r\n  },\r\n  textField: {\r\n    marginTop: theme.spacing(3),\r\n  },\r\n  checkbox_label: {\r\n    float: 'left',\r\n    height: 48,\r\n    lineHeight: '48px',\r\n  },\r\n  italic: {\r\n    fontStyle: 'italic',\r\n  },\r\n  hidden: {\r\n    display: 'none',\r\n  },\r\n})\r\n\r\n\r\nclass DeliveryBlock extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.state = {\r\n      addressToEdit: null,\r\n    }\r\n  }\r\n\r\n  handleOnEditAddress = addressToEdit => {\r\n    this.setState({\r\n      addressToEdit,\r\n    })\r\n\r\n    this.props.updateUI({\r\n      showAddressForm: false,\r\n    })\r\n  }\r\n\r\n  handleCloseEditAddress = () => {\r\n    this.setState({\r\n      addressToEdit: null,\r\n    })\r\n  }\r\n\r\n  onValidateSelectedAddress = () => {\r\n    const { frontSettings, orderData, postOrder, redirectTo, setPaymentMethod } = this.props\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_DELIVERY_ADDRESS_CONFIRM)\r\n\r\n    /**\r\n     * when skipping payment page, we set payment method as IRL\r\n     * and redirect to delivery address on delivery mode\r\n     * otherwise, we post order directly\r\n     */\r\n    if (frontSettings.display.paymentPage) {\r\n      redirectTo(getRoute('ORDER__PAYMENT'))\r\n    } else {\r\n      setPaymentMethod(PaymentMethodsAllowed.IRL) // this doesn't change the orderData we use for postOrder, so the API receive paymentMethod=null\r\n      postOrder(orderData)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      frontSettings,\r\n      isFetchingOrderPost,\r\n      isFetchingUserAddressPost,\r\n      orderProperties,\r\n      restaurant,\r\n      user,\r\n      isFetchingUser,\r\n      ui,\r\n      updateUI,\r\n      setDeliveryAddress,\r\n      resetDeliveryAddress,\r\n    } = this.props\r\n\r\n    return (\r\n      <BlockContainer\r\n        classes={{ root: classNames('u-overflowHidden u-relative') }}\r\n        style={{flexGrow: 1}}\r\n      >\r\n        {isFetchingUser || isNil(user) ? (\r\n          <LoadingBlock show />\r\n        ) : (\r\n          <React.Fragment>\r\n            <LoadingBlockWrapper show={isFetchingOrderPost || isFetchingUserAddressPost} />\r\n\r\n            <TypographyCustom type=\"284\" component=\"h2\" className=\"u-marginBottom20\">\r\n              {tr('order.addresses.title', { name: user.firstName })}\r\n            </TypographyCustom>\r\n            <UserAddressListContainer\r\n              userId={user.id}\r\n              origin={!isNil(restaurant) ? restaurant.geoPt : null}\r\n              range={\r\n                !isNil(get(restaurant, 'orderSettings.deliverySettings', null))\r\n                  ? restaurant.orderSettings.deliverySettings.maxRangeInMeters / 1000\r\n                  : null\r\n              }\r\n            >\r\n              {({\r\n                isFetchingUserAddressList,\r\n                userAddressListInRange,\r\n                userAddressListOutOfRange,\r\n              }) => {\r\n                if (\r\n                  !isNil(userAddressListInRange) &&\r\n                  userAddressListInRange.length === 0 &&\r\n                  !ui.showAddressForm\r\n                ) {\r\n                  updateUI({\r\n                    showAddressForm: true,\r\n                  })\r\n                }\r\n\r\n                return (\r\n                  <Grid spacing={2} container>\r\n                    {((!isNil(userAddressListInRange) && userAddressListInRange.length > 0) ||\r\n                      (!isNil(userAddressListOutOfRange) && userAddressListOutOfRange.length > 0) ||\r\n                      isFetchingUserAddressList) && (\r\n                      <Grid item xs={12} sm={6}>\r\n                        <RegisteredAddresses\r\n                          selectedDeliveryAddress={orderProperties.deliveryAddress}\r\n                          isFetchingUserAddressList={isFetchingUserAddressList}\r\n                          userAddressListInRange={userAddressListInRange}\r\n                          userAddressListOutOfRange={userAddressListOutOfRange}\r\n                          user={user}\r\n                          classes={classes}\r\n                          onEditAddress={this.handleOnEditAddress}\r\n                          onCloseEditAddress={this.handleCloseEditAddress}\r\n                          addressToEdit={this.state.addressToEdit}\r\n                          onSubmit={this.onValidateSelectedAddress}\r\n                          onResetDeliveryAddress={resetDeliveryAddress}\r\n                          onSelectDeliveryAddress={address => {\r\n                            setDeliveryAddress(\r\n                              address.id,\r\n                              address.name,\r\n                              address.complement,\r\n                              address.street,\r\n                              address.postCode,\r\n                              address.city,\r\n                              address.country\r\n                            )\r\n                          }}\r\n                        />\r\n                      </Grid>\r\n                    )}\r\n                    <Grid\r\n                      item\r\n                      xs={12}\r\n                      sm={\r\n                        (!isNil(userAddressListInRange) && userAddressListInRange.length > 0) ||\r\n                        (!isNil(userAddressListOutOfRange) &&\r\n                          userAddressListOutOfRange.length > 0) ||\r\n                        isFetchingUserAddressList\r\n                          ? 6\r\n                          : 12\r\n                      }\r\n                    >\r\n                      <NewAddress\r\n                        orderProperties={orderProperties}\r\n                        restaurant={restaurant}\r\n                        ui={ui}\r\n                        updateUI={updateUI}\r\n                        user={user}\r\n                        classes={classes}\r\n                      />\r\n\r\n                      {/*\r\n                        This button is here for the mobile rendering version\r\n                        We want this button to appear on mobile to be at the bottom of everything, and if the new form is not opened\r\n                      */}\r\n                      {!ui.showAddressForm && (\r\n                        <Hidden smUp xsDown={isNil(orderProperties.deliveryAddress)}>\r\n                          <Button\r\n                            size=\"large\"\r\n                            classes={{ root: classes.stickyButton }}\r\n                            label={tr(\r\n                              frontSettings.display.paymentPage\r\n                                ? 'order.global.validate'\r\n                                : 'order.global.validate_and_order'\r\n                            )}\r\n                            onClick={this.onValidateSelectedAddress}\r\n                          />\r\n                        </Hidden>\r\n                      )}\r\n                    </Grid>\r\n                  </Grid>\r\n                )\r\n              }}\r\n            </UserAddressListContainer>\r\n          </React.Fragment>\r\n        )}\r\n      </BlockContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  isFetchingUserAddressPost: isFetchingUserAddressPost(state),\r\n  isFetchingOrderPost: isFetchingOrderPost(state),\r\n  orderData: getOrderData(state),\r\n})\r\n\r\nexport default compose(\r\n  connect(mapStateToProps, {\r\n    setDeliveryAddress,\r\n    resetDeliveryAddress,\r\n    redirectTo,\r\n    postOrder,\r\n    setPaymentMethod,\r\n  }),\r\n  ui({\r\n    state: {\r\n      showAddressForm: false,\r\n      addressLocationNotGood: false,\r\n    },\r\n  }),\r\n  withStyles(styles)\r\n)(DeliveryBlock)\r\n","import React from 'react'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Hidden from 'pmt-ui/Hidden'\r\n\r\nimport SideSummary from '../../components/SideSummary'\r\n\r\nimport DeliveryBlock from './components/DeliveryBlock'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport BackToBlock from 'components/BackToBlock'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  gridInverse: {\r\n    flexDirection: 'row-reverse',\r\n  },\r\n  backToCartAndDeliveryBlock:{\r\n    display: 'flex', // allow deliveryBlock to take all available height\r\n    flexDirection: 'column',\r\n    flexGrow: 1, // takes all available height\r\n  }\r\n})\r\n\r\nconst View = ({ classes, orderProperties, restaurant, isFetchingUser, user }) => (\r\n  <div className={classes.root}>\r\n    <Grid container spacing={2} className={classes.gridInverse}>\r\n      <Hidden smDown><Grid item xs={12} md={4} lg={3}>\r\n        <SideSummary\r\n          orderProperties={orderProperties}\r\n          restaurant={restaurant}\r\n          cartResumeEnabled\r\n          userInformationsEnabled\r\n        />\r\n      </Grid>\r\n      </Hidden>\r\n      <Grid item xs={12} md={8} lg={9} className={classes.backToCartAndDeliveryBlock}>\r\n\r\n        <BackToBlock restaurant={restaurant} routeName={'ORDER__CART'} label={tr('order.global.back_to_cart')} />\r\n\r\n        <DeliveryBlock\r\n          orderProperties={orderProperties}\r\n          restaurant={restaurant}\r\n          isFetchingUser={isFetchingUser}\r\n          user={user}\r\n        />\r\n      </Grid>\r\n    </Grid>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { withUserMe } from 'pmt-modules/userMe'\r\nimport { getItemListFromCart } from 'pmt-modules/cart'\r\nimport { OrderPluginUrlCheckerContainer, withOrderProperties, showExpiredSessionDialog } from 'pmt-modules/orderPlugin'\r\n\r\nimport GoogleMapsApiContainer from 'pmt-modules/google/components/GoogleMapsApiContainer'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\n\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\nimport View from './View'\r\nimport { haveAuthCredentials } from 'pmt-modules/auth'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass DeliveryAddressPage extends React.Component {\r\n\r\n  state = {\r\n    expiredSessionDialogShown: false,\r\n  }\r\n\r\n  // we need to have the restaurant to check order data\r\n  // if we don't, it will return null every time\r\n  componentDidUpdate(prevProps) {\r\n    if (this.state.expiredSessionDialogShown) {\r\n      return // Stop re-triggering the dialog\r\n    }\r\n\r\n    // SECURITY\r\n    // user is not connected\r\n    const noCredentials = !this.props.haveAuthCredentials\r\n\r\n    if (\r\n      noCredentials\r\n    ) {\r\n      // this can be due to the user staying more than 1 hour on the payment page, then refreshing the page\r\n      // see redux-persist expiration delay (\"persistExpiresAt\")\r\n      this.setState({ expiredSessionDialogShown: true }) // Mark that we've shown the dialog\r\n\r\n      // can be undefined\r\n      const restaurantId = this.props.orderProperties.restaurantId\r\n      // we can't redirect to redirectUri as redirectUri often contains placeholders like :restaurantId\r\n      // but we don't have this data anymore\r\n      this.props.showExpiredSessionDialog(restaurantId)\r\n    }\r\n  }\r\n\r\n\r\n  render() {\r\n    const { restaurant, location, isFetchingUserMe, me, orderProperties, cartItemList } = this.props\r\n\r\n    return (\r\n      <OrderPage orderProperties={orderProperties} restaurant={restaurant} location={location}\r\n                 headerProps={{\r\n        displayUser: true,\r\n      }}>\r\n        <OrderPluginUrlCheckerContainer location={location} verifyMode>\r\n          <GoogleMapsApiContainer>\r\n            <React.Fragment>\r\n              <SendEventContainer\r\n                send={orderProperties && !isNil(orderProperties.restaurant)}\r\n                event={EventManager.Events.ON_PAGE_LOADED}\r\n                eventProps={() => ({\r\n                  items: cartItemList,\r\n                  restaurant: orderProperties.restaurant,\r\n                  dueDate: orderProperties.dueDate,\r\n                })}\r\n              >\r\n                <View\r\n                  orderProperties={orderProperties}\r\n                  restaurant={restaurant}\r\n                  onSelectMode={this.handleSelectMode}\r\n                  isFetchingUser={isFetchingUserMe}\r\n                  user={me}\r\n                />\r\n              </SendEventContainer>\r\n            </React.Fragment>\r\n          </GoogleMapsApiContainer>\r\n        </OrderPluginUrlCheckerContainer>\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  cartItemList: getItemListFromCart(state),\r\n  haveAuthCredentials: haveAuthCredentials(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withUserMe,\r\n  withScrollToTop(),\r\n  connect(mapStateToProps, {\r\n    showExpiredSessionDialog\r\n  })\r\n)(DeliveryAddressPage)\r\n","import clsx from 'clsx'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport React from 'react'\r\n\r\nimport InputAdornment from '@material-ui/core/InputAdornment'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { isProd } from 'pmt-modules/environment'\r\n\r\nimport NumberField from 'pmt-ui/NumberField'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport { formatPriceWithCurrency, getCurrencySymbol } from 'pmt-utils/currency'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    display: 'flex',\r\n     // using fixed values and not theme.spacing because used by Order Plugin and Web customer, which don't have the same theme.spacing\r\n     marginTop: '16px',\r\n  },\r\n  tip: {\r\n    padding: theme.spacing(1),\r\n    border: `1px solid ${theme.palette.primary.main}`,\r\n    borderRight: 0,\r\n    background: 'transparent',\r\n    color: theme.palette.text.primary,\r\n    cursor: 'pointer',\r\n    flex: 1,\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    '&:focus-visible': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: 2,\r\n      zIndex: 1,\r\n    },\r\n  },\r\n  tipSelected: {\r\n    background: theme.palette.primary.main,\r\n    color: theme.pmt.colors.white,\r\n    fontWeight: 'bold',\r\n\r\n    '& .MuiInputBase-root': {\r\n      color: theme.pmt.colors.white,\r\n    },\r\n    '& .MuiInputAdornment-root p': {\r\n      color: theme.pmt.colors.white,\r\n    },\r\n  },\r\n  customTip: {\r\n    border: `1px solid ${theme.palette.primary.main}`,\r\n\r\n    '& .MuiInputBase-root::before, & .MuiInputBase-root::after': {\r\n      border: 'none!important',\r\n    },\r\n    '& .MuiInput-input': {\r\n      padding: 0,\r\n      textAlign: 'center',\r\n      minWidth: 40,\r\n    },\r\n    '& .MuiInputAdornment-root': {\r\n      margin: 0,\r\n    },\r\n  },\r\n}))\r\n\r\nconst CustomTip = ({ customValueSelected, onChange, classes, isPercentage, placeholder }) => (\r\n  <div className={clsx(classes.tip, classes.customTip, { [classes.tipSelected]: (customValueSelected) })}>\r\n    <NumberField\r\n      placeholder={placeholder}\r\n      min={0}\r\n      max={isPercentage ? 100 : isProd() ? 99 : 1000}\r\n      value={customValueSelected > 0 ? customValueSelected : ''} //  '' to reset field value\r\n      onChange={(e, value) => onChange(value)}\r\n      InputProps={{\r\n        endAdornment: <InputAdornment position=\"end\">{isPercentage ? '%' : getCurrencySymbol()}</InputAdornment>,\r\n      }}\r\n    />\r\n  </div>\r\n)\r\n\r\nconst Tip = ({ classes, label, selected, onClick }) => (\r\n  <button\r\n    type=\"button\"\r\n    onClick={onClick}\r\n    aria-pressed={selected}\r\n    className={clsx(classes.tip, { [classes.tipSelected]: selected })}\r\n  >\r\n    <TypographyCustom type=\"164\" component=\"span\" skipColor>{label}</TypographyCustom>\r\n  </button>\r\n)\r\n\r\n\r\nconst round = (exactValue, roundingValue) => {\r\n  return Math.round(exactValue / roundingValue) * roundingValue\r\n}\r\n\r\nconst TipBar = ({ tips, onChoseTip, tipsOptions, isPercentage, amountWithoutTips, roundValue }) => {\r\n  const classes = useStyles()\r\n  const [customValueSelected, setCustomValueSelected] = React.useState(0)\r\n  const [initialized, setInitialized] = React.useState(false)\r\n\r\n  const onTipSelection = React.useCallback((tipAmount, customValue) => {\r\n    onChoseTip(tipAmount)\r\n    setCustomValueSelected(customValue)\r\n  }, [onChoseTip])\r\n\r\n  const calculateAmountFromPercentage = React.useCallback((percentage, roundValue) => {\r\n    const exactAmount = amountWithoutTips * percentage / 100;\r\n    return round(exactAmount, roundValue)\r\n  }, [amountWithoutTips])\r\n\r\n  React.useEffect(\r\n    () => {\r\n      if (!initialized) {\r\n        // custom value (percentage or amount). 0 if no custom value\r\n        // initialized if there is no fixed value corresponding to the existing tips\r\n        let customValue = null\r\n        let matchingPossibleValue = tipsOptions.find(possibleValue => tips === (isPercentage ? calculateAmountFromPercentage(possibleValue.value, roundValue) : possibleValue.value))\r\n        if (tips > 0 && !matchingPossibleValue) {\r\n          customValue = { value: isPercentage ? Number((tips * 100 / amountWithoutTips).toFixed(2)) : tips }\r\n        }\r\n        const defaultValue = tipsOptions.find(possibleValue => possibleValue.selectedByDefault)\r\n        const currentValue = matchingPossibleValue ?? customValue ?? defaultValue ?? { value: 0 }\r\n        const tipAmount = isPercentage ? calculateAmountFromPercentage(currentValue.value, roundValue) : currentValue.value\r\n        setInitialized(true)\r\n        onTipSelection(tipAmount, customValue?.value)\r\n      }\r\n    },\r\n    [tipsOptions, amountWithoutTips, isPercentage, tips, calculateAmountFromPercentage, roundValue, onTipSelection, initialized]\r\n  )\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      {tipsOptions && tipsOptions.map(({ value }) => {\r\n\r\n        let selected = false\r\n        if (!customValueSelected) {\r\n          selected = isPercentage ? (tips === calculateAmountFromPercentage(value, roundValue)) : (value === tips)\r\n        }\r\n\r\n        return (\r\n          <Tip\r\n            classes={classes}\r\n            key={`tip-${value}`}\r\n            label={isPercentage ? `${value} %` : formatPriceWithCurrency(value)}\r\n            selected={selected}\r\n            // on click, toggle the tips\r\n            onClick={() => {\r\n              const tipAmount = selected ? 0 : isPercentage ? calculateAmountFromPercentage(value, roundValue) : value\r\n              const customValue = 0\r\n              onTipSelection(tipAmount, customValue)\r\n            }}\r\n          />\r\n        )\r\n      })}\r\n      <CustomTip\r\n        customValueSelected={customValueSelected}\r\n        onChange={value => {\r\n          const tipAmount = isPercentage ? calculateAmountFromPercentage(value, roundValue) : value\r\n          const customValue = value\r\n          onTipSelection(tipAmount, customValue)\r\n        }}\r\n        classes={classes}\r\n        isPercentage={isPercentage}\r\n        placeholder={tipsOptions && tipsOptions.length > 0 ? tr('global.payment.custom_tip') : ''}\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default TipBar\r\n","import React from 'react'\r\n\r\nimport Slider from '@material-ui/core/Slider'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    // using fixed values and not theme.spacing because used by Order Plugin and Web customer, which don't have the same theme.spacing\r\n    margin: '34px 16px 16px 16px',\r\n  },\r\n}))\r\n\r\n/**\r\n * To avoid imprecision such as x.000000000001 numbers after a calculation\r\n *\r\n * @return the rounded value after the 2nd floating digit (0.009 will be rounded to 0.01)\r\n */\r\nconst exact = x => {\r\n  return Math.round(x * 100.0) / 100.0\r\n}\r\n\r\nconst round = (exactValue, roundingValue) => {\r\n  return exact(Math.round(exactValue / roundingValue) * roundingValue)\r\n}\r\n\r\nconst TipSlider = ({\r\n  tips,\r\n  onChoseTip,\r\n  amountWithoutTips,\r\n  defaultSelectedPercentage,\r\n  roundValue,\r\n}) => {\r\n  const classes = useStyles()\r\n  const [initialized, setInitialized] = React.useState(false)\r\n\r\n  React.useEffect(\r\n    () => {\r\n      if (!initialized) {\r\n        if (tips > 0) {\r\n          // already some tips selected => we reselect them\r\n          onChoseTip(tips)\r\n        } else {\r\n          const defaultTipsValue = round(\r\n            ((defaultSelectedPercentage || 0) * amountWithoutTips) / 100,\r\n            roundValue\r\n          )\r\n          onChoseTip(defaultTipsValue)\r\n        }\r\n        setInitialized(true)\r\n      }\r\n    },\r\n    [amountWithoutTips, initialized, defaultSelectedPercentage, roundValue, onChoseTip, tips]\r\n  )\r\n\r\n  // 20 % max\r\n  const maxValue = round(0.2 * amountWithoutTips, roundValue)\r\n  const tipValueAsPercentage = Number(((tips * 100) / amountWithoutTips).toFixed())\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <Slider\r\n        min={0}\r\n        max={maxValue}\r\n        value={tips}\r\n        onChange={(event, newValue) => {\r\n          onChoseTip(newValue)\r\n        }}\r\n        marks={true}\r\n        valueLabelDisplay=\"on\"\r\n        valueLabelFormat={value => `${tipValueAsPercentage} %`}\r\n        step={roundValue}\r\n        aria-label={tr('order.payment.tips.title')}\r\n        getAriaValueText={value => `${tipValueAsPercentage} %`}\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default TipSlider\r\n","import React from 'react'\r\n\r\nimport TipBar from './TipBar'\r\nimport TipSlider from './TipSlider'\r\n\r\nimport { TipsValueType } from 'pmt-modules/payment/constants'\r\n\r\nconst Tips = ({ tips, onChoseTip, tipsSettings, amountWithoutTips, roundingValue }) => {\r\n  if (!tipsSettings) {\r\n    return null\r\n  }\r\n  if (tipsSettings.slider) {\r\n    return (\r\n      <TipSlider\r\n        tips={tips}\r\n        onChoseTip={onChoseTip}\r\n        amountWithoutTips={amountWithoutTips}\r\n        defaultSelectedPercentage={tipsSettings.tipsSliderSettings?.defaultSelectedPercentage ?? 5}\r\n        roundValue={roundingValue || 0.01}\r\n      />\r\n    )\r\n  } else {\r\n    return (\r\n      <TipBar\r\n        tips={tips}\r\n        onChoseTip={onChoseTip}\r\n        amountWithoutTips={amountWithoutTips}\r\n        tipsOptions={tipsSettings.tipsFixedValuesSettings?.possibleValues}\r\n        isPercentage={tipsSettings.tipsFixedValuesSettings?.type === TipsValueType.PERCENTAGE}\r\n        roundValue={roundingValue || 0.01}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nexport default Tips\r\n","import React from 'react'\r\n\r\n// https://stackoverflow.com/questions/53120972/how-to-call-loading-function-with-react-useeffect-only-once\r\nconst useMountEffect = fun => React.useEffect(fun, [])\r\n\r\nexport default useMountEffect\r\n","import Immutable from 'immutable'\r\nimport { useDebugValue, useCallback } from 'react'\r\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux'\r\nimport { createSelectorsPerObject } from 'pmt-modules/redux'\r\nimport useMountEffect from 'pmt-ui/hooks/useMountEffect'\r\nimport { createReducer, createAction } from 'pmt-modules/redux'\r\nimport { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\n\r\nconst getPath = action => [[action.data.requestName, action.data.id].join('_')]\r\n\r\nconst ActionResetRequestDataAction = 'actionResetRequestData'\r\nconst actionResetRequestData = (requestName, id, where) =>\r\n  createAction(ActionResetRequestDataAction, {\r\n    data: {\r\n      requestName,\r\n      id,\r\n    },\r\n    where,\r\n  })\r\n\r\nconst ActionSetDataAction = 'actionSetData'\r\nconst actionSetData = (requestName, id, body) =>\r\n  createAction(ActionSetDataAction, {\r\n    data: {\r\n      requestName,\r\n      id,\r\n    },\r\n    body,\r\n  })\r\n\r\nconst RequestApiAction = createApiEnumAction('actionRequestApi')\r\nconst actionRequestApi = (requestName, id, apiRequest, meta) =>\r\n  createApiCallAction(RequestApiAction, apiRequest, { requestName, id, apiRequest, meta })\r\n\r\n// export const requestApRequestApiActioniReducer = createReducerPerObject(RequestApiAction, action => action.data.requestName)\r\nexport const requestApiReducer = createReducer(Immutable.fromJS({}), {\r\n  [RequestApiAction.REQUEST]: (state, action) =>\r\n    state.mergeIn(getPath(action), {\r\n      actionData: action.data,\r\n      isFetching: true,\r\n      error: null,\r\n    }),\r\n  [RequestApiAction.SUCCESS]: (state, action) => {\r\n    // TODO: copy createPaginateReducer with differeent types of pagination\r\n    // we handle only cursors and page for now\r\n    let isNotFirstPage =\r\n      action.data?.meta?.paginate &&\r\n      (!!action.response?.paging?.cursors?.before || action.response?.page?.page !== 1)\r\n\r\n    if (!isNotFirstPage) {\r\n      return state.mergeIn(getPath(action), {\r\n        data: action.response,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n    }\r\n\r\n    let currentList = state.getIn([...getPath(action), 'data', 'data'])\r\n    if (currentList) {\r\n      currentList = currentList\r\n        .valueSeq()\r\n        .toArray()\r\n        .map(item => {\r\n          return item.toJS()\r\n        })\r\n    } else {\r\n      currentList = []\r\n    }\r\n\r\n    let newList = [...currentList, ...action.response.data]\r\n    // paginate query\r\n    return state.mergeIn(getPath(action), {\r\n      data: {\r\n        paging:\r\n          action.response.paging ||\r\n          (action.response.page && action.response.sort\r\n            ? { ...action.response.page, ...action.response.sort }\r\n            : null),\r\n        data: newList,\r\n      },\r\n      isFetching: false,\r\n      error: null,\r\n    })\r\n  },\r\n  [RequestApiAction.FAILURE]: (state, action) =>\r\n    state.mergeIn(getPath(action), {\r\n      data: null,\r\n      isFetching: false,\r\n      error: action.error,\r\n    }),\r\n  [ActionResetRequestDataAction]: (state, action) =>\r\n    state.mergeIn(getPath(action), {\r\n      data: null,\r\n      isFetching: false,\r\n      error: null,\r\n    }),\r\n  [ActionSetDataAction]: (state, action) =>\r\n    state.mergeIn(getPath(action), {\r\n      data: action.body,\r\n      isFetching: false,\r\n      error: null,\r\n    }),\r\n})\r\n\r\nconst cache = {}\r\nfunction getSelectors(requestName, id) {\r\n  const key = `${requestName}_${id}`\r\n  if (cache[key]) {\r\n    return cache[key]\r\n  }\r\n\r\n  const selectors = createSelectorsPerObject(\r\n    state => state.entities.requestApi,\r\n    (state, props) => [requestName, id].join('_')\r\n  )\r\n\r\n  cache[key] = {\r\n    isFetching: selectors.makeIsFetching(),\r\n    data: selectors.makeGetData(),\r\n    error: selectors.makeGetError(),\r\n    // request: selectors.makeGetRequest(),\r\n  }\r\n  return cache[key]\r\n}\r\n\r\nconst useApi = ({\r\n  requestName,\r\n  manualRun: manualRunParam,\r\n  onSuccess,\r\n  onFailure,\r\n  formatter,\r\n  // devResponse,\r\n  id = '_',\r\n\r\n  // request data\r\n  url,\r\n  endpoint,\r\n  query,\r\n  params,\r\n  type,\r\n  body,\r\n\r\n  resetDataOnMount = false,\r\n  paginate = false,\r\n  autoReset = false,\r\n  keepDataOnRequest = false,\r\n  formatterProps = {},\r\n}) => {\r\n  const dispatch = useDispatch()\r\n  useDebugValue(`[${requestName}] [${type}] ${endpoint}`)\r\n\r\n  const manualRun = manualRunParam ? manualRunParam : type !== 'GET'\r\n\r\n  const selectors = getSelectors(requestName, id)\r\n  const getDataSelector = selectors.data\r\n  const isFetchingSelector = selectors.isFetching\r\n  const getErrorSelector = selectors.error\r\n  // const getRequestSelector = selectors.request\r\n\r\n  const applyFormatter = useCallback(\r\n    res => {\r\n      const data = !paginate ? res : res?.data\r\n      // trick to not use getrequestNameData\r\n      if (data && formatter) {\r\n        return formatter(data, formatterProps)\r\n      } else {\r\n        return data\r\n      }\r\n    },\r\n    [paginate, formatter, formatterProps]\r\n  )\r\n\r\n  const allData = useSelector(state => {\r\n    const res = getDataSelector(state)\r\n\r\n    const paging = res?.paging ||\r\n      (res?.page && res?.sort ? { ...res.page, ...res.sort } : null) || {\r\n        cursors: {},\r\n      }\r\n    const data = applyFormatter(res)\r\n    return { data, paging }\r\n  }, shallowEqual)\r\n\r\n  const isFetching = useSelector(state => {\r\n    const isFetching = isFetchingSelector(state)\r\n    return isFetching\r\n  }, shallowEqual)\r\n\r\n  const error = useSelector(state => {\r\n    const error = getErrorSelector(state)\r\n    return error\r\n  }, shallowEqual)\r\n\r\n  // const request = useSelector((state) => {\r\n  //   const res = getRequestSelector(state, { requestName, id })\r\n  //   return res\r\n  // }, shallowEqual)\r\n\r\n  const resetRequestData = useCallback(\r\n    where => dispatch(actionResetRequestData(requestName, id, where)),\r\n    [requestName, id, dispatch]\r\n  )\r\n  const setData = useCallback(body => dispatch(actionSetData(requestName, id, body)), [\r\n    requestName,\r\n    id,\r\n    dispatch,\r\n  ])\r\n\r\n  const runRequest = useCallback(\r\n    (body, newQuery = {}, newParams = {}) => {\r\n      const onSuccessCallback = (data, response) => {\r\n        // TODO: send paging as second arg.\r\n        onSuccess && onSuccess(applyFormatter(data), data, response)\r\n        if (autoReset) {\r\n          resetRequestData('on success')\r\n        }\r\n      }\r\n\r\n      const onFailureCallback = error => {\r\n        onFailure && onFailure(error)\r\n\r\n        if (autoReset) {\r\n          resetRequestData('on failure')\r\n        }\r\n      }\r\n\r\n      return dispatch(\r\n        actionRequestApi(\r\n          requestName,\r\n          id,\r\n          {\r\n            url,\r\n            endpoint,\r\n            query: {\r\n              ...(query || {}),\r\n              ...newQuery,\r\n            },\r\n            params: {\r\n              ...(params || {}),\r\n              ...newParams,\r\n            },\r\n            type,\r\n            body: type !== 'GET' ? body : undefined,\r\n\r\n            onSuccessCallback: onSuccessCallback,\r\n            onFailureCallback: onFailureCallback,\r\n          },\r\n          {\r\n            paginate,\r\n          }\r\n        )\r\n      )\r\n    },\r\n    [\r\n      requestName,\r\n      id,\r\n      params,\r\n      query,\r\n      applyFormatter,\r\n      autoReset,\r\n      dispatch,\r\n      endpoint,\r\n      onSuccess,\r\n      onFailure,\r\n      paginate,\r\n      resetRequestData,\r\n      type,\r\n      url,\r\n    ]\r\n  )\r\n\r\n  const loadMore = useCallback(\r\n    (newBody, newQuery) => {\r\n      runRequest(newBody || body, {\r\n        cursor: allData?.paging?.cursors?.after,\r\n        page: allData?.paging?.page + 1,\r\n        pageSize: allData?.paging?.pageSize,\r\n        orderBy: allData?.paging?.orderBy,\r\n        direction: allData?.paging?.direction,\r\n        ...(newQuery || {}),\r\n      })\r\n    },\r\n    [allData, body, runRequest]\r\n  )\r\n\r\n  useMountEffect(() => {\r\n    if (resetDataOnMount) {\r\n      resetRequestData()\r\n    }\r\n    if (!manualRun && !isFetching && (resetDataOnMount || !allData?.data)) {\r\n      runRequest(body)\r\n    }\r\n\r\n    return () => {\r\n      // reset data on unmount to not keep it on storage for nothing\r\n      if (resetDataOnMount) {\r\n        resetRequestData()\r\n      }\r\n    }\r\n  })\r\n\r\n  return {\r\n    runRequest,\r\n    resetRequestData,\r\n    setData,\r\n    loadMore,\r\n    data: allData?.data,\r\n    paging: allData?.paging,\r\n    isFetching,\r\n    error,\r\n    // request,\r\n  }\r\n}\r\n\r\nexport default useApi\r\n","import React, { useEffect, useState } from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { getOrderProperties } from 'pmt-modules/orderFront'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport Card from '@material-ui/core/Card'\r\nimport CardHeader from '@material-ui/core/CardHeader'\r\nimport CardContent from '@material-ui/core/CardContent'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport { addVoucher, deleteVoucher } from 'pmt-modules/orderFront/actions'\r\nimport useApi from 'pmt-modules/useApi'\r\nimport Grid from 'pmt-ui/Grid'\r\n\r\nimport CloseIcon from '@material-ui/icons/Close'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport Button, { ButtonLink } from 'app/components/Button'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    margin: theme.spacing(2, 0, 0),\r\n    cursor: 'default',\r\n  },\r\n  card: {\r\n    position: 'relative',\r\n  },\r\n  title: {\r\n    marginTop: theme.spacing(-1),\r\n  },\r\n  header: {\r\n    paddingBottom: 0,\r\n  },\r\n  content: {\r\n    paddingTop: 0,\r\n  },\r\n  form: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n\r\n    '& > div': {\r\n      flex: 1,\r\n    },\r\n    '& > button': {\r\n      marginLeft: theme.spacing(1),\r\n    },\r\n  },\r\n  vouchers: {\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  voucher: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    color: theme.palette.primary.main,\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n}))\r\n\r\nconst VoucherCodes = ({ addVoucher, deleteVoucher, storeId, orderFrontProperties }) => {\r\n  const classes = useStyles()\r\n  const [showField, setShowField] = useState(false)\r\n  const [code, setCode] = useState('')\r\n  const [fieldError, setFieldError] = useState('')\r\n\r\n  const {\r\n    runRequest: checkVoucherCode,\r\n    isFetching: isCheckingVoucher,\r\n    error: checkingVoucherError,\r\n  } = useApi({\r\n    requestName: 'CHECK_VOUCHER_CODE',\r\n    endpoint: `/v1/user/voucher/store/:storeId/balance/:voucherCode`,\r\n    params: { storeId },\r\n    onSuccess: data => {\r\n      if (data.redeemable) {\r\n        setCode('')\r\n        setFieldError('')\r\n        setShowField(false)\r\n        addVoucher(data)\r\n      } else {\r\n        setFieldError(tr('order.payment.voucher.error') + ' ' + data.message)\r\n      }\r\n    },\r\n    type: 'GET',\r\n    manualRun: true,\r\n  })\r\n\r\n  useEffect(() => {\r\n    // reset code after success\r\n    if (!isCheckingVoucher) {\r\n      setCode('')\r\n    }\r\n  }, [isCheckingVoucher])\r\n\r\n  const existingVouchers = orderFrontProperties?.vouchers || []\r\n\r\n  const isAlreadyApplied = code => {\r\n    return existingVouchers.some(voucher => voucher.voucherCode === code)\r\n  }\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <div className={classes.vouchers}>\r\n        {existingVouchers.map(\r\n          (voucher, index) =>\r\n            voucher.voucherCode && (\r\n              <div key={index} className={classes.voucher}>\r\n                <Grid container>\r\n                  <Grid item xs={8}>\r\n                    {voucher.voucherCode}\r\n                  </Grid>\r\n\r\n                  <Grid item xs={3}>\r\n                    {voucher.formattedBalance}\r\n                  </Grid>\r\n\r\n                  <Grid item xs={1}>\r\n                    <ButtonLink icon={<CloseIcon />} onClick={() => deleteVoucher(index)} />\r\n                  </Grid>\r\n                </Grid>\r\n              </div>\r\n            )\r\n        )}\r\n      </div>\r\n\r\n      {!showField ? (\r\n        <ButtonLink\r\n          label={\r\n            <TypographyCustom type=\"144\" skipColor>\r\n              {tr('order.payment.voucher.show')}\r\n            </TypographyCustom>\r\n          }\r\n          onClick={() => setShowField(true)}\r\n        />\r\n      ) : (\r\n        <Card variant=\"outlined\" className={classes.card}>\r\n          <LoadingBlockWrapper show={isCheckingVoucher} />\r\n\r\n          <CardHeader\r\n            className={classes.header}\r\n            action={\r\n              <IconButton\r\n                aria-label={tr('order.payment.voucher.hide')}\r\n                onClick={() => setShowField(false)}\r\n              >\r\n                <CloseIcon />\r\n              </IconButton>\r\n            }\r\n            title={\r\n              <TypographyCustom type=\"147\" className={classes.title}>\r\n                {tr('order.payment.voucher.title')}\r\n              </TypographyCustom>\r\n            }\r\n          />\r\n          <CardContent className={classes.content}>\r\n            <form\r\n              className={classes.form}\r\n              onSubmit={e => {\r\n                e.preventDefault()\r\n                e.stopPropagation()\r\n\r\n                if (!isEmpty(code)) {\r\n                  if (isAlreadyApplied(code)) {\r\n                    setFieldError(tr('global.VoucherFailedReason.DUPLICATE'))\r\n                  } else {\r\n                    checkVoucherCode(null, {}, { voucherCode: code })\r\n                  }\r\n                }\r\n              }}\r\n            >\r\n              <TextField\r\n                autoFocus\r\n                label={tr('order.payment.voucher.code')}\r\n                value={code}\r\n                onChange={e => setCode(e.target.value)}\r\n                helperText={\r\n                  fieldError ||\r\n                  (!isEmpty(checkingVoucherError) ? tr('global.api.global_error.1015') : '')\r\n                }\r\n                error={!isEmpty(fieldError) || !isEmpty(checkingVoucherError)}\r\n              />\r\n              <Button variant=\"outlined\" color=\"primary\" type=\"submit\">\r\n                {tr('order.payment.voucher.apply')}\r\n              </Button>\r\n            </form>\r\n          </CardContent>\r\n        </Card>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  orderFrontProperties: getOrderProperties(state),\r\n})\r\n\r\nexport default connect(mapStateToProps, {\r\n  addVoucher,\r\n  deleteVoucher,\r\n})(VoucherCodes)\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { EventManager } from 'pmt-modules/event'\r\n\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/orderSettings'\r\n\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\nimport Radio from '@material-ui/core/Radio'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport VoucherCodes from './VoucherCodes'\r\n\r\nconst styles = theme => ({\r\n  creditCardContainerPadding: {\r\n    padding: theme.spacing(2),\r\n  },\r\n  cvv: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      textAlign: 'left !important',\r\n    },\r\n  },\r\n  nameContainer: {\r\n    width: 190,\r\n  },\r\n  name: {\r\n    marginTop: 0,\r\n  },\r\n  iconDeleteContainer: {\r\n    height: 48,\r\n    lineHeight: '48px',\r\n    paddingTop: 11,\r\n  },\r\n  iconCreditCard: {\r\n    height: 40,\r\n    lineHeight: '40px',\r\n    marginTop: 15,\r\n    [theme.breakpoints.down('xs')]: {\r\n      display: 'none',\r\n    },\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  lineHeight53: {\r\n    lineHeight: '53px',\r\n  },\r\n  payWithNewCard: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'space-between',\r\n  },\r\n  colorPrimary: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n})\r\n\r\nclass CreditCardPayment extends React.Component {\r\n  render() {\r\n    const { setPaymentMethod, restaurant, orderProperties } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <FormControlLabel\r\n          control={\r\n            <Radio\r\n              color=\"primary\"\r\n              name=\"paymentMethod\"\r\n              checked={orderProperties.payment.isCreditCardMethod}\r\n              value=\"paymentCreditCard\"\r\n              onChange={() => {\r\n                EventManager.dispatch(EventManager.Events.ON_PAYMENT_MODE_SELECT, {\r\n                  paymentMode: PaymentMethodsAllowed.CREDIT_CARD,\r\n                })\r\n                setPaymentMethod(PaymentMethodsAllowed.CREDIT_CARD)\r\n              }}\r\n              onKeyDown={event => {\r\n                handleRadioGroupArrowKeyDown('paymentMethod')(event)\r\n                if (event.key === 'Enter') {\r\n                  event.preventDefault()\r\n                  EventManager.dispatch(EventManager.Events.ON_PAYMENT_MODE_SELECT, {\r\n                    paymentMode: PaymentMethodsAllowed.CREDIT_CARD,\r\n                  })\r\n                  setPaymentMethod(PaymentMethodsAllowed.CREDIT_CARD)\r\n                }\r\n              }}\r\n            />\r\n          }\r\n          label={\r\n            <TypographyCustom type={orderProperties.payment.isCreditCardMethod ? '167' : '164'}>\r\n              {tr('order.payment.online')}\r\n            </TypographyCustom>\r\n          }\r\n        />\r\n\r\n        {/*We display the voucher block only when this CreditCardPayment method is selected */}\r\n        {restaurant.hasVoucherFeatureEnabled && orderProperties.payment.isCreditCardMethod && (\r\n          <VoucherCodes storeId={restaurant.id} />\r\n        )}\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(CreditCardPayment)\r\n","import React from 'react'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/orderSettings'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { handleRadioGroupArrowKeyDown } from '../../../utils/radioGroupKeyboardNav'\r\n\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\nimport Radio from '@material-ui/core/Radio'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nconst IrlPayment = ({\r\n  setPaymentMethod,\r\n  orderProperties,\r\n  orderAppConfig,\r\n  hasVoucherFeatureEnabled,\r\n}) => (\r\n  <React.Fragment>\r\n    <FormControlLabel\r\n      control={\r\n        <Radio\r\n          color=\"primary\"\r\n          name=\"paymentMethod\"\r\n          checked={orderProperties.payment.isIrlMethod}\r\n          value=\"paymentOnSite\"\r\n          onChange={() => {\r\n            EventManager.dispatch(EventManager.Events.ON_PAYMENT_MODE_SELECT, {\r\n              paymentMode: PaymentMethodsAllowed.IRL,\r\n            })\r\n            setPaymentMethod(PaymentMethodsAllowed.IRL)\r\n          }}\r\n          onKeyDown={event => {\r\n            handleRadioGroupArrowKeyDown('paymentMethod')(event)\r\n            if (event.key === 'Enter') {\r\n              event.preventDefault()\r\n              EventManager.dispatch(EventManager.Events.ON_PAYMENT_MODE_SELECT, {\r\n                paymentMode: PaymentMethodsAllowed.IRL,\r\n              })\r\n              setPaymentMethod(PaymentMethodsAllowed.IRL)\r\n            }\r\n          }}\r\n        />\r\n      }\r\n      label={\r\n        <TypographyCustom type={orderProperties.payment.isIrlMethod ? '167' : '164'}>\r\n          {orderProperties.isDelivery\r\n            ? tr('order.payment.cash.label.delivery')\r\n            : orderProperties.isOnSite && orderAppConfig.hasTableNumber\r\n            ? tr('order.payment.cash.label.on_site')\r\n            : tr('order.payment.cash.label.take_away')}\r\n        </TypographyCustom>\r\n      }\r\n    />\r\n\r\n    {hasVoucherFeatureEnabled && orderProperties.payment.isIrlMethod && (\r\n      <TypographyCustom type=\"144\">\r\n        {tr('order.payment.cash.voucher.enabled.info')}\r\n      </TypographyCustom>\r\n    )}\r\n  </React.Fragment>\r\n)\r\n\r\nexport default IrlPayment\r\n","import React, { Fragment } from 'react'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/orderSettings'\r\nimport { UserAccountsContainer } from 'pmt-modules/userAccount'\r\n\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\nimport Radio from '@material-ui/core/Radio'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport BlockContainer from '../../../components/BlockContainer'\r\nimport MessageBlock from '../../../components/MessageBlock'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  account: {\r\n    display: 'flex',\r\n    position: 'relative',\r\n    padding: theme.spacing(2),\r\n    overflow: 'hidden',\r\n    marginTop: theme.spacing(1),\r\n    minHeight: 64,\r\n  },\r\n  detail: {\r\n    width: '100%',\r\n    color: theme.pmt.colors.grey91,\r\n  },\r\n  detailSub: {\r\n    float: 'left',\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  infos: {\r\n    marginTop: theme.spacing(0.5),\r\n  },\r\n  checkbox: {\r\n    float: 'left',\r\n    padding: 0,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n  deduction: {\r\n    color: theme.palette.primary.main,\r\n    float: 'right',\r\n  },\r\n})\r\n\r\nconst UserAccountPayment = ({\r\n  classes,\r\n  isFetchingOrderPreview,\r\n  orderPreview,\r\n  orderPreviewError,\r\n  orderProperties,\r\n  setPaymentMethod,\r\n}) => (\r\n  <Fragment>\r\n    <FormControlLabel\r\n      control={\r\n        <Radio\r\n          color=\"primary\"\r\n          name=\"paymentMethod\"\r\n          checked={orderProperties.payment.isUserAccountMethod}\r\n          value=\"userAccountPayment\"\r\n          // onChange ensures keyboard activation (Space) reliably triggers the selection\r\n          onChange={() => {\r\n            EventManager.dispatch(EventManager.Events.ON_PAYMENT_MODE_SELECT, {\r\n              paymentMode: PaymentMethodsAllowed.USER_ACCOUNT,\r\n            })\r\n            setPaymentMethod(PaymentMethodsAllowed.USER_ACCOUNT)\r\n          }}\r\n          onKeyDown={event => {\r\n            handleRadioGroupArrowKeyDown('paymentMethod')(event)\r\n            if (event.key === 'Enter') {\r\n              event.preventDefault()\r\n              EventManager.dispatch(EventManager.Events.ON_PAYMENT_MODE_SELECT, {\r\n                paymentMode: PaymentMethodsAllowed.USER_ACCOUNT,\r\n              })\r\n              setPaymentMethod(PaymentMethodsAllowed.USER_ACCOUNT)\r\n            }\r\n          }}\r\n        />\r\n      }\r\n      label={\r\n        <TypographyCustom type={orderProperties.payment.isUserAccountMethod ? '167' : '164'}>\r\n          {tr('order.payment.user_account.label')}\r\n        </TypographyCustom>\r\n      }\r\n    />\r\n    {orderProperties.payment.isUserAccountMethod && (\r\n      <BlockContainer type={BlockContainer.Type.GREY} classes={{ root: classes.account }}>\r\n        <UserAccountsContainer userId=\"me\" forceUpdate>\r\n          {({ isFetchingUserAccounts, userAccount }) => (\r\n            <Fragment>\r\n              {(isFetchingUserAccounts ||\r\n                isFetchingOrderPreview ||\r\n                !userAccount ||\r\n                (!orderPreview && !orderPreviewError)) && <LoadingBlockWrapper show size={25} />}\r\n              {userAccount && orderPreview && orderPreview.userAccountPayment && (\r\n                <div className={classes.detail}>\r\n                  <div className=\"u-overflowHidden\">\r\n                    <div className=\"u-floatLeft\">\r\n                      <TypographyCustom type=\"144\">\r\n                        {tr('order.payment.user_account.balance_deduction')}\r\n                      </TypographyCustom>\r\n                      <TypographyCustom type=\"124\" className={classes.infos} skipColor>\r\n                        {tr('order.payment.user_account.balance', {\r\n                          amount: userAccount.amountFormatted,\r\n                        })}\r\n                      </TypographyCustom>\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n              )}\r\n              {orderPreviewError && (\r\n                <ErrorBlock\r\n                  error={orderPreviewError}\r\n                  mode={ErrorBlock.Mode.CUSTOM}\r\n                  customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n                />\r\n              )}\r\n            </Fragment>\r\n          )}\r\n        </UserAccountsContainer>\r\n      </BlockContainer>\r\n    )}\r\n  </Fragment>\r\n)\r\n\r\nexport default withStyles(styles)(UserAccountPayment)\r\n","import React from 'react'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/orderSettings'\r\n\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\nimport Radio from '@material-ui/core/Radio'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst TRDPayment = ({ setPaymentMethod, orderProperties }) => (\r\n  <FormControlLabel\r\n    value=\"female\"\r\n    control={\r\n      <Radio\r\n        color=\"primary\"\r\n        name=\"paymentMethod\"\r\n        checked={orderProperties.payment.isTRDMethod}\r\n        value=\"paymentTRD\"\r\n        // onChange ensures keyboard activation (Space) reliably triggers the selection\r\n        onChange={() => {\r\n          EventManager.dispatch(EventManager.Events.ON_PAYMENT_MODE_SELECT, {\r\n            paymentMode: PaymentMethodsAllowed.TRD,\r\n          })\r\n          setPaymentMethod(PaymentMethodsAllowed.TRD)\r\n        }}\r\n        onKeyDown={event => {\r\n          handleRadioGroupArrowKeyDown('paymentMethod')(event)\r\n          if (event.key === 'Enter') {\r\n            event.preventDefault()\r\n            EventManager.dispatch(EventManager.Events.ON_PAYMENT_MODE_SELECT, {\r\n              paymentMode: PaymentMethodsAllowed.TRD,\r\n            })\r\n            setPaymentMethod(PaymentMethodsAllowed.TRD)\r\n          }\r\n        }}\r\n      />\r\n    }\r\n    label={\r\n      <TypographyCustom type={orderProperties.payment.isTRDMethod ? '167' : '164'}>\r\n        {tr('order.payment.TRD')}\r\n      </TypographyCustom>\r\n    }\r\n  />\r\n)\r\n\r\nexport default TRDPayment\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { getOrderSettings } from 'pmt-modules/appConfig'\r\nimport { getErrorOrderPost } from 'pmt-modules/orderPost'\r\nimport { ORDER_MINIMUM_AMOUNT, PaymentFlowEnum } from 'pmt-modules/order'\r\nimport { postOrderPreviewAndPostOrderIfSucceeded } from 'pmt-modules/orderPlugin'\r\nimport { getItemListFromCart } from 'pmt-modules/cart'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport {\r\n  getOrderPreview,\r\n  isFetchingOrderPreview,\r\n  getOrderPreviewError,\r\n} from 'pmt-modules/orderPreview'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/orderSettings'\r\n\r\nimport Card, { CardContent } from 'pmt-ui/Card'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\n\r\nimport MessageBlock from 'app/components/MessageBlock'\r\nimport Button from 'app/components/Button'\r\n\r\nimport CreditCardPayment from './CreditCardPayment'\r\nimport IrlPayment from './IrlPayment'\r\nimport UserAccountPayment from './UserAccountPayment'\r\nimport TRDPayment from './TRDPayment'\r\n\r\nconst styles = theme => ({\r\n  paymentMethods: {},\r\n  cardContent: {\r\n    padding: `${theme.spacing(3)}px !important`,\r\n  },\r\n  warningContainer: {\r\n    maxWidth: 380,\r\n    margin: '0 auto',\r\n  },\r\n  loadingBlock: {\r\n    marginTop: theme.spacing(3),\r\n    [theme.breakpoints.down('sm')]: {\r\n      background: theme.pmt.colors.greyBackground,\r\n    },\r\n  },\r\n  colorPrimary: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  separator: {\r\n    borderTop: `1px solid ${theme.pmt.colors.grey500}`,\r\n    marginTop: theme.spacing(3),\r\n    marginBottom: theme.spacing(3),\r\n  },\r\n  smallSeparator: {\r\n    borderTop: `1px solid ${theme.pmt.colors.grey500}`,\r\n    width: '50px',\r\n    margin: '0 auto',\r\n  },\r\n  italic: {\r\n    fontStyle: 'italic',\r\n  },\r\n  lineHeight53: {\r\n    lineHeight: '53px',\r\n  },\r\n  lineHeight36: {\r\n    lineHeight: '36px',\r\n  },\r\n  lineHeight48: {\r\n    lineHeight: '48px',\r\n  },\r\n  gridContainer: {\r\n    justifyContent: 'flex-end',\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  cgv: {\r\n    marginBottom: theme.spacing(1),\r\n    color: theme.pmt.colors.grey97,\r\n  },\r\n  voucherEnabledCard: {\r\n    padding: theme.spacing(2, 3),\r\n  },\r\n  voucherEnabled: {},\r\n  link: {\r\n    textDecoration: 'underline',\r\n  },\r\n})\r\n\r\nclass PaymentMethods extends React.PureComponent {\r\n  componentWillReceiveProps(nextProps) {\r\n    if (isNil(this.props.orderProperties.paymentMethod) && !isNil(nextProps.currentOrderSettings)) {\r\n      if (nextProps.currentOrderSettings.isCreditCardPaymentOnlyAllowed) {\r\n        nextProps.setPaymentMethod(PaymentMethodsAllowed.CREDIT_CARD)\r\n      } else if (nextProps.currentOrderSettings.isIrlPaymentOnlyAllowed) {\r\n        nextProps.setPaymentMethod(PaymentMethodsAllowed.IRL)\r\n      } else if (nextProps.currentOrderSettings.isTRDPaymentOnlyAllowed) {\r\n        nextProps.setPaymentMethod(PaymentMethodsAllowed.TRD)\r\n      } else if (nextProps.currentOrderSettings.isUserAccountPaymentOnlyAllowed) {\r\n        nextProps.setPaymentMethod(PaymentMethodsAllowed.USER_ACCOUNT)\r\n      }\r\n    }\r\n  }\r\n\r\n  handlePostOrder = () => {\r\n    const { postOrderPreviewAndPostOrderIfSucceeded } = this.props\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_PAYMENT_SUBMIT, {\r\n      items: this.props.itemListFromCart,\r\n      restaurant: this.props.restaurant,\r\n    })\r\n\r\n    // post order preview to verify all is good on the pos side. If the preview succeed, we will\r\n    // post the order directly.\r\n    postOrderPreviewAndPostOrderIfSucceeded()\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      errorPostOrder,\r\n      orderProperties,\r\n      isFetchingOrderPreview,\r\n      orderPreview,\r\n      orderPreviewError,\r\n      orderAppConfig,\r\n      setPaymentMethod,\r\n      currentOrderSettings,\r\n      restaurant,\r\n      restaurantsGroup,\r\n      user,\r\n      totalCartPriceAndFees,\r\n      amountToPay,\r\n      amountToPayFormatted,\r\n      orderData,\r\n      formIsValid,\r\n      classes,\r\n      ui,\r\n      updateUI,\r\n    } = this.props\r\n\r\n    if (!currentOrderSettings) {\r\n      return (\r\n        <div className={classes.paymentMethods}>\r\n          <LoadingBlock\r\n            show\r\n            classes={{\r\n              loadingBlock: classes.loadingBlock,\r\n            }}\r\n          />\r\n        </div>\r\n      )\r\n    }\r\n\r\n    const paymentBlocks = []\r\n\r\n    if (\r\n      currentOrderSettings.isUserAccountPaymentAllowed &&\r\n      orderAppConfig.paymentFlow !== PaymentFlowEnum.NO_PAYMENT_WITH_ORDER\r\n    ) {\r\n      paymentBlocks.push(\r\n        <UserAccountPayment\r\n          isFetchingOrderPreview={isFetchingOrderPreview}\r\n          orderData={orderData}\r\n          orderPreview={orderPreview}\r\n          orderPreviewError={orderPreviewError}\r\n          orderProperties={orderProperties}\r\n          setPaymentMethod={setPaymentMethod}\r\n        />\r\n      )\r\n    }\r\n\r\n    if (\r\n      currentOrderSettings.isCreditCardPaymentAllowed &&\r\n      orderAppConfig.paymentFlow !== PaymentFlowEnum.NO_PAYMENT_WITH_ORDER &&\r\n      totalCartPriceAndFees > ORDER_MINIMUM_AMOUNT\r\n    ) {\r\n      paymentBlocks.push(\r\n        <CreditCardPayment\r\n          setPaymentMethod={setPaymentMethod}\r\n          restaurant={restaurant}\r\n          orderData={orderData}\r\n          orderProperties={orderProperties}\r\n        />\r\n      )\r\n    }\r\n\r\n    if (\r\n      currentOrderSettings.isTRDPaymentAllowed &&\r\n      orderAppConfig.paymentFlow !== PaymentFlowEnum.NO_PAYMENT_WITH_ORDER\r\n    ) {\r\n      paymentBlocks.push(\r\n        <TRDPayment\r\n          restaurant={restaurant}\r\n          user={user}\r\n          amountToPay={amountToPayFormatted}\r\n          formIsValid={formIsValid}\r\n          orderData={orderData}\r\n          ui={ui}\r\n          updateUI={updateUI}\r\n          orderProperties={orderProperties}\r\n          setPaymentMethod={setPaymentMethod}\r\n        />\r\n      )\r\n    }\r\n\r\n    if (\r\n      currentOrderSettings.isIrlPaymentAllowed &&\r\n      orderAppConfig.paymentFlow !== PaymentFlowEnum.FULL_PAYMENT_WITH_ORDER\r\n    ) {\r\n      paymentBlocks.push(\r\n        <IrlPayment\r\n          setPaymentMethod={setPaymentMethod}\r\n          orderAppConfig={orderAppConfig}\r\n          orderData={orderData}\r\n          orderProperties={orderProperties}\r\n          hasVoucherFeatureEnabled={restaurant.hasVoucherFeatureEnabled}\r\n        />\r\n      )\r\n    }\r\n\r\n    return (\r\n      <div className={classes.paymentMethods}>\r\n        {\r\n          <React.Fragment>\r\n            <Card>\r\n              {restaurant.hasVoucherFeatureEnabled && (\r\n                <React.Fragment>\r\n                  <CardContent className={classes.voucherEnabledCard}>\r\n                    <TypographyCustom type=\"144\" className={classes.voucherEnabled}>\r\n                      {tr('order.payment.voucher.enabled')}\r\n                    </TypographyCustom>\r\n                  </CardContent>\r\n                  <hr className={classes.smallSeparator} />\r\n                </React.Fragment>\r\n              )}\r\n\r\n              <CardContent\r\n                classes={{\r\n                  root: classNames(classes.cardContent, 'u-cursorPointer'),\r\n                }}\r\n              >\r\n                {paymentBlocks.map((block, index) => (\r\n                  <React.Fragment key={index}>\r\n                    {index > 0 && <hr className={classes.separator} />}\r\n                    {block}\r\n                  </React.Fragment>\r\n                ))}\r\n              </CardContent>\r\n            </Card>\r\n\r\n            {!isNil(orderPreviewError) && (\r\n              <div className=\"u-marginTop30\">\r\n                <ErrorBlock\r\n                  error={orderPreviewError}\r\n                  mode={ErrorBlock.Mode.CUSTOM}\r\n                  customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n                />\r\n              </div>\r\n            )}\r\n\r\n            {!isNil(errorPostOrder) && (\r\n              <div className=\"u-marginTop30\">\r\n                <ErrorBlock\r\n                  error={errorPostOrder}\r\n                  mode={ErrorBlock.Mode.CUSTOM}\r\n                  customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n                />\r\n              </div>\r\n            )}\r\n\r\n            {(!orderProperties.payment.isCreditCardMethod ||\r\n              !restaurant.hasPaymentWithCardPrint) && (\r\n              <Grid spacing={2} container className={classes.gridContainer}>\r\n                {!isEmpty(restaurantsGroup?.userSettings?.tosUrl) && (\r\n                  <Grid item xs={12}>\r\n                    <TypographyCustom\r\n                      type=\"144\"\r\n                      className={classes.cgv}\r\n                      dangerouslySetInnerHTML={{\r\n                        __html: tr('order.payment.cgv', {\r\n                          linkBegin: `<a class=\"${classes.link}\" href=\"${restaurantsGroup.userSettings.tosUrl}\" target=\"_blank\" rel=\"noopener noreferrer\">`,\r\n                          linkEnd: '</a>',\r\n                        }),\r\n                      }}\r\n                    />\r\n                  </Grid>\r\n                )}\r\n                <Grid item xs={12} sm={6} />\r\n                <Grid item xs={12} sm={6}>\r\n                  <Button\r\n                    type=\"button\"\r\n                    size=\"large\"\r\n                    classes={{ root: 'u-sizeFullWidth' }}\r\n                    disabled={!orderProperties.payment.paymentMethodIsSelectedAndValid}\r\n                    label={\r\n                      !orderProperties.payment.isIrlMethod && amountToPay > 0\r\n                        ? tr('order.payment.pay_amount', { amount: amountToPayFormatted })\r\n                        : tr('order.payment.finalize_order')\r\n                    }\r\n                    onClick={this.handlePostOrder}\r\n                  />\r\n                </Grid>\r\n              </Grid>\r\n            )}\r\n            {!currentOrderSettings.isIrlPaymentAllowed &&\r\n              totalCartPriceAndFees < ORDER_MINIMUM_AMOUNT && (\r\n                <div className=\"u-marginTop20 u-textAlignCenter\">\r\n                  <ActionInfoOutline className={classNames(classes.iconInfo, classes.grey500)} />\r\n                  <TypographyCustom\r\n                    type=\"204\"\r\n                    align=\"center\"\r\n                    className={classNames(classes.warningContainer, classes.grey500)}\r\n                  >\r\n                    {tr('order.payment.minimum_to_order')}\r\n                  </TypographyCustom>\r\n                </div>\r\n              )}\r\n          </React.Fragment>\r\n        }\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  itemListFromCart: getItemListFromCart(state),\r\n  orderAppConfig: getOrderSettings(state),\r\n  errorPostOrder: getErrorOrderPost(state),\r\n  isFetchingOrderPreview: isFetchingOrderPreview(state),\r\n  orderPreview: getOrderPreview(state),\r\n  orderPreviewError: getOrderPreviewError(state),\r\n})\r\n\r\nexport default compose(\r\n  connect(mapStateToProps, {\r\n    postOrderPreviewAndPostOrderIfSucceeded,\r\n  }),\r\n  withStyles(styles)\r\n)(PaymentMethods)\r\n","import React, { useEffect, useState } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { AppConfigContainer } from 'pmt-modules/appConfig'\r\nimport { addModifierCode } from 'pmt-modules/orderFront/actions'\r\nimport {\r\n  getOrderPreview,\r\n  getOrderPreviewVerifications,\r\n  isFetchingOrderPreview,\r\n  getVerificationsModifiersReasonLabel,\r\n} from 'pmt-modules/orderPreview'\r\n\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport Card from '@material-ui/core/Card'\r\nimport CardHeader from '@material-ui/core/CardHeader'\r\nimport CardContent from '@material-ui/core/CardContent'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport IconButton from '@material-ui/core/IconButton'\r\n\r\nimport CloseIcon from '@material-ui/icons/Close'\r\nimport LoyaltyIcon from '@material-ui/icons/Loyalty'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Tooltip from 'pmt-ui/Tooltip'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport Button, { ButtonLink } from 'app/components/Button'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    margin: theme.spacing(2, 0, 0),\r\n  },\r\n  card: {\r\n    position: 'relative',\r\n  },\r\n  title: {\r\n    marginTop: theme.spacing(-1),\r\n  },\r\n  header: {\r\n    paddingBottom: 0,\r\n  },\r\n  content: {\r\n    paddingTop: 0,\r\n  },\r\n  form: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n\r\n    '& > div': {\r\n      flex: 1,\r\n    },\r\n    '& > button': {\r\n      marginLeft: theme.spacing(1),\r\n    },\r\n  },\r\n  modifiers: {\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  modifier: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    color: theme.palette.primary.main,\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  loyalty: {\r\n    color: theme.palette.primary.main,\r\n    width: 16,\r\n    height: 16,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n}))\r\n\r\nconst PromoCode = ({\r\n  addModifierCode,\r\n  isFetchingOrderPreview,\r\n  orderPreview,\r\n  orderPreviewVerifications,\r\n}) => {\r\n  const classes = useStyles()\r\n  const [showField, setShowField] = useState(false)\r\n  const [code, setCode] = useState('')\r\n\r\n  useEffect(\r\n    () => {\r\n      // reset code after success\r\n      if (!isFetchingOrderPreview) {\r\n        setCode('')\r\n      }\r\n    },\r\n    [isFetchingOrderPreview]\r\n  )\r\n\r\n  return (\r\n    <AppConfigContainer>\r\n      {({ frontAppConfig }) => {\r\n        if (!frontAppConfig?.display?.promoCode) {\r\n          return null\r\n        }\r\n\r\n        return (\r\n          <div className={classes.root}>\r\n            <div className={classes.modifiers}>\r\n              {orderPreview?.modifiers.map(\r\n                modifier =>\r\n                  modifier.code && (\r\n                    <Tooltip\r\n                      key={modifier.id}\r\n                      title={modifier.description}\r\n                      placement=\"bottom-start\"\r\n                    >\r\n                      <div className={classes.modifier}>\r\n                        <LoyaltyIcon className={classes.loyalty} />\r\n                        <TypographyCustom type=\"167\" skipColor>\r\n                          {modifier.name}\r\n                        </TypographyCustom>\r\n                      </div>\r\n                    </Tooltip>\r\n                  )\r\n              )}\r\n            </div>\r\n\r\n            {!showField ? (\r\n              <ButtonLink\r\n                label={\r\n                  <TypographyCustom type=\"144\" skipColor>\r\n                    {tr('order.payment.promo_code.show')}\r\n                  </TypographyCustom>\r\n                }\r\n                onClick={() => setShowField(true)}\r\n              />\r\n            ) : (\r\n              <Card variant=\"outlined\" className={classes.card}>\r\n                <LoadingBlockWrapper show={isFetchingOrderPreview} />\r\n\r\n                <CardHeader\r\n                  className={classes.header}\r\n                  action={\r\n                    <IconButton\r\n                      aria-label={tr('order.payment.promo_code.hide')}\r\n                      onClick={() => setShowField(false)}\r\n                    >\r\n                      <CloseIcon />\r\n                    </IconButton>\r\n                  }\r\n                  title={\r\n                    <TypographyCustom type=\"147\" className={classes.title}>\r\n                      {tr('order.payment.promo_code.title')}\r\n                    </TypographyCustom>\r\n                  }\r\n                />\r\n                <CardContent className={classes.content}>\r\n                  <form\r\n                    className={classes.form}\r\n                    onSubmit={e => {\r\n                      e.preventDefault()\r\n                      e.stopPropagation()\r\n\r\n                      if (!isEmpty(code)) {\r\n                        addModifierCode(code)\r\n                      }\r\n                    }}\r\n                  >\r\n                    <TextField\r\n                      autoFocus\r\n                      label={tr('order.payment.promo_code')}\r\n                      value={code}\r\n                      onChange={e => setCode(e.target.value)}\r\n                      helperText={\r\n                        !orderPreviewVerifications?.modifiers.succeeded &&\r\n                        getVerificationsModifiersReasonLabel(\r\n                          orderPreviewVerifications?.modifiers.reason\r\n                        )\r\n                      }\r\n                      error={!orderPreviewVerifications?.modifiers.succeeded}\r\n                    />\r\n                    <Button variant=\"outlined\" color=\"primary\" type=\"submit\">\r\n                      {tr('order.payment.promo_code.apply')}\r\n                    </Button>\r\n                  </form>\r\n                </CardContent>\r\n              </Card>\r\n            )}\r\n          </div>\r\n        )\r\n      }}\r\n    </AppConfigContainer>\r\n  )\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  orderPreview: getOrderPreview(state),\r\n  isFetchingOrderPreview: isFetchingOrderPreview(state),\r\n  orderPreviewVerifications: getOrderPreviewVerifications(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    addModifierCode,\r\n  }\r\n)(PromoCode)\r\n","import React from 'react'\r\n\r\nimport Price from 'pmt-ui/Price'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport BlockContainer from '../../../components/BlockContainer'\r\nimport PromoCode from './PromoCode'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  paymentDetails: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: 0,\r\n    },\r\n  },\r\n  leftToPay: {\r\n    display: 'flex',\r\n    alignItems: 'baseline',\r\n    justifyContent: 'space-between',\r\n    marginBottom: theme.spacing(1),\r\n    overflow: 'hidden',\r\n  },\r\n  admissionFeesLabel: {\r\n    overflow: 'hidden',\r\n    lineHeight: '24px',\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n})\r\n\r\nconst PaymentDetails = ({ classes, amountToPay }) => (\r\n  <BlockContainer type={BlockContainer.Type.GREY} className={classes.paymentDetails}>\r\n    <TypographyCustom type=\"167\" className={classes.leftToPay}>\r\n      {tr('order.payment.left_to_be_paid')}\r\n      <TypographyCustom type=\"247\" className=\"u-floatRight\" skipColor>\r\n        <Price value={amountToPay} />\r\n      </TypographyCustom>\r\n    </TypographyCustom>\r\n\r\n    <PromoCode />\r\n  </BlockContainer>\r\n)\r\n\r\nexport default withStyles(styles)(PaymentDetails)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { postOrder, getErrorOrderPost } from 'pmt-modules/orderPost'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getItemListFromCart, getCartData } from 'pmt-modules/cart'\r\nimport { setPaymentMethod, selectTips } from 'pmt-modules/orderFront'\r\nimport { getOrderPreview } from 'pmt-modules/orderPreview'\r\nimport { makeGetCurrentOrderSettings, PaymentMethodsAllowed } from 'pmt-modules/orderSettings'\r\nimport { getOrderData } from 'pmt-modules/orderPlugin'\r\nimport Tips from 'pmt-modules/payment/components/Tips'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { TipsValueType } from 'pmt-modules/payment/constants'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport BlockContainer from 'app/components/BlockContainer'\r\nimport Button from 'app/components/Button'\r\n\r\nimport PaymentMethods from './PaymentMethods'\r\nimport PaymentDetails from './PaymentDetails'\r\nimport { getPublicUrl } from 'pmt-modules/environment'\r\nimport MessageBlock from 'app/components/MessageBlock'\r\n\r\nconst styles = theme => ({\r\n  alcoolAlert: {\r\n    display: 'flex',\r\n    justifyContent: 'flex-end',\r\n    [theme.breakpoints.down('xs')]: {\r\n      justifyContent: 'center',\r\n\r\n      '& img': {\r\n        width: '100%',\r\n      },\r\n    },\r\n  },\r\n  tipsTitle: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    padding: theme.spacing(1),\r\n    marginTop: theme.spacing(2),\r\n  },\r\n})\r\n\r\nclass PaymentBlock extends React.PureComponent {\r\n  titleRef = React.createRef()\r\n\r\n  handlePostOrderOnFreeOrder = () => {\r\n    EventManager.dispatch(EventManager.Events.ON_PAYMENT_SUBMIT, {\r\n      items: this.props.itemListFromCart,\r\n      restaurant: this.props.restaurant,\r\n    })\r\n\r\n    const { postOrder, orderData } = this.props\r\n\r\n    if (!isNil(orderData)) {\r\n      postOrder(orderData)\r\n    }\r\n  }\r\n\r\n  componentDidMount() {\r\n    const { orderProperties, setPaymentMethod } = this.props\r\n\r\n    // If total is equal to 0 and we're not in userAccount payment we force IRL payment method\r\n    if (\r\n      orderProperties.totalCartPriceAndFeesAndTips === 0 &&\r\n      !orderProperties.isUserAccountMethod\r\n    ) {\r\n      setPaymentMethod(PaymentMethodsAllowed.IRL)\r\n    }\r\n\r\n    this.focusTitleIfReady()\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (!prevProps.restaurant && this.props.restaurant) {\r\n      this.focusTitleIfReady()\r\n    }\r\n  }\r\n\r\n  focusTitleIfReady = () => {\r\n    if (this.props.restaurant && this.titleRef.current) {\r\n      const heading = this.titleRef.current.querySelector('h2')\r\n      if (heading) {\r\n        heading.focus()\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      errorPostOrder,\r\n      orderProperties,\r\n      cartData,\r\n      user,\r\n      orderData,\r\n      setPaymentMethod,\r\n      onResetUserCard,\r\n      restaurant,\r\n      restaurantsGroup,\r\n      currentOrderSettings,\r\n      classes,\r\n      ui,\r\n      updateUI,\r\n      frontSettings,\r\n      selectTips,\r\n    } = this.props\r\n\r\n    return (\r\n      <BlockContainer\r\n        classes={{ root: classNames('u-overflowHidden') }}\r\n        mobileType={BlockContainer.Type.GREY}\r\n        style={{ flexGrow: 1 }}\r\n      >\r\n        {restaurant && (\r\n          <React.Fragment>\r\n            <div ref={this.titleRef}>\r\n              <TypographyCustom type=\"284\" component=\"h2\" tabIndex={-1} className=\"u-marginBottom20\">\r\n                {tr('order.payment.title')}\r\n              </TypographyCustom>\r\n            </div>\r\n\r\n            <Grid spacing={2} container>\r\n              <Grid item xs={12} lg={6}>\r\n                <PaymentDetails amountToPay={orderProperties.totalCartPriceAndFeesFormatted} />\r\n                {frontSettings?.display?.tipsSettings?.activated && restaurant?.allowTips && (\r\n                  <React.Fragment>\r\n                    <div className={classes.tipsTitle}>\r\n                      <TypographyCustom type=\"164\">\r\n                        {tr('order.payment.tips.title')}\r\n                      </TypographyCustom>\r\n                      {(frontSettings?.display?.tipsSettings?.slider ||\r\n                        frontSettings?.display?.tipsSettings?.tipsFixedValuesSettings?.type ===\r\n                          TipsValueType.PERCENTAGE) && (\r\n                        <TypographyCustom type=\"164\">\r\n                          {formatPriceWithCurrency(orderProperties.tips)}\r\n                        </TypographyCustom>\r\n                      )}\r\n                    </div>\r\n                    <Tips\r\n                      tips={orderProperties.tips}\r\n                      amountWithoutTips={orderProperties.totalCartPriceAndFees}\r\n                      onChoseTip={tips => {\r\n                        selectTips(tips)\r\n                      }}\r\n                      tipsSettings={frontSettings?.display?.tipsSettings}\r\n                      roundingValue={frontSettings?.display?.roundingValue}\r\n                    />\r\n                  </React.Fragment>\r\n                )}\r\n              </Grid>\r\n              <Grid item xs={12} lg={6}>\r\n                {orderProperties.totalCartPriceAndFeesAndTips > 0 ||\r\n                currentOrderSettings.isUserAccountPaymentAllowed ? (\r\n                  <PaymentMethods\r\n                    orderProperties={orderProperties}\r\n                    ui={ui}\r\n                    updateUI={updateUI}\r\n                    currentOrderSettings={currentOrderSettings}\r\n                    setPaymentMethod={setPaymentMethod}\r\n                    orderData={orderData}\r\n                    onResetUserCard={onResetUserCard}\r\n                    restaurant={restaurant}\r\n                    user={user}\r\n                    totalCartPriceAndFees={orderProperties.totalCartPriceAndFeesAndTips}\r\n                    amountToPay={orderProperties.amountToPay}\r\n                    amountToPayFormatted={orderProperties.amountToPayFormatted}\r\n                    restaurantsGroup={restaurantsGroup}\r\n                  />\r\n                ) : (\r\n                  <>\r\n                    <Button\r\n                      type=\"button\"\r\n                      size=\"large\"\r\n                      classes={{ root: 'u-sizeFullWidth' }}\r\n                      label={tr('order.payment.finalize_order')}\r\n                      onClick={this.handlePostOrderOnFreeOrder}\r\n                    />\r\n\r\n                    {!isNil(errorPostOrder) && (\r\n                      <div className=\"u-marginTop30\">\r\n                        <ErrorBlock\r\n                          error={errorPostOrder}\r\n                          mode={ErrorBlock.Mode.CUSTOM}\r\n                          customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n                        />\r\n                      </div>\r\n                    )}\r\n                  </>\r\n                )}\r\n              </Grid>\r\n              {orderData.withFrenchBreathAnalyzer && cartData.containsAlcohol && (\r\n                <Grid item xs={12} className={classes.alcoolAlert}>\r\n                  <img\r\n                    src={`${getPublicUrl()}/Soufflez vous saurez_350x120.png`}\r\n                    alt=\"Éthylotest en vente sur ce site\"\r\n                  />\r\n                </Grid>\r\n              )}\r\n            </Grid>\r\n          </React.Fragment>\r\n        )}\r\n      </BlockContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getCurrentOrderSettings = makeGetCurrentOrderSettings()\r\n\r\n  return {\r\n    currentOrderSettings: getCurrentOrderSettings(state, {\r\n      orderMode: props.orderProperties.mode,\r\n    }),\r\n    itemListFromCart: getItemListFromCart(state),\r\n    orderPreview: getOrderPreview(state),\r\n    orderData: getOrderData(state),\r\n    cartData: getCartData(state),\r\n    errorPostOrder: getErrorOrderPost(state),\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      subsidyChecked: false,\r\n      balanceChecked: false,\r\n      showCreditCardForm: false,\r\n    },\r\n  }),\r\n  connect(mapStateToProps, {\r\n    setPaymentMethod,\r\n    postOrder,\r\n    selectTips,\r\n  }),\r\n  withStyles(styles)\r\n)(PaymentBlock)\r\n","import React from 'react'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Hidden from 'pmt-ui/Hidden'\r\n\r\nimport SideSummary from 'app/components/SideSummary'\r\nimport BackToBlock from 'app/components/BackToBlock'\r\n\r\nimport PaymentBlock from './components/PaymentBlock'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  container: {\r\n    position: 'relative',\r\n  },\r\n  gridInverse: {\r\n    flexDirection: 'row-reverse',\r\n  },\r\n  backToCartAndPaymentBlock: {\r\n    display: 'flex', // allow paymentBlock to take all available height\r\n    flexDirection: 'column',\r\n    flexGrow: 1, // takes all available height\r\n  },\r\n})\r\n\r\nconst View = ({\r\n  classes,\r\n  isFetching,\r\n  user,\r\n  orderProperties,\r\n  restaurant,\r\n  restaurantsGroup,\r\n  orderPreviewVerifications,\r\n  frontSettings,\r\n}) => (\r\n  <div className={classes.root}>\r\n    <div className={classes.container}>\r\n      <LoadingBlockWrapper show={isFetching} />\r\n      <Grid container spacing={2} className={classes.gridInverse}>\r\n        <Hidden smDown>\r\n          <Grid item xs={12} md={4} lg={3}>\r\n            <SideSummary\r\n              orderProperties={orderProperties}\r\n              restaurant={restaurant}\r\n              user={user}\r\n              cartResumeEnabled\r\n              userInformationsEnabled\r\n              userProfileModificationEnabled\r\n              dueDateModificationEnabled={false}\r\n            />\r\n          </Grid>\r\n        </Hidden>\r\n        <Grid item xs={12} md={8} lg={9} className={classes.backToCartAndPaymentBlock}>\r\n          <BackToBlock\r\n            restaurant={restaurant}\r\n            routeName={'ORDER__CART'}\r\n            label={tr('order.global.back_to_cart')}\r\n          />\r\n\r\n          <PaymentBlock\r\n            user={user}\r\n            restaurant={restaurant}\r\n            restaurantsGroup={restaurantsGroup}\r\n            orderProperties={orderProperties}\r\n            orderPreviewVerifications={orderPreviewVerifications}\r\n            frontSettings={frontSettings}\r\n          />\r\n        </Grid>\r\n      </Grid>\r\n    </div>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { haveAuthCredentials, getAuth } from 'pmt-modules/auth'\r\nimport { withCatalog } from 'pmt-modules/catalog'\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { withUserMe } from 'pmt-modules/userMe'\r\nimport { getItemListFromCart } from 'pmt-modules/cart'\r\nimport {\r\n  withOrderProperties,\r\n  OrderPluginUrlCheckerContainer,\r\n  getOrderData,\r\n  getAppConfigFrontSettings,\r\n  showExpiredSessionDialog,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { isFetchingOrderPost } from 'pmt-modules/orderPost'\r\nimport { getIsRedirectingToExternal, setIsRedirectingToExternal } from 'pmt-modules/routing'\r\nimport { isFetchingOrderPreview, resetOrderPreviewError } from 'pmt-modules/orderPreview'\r\nimport { getOrderPreviewVerifications } from 'pmt-modules/orderPreview'\r\nimport { getAuthenticatedUser } from 'pmt-modules/authenticatedUser/selectors'\r\nimport UserType from 'pmt-modules/user/constants/UserType'\r\nimport { withRestaurantsGroupMine } from 'pmt-modules/restaurantsGroup/components'\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport OrderPage from 'app/components/OrderPage'\r\nimport View from './View'\r\nimport { setVouchers } from 'pmt-modules/orderFront'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass PaymentPage extends React.PureComponent {\r\n  state = {\r\n    expiredSessionDialogShown: false,\r\n  }\r\n\r\n  constructor(props) {\r\n    super(props)\r\n    // reset order preview error message, we want to display it only when the user click on finalize\r\n    // order and the preview fail, not if a previous preview failed.\r\n    props.resetOrderPreviewError()\r\n\r\n    props.setVouchers([])\r\n\r\n    // be sure to not keep the loader relative to \"isRedirectingToExternal\" after having left the page\r\n    // eg. when the user comes back from the PSP page, we don't want the loader anymore\r\n    setIsRedirectingToExternal(false)\r\n  }\r\n\r\n  // ensure to remove vouchers when unloading page (so nobody else can use them)\r\n  onUnload = () => {\r\n    this.props.setVouchers([])\r\n  }\r\n\r\n  // When the user comes back to the payment page using the browser back button, the page can be\r\n  // restored from the back/forward cache (bfcache). In that case, the whole JS memory is frozen\r\n  // and restored as-is: no React lifecycle runs (no constructor, no re-render) and the module-level\r\n  // `isRedirectingToExternal` flag is still `true`, so the loader stays displayed.\r\n  // We detect the bfcache restore via `event.persisted`, reset the flag and force a re-render so\r\n  // the loader disappears.\r\n  onPageShow = event => {\r\n    if (event.persisted) {\r\n      setIsRedirectingToExternal(false)\r\n      this.forceUpdate()\r\n    }\r\n  }\r\n\r\n  componentDidMount() {\r\n    window.addEventListener('beforeunload', this.onUnload)\r\n    window.addEventListener('pageshow', this.onPageShow)\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    // ensure to remove vouchers when unloading page (so nobody else can use them)\r\n    window.removeEventListener('beforeunload', this.onUnload)\r\n    window.removeEventListener('pageshow', this.onPageShow)\r\n    this.props.setVouchers([])\r\n  }\r\n\r\n  // we need to have the restaurant to check order data\r\n  // if we don't, it will return null every time\r\n  componentDidUpdate(prevProps) {\r\n    if (this.state.expiredSessionDialogShown) {\r\n      return // Stop re-triggering the dialog\r\n    }\r\n\r\n    // SECURITY\r\n    // user is not connected or\r\n    // if the order data is null, it means that one mandatory information\r\n    // to access the payment page is missing\r\n    const noOrderData = isNil(this.props.orderData)\r\n    const hasOrderPropertiesRestaurant = !isNil(this.props.orderProperties.restaurant)\r\n    const noCredentials = !this.props.haveAuthCredentials\r\n    const noRestaurantId = isNil(this.props.orderProperties.restaurantId)\r\n    const noRestaurant =\r\n      prevProps.isFetchingRestaurant && !this.props.isFetchingRestaurant && !this.props.restaurant\r\n\r\n    if (\r\n      (noOrderData && hasOrderPropertiesRestaurant) ||\r\n      noCredentials ||\r\n      noRestaurantId ||\r\n      noRestaurant ||\r\n      // cart is empty, mostly because items has been removed because they are locked\r\n      // Note: most of the time, deleteCartItemMiddleware will redirect before we arrive here\r\n      //  But in some cases we could be here and we want to redirect. Better to be safe.\r\n      (isEmpty(this.props.orderData.products) && isEmpty(this.props.orderData.menus))\r\n    ) {\r\n      // this can be due to the user staying more than 1 hour on the payment page, then refreshing the page\r\n      // see redux-persist expiration delay (\"persistExpiresAt\")\r\n      this.setState({ expiredSessionDialogShown: true }) // Mark that we've shown the dialog\r\n\r\n      // can be undefined\r\n      const restaurantId = this.props.orderProperties.restaurantId\r\n      // we can't redirect to redirectUri as redirectUri often contains placeholders like :restaurantId\r\n      // but we don't have this data anymore\r\n      this.props.showExpiredSessionDialog(restaurantId)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      isFetchingOrderPost,\r\n      isFetchingOrderPreview,\r\n      restaurant,\r\n      restaurantsGroup,\r\n      authenticatedUser,\r\n      cartItemList,\r\n      location,\r\n      orderPreviewVerifications,\r\n      orderProperties,\r\n      width,\r\n      me,\r\n      frontSettings,\r\n    } = this.props\r\n\r\n    const isFetchingRestaurant = !restaurant\r\n    const isFetchingUser = !authenticatedUser || (authenticatedUser.type === UserType.NORMAL && !me)\r\n    const isRedirectingToExternal = getIsRedirectingToExternal()\r\n\r\n    const isFetching =\r\n      isFetchingRestaurant ||\r\n      isFetchingUser ||\r\n      isFetchingOrderPost ||\r\n      isFetchingOrderPreview ||\r\n      isRedirectingToExternal\r\n\r\n    return (\r\n      <OrderPage\r\n        headerProps={{\r\n          displayTitle: isWidthUp('md', width),\r\n          displayUser: true,\r\n        }}\r\n        orderProperties={orderProperties}\r\n        restaurant={restaurant}\r\n        location={location}\r\n      >\r\n        <OrderPluginUrlCheckerContainer location={location} verifyMode>\r\n          <SendEventContainer\r\n            send={\r\n              orderProperties &&\r\n              !isNil(orderProperties.restaurant) &&\r\n              !isNil(authenticatedUser && authenticatedUser.email)\r\n            }\r\n            event={EventManager.Events.ON_PAGE_LOADED}\r\n            eventProps={() => ({\r\n              items: cartItemList,\r\n              restaurant: orderProperties.restaurant,\r\n              dueDate: orderProperties.dueDate,\r\n              user: authenticatedUser && authenticatedUser.email,\r\n            })}\r\n          >\r\n            <View\r\n              isFetching={isFetching}\r\n              user={authenticatedUser}\r\n              orderPreviewVerifications={orderPreviewVerifications}\r\n              orderProperties={orderProperties}\r\n              restaurant={restaurant}\r\n              restaurantsGroup={restaurantsGroup}\r\n              frontSettings={frontSettings}\r\n            />\r\n          </SendEventContainer>\r\n        </OrderPluginUrlCheckerContainer>\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  haveAuthCredentials: haveAuthCredentials(state),\r\n  auth: getAuth(),\r\n  authenticatedUser: getAuthenticatedUser(state),\r\n\r\n  isFetchingOrderPost: isFetchingOrderPost(state),\r\n  isFetchingOrderPreview: isFetchingOrderPreview(state),\r\n\r\n  orderData: getOrderData(state),\r\n  orderPreviewVerifications: getOrderPreviewVerifications(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  cartItemList: getItemListFromCart(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withUserMe,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withRestaurantsGroupMine(),\r\n  withCatalog,\r\n  withScrollToTop(),\r\n  connect(mapStateToProps, {\r\n    resetOrderPreviewError,\r\n    showExpiredSessionDialog,\r\n    setVouchers,\r\n  }),\r\n  withWidth()\r\n)(PaymentPage)\r\n","import React from 'react'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ErrorOutlineIcon from 'pmt-ui/svg-icons/action/error-outline'\r\n\r\nimport Button from '../../../components/Button'\r\nimport BlockContainer from '../../../components/BlockContainer'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  block: {\r\n    padding: `${theme.spacing(20)}px ${theme.spacing(2)}px`,\r\n  },\r\n  icon: {\r\n    display: 'block',\r\n    width: 64,\r\n    height: 64,\r\n    margin: `0 auto ${theme.spacing(4)}px`,\r\n    color: theme.palette.error.main,\r\n  },\r\n  message: {\r\n    marginBottom: theme.spacing(4),\r\n  },\r\n  button: {\r\n    display: 'block',\r\n    marginTop: theme.spacing(6),\r\n    marginLeft: 'auto',\r\n    marginRight: 'auto',\r\n  },\r\n})\r\n\r\nconst ErrorBlock = ({ classes, onConfirm }) => (\r\n  <div className={classes.root}>\r\n    <Grid container>\r\n      <Grid item xs={12}>\r\n        <BlockContainer classes={{ root: classes.block }} mobileType={BlockContainer.Type.GREY}>\r\n          <ErrorOutlineIcon className={classes.icon} />\r\n          <TypographyCustom type={204} align=\"center\" className={classes.message}>\r\n            {tr('order.payment.verification.error.message')}\r\n          </TypographyCustom>\r\n          <Button size=\"large\" className={classes.button} onClick={onConfirm}>\r\n            {tr('order.payment.verification.error.confirm')}\r\n          </Button>\r\n        </BlockContainer>\r\n      </Grid>\r\n    </Grid>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(ErrorBlock)\r\n","import React from 'react'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport BlockContainer from '../../../components/BlockContainer'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  block: {\r\n    padding: `${theme.spacing(20)}px ${theme.spacing(2)}px`,\r\n  },\r\n  loadingBlock: {\r\n    background: 'transparent',\r\n  },\r\n  wording: {\r\n    marginBottom: theme.spacing(10),\r\n  },\r\n})\r\n\r\nconst View = ({ classes }) => (\r\n  <div className={classes.root}>\r\n    <Grid container>\r\n      <Grid item xs={12}>\r\n        <BlockContainer classes={{ root: classes.block }} mobileType={BlockContainer.Type.GREY}>\r\n          <TypographyCustom type={204} align=\"center\" className={classes.wording}>\r\n            {tr('order.payment.verification')}\r\n          </TypographyCustom>\r\n          <LoadingBlock show classes={{ loadingBlock: classes.loadingBlock }} />\r\n        </BlockContainer>\r\n      </Grid>\r\n    </Grid>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getAsyncPayment } from 'pmt-modules/asyncPayment'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { getFrontSessionId } from 'pmt-modules/frontSession'\r\nimport { resetOrderFrontFull } from 'pmt-modules/orderFront'\r\nimport {\r\n  getAppConfigFrontSettings,\r\n  OrderPluginUrlCheckerContainer,\r\n  resetOrderPlugin,\r\n  withOrderProperties,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { getDataOrderPost } from 'pmt-modules/orderPost'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\nimport { withUserMe } from 'pmt-modules/userMe'\r\n\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\n\r\nimport OrderPage from '../../../components/OrderPage'\r\nimport ErrorBlock from './ErrorBlock'\r\nimport View from './View'\r\nimport Logger from 'pmt-utils/logger'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass PaymentVerificationPage extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // SECURITY\r\n    // if the order data is null, it means that one mandatory information\r\n    // to access the payment page is missing.\r\n    // In that case we cannot get the order status, so we display an error message\r\n    // to the user (instead of resetting and redirecting, as we did before)\r\n    this.state = {\r\n      hasError: isNil(props.orderData),\r\n    }\r\n\r\n    if (isNil(props.orderData)) {\r\n      // nothing else to do: the error message will be displayed on render\r\n      Logger.error(\r\n        `The orderData is nil on the payment verification page. Front-session-id: ${getFrontSessionId()}`\r\n      )\r\n    } else if (!isNil(props.orderData.payment)) {\r\n      props.getAsyncPayment(props.orderData.payment.id)\r\n    } else {\r\n      props.redirectTo(getRoute('ORDER__PAYMENT'))\r\n    }\r\n  }\r\n\r\n  hasRedirectUriDefined = () => this.props.frontSettings && this.props.frontSettings.redirectUri\r\n\r\n  handleConfirmError = () => {\r\n    const { frontSettings } = this.props\r\n\r\n    this.props.resetOrderFrontFull()\r\n    if (this.hasRedirectUriDefined()) {\r\n      window.location.href = frontSettings.redirectUri\r\n    } else {\r\n      this.props.resetOrderPlugin()\r\n      this.props.redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { restaurant, location, orderProperties } = this.props\r\n    const { hasError } = this.state\r\n\r\n    return (\r\n      <OrderPage orderProperties={orderProperties} restaurant={restaurant} location={location}>\r\n        {hasError ? (\r\n          <ErrorBlock onConfirm={this.handleConfirmError} />\r\n        ) : (\r\n          <OrderPluginUrlCheckerContainer location={location} verifyMode>\r\n            <View />\r\n          </OrderPluginUrlCheckerContainer>\r\n        )}\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  orderData: getDataOrderPost(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withUserMe,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withScrollToTop(),\r\n  connect(mapStateToProps, {\r\n    resetOrderFrontFull,\r\n    resetOrderPlugin,\r\n    redirectTo,\r\n    getAsyncPayment,\r\n  })\r\n)(PaymentVerificationPage)\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport PaymentErrorsList, { PaymentPdfErrorsList } from '../errors/PaymentErrorsList'\r\n\r\nconst PaymentApi = {\r\n  get: paymentId => ({\r\n    endpoint: ApiEndpoints.GET_PAYMENT,\r\n    type: 'GET',\r\n    params: {\r\n      paymentId,\r\n    },\r\n    errorHandler: PaymentErrorsList,\r\n  }),\r\n\r\n  getPaymentPdfLink: paymentId => ({\r\n    endpoint: ApiEndpoints.GET_PAYMENT_PDF_LINK,\r\n    type: 'GET',\r\n    params: {\r\n      paymentId,\r\n    },\r\n    errorHandler: PaymentPdfErrorsList,\r\n  }),\r\n\r\n  processIrlPayment: (restaurant, check, payment) => ({\r\n    endpoint: ApiEndpoints.POST_PAYMENT,\r\n    type: 'POST',\r\n    body: {\r\n      ...payment,\r\n      irlPayment: {\r\n        amount: check.outstandingBalance,\r\n        type: 'CB',\r\n        externalId: payment.externalId,\r\n      },\r\n    },\r\n    params: {\r\n      restaurantId: restaurant.id,\r\n      checkId: check.id,\r\n    },\r\n    errorHandler: PaymentErrorsList,\r\n  }),\r\n\r\n  processPaymentv2: (restaurantId, paymentMethod, payment, check) => ({\r\n    endpoint: ApiEndpoints.POST_PAYMENT,\r\n    type: 'POST',\r\n    body: {\r\n      ...payment,\r\n      method: paymentMethod,\r\n    },\r\n    params: {\r\n      restaurantId,\r\n      checkId: check.id,\r\n    },\r\n    updateBody: (card, body) => ({\r\n      ...body,\r\n      method: paymentMethod,\r\n      cardId: card?.id,\r\n    }),\r\n    errorHandler: PaymentErrorsList,\r\n  }),\r\n\r\n  postPaymentEmail: (paymentId, body) => ({\r\n    endpoint: ApiEndpoints.POST_PAYMENT_EMAIL,\r\n    type: 'POST',\r\n    params: {\r\n      paymentId,\r\n    },\r\n    body,\r\n    errorHandler: PaymentErrorsList,\r\n  }),\r\n\r\n  getRestaurantHistory: (restaurantId, fromDate, toDate) => ({\r\n    endpoint: ApiEndpoints.PAYMENTS_HISTORY,\r\n    type: 'GET',\r\n    query: {\r\n      restaurantId,\r\n      fromTime: fromDate,\r\n      toTime: toDate,\r\n      limit: 100, // TODO: remove\r\n    },\r\n  }),\r\n}\r\n\r\nexport default PaymentApi\r\n","import PaymentApi from 'pmt-modules/api/calls/PaymentApi'\r\nimport { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { createAction } from 'pmt-modules/redux'\r\n\r\nexport const FetchPaymentPdfLinkAction = createApiEnumAction('PAYMENT::FETCH::PDF_LINK')\r\n\r\nexport const fetchPaymentPdfLink = paymentId =>\r\n  createApiCallAction(FetchPaymentPdfLinkAction, PaymentApi.getPaymentPdfLink(paymentId), {\r\n    paymentId,\r\n  })\r\n\r\nexport const ResetPaymentPdfLinkAction = 'PAYMENT::RESET::PDF_LINK'\r\n\r\nexport const resetPaymentPdfLink = () => createAction(ResetPaymentPdfLinkAction)\r\n","import { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nconst fetchPaymentPdfLinkSelectors = createSimpleSelector(\r\n  state => state.entities.fetchPaymentPdfLink\r\n)\r\n\r\nexport const isFetchingPaymentPdfLink = fetchPaymentPdfLinkSelectors.isFetching\r\nexport const getDataPaymentPdfLink = fetchPaymentPdfLinkSelectors.getData\r\nexport const getErrorPaymentPdfLink = fetchPaymentPdfLinkSelectors.getError\r\n","import { createSimpleReducer } from 'pmt-modules/redux'\r\nimport { FetchPaymentPdfLinkAction, ResetPaymentPdfLinkAction } from './actions'\r\nimport Immutable from 'immutable'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\n\r\nconst resetData = (state, action) => {\r\n  return Immutable.fromJS({})\r\n}\r\n\r\nexport const fetchPaymentPdfLinkReducer = createSimpleReducer(FetchPaymentPdfLinkAction, {\r\n  [ResetPaymentPdfLinkAction]: resetData,\r\n})\r\n","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport OrderApi from 'pmt-modules/api/calls/OrderApi'\r\n\r\n/**\r\n * Dedicated action enum for polling order status on the confirmation page.\r\n * Uses GET /orders/{orderId}\r\n */\r\nexport const GetOrderStatusPollAction = createApiEnumAction('ORDER_STATUS_POLL::GET')\r\n\r\n/**\r\n * Fetch the order to get its current status.\r\n * The order status is located at response.status\r\n */\r\nexport const fetchOrderStatus = orderId =>\r\n  createApiCallAction(\r\n    GetOrderStatusPollAction,\r\n    {\r\n      ...OrderApi.getDetail(orderId),\r\n      query: {},\r\n    },\r\n    {\r\n      orderId,\r\n      resetDataOnRequest: false,\r\n    }\r\n  )\r\n","import { createSimpleSelector } from '../redux'\r\n\r\nconst orderStatusPollSelectors = createSimpleSelector(\r\n  state => state.entities.orderStatusPoll\r\n)\r\n\r\nexport const isFetchingOrderStatus = orderStatusPollSelectors.isFetching\r\nexport const getOrderStatusData = orderStatusPollSelectors.getData\r\nexport const getOrderStatusError = orderStatusPollSelectors.getError\r\n","import { createSimpleReducer } from '../redux'\r\n\r\nimport { GetOrderStatusPollAction } from './actions'\r\n\r\nexport { fetchOrderStatus } from './actions'\r\nexport { isFetchingOrderStatus, getOrderStatusData, getOrderStatusError } from './selectors'\r\n\r\nexport const orderStatusPollReducer = createSimpleReducer(GetOrderStatusPollAction)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { fetchOrderStatus, getOrderStatusData, getOrderStatusError, isFetchingOrderStatus } from 'pmt-modules/orderStatusPoll'\r\nimport SendIcon from '@material-ui/icons/Send'\r\nimport InboxIcon from '@material-ui/icons/Inbox'\r\nimport HourglassEmptyIcon from '@material-ui/icons/HourglassEmpty'\r\nimport DoneAllIcon from '@material-ui/icons/DoneAll'\r\nimport LocalShippingIcon from '@material-ui/icons/LocalShipping'\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle'\r\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline'\r\nimport BlockIcon from '@material-ui/icons/Block'\r\nimport RefreshIcon from '@material-ui/icons/Refresh'\r\n\r\nconst STATUS_MAP = {\r\n  SENT: { Icon: SendIcon, labelKey: 'order.confirm.status.SENT', isError: false },\r\n  RECEIVED: { Icon: InboxIcon, labelKey: 'order.confirm.status.RECEIVED', isError: false },\r\n  PRODUCING: { Icon: HourglassEmptyIcon, labelKey: 'order.confirm.status.PRODUCING', isError: false },\r\n  READY: { Icon: DoneAllIcon, labelKey: 'order.confirm.status.READY', isError: false },\r\n  IN_DELIVERY: { Icon: LocalShippingIcon, labelKey: 'order.confirm.status.IN_DELIVERY', isError: false },\r\n  FINALIZED: { Icon: CheckCircleIcon, labelKey: 'order.confirm.status.FINALIZED', isError: false },\r\n  DELIVERED: { Icon: CheckCircleIcon, labelKey: 'order.confirm.status.FINALIZED', isError: false },\r\n  CANCELED: { Icon: BlockIcon, labelKey: 'order.confirm.status.CANCELED', isError: false },\r\n  FAILED: { Icon: ErrorOutlineIcon, labelKey: 'order.confirm.status.FAILED', isError: true },\r\n}\r\n\r\nconst TERMINAL_STATUSES = ['FINALIZED', 'DELIVERED', 'CANCELED', 'FAILED']\r\n\r\nconst POLL_INTERVAL_MS = 10_000\r\nconst POLL_MAX_DURATION_MS = 30 * 60 * 1_000 // 30 minutes\r\n\r\nconst styles = theme => ({\r\n  '@keyframes readyPulse': {\r\n    '0%':   { boxShadow: `0 0 0 0px ${theme.palette.primary.main}66` },\r\n    '60%':  { boxShadow: `0 0 0 14px ${theme.palette.primary.main}00` },\r\n    '100%': { boxShadow: `0 0 0 0px ${theme.palette.primary.main}00` },\r\n  },\r\n  '@keyframes readyBounce': {\r\n    '0%, 100%': { transform: 'scale(1)' },\r\n    '30%':      { transform: 'scale(1.18)' },\r\n    '60%':      { transform: 'scale(0.95)' },\r\n  },\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    paddingBottom: theme.spacing(2),\r\n    marginBottom: theme.spacing(2),\r\n    borderBottom: `1px solid ${theme.pmt.colors.grey300}`,\r\n  },\r\n  iconCircle: {\r\n    width: 72,\r\n    height: 72,\r\n    borderRadius: '50%',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    marginBottom: theme.spacing(1.5),\r\n  },\r\n  iconCircleNormal: {\r\n    backgroundColor: theme.palette.primary.main,\r\n    color: '#fff',\r\n    boxShadow: `0 0 0 6px ${theme.palette.primary.main}33`,\r\n  },\r\n  iconCircleReady: {\r\n    backgroundColor: theme.palette.primary.main,\r\n    color: '#fff',\r\n    animation: '$readyPulse 1.6s ease-out infinite',\r\n  },\r\n  iconCircleError: {\r\n    backgroundColor: theme.pmt.status.error,\r\n    color: '#fff',\r\n    boxShadow: `0 0 0 6px ${theme.pmt.status.error}33`,\r\n  },\r\n  iconReady: {\r\n    animation: '$readyBounce 1.6s ease-in-out infinite',\r\n  },\r\n  label: {\r\n    textAlign: 'center',\r\n    color: theme.palette.primary.main,\r\n    fontWeight: 700,\r\n  },\r\n  labelError: {\r\n    textAlign: 'center',\r\n    color: theme.pmt.status.error,\r\n    fontWeight: 700,\r\n  },\r\n  expiredNotice: {\r\n    marginTop: theme.spacing(1),\r\n    textAlign: 'center',\r\n    color: theme.pmt.colors.grey600,\r\n    fontSize: 12,\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    gap: theme.spacing(0.5),\r\n    cursor: 'pointer',\r\n  },\r\n  expiredIcon: {\r\n    fontSize: 14,\r\n  },\r\n})\r\n\r\nclass OrderStatusDisplay extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    this.state = { pollingExpired: false }\r\n    this.handleVisibilityChange = this.handleVisibilityChange.bind(this)\r\n  }\r\n\r\n  componentDidMount() {\r\n    const { orderId, initialStatus } = this.props\r\n    if (!orderId) return\r\n\r\n    // not polling if its already a terminal status\r\n    if (initialStatus && TERMINAL_STATUSES.includes(initialStatus)) return\r\n\r\n    // start polling after POLL_INTERVAL_MS\r\n\r\n    document.addEventListener('visibilitychange', this.handleVisibilityChange)\r\n\r\n    this.pollingInterval = setInterval(() => {\r\n      if (document.hidden) return\r\n\r\n      const { orderStatusData, orderStatusError } = this.props\r\n      const status = orderStatusData?.status\r\n      if (orderStatusError || (status && TERMINAL_STATUSES.includes(status))) {\r\n        this.stopPolling()\r\n        return\r\n      }\r\n      this.props.fetchOrderStatus(orderId)\r\n    }, POLL_INTERVAL_MS)\r\n\r\n    this.pollingTimeout = setTimeout(() => {\r\n      this.stopPolling()\r\n      this.setState({ pollingExpired: true })\r\n    }, POLL_MAX_DURATION_MS)\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    this.stopPolling()\r\n    document.removeEventListener('visibilitychange', this.handleVisibilityChange)\r\n  }\r\n\r\n  stopPolling() {\r\n    clearInterval(this.pollingInterval)\r\n    clearTimeout(this.pollingTimeout)\r\n    this.pollingInterval = null\r\n    this.pollingTimeout = null\r\n  }\r\n  handleVisibilityChange() {\r\n    if (!document.hidden && this.pollingInterval) {\r\n      const { orderStatusData, orderStatusError } = this.props\r\n      const status = orderStatusData?.status\r\n      if (!orderStatusError && (!status || !TERMINAL_STATUSES.includes(status))) {\r\n        this.props.fetchOrderStatus(this.props.orderId)\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { classes, orderStatusData, orderStatusError, initialStatus } = this.props\r\n    const { pollingExpired } = this.state\r\n\r\n    const status = orderStatusData?.status || initialStatus\r\n    const statusConfig = STATUS_MAP[status]\r\n\r\n    if (orderStatusError || !status || !statusConfig) {\r\n      return null\r\n    }\r\n\r\n    const { Icon, labelKey, isError } = statusConfig\r\n    const isReady = status === 'READY'\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <div\r\n          className={`${classes.iconCircle} ${\r\n            isError\r\n              ? classes.iconCircleError\r\n              : isReady\r\n              ? classes.iconCircleReady\r\n              : classes.iconCircleNormal\r\n          }`}\r\n        >\r\n          <Icon\r\n            style={{ fontSize: 36 }}\r\n            className={isReady ? classes.iconReady : undefined}\r\n          />\r\n        </div>\r\n        <TypographyCustom\r\n          type=\"144\"\r\n          component=\"p\"\r\n          className={isError ? classes.labelError : classes.label}\r\n        >\r\n          {tr(labelKey)}\r\n        </TypographyCustom>\r\n        {pollingExpired && (\r\n          <span\r\n            className={classes.expiredNotice}\r\n            onClick={() => window.location.reload()}\r\n          >\r\n            <RefreshIcon className={classes.expiredIcon} />\r\n            {tr('order.confirm.status.refresh_notice')}\r\n          </span>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  orderStatusData: getOrderStatusData(state),\r\n  orderStatusError: getOrderStatusError(state),\r\n  isFetchingOrderStatus: isFetchingOrderStatus(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  { fetchOrderStatus }\r\n)(withStyles(styles)(OrderStatusDisplay))\r\n","import React, { Fragment } from 'react'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { CardSection } from 'pmt-ui/Card'\r\nimport OrderStatusDisplay from 'components/OrderStatusDisplay'\r\n\r\nimport PlaceIcon from '@material-ui/icons/Place'\r\nimport ScheduleIcon from '@material-ui/icons/Schedule'\r\nimport LocalDiningIcon from '@material-ui/icons/LocalDining'\r\n\r\nconst styles = theme => ({\r\n  '@keyframes orderNumberPop': {\r\n    '0%': { opacity: 0, transform: 'scale(0.8)' },\r\n    '60%': { transform: 'scale(1.05)' },\r\n    '100%': { opacity: 1, transform: 'scale(1)' },\r\n  },\r\n  orderNumberBlock: {\r\n    textAlign: 'center',\r\n    marginBottom: theme.spacing(2.5),\r\n    animation: '$orderNumberPop 0.5s ease-out 0.4s both',\r\n  },\r\n  orderNumberLabel: {\r\n    color: theme.pmt.colors.grey600,\r\n    marginBottom: theme.spacing(0.5),\r\n    letterSpacing: '0.5px',\r\n    textTransform: 'uppercase',\r\n    fontSize: '12px !important',\r\n    fontWeight: '600 !important',\r\n  },\r\n  orderNumberValue: {\r\n    fontFamily: \"'Lato', monospace\",\r\n    letterSpacing: '2px',\r\n    color: theme.palette.text.primary,\r\n    wordWrap: 'break-word',\r\n  },\r\n  orderNumberMain: {\r\n    fontSize: 32,\r\n    fontWeight: 400,\r\n    color: theme.pmt.colors.grey600,\r\n  },\r\n  orderNumberHighlight: {\r\n    fontSize: 56,\r\n    fontWeight: 700,\r\n    color: theme.palette.primary.main,\r\n  },\r\n  infoRow: {\r\n    display: 'flex',\r\n    alignItems: 'flex-start',\r\n    gap: theme.spacing(1.5),\r\n    padding: theme.spacing(1.5, 0),\r\n    '& + &': {\r\n      borderTop: `1px solid ${theme.pmt.colors.grey100}`,\r\n    },\r\n  },\r\n  infoIcon: {\r\n    color: theme.palette.primary.main,\r\n    fontSize: 20,\r\n    marginTop: 2,\r\n    flexShrink: 0,\r\n  },\r\n  infoContent: {\r\n    flex: 1,\r\n    minWidth: 0,\r\n  },\r\n  infoLabel: {\r\n    fontWeight: '600 !important',\r\n    lineHeight: '1.4 !important',\r\n  },\r\n  infoSub: {\r\n    color: theme.pmt.colors.grey600,\r\n    marginTop: theme.spacing(0.5),\r\n    lineHeight: '1.4 !important',\r\n  },\r\n})\r\n\r\nconst GeneralDatasCard = ({\r\n  orderProperties,\r\n  dueDate,\r\n  orderId,\r\n  orderApiId,\r\n  initialOrderStatus,\r\n  orderAppConfig,\r\n  restaurant,\r\n  classes,\r\n}) => (\r\n  <CardSection ariaLabel={tr('order.confirm.order_details_aria_label')} animationDelay={0.2}>\r\n    {orderApiId && (\r\n      <OrderStatusDisplay orderId={orderApiId} initialStatus={initialOrderStatus} />\r\n    )}\r\n\r\n    {/* Order number - prominent display */}\r\n    <div className={classes.orderNumberBlock} aria-label={`${tr('order.confirm.order_number')} ${orderId}`}>\r\n      <TypographyCustom type=\"124\" component=\"p\" className={classes.orderNumberLabel}>\r\n        {tr('order.confirm.order_number')}\r\n      </TypographyCustom>\r\n      <div className={classes.orderNumberValue} aria-hidden=\"true\">\r\n        <span className={classes.orderNumberMain}>{orderId.slice(0, -3)}</span>\r\n        <span className={classes.orderNumberHighlight}>{orderId.slice(-3)}</span>\r\n      </div>\r\n    </div>\r\n\r\n    {/* Order mode info */}\r\n    <div className={classes.infoRow}>\r\n      <LocalDiningIcon className={classes.infoIcon} aria-hidden=\"true\" />\r\n      <div className={classes.infoContent}>\r\n        <TypographyCustom type=\"147\" component=\"p\" className={classes.infoLabel}>\r\n          {orderProperties.isDelivery\r\n            ? tr('order.global.delivery')\r\n            : orderProperties.isOnSite\r\n            ? tr('order.global.on_site')\r\n            : tr('order.global.take_away')}\r\n          {orderProperties.isOnSite && orderAppConfig.hasTableNumber && (\r\n            <Fragment>\r\n              {' — '}\r\n              {tr('order.global.on_site_table_number', {\r\n                tableNumber: orderProperties.tableNumber,\r\n              })}\r\n            </Fragment>\r\n          )}\r\n        </TypographyCustom>\r\n        {orderProperties.isDelivery && (\r\n          <Fragment>\r\n            <TypographyCustom type=\"144\" component=\"p\" className={classes.infoSub}>\r\n              {orderProperties.deliveryAddress.formattedAddress}\r\n            </TypographyCustom>\r\n            {!isNil(orderProperties.deliveryAddress.complement) && (\r\n              <TypographyCustom\r\n                type=\"144\"\r\n                component=\"p\"\r\n                className={classes.infoSub}\r\n                style={{ fontStyle: 'italic' }}\r\n              >\r\n                {orderProperties.deliveryAddress.complement}\r\n              </TypographyCustom>\r\n            )}\r\n          </Fragment>\r\n        )}\r\n        {orderProperties.isOnSite && orderAppConfig.hasTableNumber && (\r\n          <TypographyCustom type=\"144\" component=\"p\" className={classes.infoSub}>\r\n            {tr('order.confirm.on_site.information')}\r\n          </TypographyCustom>\r\n        )}\r\n      </div>\r\n    </div>\r\n\r\n    {/* Restaurant info */}\r\n    {(!orderProperties.isOnSite || !orderAppConfig.hasTableNumber) && (\r\n      <div className={classes.infoRow}>\r\n        <PlaceIcon className={classes.infoIcon} aria-hidden=\"true\" />\r\n        <div className={classes.infoContent}>\r\n          <TypographyCustom type=\"147\" component=\"p\" className={classes.infoLabel}>\r\n            {restaurant.name}\r\n          </TypographyCustom>\r\n          {!orderProperties.isDelivery && (\r\n            <TypographyCustom type=\"144\" component=\"p\" className={classes.infoSub}>\r\n              {restaurant.address.street}{' '}\r\n              {`${restaurant.address.postCode} ${restaurant.address.city}`}\r\n            </TypographyCustom>\r\n          )}\r\n        </div>\r\n      </div>\r\n    )}\r\n\r\n    {/* Due date */}\r\n    {(!orderProperties.isOnSite || !orderAppConfig.hasTableNumber) && (\r\n      <div className={classes.infoRow}>\r\n        <ScheduleIcon className={classes.infoIcon} aria-hidden=\"true\" />\r\n        <div className={classes.infoContent}>\r\n          <TypographyCustom type=\"147\" component=\"p\" className={classes.infoLabel}>\r\n            {dueDate}\r\n          </TypographyCustom>\r\n        </div>\r\n      </div>\r\n    )}\r\n  </CardSection>\r\n)\r\n\r\nexport default withStyles(styles)(GeneralDatasCard)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet ActionCheckCircle = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\r\n  </SvgIcon>\r\n)\r\nActionCheckCircle = pure(ActionCheckCircle)\r\nActionCheckCircle.displayName = 'ActionCheckCircle'\r\nActionCheckCircle.muiName = 'SvgIcon'\r\n\r\nexport default ActionCheckCircle\r\n","import classNames from 'classnames'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getAppConfigFrontSettings } from 'pmt-modules/orderPlugin'\r\nimport { getOrderPreview, getOrderPreviewVerifications } from 'pmt-modules/orderPreview'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport ActionCheckCircle from 'pmt-ui/svg-icons/action/check-circle'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\nimport ToggleContainer from 'pmt-ui/ToggleContainer'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nimport { ButtonLink } from '../../../components/Button'\r\nimport { CartFooter, CartItemList } from '../../../components/Cart'\r\nimport { CardSection } from 'pmt-ui/Card'\r\n\r\nconst styles = theme => ({\r\n  totalRow: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    marginBottom: theme.spacing(1.5),\r\n  },\r\n  totalLabel: {\r\n    fontWeight: '600 !important',\r\n  },\r\n  totalValue: {\r\n    fontWeight: '700 !important',\r\n    fontSize: '18px !important',\r\n  },\r\n  orderModeLabelAndTotal:{ // \"total to take away\"\r\n    fontSize: '16px !important',\r\n    fontWeight: 'normal',\r\n  },\r\n  tipsRow: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    marginBottom: theme.spacing(1.5),\r\n    color: theme.pmt.colors.grey600,\r\n  },\r\n  statusBadge: {\r\n    display: 'inline-flex',\r\n    alignItems: 'center',\r\n    gap: theme.spacing(1),\r\n    padding: theme.spacing(1, 2),\r\n    borderRadius: 12,\r\n    marginBottom: theme.spacing(1),\r\n    width: '100%',\r\n  },\r\n  statusBadgePaid: {\r\n    background: `linear-gradient(135deg, ${theme.pmt.colors.green500}15, ${theme.pmt.colors.green800}10)`,\r\n    border: `1px solid ${theme.pmt.colors.green800}30`,\r\n    color: theme.pmt.colors.green800,\r\n  },\r\n  statusBadgeWarning: {\r\n    background: `linear-gradient(135deg, ${theme.pmt.status.warning}10, ${theme.pmt.status.warning}05)`,\r\n    border: `1px solid ${theme.pmt.status.warning}30`,\r\n    color: theme.pmt.status.warning,\r\n  },\r\n  statusIcon: {\r\n    fontSize: 20,\r\n    flexShrink: 0,\r\n  },\r\n  statusText: {\r\n    fontWeight: '600 !important',\r\n    lineHeight: '1.4 !important',\r\n  },\r\n  divider: {\r\n    border: 0,\r\n    borderBottom: `1px solid ${theme.pmt.colors.grey100}`,\r\n    margin: theme.spacing(2, 0),\r\n  },\r\n  detailToggle: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    gap: theme.spacing(0.5),\r\n    cursor: 'pointer',\r\n  },\r\n  expandIcon: {\r\n    fontSize: 20,\r\n    transition: 'transform 0.3s ease',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  expandIconOpen: {\r\n    transform: 'rotate(180deg)',\r\n  },\r\n  detailContent: {\r\n    marginTop: theme.spacing(2),\r\n    animation: '$slideDown 0.3s ease-out',\r\n  },\r\n  '@keyframes slideDown': {\r\n    '0%': { opacity: 0, transform: 'translateY(-8px)' },\r\n    '100%': { opacity: 1, transform: 'translateY(0)' },\r\n  },\r\n})\r\n\r\nconst PaymentDatasCard = ({\r\n  appConfigPreset,\r\n  orderProperties,\r\n  frontSettings,\r\n  cartItems,\r\n  cartData,\r\n  orderData,\r\n  orderPreview,\r\n  restaurant,\r\n  orderPreviewVerifications,\r\n  route,\r\n  classes,\r\n}) => (\r\n  <CardSection ariaLabel={tr('order.confirm.payment_aria_label')} animationDelay={0.35}>\r\n    {/* Total price */}\r\n    {frontSettings.display.totalPrices && (\r\n      <React.Fragment>\r\n        <div className={classes.totalRow}>\r\n          <TypographyCustom type=\"164\" component=\"span\" className={classes.totalLabel}>\r\n            {tr('order.confirm.total')}\r\n          </TypographyCustom>\r\n          <TypographyCustom type=\"167\" component=\"span\" className={classes.totalValue}>\r\n            {formatPriceWithCurrency(\r\n              orderData.totalPrice -\r\n                get(orderPreviewVerifications, 'userAccount.subsidies.grantAmount', 0)\r\n            )}\r\n          </TypographyCustom>\r\n        </div>\r\n\r\n        {orderData.tips > 0 && (\r\n          <div className={classes.tipsRow}>\r\n            <TypographyCustom type=\"144\" component=\"span\">\r\n              {tr('order.confirm.including_tips')}\r\n            </TypographyCustom>\r\n            <TypographyCustom type=\"144\" component=\"span\">\r\n              {formatPriceWithCurrency(orderData.tips)}\r\n            </TypographyCustom>\r\n          </div>\r\n        )}\r\n      </React.Fragment>\r\n    )}\r\n\r\n    {/* Payment status badge */}\r\n    {orderData.totalPrice > 0 && (\r\n      <React.Fragment>\r\n        {orderProperties.payment.isCreditCardMethod ||\r\n        orderProperties.payment.isUserAccountMethod ? (\r\n          <div\r\n            className={classNames(classes.statusBadge, classes.statusBadgePaid)}\r\n            role=\"status\"\r\n            aria-label={tr('order.confirm.already_paid')}\r\n          >\r\n            <ActionCheckCircle className={classes.statusIcon} />\r\n            <TypographyCustom type=\"147\" component=\"span\" className={classes.statusText}>\r\n              {tr('order.confirm.already_paid')}\r\n            </TypographyCustom>\r\n          </div>\r\n        ) : (\r\n          orderProperties.payment.isIrlMethod && (\r\n            <div\r\n              className={classNames(classes.statusBadge, classes.statusBadgeWarning)}\r\n              role=\"status\"\r\n              aria-label={\r\n                frontSettings.display.totalPrices\r\n                  ? tr(`order.confirm.left_to_pay.${orderProperties.mode}`, {\r\n                      amount: orderData.totalPriceFormatted,\r\n                    })\r\n                  : tr(`order.confirm.total_to_pay.${orderProperties.mode}`)\r\n              }\r\n            >\r\n              <ActionInfoOutline className={classes.statusIcon} />\r\n              <TypographyCustom type=\"147\" component=\"span\" className={classes.statusText}>\r\n                {frontSettings.display.totalPrices\r\n                  ? tr(`order.confirm.left_to_pay.${orderProperties.mode}`, {\r\n                      amount: orderData.totalPriceFormatted,\r\n                    })\r\n                  : tr(`order.confirm.total_to_pay.${orderProperties.mode}`)}\r\n              </TypographyCustom>\r\n            </div>\r\n          )\r\n        )}\r\n        <hr className={classes.divider} />\r\n      </React.Fragment>\r\n    )}\r\n\r\n    {/* Order details toggle */}\r\n    <ToggleContainer defaultOpen={false}>\r\n      {({ isOpen, toggle }) => (\r\n        <React.Fragment>\r\n          <div\r\n            className={classes.detailToggle}\r\n            onClick={() => {\r\n              if (!isOpen) {\r\n                EventManager.dispatch(EventManager.Events.ON_CONFIRM_ORDER_DETAIL)\r\n              }\r\n              toggle()\r\n            }}\r\n            role=\"button\"\r\n            tabIndex={0}\r\n            aria-expanded={isOpen}\r\n            aria-controls=\"order-detail-content\"\r\n            aria-label={tr('order.confirm.order_detail')}\r\n            onKeyDown={e => {\r\n              if (e.key === 'Enter' || e.key === ' ') {\r\n                e.preventDefault()\r\n                if (!isOpen) {\r\n                  EventManager.dispatch(EventManager.Events.ON_CONFIRM_ORDER_DETAIL)\r\n                }\r\n                toggle()\r\n              }\r\n            }}\r\n          >\r\n            <ButtonLink\r\n              component=\"span\"\r\n              label={tr('order.confirm.order_detail')}\r\n              disabled={isNil(orderProperties.mode)}\r\n              tabIndex={-1}\r\n            />\r\n            <ExpandMoreIcon\r\n              className={classNames(classes.expandIcon, {\r\n                [classes.expandIconOpen]: isOpen,\r\n              })}\r\n              aria-hidden=\"true\"\r\n            />\r\n          </div>\r\n\r\n          {isOpen && (\r\n            <div className={classes.detailContent} id=\"order-detail-content\">\r\n              {!isNil(cartItems) ? (\r\n                <React.Fragment>\r\n                  <CartItemList\r\n                    enabledClickableItems={false}\r\n                    enabledQuantityChange={false}\r\n                    fromRoute={route}\r\n                    itemList={cartItems}\r\n                    type={CartItemList.Type.SMALL}\r\n                    appConfigPreset={appConfigPreset}\r\n                    orderModifiers={orderData.modifiers}\r\n                  />\r\n                  <CartFooter\r\n                    comment={cartData.comment}\r\n                    displayMinimumPricesForFree={false}\r\n                    enabledSubmitCart={false}\r\n                    fees={orderData.fees}\r\n                    itemList={cartItems}\r\n                    minimumPrice={cartData.minimumPrice}\r\n                    minimumPriceFormatted={cartData.minimumPriceFormatted}\r\n                    restaurant={restaurant}\r\n                    orderProperties={orderProperties}\r\n                    totalCartPrice={cartData.totalCartPrice}\r\n                    totalCartPriceFormatted={cartData.totalCartPriceFormatted}\r\n                    // total including taxes + display of tax amount (if provided by the API, aka for USA only)\r\n                    totalCartPriceAndFeesFormatted={orderProperties.totalCartPriceAndFeesFormatted}\r\n                    totalTaxAmount={orderProperties.totalTaxAmount}\r\n                    totalTaxAmountFormatted={orderProperties.totalTaxAmountFormatted}\r\n                    type={CartFooter.Type.SMALL}\r\n                    orderModifiers={orderData.modifiers}\r\n                    classes={{orderModeLabelAndTotal: classes.orderModeLabelAndTotal}}\r\n                  />\r\n                </React.Fragment>\r\n              ) : (\r\n                <LoadingBlock\r\n                  show\r\n                  classes={{\r\n                    loadingBlock: 'u-marginTop20',\r\n                  }}\r\n                />\r\n              )}\r\n            </div>\r\n          )}\r\n        </React.Fragment>\r\n      )}\r\n    </ToggleContainer>\r\n  </CardSection>\r\n)\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  orderPreview: getOrderPreview(state),\r\n  orderPreviewVerifications: getOrderPreviewVerifications(state),\r\n})\r\n\r\nexport default connect(mapStateToProps, {})(withStyles(styles)(PaymentDatasCard))\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\nimport { tr, trOptional } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle'\r\n\r\nimport ErrorLayout from '../../components/OrderPage/components/ErrorLayout'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\n\r\nimport GeneralDatasCard from './components/GeneralDatasCard'\r\nimport PaymentDatasCard from './components/PaymentDatasCard'\r\nimport Button, { ButtonLink } from '../../components/Button'\r\nimport PictureAsPdfIcon from '@material-ui/icons/PictureAsPdf'\r\n\r\nconst styles = theme => ({\r\n  '@keyframes fadeInUp': {\r\n    '0%': { opacity: 0, transform: 'translateY(16px)' },\r\n    '100%': { opacity: 1, transform: 'translateY(0)' },\r\n  },\r\n  view: {\r\n    minHeight: '100vh',\r\n  },\r\n  pageContainer: {\r\n    width: '100%',\r\n    maxWidth: 480,\r\n    margin: '0 auto',\r\n    padding: theme.spacing(4, 2),\r\n    [theme.breakpoints.down('sm')]: {\r\n      padding: theme.spacing(2, 2),\r\n    },\r\n  },\r\n  '@keyframes checkBounce': {\r\n    '0%': { transform: 'scale(0)' },\r\n    '50%': { transform: 'scale(1.15)' },\r\n    '70%': { transform: 'scale(0.95)' },\r\n    '100%': { transform: 'scale(1)' },\r\n  },\r\n  '@keyframes ringPulse': {\r\n    '0%': { transform: 'scale(1)', opacity: 0.4 },\r\n    '100%': { transform: 'scale(1.8)', opacity: 0 },\r\n  },\r\n  bannerRoot: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    padding: theme.spacing(2, 2),\r\n    marginBottom: theme.spacing(3),\r\n    animation: '$fadeInUp 0.6s ease-out',\r\n  },\r\n  bannerTitle: {\r\n    animation: '$fadeInUp 0.6s ease-out 0.2s both',\r\n    lineHeight: '1.3 !important',\r\n  },\r\n  bannerSubtitle: {\r\n    animation: '$fadeInUp 0.6s ease-out 0.35s both',\r\n    marginTop: theme.spacing(1.5),\r\n    color: theme.pmt.colors.grey600,\r\n    lineHeight: '1.4 !important',\r\n  },\r\n  cardSpacing: {\r\n    marginBottom: theme.spacing(2.5),\r\n  },\r\n  icon: {\r\n    float: 'left',\r\n    width: 20,\r\n    marginRight: 10,\r\n  },\r\n  iconGreen: {\r\n    color: theme.pmt.status.valid,\r\n  },\r\n  iconWarning: {\r\n    color: theme.pmt.status.warning,\r\n  },\r\n  iconText: {\r\n    float: 'left',\r\n    width: 'calc(100% - 30px)',\r\n    lineHeight: '24px',\r\n  },\r\n  hr: {\r\n    border: 0,\r\n    borderBottom: `1px solid ${theme.pmt.colors.grey300}`,\r\n    marginTop: theme.spacing(2),\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey600,\r\n  },\r\n  italic: {\r\n    fontStyle: 'italic',\r\n  },\r\n  uppercase: {\r\n    textTransform: 'uppercase',\r\n  },\r\n  mainColor: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  cursorPointer: {\r\n    cursor: 'pointer',\r\n  },\r\n  actionsContainer: {\r\n    marginTop: theme.spacing(4),\r\n    textAlign: 'center',\r\n    animation: '$fadeInUp 0.5s ease-out 0.6s both',\r\n  },\r\n  downloadBtn: {\r\n    marginTop: theme.spacing(2),\r\n    textAlign: 'center',\r\n    animation: '$fadeInUp 0.5s ease-out 0.5s both',\r\n  },\r\n  returnBtn: {\r\n    marginTop: theme.spacing(1.5),\r\n  },\r\n  focusVisible: {\r\n    '&:focus-visible': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: 2,\r\n    },\r\n  },\r\n})\r\n\r\nconst View = ({\r\n  isIncognito,\r\n  appConfigPreset,\r\n  classes,\r\n  frontSettings,\r\n  isFetchingRestaurant,\r\n  paymentPdfLink,\r\n  errorPaymentPdfLink,\r\n  orderAppConfig,\r\n  postedOrderData,\r\n  restaurant,\r\n  onRedirect,\r\n  route,\r\n  isFromWebApp,\r\n}) => {\r\n  const tmpStrReplace = str =>\r\n    // eslint-disable-next-line no-template-curly-in-string\r\n    str.replace('${restaurant.phonePub}', postedOrderData.orderProperties.restaurant?.phonePub)\r\n\r\n  const getInstructionsText = () => {\r\n    if (\r\n      postedOrderData.orderProperties.isOnSite &&\r\n      !isNil(trOptional('order_ON_SITE_instructions'))\r\n    ) {\r\n      return tmpStrReplace(trOptional('order_ON_SITE_instructions'))\r\n    }\r\n    if (\r\n      postedOrderData.orderProperties.isTakeAway &&\r\n      !isNil(trOptional('order_TAKE_AWAY_instructions'))\r\n    ) {\r\n      return tmpStrReplace(trOptional('order_TAKE_AWAY_instructions'))\r\n    }\r\n    if (\r\n      postedOrderData.orderProperties.isDelivery &&\r\n      !isNil(trOptional('order_DELIVERY_instructions'))\r\n    ) {\r\n      return tmpStrReplace(trOptional('order_DELIVERY_instructions'))\r\n    }\r\n    return null\r\n  }\r\n\r\n  const instructionsText = getInstructionsText()\r\n\r\n  const bannerRef = React.useRef(null)\r\n\r\n  React.useEffect(() => {\r\n    if (!isFetchingRestaurant && !isNil(restaurant) && bannerRef.current) {\r\n      const heading = bannerRef.current.querySelector('h1')\r\n      if (heading) {\r\n        heading.focus()\r\n      }\r\n    }\r\n  }, [isFetchingRestaurant, restaurant])\r\n\r\n  return (\r\n    <main className={classes.view} aria-label={tr('order.confirm.page_aria_label')}>\r\n      <div className={classes.pageContainer}>\r\n        {isFetchingRestaurant ? (\r\n          <div className=\"u-relative\" style={{ minHeight: 200 }} role=\"progressbar\" aria-label={tr('order.confirm.loading')}>\r\n            <LoadingBlockWrapper show />\r\n          </div>\r\n        ) : isNil(restaurant) ? (\r\n          <ErrorLayout error={tr('order.confirm.error.required_data')} />\r\n        ) : (\r\n          <React.Fragment>\r\n            <div\r\n              ref={bannerRef}\r\n              className={classes.bannerRoot}\r\n              role=\"status\"\r\n              aria-live=\"polite\"\r\n              aria-atomic=\"true\"\r\n            >\r\n              <TypographyCustom\r\n                type=\"247\"\r\n                component=\"h1\"\r\n                tabIndex={-1}\r\n                align=\"center\"\r\n                className={classes.bannerTitle}\r\n              >\r\n                {tr('order.confirm.title')}\r\n              </TypographyCustom>\r\n              {instructionsText && (\r\n                <TypographyCustom\r\n                  type=\"164\"\r\n                  component=\"p\"\r\n                  align=\"center\"\r\n                  className={classes.bannerSubtitle}\r\n                >\r\n                  {instructionsText}\r\n                </TypographyCustom>\r\n              )}\r\n            </div>\r\n\r\n            <div className={classes.cardSpacing}>\r\n              <GeneralDatasCard\r\n                restaurant={restaurant}\r\n                orderAppConfig={orderAppConfig}\r\n                orderProperties={postedOrderData.orderProperties}\r\n                dueDate={postedOrderData.orderData.dueDateFormatted}\r\n                classes={classes}\r\n                orderId={postedOrderData.orderData.orderId}\r\n                orderApiId={postedOrderData.orderData.id}\r\n                initialOrderStatus={postedOrderData.orderData.status}\r\n              />\r\n            </div>\r\n\r\n            <div className={classes.cardSpacing}>\r\n              <PaymentDatasCard\r\n                appConfigPreset={appConfigPreset}\r\n                route={route}\r\n                cartData={postedOrderData.cartData}\r\n                cartItems={postedOrderData.cartItems}\r\n                orderProperties={postedOrderData.orderProperties}\r\n                orderData={postedOrderData.orderData}\r\n                restaurant={restaurant}\r\n                classes={classes}\r\n              />\r\n            </div>\r\n\r\n            {isIncognito && postedOrderData.orderData.paymentId && (\r\n              <React.Fragment>\r\n                {paymentPdfLink && (\r\n                  <div className={classes.downloadBtn}>\r\n                    <Button\r\n                      icon={<PictureAsPdfIcon />}\r\n                      href={paymentPdfLink}\r\n                      target=\"_blank\"\r\n                      aria-label={tr('order.confirm.download_receipt')}\r\n                    >\r\n                      {tr('order.confirm.download_receipt')}\r\n                    </Button>\r\n                  </div>\r\n                )}\r\n                <ErrorBlock error={errorPaymentPdfLink} />\r\n              </React.Fragment>\r\n            )}\r\n\r\n            <nav className={classes.actionsContainer} aria-label={tr('order.confirm.actions_aria_label')}>\r\n              {frontSettings.redirectUri && isFromWebApp ? (\r\n                <Button\r\n                  onClick={onRedirect}\r\n                  size=\"large\"\r\n                  className={classes.focusVisible}\r\n                  aria-label={tr('order.confirm.return_to_web_customer')}\r\n                >\r\n                  {tr('order.confirm.return_to_web_customer')}\r\n                </Button>\r\n              ) : (\r\n                <ButtonLink\r\n                  onClick={onRedirect}\r\n                  size=\"large\"\r\n                  className={classNames(classes.returnBtn, classes.focusVisible)}\r\n                  aria-label={tr('order.confirm.return_to_site')}\r\n                >\r\n                  {tr('order.confirm.return_to_site')}\r\n                </ButtonLink>\r\n              )}\r\n            </nav>\r\n          </React.Fragment>\r\n        )}\r\n      </div>\r\n    </main>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { getAuthorizeAppData } from 'pmt-modules/authApp'\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { resetFullGeolocation } from 'pmt-modules/geolocation'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport { resetOrderFront, resetOrderFrontFull } from 'pmt-modules/orderFront'\r\nimport {\r\n  withOrderProperties,\r\n  OrderPluginUrlCheckerContainer,\r\n  resetOrderPlugin,\r\n  getAppConfigFrontSettings,\r\n  fromApp,\r\n} from 'pmt-modules/orderPlugin'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { resetCart } from 'pmt-modules/cart'\r\nimport { withUserMe } from 'pmt-modules/userMe'\r\nimport { resetCatalog } from 'pmt-modules/catalog'\r\nimport { getAuthenticatedUser } from 'pmt-modules/authenticatedUser/selectors'\r\nimport {\r\n  isFetchingPaymentPdfLink,\r\n  fetchPaymentPdfLink,\r\n  getDataPaymentPdfLink,\r\n  resetPaymentPdfLink,\r\n  getErrorPaymentPdfLink,\r\n} from 'pmt-modules/payment/pdf'\r\nimport UserType from 'pmt-modules/user/constants/UserType'\r\n\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\n\r\nimport { getCallbackUri, CALLBACK_EVENTS } from 'pmt-utils/url'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\nimport View from './View'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass ConfirmPage extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (isEmpty(get(props, 'orderProperties.postedOrderData', null))) {\r\n      props.redirectTo(\r\n        props.appConfig.order.modes.length > 1\r\n          ? getRoute('ORDER__MODE')\r\n          : getRoute('ORDER__STORE_LOCATOR')\r\n      )\r\n    }\r\n\r\n    this.props.resetPaymentPdfLink()\r\n  }\r\n\r\n  componentDidMount() {\r\n    if (\r\n      this.hasRedirectUriDefined() &&\r\n      this.props.frontSettings.automaticRedirectionDelayInSeconds\r\n    ) {\r\n      // delay defined and > 0\r\n      this.automaticRedirectionTimeout = setTimeout(() => {\r\n        this.handleRedirect()\r\n      }, this.props.frontSettings.automaticRedirectionDelayInSeconds * 1000)\r\n    }\r\n\r\n    this.props.resetCatalog()\r\n    this.props.resetFullGeolocation()\r\n    this.props.resetCart(false)\r\n    this.props.resetOrderFront()\r\n    this.props.resetOrderPlugin()\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    clearTimeout(this.automaticRedirectionTimeout)\r\n  }\r\n\r\n  componentWillReceiveProps = nextProps => {\r\n    if (\r\n      nextProps.authenticatedUser &&\r\n      nextProps.authenticatedUser.type === UserType.INCOGNITO &&\r\n      nextProps.orderProperties?.postedOrderData?.orderData?.paymentId &&\r\n      (this.props.orderProperties?.postedOrderData?.orderData?.paymentId !==\r\n        nextProps.orderProperties.postedOrderData.orderData.paymentId ||\r\n        isNil(this.props.paymentPdfLink)) &&\r\n      -!this.props.isFetchingPaymentPdfLink &&\r\n      !nextProps.isFetchingPaymentPdfLink &&\r\n      !nextProps.errorPaymentPdfLink\r\n    ) {\r\n      this.props.fetchPaymentPdfLink(nextProps.orderProperties.postedOrderData.orderData.paymentId)\r\n    }\r\n  }\r\n\r\n  hasRedirectUriDefined = () => this.props.frontSettings && this.props.frontSettings.redirectUri\r\n\r\n  handleRedirect = () => {\r\n    EventManager.dispatch(EventManager.Events.ON_CONFIRM_CALLBACK)\r\n    // storing the redirectUri, because resetOrderFrontFull will reset the variables inside it (ex: :restaurantId)\r\n    const redirectUriWithReplaceVariables = this.props.frontSettings.redirectUri\r\n\r\n    this.props.resetOrderFrontFull()\r\n\r\n    if (!isNil(this.props.authorizeAppData)) {\r\n      window.location.href = getCallbackUri(\r\n        this.props.authorizeAppData.uri,\r\n        CALLBACK_EVENTS.NEW_ORDER\r\n      )\r\n    } else if (this.hasRedirectUriDefined()) {\r\n      window.location.href = redirectUriWithReplaceVariables\r\n    } else {\r\n      this.props.redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      authenticatedUser,\r\n      appConfigPreset,\r\n      frontSettings,\r\n      restaurant,\r\n      isFetchingRestaurant,\r\n      paymentPdfLink,\r\n      errorPaymentPdfLink,\r\n      location,\r\n      orderAppConfig,\r\n      orderProperties,\r\n      me,\r\n      width,\r\n    } = this.props\r\n\r\n    if (isEmpty(get(orderProperties, 'postedOrderData', null))) {\r\n      return null\r\n    }\r\n\r\n    return (\r\n      <OrderPage\r\n        headerProps={{\r\n          displayTitle: isWidthUp('md', width),\r\n          displayUser: true,\r\n        }}\r\n        orderProperties={orderProperties}\r\n        restaurant={restaurant}\r\n        location={location}\r\n      >\r\n        <OrderPluginUrlCheckerContainer location={location} verifyMode>\r\n          <SendEventContainer\r\n            send={\r\n              orderProperties &&\r\n              !isNil(orderProperties.postedOrderData.orderProperties.restaurant) &&\r\n              !isNil(me) &&\r\n              !isNil(orderProperties.postedOrderData.orderData)\r\n            }\r\n            event={EventManager.Events.ON_PAGE_LOADED}\r\n            eventProps={() => ({\r\n              order: orderProperties.postedOrderData.orderData,\r\n              items: orderProperties.postedOrderData.cartItems,\r\n              restaurant: orderProperties.restaurant,\r\n              dueDate: orderProperties.postedOrderData.orderData.dueDate,\r\n              user: me.email,\r\n            })}\r\n          >\r\n            <View\r\n              isIncognito={authenticatedUser && authenticatedUser.type === UserType.INCOGNITO}\r\n              appConfigPreset={appConfigPreset}\r\n              frontSettings={frontSettings}\r\n              isFetchingRestaurant={isFetchingRestaurant}\r\n              paymentPdfLink={paymentPdfLink}\r\n              errorPaymentPdfLink={errorPaymentPdfLink}\r\n              orderAppConfig={orderAppConfig}\r\n              postedOrderData={orderProperties.postedOrderData}\r\n              restaurant={restaurant}\r\n              onRedirect={this.handleRedirect}\r\n              route={this.props.route}\r\n              isFromWebApp={\r\n                orderProperties?.postedOrderData?.orderProperties?.from === fromApp.WEBAPP\r\n              }\r\n            />\r\n          </SendEventContainer>\r\n        </OrderPluginUrlCheckerContainer>\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  authorizeAppData: getAuthorizeAppData(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  authenticatedUser: getAuthenticatedUser(state),\r\n  isFetchingPaymentPdfLink: isFetchingPaymentPdfLink(state),\r\n  errorPaymentPdfLink: getErrorPaymentPdfLink(state),\r\n  paymentPdfLink: getDataPaymentPdfLink(state)?.signedUrl,\r\n})\r\n\r\nexport default compose(\r\n  connect(mapStateToProps, {\r\n    redirectTo,\r\n    fetchPaymentPdfLink,\r\n    resetPaymentPdfLink,\r\n    resetCart,\r\n    resetCatalog,\r\n    resetFullGeolocation,\r\n    resetOrderFront,\r\n    resetOrderFrontFull,\r\n    resetOrderPlugin,\r\n  }),\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withUserMe,\r\n  withAppConfig,\r\n  withScrollToTop(),\r\n  withWidth()\r\n)(ConfirmPage)\r\n","/**\r\n * constant used to switch between views of the login/register page.\r\n *\r\n * on AuthMode.NORMAL, the user picks LOGIN / REGISTER via the segmented control\r\n * (AuthTabs component), identical on mobile & desktop. INCOGNITO is offered as a\r\n * visible, but less prominent, 3rd choice right below it.\r\n */\r\nexport const LoginViews = {\r\n  /**\r\n   * handled by LoginForm\r\n   */\r\n  LOGIN: 'LOGIN',\r\n\r\n  /**\r\n   * handled by RegisterForm\r\n   */\r\n  REGISTER: 'REGISTER',\r\n\r\n  /**\r\n   * handled by UserLightForm\r\n   */\r\n  USER_LIGHT: 'USER_LIGHT',\r\n\r\n  /**\r\n   * When the user chose \"continue without account creation\"\r\n   * it allows to display the CGU checkbox, and make it mandatory to check it to continue\r\n   *\r\n   * handled by IncognitoForm\r\n   */\r\n  INCOGNITO: 'INCOGNITO',\r\n}\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { compose } from 'redux'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withForm, FormType } from 'pmt-modules/form'\r\nimport { Email, Password } from 'pmt-modules/user/forms/elements/index'\r\nimport { Link } from 'pmt-modules/routing'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  forgottenPassword: {\r\n    color: theme.palette.secondary.main,\r\n  },\r\n})\r\n\r\nconst LoginFormView = ({ classes, formData, formErrors, forgottenPasswordLink, onChange }) => (\r\n  <React.Fragment>\r\n    <Email\r\n      value={formData.username}\r\n      onChange={username => onChange({ ...formData, username })}\r\n      validation={formErrors.username}\r\n      required\r\n    />\r\n\r\n    <Password\r\n      value={formData.password}\r\n      onChange={password => onChange({ ...formData, password })}\r\n      validation={formErrors.password}\r\n      required\r\n      checkSecurity\r\n    />\r\n\r\n    <div className=\"u-textAlignRight u-foreground u-marginTop10\">\r\n      {!isNil(forgottenPasswordLink) && !isEmpty(forgottenPasswordLink) ? (\r\n        <a\r\n          className={classes.forgottenPassword}\r\n          href={forgottenPasswordLink}\r\n          target=\"_blank\"\r\n          rel=\"noopener noreferrer\"\r\n        >\r\n          {tr('global.forgot_password_link', {\r\n            fr: 'Mot de passe oublié ?',\r\n            context: '',\r\n            desc: 'Link for forgotten password',\r\n          })}\r\n        </a>\r\n      ) : (\r\n        <Link to={Link.getRoute('FORGOT_PASSWORD')} className={classes.forgottenPassword}>\r\n          {tr('global.forgot_password_link', {\r\n            fr: 'Mot de passe oublié ?',\r\n            context: '',\r\n            desc: 'Link for forgotten password',\r\n          })}\r\n        </Link>\r\n      )}\r\n    </div>\r\n  </React.Fragment>\r\n)\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.LOGIN)\r\n)(LoginFormView)\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\nimport { notEmpty, isGreaterThan, isValidEmail } from 'pmt-modules/form/validation'\r\n\r\nimport createForm from 'pmt-modules/form/createForm'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nexport { default as LoginFormView } from './LoginFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  username: '',\r\n  password: 'bonjour1',\r\n}\r\n\r\nconst defaultData = {\r\n  username: null,\r\n  password: null,\r\n}\r\n\r\nconst validationRules = () => ({\r\n  username: [\r\n    [notEmpty, tr('global.login.form.validation.required.email')],\r\n    [isValidEmail, tr('global.login.form.validation.email_invalid')],\r\n  ],\r\n  password: [[isGreaterThan(5), tr('global.login.form.validation.password_length')]],\r\n})\r\n\r\nexport default createForm(FormType.LOGIN, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { compose } from 'redux'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { authenticateUser, getAuthError, isFetchingAuth } from 'pmt-modules/auth'\r\nimport { registerAsIncognito } from 'pmt-modules/registration'\r\nimport { LoginFormView } from 'pmt-modules/auth/forms/login'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\nimport { getAppConfigFrontSettings } from 'pmt-modules/orderPlugin'\r\nimport { isFetchingOrderPost, getErrorOrderPost } from 'pmt-modules/orderPost'\r\nimport { isFetchingUserMe } from 'pmt-modules/userMe'\r\nimport { trOptional } from 'pmt-modules/i18n'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport Button from '../../../components/Button'\r\nimport MessageBlock from '../../../components/MessageBlock'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nconst styles = theme => ({\r\n  button: {\r\n    marginTop: theme.spacing(3),\r\n    width: '100%',\r\n  },\r\n  forgottenPassword: {\r\n    color: theme.palette.primary.main,\r\n    fontStyle: 'normal',\r\n    textDecoration: 'underline',\r\n  },\r\n  subheader: {\r\n    color: theme.pmt.colors.grey500,\r\n    marginBottom: theme.spacing(1.5),\r\n  },\r\n})\r\n\r\nclass LoginForm extends React.PureComponent {\r\n  handleSubmitLogin = () => {\r\n    const {\r\n      authenticateUser,\r\n      formData,\r\n      cartItemList,\r\n      restaurant,\r\n      clientId,\r\n      clientSecret,\r\n    } = this.props\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_LOGIN_SUBMIT_LOGIN, {\r\n      items: cartItemList,\r\n      restaurant,\r\n    })\r\n\r\n    authenticateUser(formData.username, formData.password, { clientId, clientSecret })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      authError,\r\n      cartItemList,\r\n      classes,\r\n      forgottenPasswordLink,\r\n      formIsValid,\r\n      frontSettings,\r\n      isFetchingAuth,\r\n      isFetchingUserMe,\r\n      isFetchingOrderPost,\r\n      orderPostError,\r\n      orderProperties,\r\n    } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        {!isNil(trOptional('ORDER__LOGIN__SUBHEADER')) && (\r\n          <Typography variant=\"subtitle1\" className={classes.subheader}>\r\n            {trOptional('ORDER__LOGIN__SUBHEADER')}\r\n          </Typography>\r\n        )}\r\n\r\n        <LoadingBlockWrapper show={isFetchingAuth || isFetchingUserMe || isFetchingOrderPost} />\r\n\r\n        <ErrorBlock\r\n          error={authError || orderPostError}\r\n          mode={ErrorBlock.Mode.CUSTOM}\r\n          customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n        />\r\n\r\n        <form\r\n          onSubmit={e => {\r\n            e.preventDefault()\r\n            this.handleSubmitLogin()\r\n          }}\r\n        >\r\n          <LoginFormView\r\n            classes={{\r\n              forgottenPassword: classes.forgottenPassword,\r\n            }}\r\n            forgottenPasswordLink={forgottenPasswordLink}\r\n          />\r\n          <Button\r\n            type=\"submit\"\r\n            size=\"large\"\r\n            disabled={!formIsValid || isFetchingAuth || isFetchingUserMe || isFetchingOrderPost}\r\n            classes={{ root: classes.button }}\r\n            label={tr(\r\n              frontSettings.display.paymentPage ||\r\n                isEmpty(cartItemList) ||\r\n                orderProperties.isDelivery ||\r\n              isEmpty(getQueryParam('fromOrderWorkflow'))\r\n                ? 'order.login.connect_button'\r\n                : 'order.login.connect_button_and_order'\r\n            )}\r\n          />\r\n        </form>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  authError: getAuthError(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  isFetchingAuth: isFetchingAuth(state),\r\n  isFetchingOrderPost: isFetchingOrderPost(state),\r\n  isFetchingUserMe: isFetchingUserMe(state),\r\n  orderPostError: getErrorOrderPost(state),\r\n})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.LOGIN),\r\n  connect(mapStateToProps, {\r\n    authenticateUser,\r\n    registerAsIncognito,\r\n  })\r\n)(LoginForm)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { LoginViews } from '../constants'\r\n\r\nconst styles = theme => ({\r\n  wrapper: {\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  segmentedControl: {\r\n    display: 'flex',\r\n    padding: 4,\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    background: theme.pmt.modern.surface.subtle.background,\r\n  },\r\n  segment: {\r\n    flex: 1,\r\n    minWidth: 0,\r\n    textAlign: 'center',\r\n    padding: theme.spacing(1, 1),\r\n    borderRadius: theme.shape.borderRadius,\r\n    fontWeight: 700,\r\n    fontSize: theme.typography.pxToRem(15),\r\n    color: theme.pmt.colors.grey600,\r\n    cursor: 'pointer',\r\n    border: 'none',\r\n    background: 'transparent',\r\n    whiteSpace: 'nowrap',\r\n    overflow: 'hidden',\r\n    textOverflow: 'ellipsis',\r\n    transition: theme.pmt.modern.transitions.smooth,\r\n    '&:hover': {\r\n      color: theme.palette.text.primary,\r\n    },\r\n  },\r\n  segmentActive: {\r\n    background: theme.pmt.modern.surface.elevated.background,\r\n    color: theme.palette.primary.main,\r\n    boxShadow: theme.pmt.modern.shadows.sm,\r\n  },\r\n})\r\n\r\n/**\r\n * AuthTabs - unified segmented control between LOGIN / REGISTER, identical on\r\n * mobile & desktop.\r\n */\r\nconst AuthTabs = ({ classes, view, onToggleView }) => (\r\n  <div className={classes.wrapper}>\r\n    <div className={classes.segmentedControl} role=\"tablist\">\r\n      <button\r\n        type=\"button\"\r\n        role=\"tab\"\r\n        aria-selected={view === LoginViews.LOGIN}\r\n        className={classNames(classes.segment, {\r\n          [classes.segmentActive]: view === LoginViews.LOGIN,\r\n        })}\r\n        onClick={() => onToggleView(LoginViews.LOGIN)}\r\n      >\r\n        {tr('order.login.connect_button')}\r\n      </button>\r\n      <button\r\n        type=\"button\"\r\n        role=\"tab\"\r\n        aria-selected={view === LoginViews.REGISTER}\r\n        className={classNames(classes.segment, {\r\n          [classes.segmentActive]: view === LoginViews.REGISTER,\r\n        })}\r\n        onClick={() => onToggleView(LoginViews.REGISTER)}\r\n      >\r\n        {tr('order.login.create_account')}\r\n      </button>\r\n    </div>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(AuthTabs)\r\n\r\n\r\n\r\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n  return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { FormControlLabel } from 'pmt-ui/Form'\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\n\r\nconst Cgu = ({ label, value, onChange }) => (\r\n  // \"label\" can be a component containing the text with a link to the cgu. cf. <CguLabel />\r\n  <FormControlLabel\r\n    className=\"u-sizeFullWidth\"\r\n    label={\r\n      isNil(label)\r\n        ? tr('global.register.accept_terms', {\r\n            fr: \"J'accepte les CGU\",\r\n            context: '',\r\n            desc: 'Label prompting for legal terms',\r\n          })\r\n        : label\r\n    }\r\n    control={\r\n      <Checkbox\r\n        color=\"primary\"\r\n        checked={value}\r\n        onChange={(event, isInputChecked) => onChange(isInputChecked)}\r\n        onKeyDown={event => {\r\n          if (event.key === 'Enter') {\r\n            event.preventDefault()\r\n            onChange(!value)\r\n          }\r\n        }}\r\n      />\r\n    }\r\n  />\r\n)\r\n\r\nexport default Cgu\r\n","import React from 'react'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { ButtonLink } from 'app/components/Button'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\n\r\nconst CguLabel = ({ restaurantsGroup, linkClass }) => (\r\n  <TypographyCustom type=\"164\" component=\"span\">\r\n    {tr('global.register.accept_terms_clickable.first')}\r\n\r\n    {!isEmpty(restaurantsGroup?.userSettings?.touUrl) ? (\r\n      <ButtonLink\r\n        component=\"a\"\r\n        classes={{\r\n          root: linkClass,\r\n        }}\r\n        onClick={e => {\r\n          e.preventDefault()\r\n          e.stopPropagation()\r\n          window.open(restaurantsGroup.userSettings.touUrl)\r\n        }}\r\n        // avoid the browser toggling the checkbox when this link is activated via Space/Enter\r\n        onMouseDown={e => e.stopPropagation()}\r\n        onKeyDown={e => e.stopPropagation()}\r\n        label={tr('global.register.accept_terms_clickable.second')}\r\n      />\r\n    ) : (\r\n      <span>\r\n        &nbsp;\r\n        {tr('global.register.accept_terms_clickable.second')}\r\n      </span>\r\n    )}\r\n  </TypographyCustom>\r\n)\r\n\r\nexport default CguLabel","import React, { Fragment } from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport get from 'lodash/get'\r\nimport set from 'lodash/set'\r\n\r\nimport { getUserSettings } from 'pmt-modules/appConfig/selectors'\r\nimport { withForm, FormType, updateFormOptions } from 'pmt-modules/form'\r\nimport { getRegisterError } from 'pmt-modules/registration'\r\n\r\nimport TextField from 'pmt-ui/TextField'\r\nimport Cgu from 'pmt-ui/Cgu'\r\n\r\nimport { getField, registrationCodeErrors, fieldsType } from './constants'\r\nimport { getUserLightCookie } from '../../../auth/utils'\r\n\r\nimport { getCountryCodeForLocale } from 'pmt-modules/i18n/utils'\r\n\r\n/**\r\n * Register form fields are retrieved from api consumer settings\r\n * see ./constants for mapping field type and components cloned here\r\n * Cgu component is not configurable and thus should always be displayed\r\n */\r\nclass RegisterFormView extends React.PureComponent {\r\n  static Steps = {\r\n    DEFAULT: 'DEFAULT',\r\n    REGISTRATION_CODE: 'REGISTRATION_CODE',\r\n  }\r\n\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    const formFields = this.props.userSettings.registration.form.fields\r\n\r\n    this.props.updateFormOptions(FormType.REGISTER, {\r\n      fields: formFields,\r\n    })\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const { registerError, updateUI, ui } = nextProps\r\n\r\n    if (\r\n      !this.props.registerError &&\r\n      registerError &&\r\n      (registerError.code === registrationCodeErrors.SET_PASSWORD ||\r\n        registerError.code === registrationCodeErrors.INVALID_CODE)\r\n    ) {\r\n      updateUI({\r\n        step: RegisterFormView.Steps.REGISTRATION_CODE,\r\n        initialized: ui.initialized,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      style,\r\n      formData,\r\n      formErrors,\r\n      onChange,\r\n      cguLabel,\r\n      ui,\r\n      restaurantCountry,\r\n      restaurantsGroupDefaultLocale,\r\n    } = this.props\r\n    const formFields = this.props.userSettings.registration.form.fields\r\n\r\n    if (!ui.initialized) {\r\n      const userLightCookie = getUserLightCookie()\r\n      if (formFields && userLightCookie) {\r\n        formFields.forEach(fieldInfo => {\r\n          const field = getField(fieldInfo.type)\r\n          set(formData, field.key, get(userLightCookie, field.key))\r\n        })\r\n      }\r\n      ui.initialized = true\r\n    }\r\n\r\n    // if we have a registration error with these specific code, it means the user already\r\n    // exists has user light, so we replace form with a registration code input\r\n    // in order to complete registration\r\n    return (\r\n      <div style={style}>\r\n        {ui.step === RegisterFormView.Steps.DEFAULT && (\r\n          <Fragment>\r\n            {formFields.map(fieldInfo => {\r\n              const field = getField(fieldInfo.type)\r\n              const fieldProps = {\r\n                key: field.key,\r\n                value: get(formData, field.key),\r\n                required: fieldInfo.required,\r\n                onChange: value => onChange(set(formData, field.key, value)),\r\n                validation: get(formErrors, field.key),\r\n                maxLength: fieldInfo.maxLength,\r\n              }\r\n\r\n              if (fieldInfo.type === fieldsType.PHONE) {\r\n                fieldProps.initCountryCode =\r\n                  restaurantCountry || getCountryCodeForLocale(restaurantsGroupDefaultLocale)\r\n                fieldProps.initCountryCodeOverridesBrowserLocale = false\r\n              }\r\n\r\n              return React.cloneElement(field.component, fieldProps)\r\n            })}\r\n            <Cgu\r\n              label={cguLabel}\r\n              value={formData.acceptCgu}\r\n              onChange={acceptCgu => onChange({ ...formData, acceptCgu })}\r\n            />\r\n          </Fragment>\r\n        )}\r\n        {ui.step === RegisterFormView.Steps.REGISTRATION_CODE && (\r\n          <TextField\r\n            autoFocus\r\n            label={tr('global.form.user.registrationCode')}\r\n            inputProps={{ maxLength: 5 }}\r\n            className=\"u-sizeFullWidth u-marginTop20\"\r\n            value={formData.registrationCode || ''}\r\n            onChange={e => onChange({ ...formData, registrationCode: e.target.value })}\r\n          />\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nRegisterFormView.defaultProps = {\r\n  cguLabel: null,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  userSettings: getUserSettings(state),\r\n  registerError: getRegisterError(state),\r\n})\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      step: RegisterFormView.Steps.DEFAULT,\r\n      initialized: false,\r\n    },\r\n  }),\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      updateFormOptions,\r\n    }\r\n  ),\r\n  withForm(FormType.REGISTER)\r\n)(RegisterFormView)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport each from 'lodash/each'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport {\r\n  notEmpty,\r\n  isGreaterThan,\r\n  isValidEmail,\r\n  isValidPhone,\r\n  isPhoneNotEmpty,\r\n  isTrue,\r\n} from 'pmt-modules/form/validation'\r\nimport createForm from 'pmt-modules/form/createForm'\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nimport { getField, fieldsType } from './constants'\r\n\r\nexport { default as RegisterFormView } from './RegisterFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  email: ``,\r\n  firstName: 'John',\r\n  lastName: 'Doe',\r\n  phone: `+33 6 30 25 ${new Date().getMinutes()} ${new Date().getSeconds()}`,\r\n  password: 'bonjour1',\r\n  acceptCgu: true,\r\n  marketing: {\r\n    allowContact: true,\r\n  },\r\n  badgeId: null,\r\n  registrationCode: null,\r\n}\r\n\r\nconst defaultData = {\r\n  email: null,\r\n  firstName: null,\r\n  lastName: null,\r\n  phone: null,\r\n  password: null,\r\n  acceptCgu: false,\r\n  nationality: 'FR', // FIXME: find a way to get the user's nationality\r\n  marketing: {\r\n    allowContact: false,\r\n  },\r\n  badgeId: null,\r\n  registrationCode: null,\r\n}\r\n\r\n/**\r\n * Validation rules for register form\r\n * options parameters should contains fields retrieved from api consumer settings\r\n * it is structured as is : {\r\n *   type: FIELD_TYPE,\r\n *   required: boolean\r\n * }\r\n * if field is required, we automatically add a notEmpty rule\r\n */\r\nconst validationRules = options => {\r\n  const rules = {\r\n    email: [[isValidEmail, tr('global.register.form.validation.email_invalid')]],\r\n    phone: [[isValidPhone, tr('global.register.form.validation.phone_invalid')]],\r\n    password: [[isGreaterThan(7), tr('global.register.form.validation.password_length')]],\r\n    acceptCgu: [[isTrue, tr('global.register.form.validation.accept_legal_terms')]],\r\n  }\r\n\r\n  if (!isEmpty(options.fields)) {\r\n    each(options.fields, optionField => {\r\n      if (optionField.required) {\r\n        const field = getField(optionField.type)\r\n        rules[field.key] = [\r\n          [notEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n          ...(rules[field.key] || []),\r\n        ]\r\n        if (optionField.type === fieldsType.PHONE) {\r\n          rules[field.key] = [\r\n            [isPhoneNotEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n            ...(rules[field.key] || []),\r\n          ]\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  return rules\r\n}\r\n\r\nexport default createForm(FormType.REGISTER, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport { compose } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { trOptional } from 'pmt-modules/i18n'\r\n\r\nimport { isFetchingAuth } from 'pmt-modules/auth'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\nimport { getErrorOrderPost, isFetchingOrderPost } from 'pmt-modules/orderPost'\r\nimport { getAppConfigFrontSettings } from 'pmt-modules/orderPlugin'\r\nimport { getAppConfig } from 'pmt-modules/appConfig'\r\nimport { RegisterFormView } from 'pmt-modules/registration/forms/register'\r\nimport {\r\n  getRegisterError,\r\n  isFetchingRegister,\r\n  registerAsIncognito,\r\n  registerUser,\r\n} from 'pmt-modules/registration'\r\nimport { isFetchingUserMe } from 'pmt-modules/userMe'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Typography from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\n\r\nimport { cleanForApi } from 'pmt-utils/phone'\r\n\r\nimport Button from '../../../components/Button'\r\nimport MessageBlock from '../../../components/MessageBlock'\r\nimport { LoginViews } from '../constants'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nconst styles = theme => ({\r\n  button: {\r\n    marginTop: theme.spacing(3),\r\n    width: '100%',\r\n  },\r\n  subheader: {\r\n    color: theme.pmt.colors.grey500,\r\n    marginBottom: theme.spacing(1.5),\r\n  },\r\n  continueLink: {\r\n    display: 'block',\r\n    textAlign: 'center',\r\n    marginTop: theme.spacing(2),\r\n    color: theme.palette.primary.main,\r\n    fontStyle: 'normal',\r\n    textDecoration: 'underline',\r\n    cursor: 'pointer',\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    width: '100%',\r\n    font: 'inherit',\r\n  },\r\n})\r\n\r\nclass RegisterForm extends React.PureComponent {\r\n  handleSubmitRegistration = () => {\r\n    const { formData, cartItemList, restaurant, clientId, clientSecret, registerUser } = this.props\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_REGISTER_SUBMIT_REGISTER, {\r\n      items: cartItemList,\r\n      restaurant,\r\n    })\r\n\r\n    registerUser(\r\n      {\r\n        ...formData,\r\n        phone: cleanForApi(formData.phone),\r\n      },\r\n      {\r\n        clientId,\r\n        clientSecret,\r\n      }\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      cartItemList,\r\n      classes,\r\n      formIsValid,\r\n      frontSettings,\r\n      isFetchingRegister,\r\n      isFetchingAuth,\r\n      isFetchingUserMe,\r\n      isFetchingOrderPost,\r\n      orderPostError,\r\n      orderProperties,\r\n      registerError,\r\n      cguLabel,\r\n      allowIncognito,\r\n      onToggleView,\r\n      restaurantCountry,\r\n      restaurantsGroupDefaultLocale,\r\n    } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        {!isNil(trOptional('ORDER__REGISTER__SUBHEADER')) && (\r\n          <Typography variant=\"subtitle1\" className={classes.subheader}>\r\n            {trOptional('ORDER__REGISTER__SUBHEADER')}\r\n          </Typography>\r\n        )}\r\n\r\n        <LoadingBlockWrapper\r\n          show={isFetchingRegister || isFetchingAuth || isFetchingUserMe || isFetchingOrderPost}\r\n        />\r\n\r\n        <ErrorBlock\r\n          error={registerError || orderPostError}\r\n          mode={ErrorBlock.Mode.CUSTOM}\r\n          customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n        />\r\n\r\n        <form\r\n          onSubmit={e => {\r\n            e.preventDefault()\r\n            this.handleSubmitRegistration()\r\n          }}\r\n        >\r\n          <RegisterFormView\r\n            cguLabel={cguLabel}\r\n            restaurantCountry={restaurantCountry}\r\n            restaurantsGroupDefaultLocale={restaurantsGroupDefaultLocale}\r\n          />\r\n\r\n          <Button\r\n            size=\"large\"\r\n            type=\"submit\"\r\n            label={tr(\r\n              frontSettings.display.paymentPage ||\r\n                isEmpty(cartItemList) ||\r\n                orderProperties.isDelivery ||\r\n              isEmpty(getQueryParam('fromOrderWorkflow'))\r\n                ? 'order.login.register_button'\r\n                : 'order.login.register_button_and_order'\r\n            )}\r\n            disabled={\r\n              !formIsValid ||\r\n              isFetchingRegister ||\r\n              isFetchingAuth ||\r\n              isFetchingUserMe ||\r\n              isFetchingOrderPost\r\n            }\r\n            classes={{ root: classes.button }}\r\n          />\r\n\r\n          {allowIncognito && (\r\n            <button\r\n              type=\"button\"\r\n              className={classes.continueLink}\r\n              onClick={e => {\r\n                e.stopPropagation()\r\n                onToggleView(LoginViews.INCOGNITO)\r\n              }}\r\n            >\r\n              {tr('global.register.continue_as_incognito.from_NORMAL.link', {\r\n              })}\r\n            </button>\r\n          )}\r\n        </form>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  isFetchingUserMe: isFetchingUserMe(state),\r\n  isFetchingAuth: isFetchingAuth(state),\r\n  isFetchingRegister: isFetchingRegister(state),\r\n  isFetchingOrderPost: isFetchingOrderPost(state),\r\n  registerError: getRegisterError(state),\r\n  orderPostError: getErrorOrderPost(state),\r\n  allowIncognito: getAppConfig(state).authentication.allowIncognito,\r\n})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.REGISTER),\r\n  connect(mapStateToProps, {\r\n    registerUser,\r\n    registerAsIncognito,\r\n  })\r\n)(RegisterForm)\r\n","import React from 'react'\r\n\r\nimport {\r\n  BadgeId,\r\n  Email,\r\n  FirstName,\r\n  LastName,\r\n  MarketingOptim,\r\n  PhoneNumber,\r\n} from 'pmt-modules/user/forms/elements/index'\r\n\r\n// see API class ApiConsumerPresetValidator\r\nexport const fieldsType = {\r\n  FIRST_NAME: 'FIRST_NAME',\r\n  LAST_NAME: 'LAST_NAME',\r\n  EMAIL: 'EMAIL',\r\n  PHONE: 'PHONE',\r\n  BADGE_ID: 'BADGE_ID',\r\n  MARKETING_ALLOW_CONTACT: 'MARKETING_ALLOW_CONTACT',\r\n}\r\n\r\n/**\r\n * map fields retrieved from api consumer setting to formData key\r\n * and component to display in form view\r\n */\r\nexport const getFieldsMap = () => ({\r\n  FIRST_NAME: {\r\n    key: 'firstName',\r\n    component: <FirstName />,\r\n  },\r\n  LAST_NAME: {\r\n    key: 'lastName',\r\n    component: <LastName />,\r\n  },\r\n  EMAIL: {\r\n    key: 'email',\r\n    component: <Email />,\r\n  },\r\n  PHONE: {\r\n    key: 'phone',\r\n    component: <PhoneNumber />,\r\n  },\r\n  BADGE_ID: {\r\n    key: 'badgeId',\r\n    component: <BadgeId />,\r\n  },\r\n  MARKETING_ALLOW_CONTACT: {\r\n    key: 'marketing.allowContact',\r\n    component: <MarketingOptim />,\r\n  },\r\n})\r\n\r\nexport const getField = field => getFieldsMap()[field] || null\r\n","import React, { Fragment } from 'react'\r\n\r\nimport get from 'lodash/get'\r\nimport set from 'lodash/set'\r\nimport { connect } from 'react-redux'\r\nimport { compose } from 'redux'\r\n\r\nimport { getUserSettings } from 'pmt-modules/appConfig/selectors'\r\nimport { withForm, FormType, updateFormOptions } from 'pmt-modules/form'\r\nimport { getRegisterError } from 'pmt-modules/registration'\r\n\r\nimport withWidth from 'pmt-ui/utils/withWidth'\r\n\r\nimport Cgu from 'pmt-ui/Cgu'\r\n\r\nimport { getField, fieldsType } from './constants'\r\n\r\nimport { getCountryCodeForLocale } from 'pmt-modules/i18n/utils'\r\n\r\nclass UserLightFormView extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.props.updateFormOptions(FormType.USER_LIGHT, {\r\n      fields: this.props.userSettings.identification.form.fields,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      style,\r\n      formData,\r\n      formErrors,\r\n      onChange,\r\n      cguLabel,\r\n      restaurantCountry,\r\n      restaurantsGroupDefaultLocale,\r\n    } = this.props\r\n    const formFields = this.props.userSettings.identification.form.fields\r\n\r\n    return (\r\n      <div style={style}>\r\n        <Fragment>\r\n          {formFields.map(fieldInfo => {\r\n            const field = getField(fieldInfo.type)\r\n            const fieldProps = {\r\n              key: field.key,\r\n              value: get(formData, field.key),\r\n              required: fieldInfo.required,\r\n              onChange: value => onChange(set(formData, field.key, value)),\r\n              validation: get(formErrors, field.key),\r\n              maxLength: fieldInfo.maxLength,\r\n            }\r\n\r\n            if (fieldInfo.type === fieldsType.PHONE) {\r\n              fieldProps.initCountryCode =\r\n                restaurantCountry || getCountryCodeForLocale(restaurantsGroupDefaultLocale)\r\n              fieldProps.initCountryCodeOverridesBrowserLocale = false\r\n            }\r\n\r\n            return React.cloneElement(field.component, fieldProps)\r\n          })}\r\n          <Cgu\r\n            label={cguLabel}\r\n            value={formData.acceptCgu}\r\n            onChange={acceptCgu => onChange({ ...formData, acceptCgu })}\r\n          />\r\n        </Fragment>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nUserLightFormView.defaultProps = {\r\n  cguLabel: null,\r\n}\r\nconst mapStateToProps = state => ({\r\n  userSettings: getUserSettings(state),\r\n  registerError: getRegisterError(state),\r\n})\r\n\r\nexport default compose(\r\n  withWidth(),\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      updateFormOptions,\r\n    }\r\n  ),\r\n  withForm(FormType.USER_LIGHT)\r\n)(UserLightFormView)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport each from 'lodash/each'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport {\r\n  notEmpty,\r\n  isValidEmail,\r\n  isValidPhone,\r\n  isPhoneNotEmpty,\r\n  isTrue,\r\n} from 'pmt-modules/form/validation'\r\n\r\nimport createForm from 'pmt-modules/form/createForm'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nimport { getField, fieldsType } from './constants'\r\n\r\nexport { default as UserLightFormView } from './UserLightFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  email: ``,\r\n  firstName: 'Jane',\r\n  lastName: 'Doe',\r\n  phone: null,\r\n  acceptCgu: true,\r\n  marketing: {\r\n    allowContact: true,\r\n  },\r\n  badgeId: null,\r\n}\r\n\r\nconst defaultData = {\r\n  email: null,\r\n  firstName: null,\r\n  lastName: null,\r\n  phone: null,\r\n  acceptCgu: false,\r\n  nationality: 'FR', // FIXME: find a way to get the user's nationality\r\n  marketing: {\r\n    allowContact: false,\r\n  },\r\n  badgeId: null,\r\n}\r\n\r\n/**\r\n * Validation rules for user light form\r\n * options parameters should contains fields retrieved from api consumer settings\r\n * it is structured as is : {\r\n *   type: FIELD_TYPE,\r\n *   required: boolean\r\n * }\r\n * if field is required, we automatically add a notEmpty rule\r\n */\r\nconst validationRules = options => {\r\n  const rules = {\r\n    email: [[isValidEmail, tr('global.register.form.validation.email_invalid')]],\r\n    phone: [[isValidPhone, tr('global.register.form.validation.phone_invalid')]],\r\n    acceptCgu: [[isTrue, tr('global.register.form.validation.accept_legal_terms')]],\r\n  }\r\n\r\n  if (!isEmpty(options.fields)) {\r\n    each(options.fields, optionField => {\r\n      if (optionField.required) {\r\n        const field = getField(optionField.type)\r\n        rules[field.key] = [\r\n          [notEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n          ...(rules[field.key] || []),\r\n        ]\r\n        if (optionField.type === fieldsType.PHONE) {\r\n          rules[field.key] = [\r\n            [isPhoneNotEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n            ...(rules[field.key] || []),\r\n          ]\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  return rules\r\n}\r\n\r\nexport default createForm(FormType.USER_LIGHT, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Ask = props => (\r\n  <SvgIcon {...props}>\r\n    <g xmlns=\"http://www.w3.org/2000/svg\" transform=\"translate(1.000000, 0.000000)\">\r\n      <path\r\n        d=\"M11,0.00728571429 C4.92479167,0.00728571429 0,4.61228571 0,10.293 C0,15.2568351 3.76024944,19.3996522 8.76255983,20.3662096 C10.5416667,20.5714286 12.5250042,23.5714286 13.2916667,23.5714286 C14.3955794,23.5714286 13.1698412,20.4270821 14.175141,20.1441399 C18.702349,18.8699549 22,14.9414842 22,10.293 C22,4.61228571 17.0752083,0.00728571429 11,0.00728571429 Z M11,18.9184286 C5.93725,18.9184286 1.83333333,15.0805714 1.83333333,10.3465714 C1.83333333,5.61257143 5.93725,1.77514286 11,1.77514286 C16.06275,1.77514286 20.1666667,5.61257143 20.1666667,10.3465714 C20.1666667,15.0805714 16.06275,18.9184286 11,18.9184286 Z\"\r\n        id=\"Shape\"\r\n      />\r\n      <g id=\"Group\" transform=\"translate(7.333333, 4.285714)\">\r\n        <path\r\n          d=\"M3.10841667,9.405 C2.31870833,9.405 1.92408333,9.78428571 1.92408333,10.5424286 C1.92408333,10.9088571 2.02629167,11.1938571 2.23025,11.397 C2.43420833,11.6001429 2.72708333,11.7025714 3.10841667,11.7025714 C3.49020833,11.7025714 3.78354167,11.598 3.99025,11.3897143 C4.19695833,11.1814286 4.301,10.899 4.301,10.5424286 C4.301,10.1807143 4.19879167,9.90042857 3.99483333,9.702 C3.790875,9.50357143 3.49525,9.405 3.10841667,9.405 Z\"\r\n          id=\"Shape\"\r\n        />\r\n        <path\r\n          d=\"M6.11370833,1.035 C5.495875,0.552857143 4.66079167,0.311571429 3.60845833,0.311571429 C2.56208333,0.311571429 1.57208333,0.514285714 0.635708333,0.914142857 C0.110458333,1.13528571 0.346041667,1.63671429 0.346958333,1.63928571 L0.556875,2.05028571 C0.556875,2.05028571 0.804833333,2.44328571 1.33925,2.25 C1.34475,2.24828571 1.34658333,2.24914286 1.351625,2.247 C1.582625,2.15657143 1.816375,2.07257143 2.05379167,1.99842857 C2.48875,1.863 2.96129167,1.79485714 3.471875,1.79485714 C4.035625,1.79485714 4.46783333,1.908 4.76895833,2.13385714 C5.07008333,2.35971429 5.21995833,2.68371429 5.21995833,3.10585714 C5.21995833,3.46757143 5.12691667,3.77871429 4.94175,4.04014286 C4.75658333,4.30157143 4.34454167,4.668 3.705625,5.13985714 C3.16891667,5.53157143 2.792625,5.91085714 2.57766667,6.27728571 C2.36270833,6.64414286 2.25545833,7.104 2.25545833,7.65642857 C2.23483333,8.05842857 2.78254167,8.13857143 2.78254167,8.13857143 L3.11345833,8.13857143 C3.11345833,8.13857143 3.74320833,8.142 3.83945833,7.63457143 C3.84083333,7.62771429 3.843125,7.62557143 3.8445,7.61871429 C3.8665,7.29728571 3.94533333,7.03114286 4.087875,6.82757143 C4.257,6.58628571 4.59204167,6.28242857 5.09116667,5.91557143 C5.67645833,5.48871429 6.0885,5.142 6.32729167,4.87585714 C6.56608333,4.60971429 6.74529167,4.32985714 6.86354167,4.03585714 C6.98179167,3.74185714 7.04091667,3.40671429 7.04091667,3.03 C7.04,2.18271429 6.73154167,1.51714286 6.11370833,1.035 Z\"\r\n          id=\"Shape\"\r\n        />\r\n      </g>\r\n    </g>\r\n  </SvgIcon>\r\n)\r\nAsk = pure(Ask)\r\nAsk.displayName = 'Ask'\r\nAsk.muiName = 'SvgIcon'\r\n\r\nexport default Ask\r\n","import React from 'react'\r\nimport { compose } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\nimport { getAppConfigFrontSettings, getOrderData, resetOrderPlugin } from 'pmt-modules/orderPlugin'\r\nimport { getAppConfig } from 'pmt-modules/appConfig'\r\nimport {\r\n  getRegisterError,\r\n  isFetchingRegister,\r\n  registerAsIncognito,\r\n  registerUserLight,\r\n} from 'pmt-modules/registration'\r\nimport { getErrorOrderPost, isFetchingOrderPost } from 'pmt-modules/orderPost'\r\nimport { UserLightFormView } from 'pmt-modules/registration/forms/userLight'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Ask from 'pmt-ui/svg-icons/action/ask'\r\n\r\nimport Button from '../../../components/Button'\r\nimport MessageBlock from '../../../components/MessageBlock'\r\nimport { LoginViews } from '../constants'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  button: {\r\n    marginTop: theme.spacing(3),\r\n    width: '100%',\r\n  },\r\n  continueLink: {\r\n    display: 'block',\r\n    textAlign: 'center',\r\n    marginTop: theme.spacing(2),\r\n    color: theme.palette.primary.light,\r\n    fontStyle: 'normal',\r\n    textDecoration: 'underline',\r\n    cursor: 'pointer',\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    width: '100%',\r\n    font: 'inherit',\r\n  },\r\n  allowIncognitoButton: {\r\n    marginTop: theme.spacing(4),\r\n    [theme.breakpoints.down('md')]: {\r\n      width: '100%',\r\n    },\r\n  },\r\n  buttonsGrid: {\r\n    flexDirection: 'row-reverse',\r\n    [theme.breakpoints.down('md')]: {\r\n      flexDirection: 'column',\r\n      marginTop: 0,\r\n    },\r\n  },\r\n  caption: {\r\n    display: 'flex',\r\n    color: theme.pmt.status.inactive,\r\n    background: theme.pmt.modern.surface.subtle.background,\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    padding: theme.spacing(1.5),\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  captionWrapper: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    width: '100%',\r\n  },\r\n  captionTitle: {\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  iconAsk: {\r\n    width: theme.spacing(5),\r\n    height: theme.spacing(5),\r\n    marginRight: theme.spacing(2),\r\n    flexShrink: 0,\r\n  },\r\n})\r\n\r\nclass UserLightForm extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // SECURITY\r\n    // on user light mode, login page is specifically made to post order\r\n    // if the order data is null, it means that one mandatory information\r\n    // to access this page is missing\r\n    if (isNil(props.orderData)) {\r\n      if (this.hasRedirectUriDefined()) {\r\n        window.location.href = props.frontSettings.redirectUri\r\n      } else {\r\n        props.resetOrderPlugin()\r\n        props.redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n      }\r\n    }\r\n  }\r\n\r\n  hasRedirectUriDefined = () => this.props.frontSettings && this.props.frontSettings.redirectUri\r\n\r\n  handleSubmitLogin = () => {\r\n    this.props.registerUserLight(this.props.formData)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      formIsValid,\r\n      isFetchingOrder,\r\n      isFetchingRegister,\r\n      orderPostError,\r\n      registerError,\r\n      allowIncognito,\r\n      cguLabel,\r\n      onToggleView,\r\n      restaurantCountry,\r\n      restaurantsGroupDefaultLocale,\r\n    } = this.props\r\n\r\n    const captionTitle = tr('order.login.user_light.caption.title')\r\n\r\n    const captionText = tr('order.login.user_light.caption.text')\r\n\r\n    return (\r\n      <React.Fragment>\r\n\r\n        <LoadingBlockWrapper show={isFetchingOrder || isFetchingRegister} />\r\n\r\n        <div className={classes.caption}>\r\n          <Ask className={classes.iconAsk} />\r\n          <div className={classes.captionWrapper}>\r\n            {captionTitle && (\r\n              <TypographyCustom type=\"167\" className={classes.captionTitle} skipColor>\r\n                {captionTitle}\r\n              </TypographyCustom>\r\n            )}\r\n            {captionText && (\r\n              <TypographyCustom type=\"144\" skipColor>\r\n                {captionText}\r\n              </TypographyCustom>\r\n            )}\r\n          </div>\r\n        </div>\r\n\r\n        {!isNil(orderPostError || registerError) && (\r\n          <ErrorBlock\r\n            error={orderPostError || registerError}\r\n            mode={ErrorBlock.Mode.CUSTOM}\r\n            customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n          />\r\n        )}\r\n\r\n        <form\r\n          onSubmit={e => {\r\n            e.preventDefault()\r\n            this.handleSubmitLogin()\r\n          }}\r\n        >\r\n          <UserLightFormView\r\n            cguLabel={cguLabel}\r\n            restaurantCountry={restaurantCountry}\r\n            restaurantsGroupDefaultLocale={restaurantsGroupDefaultLocale}\r\n          />\r\n\r\n          <Button\r\n            size=\"large\"\r\n            type=\"submit\"\r\n            label={tr('order.login.user_light.button')}\r\n            disabled={!formIsValid}\r\n            classes={{ root: classes.button }}\r\n          />\r\n\r\n          {allowIncognito && (\r\n            <button\r\n              type=\"button\"\r\n              className={classes.continueLink}\r\n              onClick={e => {\r\n                e.stopPropagation()\r\n                onToggleView(LoginViews.INCOGNITO)\r\n              }}\r\n            >\r\n              {tr('global.register.continue_as_incognito.from_LIGHT.link')}\r\n            </button>\r\n          )}\r\n        </form>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  isFetchingOrder: isFetchingOrderPost(state),\r\n  isFetchingRegister: isFetchingRegister(state),\r\n  orderData: getOrderData(state),\r\n  orderPostError: getErrorOrderPost(state),\r\n  registerError: getRegisterError(state),\r\n  allowIncognito: getAppConfig(state).authentication.allowIncognito,\r\n})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.USER_LIGHT),\r\n  connect(mapStateToProps, {\r\n    registerUserLight,\r\n    registerAsIncognito,\r\n    redirectTo,\r\n    resetOrderPlugin,\r\n  })\r\n)(UserLightForm)\r\n","import React from 'react'\r\n\r\n/**\r\n * Incognito : no email, no badge id, no password, no phone.\r\n *\r\n * No phone : because there is a check to ensure the uniqueness of phone numbers.\r\n * As a result, a user will not be able to place a second order if they have lost their cookie in the meantime,\r\n * since the incognito user creation step will fail due to the phone number already being in use.\r\n */\r\nimport { FirstName, LastName } from 'pmt-modules/user/forms/elements/index'\r\n\r\n// see API class ApiConsumerPresetValidator\r\nexport const fieldsType = {\r\n  FIRST_NAME: 'FIRST_NAME',\r\n  LAST_NAME: 'LAST_NAME',\r\n}\r\n\r\n/**\r\n * map fields retrieved from api consumer setting to formData key\r\n * and component to display in form view\r\n */\r\nexport const getFieldsMap = () => ({\r\n  FIRST_NAME: {\r\n    key: 'firstName',\r\n    component: <FirstName />,\r\n  },\r\n  LAST_NAME: {\r\n    key: 'lastName',\r\n    component: <LastName />,\r\n  },\r\n})\r\n\r\nexport const getField = field => getFieldsMap()[field] || null\r\n","import React, { Fragment } from 'react'\r\n\r\nimport get from 'lodash/get'\r\nimport set from 'lodash/set'\r\nimport { connect } from 'react-redux'\r\nimport { compose } from 'redux'\r\n\r\nimport { getUserSettings } from 'pmt-modules/appConfig/selectors'\r\nimport { withForm, FormType, updateFormOptions } from 'pmt-modules/form'\r\nimport { getRegisterError } from 'pmt-modules/registration'\r\n\r\nimport withWidth from 'pmt-ui/utils/withWidth'\r\n\r\nimport Cgu from 'pmt-ui/Cgu'\r\n\r\nimport { getField } from './constants'\r\n\r\nclass IncognitoFormView extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.props.updateFormOptions(FormType.INCOGNITO, {\r\n      fields: this.props.userSettings.incognitoIdentification.form.fields,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { style, formData, formErrors, onChange, cguLabel } = this.props\r\n    const formFields = this.props.userSettings.incognitoIdentification.form.fields\r\n\r\n    return (\r\n      <div style={style}>\r\n        <Fragment>\r\n          {formFields?.map(fieldInfo => {\r\n            const field = getField(fieldInfo.type)\r\n\r\n            return React.cloneElement(field.component, {\r\n              key: field.key,\r\n              value: get(formData, field.key),\r\n              required: fieldInfo.required,\r\n              onChange: value => onChange(set(formData, field.key, value)),\r\n              validation: get(formErrors, field.key),\r\n              maxLength: fieldInfo.maxLength,\r\n            })\r\n          })}\r\n          <div className=\"u-marginTop10\">\r\n            <Cgu\r\n              label={cguLabel}\r\n              value={formData.acceptCgu}\r\n              onChange={acceptCgu => onChange({ ...formData, acceptCgu })}\r\n            />\r\n          </div>\r\n        </Fragment>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nIncognitoFormView.defaultProps = {\r\n  cguLabel: null,\r\n}\r\nconst mapStateToProps = state => ({\r\n  userSettings: getUserSettings(state),\r\n  registerError: getRegisterError(state),\r\n})\r\n\r\nexport default compose(\r\n  withWidth(),\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      updateFormOptions,\r\n    }\r\n  ),\r\n  withForm(FormType.INCOGNITO)\r\n)(IncognitoFormView)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport each from 'lodash/each'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { notEmpty, isValidPhone, isTrue } from 'pmt-modules/form/validation'\r\n\r\nimport createForm from 'pmt-modules/form/createForm'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nimport { getField } from './constants'\r\n\r\nexport { default as IncognitoFormView } from './IncognitoFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  firstName: 'Jane',\r\n  lastName: 'Doe',\r\n  phone: null,\r\n  acceptCgu: true,\r\n}\r\n\r\nconst defaultData = {\r\n  firstName: null,\r\n  lastName: null,\r\n  phone: null,\r\n  acceptCgu: false,\r\n  nationality: 'FR', // FIXME: find a way to get the user's nationality\r\n}\r\n\r\n/**\r\n * Validation rules for incognito form\r\n * options parameters should contains fields retrieved from api consumer settings\r\n * it is structured as is : {\r\n *   type: FIELD_TYPE,\r\n *   required: boolean\r\n * }\r\n * if field is required, we automatically add a notEmpty rule\r\n */\r\nconst validationRules = options => {\r\n  const rules = {\r\n    phone: [[isValidPhone, tr('global.register.form.validation.phone_invalid')]],\r\n    acceptCgu: [[isTrue, tr('global.register.form.validation.accept_legal_terms')]],\r\n  }\r\n\r\n  if (!isEmpty(options.fields)) {\r\n    each(options.fields, optionField => {\r\n      if (optionField.required) {\r\n        const field = getField(optionField.type)\r\n        rules[field.key] = [\r\n          [notEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n          ...(rules[field.key] || []),\r\n        ]\r\n      }\r\n    })\r\n  }\r\n\r\n  return rules\r\n}\r\n\r\nexport default createForm(FormType.INCOGNITO, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { compose } from 'redux'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { authenticateUser, getAuthError, isFetchingAuth } from 'pmt-modules/auth'\r\nimport { getErrorOrderPost, isFetchingOrderPost } from 'pmt-modules/orderPost'\r\nimport { getRegisterError, isFetchingRegister, registerAsIncognito } from 'pmt-modules/registration'\r\nimport { isFetchingUserMe } from 'pmt-modules/userMe'\r\n\r\nimport Ask from 'pmt-ui/svg-icons/action/ask'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\nimport { IncognitoFormView } from 'pmt-modules/registration/forms/incognito'\r\nimport { AuthMode } from 'pmt-modules/auth/constants'\r\n\r\nimport Button, { ButtonLink } from '../../../components/Button'\r\nimport MessageBlock from '../../../components/MessageBlock'\r\nimport { LoginViews } from '../constants'\r\n\r\nconst styles = theme => ({\r\n  button: {\r\n    marginTop: theme.spacing(3),\r\n    width: '100%',\r\n  },\r\n  backLink: {\r\n    marginTop: theme.spacing(2),\r\n    textAlign: 'center',\r\n    width: '100%',\r\n  },\r\n  caption: {\r\n    display: 'flex',\r\n    color: theme.pmt.status.inactive,\r\n    background: theme.pmt.modern.surface.subtle.background,\r\n    borderRadius: theme.shape.borderRadiusLg,\r\n    padding: theme.spacing(1.5),\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  captionWrapper: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  captionTitle: {\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  iconAsk: {\r\n    width: theme.spacing(5),\r\n    height: theme.spacing(5),\r\n    marginRight: theme.spacing(2),\r\n    flexShrink: 0,\r\n  },\r\n})\r\n\r\nclass IncognitoForm extends React.PureComponent {\r\n  handleKeepIncognito = () => {\r\n    this.props.registerAsIncognito(this.props.formData)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      authError,\r\n      formIsValid,\r\n      isFetchingRegister,\r\n      isFetchingAuth,\r\n      isFetchingUserMe,\r\n      isFetchingOrderPost,\r\n      orderPostError,\r\n      registerError,\r\n      onToggleView,\r\n      cguLabel,\r\n      authMode,\r\n    } = this.props\r\n\r\n    let btnLabel = tr('global.register.continue_as_incognito.btnLabel')\r\n    let captionTitle = ''\r\n    let captionText = ''\r\n    // default labels\r\n    if (authMode === AuthMode.NORMAL) {\r\n      // no caption needed\r\n    } else if (authMode === AuthMode.LIGHT) {\r\n      captionTitle = tr('global.register.continue_as_incognito.from_LIGHT.captionTitle')\r\n      captionText = tr('global.register.continue_as_incognito.from_LIGHT.captionText')\r\n    } else {\r\n      captionTitle = tr('global.register.continue_as_incognito.from_INCOGNITO_ONLY.captionTitle')\r\n      captionText = tr('global.register.continue_as_incognito.from_INCOGNITO_ONLY.captionText')\r\n    }\r\n\r\n    const withCaption = captionTitle || captionText\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <LoadingBlockWrapper\r\n          show={isFetchingRegister || isFetchingAuth || isFetchingUserMe || isFetchingOrderPost}\r\n        />\r\n\r\n        {withCaption && (\r\n          <div className={classes.caption}>\r\n            <Ask className={classes.iconAsk} />\r\n            <div className={classes.captionWrapper}>\r\n              {captionTitle && (\r\n                <TypographyCustom type=\"167\" className={classes.captionTitle} skipColor>\r\n                  {captionTitle}\r\n                </TypographyCustom>\r\n              )}\r\n              {captionText && (\r\n                <TypographyCustom type=\"144\" skipColor>\r\n                  {captionText}\r\n                </TypographyCustom>\r\n              )}\r\n            </div>\r\n          </div>\r\n        )}\r\n\r\n        {!isNil(orderPostError || registerError || authError) && (\r\n          <ErrorBlock\r\n            error={orderPostError || registerError || authError}\r\n            mode={ErrorBlock.Mode.CUSTOM}\r\n            customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n          />\r\n        )}\r\n\r\n        <IncognitoFormView cguLabel={cguLabel} />\r\n\r\n        <Button\r\n          disabled={!formIsValid}\r\n          classes={{ root: classes.button }}\r\n          size=\"large\"\r\n          onClick={() => this.handleKeepIncognito()}\r\n          label={btnLabel}\r\n        />\r\n\r\n        {/* on AuthMode.NORMAL, navigating back to LOGIN/REGISTER is handled by the\r\n            segmented control above (identical on mobile & desktop), no extra link needed here */}\r\n\r\n        {authMode === AuthMode.LIGHT && (\r\n          <div className={classes.backLink}>\r\n            <ButtonLink\r\n              component=\"a\"\r\n              onClick={e => {\r\n                e.stopPropagation()\r\n                onToggleView(LoginViews.USER_LIGHT)\r\n              }}\r\n              label={tr('order.login.back_to_user_light')}\r\n            />\r\n          </div>\r\n        )}\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  authError: getAuthError(state),\r\n  isFetchingAuth: isFetchingAuth(state),\r\n  isFetchingOrderPost: isFetchingOrderPost(state),\r\n  isFetchingUserMe: isFetchingUserMe(state),\r\n  isFetchingRegister: isFetchingRegister(state),\r\n  orderPostError: getErrorOrderPost(state),\r\n  registerError: getRegisterError(state),\r\n})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.INCOGNITO),\r\n  connect(mapStateToProps, {\r\n    authenticateUser,\r\n    registerAsIncognito,\r\n  })\r\n)(IncognitoForm)\r\n\r\n\r\n","import React, { useEffect } from 'react'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport { trOptional, tr } from 'pmt-modules/i18n'\r\n\r\nimport { AuthMode } from 'pmt-modules/auth/constants'\r\n\r\nimport withWidth, {isWidthUp} from 'pmt-ui/utils/withWidth'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport BlockContainer from '../../components/BlockContainer'\r\nimport SideSummary from '../../components/SideSummary'\r\n\r\nimport { LoginViews } from './constants'\r\nimport {\r\n  AuthTabs,\r\n  LoginForm,\r\n  RegisterForm,\r\n  UserLightForm,\r\n} from './components'\r\nimport IncognitoForm from './components/IncognitoForm'\r\nimport { CguLabel } from 'pmt-ui/Cgu'\r\nimport BackToBlock from 'components/BackToBlock'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  gridInverse: {\r\n    flexDirection: 'row-reverse',\r\n  },\r\n  footer: {\r\n    paddingTop: theme.spacing(2),\r\n    color: theme.pmt.colors.grey600,\r\n    fontStyle: 'italic',\r\n    textAlign: 'justify',\r\n  },\r\n  link: {\r\n    display: 'inline',\r\n    fontSize: 14,\r\n    lineHeight: '14px',\r\n    marginTop: -2,\r\n  },\r\n  '@keyframes fadeInUp': {\r\n    '0%': { opacity: 0, transform: 'translateY(12px)' },\r\n    '100%': { opacity: 1, transform: 'translateY(0)' },\r\n  },\r\n  authCard: {\r\n    width: '100%',\r\n    maxWidth: 520,\r\n    margin: '0 auto',\r\n    animation: '$fadeInUp 0.4s ease-out',\r\n  },\r\n})\r\n\r\nconst View = ({\r\n  appConfig,\r\n  classes,\r\n  isFetching,\r\n  isFetchingRestaurant,\r\n  onToggleView,\r\n  options,\r\n  orderProperties,\r\n  restaurantsGroup,\r\n  restaurant,\r\n  cartItemList,\r\n  width,\r\n}) => {\r\n  const authMode = appConfig.authentication.mode\r\n\r\n  useEffect(() => {\r\n    // initial state\r\n    if (options.view === LoginViews.LOGIN) {\r\n      if (authMode === AuthMode.LIGHT) {\r\n        onToggleView(LoginViews.USER_LIGHT)\r\n      }\r\n      if (authMode === AuthMode.INCOGNITO_ONLY) {\r\n        onToggleView(LoginViews.INCOGNITO)\r\n      }\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [])\r\n\r\n  let displaySummary = (isFetchingRestaurant || !isNil(restaurant)) && !isEmpty(\r\n    cartItemList) && isWidthUp('sm', width)\r\n  return (\r\n    <div className={classes.root}>\r\n      <Grid container spacing={2} className={classes.gridInverse}>\r\n        {displaySummary && (\r\n          <Grid item xs={12} md={4} lg={3}>\r\n            <SideSummary\r\n              orderProperties={orderProperties}\r\n              restaurant={restaurant}\r\n              cartResumeEnabled\r\n              dueDateModificationEnabled={false}\r\n            />\r\n          </Grid>\r\n        )}\r\n        <Grid\r\n          item\r\n          xs={12}\r\n          md={displaySummary ? 8 : 12}\r\n          lg={displaySummary ? 9 : 12}\r\n          style={{display: 'flex', flexDirection: 'column'}}\r\n        >\r\n            <BackToBlock restaurant={restaurant}\r\n                         label={tr('order.global.return_order')}\r\n                         routeName={displaySummary ? 'ORDER__CART' : 'ORDER__CATALOG'} />\r\n\r\n\r\n          <BlockContainer\r\n            className={classNames('u-relative')}\r\n            type={BlockContainer.Type.WHITE}\r\n            style={{flexGrow: 1}}\r\n          >\r\n            {isFetching ? (\r\n              <LoadingBlock show />\r\n            ) : (\r\n              <div className={classes.authCard} key={options.view}>\r\n                {authMode === AuthMode.NORMAL && (\r\n                  <AuthTabs\r\n                    view={options.view}\r\n                    onToggleView={onToggleView}\r\n                  />\r\n                )}\r\n\r\n                {options.view === LoginViews.USER_LIGHT && (\r\n                  <UserLightForm\r\n                    allowIncognito={appConfig.authentication.allowIncognito}\r\n                    onToggleView={onToggleView}\r\n                    cguLabel={\r\n                      <CguLabel restaurantsGroup={restaurantsGroup}\r\n                                linkClass={classes.link} />\r\n                    }\r\n                    restaurantCountry={restaurant?.address?.country}\r\n                    restaurantsGroupDefaultLocale={restaurantsGroup?.settings?.defaultLocale}\r\n                  />\r\n                )}\r\n                {options.view === LoginViews.INCOGNITO && (\r\n                  <IncognitoForm\r\n                    onToggleView={onToggleView}\r\n                    cguLabel={\r\n                      <CguLabel restaurantsGroup={restaurantsGroup}\r\n                                linkClass={classes.link} />\r\n                    }\r\n                    authMode={authMode}\r\n                  />\r\n                )}\r\n                {options.view === LoginViews.LOGIN && (\r\n                  <LoginForm\r\n                    restaurant={restaurant}\r\n                    orderProperties={orderProperties}\r\n                    clientId={appConfig.authentication.oauth2.clientId}\r\n                    clientSecret={appConfig.authentication.oauth2.clientSecret}\r\n                    forgottenPasswordLink={restaurantsGroup.forgottenPasswordLink}\r\n                    cartItemList={cartItemList}\r\n                    cguLabel={\r\n                      <CguLabel restaurantsGroup={restaurantsGroup}\r\n                                linkClass={classes.link} />\r\n                    }\r\n                  />\r\n                )}\r\n                {options.view === LoginViews.REGISTER && (\r\n                  <RegisterForm\r\n                    orderProperties={orderProperties}\r\n                    restaurant={restaurant}\r\n                    clientId={appConfig.authentication.oauth2.clientId}\r\n                    clientSecret={appConfig.authentication.oauth2.clientSecret}\r\n                    cartItemList={cartItemList}\r\n                    onToggleView={onToggleView}\r\n                    cguLabel={\r\n                      <CguLabel restaurantsGroup={restaurantsGroup}\r\n                                linkClass={classes.link} />\r\n                    }\r\n                    restaurantCountry={restaurant?.address?.country}\r\n                    restaurantsGroupDefaultLocale={restaurantsGroup?.settings?.defaultLocale}\r\n                  />\r\n                )}\r\n                {(options.view === LoginViews.LOGIN || options.view === LoginViews.REGISTER) &&\r\n                  !isNil(trOptional('ORDER__LOGIN__FOOTER')) && (\r\n                    <TypographyCustom type=\"124\" className={classes.footer}>\r\n                      {trOptional('ORDER__LOGIN__FOOTER')}\r\n                    </TypographyCustom>\r\n                  )}\r\n              </div>\r\n            )}\r\n          </BlockContainer>\r\n        </Grid>\r\n      </Grid>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default compose(withStyles(styles), withWidth())(View)\r\n\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager, SendEventContainer } from 'pmt-modules/event'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { getRoute, redirectTo, replaceWith } from 'pmt-modules/routing'\r\nimport {\r\n  haveAuthCredentials,\r\n  AuthMode,\r\n  getAuthCookie,\r\n  getUserLightCookie,\r\n  getIncognitoCookie,\r\n} from 'pmt-modules/auth'\r\nimport { registerAsIncognito } from 'pmt-modules/registration'\r\nimport { getItemListFromCart } from 'pmt-modules/cart'\r\nimport { getErrorOrderPost, isFetchingOrderPost } from 'pmt-modules/orderPost'\r\nimport {\r\n  OrderPluginUrlCheckerContainer,\r\n  withOrderProperties,\r\n} from 'pmt-modules/orderPlugin'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport withRestaurantsGroupMine from 'pmt-modules/restaurantsGroup/components/withRestaurantsGroup'\r\nimport { getAuthenticatedUser } from 'pmt-modules/authenticatedUser/selectors'\r\nimport UserType from 'pmt-modules/user/constants/UserType'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\n\r\nimport { LoginViews } from './constants'\r\nimport View from './View'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass LoginPage extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // user already have correct credentials, he has nothing to do here\r\n    if (\r\n      this.isCorrectlyAuthenticated(\r\n        this.props.appConfig.authentication,\r\n        this.props.authenticatedUser\r\n      )\r\n    ) {\r\n      this.redirectCorrectlyAuthenticatedUser(this.props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    // specific when accessToken is passed as query param\r\n    // auth credentials have not been saved in cookie yet\r\n    if (\r\n      this.isCorrectlyAuthenticated(nextProps.appConfig.authentication, nextProps.authenticatedUser)\r\n    ) {\r\n      this.redirectCorrectlyAuthenticatedUser(nextProps)\r\n    }\r\n  }\r\n\r\n  isCorrectlyAuthenticated = (authenticationSettings, authenticatedUser) => {\r\n    // cf. getAuthorizationFromModeAndCookies\r\n    if (!authenticatedUser) {\r\n      // you need to wait that the user is fetched before redirecting\r\n      return false\r\n    }\r\n    if (authenticationSettings.mode === AuthMode.NORMAL) {\r\n      if (getAuthCookie() != null) {\r\n        return authenticatedUser.type === UserType.NORMAL\r\n      } else if (authenticationSettings.allowIncognito && getIncognitoCookie()) {\r\n        return authenticatedUser.type === UserType.INCOGNITO\r\n      }\r\n    } else if (authenticationSettings.mode === AuthMode.LIGHT) {\r\n      if (getAuthCookie() != null) {\r\n        return authenticatedUser.type === UserType.NORMAL\r\n      } else if (getUserLightCookie() != null) {\r\n        return authenticatedUser.type === UserType.LIGHT\r\n      } else if (authenticationSettings.allowIncognito && getIncognitoCookie()) {\r\n        return authenticatedUser.type === UserType.INCOGNITO\r\n      }\r\n    } else if (authenticationSettings.mode === AuthMode.INCOGNITO_ONLY) {\r\n      // allow authenticated TEST user even on incognito_only apiConsumer\r\n      // so a user can use the login page to authenticate as TEST user, and access test restaurants\r\n      if (getAuthCookie() != null) {\r\n        return authenticatedUser.type === UserType.NORMAL\r\n      } else if (getIncognitoCookie() != null) {\r\n        return authenticatedUser.type === UserType.INCOGNITO\r\n      }\r\n    }\r\n    return false\r\n  }\r\n\r\n  redirectCorrectlyAuthenticatedUser = ({\r\n    cartItemList,\r\n    frontAppConfig,\r\n    orderProperties,\r\n    redirectTo,\r\n    replaceWith,\r\n    errorOrderPost,\r\n    isFetchingOrderPost,\r\n  }) => {\r\n    const redirectToParam = getQueryParam('redirectTo')\r\n    const fromOrderWorkflow = getQueryParam('fromOrderWorkflow')\r\n\r\n    // we can have\r\n    // - either a redirectTo param (when login page is displayed from \"Login\" button in the header, so the user will go back to his location once logged in)\r\n    // - either the fromOrderWorkflow param (when login page is displayed as a mandatory step in the order workflow, so the user will be redirected to payment or postOrder & confirm page once logged in)\r\n    // - sometimes none of them (eg. login -> my account -> logout -> login again) : in this case, we redirect with a default behavior (cart if items, else catalog if restaurant, else store locator)\r\n    if (!isEmpty(redirectToParam)) {\r\n      replaceWith(decodeURIComponent(redirectToParam))\r\n      return\r\n    }\r\n\r\n    if (!isEmpty(fromOrderWorkflow)) {\r\n      // user was asked to login after putting items in their cart\r\n      // now they are logged in, so we can continue the order workflow\r\n\r\n      if (!isNil(cartItemList) && !isEmpty(cartItemList)) {\r\n        if (frontAppConfig.display.paymentPage) {\r\n          redirectTo(\r\n            orderProperties.isDelivery\r\n              ? getRoute('ORDER__DELIVERY_ADDRESS')\r\n              : getRoute('ORDER__PAYMENT')\r\n          )\r\n        } else {\r\n          if (!isFetchingOrderPost && errorOrderPost) {\r\n            // user was asked to login after putting items in their cart\r\n            // now they are logged in but still stucked on the login page\r\n            // because something went wrong during the automatic postOrder who followed the successful login\r\n            // => we sent them to the Cart page, so they can try to post the order again\r\n            redirectTo(getRoute('ORDER__CART'))\r\n          }\r\n\r\n          // if the user has haveAuthCredentials=true, and there is no paymentPage to display :\r\n          // the next step is to send the order, and then redirect to confirm page\r\n          // this is done by the following worklow :\r\n          // - on the AuthUserAction.SUCCESS, the middleware does a fetchUserMe with fromOrderWorkflow=true\r\n          // - on the GetUserMeAction.SUCCESS, the middleware will do a postOrderOrRedirect (because fromOrderWorkflow=true)\r\n          // - on the PostOrderAction.SUCCESS, the middleware will redirect to confirm page\r\n          // so here, we just stay on the login page, until this workflow happens\r\n        }\r\n      } else if (!isNil(orderProperties.restaurant)) {\r\n        redirectTo(getRoute('ORDER__CATALOG'), {\r\n          restaurantId: orderProperties.restaurant.id,\r\n        })\r\n      } else {\r\n        redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n      }\r\n    }\r\n\r\n    // finally, if none of the above, we redirect to a default behavior\r\n    if (!isNil(cartItemList) && !isEmpty(cartItemList)) {\r\n      redirectTo(getRoute('ORDER__CART'))\r\n    } else if (!isNil(orderProperties.restaurant)) {\r\n      redirectTo(getRoute('ORDER__CATALOG'), {\r\n        restaurantId: orderProperties.restaurant.id,\r\n      })\r\n    } else {\r\n      redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n    }\r\n\r\n  }\r\n\r\n  handleToggleView = newView => {\r\n    this.props.updateUI({\r\n      view: newView,\r\n    })\r\n    window.scrollTo(0, 0)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      appConfig,\r\n      isFetchingRestaurantsGroup,\r\n      restaurantsGroup,\r\n      restaurant,\r\n      isFetchingRestaurant,\r\n      cartItemList,\r\n      location,\r\n      ui,\r\n      haveAuthCredentials,\r\n      orderProperties,\r\n      width,\r\n    } = this.props\r\n\r\n    return (\r\n      <OrderPage\r\n        headerProps={{\r\n          displayTitle: isWidthUp('md', width),\r\n        }}\r\n        orderProperties={orderProperties}\r\n        restaurant={restaurant}\r\n        location={location}\r\n      >\r\n        <OrderPluginUrlCheckerContainer location={location} checkApiConsumer>\r\n          <SendEventContainer\r\n            send={orderProperties && !isNil(orderProperties.restaurant)}\r\n            event={EventManager.Events.ON_PAGE_LOADED}\r\n            eventProps={() => ({\r\n              items: cartItemList,\r\n              restaurant: orderProperties.restaurant,\r\n              dueDate: orderProperties.dueDate,\r\n            })}\r\n          >\r\n            <View\r\n              appConfig={appConfig}\r\n              restaurantsGroup={restaurantsGroup}\r\n              isFetching={isFetchingRestaurantsGroup || isFetchingRestaurant}\r\n              isFetchingRestaurant={isFetchingRestaurant}\r\n              onToggleView={this.handleToggleView}\r\n              options={ui}\r\n              haveAuthCredentials={haveAuthCredentials}\r\n              orderProperties={orderProperties}\r\n              restaurant={restaurant}\r\n              cartItemList={cartItemList}\r\n            />\r\n          </SendEventContainer>\r\n        </OrderPluginUrlCheckerContainer>\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  haveAuthCredentials: haveAuthCredentials(state),\r\n  cartItemList: getItemListFromCart(state),\r\n  isFetchingOrderPost: isFetchingOrderPost(state),\r\n  errorOrderPost: getErrorOrderPost(state),\r\n  authenticatedUser: getAuthenticatedUser(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withRestaurantsGroupMine(),\r\n  withScrollToTop(),\r\n  ui({\r\n    state: {\r\n      view: LoginViews.LOGIN,\r\n    },\r\n  }),\r\n  connect(mapStateToProps, {\r\n    redirectTo,\r\n    replaceWith,\r\n    registerAsIncognito,\r\n    getAuthenticatedUser,\r\n  }),\r\n  withWidth()\r\n)(LoginPage)\r\n","import { createAction } from 'pmt-modules/redux'\r\n\r\nimport UserApi from '../api/calls/UserApi'\r\n\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nexport const ForgotPasswordAction = {\r\n  ...createApiEnumAction('FORGOT_PASSWORD::GET'),\r\n  RESET_DATA: 'RESET_DATA',\r\n}\r\n\r\nexport const forgotPassword = username =>\r\n  createApiCallAction(ForgotPasswordAction, UserApi.getRecoverPassword(username), {\r\n    username,\r\n  })\r\n\r\nexport const resetForgotPasswordData = () => createAction(ForgotPasswordAction.RESET_DATA, {})\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getData = state => state.entities.forgotPassword\r\n\r\nexport const getForgotPasswordError = createSelector(\r\n  [ getData ],\r\n  (data) => {\r\n    const error = data.get('error')\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n    return error.toJS()\r\n  }\r\n)\r\n\r\nexport const getForgotPasswordData = createSelector(\r\n  [ getData ],\r\n  (data) => {\r\n    const res = data.get('data')\r\n    if (isNil(res)) {\r\n      return null\r\n    }\r\n    return res.toJS()\r\n  }\r\n)\r\n\r\nexport const getForgotPasswordIsFetching = createSelector(\r\n  [ getData ],\r\n  (data) => {\r\n    return data.get('isFetching')\r\n  }\r\n)\r\n","import { LOCATION_CHANGE } from 'pmt-modules/routing'\r\n\r\nimport Immutable from 'immutable'\r\n\r\nimport { ForgotPasswordAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT_FORGOT_PASSWORD = Immutable.fromJS({\r\n  isFetching: false,\r\n  data: null,\r\n  error: null,\r\n})\r\n\r\nexport const forgotPasswordReducer = (state = DEFAULT_FORGOT_PASSWORD, action) => {\r\n  switch (action.type) {\r\n    case LOCATION_CHANGE:\r\n      return state.merge({\r\n        error: null,\r\n      })\r\n\r\n    case ForgotPasswordAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        data: null,\r\n        error: null,\r\n      })\r\n\r\n    case ForgotPasswordAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: {\r\n          ...action.response,\r\n          username: action.data.username,\r\n        },\r\n        error: null,\r\n      })\r\n\r\n    case ForgotPasswordAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: null,\r\n        error: action.error,\r\n      })\r\n\r\n    case ForgotPasswordAction.RESET_DATA:\r\n      return state.merge({\r\n        data: null,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import React from 'react'\r\n\r\nimport {\r\n  withForm,\r\n  FormType,\r\n} from 'pmt-modules/form'\r\n\r\nimport { Email } from 'pmt-modules/user/forms/elements/index'\r\n\r\nconst ForgotPasswordForm = withForm(FormType.FORGOT_PASSWORD)(({ formData, formErrors, onChange }) => (\r\n  <div>\r\n    <Email\r\n      value={formData.username}\r\n      onChange={username => onChange({ ...formData, username })}\r\n      validation={formErrors.username}\r\n    />\r\n  </div>\r\n))\r\n\r\nexport default ForgotPasswordForm\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport { notEmpty, isValidEmail } from 'pmt-modules/form/validation'\r\n\r\nimport createForm from 'pmt-modules/form/createForm'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nexport { default as ForgotPasswordFormView } from './ForgotPasswordFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  username: '',\r\n}\r\n\r\nconst defaultData = {\r\n  username: null,\r\n}\r\n\r\nconst validationRules = () => ({\r\n  username: [\r\n    [notEmpty, tr('global.register.form.validation.required.email')],\r\n    [isValidEmail, tr('global.register.form.validation.email_invalid')],\r\n  ],\r\n})\r\n\r\nexport default createForm(FormType.FORGOT_PASSWORD, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet LockOutline = props => (\r\n  <SvgIcon {...props}>\r\n    <g id=\"icons\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\r\n      <g id=\"ic_forgotpassword\">\r\n        <g id=\"Group-19\" transform=\"translate(2.000000, 2.000000)\">\r\n          <path\r\n            d=\"M8.05863004,14.0206186 C7.36583842,14.0206186 6.80412371,13.4591817 6.80412371,12.7660535 L6.80412371,9.29580219 C6.80412371,8.60297813 7.36583842,8.04123711 8.05863004,8.04123711 L12.0444627,8.04123711 C12.7372544,8.04123711 13.2989691,8.60297813 13.2989691,9.29580219 L13.2989691,12.7660535 C13.2989691,13.4591817 12.7372544,14.0206186 12.0444627,14.0206186 L8.05863004,14.0206186 Z\"\r\n            id=\"Fill-55\"\r\n            fill=\"#EFEFF4\"\r\n          />\r\n          <path\r\n            d=\"M11.9612828,14.0255277 L8.03871724,14.0255277 C7.35692232,14.0255277 6.80412371,13.4730026 6.80412371,12.7908764 L6.80412371,9.27588845 C6.80412371,8.5940616 7.35692232,8.04123711 8.03871724,8.04123711 L11.9612828,8.04123711 C12.6430777,8.04123711 13.1958763,8.5940616 13.1958763,9.27588845 L13.1958763,12.7908764 C13.1958763,13.4730026 12.6430777,14.0255277 11.9612828,14.0255277 Z\"\r\n            id=\"Stroke-56\"\r\n            stroke=\"#919CA7\"\r\n            strokeWidth=\"0.5\"\r\n            strokeLinecap=\"round\"\r\n            strokeLinejoin=\"round\"\r\n          />\r\n          <path\r\n            d=\"M11.9587629,8.04123711 L8.04123711,8.04123711 L8.04123711,6.19022722 C8.04123711,5.10600336 8.91834956,4.22680412 10,4.22680412 C11.0819544,4.22680412 11.9587629,5.10600336 11.9587629,6.19022722 L11.9587629,8.04123711 Z\"\r\n            id=\"Stroke-57\"\r\n            stroke=\"#919CA7\"\r\n            strokeWidth=\"0.5\"\r\n          />\r\n          <path\r\n            d=\"M10.4637276,11.1248728 C10.6569981,10.9799468 10.7840218,10.7489901 10.7840218,10.4862731 C10.7840218,10.0468697 10.4330353,9.69072165 10,9.69072165 C9.56696473,9.69072165 9.21567436,10.0468697 9.21567436,10.4862731 C9.21567436,10.7489901 9.34269804,10.9799468 9.53596852,11.1248728 L9.17525773,12.4742268 L10.8247423,12.4742268 L10.4637276,11.1248728 Z\"\r\n            id=\"Fill-58\"\r\n            fill=\"#919CA7\"\r\n          />\r\n          <path\r\n            d=\"M10.8247423,12.4742268 L10.4637276,11.1248728 C10.6569981,10.9799468 10.7840218,10.7489901 10.7840218,10.4862731 C10.7840218,10.0468697 10.4330353,9.69072165 10,9.69072165 C9.56696473,9.69072165 9.21567436,10.0468697 9.21567436,10.4862731 C9.21567436,10.7489901 9.34269804,10.9799468 9.53596852,11.1248728 L9.17525773,12.4742268 L10.8247423,12.4742268 Z\"\r\n            id=\"Stroke-59\"\r\n          />\r\n          <path\r\n            d=\"M19.9407216,10.0070833 C19.9407216,15.495 15.4919716,19.94375 10.0044716,19.94375 C4.51655498,19.94375 0.0682216495,15.495 0.0682216495,10.0070833 C0.0682216495,4.51958333 4.51655498,0.0708333333 10.0044716,0.0708333333 C15.4919716,0.0708333333 19.9407216,4.51958333 19.9407216,10.0070833 Z\"\r\n            id=\"Stroke-60\"\r\n            stroke=\"#919CA7\"\r\n            strokeWidth=\"0.5\"\r\n            strokeDasharray=\"0.515463924407959,1.030927848815918\"\r\n          />\r\n        </g>\r\n      </g>\r\n    </g>\r\n  </SvgIcon>\r\n)\r\nLockOutline = pure(LockOutline)\r\nLockOutline.displayName = 'LockOutline'\r\nLockOutline.muiName = 'SvgIcon'\r\n\r\nexport default LockOutline\r\n","import React from 'react'\r\n\r\nimport { ForgotPasswordFormView } from 'pmt-modules/forgotPassword/forms/forgotPassword'\r\nimport { Link, getRoute } from 'pmt-modules/routing'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport LockOutline from 'pmt-ui/svg-icons/action/lock-outline'\r\n\r\nimport BlockContainer from '../../components/BlockContainer'\r\nimport Button from '../../components/Button'\r\nimport MessageBlock from '../../components/MessageBlock'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    padding: `${theme.spacing(2)}px 0`,\r\n    textAlign: 'center',\r\n  },\r\n  caption: {\r\n    color: theme.pmt.status.inactive,\r\n    margin: `${theme.spacing(2)}px 0`,\r\n  },\r\n  error: {\r\n    margin: `${theme.spacing(2)}px 0`,\r\n  },\r\n  link: {\r\n    display: 'block',\r\n    margin: `${theme.spacing(8)}px 0`,\r\n\r\n    color: theme.palette.primary.main,\r\n  },\r\n  lockIcon: {\r\n    width: 118,\r\n    height: 118,\r\n    marginTop: theme.spacing(3),\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  submit: {\r\n    marginTop: theme.spacing(3),\r\n  },\r\n  success: {\r\n    margin: `${theme.spacing(7)}px 0`,\r\n  },\r\n})\r\n\r\nconst View = ({\r\n  classes,\r\n  isFetching,\r\n  formIsValid,\r\n  forgotPasswordData,\r\n  forgotPasswordError,\r\n  onSubmit,\r\n}) => (\r\n  <div className={classes.root}>\r\n    <BlockContainer className=\"u-relative\" type={BlockContainer.Type.WHITE}>\r\n      <LoadingBlockWrapper show={isFetching} />\r\n\r\n      <Grid spacing={2} container justify=\"center\">\r\n        <Grid item xs={10} sm={8} md={4} lg={3}>\r\n          <LockOutline className={classes.lockIcon} />\r\n\r\n          <TypographyCustom align=\"center\" type=\"284\">\r\n            {tr('order.forgot_password.title')}\r\n          </TypographyCustom>\r\n\r\n          {forgotPasswordData ? (\r\n            <div className={classes.success}>\r\n              <TypographyCustom align=\"center\" type=\"164\">\r\n                {tr('order.forgot_password.success')}\r\n              </TypographyCustom>\r\n              <TypographyCustom align=\"center\" type=\"167\">\r\n                {forgotPasswordData.username}\r\n              </TypographyCustom>\r\n            </div>\r\n          ) : (\r\n            <React.Fragment>\r\n              <div className={classes.caption}>\r\n                <TypographyCustom skipColor align=\"center\" type=\"144\">\r\n                  {tr('order.forgot_password.no_worries.part1')}\r\n                </TypographyCustom>\r\n                <TypographyCustom skipColor align=\"center\" type=\"144\">\r\n                  {tr('order.forgot_password.no_worries.part2')}\r\n                </TypographyCustom>\r\n              </div>\r\n\r\n              <div className={classes.error}>\r\n                <ErrorBlock\r\n                  error={forgotPasswordError}\r\n                  mode={ErrorBlock.Mode.CUSTOM}\r\n                  customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n                />\r\n              </div>\r\n\r\n              <form\r\n                onSubmit={event => {\r\n                  event.preventDefault()\r\n                  onSubmit()\r\n                }}\r\n              >\r\n                <ForgotPasswordFormView />\r\n                <Button\r\n                  size=\"large\"\r\n                  type=\"submit\"\r\n                  label={tr('order.forgot_password.submit')}\r\n                  disabled={!formIsValid || isFetching}\r\n                  classes={{ root: classes.submit }}\r\n                />\r\n              </form>\r\n            </React.Fragment>\r\n          )}\r\n\r\n          <Link className={classes.link} to={getRoute('LOGIN')}>\r\n            {tr('order.forgot_password.back_to_login')}\r\n          </Link>\r\n        </Grid>\r\n      </Grid>\r\n    </BlockContainer>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport {\r\n  forgotPassword,\r\n  resetForgotPasswordData,\r\n  getForgotPasswordData,\r\n  getForgotPasswordError,\r\n  getForgotPasswordIsFetching,\r\n} from 'pmt-modules/forgotPassword'\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\nimport { OrderPluginUrlCheckerContainer, withOrderProperties } from 'pmt-modules/orderPlugin'\r\nimport { redirectTo } from 'pmt-modules/routing'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\n\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\n\r\nimport OrderPage from '../../components/OrderPage'\r\n\r\nimport View from './View'\r\n\r\n/**\r\n * This page is used by not-authenticated users when they forgot their password,\r\n * or by authenticated users when they want to reset their password\r\n */\r\nclass ForgotPasswordPage extends React.PureComponent {\r\n  componentWillUnmount() {\r\n    this.props.resetForgotPasswordData()\r\n  }\r\n\r\n  handleSubmit = () => {\r\n    EventManager.dispatch(EventManager.Events.ON_FORGOT_PASSWORD_SUBMIT)\r\n\r\n    const credentials = this.props.formData\r\n    this.props.forgotPassword(credentials.username)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      location,\r\n      forgotPasswordData,\r\n      forgotPasswordError,\r\n      formIsValid,\r\n      orderProperties,\r\n      restaurant,\r\n      isFetching,\r\n      width,\r\n    } = this.props\r\n\r\n    return (\r\n      <OrderPage\r\n        headerProps={{\r\n          displayTitle: isWidthUp('md', width),\r\n          displayUser: true,\r\n        }}\r\n        orderProperties={orderProperties}\r\n        restaurant={restaurant}\r\n        location={location}\r\n      >\r\n        <OrderPluginUrlCheckerContainer location={location}>\r\n          <View\r\n            isFetching={isFetching}\r\n            forgotPasswordData={forgotPasswordData}\r\n            forgotPasswordError={forgotPasswordError}\r\n            formIsValid={formIsValid}\r\n            onSubmit={this.handleSubmit}\r\n          />\r\n        </OrderPluginUrlCheckerContainer>\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  isFetching: getForgotPasswordIsFetching(state),\r\n  forgotPasswordData: getForgotPasswordData(state),\r\n  forgotPasswordError: getForgotPasswordError(state),\r\n})\r\n\r\nexport default withForm(FormType.FORGOT_PASSWORD)(\r\n  compose(\r\n    withAppConfig,\r\n    withOrderProperties,\r\n    withRestaurant,\r\n    withScrollToTop(),\r\n    connect(mapStateToProps, {\r\n      redirectTo,\r\n      forgotPassword,\r\n      resetForgotPasswordData,\r\n    }),\r\n    withWidth()\r\n  )(ForgotPasswordPage)\r\n)\r\n","import React from 'react'\r\nimport { compose } from 'redux'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PropTypes from 'prop-types'\r\nimport find from 'lodash/find'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport { getUserSettings } from 'pmt-modules/appConfig/selectors'\r\nimport { FormType, updateFormOptions } from 'pmt-modules/form'\r\nimport {\r\n  Email,\r\n  FirstName,\r\n  LastName,\r\n  PhoneNumber,\r\n  MarketingOptim,\r\n} from 'pmt-modules/user/forms/elements/index'\r\nimport { fieldsType } from 'pmt-modules/registration/forms/register/constants'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Button from 'pmt-ui/Button'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { getCountryCodeForLocale } from 'pmt-modules/i18n/utils'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    textAlign: 'left',\r\n  },\r\n  caption: {\r\n    color: theme.pmt.status.inactive,\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  marketingOptim: {\r\n    color: theme.palette.text.primary,\r\n  },\r\n  buttonRecoveryPassword: {\r\n    padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`,\r\n    marginTop: theme.spacing(1.5),\r\n    textTransform: 'initial',\r\n  },\r\n})\r\n\r\nclass ProfileFormView extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.props.updateFormOptions(FormType.USER_PROFILE, {\r\n      fields: this.props.userSettings.registration.form.fields,\r\n    })\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (!isNil(this.props.formData.email) && !isEqual(this.props.formData, nextProps.formData)) {\r\n      this.props.handleOnChangeFormDatas(nextProps.formData)\r\n    }\r\n  }\r\n\r\n  // here to check if the field has been asked during registration\r\n  // we do not show the user the field because\r\n  // we don't want him to fill it if it has not been asked during registration\r\n  hasField = fieldType =>\r\n    find(\r\n      this.props.userSettings.registration.form.fields,\r\n      ({ required, type }) => type === fieldType\r\n    )\r\n\r\n  handleOnClickRecoveryPassword = () => {\r\n    if (!isNil(this.props.forgottenPasswordLink)) {\r\n      window.location = this.props.forgottenPasswordLink\r\n    } else {\r\n      this.props.redirectTo(getRoute('FORGOT_PASSWORD'))\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      formData,\r\n      formErrors,\r\n      width,\r\n      onChange,\r\n      restaurantsGroupDefaultLocale,\r\n    } = this.props\r\n\r\n    return (\r\n      <Grid spacing={isWidthDown('sm', width) ? 0 : 5} container className={classes.root}>\r\n        {this.hasField(fieldsType.FIRST_NAME) && (\r\n          <Grid item xs={12} md={6}>\r\n            <div className={classes.lastName}>\r\n              <LastName\r\n                value={formData.lastName}\r\n                onChange={lastName => {\r\n                  onChange({ ...formData, lastName })\r\n                }}\r\n                validation={formErrors.lastName}\r\n              />\r\n            </div>\r\n          </Grid>\r\n        )}\r\n        {/*\r\n          we want to have a different order of fields relating to viewport width\r\n        */}\r\n        {!isWidthDown('sm', width) &&\r\n          this.hasField(fieldsType.EMAIL) && (\r\n            <Grid item xs={12} md={6}>\r\n              <div className={classes.email}>\r\n                <Email\r\n                  value={formData.email}\r\n                  onChange={email => {\r\n                    onChange({ ...formData, email })\r\n                  }}\r\n                  validation={formErrors.email}\r\n                />\r\n              </div>\r\n            </Grid>\r\n          )}\r\n        {this.hasField(fieldsType.LAST_NAME) && (\r\n          <Grid item xs={12} md={6}>\r\n            <div className={classes.firstName}>\r\n              <FirstName\r\n                value={formData.firstName}\r\n                onChange={firstName => {\r\n                  onChange({ ...formData, firstName })\r\n                }}\r\n                validation={formErrors.firstName}\r\n              />\r\n            </div>\r\n          </Grid>\r\n        )}\r\n        {/*\r\n          we want to have a different order of fields relating to viewport width\r\n        */}\r\n        {isWidthDown('sm', width) &&\r\n          this.hasField(fieldsType.EMAIL) && (\r\n            <Grid item xs={12} md={6}>\r\n              <div className={classes.email}>\r\n                <Email\r\n                  value={formData.email}\r\n                  onChange={email => {\r\n                    onChange({ ...formData, email })\r\n                  }}\r\n                  validation={formErrors.email}\r\n                />\r\n              </div>\r\n            </Grid>\r\n          )}\r\n        {this.hasField(fieldsType.PASSWORD) && (\r\n          <Grid item xs={12} md={6}>\r\n            <Button\r\n              variant=\"outlined\"\r\n              color=\"primary\"\r\n              className={classes.buttonRecoveryPassword}\r\n              onClick={this.handleOnClickRecoveryPassword}\r\n            >\r\n              <TypographyCustom type=\"144\" skipColor>\r\n                {tr('global.form.user.password_reset')}\r\n              </TypographyCustom>\r\n            </Button>\r\n          </Grid>\r\n        )}\r\n        {this.hasField(fieldsType.PHONE) && (\r\n          <Grid item xs={12} md={6}>\r\n            <div className={classes.phone}>\r\n              <PhoneNumber\r\n                value={formData.phone}\r\n                onChange={phone => {\r\n                  onChange({ ...formData, phone })\r\n                }}\r\n                validation={formErrors.phone}\r\n                initCountryCode={getCountryCodeForLocale(restaurantsGroupDefaultLocale)}\r\n                initCountryCodeOverridesBrowserLocale={false}\r\n              />\r\n              {/*\r\n                Commented on a demand from Meuh. We'll be used later (maybe)\r\n              <TypographyCustom type=\"124\" className={classes.caption}>\r\n                {tr('global.form.user.phone_info')}\r\n              </TypographyCustom> */}\r\n            </div>\r\n          </Grid>\r\n        )}\r\n        {this.hasField(fieldsType.MARKETING_ALLOW_CONTACT) && (\r\n          <Grid item xs={12} className=\"u-paddingTop0 u-paddingBottom0\">\r\n            <div className={classes.optinMarketing}>\r\n              <MarketingOptim\r\n                className={classes.marketingOptim}\r\n                value={formData.marketing.allowContact}\r\n                onChange={allowContact => {\r\n                  onChange({ ...formData, marketing: { allowContact } })\r\n                }}\r\n                validation={formErrors.marketing.allowContact}\r\n              />\r\n            </div>\r\n          </Grid>\r\n        )}\r\n      </Grid>\r\n    )\r\n  }\r\n}\r\n\r\nProfileFormView.defaultProps = {\r\n  handleOnChangeFormDatas: () => {},\r\n}\r\n\r\nProfileFormView.propTypes = {\r\n  handleOnChangeFormDatas: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  userSettings: getUserSettings(state),\r\n})\r\n\r\nexport default compose(\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      redirectTo,\r\n      updateFormOptions,\r\n    }\r\n  ),\r\n  withWidth(),\r\n  withStyles(styles)\r\n)(ProfileFormView)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport each from 'lodash/each'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport {\r\n  notEmpty,\r\n  isGreaterThan,\r\n  isValidEmail,\r\n  isValidPhone,\r\n  isTrue,\r\n} from 'pmt-modules/form/validation'\r\nimport createForm from 'pmt-modules/form/createForm'\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nimport { getField } from 'pmt-modules/registration/forms/register/constants'\r\n\r\nexport { default as ProfileFormView } from './ProfileFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {}\r\n\r\nconst defaultData = {\r\n  email: null,\r\n  firstName: null,\r\n  lastName: null,\r\n  phone: null,\r\n  marketing: {\r\n    allowContact: false,\r\n  },\r\n}\r\n\r\nconst validationRules = options => {\r\n  const rules = {\r\n    email: [[isValidEmail, tr('global.register.form.validation.email_invalid')]],\r\n    phone: [[isValidPhone, tr('global.register.form.validation.phone_invalid')]],\r\n    password: [[isGreaterThan(5), tr('global.register.form.validation.password_length')]],\r\n    acceptCgu: [[isTrue, tr('global.register.form.validation.accept_legal_terms')]],\r\n  }\r\n\r\n  if (!isEmpty(options.fields)) {\r\n    each(options.fields, optionField => {\r\n      if (optionField.required) {\r\n        const field = getField(optionField.type)\r\n        rules[field.key] = [\r\n          [notEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n          ...(rules[field.key] || []),\r\n        ]\r\n      }\r\n    })\r\n  }\r\n\r\n  return rules\r\n}\r\n\r\nexport default createForm(FormType.USER_PROFILE, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { ProfileFormView } from 'pmt-modules/user/forms/profile'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { withForm, FormType } from 'pmt-modules/form'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport Grid from 'pmt-ui/Grid'\r\n\r\nimport Button from '../../../components/Button'\r\nimport BlockContainer from '../../../components/BlockContainer'\r\nimport MessageBlock from '../../../components/MessageBlock'\r\nimport SideSummary from '../../../components/SideSummary'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  hello: {\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  info: {\r\n    color: theme.palette.primary.main,\r\n    background: theme.pmt.colors.grey100,\r\n    padding: theme.spacing(2),\r\n    margin: `${theme.spacing(2)}px 0`,\r\n  },\r\n  submitContainer: {\r\n    display: 'flex',\r\n    justifyContent: 'flex-end',\r\n  },\r\n  submit: {\r\n    marginTop: theme.spacing(4),\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n      marginBottom: theme.spacing(1),\r\n    },\r\n  },\r\n  gridInverse: {\r\n    flexDirection: 'row-reverse',\r\n  },\r\n  height100: {\r\n    height: '100%',\r\n  },\r\n})\r\n\r\n\r\nconst View = ({\r\n  classes,\r\n  formData,\r\n  formErrors,\r\n  formIsValid,\r\n  onChange,\r\n  frontSettings,\r\n  itemListFromCart,\r\n  orderProperties,\r\n  restaurant,\r\n  hasPhoneRequired,\r\n  isFetching,\r\n  errors,\r\n  onSubmit,\r\n  user,\r\n}) => (\r\n  <div className={classes.root}>\r\n    <Grid container spacing={2} className={classes.gridInverse}>\r\n      <Grid item xs={12} md={4} lg={3} className={'u-relative'}>\r\n        {isNil(orderProperties.mode) || isNil(restaurant) ? (\r\n          <LoadingBlockWrapper show />\r\n        ) : (\r\n          <SideSummary\r\n            orderProperties={orderProperties}\r\n            restaurant={restaurant}\r\n            cartResumeEnabled\r\n            dueDateModificationEnabled={false}\r\n          />\r\n        )}\r\n      </Grid>\r\n      <Grid item xs={12} md={8} lg={9}>\r\n        <BlockContainer\r\n          className={classNames(classes.height100, 'u-relative')}\r\n          type={BlockContainer.Type.WHITE}\r\n        >\r\n          {!isNil(user) ? (\r\n            <React.Fragment>\r\n              <LoadingBlockWrapper show={isFetching} />\r\n\r\n              <ErrorBlock\r\n                error={errors}\r\n                mode={ErrorBlock.Mode.CUSTOM}\r\n                customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n              />\r\n\r\n              <TypographyCustom type=\"284\" className={classes.hello}>\r\n                {tr('order.profile.hello_name', {\r\n                  name: user.firstName,\r\n                })}\r\n              </TypographyCustom>\r\n\r\n              {hasPhoneRequired() && isEmpty(user.phone) && (\r\n                <div className={classes.info}>\r\n                  <MessageBlock\r\n                    type={MessageBlock.Type.INFO}\r\n                    text={tr('order.profile.missing_phone')}\r\n                  />\r\n                </div>\r\n              )}\r\n\r\n              <form\r\n                onSubmit={e => {\r\n                  e.preventDefault()\r\n                  onSubmit(formData)\r\n                }}\r\n              >\r\n                <ProfileFormView\r\n                  formData={formData}\r\n                  formErrors={formErrors}\r\n                  onChange={onChange}\r\n                  defaultData={user}\r\n                />\r\n                <div className={classes.submitContainer}>\r\n                  <Button\r\n                    size=\"large\"\r\n                    type=\"submit\"\r\n                    label={tr(\r\n                      frontSettings.display.paymentPage || isEmpty(itemListFromCart)\r\n                        ? 'order.profile.submit'\r\n                        : 'order.profile.submit_and_order'\r\n                    )}\r\n                    classes={{ root: classes.submit }}\r\n                    disabled={!formIsValid || isFetching}\r\n                  />\r\n                </div>\r\n              </form>\r\n            </React.Fragment>\r\n          ) : (\r\n            <LoadingBlockWrapper show />\r\n          )}\r\n        </BlockContainer>\r\n      </Grid>\r\n    </Grid>\r\n  </div>\r\n)\r\n\r\nexport default compose(withForm(FormType.USER_PROFILE), withStyles(styles))(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { haveAuthCredentials } from 'pmt-modules/auth'\r\nimport { getItemListFromCart } from 'pmt-modules/cart'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport {\r\n  getAppConfigFrontSettings,\r\n  OrderPluginUrlCheckerContainer,\r\n  withOrderProperties,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { isFetchingOrderPost, getErrorOrderPost } from 'pmt-modules/orderPost'\r\nimport { fieldsType } from 'pmt-modules/registration/forms/register/constants'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport {\r\n  withUserMe,\r\n  updateProfile,\r\n  isFetchingPutUserMe,\r\n  getErrorputUserMe,\r\n} from 'pmt-modules/userMe'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\n\r\nimport { cleanForApi } from 'pmt-utils/phone'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\n\r\nimport OrderPage from '../../../components/OrderPage'\r\nimport BlockContainer from '../../../components/BlockContainer'\r\n\r\nimport View from './View'\r\n\r\nclass UserProfilePage extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // user doesn't have credentials, go back to login\r\n    if (!this.props.haveAuthCredentials) {\r\n      this.props.redirectTo(getRoute('LOGIN'))\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    // user doesn't have credentials, go back to login\r\n    if (this.props.haveAuthCredentials && !nextProps.haveAuthCredentials) {\r\n      this.props.redirectTo(getRoute('LOGIN'))\r\n    }\r\n  }\r\n\r\n  hasPhoneRequired = () =>\r\n    find(\r\n      this.props.userAppConfig.registration.form.fields,\r\n      ({ required, type }) => required && type === fieldsType.PHONE\r\n    )\r\n\r\n  handleSubmit = formData => {\r\n    EventManager.dispatch(EventManager.Events.ON_PROFILE_SUBMIT)\r\n\r\n    this.props.updateProfile(\r\n      {\r\n        ...formData,\r\n        phone: cleanForApi(formData.phone),\r\n        id: this.props.me.id,\r\n      },\r\n      {\r\n        isFromProfile: true,\r\n      }\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      frontSettings,\r\n      isFetchingMe,\r\n      isFetchingOrderPost,\r\n      isFetchingPutUserMe,\r\n      itemListFromCart,\r\n      location,\r\n      me,\r\n      orderPostError,\r\n      orderProperties,\r\n      restaurant,\r\n      updateUserError,\r\n      width,\r\n    } = this.props\r\n\r\n    return (\r\n      <OrderPage\r\n        headerProps={{\r\n          displayTitle: isWidthUp('md', width),\r\n          displayUser: true,\r\n        }}\r\n        orderProperties={orderProperties}\r\n        restaurant={restaurant}\r\n        location={location}\r\n      >\r\n        <OrderPluginUrlCheckerContainer location={location}>\r\n          {!isNil(me) ? (\r\n            <View\r\n              frontSettings={frontSettings}\r\n              itemListFromCart={itemListFromCart}\r\n              hasPhoneRequired={this.hasPhoneRequired}\r\n              orderProperties={orderProperties}\r\n              restaurant={restaurant}\r\n              isFetching={isFetchingMe || isFetchingPutUserMe || isFetchingOrderPost}\r\n              onSubmit={this.handleSubmit}\r\n              user={me}\r\n              defaultData={{\r\n                email: me.email,\r\n                firstName: me.firstName,\r\n                lastName: me.lastName,\r\n                phone: me.phone,\r\n                marketing: {\r\n                  allowContact: me.marketing.allowContact,\r\n                },\r\n              }}\r\n              errors={orderPostError || updateUserError}\r\n            />\r\n          ) : (\r\n            <BlockContainer\r\n              className=\"u-relative u-padding40 u-marginTop20\"\r\n              type={BlockContainer.Type.WHITE}\r\n            >\r\n              <LoadingBlockWrapper show />\r\n            </BlockContainer>\r\n          )}\r\n        </OrderPluginUrlCheckerContainer>\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  haveAuthCredentials: haveAuthCredentials(state),\r\n  isFetchingOrderPost: isFetchingOrderPost(state),\r\n  isFetchingPutUserMe: isFetchingPutUserMe(state),\r\n  itemListFromCart: getItemListFromCart(state),\r\n  orderPostError: getErrorOrderPost(state),\r\n  updateUserError: getErrorputUserMe(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withUserMe,\r\n  withScrollToTop(),\r\n  connect(mapStateToProps, {\r\n    updateProfile,\r\n    redirectTo,\r\n  }),\r\n  withWidth()\r\n)(UserProfilePage)\r\n","import React, { Component } from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { Sticky } from 'pmt-ui/Sticky'\r\nimport Button from 'pmt-ui/Button'\r\nimport { goToAnchor, removeHash, configureAnchors } from 'pmt-ui/ScrollableAnchor'\r\n\r\nimport BlockContainer from '../../../../components/BlockContainer'\r\n\r\nconfigureAnchors({ scrollDuration: 300 })\r\n\r\nconst styles = theme => ({\r\n  title: {\r\n    height: 50,\r\n    lineHeight: '50px',\r\n    textTransform: 'uppercase',\r\n    cursor: 'pointer',\r\n  },\r\n  navigationList: {\r\n    padding: 0,\r\n    marginLeft: 0,\r\n  },\r\n  navigationElement: {\r\n    listStyleType: 'none',\r\n    padding: `${theme.spacing(1.5)}px 0`,\r\n    color: theme.palette.primary.main,\r\n    cursor: 'pointer',\r\n  },\r\n  hr: {\r\n    borderTop: `1px solid ${theme.pmt.colors.grey97}`,\r\n    margin: `${theme.spacing(3)}px 0`,\r\n  },\r\n  buttonDisconnect: {\r\n    width: '100%',\r\n    padding: `${theme.spacing(2)}px 0`,\r\n    textTransform: 'initial',\r\n  },\r\n  isSticky: {\r\n    marginTop: theme.spacing(3),\r\n    ...theme.pmt.appConfig.accountMenuSticky,\r\n  },\r\n})\r\n\r\nclass LeftBlock extends Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    /**\r\n     * set custom offset for anchors\r\n     * see: https://paymytable.atlassian.net/browse/PP-1002\r\n     * example: -130\r\n     */\r\n    configureAnchors({\r\n      offset: props.frontAppConfig.theme.customCss.accountAnchorsOffset || 0,\r\n      keepLastAnchorHash: true,\r\n    })\r\n  }\r\n\r\n  handleAnchorClick = anchor => {\r\n    const hash = window.location.hash\r\n    // we remove the hash only if we want to scroll to the same hash\r\n    if (hash.substring(1) === anchor) {\r\n      removeHash()\r\n    }\r\n\r\n    // scroll to the anchor, without saving that hash update in history (false)\r\n    goToAnchor(anchor, false)\r\n  }\r\n\r\n  render() {\r\n    const { appConfig, blockType, handleLogout, classes } = this.props\r\n\r\n    return (\r\n      <Sticky>\r\n        {({ isSticky, style }) => (\r\n          <div style={style}>\r\n            <BlockContainer\r\n              className={classNames('u-relative u-overflowHidden', {\r\n                [classes.isSticky]: isSticky,\r\n              })}\r\n              type={BlockContainer.Type.WHITE}\r\n            >\r\n              <TypographyCustom type=\"164\" className={classes.title}>\r\n                {tr('order.account.left_block.title')}\r\n              </TypographyCustom>\r\n              <div className={classes.content}>\r\n                <nav>\r\n                  <ul className={classes.navigationList}>\r\n                    <li\r\n                      className={classes.navigationElement}\r\n                      onClick={() => {\r\n                        this.handleAnchorClick(blockType.PROFILE_FORM)\r\n                      }}\r\n                    >\r\n                      <TypographyCustom type=\"164\" skipColor>\r\n                        {tr('order.account.profile_form.title')}\r\n                      </TypographyCustom>\r\n                    </li>\r\n                    {/*\r\n                    <li\r\n                      className={classes.navigationElement}\r\n                      onClick={() => {\r\n                        this.handleAnchorClick(blockType.DIETARY_INFO)\r\n                      }}\r\n                    >\r\n                      <TypographyCustom type=\"164\" skipColor>\r\n                        {tr('order.account.dietary_info.title')}\r\n                      </TypographyCustom>\r\n                    </li>\r\n                    */}\r\n                    {/*\r\n                    <li\r\n                      className={classes.navigationElement}\r\n                      onClick={() => {\r\n                        this.handleAnchorClick(blockType.PAYMENT_METHODS)\r\n                      }}\r\n                    >\r\n                      <TypographyCustom type=\"164\" skipColor>\r\n                        {tr('order.account.payment_methods.title')}\r\n                      </TypographyCustom>\r\n                    </li>\r\n                    */}\r\n                    {appConfig.order.modesFormatted.hasDelivery && (\r\n                      <li\r\n                        className={classes.navigationElement}\r\n                        onClick={() => {\r\n                          this.handleAnchorClick(blockType.DELIVERY_ADDRESS)\r\n                        }}\r\n                      >\r\n                        <TypographyCustom type=\"164\" skipColor>\r\n                          {tr('order.account.delivery_address.title')}\r\n                        </TypographyCustom>\r\n                      </li>\r\n                    )}\r\n                    {/* <li\r\n                      className={classes.navigationElement}\r\n                      onClick={() => {\r\n                        this.handleAnchorClick(blockType.PAST_ORDERS)\r\n                      }}\r\n                    >\r\n                      <TypographyCustom type=\"164\" skipColor>\r\n                        {tr('order.account.past_orders.title')}\r\n                      </TypographyCustom>\r\n                    </li> */}\r\n                  </ul>\r\n                </nav>\r\n                <hr className={classes.hr} />\r\n                <div className=\"u-textAlignCenter\">\r\n                  <Button\r\n                    variant=\"outlined\"\r\n                    color=\"primary\"\r\n                    className={classes.buttonDisconnect}\r\n                    onClick={handleLogout}\r\n                  >\r\n                    <TypographyCustom type=\"164\" skipColor>\r\n                      {tr('order.global.logout')}\r\n                    </TypographyCustom>\r\n                  </Button>\r\n                </div>\r\n              </div>\r\n            </BlockContainer>\r\n          </div>\r\n        )}\r\n      </Sticky>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(LeftBlock)\r\n","import React, { PureComponent } from 'react'\r\nimport compose from 'recompose/compose'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport classNames from 'classnames'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport HardwareKeyboardArrowDown from 'pmt-ui/svg-icons/hardware/keyboard-arrow-down'\r\nimport withWidth, { isWidthUp, isWidthDown } from 'pmt-ui/utils/withWidth'\r\n\r\nimport BlockContainer from '../BlockContainer'\r\n\r\nconst styles = theme => ({\r\n  root: {},\r\n  blockTitle: {\r\n    height: 32,\r\n    lineHeight: '32px',\r\n    textTransform: 'uppercase',\r\n    cursor: 'pointer',\r\n  },\r\n  blockTitleIcon: {\r\n    float: 'right',\r\n    width: 32,\r\n    height: 32,\r\n    color: theme.palette.primary.main,\r\n    transition: 'transform 0.1s ease-in',\r\n  },\r\n  blockTitleIconOpened: {\r\n    transform: 'rotate(-180deg)',\r\n  },\r\n  content: {\r\n    marginBottom: theme.spacing(3),\r\n  },\r\n})\r\n\r\nclass FlexBlock extends PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (isWidthUp('lg', props.width)) {\r\n      props.updateUI({\r\n        opened: true,\r\n      })\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    // if the user resize his screen (marginal case but who knows)\r\n    if (isWidthUp('lg', nextProps.width) && !isWidthUp('lg', this.props.width)) {\r\n      nextProps.updateUI({\r\n        opened: true,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { title, content, opened, handleOnClick, classes, width, ui, updateUI } = this.props\r\n\r\n    return (\r\n      <BlockContainer\r\n        className={classNames('u-relative u-overflowHidden', classes.root)}\r\n        type={BlockContainer.Type.WHITE}\r\n      >\r\n        <TypographyCustom\r\n          type={isWidthDown('sm', width) ? '144' : '164'}\r\n          className={classes.blockTitle}\r\n          onClick={() => {\r\n            handleOnClick()\r\n\r\n            // handle apart the desktop case\r\n            if (isWidthUp('lg', width)) {\r\n              updateUI({\r\n                opened: !ui.opened,\r\n              })\r\n            }\r\n          }}\r\n        >\r\n          {title}\r\n          <HardwareKeyboardArrowDown\r\n            className={classNames(classes.blockTitleIcon, {\r\n              [classes.blockTitleIconOpened]:\r\n                (!isWidthUp('lg', width) && opened) || (isWidthUp('lg', width) && ui.opened),\r\n            })}\r\n          />\r\n        </TypographyCustom>\r\n        {((!isWidthUp('lg', width) && opened) || (isWidthUp('lg', width) && ui.opened)) && (\r\n          <div className={classes.content}>{content}</div>\r\n        )}\r\n      </BlockContainer>\r\n    )\r\n  }\r\n}\r\n\r\nBlockContainer.defaultProps = {\r\n  opened: true,\r\n  onSelect: () => {},\r\n  handleOnClick: () => {},\r\n}\r\n\r\nBlockContainer.propTypes = {\r\n  opened: PropTypes.bool,\r\n  onSelect: PropTypes.func,\r\n  handleOnClick: PropTypes.func,\r\n  title: PropTypes.string,\r\n  content: PropTypes.func,\r\n}\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      opened: true,\r\n    },\r\n  }),\r\n  withWidth(),\r\n  withStyles(styles)\r\n)(FlexBlock)\r\n","import React, { Component } from 'react'\r\nimport compose from 'recompose/compose'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { ProfileFormView } from 'pmt-modules/user/forms/profile'\r\nimport { withForm, FormType } from 'pmt-modules/form'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ScrollableAnchor from 'pmt-ui/ScrollableAnchor'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\n\r\nimport { cleanForApi } from 'pmt-utils/phone'\r\n\r\nimport MessageBlock from '../../../../components/MessageBlock'\r\nimport Button from '../../../../components/Button'\r\nimport FlexBlock from '../../../../components/FlexBlock'\r\n\r\nconst styles = theme => ({\r\n  info: {\r\n    color: theme.palette.primary.main,\r\n    background: theme.pmt.colors.grey100,\r\n    padding: theme.spacing(2),\r\n    margin: `${theme.spacing(2)}px 0`,\r\n  },\r\n  submit: {\r\n    float: 'right',\r\n    marginTop: theme.spacing(4),\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n      marginBottom: theme.spacing(1),\r\n    },\r\n  },\r\n})\r\n\r\nclass ProfileForm extends Component {\r\n  state = {\r\n    userFormDatas: {},\r\n  }\r\n\r\n  getUserDatas = user => ({\r\n    email: user.email,\r\n    firstName: user.firstName,\r\n    formType: FormType.USER_PROFILE,\r\n    lastName: user.lastName,\r\n    phone: user.phone,\r\n    marketing: {\r\n      allowContact: user.marketing.allowContact,\r\n    },\r\n  })\r\n\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.state.userFormDatas = props.formData\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (\r\n      (!isNil(nextProps.user) && this.props.user.id !== nextProps.user.id) ||\r\n      (!isEqual(nextProps.formData, this.getUserDatas(nextProps.user)) &&\r\n        this.props.isFetchingPutUserMe &&\r\n        !nextProps.isFetchingPutUserMe)\r\n    ) {\r\n      this.setState({\r\n        userFormDatas: {\r\n          ...this.state.userFormDatas,\r\n          ...this.getUserDatas(nextProps.user),\r\n        },\r\n      })\r\n    }\r\n\r\n    if (!isEqual(this.props.formData, nextProps.formData)) {\r\n      this.setState({\r\n        userFormDatas: nextProps.formData,\r\n      })\r\n    }\r\n\r\n    if (this.props.isFetchingPutUserMe && !nextProps.isFetchingPutUserMe && nextProps.formIsValid) {\r\n      nextProps.updateUI({\r\n        enableSubmit: false,\r\n      })\r\n    }\r\n  }\r\n\r\n  handleOnChangeFormDatas = formData => {\r\n    if (!isEqual(formData, { ...this.getUserDatas(this.props.user) })) {\r\n      if (!this.props.ui.enableSubmit) {\r\n        this.props.updateUI({\r\n          enableSubmit: true,\r\n        })\r\n      }\r\n    } else if (this.props.ui.enableSubmit) {\r\n      this.props.updateUI({\r\n        enableSubmit: false,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      formErrors,\r\n      onChange,\r\n      hasPhoneRequired,\r\n      formData,\r\n      formType,\r\n      frontAppConfig,\r\n      forgottenPasswordLink,\r\n      onSubmit,\r\n      user,\r\n      itemListFromCart,\r\n      formIsValid,\r\n      isFetchingPutUserMe,\r\n      handleOnClickBlock,\r\n      opened,\r\n      anchor,\r\n      ui,\r\n      submittedForm,\r\n      restaurantsGroupDefaultLocale,\r\n    } = this.props\r\n\r\n    return (\r\n      <ScrollableAnchor id={anchor}>\r\n        <div>\r\n          <FlexBlock\r\n            isFlex\r\n            classes={{ root: 'u-marginBottom25' }}\r\n            title={tr('order.account.profile_form.title')}\r\n            content={\r\n              <React.Fragment>\r\n                <LoadingBlockWrapper show={isFetchingPutUserMe && submittedForm === formType} />\r\n                {hasPhoneRequired() && isEmpty(user.phone) && (\r\n                  <div className={classes.info}>\r\n                    <MessageBlock\r\n                      type={MessageBlock.Type.INFO}\r\n                      text={tr('order.profile.missing_phone')}\r\n                    />\r\n                  </div>\r\n                )}\r\n                <form\r\n                  onSubmit={e => {\r\n                    e.preventDefault()\r\n                    onSubmit({\r\n                      formData: {\r\n                        ...formData,\r\n                        phone: cleanForApi(formData.phone),\r\n                      },\r\n                      formType,\r\n                    })\r\n                  }}\r\n                >\r\n                  <ProfileFormView\r\n                    formData={this.state.userFormDatas}\r\n                    formErrors={formErrors}\r\n                    onChange={onChange}\r\n                    forgottenPasswordLink={forgottenPasswordLink}\r\n                    handleOnChangeFormDatas={this.handleOnChangeFormDatas}\r\n                    restaurantsGroupDefaultLocale={restaurantsGroupDefaultLocale}\r\n                  />\r\n                  <Button\r\n                    size=\"large\"\r\n                    type=\"submit\"\r\n                    label={tr(\r\n                      frontAppConfig.display.paymentPage || isEmpty(itemListFromCart)\r\n                        ? 'order.profile.personnal_informations.submit'\r\n                        : 'order.profile.submit_and_order'\r\n                    )}\r\n                    classes={{ root: classes.submit }}\r\n                    disabled={\r\n                      !formIsValid ||\r\n                      (isFetchingPutUserMe && submittedForm === formType) ||\r\n                      !ui.enableSubmit\r\n                    }\r\n                  />\r\n                </form>\r\n              </React.Fragment>\r\n            }\r\n            handleOnClick={handleOnClickBlock}\r\n            opened={opened}\r\n          />\r\n        </div>\r\n      </ScrollableAnchor>\r\n    )\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      enableSubmit: false,\r\n    },\r\n  }),\r\n  withForm(FormType.USER_PROFILE),\r\n  withStyles(styles)\r\n)(ProfileForm)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport {\r\n  UserAddressListContainer,\r\n  editUserAddress,\r\n  deleteUserAddress,\r\n  isFetchingUserAddressDelete,\r\n} from 'pmt-modules/userAddress'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { LoadingBlock } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport ScrollableAnchor from 'pmt-ui/ScrollableAnchor'\r\n\r\nimport Address from '../../../../components/Address'\r\nimport FlexBlock from '../../../../components/FlexBlock'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  grid: {\r\n    paddingTop: `${theme.spacing(1)}px !important`,\r\n    paddingBottom: `${theme.spacing(1)}px !important`,\r\n  },\r\n})\r\n\r\nconst DeliveryAddresses = ({\r\n  user,\r\n  anchor,\r\n  isFetchingUserAddressDelete,\r\n  deleteUserAddress,\r\n  handleOnClickBlock,\r\n  opened,\r\n  ui,\r\n  updateUI,\r\n  classes,\r\n}) => (\r\n  <ScrollableAnchor id={anchor}>\r\n    <div>\r\n      <FlexBlock\r\n        isFlex\r\n        classes={{ root: 'u-marginBottom25' }}\r\n        title={tr('order.account.delivery_address.title')}\r\n        content={\r\n          <UserAddressListContainer userId={user.id} origin={null} range={null}>\r\n            {({ isFetchingUserAddressList, userAddressList }) => (\r\n              <Grid container spacing={5}>\r\n                {isNil(userAddressList) ||\r\n                isFetchingUserAddressList ||\r\n                isFetchingUserAddressDelete ? (\r\n                  <Grid item xs={12}>\r\n                    <LoadingBlock show />\r\n                  </Grid>\r\n                ) : isEmpty(userAddressList) ? (\r\n                  <Grid item xs={12}>\r\n                    <TypographyCustom type=\"144\">\r\n                      {tr('order.account.delivery_address.no_addresses')}\r\n                    </TypographyCustom>\r\n                  </Grid>\r\n                ) : (\r\n                  <React.Fragment>\r\n                    {userAddressList.map((userAddress, index) => (\r\n                      <Grid key={index} item xs={12} md={6} className={classes.grid}>\r\n                        <Address\r\n                          key={index}\r\n                          label={userAddress.name}\r\n                          labelEdit={tr('order.addresses.form.edit.title')}\r\n                          defaultData={userAddress}\r\n                          address={userAddress}\r\n                          user={user}\r\n                          className={'u-marginBottom10'}\r\n                          showEditAddressForm={\r\n                            userAddress.id === ui.edit.idSelected && ui.edit.showAddressForm\r\n                          }\r\n                          type={Address.Type.ACCOUNT}\r\n                          handleEditAction={() => {\r\n                            updateUI({\r\n                              edit: {\r\n                                idSelected: userAddress.id,\r\n                                showAddressForm: true,\r\n                              },\r\n                            })\r\n                          }}\r\n                          onClose={() => {\r\n                            updateUI({\r\n                              edit: {\r\n                                showAddressForm: false,\r\n                              },\r\n                            })\r\n                          }}\r\n                          handleEditActionSuccess={() => {\r\n                            updateUI({\r\n                              edit: {\r\n                                showAddressForm: false,\r\n                              },\r\n                            })\r\n                          }}\r\n                          handleDeleteAction={() => {\r\n                            deleteUserAddress(user.id, userAddress.id)\r\n                          }}\r\n                        />\r\n                      </Grid>\r\n                    ))}\r\n                  </React.Fragment>\r\n                )}\r\n              </Grid>\r\n            )}\r\n          </UserAddressListContainer>\r\n        }\r\n        handleOnClick={handleOnClickBlock}\r\n        opened={opened}\r\n      />\r\n    </div>\r\n  </ScrollableAnchor>\r\n)\r\n\r\nconst mapStateToProps = state => ({\r\n  isFetchingUserAddressDelete: isFetchingUserAddressDelete(state),\r\n})\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      edit: {\r\n        idSelected: null,\r\n        showEditAddressForm: false,\r\n      },\r\n    },\r\n  }),\r\n  connect(mapStateToProps, {\r\n    editUserAddress,\r\n    deleteUserAddress,\r\n  }),\r\n  withStyles(styles)\r\n)(DeliveryAddresses)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport classNames from 'classnames'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { StickyContainer } from 'pmt-ui/Sticky'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport Button from 'pmt-ui/Button'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Hidden from 'pmt-ui/Hidden'\r\n\r\nimport BlockContainer from '../../../components/BlockContainer'\r\nimport MessageBlock from '../../../components/MessageBlock'\r\nimport BannerView from '../../../components/BannerView'\r\n\r\nimport LeftBlock from './components/LeftBlock'\r\nimport ProfileForm from './components/ProfileForm'\r\n// import DietaryInfo from './components/DietaryInfo'\r\n// import PaymentMethods from './components/PaymentMethods'\r\nimport DeliveryAddresses from './components/DeliveryAddresses'\r\n// import PastOrders from './components/PastOrders'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.up('md')]: {\r\n      padding: `${theme.spacing(2)}px 0`,\r\n    },\r\n  },\r\n  blockContainerMain: {\r\n    height: '100%',\r\n    padding: theme.spacing(4),\r\n    [theme.breakpoints.down('md')]: {\r\n      padding: 0,\r\n    },\r\n  },\r\n  title: {\r\n    marginTop: theme.spacing(1),\r\n    marginBottom: theme.spacing(5),\r\n    [theme.breakpoints.down('md')]: {\r\n      paddingTop: theme.spacing(3),\r\n      paddingLeft: theme.spacing(4),\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      paddingTop: theme.spacing(2),\r\n      paddingLeft: theme.spacing(2),\r\n      marginBottom: theme.spacing(3),\r\n    },\r\n  },\r\n  gridChild: {\r\n    paddingTop: 0,\r\n    paddingBottom: 0,\r\n  },\r\n  hr: {\r\n    width: '90%',\r\n    margin: '0 auto',\r\n    marginTop: theme.spacing(3),\r\n    marginBottom: theme.spacing(3),\r\n    borderTop: `1px solid ${theme.pmt.colors.grey97}`,\r\n  },\r\n  buttonDisconnect: {\r\n    padding: `${theme.spacing(2)}px ${theme.spacing(6)}px`,\r\n    marginBottom: theme.spacing(3),\r\n    textTransform: 'initial',\r\n  },\r\n  buttonDisconnectTypo: {\r\n    lineHeight: 1,\r\n  },\r\n})\r\n\r\nconst BlockType = {\r\n  PROFILE_FORM: 'PROFILE_FORM',\r\n  DIETARY_INFO: 'DIETARY_INFO',\r\n  PAYMENT_METHODS: 'PAYMENT_METHODS',\r\n  DELIVERY_ADDRESS: 'DELIVERY_ADDRESS',\r\n  PAST_ORDERS: 'PAST_ORDERS',\r\n}\r\nclass View extends React.PureComponent {\r\n  handleOnClickBlock = type => {\r\n    if (type === this.props.ui.openedBlock) {\r\n      this.props.updateUI({\r\n        openedBlock: null,\r\n      })\r\n    } else {\r\n      this.props.updateUI({\r\n        openedBlock: type,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      appConfig,\r\n      frontAppConfig,\r\n      itemListFromCart,\r\n      hasPhoneRequired,\r\n      restaurantsGroup,\r\n      isFetching,\r\n      isFetchingPutUserMe,\r\n      errors,\r\n      onSubmit,\r\n      user,\r\n      ui,\r\n      handleLogout,\r\n      goBackRoute,\r\n      submittedForm,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <BannerView\r\n          to={goBackRoute.to}\r\n          params={goBackRoute.params}\r\n          isFromCart={true}\r\n          returnLabel={tr('order.global.return_order')}\r\n        />\r\n        <Grid container spacing={0}>\r\n          <Grid item xs={12}>\r\n            <BlockContainer\r\n              className={classNames(classes.blockContainerMain, 'u-relative', 'u-overflowHidden')}\r\n              type={BlockContainer.Type.GREY}\r\n            >\r\n              {!isNil(user) ? (\r\n                <React.Fragment>\r\n                  <LoadingBlockWrapper show={isFetching} className=\"u-padding40\" />\r\n                  <ErrorBlock\r\n                    error={errors}\r\n                    mode={ErrorBlock.Mode.CUSTOM}\r\n                    customElement={<MessageBlock type={MessageBlock.Type.ERROR} />}\r\n                  />\r\n                  <TypographyCustom type=\"284\" className={classes.title}>\r\n                    {tr('order.profile.my_account')}\r\n                  </TypographyCustom>\r\n                  <StickyContainer>\r\n                    <Grid container spacing={5}>\r\n                      <Hidden mdDown>\r\n                        <Grid item xs={3} className={classes.gridChild}>\r\n                          <LeftBlock\r\n                            appConfig={appConfig}\r\n                            frontAppConfig={frontAppConfig}\r\n                            handleLogout={handleLogout}\r\n                            isFlex={false}\r\n                            blockType={BlockType}\r\n                          />\r\n                        </Grid>\r\n                      </Hidden>\r\n                      <Grid item xs={12} lg={9} className={classes.gridChild}>\r\n                        <ProfileForm\r\n                          frontAppConfig={frontAppConfig}\r\n                          restaurantsGroupDefaultLocale={restaurantsGroup?.settings?.defaultLocale}\r\n                          user={user}\r\n                          itemListFromCart={itemListFromCart}\r\n                          defaultData={{\r\n                            email: user.email,\r\n                            firstName: user.firstName,\r\n                            lastName: user.lastName,\r\n                            phone: user.phone,\r\n                            marketing: {\r\n                              allowContact: user.marketing.allowContact,\r\n                            },\r\n                          }}\r\n                          hasPhoneRequired={hasPhoneRequired}\r\n                          forgottenPasswordLink={\r\n                            !isNil(restaurantsGroup) ? restaurantsGroup.forgottenPasswordLink : null\r\n                          }\r\n                          isFetching={isFetching}\r\n                          isFetchingPutUserMe={isFetchingPutUserMe}\r\n                          onSubmit={onSubmit}\r\n                          anchor={BlockType.PROFILE_FORM}\r\n                          handleOnClickBlock={() => this.handleOnClickBlock(BlockType.PROFILE_FORM)}\r\n                          opened={ui.openedBlock === BlockType.PROFILE_FORM}\r\n                          submittedForm={submittedForm}\r\n                        />\r\n                        {/* 08-2024 we hide the user dietary info setting block since we don't use the feature\r\n                        <DietaryInfo\r\n                          anchor={BlockType.DIETARY_INFO}\r\n                          defaultData={user.dietaryPreferences}\r\n                          handleOnClickBlock={() => this.handleOnClickBlock(BlockType.DIETARY_INFO)}\r\n                          isFetchingPutUserMe={isFetchingPutUserMe}\r\n                          onSubmit={onSubmit}\r\n                          opened={ui.openedBlock === BlockType.DIETARY_INFO}\r\n                          submittedForm={submittedForm}\r\n                          user={user}\r\n                        />\r\n                        */}\r\n                        {/* 08-2024 we hide the user saved card list block since we don't save user cards anymore\r\n                        <PaymentMethods\r\n                          user={user}\r\n                          isFetchingPutUserMe={isFetchingPutUserMe}\r\n                          anchor={BlockType.PAYMENT_METHODS}\r\n                          handleOnClickBlock={() =>\r\n                            this.handleOnClickBlock(BlockType.PAYMENT_METHODS)\r\n                          }\r\n                          opened={ui.openedBlock === BlockType.PAYMENT_METHODS}\r\n                          restaurantsGroup={restaurantsGroup}\r\n                        />\r\n                        */}\r\n                        {appConfig.order.modesFormatted.hasDelivery && (\r\n                          <DeliveryAddresses\r\n                            user={user}\r\n                            anchor={BlockType.DELIVERY_ADDRESS}\r\n                            handleOnClickBlock={() =>\r\n                              this.handleOnClickBlock(BlockType.DELIVERY_ADDRESS)\r\n                            }\r\n                            opened={ui.openedBlock === BlockType.DELIVERY_ADDRESS}\r\n                          />\r\n                        )}\r\n                        {/* <PastOrders\r\n                          rGroupId={!isNil(restaurantsGroup) ? restaurantsGroup.id : null}\r\n                          user={user}\r\n                          anchor={BlockType.PAST_ORDERS}\r\n                          handleOnClickBlock={() => this.handleOnClickBlock(BlockType.PAST_ORDERS)}\r\n                          opened={ui.openedBlock === BlockType.PAST_ORDERS}\r\n                        /> */}\r\n                        <Hidden lgUp>\r\n                          <hr className={classes.hr} />\r\n                          <div className=\"u-textAlignCenter\">\r\n                            <Button\r\n                              variant=\"outlined\"\r\n                              color=\"primary\"\r\n                              className={classes.buttonDisconnect}\r\n                              onClick={handleLogout}\r\n                            >\r\n                              <TypographyCustom\r\n                                type=\"164\"\r\n                                skipColor\r\n                                className={classes.buttonDisconnectTypo}\r\n                              >\r\n                                {tr('order.global.logout')}\r\n                              </TypographyCustom>\r\n                            </Button>\r\n                          </div>\r\n                        </Hidden>\r\n                      </Grid>\r\n                    </Grid>\r\n                  </StickyContainer>\r\n                </React.Fragment>\r\n              ) : (\r\n                <LoadingBlockWrapper show />\r\n              )}\r\n            </BlockContainer>\r\n          </Grid>\r\n        </Grid>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      openedBlock: null,\r\n    },\r\n  }),\r\n  withStyles(styles)\r\n)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { logout, haveAuthCredentials } from 'pmt-modules/auth'\r\nimport { getItemListFromCart } from 'pmt-modules/cart'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { FormType, withForms } from 'pmt-modules/form'\r\nimport {\r\n  OrderPluginUrlCheckerContainer,\r\n  withOrderProperties,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { fieldsType } from 'pmt-modules/registration/forms/register/constants'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport {\r\n  withUserMe,\r\n  updateProfile,\r\n  isFetchingPutUserMe,\r\n  getErrorputUserMe,\r\n} from 'pmt-modules/userMe'\r\nimport withRestaurantsGroupMine from 'pmt-modules/restaurantsGroup/components/withRestaurantsGroup'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\n\r\nimport withWidth, { isWidthUp } from 'pmt-ui/utils/withWidth'\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\n\r\nimport OrderPage from '../../../components/OrderPage'\r\n\r\nimport View from './View'\r\n\r\nclass UserAccountPage extends React.PureComponent {\r\n  state = {\r\n    submittedForm: null,\r\n  }\r\n\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // user doesn't have credentials, go back to login\r\n    if (!this.props.haveAuthCredentials) {\r\n      this.props.redirectTo(getRoute('LOGIN'))\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    // user doesn't have credentials, go back to login\r\n    if (this.props.haveAuthCredentials && !nextProps.haveAuthCredentials) {\r\n      this.props.redirectTo(getRoute('LOGIN'))\r\n    }\r\n  }\r\n\r\n  hasPhoneRequired = () =>\r\n    find(\r\n      this.props.userAppConfig.registration.form.fields,\r\n      ({ required, type }) => required && type === fieldsType.PHONE\r\n    )\r\n\r\n  getGoBackRoute = () => {\r\n    const { restaurant, itemListFromCart } = this.props\r\n\r\n    if (!isNil(restaurant) || !isEmpty(itemListFromCart)) {\r\n      return { to: getRoute('ORDER__CATALOG'), params: { restaurantId: restaurant.id } }\r\n    }\r\n    return { to: getRoute('ORDER__MODE') }\r\n  }\r\n\r\n  handleLogout = () => {\r\n    this.props.logout()\r\n    this.props.redirectTo(getRoute('LOGIN'))\r\n  }\r\n\r\n  handleSubmit = ({ formData, formType }) => {\r\n    EventManager.dispatch(EventManager.Events.ON_PROFILE_SUBMIT)\r\n\r\n    this.setState({\r\n      submittedForm: formType,\r\n    })\r\n\r\n    this.props.updateProfile({\r\n      id: this.props.user.id,\r\n      ...this.props.user,\r\n      ...formData,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      appConfig,\r\n      frontAppConfig,\r\n      isFetchingMe,\r\n      isFetchingPutUserMe,\r\n      isFetchingRestaurantsGroup,\r\n      restaurantsGroup,\r\n      itemListFromCart,\r\n      location,\r\n      me,\r\n      orderProperties,\r\n      restaurant,\r\n      updateUserError,\r\n      width,\r\n    } = this.props\r\n\r\n    return (\r\n      <OrderPage\r\n        headerProps={{\r\n          displayTitle: isWidthUp('md', width),\r\n          displayUser: true,\r\n        }}\r\n        orderProperties={orderProperties}\r\n        restaurant={restaurant}\r\n        location={location}\r\n      >\r\n        <OrderPluginUrlCheckerContainer location={location}>\r\n          <View\r\n            appConfig={appConfig}\r\n            frontAppConfig={frontAppConfig}\r\n            itemListFromCart={itemListFromCart}\r\n            hasPhoneRequired={this.hasPhoneRequired}\r\n            orderProperties={orderProperties}\r\n            restaurantsGroup={restaurantsGroup}\r\n            isFetching={isFetchingMe || isFetchingRestaurantsGroup}\r\n            isFetchingPutUserMe={isFetchingPutUserMe}\r\n            onSubmit={this.handleSubmit}\r\n            user={me}\r\n            errors={updateUserError}\r\n            goBackRoute={this.getGoBackRoute()}\r\n            handleLogout={this.handleLogout}\r\n            submittedForm={this.state.submittedForm}\r\n          />\r\n        </OrderPluginUrlCheckerContainer>\r\n      </OrderPage>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  haveAuthCredentials: haveAuthCredentials(state),\r\n  isFetchingPutUserMe: isFetchingPutUserMe(state),\r\n  itemListFromCart: getItemListFromCart(state),\r\n  updateUserError: getErrorputUserMe(state),\r\n})\r\n\r\nexport default withForms([FormType.USER_PROFILE, FormType.USER_PROFILE_DIETARY])(\r\n  compose(\r\n    withAppConfig,\r\n    withOrderProperties,\r\n    withRestaurant,\r\n    withRestaurantsGroupMine(),\r\n    withUserMe,\r\n    withScrollToTop(),\r\n    connect(mapStateToProps, {\r\n      updateProfile,\r\n      logout,\r\n      redirectTo,\r\n    }),\r\n    withWidth()\r\n  )(UserAccountPage)\r\n)\r\n","import isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nimport { DISABLE_FORM_DEV_DATA_QUERY_PARAM } from 'pmt-modules/form'\r\nimport { APP_TOKEN_QUERY_PARAM } from 'pmt-modules/appSecurity'\r\n\r\nimport RoutingEnum from './routingEnum'\r\n\r\nimport HomePage from '../pages/home'\r\nimport ModePage from '../pages/mode'\r\nimport StoreLocatorPage from '../pages/storeLocator'\r\nimport CatalogPage from '../pages/catalog'\r\nimport MenuPage from '../pages/menu'\r\nimport ProductPage from '../pages/product'\r\nimport CartPage from '../pages/cart'\r\nimport DeliveryAddressPage from '../pages/deliveryAddress'\r\nimport PaymentPage from '../pages/payment'\r\nimport PaymentVerificationPage from '../pages/payment/verification'\r\nimport ConfirmPage from '../pages/confirm'\r\n// login\r\nimport LoginPage from '../pages/login'\r\nimport ForgotPasswordPage from '../pages/forgotPassword'\r\nimport UserProfilePage from '../pages/user/profile'\r\nimport UserAccountPage from '../pages/user/account'\r\n\r\n// list of the queries that are global to all our urls, and should be kept\r\nconst globalQueries = [\r\n  // lang\r\n  'l',\r\n  'apiconsumer', // for retro compat\r\n  'apiConsumer',\r\n  DISABLE_FORM_DEV_DATA_QUERY_PARAM,\r\n  // app token\r\n  APP_TOKEN_QUERY_PARAM,\r\n  'apiVersion',\r\n  'simulate',\r\n\r\n  // used for Google Analytics\r\n  'utm_source',\r\n  'utm_medium',\r\n  'utm_campaign',\r\n  'utm_term',\r\n  'utm_content',\r\n  'gclid',\r\n\r\n  // used for Newrest to :\r\n  //   - go back on catalog\r\n  //   - auth attemptRefresh failed\r\n  //   - postAuthorize and redirect to authorize.uri with auth code and state\r\n  'accessToken',\r\n  'callbackUri',\r\n  'state',\r\n\r\n  // used for tests\r\n  'testLockedBeforePayment',\r\n  // for support\r\n  'disableRestaurantClosedDialog',\r\n]\r\n\r\n// merge our globalQueries with the specific queries of the route\r\nconst getQueries = (queries = []) => [...globalQueries, ...queries]\r\n\r\n/**\r\n * We define  the `handler` for each route of our RoutingEnum.\r\n * The `handler` is the React Component to display for the route.\r\n * It should be a container in most cases.\r\n */\r\nconst routes = [\r\n  {\r\n    definition: RoutingEnum.HOME,\r\n    handler: HomePage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__MODE,\r\n    handler: ModePage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__STORE_LOCATOR,\r\n    handler: StoreLocatorPage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__CATALOG,\r\n    handler: CatalogPage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__CATEGORY,\r\n    handler: CatalogPage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__MENU,\r\n    handler: MenuPage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__PRODUCT,\r\n    handler: ProductPage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__CART,\r\n    handler: CartPage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.LOGIN,\r\n    handler: LoginPage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__DELIVERY_ADDRESS,\r\n    handler: DeliveryAddressPage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.FORGOT_PASSWORD,\r\n    handler: ForgotPasswordPage,\r\n    props: {\r\n      authRequired: false,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.USER_PROFILE,\r\n    handler: UserProfilePage,\r\n    props: {\r\n      authRequired: true,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__USER__ACCOUNT,\r\n    handler: UserAccountPage,\r\n    props: {\r\n      authRequired: true,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__PAYMENT,\r\n    handler: PaymentPage,\r\n    props: {\r\n      authRequired: true,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__PAYMENT__VERIFICATION,\r\n    handler: PaymentVerificationPage,\r\n    props: {\r\n      authRequired: true,\r\n    },\r\n  },\r\n  {\r\n    definition: RoutingEnum.ORDER__CONFIRM,\r\n    handler: ConfirmPage,\r\n    props: {\r\n      authRequired: true,\r\n    },\r\n  },\r\n]\r\n\r\nexport default routes.map(route => {\r\n  // handle props.query to set global queries\r\n  if (!route.props.query) {\r\n    route.props.query = getQueries([])\r\n  }\r\n\r\n  // check config is ok.\r\n  invariant(\r\n    !isNil(route.props.authRequired),\r\n    `${route.definition.name}: props authRequired not set`\r\n  )\r\n  invariant(!isNil(route.handler), `${route.definition.name}: handler is required`)\r\n  invariant(!isNil(route.definition), `${route}: definition is required`)\r\n\r\n  return route\r\n})\r\n","//\r\n// Entry point of any PayMyTable app.\r\n// The front application is configured via the `appOptions` with\r\n// * -> required\r\n//\r\n// - *middlewares: middlewares to use\r\n// - devMiddlewares: middlewares to use only on devlopment\r\n// - prodMiddlewares: middlewares to use only on production\r\n// - *entities: entities to use on the store\r\n// - *routes: routes to use (array of definitions)\r\n// - environment: configuration of the current environment. Must contains:\r\n//  - Logger\r\n//    - SENTRY_URL\r\n// - forms (TODO)\r\n// - theme (TODO)\r\n// - dialogs (TODO)\r\n//\r\n\r\nimport React from 'react'\r\n\r\nimport Immutable from 'immutable'\r\nimport invariant from 'invariant'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport createBrowserHistory from 'history/createBrowserHistory'\r\n\r\nimport ApiManager from 'pmt-modules/api/ApiManager'\r\nimport { Events, EventManager } from 'pmt-modules/event'\r\nimport { initializeAnalytics } from 'pmt-modules/analytics'\r\n\r\nimport configureRootReducer from './utils/configureRootReducer'\r\n\r\nimport {\r\n  setCurrentEnv,\r\n  __VERSION__,\r\n  __APP_GIT_COMMIT__,\r\n  __SDK_GIT_COMMIT__,\r\n  __APP_GIT_BRANCH__,\r\n  __SDK_GIT_BRANCH__,\r\n} from '../environment'\r\n\r\nimport configureStore from './store/configureStore'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { handleChunkError, CHUNK_ERROR_RELOAD_KEY } from 'pmt-utils/errorHandlers'\r\nimport { getFromSession, removeFromSession } from 'pmt-modules/storage'\r\n\r\nimport { unregisterServiceWorker } from './registerServiceWorker'\r\nimport App from './App'\r\n\r\nimport { initFrontSessionId } from 'pmt-modules/frontSession'\r\nimport { setDefaultAppConfig } from 'pmt-modules/appConfig'\r\nimport { registerStore } from 'pmt-modules/store'\r\nimport { registerForms, getFormsDefaultState } from 'pmt-modules/form'\r\nimport { registerSearches } from 'pmt-modules/search'\r\nimport { registerStatisticsConfig } from 'pmt-modules/statistics'\r\nimport { registerDialogs } from 'pmt-modules/dialog'\r\nimport { registerTheme, getRegisteredMuiTheme } from 'pmt-modules/theme'\r\nimport { setDataCatcherSettings } from 'pmt-modules/dataCatcher/config'\r\nimport { verifyDataCatcherConfiguration } from 'pmt-modules/dataCatcher/verifications'\r\nimport { registerHistory, registerRoutes, registerRoutingEnum } from 'pmt-modules/routing'\r\nimport { registerEntities } from 'pmt-modules/reducers'\r\n\r\nimport { configureI18n } from 'pmt-modules/i18n'\r\n\r\nimport configRoutes from 'app/config/routes'\r\n\r\n// import css\r\nimport './styles/index.scss'\r\n\r\nlet store = null\r\nlet initialized = false\r\n\r\n// IMPORTANT — this initialization must run only once.\r\n// In React, when <StrictMode> is enabled (DEV only), React intentionally\r\n// mounts, unmounts, then re‑mounts components to detect side-effects.\r\n// As a result, ApplicationView is constructed twice in development,\r\n// which would otherwise recreate singletons (history, store, routes, events, etc.)\r\n// and break the app’s routing and global registries.\r\n//\r\n// The `initialized` flag ensures that all global setup (store, history,\r\n// event listeners, registries…) runs only once, even if ApplicationView\r\n// is rendered multiple times under StrictMode. This keeps the app stable\r\n// and prevents duplicated listeners or multiple history instances.\r\nfunction initApp(appOptions) {\r\n  if (initialized) {\r\n    return store\r\n  }\r\n\r\n  initialized = true\r\n\r\n  // Register a global listener for unhandled promise rejections caused by failed dynamic\r\n  // imports (e.g. Firebase chunk) that live outside the React tree and are therefore not\r\n  // caught by ErrorBoundary. On successful page load the sessionStorage flag is cleared so\r\n  // a future chunk error can still trigger a reload.\r\n  window.addEventListener('unhandledrejection', event =>\r\n    handleChunkError(event?.reason, 'unhandledrejection')\r\n  )\r\n  window.addEventListener('load', () => {\r\n    const hasReloaded = getFromSession(CHUNK_ERROR_RELOAD_KEY)\r\n    if (hasReloaded) {\r\n      console.info('Page is fully loaded after chunk load error detected. Clear session flag.')\r\n      removeFromSession(CHUNK_ERROR_RELOAD_KEY)\r\n    }\r\n  })\r\n\r\n  initFrontSessionId()\r\n\r\n  appOptions.routes = configRoutes\r\n\r\n  //\r\n  // environment\r\n  // must be handle in first\r\n  //\r\n  const environment = appOptions.environment\r\n  setCurrentEnv(environment)\r\n\r\n  setDefaultAppConfig(appOptions.appConfig)\r\n\r\n  //\r\n  // events\r\n  //\r\n  if (!isNil(appOptions.events)) {\r\n    invariant(\r\n      !isNil(appOptions.events.events) && !isNil(appOptions.events.listeners),\r\n      'missing events or listners on appOptions events'\r\n    )\r\n\r\n    EventManager.registerEvents(appOptions.events.events)\r\n    EventManager.addListeners(appOptions.events.listeners)\r\n  }\r\n\r\n  //\r\n  // Firebase\r\n  // must be before the `configureRootReducer`\r\n  //\r\n  if (process.env.FEATURE_FIREBASE) {\r\n    if (!isNil(appOptions.firebase)) {\r\n      // we took the whole config and keep only the one for the current ENV\r\n      appOptions.firebase = appOptions.firebase[appOptions.environment.ENV]\r\n\r\n      import('pmt-modules/firebase')\r\n        .then(({ initializeFirebase }) => {\r\n          initializeFirebase(appOptions)\r\n        })\r\n        .catch(error => {\r\n          Logger.error('Failed to load Firebase module', error)\r\n          handleChunkError(error, 'Firebase')\r\n        })\r\n    }\r\n  }\r\n\r\n  //\r\n  // configure history\r\n  //\r\n\r\n  const history = createBrowserHistory()\r\n\r\n  registerHistory(history)\r\n\r\n  history.listen(location =>\r\n    EventManager.dispatch(Events.ON_HISTORY_CHANGE, {\r\n      location,\r\n    })\r\n  )\r\n\r\n  //\r\n  //\r\n  //\r\n\r\n  appOptions.rootReducer = configureRootReducer(appOptions)\r\n\r\n  //\r\n  // forms\r\n  //\r\n\r\n  const forms = appOptions.forms\r\n  registerForms(forms)\r\n\r\n  //\r\n  // searches\r\n  //\r\n\r\n  const searches = appOptions.searches\r\n  registerSearches(searches)\r\n\r\n  //\r\n  // statistics\r\n  //\r\n\r\n  const statistics = appOptions.statistics\r\n  registerStatisticsConfig(statistics)\r\n\r\n  //\r\n  // dialogs\r\n  //\r\n\r\n  const dialogs = appOptions.dialogs\r\n  registerDialogs(dialogs)\r\n\r\n  //\r\n  // Configure theme\r\n  //\r\n\r\n  registerTheme(appOptions.theme)\r\n\r\n  //\r\n  // Configure data catcher module\r\n  //\r\n\r\n  if (!isNil(appOptions.dataCatcher)) {\r\n    verifyDataCatcherConfiguration(appOptions)\r\n    setDataCatcherSettings(appOptions.dataCatcher)\r\n  }\r\n\r\n  //\r\n  // configure store\r\n  //\r\n\r\n  // -- calculate preloadedState\r\n  const preloadedState = appOptions.preloadedState || {}\r\n\r\n  // get forms default state\r\n  preloadedState.form = getFormsDefaultState()\r\n\r\n  // set theme\r\n  preloadedState.ux = {\r\n    ...preloadedState.ux,\r\n    theme: {\r\n      current: Immutable.fromJS(getRegisteredMuiTheme()),\r\n    },\r\n  }\r\n\r\n  registerEntities(appOptions.entities)\r\n\r\n  // set on appOptions\r\n  appOptions.preloadedState = preloadedState\r\n\r\n  store = configureStore(appOptions)\r\n  registerStore(store)\r\n\r\n  //\r\n  // routes\r\n  //\r\n  registerRoutes(appOptions.routes)\r\n  registerRoutingEnum(appOptions.routingEnum)\r\n\r\n  //\r\n  // I18n\r\n  //\r\n\r\n  configureI18n(appOptions.i18n)\r\n\r\n  //\r\n  // Analytics\r\n  //\r\n  if (!isNil(appOptions.analytics)) {\r\n    appOptions.analytics = appOptions.analytics[appOptions.environment.ENV]\r\n    initializeAnalytics(appOptions)\r\n  }\r\n\r\n  //\r\n  // configure api manager\r\n  //\r\n\r\n  const getApiManagerOptions = appOptions.getApiManagerOptions\r\n  invariant(isFunction(getApiManagerOptions), 'appOptions getApiManagerOptions is required')\r\n  ApiManager.setGetApiManagerOptions(getApiManagerOptions)\r\n\r\n  //\r\n  // Configure logger\r\n  //\r\n\r\n  const loggerConfig = environment.Logger\r\n\r\n  // add app version to have more info\r\n  loggerConfig.APP_VERSION = __VERSION__\r\n  loggerConfig.ENV = appOptions.environment.ENV\r\n  loggerConfig.__APP_GIT_COMMIT__ = __APP_GIT_COMMIT__\r\n  loggerConfig.__SDK_GIT_COMMIT__ = __SDK_GIT_COMMIT__\r\n  loggerConfig.__APP_GIT_BRANCH__ = __APP_GIT_BRANCH__\r\n  loggerConfig.__SDK_GIT_BRANCH__ = __SDK_GIT_BRANCH__\r\n\r\n  Logger.configure(loggerConfig)\r\n  environment.logger = loggerConfig\r\n\r\n  // Dispatch app init event with appOptions\r\n  EventManager.dispatch(Events.ON_APP_INIT, { appOptions })\r\n\r\n  //\r\n  // Unregister service worker for now since it causes white pages due to\r\n  // an 'Uncaught SyntaxError: Unexpected token <' error\r\n  //\r\n  unregisterServiceWorker()\r\n\r\n  return store\r\n}\r\n\r\nclass ApplicationView extends React.Component {\r\n  // IMPORTANT - this constructor is called twice in DEV mode, due to the <StrictMode>\r\n  // it must be idempotent\r\n  constructor(props) {\r\n    super(props)\r\n    const appOptions = props.appOptions\r\n    this.i18nOptions = appOptions.i18n\r\n    this.store = initApp(appOptions)\r\n  }\r\n\r\n  componentDidMount() {\r\n    // Initialize i18n AFTER the component is mounted\r\n    configureI18n(this.i18nOptions)\r\n  }\r\n\r\n  render() {\r\n    return <App store={this.store} />\r\n  }\r\n}\r\n\r\nexport default ApplicationView\r\n","import React, { StrictMode } from 'react'\r\nimport ReactDOM from 'react-dom'\r\n\r\nimport ApplicationView from './ApplicationView'\r\n\r\n//\r\n// get the rootElement\r\n//\r\nconst Application = appOptions => {\r\n  const rootElement = appOptions.rootElement || document.getElementById('root')\r\n\r\n  ReactDOM.render(\r\n    <StrictMode>\r\n      <ApplicationView appOptions={appOptions} />\r\n    </StrictMode>,\r\n    rootElement\r\n  )\r\n}\r\n\r\nexport default Application\r\n","export default {\r\n  authentication: {\r\n    mode: 0,\r\n    oauth2: {\r\n      clientId: null,\r\n      clientSecret: null,\r\n    },\r\n  },\r\n  user: {\r\n    login: null,\r\n    registration: {\r\n      form: {\r\n        fields: [\r\n          {\r\n            type: 'FIRST_NAME',\r\n            required: true,\r\n          },\r\n          {\r\n            type: 'LAST_NAME',\r\n            required: true,\r\n          },\r\n          {\r\n            type: 'EMAIL',\r\n            required: true,\r\n          },\r\n          {\r\n            type: 'PHONE',\r\n            required: true,\r\n          },\r\n          {\r\n            type: 'PASSWORD',\r\n            required: true,\r\n          },\r\n          {\r\n            type: 'MARKETING_ALLOW_CONTACT',\r\n            required: false,\r\n          },\r\n        ],\r\n      },\r\n    },\r\n  },\r\n  order: {\r\n    modes: [],\r\n\r\n    onSite: {\r\n      canOrderUsingSlots: false,\r\n      canOrderUsingAsap: true,\r\n    },\r\n    takeAway: {\r\n      canOrderUsingSlots: true,\r\n      canOrderUsingAsap: true,\r\n    },\r\n    delivery: {\r\n      canOrderUsingSlots: false,\r\n      canOrderUsingAsap: true,\r\n    },\r\n\r\n    hasTableNumber: true,\r\n    bypassManufactureDelay: false,\r\n    bypassOpeningHours: false,\r\n\r\n    comments: {\r\n      global: {\r\n        enabled: true,\r\n        maxLength: 250,\r\n      },\r\n      items: {\r\n        enabled: true,\r\n        maxLength: 40,\r\n      },\r\n    },\r\n  },\r\n  front: {\r\n    display: {\r\n      paymentPage: true,\r\n      totalPrices: true,\r\n    },\r\n    theme: {\r\n      customCss: {},\r\n      logo: {\r\n        display: true,\r\n      },\r\n    },\r\n    restaurants: {\r\n      list: {\r\n        limit: 5,\r\n      },\r\n    },\r\n  },\r\n  texts: {\r\n    ORDER__LOGIN__MARKETING__OPTIN: {\r\n      fr: \"J'accepte de recevoir des offres promotionnelles de l'enseigne\",\r\n      en: 'I accept to receive special offers from the store',\r\n      de: 'Ich akzeptiere Angebote von uns erhalten',\r\n    },\r\n  },\r\n}\r\n","export default []\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\n\r\nimport { hideDeleteCartDialog } from 'pmt-modules/cart'\r\nimport { goBackToStoreLocator } from 'pmt-modules/orderPlugin'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { DialogActions, DialogContent } from 'pmt-ui/Dialog'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Button from '../Button'\r\n\r\nconst styles = theme => ({\r\n  dialogContent: {\r\n    padding: `${theme.spacing(3)}px ${theme.spacing(3)}px`,\r\n  },\r\n  title: {\r\n    color: theme.palette.primary.main,\r\n    marginBottom: theme.spacing(3),\r\n  },\r\n  bigButtonMobile: {\r\n  },\r\n})\r\n\r\nconst DeleteCart = ({\r\n  entry,\r\n  item,\r\n  padding,\r\n  hideDeleteCartDialog,\r\n  goBackToStoreLocator,\r\n  classes,\r\n  ...props\r\n}) => (\r\n  <>\r\n  <DialogContent classes={{ root: classes.dialogContent }}>\r\n    <TypographyCustom type=\"247\" component=\"p\" className={classes.title}>\r\n      {tr('order.dialog.cart_delete.title')}\r\n    </TypographyCustom>\r\n    <TypographyCustom type=\"164\" component=\"p\">\r\n      {tr('order.dialog.cart_delete.info')}\r\n    </TypographyCustom>\r\n    <br />\r\n    <TypographyCustom type=\"164\" component=\"p\" className=\"u-marginBottom10\">\r\n      {tr('order.dialog.cart_delete.question')}\r\n    </TypographyCustom>\r\n  </DialogContent>\r\n  <DialogActions>\r\n    <Button\r\n      variant=\"outlined\"\r\n      size=\"large\"\r\n      label={tr('order.global.no_cancel')}\r\n      className={classNames(classes.bigButtonMobile)}\r\n      onClick={hideDeleteCartDialog}\r\n    />\r\n    <Button\r\n      size=\"large\"\r\n      label={tr('order.global.delete')}\r\n      className={classNames('u-marginLeft20', classes.bigButtonMobile)}\r\n      onClick={() => {\r\n        goBackToStoreLocator()\r\n        hideDeleteCartDialog()\r\n      }}\r\n    />\r\n  </DialogActions>\r\n  </>\r\n)\r\n\r\nDeleteCart.DialogRootProps = {}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n  return {}\r\n}\r\n\r\nconst EnhancedDeleteCartDialog = compose(\r\n  connect(mapStateToProps, {\r\n    goBackToStoreLocator,\r\n    hideDeleteCartDialog,\r\n  }),\r\n  withStyles(styles)\r\n)(DeleteCart)\r\n\r\n// After applying HOCs (withWidth, withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedDeleteCartDialog.DialogRootProps = DeleteCart.DialogRootProps\r\n\r\nexport default EnhancedDeleteCartDialog\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { getOrderProduct } from '../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that returns the selected Product from store\r\n *\r\n * Requirements:\r\n * - catalog\r\n *\r\n */\r\nclass SelectedProductContainer extends React.PureComponent {\r\n  render() {\r\n    const { children, ...otherProps } = this.props\r\n\r\n    return children({\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nSelectedProductContainer.propTypes = {\r\n  catalog: PropTypes.object.isRequired,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {\r\n    orderProduct: getOrderProduct(state),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {})(SelectedProductContainer)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { showDietaryInfoDialog, withCatalog } from 'pmt-modules/catalog'\r\nimport { redirectTo } from 'pmt-modules/routing'\r\nimport { SuggestionActionType } from 'pmt-modules/suggestion'\r\nimport SelectedProductContainer from 'pmt-modules/orderProduct/components/SelectedProductContainer'\r\nimport { selectOptionValue, unselectOptionValue, setReclaimLater } from 'pmt-modules/orderProduct'\r\nimport {\r\n  addOrderProductToMenu,\r\n  updateOrderProductToMenu,\r\n  getOrderMenu,\r\n} from 'pmt-modules/orderMenu'\r\nimport {\r\n  hideProductDialog,\r\n  SelectedCategoryContainer,\r\n  withOrderProperties,\r\n  saveAlcoholApproval,\r\n  getAppConfigFrontSettings,\r\n} from 'pmt-modules/orderPlugin'\r\nimport {\r\n  addOrderMenuToCart,\r\n  addOrderProductToCart,\r\n  updateOrderProductOnCart,\r\n  getSuspendedDatas,\r\n  setSuspendedDatas,\r\n} from 'pmt-modules/cart'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\n\r\nimport View from '../components/View'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass ProductDialog extends React.Component {\r\n  addSuspendedItem = () => {\r\n    const { cartSuspendedDatas, addOrderProductToCart, addOrderMenuToCart, setSuspendedDatas } =\r\n      this.props\r\n\r\n    // we check if we have suspended item to be added to cart when the user quit the product\r\n    // we need to be in replace mode because the compose mode is already added\r\n    if (\r\n      !isNil(cartSuspendedDatas) &&\r\n      cartSuspendedDatas.suspendedActionType === SuggestionActionType.REPLACE\r\n    ) {\r\n      if (cartSuspendedDatas.suspendedItem.isProduct) {\r\n        addOrderProductToCart(cartSuspendedDatas.suspendedItem, { skipSuggestion: true })\r\n      } else if (cartSuspendedDatas.suspendedItem.isMenu) {\r\n        addOrderMenuToCart(cartSuspendedDatas.suspendedItem, { skipSuggestion: true })\r\n      }\r\n      setSuspendedDatas(null, null)\r\n    }\r\n  }\r\n\r\n  handleSelectOptionValue = (option, value) => {\r\n    this.props.selectOptionValue(option, value)\r\n  }\r\n\r\n  handleUnselectOptionValue = (option, value) => {\r\n    this.props.unselectOptionValue(option, value)\r\n  }\r\n\r\n  handleOnSubmit = (orderProduct, category) => {\r\n    const {\r\n      viewOptions,\r\n      updateOrderProductOnCart,\r\n      updateOrderProductToMenu,\r\n      addOrderProductToCart,\r\n      addOrderProductToMenu,\r\n      orderProperties,\r\n      restaurant,\r\n      orderMenu,\r\n      hideProductDialog,\r\n      cartSuspendedDatas,\r\n      setSuspendedDatas,\r\n    } = this.props\r\n\r\n    if (orderProduct.isValid) {\r\n      if (!orderProduct.hasSuggestion) {\r\n        EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_ADD_PRODUCT, {\r\n          category,\r\n          dueDate: orderProperties.dueDate,\r\n          item: orderProduct,\r\n          restaurant: restaurant,\r\n        })\r\n      }\r\n\r\n      if (viewOptions.isMenuMode === true) {\r\n        // menu mode\r\n        if (viewOptions.isEditMode === true) {\r\n          updateOrderProductToMenu(orderProduct, viewOptions.partId, viewOptions.partCategoryId)\r\n        } else {\r\n          EventManager.dispatch(EventManager.Events.ON_CATALOG_MENU_ADD_PRODUCT, {\r\n            category,\r\n            dueDate: orderProperties.dueDate,\r\n            item: orderProduct,\r\n            menu: orderMenu,\r\n            restaurant: restaurant,\r\n          })\r\n\r\n          addOrderProductToMenu(orderProduct, viewOptions.partId, viewOptions.partCategoryId, {\r\n            skipSuggestion: viewOptions.skipSuggestion ? viewOptions.skipSuggestion : true,\r\n          })\r\n        }\r\n      } else {\r\n        // product mode\r\n        if (viewOptions.isEditMode === true) {\r\n          updateOrderProductOnCart(orderProduct)\r\n        } else {\r\n          addOrderProductToCart(orderProduct, {\r\n            skipSuggestion: viewOptions.skipSuggestion ? viewOptions.skipSuggestion : false,\r\n          })\r\n        }\r\n\r\n        // if the user submit the product to add\r\n        // we reset suspended item in cart\r\n        if (!isNil(cartSuspendedDatas)) {\r\n          setSuspendedDatas(null, null)\r\n        }\r\n      }\r\n\r\n      hideProductDialog()\r\n    }\r\n  }\r\n\r\n  setReclaimLater = isChecked => {\r\n    this.props.setReclaimLater(isChecked)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      orderAppConfig,\r\n      appConfigPreset,\r\n      catalog,\r\n      viewOptions,\r\n      hideProductDialog,\r\n      showDietaryInfoDialog,\r\n      orderProperties,\r\n      saveAlcoholApproval,\r\n      frontSettings,\r\n    } = this.props\r\n    // viewOptions:\r\n    // - isMenuMode {boolean}\r\n    // - isEditMode {boolean}\r\n\r\n    const { isMenuMode, isEditMode } = viewOptions\r\n\r\n    return (\r\n      <SelectedCategoryContainer catalog={catalog}>\r\n        {({ selectedCategory }) => (\r\n          <SelectedProductContainer catalog={catalog} isMenuMode={isMenuMode}>\r\n            {({ orderProduct }) =>\r\n              orderProduct ? (\r\n                <View\r\n                  appConfigPreset={appConfigPreset}\r\n                  orderAppConfig={orderAppConfig}\r\n                  orderProduct={orderProduct}\r\n                  isMenuMode={isMenuMode}\r\n                  isEditMode={isEditMode}\r\n                  onSelectOptionValue={this.handleSelectOptionValue}\r\n                  onUnselectOptionValue={this.handleUnselectOptionValue}\r\n                  onSubmit={() => this.handleOnSubmit(orderProduct, selectedCategory)}\r\n                  onClose={() => {\r\n                    if (!isMenuMode) {\r\n                      this.addSuspendedItem()\r\n                    }\r\n                    hideProductDialog()\r\n                  }}\r\n                  showDietaryInfoDialog={() => showDietaryInfoDialog(orderProduct)}\r\n                  setReclaimLater={this.setReclaimLater}\r\n                  orderProperties={orderProperties}\r\n                  saveAlcoholApproval={saveAlcoholApproval}\r\n                  frontSettings={frontSettings}\r\n                />\r\n              ) : (\r\n                <div />\r\n              )\r\n            }\r\n          </SelectedProductContainer>\r\n        )}\r\n      </SelectedCategoryContainer>\r\n    )\r\n  }\r\n}\r\n\r\n// Dialog root properties\r\nProductDialog.DialogRootProps = {\r\n  // we want the dialog to quit when we click on the backdrop\r\n  disableBackdropClick: false,\r\n}\r\n\r\nProductDialog.DialogStyles = theme => ({\r\n  paper: {\r\n    width: '100%',\r\n    // fix weird bug on Safari\r\n    zIndex: 100,\r\n    // -- for IE\r\n    '-ms-overflow-style': '-ms-autohiding-scrollbar',\r\n    [theme.breakpoints.down('sm')]: {\r\n      height: `calc(100% - ${theme.spacing(2)}px)`,\r\n      maxHeight: '100%',\r\n      margin: theme.spacing(1),\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      maxWidth: 760,\r\n      // -- for IE\r\n      width: '100%',\r\n    },\r\n  },\r\n})\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  cartSuspendedDatas: getSuspendedDatas(state),\r\n  orderMenu: getOrderMenu(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nconst EnhancedProductDialog = compose(\r\n  withAppConfig,\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withCatalog,\r\n  connect(mapStateToProps, {\r\n    hideProductDialog,\r\n    selectOptionValue,\r\n    unselectOptionValue,\r\n    addOrderProductToCart,\r\n    addOrderProductToMenu,\r\n    addOrderMenuToCart,\r\n    updateOrderProductToMenu,\r\n    updateOrderProductOnCart,\r\n    setSuspendedDatas,\r\n    redirectTo,\r\n    showDietaryInfoDialog,\r\n    setReclaimLater,\r\n    saveAlcoholApproval,\r\n  })\r\n)(ProductDialog)\r\n\r\n// After applying HOCs (withAppConfig, withRestaurant, withCatalog, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedProductDialog.DialogRootProps = ProductDialog.DialogRootProps\r\nEnhancedProductDialog.DialogStyles = ProductDialog.DialogStyles\r\n\r\nexport default EnhancedProductDialog\r\n","import React, { Fragment } from 'react'\r\nimport clsx from 'clsx'\r\nimport get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport Table, { TableBody, TableCell, TableHead, TableRow } from 'pmt-ui/Table'\r\n\r\nimport { makeStyles, withStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  allergen: {\r\n    color: theme.pmt.colors.grey97,\r\n  },\r\n  allergenActive: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  tableCell: {\r\n    paddingLeft: 0,\r\n    paddingRight: 0,\r\n    textAlign: 'center',\r\n    width: 90,\r\n    minWidth: 90,\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: 55,\r\n      minWidth: 55,\r\n    },\r\n  },\r\n  cellRow: {\r\n    minWidth: 300,\r\n    [theme.breakpoints.down('sm')]: {\r\n      minWidth: 200,\r\n    },\r\n  },\r\n}))\r\n\r\nconst CustomTableCell = withStyles(theme => ({\r\n  head: {\r\n    backgroundColor: theme.pmt.colors.greyBackground,\r\n    fontWeight: 'bold',\r\n  },\r\n  body: {\r\n    backgroundColor: theme.pmt.colors.greyBackground,\r\n    fontSize: 12,\r\n    minWidth: 300,\r\n  },\r\n}))(TableCell)\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nconst DietaryInfoDialog = ({ item, allergens }) => {\r\n  const classes = useStyles()\r\n\r\n  const renderItem = ({ item, allergens, depth = 2 }) => (\r\n    <Fragment>\r\n      {/* item */}\r\n      {renderRow({ item, allergens, depth })}\r\n\r\n      {/* options */}\r\n      {(item.options || []).map(\r\n        option =>\r\n          option.hasAllergens && (\r\n            <Fragment>\r\n              {option.values && (\r\n                <Fragment>\r\n                  <TableRow style={{ height: 36 }}>\r\n                    <CustomTableCell\r\n                      component=\"th\"\r\n                      scope=\"row\"\r\n                      colSpan={allergens.length + 1}\r\n                      style={{\r\n                        paddingLeft: 4 * (depth + 1) * 3,\r\n                      }}\r\n                    >\r\n                      {option.name}\r\n                    </CustomTableCell>\r\n                  </TableRow>\r\n                  {(option.values || []).map(v =>\r\n                    renderRow({ allergens, item: v, depth: depth + 2 })\r\n                  )}\r\n                </Fragment>\r\n              )}\r\n            </Fragment>\r\n          )\r\n      )}\r\n\r\n      {/* parts */}\r\n      {item.parts &&\r\n        (item.parts || []).map(\r\n          part =>\r\n            part.hasAllergens && (\r\n              <Fragment>\r\n                <TableRow key={`parts-${part.id}`} style={{ height: 36 }}>\r\n                  <CustomTableCell component=\"th\" scope=\"row\" colSpan={allergens.length + 1}>\r\n                    {part.name}\r\n                  </CustomTableCell>\r\n                </TableRow>\r\n                {(part.products || []).map(product =>\r\n                  renderItem({ allergens, item: product, depth: depth + 1 })\r\n                )}\r\n\r\n                {/* part categories */}\r\n                {renderPartCategory({\r\n                  classes,\r\n                  categories: part.categories,\r\n                  depth: depth + 1,\r\n                })}\r\n              </Fragment>\r\n            )\r\n        )}\r\n    </Fragment>\r\n  )\r\n\r\n  const renderPartCategory = ({ categories, depth = 2 }) =>\r\n    categories &&\r\n    categories.map(category => (\r\n      <Fragment>\r\n        {(category.products || []).map(item => renderItem({ allergens, item, depth }))}\r\n        {(category.categories || []).map(subCategory =>\r\n          renderPartCategory({ categories: subCategory.categories, depth })\r\n        )}\r\n      </Fragment>\r\n    ))\r\n\r\n  const renderRow = ({ allergens, item, depth = 2 }) =>\r\n    !isEmpty(get(item, 'dietaryInfo.allergens', [])) && (\r\n      <TableRow key={item.id}>\r\n        <TableCell\r\n          component=\"th\"\r\n          scope=\"row\"\r\n          className={classes.cellRow}\r\n          style={{ paddingLeft: 4 * depth * 3 }}\r\n        >\r\n          {item.name}\r\n        </TableCell>\r\n        {allergens.map(a => (\r\n          <TableCell key={`${item.id}-${a.value}`} classes={{ root: classes.tableCell }}>\r\n            <div\r\n              className={clsx(classes.allergen, {\r\n                [classes.allergenActive]:\r\n                  item.dietaryInfo && (item.dietaryInfo.allergens || []).indexOf(a.value) >= 0,\r\n              })}\r\n            >\r\n              {a.icon}\r\n            </div>\r\n          </TableCell>\r\n        ))}\r\n      </TableRow>\r\n    )\r\n\r\n  return (\r\n    <Table className={classes.table}>\r\n      <TableHead>\r\n        <TableRow>\r\n          <CustomTableCell />\r\n          {allergens.map(a => (\r\n            <CustomTableCell classes={{ root: classes.tableCell }}>{a.label}</CustomTableCell>\r\n          ))}\r\n        </TableRow>\r\n      </TableHead>\r\n      <TableBody>{renderItem({ item, allergens, classes })}</TableBody>\r\n    </Table>\r\n  )\r\n}\r\n\r\nexport default DietaryInfoDialog\r\n","import React, { Fragment } from 'react'\r\nimport get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport Divider from '@material-ui/core/Divider'\r\nimport List from '@material-ui/core/List'\r\nimport ListItem from '@material-ui/core/ListItem'\r\nimport ListItemText from '@material-ui/core/ListItemText'\r\n\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    width: '100%',\r\n  },\r\n  allergens: {\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n  },\r\n  allergen: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    color: theme.palette.primary.main,\r\n    margin: theme.spacing(1, 1, 0, 0),\r\n\r\n    '& > svg': {\r\n      fontSize: 16,\r\n    },\r\n  },\r\n  subRow: {\r\n    backgroundColor: theme.pmt.colors.greyBackground,\r\n  },\r\n  rowTextPrimary: {\r\n    fontWeight: 'bold',\r\n  },\r\n}))\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nconst DietaryInfoDialog = ({ item, allergens }) => {\r\n  const classes = useStyles()\r\n\r\n  const renderItem = ({ item, allergens, depth = 1 }) =>\r\n    item.hasAllergens && (\r\n      <Fragment>\r\n        <List>\r\n          {/* item */}\r\n          {renderRow({ item, allergens, depth })}\r\n\r\n          {(item.hasOptionWithAllergens || item.hasPartWithAllergens) && <Divider />}\r\n\r\n          {/* options */}\r\n          {(item.options || []).map(\r\n            option =>\r\n              option.hasAllergens &&\r\n              (option.values && (\r\n                <Fragment>\r\n                  <Divider />\r\n                  <List disablePadding>\r\n                    <ListItem disableRipple className={classes.subRow}>\r\n                      <ListItemText primary={option.name} />\r\n                    </ListItem>\r\n                    <List disablePadding dense>\r\n                      {(option.values || []).map(v =>\r\n                        renderRow({ allergens, item: v, depth: depth + 2 })\r\n                      )}\r\n                    </List>\r\n                  </List>\r\n                </Fragment>\r\n              ))\r\n          )}\r\n\r\n          {/* parts */}\r\n          {item.parts &&\r\n            (item.parts || []).map(\r\n              part =>\r\n                part.hasAllergens && (\r\n                  <Fragment>\r\n                    <Divider />\r\n                    <List key={`parts-${part.id}`} disablePadding dense>\r\n                      <ListItem disableRipple className={classes.subRow}>\r\n                        <ListItemText primary={part.name} />\r\n                      </ListItem>\r\n                      {(part.products || []).map(product =>\r\n                        renderItem({ allergens, item: product, depth: depth + 1 })\r\n                      )}\r\n\r\n                      {/* part categories */}\r\n                      {renderPartCategory({\r\n                        classes,\r\n                        categories: part.categories,\r\n                        depth: depth + 1,\r\n                      })}\r\n                    </List>\r\n                  </Fragment>\r\n                )\r\n            )}\r\n        </List>\r\n        <Divider />\r\n      </Fragment>\r\n    )\r\n\r\n  const renderPartCategory = ({ categories, depth = 2 }) =>\r\n    categories &&\r\n    categories.map(category => (\r\n      <Fragment>\r\n        {(category.products || []).map(item => renderItem({ allergens, item, depth }))}\r\n        {(category.categories || []).map(subCategory =>\r\n          renderPartCategory({ categories: subCategory.categories, depth })\r\n        )}\r\n      </Fragment>\r\n    ))\r\n\r\n  const renderRow = ({ allergens, item, depth }) =>\r\n    !isEmpty(get(item, 'dietaryInfo.allergens', [])) && (\r\n      <ListItem style={{ paddingLeft: 4 * depth * 2 }}>\r\n        <ListItemText\r\n          key={item.id}\r\n          classes={{ primary: classes.rowTextPrimary }}\r\n          primary={item.name}\r\n          secondary={\r\n            <div className={classes.allergens}>\r\n              {allergens.map(\r\n                a =>\r\n                  (item?.dietaryInfo.allergens || []).indexOf(a.value) >= 0 && (\r\n                    <div className={classes.allergen}>\r\n                      {a.icon} {a.label}\r\n                    </div>\r\n                  )\r\n              )}\r\n            </div>\r\n          }\r\n        />\r\n      </ListItem>\r\n    )\r\n\r\n  return renderItem({ item, allergens })\r\n}\r\n\r\nexport default DietaryInfoDialog\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\n\r\nimport { hideDietaryInfoDialog } from 'pmt-modules/catalog'\r\nimport { getAllergensOptions } from 'pmt-modules/user/constants'\r\n\r\nimport { withStyles } from '@material-ui/core/styles'\r\nimport Hidden from '@material-ui/core/Hidden'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport Button from 'app/components/Button'\r\n\r\nimport DesktopView from './DesktopView'\r\nimport MobileView from './MobileView'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  dialogTitle: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  dialogContent: {\r\n    [theme.breakpoints.down('xs')]: {\r\n      padding: 0,\r\n    },\r\n  },\r\n  dialogActions: {\r\n    justifyContent: 'center',\r\n    padding: `${theme.spacing(2)}px 0`,\r\n  },\r\n  wrapper: {\r\n    width: '100%',\r\n    height: '100%',\r\n    overflow: 'auto',\r\n  },\r\n})\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass DietaryInfoDialog extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // set static var for better performance and clean allergens without icon\r\n    this.allergens = getAllergensOptions().filter(\r\n      a => props.item.formattedAllergens.indexOf(a.value) >= 0\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const { classes, item, hideDietaryInfoDialog } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <DialogTitle disableTypography>\r\n          <TypographyCustom type=\"287\" skipColor className={classes.dialogTitle}>\r\n            {tr('order.dietary_info.title')}\r\n          </TypographyCustom>\r\n        </DialogTitle>\r\n        <DialogContent className={classes.dialogContent}>\r\n          <div className={classes.wrapper}>\r\n            <Hidden xsDown>\r\n              <DesktopView allergens={this.allergens} item={item} />\r\n            </Hidden>\r\n            <Hidden smUp>\r\n              <MobileView allergens={this.allergens} item={item} />\r\n            </Hidden>\r\n          </div>\r\n        </DialogContent>\r\n        <DialogActions classes={{ root: classes.dialogActions }}>\r\n          <Button\r\n            variant=\"outlined\"\r\n            label={tr('order.dietary_info.close')}\r\n            onClick={hideDietaryInfoDialog}\r\n          />\r\n        </DialogActions>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nDietaryInfoDialog.DialogStyles = theme => ({\r\n  paper: {\r\n    // fix weird bug on Safari\r\n    zIndex: 100,\r\n    // -- for IE\r\n    '-ms-overflow-style': '-ms-autohiding-scrollbar',\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n      height: `calc(100% - ${theme.spacing(2)}px)`,\r\n      maxHeight: '100%',\r\n      margin: theme.spacing(1),\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      maxWidth: 1100,\r\n      // -- for IE\r\n      width: '100%',\r\n    },\r\n  },\r\n})\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nconst EnhancedDietaryInfoDialog = compose(\r\n  withStyles(styles),\r\n  connect(mapStateToProps, {\r\n    hideDietaryInfoDialog,\r\n  })\r\n)(DietaryInfoDialog)\r\n\r\n// After applying HOCs (withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedDietaryInfoDialog.DialogStyles = DietaryInfoDialog.DialogStyles\r\n\r\nexport default EnhancedDietaryInfoDialog\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport values from 'lodash/values'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport {\r\n  addOrderMenuToCart,\r\n  addOrderProductToCart,\r\n  addToCartFromShortcut,\r\n  setSuspendedDatas,\r\n} from 'pmt-modules/cart'\r\nimport { getSuggestion, hideSuggestionDialog, SuggestionActionType } from 'pmt-modules/suggestion'\r\nimport { openProduct } from 'pmt-modules/orderProduct'\r\nimport {\r\n  createOrderMenuFromMenu,\r\n  getFilledMenu,\r\n  isMenuAutofillable,\r\n  openMenu,\r\n} from 'pmt-modules/orderMenu'\r\nimport {\r\n  withOrderProperties,\r\n  saveAlcoholApproval,\r\n  getAppConfigFrontSettings,\r\n} from 'pmt-modules/orderPlugin'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport AlertButton from 'pmt-ui/AlertButton'\r\nimport { CardItem } from 'pmt-ui/Card'\r\nimport { CardItemOrder } from 'pmt-ui/Card/components/CardItem'\r\nimport { DialogActions, DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport withWidth, { isWidthDown } from 'pmt-ui/utils/withWidth'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ActionDone from 'pmt-ui/svg-icons/action/done'\r\nimport ContentAdd from 'pmt-ui/svg-icons/content/add'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport StateMachine from 'pmt-ui/StateMachine'\r\nimport Button, { ButtonLink } from '../../../components/Button'\r\nimport Chip from '../../../components/Chip'\r\nimport CartModifierTag from '../../../components/CartModifier/CartModifierTag'\r\nimport { OrderItemTrackingType } from 'pmt-modules/order'\r\n\r\nconst styles = theme => ({\r\n  dialogTitle: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  dialogActions: {\r\n    justifyContent: 'center',\r\n    padding: `${theme.spacing(2)}px 0`,\r\n  },\r\n  actionTypeContainer: {\r\n    marginTop: theme.spacing(3),\r\n    marginBottom: theme.spacing(3),\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginTop: 0,\r\n    },\r\n    '&:last-child': {\r\n      marginBottom: 0,\r\n    },\r\n  },\r\n  actionTypeLabelWrapper: {\r\n    [theme.breakpoints.up('md')]: {\r\n      ...theme.pmt.mixins.textEllipsis,\r\n    },\r\n  },\r\n  actionTypeLabel: {\r\n    fontWeight: 700,\r\n  },\r\n  orderItemName: {\r\n    [theme.breakpoints.up('md')]: {\r\n      ...theme.pmt.mixins.textEllipsis,\r\n      minHeight: 19,\r\n    },\r\n    // on mobile device, bring the product name on the same line than action type label\r\n    // and display a \"space\" before\r\n    [theme.breakpoints.down('sm')]: {\r\n      display: 'inline',\r\n      '&:before': {\r\n        content: '\" \"',\r\n      },\r\n    },\r\n  },\r\n  title: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  cartModifierChip: {\r\n    display: 'table',\r\n    marginBottom: theme.spacing(0.5),\r\n    cursor: 'pointer',\r\n    borderRadius: 4,\r\n  },\r\n  cartModifierUnavailable: {\r\n    opacity: 0.2,\r\n  },\r\n})\r\n\r\nconst State = {\r\n  NORMAL: 'NORMAL',\r\n  ADDING_TO_CART: 'ADDING_TO_CART',\r\n}\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass SuggestionDialog extends React.PureComponent {\r\n  getItemSuggestedPrice(item, actionType) {\r\n    let price = ''\r\n\r\n    if (item.suggestedPrice === 0 && actionType === SuggestionActionType.REPLACE) {\r\n      price = tr('global.suggestions.same_price')\r\n      return price\r\n    }\r\n\r\n    if (actionType === SuggestionActionType.REPLACE) {\r\n      price = `${item.suggestedPrice > 0 ? '+' : ''}`\r\n    }\r\n\r\n    price += item.suggestedPriceFormatted\r\n\r\n    return price\r\n  }\r\n\r\n  handleOpenItem = (item, actionType, options) => {\r\n    const { addOrderMenuToCart, setSuspendedDatas, hideSuggestionDialog, openMenu, openProduct } =\r\n      this.props\r\n\r\n    // we set suspended item here so we can add it if the user cancel on product/menu view\r\n    setSuspendedDatas(this.props.orderItem, actionType)\r\n    hideSuggestionDialog()\r\n\r\n    if (item.isProduct) {\r\n      openProduct(item, options)\r\n    } else if (item.isMenu) {\r\n      if (actionType === SuggestionActionType.REPLACE && isMenuAutofillable(item)) {\r\n        const filledMenu =\r\n          item.isOrderMenu === true\r\n            ? getFilledMenu(item)\r\n            : getFilledMenu(createOrderMenuFromMenu(item))\r\n\r\n        addOrderMenuToCart(filledMenu, { skipSuggestion: true })\r\n        setSuspendedDatas(null, null)\r\n      } else {\r\n        openMenu(item, options)\r\n      }\r\n    }\r\n  }\r\n\r\n  handleHideDialogAndAddItem = () => {\r\n    this.props.hideSuggestionDialog()\r\n\r\n    if (this.props.orderItem.isProduct) {\r\n      EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_ADD_PRODUCT, {\r\n        dueDate: this.props.orderProperties.dueDate,\r\n        item: this.props.orderItem,\r\n        restaurant: this.props.restaurant,\r\n      })\r\n      this.props.addOrderProductToCart(this.props.orderItem, { skipSuggestion: true })\r\n    } else if (this.props.orderItem.isMenu) {\r\n      EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_ADD_MENU, {\r\n        dueDate: this.props.orderProperties.dueDate,\r\n        item: this.props.orderItem,\r\n        restaurant: this.props.restaurant,\r\n      })\r\n      this.props.addOrderMenuToCart(this.props.orderItem, { skipSuggestion: true })\r\n    }\r\n  }\r\n\r\n  getItemsByActionType = (suggestions, actionType) =>\r\n    suggestions.filter(({ item, action }) => action === actionType && item.available)\r\n\r\n  addTracking = items => {\r\n    items.forEach(\r\n      item => (item.item.tracking = OrderItemTrackingType.ADDED_BY_MANUALLY_CONFIGURED_SUGGESTIONS)\r\n    )\r\n  }\r\n\r\n  processAddBtnClick = (item, actionType, restaurant, transitionTo, addToCartFromShortcut) => {\r\n    if (item.available) {\r\n      // handle the item triggering the suggestion\r\n      // compose = we put it on the cart (the suggested item will - or not - be added later)\r\n      // replace = we don't put it on the cart\r\n      if (actionType === SuggestionActionType.COMPOSE) {\r\n        this.handleHideDialogAndAddItem()\r\n      } else {\r\n        this.props.hideSuggestionDialog()\r\n      }\r\n\r\n      // handle the suggested item\r\n      if (item.isComplexItem) {\r\n        this.handleOpenItem(item, actionType, {\r\n          restaurantId: restaurant.id,\r\n          skipSuggestion: true,\r\n        })\r\n      } else {\r\n        transitionTo(State.ADDING_TO_CART)\r\n        EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_ADD_PRODUCT, {\r\n          item,\r\n          restaurant,\r\n        })\r\n        addToCartFromShortcut(item)\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      orderItem,\r\n      addToCartFromShortcut,\r\n      restaurant,\r\n      width,\r\n      orderProperties,\r\n      saveAlcoholApproval,\r\n      frontSettings,\r\n    } = this.props\r\n    const isMobile = isWidthDown('sm', width)\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <DialogTitle disableTypography>\r\n          <TypographyCustom\r\n            id=\"suggestion-dialog-title\"\r\n            type=\"287\"\r\n            skipColor\r\n            className={classes.dialogTitle}\r\n          >\r\n            {!isNil(orderItem.suggestedIntroduction) && !isEmpty(orderItem.suggestedIntroduction)\r\n              ? orderItem.suggestedIntroduction\r\n              : tr('order.suggestions')}\r\n          </TypographyCustom>\r\n        </DialogTitle>\r\n        <DialogContent>\r\n          {values(SuggestionActionType).map(actionType => {\r\n            const items = this.getItemsByActionType(orderItem.suggestions, actionType)\r\n            this.addTracking(items)\r\n\r\n            return (\r\n              items.length > 0 && (\r\n                <Grid\r\n                  spacing={2}\r\n                  key={`actionType-${actionType}-label`}\r\n                  container\r\n                  className={classes.actionTypeContainer}\r\n                >\r\n                  {SuggestionActionType.COMPOSE !== actionType && (\r\n                    <Grid item xs={12} md={3} className={classes.actionTypeLabelWrapper}>\r\n                      <TypographyCustom component=\"span\" type={204}>\r\n                        <React.Fragment>\r\n                          <span className={classes.actionTypeLabel}>\r\n                            {tr(`order.suggestions.action_type.${actionType}`)}\r\n                          </span>\r\n                          &nbsp;\r\n                          {tr(`order.suggestions.action_type.your`)}\r\n                        </React.Fragment>\r\n                      </TypographyCustom>\r\n                      <TypographyCustom className={classes.orderItemName} type={204}>\r\n                        {orderItem.name}\r\n                      </TypographyCustom>\r\n                    </Grid>\r\n                  )}\r\n                  <Grid\r\n                    spacing={isMobile ? 0 : 2}\r\n                    container\r\n                    key={`actionType-${actionType}-items`}\r\n                    item\r\n                    xs={12}\r\n                    md={SuggestionActionType.COMPOSE !== actionType ? 9 : 12}\r\n                  >\r\n                    {items.map(({ item, action }) => (\r\n                      <Grid\r\n                        key={`item-${item.id}`}\r\n                        item\r\n                        xs={12}\r\n                        md={SuggestionActionType.COMPOSE !== actionType ? 6 : 4}\r\n                        className={isMobile ? 'u-marginBottom20' : null}\r\n                      >\r\n                        <StateMachine\r\n                          states={State}\r\n                          default={State.NORMAL}\r\n                          transitions={[\r\n                            {\r\n                              state: State.ADDING_TO_CART,\r\n                              to: State.NORMAL,\r\n                              duration: 1000,\r\n                            },\r\n                          ]}\r\n                        >\r\n                          {({ currentState, transitionTo }) => {\r\n                            const addBtnIcon =\r\n                              actionType === SuggestionActionType.COMPOSE &&\r\n                              (currentState === State.NORMAL ? <ContentAdd /> : <ActionDone />)\r\n                            const addBtnLabel = tr(\r\n                              actionType === SuggestionActionType.COMPOSE\r\n                                ? currentState === State.NORMAL\r\n                                  ? 'order.catalog.add'\r\n                                  : 'order.catalog.added'\r\n                                : currentState === State.NORMAL\r\n                                  ? 'order.catalog.replace'\r\n                                  : 'order.catalog.replaced'\r\n                            )\r\n\r\n                            return (\r\n                              <CardItem\r\n                                type={<CardItemOrder />}\r\n                                classes={{\r\n                                  title: classes.title,\r\n                                }}\r\n                                // give item even if it is not used, to simplify debug on react dev tools\r\n                                item={item}\r\n                                description={item.description}\r\n                                image={item.image}\r\n                                restaurantLogo={restaurant.logo}\r\n                                name={item.name}\r\n                                price={this.getItemSuggestedPrice(item, actionType)}\r\n                                isAvailable={item.available}\r\n                                isCategory={item.isCategory}\r\n                                hasCartModifier={\r\n                                  SuggestionActionType.REPLACE !== actionType &&\r\n                                  item.hasCartModifier\r\n                                }\r\n                                basePrice={\r\n                                  SuggestionActionType.REPLACE !== actionType &&\r\n                                  item.hasCartModifier\r\n                                    ? item.basePriceFormatted\r\n                                    : null\r\n                                }\r\n                                cartModifierTag={(cartModifier, index) => (\r\n                                  <CartModifierTag\r\n                                    cartModifier={cartModifier}\r\n                                    chipElement={\r\n                                      <Chip\r\n                                        key={index}\r\n                                        label={cartModifier.tag}\r\n                                        noBorder\r\n                                        classes={{\r\n                                          root: classNames(classes.cartModifierChip, {\r\n                                            [classes.cartModifierUnavailable]: !item.available,\r\n                                          }),\r\n                                        }}\r\n                                      />\r\n                                    }\r\n                                    key={index}\r\n                                    overEventsEnabled={false}\r\n                                  />\r\n                                )}\r\n                                onClickCard={() => {\r\n                                  if (item.available) {\r\n                                    EventManager.dispatch(\r\n                                      EventManager.Events.ON_CATALOG_ITEM_DETAIL,\r\n                                      {\r\n                                        item,\r\n                                        restaurant,\r\n                                        category: {\r\n                                          name: 'Suggestion',\r\n                                        },\r\n                                      }\r\n                                    )\r\n\r\n                                    if (actionType === SuggestionActionType.COMPOSE) {\r\n                                      this.handleHideDialogAndAddItem()\r\n                                    }\r\n                                    this.handleOpenItem(item, actionType, {\r\n                                      restaurantId: restaurant.id,\r\n                                      skipSuggestion: true,\r\n                                    })\r\n                                  }\r\n                                }}\r\n                                buttonAdd={\r\n                                  frontSettings.display.ageCheckForAlcohol &&\r\n                                  item.isProduct &&\r\n                                  !item.isComplexItem &&\r\n                                  item.containsAlcohol &&\r\n                                  !orderProperties.alcoholApprovalAnswer ? (\r\n                                    <AlertButton\r\n                                      button={<Button />}\r\n                                      size=\"small\"\r\n                                      icon={addBtnIcon}\r\n                                      label={addBtnLabel}\r\n                                      onAgree={e => {\r\n                                        e.stopPropagation()\r\n                                        saveAlcoholApproval()\r\n                                        this.processAddBtnClick(\r\n                                          item,\r\n                                          actionType,\r\n                                          restaurant,\r\n                                          transitionTo,\r\n                                          addToCartFromShortcut\r\n                                        )\r\n                                      }}\r\n                                      alertTitle={tr(\r\n                                        'order.cart.age_check_for_alcohol.dialog.title'\r\n                                      )}\r\n                                      alertContent={tr(\r\n                                        'order.cart.age_check_for_alcohol.dialog.description'\r\n                                      )}\r\n                                      okLabel={tr('order.cart.age_check_for_alcohol.dialog.ok')}\r\n                                      cancelLabel={tr(\r\n                                        'order.cart.age_check_for_alcohol.dialog.cancel'\r\n                                      )}\r\n                                    />\r\n                                  ) : (\r\n                                    <Button\r\n                                      size=\"small\"\r\n                                      icon={addBtnIcon}\r\n                                      label={addBtnLabel}\r\n                                      onClick={e => {\r\n                                        e.stopPropagation()\r\n                                        this.processAddBtnClick(\r\n                                          item,\r\n                                          actionType,\r\n                                          restaurant,\r\n                                          transitionTo,\r\n                                          addToCartFromShortcut\r\n                                        )\r\n                                      }}\r\n                                    />\r\n                                  )\r\n                                }\r\n                              />\r\n                            )\r\n                          }}\r\n                        </StateMachine>\r\n                      </Grid>\r\n                    ))}\r\n                  </Grid>\r\n                </Grid>\r\n              )\r\n            )\r\n          })}\r\n        </DialogContent>\r\n        <DialogActions classes={{ root: classes.dialogActions }}>\r\n          <Button\r\n            variant=\"outlined\"\r\n            label={tr('order.suggestions.no_thanks')}\r\n            onClick={this.handleHideDialogAndAddItem}\r\n          />\r\n        </DialogActions>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\n// Dialog root properties\r\nSuggestionDialog.DialogRootProps = {\r\n  // we want the dialog to quit when we click on the backdrop\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n  // give screen readers an accessible name for the dialog (otherwise it's just\r\n  // announced as a generic \"dialog\", with no indication of its purpose)\r\n  'aria-labelledby': 'suggestion-dialog-title',\r\n}\r\n\r\nSuggestionDialog.DialogStyles = theme => ({\r\n  paper: {\r\n    // fix weird bug on Safari\r\n    zIndex: 100,\r\n    // -- for IE\r\n    '-ms-overflow-style': '-ms-autohiding-scrollbar',\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n      height: `calc(100% - ${theme.spacing(2)}px)`,\r\n      maxHeight: '100%',\r\n      margin: theme.spacing(1),\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      maxWidth: 1100,\r\n      // -- for IE\r\n      width: '100%',\r\n    },\r\n  },\r\n})\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  orderItem: getSuggestion(state, props),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n})\r\n\r\nconst EnhancedSuggestionDialog = compose(\r\n  withWidth(),\r\n  withStyles(styles),\r\n  connect(mapStateToProps, {\r\n    addOrderProductToCart,\r\n    addOrderMenuToCart,\r\n    setSuspendedDatas,\r\n    hideSuggestionDialog,\r\n    addToCartFromShortcut,\r\n    openMenu,\r\n    openProduct,\r\n    saveAlcoholApproval,\r\n  }),\r\n  withOrderProperties,\r\n  withRestaurant,\r\n  withOrderProperties\r\n)(SuggestionDialog)\r\n\r\n// After applying HOCs (withWidth, withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedSuggestionDialog.DialogRootProps = SuggestionDialog.DialogRootProps\r\nEnhancedSuggestionDialog.DialogStyles = SuggestionDialog.DialogStyles\r\n\r\nexport default EnhancedSuggestionDialog\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { addOrderMenuToCart, addOrderProductToCart, addToCartFromShortcut } from 'pmt-modules/cart'\r\nimport {\r\n  getOrderProperties,\r\n  saveAlcoholApproval,\r\n  getAppConfigFrontSettings,\r\n} from 'pmt-modules/orderPlugin'\r\nimport { getAppConfig } from 'pmt-modules/appConfig'\r\nimport { hideUpsellingDialog } from 'pmt-modules/catalog'\r\nimport { openProduct } from 'pmt-modules/orderProduct'\r\nimport { openMenu } from 'pmt-modules/orderMenu'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\n\r\nimport { CardItem } from 'pmt-ui/Card'\r\nimport { CardItemOrder } from 'pmt-ui/Card/components/CardItem'\r\nimport { DialogActions, DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ActionDone from 'pmt-ui/svg-icons/action/done'\r\nimport ContentAdd from 'pmt-ui/svg-icons/content/add'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport StateMachine from 'pmt-ui/StateMachine'\r\nimport AlertButton from 'pmt-ui/AlertButton'\r\nimport Button, { ButtonLink } from 'app/components/Button'\r\nimport Chip from '../../../components/Chip'\r\nimport CartModifierTag from '../../../components/CartModifier/CartModifierTag'\r\nimport MessageBlock from '../../../components/MessageBlock'\r\nimport { OrderItemTrackingType } from 'pmt-modules/order'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  dialogTitle: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  dialogActions: {\r\n    justifyContent: 'center',\r\n    padding: `${theme.spacing(2)}px 0`,\r\n  },\r\n  container: {\r\n    marginTop: theme.spacing(3),\r\n    marginBottom: theme.spacing(3),\r\n    [theme.breakpoints.down('sm')]: {\r\n      marginTop: 0,\r\n    },\r\n    '&:last-child': {\r\n      marginBottom: 0,\r\n    },\r\n  },\r\n  title: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  cartModifierChip: {\r\n    display: 'table',\r\n    marginBottom: theme.spacing(0.5),\r\n    cursor: 'pointer',\r\n    borderRadius: 4,\r\n  },\r\n  cartModifierUnavailable: {\r\n    opacity: 0.2,\r\n  },\r\n  aiNotice: {\r\n    marginTop: theme.spacing(1),\r\n    marginBottom: theme.spacing(1),\r\n    justifyContent: 'center',\r\n    color: `${theme.pmt.colors.grey500} !important`,\r\n    fontSize: '12px !important',\r\n    fontStyle: 'italic',\r\n    '& svg': {\r\n      display: 'none',\r\n    },\r\n    '& *': {\r\n      color: 'inherit !important',\r\n      fontSize: 'inherit !important',\r\n      fontStyle: 'inherit !important',\r\n    },\r\n  },\r\n})\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass UpsellingDialog extends React.Component {\r\n  handleOpenItem = (item, options) => {\r\n    const { hideUpsellingDialog, openMenu, openProduct } = this.props\r\n\r\n    hideUpsellingDialog()\r\n\r\n    if (item.isProduct) {\r\n      openProduct(item, options)\r\n    } else if (item.isMenu) {\r\n      openMenu(item, options)\r\n    }\r\n  }\r\n\r\n  hideUpsellingDialog = () => {\r\n    this.props.hideUpsellingDialog()\r\n  }\r\n\r\n  addTracking = (items, upsellingDialogContentGeneratedByAI) => {\r\n    items.forEach(\r\n      item =>\r\n        (item.tracking = upsellingDialogContentGeneratedByAI\r\n          ? OrderItemTrackingType.ADDED_BY_AI_GENERATED_UPSELLS\r\n          : OrderItemTrackingType.ADDED_BY_MANUALLY_CONFIGURED_UPSELLS)\r\n    )\r\n  }\r\n\r\n  processClickAddBtn = (item, restaurant, transitionTo, orderProperties, addToCartFromShortcut) => {\r\n    if (item.available) {\r\n      this.hideUpsellingDialog()\r\n\r\n      if (item.isComplexItem) {\r\n        this.handleOpenItem(item, {\r\n          restaurantId: restaurant.id,\r\n        })\r\n      } else {\r\n        transitionTo(State.ADDING_TO_CART)\r\n        EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_ADD_PRODUCT, {\r\n          dueDate: orderProperties.dueDate,\r\n          item,\r\n          restaurant,\r\n        })\r\n        addToCartFromShortcut(item)\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      addToCartFromShortcut,\r\n      orderProperties,\r\n      restaurant,\r\n      upsellingCategory,\r\n      saveAlcoholApproval,\r\n      frontSettings,\r\n      appConfig,\r\n    } = this.props\r\n\r\n    const upsellingDialogContentGeneratedByAI =\r\n      appConfig?.order?.upsellingDialogContentGeneratedByAI\r\n\r\n    this.addTracking(upsellingCategory.items, upsellingDialogContentGeneratedByAI)\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <DialogTitle disableTypography>\r\n          <TypographyCustom\r\n            id=\"upselling-dialog-title\"\r\n            type=\"287\"\r\n            skipColor\r\n            className={classes.dialogTitle}\r\n          >\r\n            {upsellingCategory.description}\r\n          </TypographyCustom>\r\n        </DialogTitle>\r\n        <DialogContent>\r\n          <Grid spacing={2} container className={classes.container}>\r\n            {upsellingCategory.items.map(\r\n              item =>\r\n                item.available && (\r\n                  <Grid key={`item-${item.id}`} item xs={12} md={4}>\r\n                    <StateMachine\r\n                      states={State}\r\n                      default={State.NORMAL}\r\n                      transitions={[\r\n                        {\r\n                          state: State.ADDING_TO_CART,\r\n                          to: State.NORMAL,\r\n                          duration: 1000,\r\n                        },\r\n                      ]}\r\n                    >\r\n                      {({ currentState, transitionTo }) => {\r\n                        const addBtnIcon =\r\n                          currentState === State.NORMAL ? <ContentAdd /> : <ActionDone />\r\n                        const addBtnLabel = tr(\r\n                          currentState === State.NORMAL\r\n                            ? 'order.catalog.add'\r\n                            : 'order.catalog.added'\r\n                        )\r\n                        return (\r\n                          <CardItem\r\n                            type={<CardItemOrder />}\r\n                            classes={{ title: classes.title }}\r\n                            // give item even if it is not used, to simplify debug on react dev tools\r\n                            item={item}\r\n                            description={item.description}\r\n                            image={item.image}\r\n                            restaurantLogo={restaurant.logo}\r\n                            name={item.name}\r\n                            price={item.priceFormatted}\r\n                            isAvailable={item.available}\r\n                            isCategory={item.isCategory}\r\n                            hasCartModifier={item.hasCartModifier}\r\n                            basePrice={item.hasCartModifier ? item.basePriceFormatted : null}\r\n                            cartModifierTag={(cartModifier, index) => (\r\n                              <CartModifierTag\r\n                                cartModifier={cartModifier}\r\n                                chipElement={\r\n                                  <Chip\r\n                                    key={index}\r\n                                    label={cartModifier.tag}\r\n                                    noBorder\r\n                                    classes={{\r\n                                      root: classNames(classes.cartModifierChip, {\r\n                                        [classes.cartModifierUnavailable]: !item.available,\r\n                                      }),\r\n                                    }}\r\n                                  />\r\n                                }\r\n                                key={index}\r\n                                overEventsEnabled={false}\r\n                              />\r\n                            )}\r\n                            onClickCard={() => {\r\n                              if (item.available) {\r\n                                EventManager.dispatch(EventManager.Events.ON_CATALOG_ITEM_DETAIL, {\r\n                                  item,\r\n                                  restaurant,\r\n                                  category: {\r\n                                    name: 'Upselling',\r\n                                  },\r\n                                })\r\n                                this.hideUpsellingDialog()\r\n                                this.handleOpenItem(item, {\r\n                                  restaurantId: restaurant.id,\r\n                                })\r\n                              }\r\n                            }}\r\n                            buttonAdd={\r\n                              frontSettings.display.ageCheckForAlcohol &&\r\n                              item.isProduct &&\r\n                              !item.isComplexItem &&\r\n                              item.containsAlcohol &&\r\n                              !orderProperties.alcoholApprovalAnswer ? (\r\n                                <AlertButton\r\n                                  button={<Button />}\r\n                                  size=\"small\"\r\n                                  icon={addBtnIcon}\r\n                                  label={addBtnLabel}\r\n                                  onAgree={e => {\r\n                                    e.stopPropagation()\r\n                                    saveAlcoholApproval()\r\n                                    this.processClickAddBtn(\r\n                                      item,\r\n                                      restaurant,\r\n                                      transitionTo,\r\n                                      orderProperties,\r\n                                      addToCartFromShortcut\r\n                                    )\r\n                                  }}\r\n                                  alertTitle={tr('order.cart.age_check_for_alcohol.dialog.title')}\r\n                                  alertContent={tr(\r\n                                    'order.cart.age_check_for_alcohol.dialog.description'\r\n                                  )}\r\n                                  okLabel={tr('order.cart.age_check_for_alcohol.dialog.ok')}\r\n                                  cancelLabel={tr('order.cart.age_check_for_alcohol.dialog.cancel')}\r\n                                />\r\n                              ) : (\r\n                                <Button\r\n                                  size=\"small\"\r\n                                  icon={addBtnIcon}\r\n                                  label={addBtnLabel}\r\n                                  onClick={e => {\r\n                                    e.stopPropagation()\r\n\r\n                                    this.processClickAddBtn(\r\n                                      item,\r\n                                      restaurant,\r\n                                      transitionTo,\r\n                                      orderProperties,\r\n                                      addToCartFromShortcut\r\n                                    )\r\n                                  }}\r\n                                />\r\n                              )\r\n                            }\r\n                          />\r\n                        )\r\n                      }}\r\n                    </StateMachine>\r\n                  </Grid>\r\n                )\r\n            )}\r\n          </Grid>\r\n          {upsellingDialogContentGeneratedByAI && (\r\n            <MessageBlock\r\n              type={MessageBlock.Type.INFO}\r\n              classes={{ root: classes.aiNotice }}\r\n              text={tr('order.suggestions.ai_generated_content')}\r\n            />\r\n          )}\r\n        </DialogContent>\r\n        <DialogActions classes={{ root: classes.dialogActions }}>\r\n          <Button\r\n            variant=\"outlined\"\r\n            label={tr('order.suggestions.no_thanks')}\r\n            onClick={this.hideUpsellingDialog}\r\n          />\r\n        </DialogActions>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nconst State = {\r\n  NORMAL: 'NORMAL',\r\n  ADDING_TO_CART: 'ADDING_TO_CART',\r\n}\r\n\r\n// Dialog root properties\r\nUpsellingDialog.DialogRootProps = {\r\n  // we don't want the dialog to quit when we click on the backdrop\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n  'aria-labelledby': 'upselling-dialog-title',\r\n}\r\n\r\nUpsellingDialog.DialogStyles = theme => ({\r\n  paper: {\r\n    // fix weird bug on Safari\r\n    zIndex: 100,\r\n    // -- for IE\r\n    '-ms-overflow-style': '-ms-autohiding-scrollbar',\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n      height: `calc(100% - ${theme.spacing(2)}px)`,\r\n      maxHeight: '100%',\r\n      margin: theme.spacing(1),\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      maxWidth: 1100,\r\n      // -- for IE\r\n      width: '100%',\r\n    },\r\n  },\r\n})\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  orderProperties: getOrderProperties(state),\r\n  frontSettings: getAppConfigFrontSettings(state),\r\n  appConfig: getAppConfig(state),\r\n})\r\n\r\nconst EnhancedUpsellingDialog = compose(\r\n  withStyles(styles),\r\n  connect(mapStateToProps, {\r\n    addOrderProductToCart,\r\n    addOrderMenuToCart,\r\n    hideUpsellingDialog,\r\n    addToCartFromShortcut,\r\n    openMenu,\r\n    openProduct,\r\n    saveAlcoholApproval,\r\n  }),\r\n  withRestaurant\r\n)(UpsellingDialog)\r\n\r\n// After applying HOCs (withStyles, connect, withRestaurant), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedUpsellingDialog.DialogRootProps = UpsellingDialog.DialogRootProps\r\nEnhancedUpsellingDialog.DialogStyles = UpsellingDialog.DialogStyles\r\n\r\nexport default EnhancedUpsellingDialog\r\n","import forEach from 'lodash/forEach'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport { getItemListFromCart } from 'pmt-modules/cart'\r\nimport { refreshCatalog } from 'pmt-modules/catalog'\r\nimport { displayCartDiffItemsDialog } from 'pmt-modules/dialog'\r\nimport { getOrderProperties } from 'pmt-modules/orderFront'\r\nimport { PostOrderPreviewAction } from 'pmt-modules/orderPreview'\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport { setCartDiffItemList } from './actions'\r\n\r\nconst isItemUnavailable = (item, errorList) => {\r\n  const error = findOnArray(errorList, errorItem => errorItem.itemId === item.id)\r\n  if (!isNull(error)) {\r\n    item.unavailabilityReasons = error.reasons\r\n    return true\r\n  }\r\n\r\n  // options values\r\n  let isOptionValueUnavailable = false\r\n  forEach(item.optionsSelected, option => {\r\n    forEach(option.values, value => {\r\n      if (isItemUnavailable(value, errorList)) {\r\n        isOptionValueUnavailable = true\r\n      }\r\n    })\r\n  })\r\n\r\n  return isOptionValueUnavailable\r\n}\r\n\r\n// checking new cart from order preview\r\n// if an item is missing, we warn the user with the dialog\r\n// and refreshing the catalog in background\r\nconst postOrderPreviewSuccessMiddleware = createMiddleware(\r\n  PostOrderPreviewAction.SUCCESS,\r\n  ({ action, dispatch, getState }) => {\r\n    const availability = action.response.verifications.availability\r\n    if (!availability.succeeded) {\r\n      const itemListFromCart = getItemListFromCart(getState())\r\n      const errorList = availability.errorList\r\n      const unavailableItems = itemListFromCart.filter(cartItem => {\r\n        // menu\r\n        let isMenuUnavailable = false\r\n        if (cartItem.isMenu) {\r\n          forEach(cartItem.selectedProducts, item => {\r\n            if (isItemUnavailable(item, errorList)) {\r\n              isMenuUnavailable = true\r\n            }\r\n          })\r\n\r\n          return isMenuUnavailable\r\n        }\r\n\r\n        return isItemUnavailable(cartItem, errorList)\r\n      })\r\n\r\n      dispatch(setCartDiffItemList(unavailableItems))\r\n\r\n      if (!isEmpty(unavailableItems)) {\r\n        dispatch(displayCartDiffItemsDialog())\r\n\r\n        const restaurantId = action.response.order.restaurantId\r\n        const { dueDate, locale, mode } = getOrderProperties(getState())\r\n        dispatch(\r\n          refreshCatalog(restaurantId, dueDate, mode, {\r\n            locale,\r\n          })\r\n        )\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nexport const cartDiffMiddlewares = [postOrderPreviewSuccessMiddleware]\r\n","import Immutable from 'immutable'\r\n\r\nimport { CartDiffAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\nexport * from './utils'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  itemList: [],\r\n})\r\n\r\nexport const cartDiffReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case CartDiffAction.SET_ITEM_LIST:\r\n      return state.merge({\r\n        itemList: action.itemList,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport forEach from 'lodash/forEach'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { getItemList, deleteCartDiffItemList, hideCartDiffDialog } from 'pmt-modules/cartDiff'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\nimport ContentClear from 'pmt-ui/svg-icons/content/clear'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Button from '../Button'\r\nimport ProductContent from './components/ProductContent'\r\nimport Type from './Type'\r\nimport Box from 'pmt-ui/Box'\r\nimport {  isWidthUp } from 'pmt-ui/utils/withWidth'\r\n\r\nconst styles = theme => ({\r\n  title: {\r\n    clear: 'both',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  itemContainer: {\r\n    width: '100%',\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  crossContainer: {\r\n    float: 'left',\r\n    width: 60,\r\n    height: 30,\r\n    lineHeight: '30px',\r\n    color: theme.pmt.colors.red800,\r\n  },\r\n  cross: {\r\n    width: 30,\r\n    height: 30,\r\n  },\r\n  quantityContainer: {\r\n    float: 'left',\r\n    width: 30,\r\n    height: 30,\r\n    lineHeight: '30px',\r\n    color: theme.pmt.colors.grey600,\r\n  },\r\n  itemNameContainer: {\r\n    float: 'left',\r\n    width: 'calc(100% - 90px)',\r\n  },\r\n  itemName: {\r\n    marginTop: 7,\r\n    marginBottom: 4,\r\n  },\r\n  itemOptions: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  closeArea: {\r\n    float: 'right',\r\n    cursor: 'pointer',\r\n    padding: theme.spacing(1),\r\n    paddingBottom: 0,\r\n    marginTop: -theme.spacing(3),\r\n    marginRight: -theme.spacing(3),\r\n  },\r\n  closeBtn: {\r\n    width: 35,\r\n    height: 35,\r\n  },\r\n  bigButtonMobile: {\r\n    [theme.breakpoints.up('sm')]: {\r\n      marginLeft: theme.spacing(2),\r\n    },\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n      marginTop: theme.spacing(2),\r\n    },\r\n  },\r\n  grey500: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  footer: {\r\n    padding: theme.spacing(3),\r\n    background: theme.pmt.colors.greyBackground,\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    alignItems: 'baseline',\r\n    justifyContent: 'space-between',\r\n    [theme.breakpoints.down('sm')]: {\r\n      flexDirection: 'column',\r\n    },\r\n  },\r\n})\r\n\r\nclass CartDiffItemsDialog extends React.PureComponent {\r\n  // ensure to remove unavailable items from cart when unloading page\r\n  onUnload = () => {\r\n    this.props.deleteCartDiffItemList()\r\n  }\r\n\r\n  componentDidMount() {\r\n    window.addEventListener('beforeunload', this.onUnload)\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    window.removeEventListener('beforeunload', this.onUnload)\r\n  }\r\n\r\n  handleRemoveItemsFromCart = () => {\r\n    const { deleteCartDiffItemList, hideCartDiffDialog } = this.props\r\n\r\n    deleteCartDiffItemList()\r\n    hideCartDiffDialog()\r\n  }\r\n\r\n  render() {\r\n    const { itemList, classes } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <DialogTitle>\r\n          <TypographyCustom type=\"247\" component=\"p\" className={classes.title}>\r\n            {tr('order.cart_diff.title')}\r\n          </TypographyCustom>\r\n        </DialogTitle>\r\n\r\n        <DialogContent>\r\n          <div className=\"u-marginTop20\">\r\n            {itemList.map((item, index) => (\r\n              <div className={classes.itemContainer} key={index}>\r\n                <div className={classes.crossContainer}>\r\n                  <ContentClear className={classes.cross} />\r\n                </div>\r\n                <TypographyCustom type=\"164\" className={classes.quantityContainer}>\r\n                  x{item.quantity}\r\n                </TypographyCustom>\r\n                <div className={classes.itemNameContainer}>\r\n                  <TypographyCustom type=\"164\" className={classes.itemName}>\r\n                    {item.name}\r\n                  </TypographyCustom>\r\n                  <TypographyCustom type=\"164\" className={classes.itemOptions}>\r\n                    {item.isProduct && (\r\n                      <ProductContent fromMenu={false} product={item} type={Type.BIG} />\r\n                    )}\r\n\r\n                    {item.isMenu && (\r\n                      /* menu products */\r\n                      <div className=\"u-marginLeft10\">\r\n                        {item.selectedProducts.map(product => {\r\n                          let productHasUnavailableValue = false\r\n                          forEach(product.options || [], option => {\r\n                            forEach(option.values, value => {\r\n                              if (value.quantity > 0 && !isEmpty(value.unavailabilityReasons)) {\r\n                                productHasUnavailableValue = true\r\n                              }\r\n                            })\r\n                          })\r\n\r\n                          return (\r\n                            product.isValid &&\r\n                            (!isEmpty(product.unavailabilityReasons) ||\r\n                              productHasUnavailableValue) &&\r\n                            product.quantity > 0 && (\r\n                              <React.Fragment>\r\n                                <span className={classes.grey500}>{product.name}</span>\r\n                                <ProductContent fromMenu product={product} type={Type.BIG} />\r\n                              </React.Fragment>\r\n                            )\r\n                          )\r\n                        })}\r\n                      </div>\r\n                    )}\r\n                  </TypographyCustom>\r\n                </div>\r\n              </div>\r\n            ))}\r\n          </div>\r\n        </DialogContent>\r\n        <div className={classes.footer}>\r\n          <TypographyCustom type=\"164\" className=\"u-marginTop10\">\r\n            {tr('order.cart_diff.info')}\r\n          </TypographyCustom>\r\n            <Button\r\n              size=\"large\"\r\n              label={tr('order.cart_diff.yes_change_duedate')}\r\n              className={classNames('u-floatRight', classes.bigButtonMobile)}\r\n              onClick={this.handleRemoveItemsFromCart}\r\n            />\r\n        </div>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nCartDiffItemsDialog.DialogRootProps = {\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  itemList: getItemList(state),\r\n})\r\n\r\nconst EnhancedCartDiffItemsDialog = compose(\r\n  connect(mapStateToProps, {\r\n    hideCartDiffDialog,\r\n    deleteCartDiffItemList,\r\n  }),\r\n  withStyles(styles)\r\n)(CartDiffItemsDialog)\r\n\r\n// After applying HOCs (connect, withStyles, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedCartDiffItemsDialog.DialogRootProps = CartDiffItemsDialog.DialogRootProps\r\n\r\nexport default EnhancedCartDiffItemsDialog\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n/**\r\n * @ignore - internal component.\r\n */\r\nlet LocalOffer = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z\" />\r\n  </SvgIcon>\r\n)\r\nLocalOffer = pure(LocalOffer)\r\nLocalOffer.muiName = 'SvgIcon'\r\n\r\nexport default LocalOffer\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\n\r\nimport { hideCartModifierDialog } from 'pmt-modules/dialog'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { DialogActions, DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\nimport LocalOffer from 'pmt-ui/svg-icons/maps/local-offer'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Button from '../Button'\r\n\r\nconst styles = theme => ({\r\n  title: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  cartModifierContainer: {\r\n    overflow: 'hidden',\r\n  },\r\n  cartModifierName: {\r\n    float: 'left',\r\n    height: 24,\r\n    lineHeight: '24px',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  cartModifierIcon: {\r\n    float: 'left',\r\n    marginRight: theme.spacing(2),\r\n    color: theme.palette.primary.main,\r\n    transform: 'rotate(90deg)',\r\n  },\r\n  cartModifierDescription: {\r\n    float: 'left',\r\n    marginLeft: 40,\r\n    marginTop: theme.spacing(1),\r\n  },\r\n})\r\n\r\nclass CartModifierDialog extends React.PureComponent {\r\n  handleRemoveItemsFromCart = () => {\r\n    this.props.hideCartModifierDialog()\r\n  }\r\n\r\n  render() {\r\n    const { cartModifiers, hideCartModifierDialog, classes } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <DialogTitle>\r\n          <TypographyCustom type=\"247\" component=\"p\" className={classes.title}>\r\n            {tr('order.cartModifier.dialog.title')}\r\n          </TypographyCustom>\r\n        </DialogTitle>\r\n\r\n        <DialogContent>\r\n          {cartModifiers.map(cartModifier => (\r\n            <div className=\"u-overflowHidden u-marginTop30\">\r\n              <div className={classNames(classes.cartModifierContainer)}>\r\n                <LocalOffer className={classes.cartModifierIcon} />\r\n                <TypographyCustom type=\"167\" component=\"p\" className={classes.cartModifierName}>\r\n                  {cartModifier.name}\r\n                </TypographyCustom>\r\n              </div>\r\n              <TypographyCustom\r\n                type=\"124\"\r\n                component=\"p\"\r\n                className={classes.cartModifierDescription}\r\n              >\r\n                {cartModifier.description}\r\n              </TypographyCustom>\r\n            </div>\r\n          ))}\r\n        </DialogContent>\r\n        <DialogActions style={{ justifyContent: 'center' }}>\r\n          <Button variant=\"outlined\" onClick={hideCartModifierDialog} label={tr('global.close')} />\r\n        </DialogActions>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nCartModifierDialog.DialogRootProps = {}\r\n\r\nconst mapStateToProps = (state, ownProps) => ({})\r\n\r\nconst EnhancedCartModifierDialog = compose(\r\n  connect(mapStateToProps, {\r\n    hideCartModifierDialog,\r\n  }),\r\n  withStyles(styles)\r\n)(CartModifierDialog)\r\n\r\n// After applying HOCs (withWidth, withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedCartModifierDialog.DialogRootProps = CartModifierDialog.DialogRootProps\r\n\r\nexport default EnhancedCartModifierDialog\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\nimport isString from 'lodash/isString'\r\nimport isArray from 'lodash/isArray'\r\nimport isNil from 'lodash/isNil'\r\nimport forEach from 'lodash/forEach'\r\nimport get from 'lodash/get'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport MessageBlock from 'app/components/MessageBlock'\r\nimport LoadingBlock from '../LoadingBlock'\r\nimport LoadingBlockWrapper from '../LoadingBlock/LoadingBlockWrapper'\r\n\r\nclass LoadingContainerView extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (!this.props.dontUpdateOnMount) {\r\n      this.props.onUpdate && this.props.onUpdate(this.props.data)\r\n    }\r\n  }\r\n\r\n  getSnapshotBeforeUpdate(prevProps) {\r\n    if (!isEqual(prevProps.data, this.props.data)) {\r\n      this.props.onUpdate && this.props.onUpdate(this.props.data)\r\n    }\r\n\r\n    return null\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      children,\r\n      data,\r\n      errorData,\r\n      manualRunView,\r\n      size,\r\n      shouldShow,\r\n      shouldShowManualRunView,\r\n      delegateErrorHandlingToChildrenResult,\r\n      withWrapper,\r\n    } = this.props\r\n\r\n    if (errorData && !delegateErrorHandlingToChildrenResult) {\r\n      if (process.env.FEATURE_BO) {\r\n        return <MessageBlock.Error error={errorData} />\r\n      }\r\n      return <ErrorBlock error={errorData} />\r\n    }\r\n\r\n    if (manualRunView && shouldShowManualRunView(data)) {\r\n      return withWrapper ? (\r\n        <React.Fragment>\r\n          <LoadingBlockWrapper show={shouldShow} size={size} />\r\n          {manualRunView(data)}\r\n        </React.Fragment>\r\n      ) : (\r\n        manualRunView(data)\r\n      )\r\n    }\r\n\r\n    return withWrapper ? (\r\n      <React.Fragment>\r\n        <LoadingBlockWrapper show={shouldShow} size={size} />\r\n        {children(data)}\r\n      </React.Fragment>\r\n    ) : (\r\n      <LoadingBlock size={size} show={shouldShow}>\r\n        {() => children(data)}\r\n      </LoadingBlock>\r\n    )\r\n  }\r\n}\r\n\r\n/**\r\n * Shortcut for container that needs to display a LoadingBlock.\r\n *\r\n * Note: we could add prop to use a LoadingBlockWrapper instead of LoadingBlock.\r\n *\r\n * If a props 'error' is given, we automatically display the api error given by the props if it is a\r\n * function. It can be a string that gives the variable name to retrieve on the data as an error.\r\n *\r\n * Example\r\n *\r\n * ```\r\n * <LoadingContainer\r\n *   container={\r\n *     <MyEntityContainer entityId={1} />\r\n *   }\r\n *   error={({ myEntityError }) => myEntityError)}\r\n *   error=\"myEntityError\"\r\n *   show={({ myEntity, isFetchingMyEntity }) =>\r\n *     isFetchingMyEntity || !myEntity\r\n *   }\r\n * >\r\n *   {({ myEntity }) => (\r\n *      // rest of the code\r\n *   )}\r\n * </LoadingContainer>\r\n * ```\r\n */\r\nconst LoadingContainer = ({\r\n  container,\r\n  size,\r\n  show = false,\r\n  withWrapper = false,\r\n  error,\r\n  manualRunView,\r\n  shouldShowManualRunView,\r\n  onUpdate,\r\n  children,\r\n  dontUpdateOnMount = false,\r\n  delegateErrorHandlingToChildren,\r\n}) => {\r\n  return React.cloneElement(container, {}, data => {\r\n    let errorData\r\n    if (isFunction(error)) {\r\n      errorData = error(data)\r\n    } else if (isString(error)) {\r\n      // variable name\r\n      errorData = get(data, error)\r\n    } else if (isArray(error)) {\r\n      forEach(error, errorName => {\r\n        errorData = get(data, errorName)\r\n        if (errorData) {\r\n          return false\r\n        }\r\n      })\r\n    }\r\n\r\n    const delegateErrorHandlingToChildrenResult =\r\n      delegateErrorHandlingToChildren && errorData && delegateErrorHandlingToChildren(errorData)\r\n\r\n    const shouldShow =\r\n      show && (show(data) || !isNil(errorData)) && !delegateErrorHandlingToChildrenResult\r\n\r\n    return (\r\n      <LoadingContainerView\r\n        children={children}\r\n        data={data}\r\n        errorData={errorData}\r\n        manualRunView={manualRunView}\r\n        onUpdate={onUpdate}\r\n        size={size}\r\n        shouldShow={shouldShow}\r\n        shouldShowManualRunView={shouldShowManualRunView}\r\n        withWrapper={withWrapper}\r\n        dontUpdateOnMount={dontUpdateOnMount}\r\n        delegateErrorHandlingToChildrenResult={delegateErrorHandlingToChildrenResult}\r\n      />\r\n    )\r\n  })\r\n}\r\n\r\nLoadingContainer.propTypes = {\r\n  show: PropTypes.func,\r\n  onUpdate: PropTypes.func,\r\n  shouldShowManualRunView: PropTypes.func,\r\n  container: PropTypes.node.isRequired,\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default LoadingContainer\r\n","import React, { Fragment } from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { resetOrderFrontFull } from 'pmt-modules/orderFront'\r\nimport {\r\n  hideUnavailableDueDateDialog,\r\n  OrderPropertiesContainer,\r\n  resetDayAndSlot,\r\n  setDueDateAsap,\r\n  resetDueDate,\r\n} from 'pmt-modules/orderPlugin'\r\nimport OrderRestaurantContextContainer from 'pmt-modules/orderRestaurantContext/container/OrderRestaurantContextContainer'\r\nimport RestaurantContainer from 'pmt-modules/restaurant/components/RestaurantContainer'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\n\r\nimport { DialogActions, DialogContent, DialogContentText, DialogTitle } from 'pmt-ui/Dialog'\r\nimport Button from 'app/components/Button'\r\nimport AlertButton from 'pmt-ui/AlertButton'\r\nimport LoadingContainer from 'pmt-ui/LoadingContainer'\r\nimport { makeStyles } from 'pmt-ui/styles'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    minWidth: 300,\r\n    minHeight: 200,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n  },\r\n}))\r\n\r\nconst UnavailableDueDateDialog = ({\r\n  hideUnavailableDueDateDialog,\r\n  redirectTo,\r\n  resetOrderFrontFull,\r\n  resetDayAndSlot,\r\n  resetDueDate,\r\n  setDueDateAsap,\r\n}) => {\r\n  const classes = useStyles()\r\n  return (\r\n    <div className={classes.root}>\r\n      <OrderPropertiesContainer>\r\n        {({ restaurantId }) => (\r\n          <LoadingContainer\r\n            container={<RestaurantContainer restaurantId={restaurantId} forceRefresh />}\r\n            error=\"restaurantError\"\r\n            show={({ restaurant, isFetchingRestaurant }) => !restaurant || isFetchingRestaurant}\r\n          >\r\n            {({ restaurant }) => (\r\n              <OrderRestaurantContextContainer restaurantId={restaurant.id}>\r\n                {({ orderContext }) =>\r\n                  !orderContext ? null : (\r\n                    <Fragment>\r\n                      <DialogTitle>{tr('order.unavailable_due_date.title')}</DialogTitle>\r\n                      <DialogContent>\r\n                        <DialogContentText>\r\n                          {!orderContext.canAsap && !orderContext.canPreOrder\r\n                            ? tr('order.unavailable_due_date.content.is_closed')\r\n                            : tr('order.unavailable_due_date.content.out_of_range')}\r\n                        </DialogContentText>\r\n                      </DialogContent>\r\n                      <DialogActions>\r\n                        {/* ASAP */}\r\n                        {orderContext.canAsap && (\r\n                          <Button\r\n                            label={tr('order.unavailable_due_date.choose_asap')}\r\n                            onClick={() => {\r\n                              setDueDateAsap()\r\n                              resetDueDate()\r\n                              hideUnavailableDueDateDialog()\r\n                            }}\r\n                          />\r\n                        )}\r\n\r\n                        {/* Choose new slot */}\r\n                        {orderContext.canPreOrder && (\r\n                          <Button\r\n                            label={tr('order.unavailable_due_date.choose_pre_order')}\r\n                            onClick={() => {\r\n                              resetDueDate()\r\n                              resetDayAndSlot()\r\n                              hideUnavailableDueDateDialog()\r\n                            }}\r\n                          />\r\n                        )}\r\n\r\n                        {/* Give up the order */}\r\n                        <AlertButton\r\n                          button={<Button />}\r\n                          alertTitle={tr('order.unavailable_due_date.give_up.alert.title')}\r\n                          alertContent={tr('order.unavailable_due_date.give_up.alert.content')}\r\n                          label={tr('order.unavailable_due_date.give_up')}\r\n                          onAgree={() => {\r\n                            resetOrderFrontFull()\r\n                            hideUnavailableDueDateDialog()\r\n                            redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n                            // TODO:\r\n                          }}\r\n                        />\r\n                      </DialogActions>\r\n                    </Fragment>\r\n                  )\r\n                }\r\n              </OrderRestaurantContextContainer>\r\n            )}\r\n          </LoadingContainer>\r\n        )}\r\n      </OrderPropertiesContainer>\r\n    </div>\r\n  )\r\n}\r\n// Dialog root properties\r\nUnavailableDueDateDialog.DialogRootProps = {\r\n  // we want the dialog to quit when we click on the backdrop\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nconst EnhancedUnavailableDueDateDialog = connect(mapStateToProps, {\r\n  hideUnavailableDueDateDialog,\r\n  resetDayAndSlot,\r\n  resetOrderFrontFull,\r\n  resetDueDate,\r\n  setDueDateAsap,\r\n  redirectTo,\r\n})(UnavailableDueDateDialog)\r\n\r\n// After applying HOCs (withWidth, withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedUnavailableDueDateDialog.DialogRootProps = UnavailableDueDateDialog.DialogRootProps\r\n\r\nexport default EnhancedUnavailableDueDateDialog\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { resetOrderFrontFull } from 'pmt-modules/orderFront'\r\nimport { OrderPropertiesContainer, hideOrderModeDisabledDialog } from 'pmt-modules/orderPlugin'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\n\r\nimport Button from 'app/components/Button'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    minWidth: 300,\r\n    minHeight: 200,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n  },\r\n}))\r\n\r\nconst OrderModeDisabledDialog = ({ hideOrderModeDisabledDialog, resetOrderFrontFull }) => {\r\n  const classes = useStyles()\r\n\r\n  return (\r\n    <OrderPropertiesContainer>\r\n      {({ orderProperties }) => (\r\n        <div className={classes.root}>\r\n          <DialogTitle>{tr('order.mode_disabled.dialog.title')}</DialogTitle>\r\n          <DialogContent>\r\n            <DialogContentText>\r\n              {tr(`order.mode_disabled.dialog.content.mode.${orderProperties.mode}`)}\r\n            </DialogContentText>\r\n          </DialogContent>\r\n          <DialogActions>\r\n            <Button\r\n              label={tr('order.mode_disabled.dialog.redirect')}\r\n              onClick={() => {\r\n                hideOrderModeDisabledDialog()\r\n              }}\r\n            />\r\n          </DialogActions>\r\n        </div>\r\n      )}\r\n    </OrderPropertiesContainer>\r\n  )\r\n}\r\n\r\n// Dialog root properties\r\nOrderModeDisabledDialog.DialogRootProps = {\r\n  // we want the dialog to quit when we click on the backdrop\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nconst EnhancedOrderModeDisabledDialog = connect(mapStateToProps, {\r\n  hideOrderModeDisabledDialog,\r\n  resetOrderFrontFull,\r\n})(OrderModeDisabledDialog)\r\n\r\n// After applying HOCs (withWidth, withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedOrderModeDisabledDialog.DialogRootProps = OrderModeDisabledDialog.DialogRootProps\r\n\r\nexport default EnhancedOrderModeDisabledDialog\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { hideRestaurantDisabledDialog } from 'pmt-modules/orderPlugin'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\n\r\nimport Button from 'app/components/Button'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    minWidth: 300,\r\n    minHeight: 200,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n  },\r\n}))\r\n\r\nconst RestaurantDisabledDialog = ({ hideRestaurantDisabledDialog }) => {\r\n  const classes = useStyles()\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <DialogTitle>{tr('order.catalog.restaurant_disabled.dialog.title')}</DialogTitle>\r\n      <DialogContent>\r\n        <DialogContentText>\r\n          {tr(`order.catalog.restaurant_disabled.dialog.content`)}\r\n        </DialogContentText>\r\n      </DialogContent>\r\n      <DialogActions>\r\n        <Button\r\n          label={tr('order.catalog.restaurant_disabled.dialog.close')}\r\n          onClick={hideRestaurantDisabledDialog}\r\n        />\r\n      </DialogActions>\r\n    </div>\r\n  )\r\n}\r\n\r\n// Dialog root properties\r\nRestaurantDisabledDialog.DialogRootProps = {\r\n  // we want the dialog to quit when we click on the backdrop\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nconst EnhancedRestaurantDisabledDialog = connect(mapStateToProps, { hideRestaurantDisabledDialog })(\r\n  RestaurantDisabledDialog\r\n)\r\n\r\n// After applying HOCs (withWidth, withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedRestaurantDisabledDialog.DialogRootProps = RestaurantDisabledDialog.DialogRootProps\r\n\r\nexport default EnhancedRestaurantDisabledDialog\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { hideTableNotFoundDialog, setTableNumber } from 'pmt-modules/orderPlugin'\r\nimport RoutingContainer from 'pmt-modules/routing/components/RoutingContainer'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nimport Button from 'app/components/Button'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    minWidth: 300,\r\n    minHeight: 200,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n  },\r\n}))\r\n\r\nconst TableNotFoundDialog = ({ hideTableNotFoundDialog, setTableNumber, restaurantId }) => {\r\n  const classes = useStyles()\r\n\r\n  return (\r\n    <RoutingContainer>\r\n      {({ redirectTo, getRoute }) => (\r\n        <div className={classes.root}>\r\n          <DialogTitle>{tr('order.catalog.table_not_found.dialog.title')}</DialogTitle>\r\n          <DialogContent>\r\n            <DialogContentText>\r\n              {tr(`order.catalog.table_not_found.dialog.content`)}\r\n            </DialogContentText>\r\n          </DialogContent>\r\n          <DialogActions>\r\n            <Button\r\n              label={tr('order.catalog.table_not_found.dialog.close')}\r\n              onClick={() => {\r\n                setTableNumber(null)\r\n                hideTableNotFoundDialog()\r\n                // go back to where the user can enter a new table number ( = the catalog page)\r\n                redirectTo(getRoute('ORDER__CATALOG'), {\r\n                  restaurantId: restaurantId,\r\n                })\r\n              }}\r\n            />\r\n          </DialogActions>\r\n        </div>\r\n      )}\r\n    </RoutingContainer>\r\n  )\r\n}\r\n\r\n// Dialog root properties\r\nTableNotFoundDialog.DialogRootProps = {\r\n  // we want the dialog to quit when we click on the backdrop\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nconst EnhancedTableNotFoundDialog = connect(mapStateToProps, {\r\n  hideTableNotFoundDialog,\r\n  setTableNumber,\r\n})(TableNotFoundDialog)\r\n\r\n// After applying HOCs (connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedTableNotFoundDialog.DialogRootProps = TableNotFoundDialog.DialogRootProps\r\n\r\nexport default EnhancedTableNotFoundDialog\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Clock = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12,0.2C5.5,0.2,0.2,5.5,0.2,12c0,6.5,5.3,11.8,11.8,11.8c6.5,0,11.8-5.3,11.8-11.8      C23.8,5.5,18.5,0.2,12,0.2z M12,21.2c-5.1,0-9.2-4.1-9.2-9.2c0-5.1,4.1-9.2,9.2-9.2c5.1,0,9.2,4.1,9.2,9.2      C21.2,17.1,17.1,21.2,12,21.2z\" />\r\n    <polygon xmlns=\"http://www.w3.org/2000/svg\" points=\"12.9,5.3 11.1,5.3 11.1,12.4 15.4,16.7 16.7,15.4 12.9,11.6\" />\r\n  </SvgIcon>\r\n)\r\n\r\nClock = pure(Clock)\r\nClock.displayName = 'Clock'\r\nClock.pmtName = 'SvgIcon'\r\n\r\nexport default Clock\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PhoneIcon from '@material-ui/icons/Phone'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Clock from 'pmt-ui/svg-icons/device/clock'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { hideRestaurantClosedDialog } from 'pmt-modules/orderPlugin'\r\nimport Button from 'app/components/Button'\r\n\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\n\r\nconst styles = theme => ({\r\n  iconInfo: {\r\n    width: 30,\r\n    height: 30,\r\n    marginBottom: theme.spacing(1),\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  root: {\r\n    width: '100%',\r\n    display: 'flex',\r\n    color: theme.pmt.colors.grey500,\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    textAlign: 'center',\r\n  },\r\n  closedContent: {\r\n    marginTop: theme.spacing(2),\r\n    textAlign: 'center',\r\n    color: theme.pmt.colors.grey500,\r\n    lineHeight: '1.3',\r\n  },\r\n  phoneNumber: {\r\n    marginTop: theme.spacing(),\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    color: theme.palette.text.primary,\r\n\r\n    '& > svg': {\r\n      marginRight: theme.spacing(),\r\n    },\r\n  },\r\n})\r\n\r\nconst ClosedStoreDialog = ({ restaurant, orderContext, classes, hideRestaurantClosedDialog }) => (\r\n  <div className={classes.root}>\r\n    <DialogContent>\r\n      <DialogContentText>\r\n        <Clock className={classes.iconInfo} />\r\n        <TypographyCustom type=\"207\" className={classes.closedContent}>\r\n          {tr('order.catalog.restaurant_closed.dialog.currently_closed')}\r\n        </TypographyCustom>\r\n\r\n        {orderContext.nextOpening ? (\r\n          <TypographyCustom type=\"207\" className={classes.closedContent}>\r\n            {orderContext.nextOpening.isCurrentDay\r\n              ? tr('order.catalog.restaurant_closed.dialog.closed_today_until', {\r\n                  hour: orderContext.nextOpening.nextOpeningHour.formattedOpening,\r\n                })\r\n              : tr('order.catalog.restaurant_closed.dialog.closed_until', {\r\n                  day: orderContext.nextOpening.dayName,\r\n                  hour: orderContext.nextOpening.nextOpeningHour.formattedOpening,\r\n                })}\r\n          </TypographyCustom>\r\n        ) : (\r\n          restaurant.phonePub && (\r\n            <TypographyCustom type=\"204\" className={classes.closedContent}>\r\n              {tr('order.catalog.restaurant_closed.dialog.contact_phone')}\r\n              <a href={`tel:${restaurant.phonePub}`}>\r\n                <div className={classes.phoneNumber}>\r\n                  <PhoneIcon />\r\n                  {restaurant.phonePub}\r\n                </div>\r\n              </a>\r\n            </TypographyCustom>\r\n          )\r\n        )}\r\n      </DialogContentText>\r\n    </DialogContent>\r\n    <DialogActions>\r\n      <Button\r\n        label={tr('order.catalog.restaurant_closed.dialog.close')}\r\n        onClick={() => {\r\n          window.location.reload()\r\n        }}\r\n      />\r\n    </DialogActions>\r\n  </div>\r\n)\r\n\r\n// Dialog root properties\r\nClosedStoreDialog.DialogRootProps = {\r\n  // we don't want the user to be able to quit the dialog\r\n  // (only the Refresh button will allow to go out if the Order is becoming available)\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => ({})\r\n\r\nconst EnhancedClosedStoreDialog = compose(\r\n  withStyles(styles),\r\n  connect(mapStateToProps, { hideRestaurantClosedDialog })\r\n)(ClosedStoreDialog)\r\n\r\n// After applying HOCs (withWidth, withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedClosedStoreDialog.DialogRootProps = ClosedStoreDialog.DialogRootProps\r\n\r\nexport default EnhancedClosedStoreDialog\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport {\r\n  hideExpiredSessionDialog,\r\n  resetOrderPlugin,\r\n} from 'pmt-modules/orderPlugin'\r\nimport RoutingContainer from 'pmt-modules/routing/components/RoutingContainer'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { resetOrderFrontFull } from 'pmt-modules/orderFront'\r\nimport Button from 'app/components/Button'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    minWidth: 300,\r\n    minHeight: 200,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n  },\r\n  bigButtonMobile: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n      marginTop: theme.spacing(2),\r\n    },\r\n  },\r\n}))\r\n\r\nconst ExpiredSessionDialog = ({\r\n  hideExpiredSessionDialog,\r\n  resetOrderFrontFull,\r\n  resetOrderPlugin,\r\n  restaurantId,\r\n}) => {\r\n  const classes = useStyles()\r\n\r\n  return (\r\n    <RoutingContainer>\r\n      {({ redirectTo, getRoute }) => (\r\n        <div className={classes.root}>\r\n          <DialogTitle>{tr('order.payment.session_expired.dialog.title')}</DialogTitle>\r\n          <DialogContent>\r\n            <DialogContentText>\r\n              {tr(`order.payment.session_expired.dialog.content`)}\r\n            </DialogContentText>\r\n          </DialogContent>\r\n          <DialogActions>\r\n            <Button\r\n              size=\"large\"\r\n              label={tr('order.payment.session_expired.dialog.close')}\r\n              className={classes.bigButtonMobile}\r\n              onClick={() => {\r\n                hideExpiredSessionDialog()\r\n                resetOrderFrontFull()\r\n\r\n                resetOrderPlugin()\r\n                if (restaurantId) {\r\n                  redirectTo(getRoute('ORDER__CATALOG'), {\r\n                    restaurantId: restaurantId,\r\n                  })\r\n                } else {\r\n                  // we can't redirect to redirectUri as redirectUri often contains placeholders like :restaurantId\r\n                  // but we don't have this data anymore\r\n                  redirectTo(getRoute('ORDER__STORE_LOCATOR'))\r\n                }\r\n              }}\r\n            />\r\n          </DialogActions>\r\n        </div>\r\n      )}\r\n    </RoutingContainer>\r\n  )\r\n}\r\n\r\n// Dialog root properties\r\nExpiredSessionDialog.DialogRootProps = {\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nconst EnhancedExpiredSessionDialog = connect(mapStateToProps, {\r\n    hideExpiredSessionDialog,\r\n    resetOrderFrontFull,\r\n    resetOrderPlugin,\r\n})(ExpiredSessionDialog)\r\n\r\n// After applying HOCs (connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedExpiredSessionDialog.DialogRootProps = ExpiredSessionDialog.DialogRootProps\r\n\r\nexport default EnhancedExpiredSessionDialog\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\nconst VoucherFailedReasonEnum = {\r\n  //\r\n  // Voucher Provider\r\n  //\r\n\r\n  INVALID: 'INVALID',\r\n  REDEMPTION_FAILED: 'REDEMPTION_FAILED',\r\n  REFUND_FAILED: 'REFUND_FAILED',\r\n\r\n  //\r\n  // PMT\r\n  //\r\n  WRONG_CURRENCY: 'WRONG_CURRENCY',\r\n  DUPLICATE: 'DUPLICATE',\r\n\r\n  OTHER: 'OTHER',\r\n}\r\n\r\nexport const getVoucherFailedReasonLabel = reason => {\r\n  switch (reason) {\r\n    case VoucherFailedReasonEnum.INVALID:\r\n      return tr('global.VoucherFailedReason.INVALID')\r\n    case VoucherFailedReasonEnum.REDEMPTION_FAILED:\r\n      return tr('global.VoucherFailedReason.REDEMPTION_FAILED')\r\n    case VoucherFailedReasonEnum.REFUND_FAILED:\r\n      return tr('global.VoucherFailedReason.REFUND_FAILED')\r\n    case VoucherFailedReasonEnum.WRONG_CURRENCY:\r\n      return tr('global.VoucherFailedReason.WRONG_CURRENCY')\r\n    case VoucherFailedReasonEnum.DUPLICATE:\r\n      return tr('global.VoucherFailedReason.DUPLICATE')\r\n    case VoucherFailedReasonEnum.OTHER:\r\n      return tr('global.VoucherFailedReason.OTHER')\r\n    default:\r\n      return reason\r\n  }\r\n}\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\nimport {\r\n  deleteInvalidVouchers,\r\n  getInvalidVouchers,\r\n  hideInvalidVouchersDialog,\r\n} from 'pmt-modules/payment/voucher'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\nimport ContentClear from 'pmt-ui/svg-icons/content/clear'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Button from '../Button'\r\nimport { getVoucherFailedReasonLabel } from 'pmt-modules/payment/voucher/constants'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  title: {\r\n    clear: 'both',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  itemContainer: {\r\n    width: '100%',\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  crossContainer: {\r\n    float: 'left',\r\n    width: 60,\r\n    height: 30,\r\n    lineHeight: '30px',\r\n    color: theme.pmt.colors.red800,\r\n  },\r\n  cross: {\r\n    width: 30,\r\n    height: 30,\r\n  },\r\n  itemNameContainer: {\r\n    float: 'left',\r\n    width: 'calc(100% - 90px)',\r\n  },\r\n  itemName: {\r\n    marginTop: 7,\r\n    marginBottom: 4,\r\n  },\r\n  reason: {\r\n    color: theme.pmt.colors.red800,\r\n  },\r\n  bigButtonMobile: {\r\n    marginTop: theme.spacing(2),\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n    },\r\n  },\r\n  footer: {\r\n    padding: theme.spacing(3),\r\n    background: theme.pmt.colors.greyBackground,\r\n  },\r\n})\r\n\r\nclass InvalidVouchersDialog extends React.PureComponent {\r\n  // ensure to remove invalid vouchers when unloading page\r\n  onUnload = () => {\r\n    this.props.deleteInvalidVouchers()\r\n  }\r\n\r\n  componentDidMount() {\r\n    window.addEventListener('beforeunload', this.onUnload)\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    window.removeEventListener('beforeunload', this.onUnload)\r\n  }\r\n\r\n  handleDeleteInvalidVouchers = () => {\r\n    const { deleteInvalidVouchers, hideInvalidVouchersDialog } = this.props\r\n\r\n    deleteInvalidVouchers()\r\n    hideInvalidVouchersDialog()\r\n  }\r\n\r\n  render() {\r\n    const { invalidVouchers, classes } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <DialogTitle>\r\n          <TypographyCustom type=\"247\" component=\"p\" className={classes.title}>\r\n            {tr('order.voucher_diff.title')}\r\n          </TypographyCustom>\r\n        </DialogTitle>\r\n\r\n        <DialogContent>\r\n          <div className=\"u-marginTop20\">\r\n            {invalidVouchers.map((voucher, index) => (\r\n              <div className={classes.itemContainer} key={index}>\r\n                <div className={classes.crossContainer}>\r\n                  <ContentClear className={classes.cross} />\r\n                </div>\r\n                <div className={classes.itemNameContainer}>\r\n                  <TypographyCustom type=\"164\" className={classes.itemName}>\r\n                    {voucher.voucherCode}\r\n                  </TypographyCustom>\r\n                  <TypographyCustom type=\"164\" className={classes.reason}>\r\n                    {getVoucherFailedReasonLabel(voucher.reason)}\r\n                  </TypographyCustom>\r\n                  {voucher.details && (\r\n                    <TypographyCustom type=\"164\" className={classes.reason}>\r\n                      {voucher.details}\r\n                    </TypographyCustom>\r\n                  )}\r\n                </div>\r\n              </div>\r\n            ))}\r\n          </div>\r\n        </DialogContent>\r\n        <div className={classes.footer}>\r\n          <TypographyCustom type=\"164\" className=\"u-marginTop10\">\r\n            {tr('order.voucher_diff.info')}\r\n          </TypographyCustom>\r\n          <div className=\"u-overflowHidden\">\r\n            <Button\r\n              size=\"large\"\r\n              label={tr('order.voucher_diff.button')}\r\n              className={classNames('u-floatRight u-marginLeft20', classes.bigButtonMobile)}\r\n              onClick={this.handleDeleteInvalidVouchers}\r\n            />\r\n          </div>\r\n        </div>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nInvalidVouchersDialog.DialogRootProps = {\r\n  disableBackdropClick: true,\r\n  disableEscapeKeyDown: true,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  invalidVouchers: getInvalidVouchers(state),\r\n})\r\n\r\nconst EnhancedInvalidVouchersDialog = compose(\r\n  connect(mapStateToProps, {\r\n    hideInvalidVouchersDialog,\r\n    deleteInvalidVouchers,\r\n  }),\r\n  withStyles(styles)\r\n)(InvalidVouchersDialog)\r\n\r\n// After applying HOCs (withWidth, withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedInvalidVouchersDialog.DialogRootProps = InvalidVouchersDialog.DialogRootProps\r\n\r\nexport default EnhancedInvalidVouchersDialog\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport compose from 'recompose/compose'\r\nimport classNames from 'classnames'\r\n\r\nimport { redirectToCart } from 'pmt-modules/orderPlugin'\r\nimport { hideLimitedStockItemsDialog } from 'pmt-modules/dialog'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Button from '../Button'\r\n\r\nconst styles = theme => ({\r\n  dialogContent: {\r\n    padding: `${theme.spacing(3)}px ${theme.spacing(3)}px`,\r\n  },\r\n  title: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  itemContainer: {\r\n    width: '100%',\r\n    marginTop: theme.spacing(2),\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  itemName: {\r\n    fontWeight: 'bold',\r\n  },\r\n  itemStock: {\r\n    color: theme.pmt.colors.grey600,\r\n  },\r\n  bigButtonMobile: {\r\n    [theme.breakpoints.down('sm')]: {\r\n      width: '100%',\r\n      marginTop: theme.spacing(2),\r\n    },\r\n  },\r\n})\r\n\r\nclass LimitedStockItemsDialog extends React.PureComponent {\r\n  componentDidMount() {\r\n    const { limitedStockItems, limitedStockMessageFallback, hideLimitedStockItemsDialog } =\r\n      this.props\r\n\r\n    // If nothing to display, close the dialog immediately after mount (not during render)\r\n    if (!limitedStockItems?.length && !limitedStockMessageFallback) {\r\n      hideLimitedStockItemsDialog()\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      limitedStockItems,\r\n      limitedStockMessageFallback,\r\n      hideLimitedStockItemsDialog,\r\n      redirectToCart,\r\n      classes,\r\n    } = this.props\r\n\r\n    let block = (\r\n      <TypographyCustom type=\"164\" component=\"p\">\r\n        {limitedStockItems.map((item, index) => (\r\n          <div className={classes.itemContainer} key={item.id}>\r\n            <TypographyCustom type=\"164\" component=\"p\" className={classes.itemName}>\r\n              {item.name}\r\n            </TypographyCustom>\r\n            <TypographyCustom type=\"164\" component=\"p\" className={classes.itemStock}>\r\n              {tr('order.dialog.limited_stock.ordered_quantity', {\r\n                quantity: item.orderedQuantity ?? '?',\r\n              })}\r\n            </TypographyCustom>\r\n            <TypographyCustom type=\"164\" component=\"p\" className={classes.itemStock}>\r\n              {tr('order.dialog.limited_stock.available_quantity', {\r\n                quantity: item.availableQuantity ?? '?',\r\n              })}\r\n            </TypographyCustom>\r\n          </div>\r\n        ))}\r\n      </TypographyCustom>\r\n    )\r\n\r\n    if (!limitedStockItems.length) {\r\n      block = (\r\n        <TypographyCustom type=\"164\" component=\"p\">\r\n          {limitedStockMessageFallback}\r\n        </TypographyCustom>\r\n      )\r\n    }\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <DialogTitle>\r\n          <TypographyCustom type=\"247\" component=\"p\" className={classes.title}>\r\n            {tr('order.dialog.limited_stock.title')}\r\n          </TypographyCustom>\r\n        </DialogTitle>\r\n\r\n        <DialogContent classes={{ root: classes.dialogContent }}>\r\n          <TypographyCustom type=\"164\" component=\"p\" className=\"u-marginBottom10\">\r\n            {tr('order.dialog.limited_stock.description')}\r\n          </TypographyCustom>\r\n          {block}\r\n          <Button\r\n            size=\"large\"\r\n            label={tr('order.global.back_to_cart')}\r\n            className={classNames('u-floatRight u-marginLeft20', classes.bigButtonMobile)}\r\n            onClick={() => {\r\n              hideLimitedStockItemsDialog()\r\n              redirectToCart()\r\n            }}\r\n          />\r\n        </DialogContent>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nLimitedStockItemsDialog.DialogRootProps = {}\r\n\r\nconst mapStateToProps = state => ({})\r\n\r\nconst EnhancedLimitedStockItemsDialog = compose(\r\n  connect(mapStateToProps, {\r\n    hideLimitedStockItemsDialog,\r\n    redirectToCart,\r\n  }),\r\n  withStyles(styles)\r\n)(LimitedStockItemsDialog)\r\n\r\n// After applying HOCs (withWidth, withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access DialogRootProps and DialogStyles\r\n// from the exported dialog, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedLimitedStockItemsDialog.DialogRootProps = LimitedStockItemsDialog.DialogRootProps\r\n\r\nexport default EnhancedLimitedStockItemsDialog\r\n","import { ModalType } from 'pmt-modules/dialog'\r\n\r\nimport DeleteCartDialog from '../components/OrderPage/DeleteCartDialog'\r\n\r\nimport ProductDialog from '../pages/product/dialog'\r\nimport DietaryInfoDialog from '../pages/catalog/components/DietaryInfoDialog'\r\nimport SuggestionDialog from '../pages/catalog/components/SuggestionDialog'\r\nimport UpsellingDialog from '../pages/catalog/components/UpsellingDialog'\r\n\r\nimport CartDiffItemsDialog from '../components/Cart/CartDiffItemsDialog'\r\nimport CartModifierDialog from '../components/CartModifier/CartModifierDialog'\r\nimport UnavailableDueDateDialog from '../components/Slots/UnavailableDueDateDialog'\r\nimport OrderModeDisabledDialog from '../pages/catalog/components/OrderModeDisabledDialog'\r\nimport RestaurantDisabledDialog from '../pages/catalog/components/RestaurantDisabledDialog'\r\nimport TableNotFoundDialog from '../pages/catalog/components/TableNotFoundDialog'\r\nimport ClosedStoreDialog from '../pages/catalog/components/ClosedStoreDialog'\r\nimport ExpiredSessionDialog from '../pages/payment/components/ExpiredSessionDialog'\r\nimport InvalidVouchersDialog from '../components/Voucher/InvalidVouchersDialog'\r\nimport LimitedStockItemsDialog from '../components/Order/LimitedStockItemsDialog'\r\n\r\nconst dialogs = [\r\n  {\r\n    type: ModalType.DELETE_CART,\r\n    view: DeleteCartDialog,\r\n  },\r\n  {\r\n    type: ModalType.ORDER_PLUGIN_PRODUCT_VIEW,\r\n    view: ProductDialog,\r\n  },\r\n  {\r\n    type: ModalType.SUGGESTION_VIEW,\r\n    view: SuggestionDialog,\r\n  },\r\n  {\r\n    type: ModalType.UPSELLING_VIEW,\r\n    view: UpsellingDialog,\r\n  },\r\n  {\r\n    type: ModalType.CART_MODIFIER_VIEW,\r\n    view: CartModifierDialog,\r\n  },\r\n  {\r\n    type: ModalType.CART_DIFF_ITEMS,\r\n    view: CartDiffItemsDialog,\r\n  },\r\n  {\r\n    type: ModalType.LIMITED_STOCK_ITEMS,\r\n    view: LimitedStockItemsDialog,\r\n  },\r\n  {\r\n    type: ModalType.INVALID_VOUCHERS,\r\n    view: InvalidVouchersDialog,\r\n  },\r\n  {\r\n    type: ModalType.DIETARY_INFO,\r\n    view: DietaryInfoDialog,\r\n  },\r\n  {\r\n    type: ModalType.UNAVAILABLE_DUE_DATE,\r\n    view: UnavailableDueDateDialog,\r\n  },\r\n  {\r\n    type: ModalType.ORDER_MODE_DISABLED,\r\n    view: OrderModeDisabledDialog,\r\n  },\r\n  {\r\n    type: ModalType.RESTAURANT_DISABLED,\r\n    view: RestaurantDisabledDialog,\r\n  },\r\n  {\r\n    type: ModalType.RESTAURANT_CLOSED,\r\n    view: ClosedStoreDialog,\r\n  },\r\n  {\r\n    type: ModalType.TABLE_NOT_FOUND,\r\n    view: TableNotFoundDialog,\r\n  },\r\n  {\r\n    type: ModalType.EXPIRED_SESSION,\r\n    view: ExpiredSessionDialog,\r\n  },\r\n]\r\n\r\nexport default dialogs\r\n","import Immutable from 'immutable'\r\nimport {\r\n  RegisterUserLightAction,\r\n  RegisterUserAction,\r\n  RegisterIncognitoUserAction,\r\n} from '../registration'\r\nimport {\r\n  LOGOUT_ACTION,\r\n  getAuthCookie,\r\n  getUserLightCookie,\r\n  getIncognitoCookie,\r\n} from 'pmt-modules/auth'\r\nimport { GetAppConfigAction } from 'pmt-modules/appConfig'\r\nimport { GetUserMeAction } from 'pmt-modules/userMe'\r\nimport UserType from 'pmt-modules/user/constants/UserType'\r\n\r\nconst getDefaultState = () => {\r\n  if (getAuthCookie() != null) {\r\n    // this will be replaced by real data when fetching userMe\r\n    return Immutable.fromJS({\r\n      id: null,\r\n      email: null,\r\n      lastName: null,\r\n      firstName: null,\r\n      type: null,\r\n    })\r\n  } else if (getUserLightCookie() != null) {\r\n    return Immutable.fromJS({\r\n      id: null,\r\n      email: getUserLightCookie().email,\r\n      lastName: getUserLightCookie().lastName,\r\n      firstName: getUserLightCookie().firstName,\r\n      type: UserType.LIGHT,\r\n    })\r\n  } else if (getIncognitoCookie() != null) {\r\n    return Immutable.fromJS({\r\n      id: getIncognitoCookie(),\r\n      email: null,\r\n      lastName: null,\r\n      firstName: null,\r\n      type: UserType.INCOGNITO,\r\n    })\r\n  }\r\n  return Immutable.fromJS({\r\n    id: null,\r\n    email: null,\r\n    lastName: null,\r\n    firstName: null,\r\n    type: null,\r\n  })\r\n}\r\n\r\nexport const authenticatedUserReducer = (state = getDefaultState(), action) => {\r\n  switch (action.type) {\r\n    case RegisterUserAction.SUCCESS:\r\n    case RegisterUserLightAction.SUCCESS:\r\n    case RegisterIncognitoUserAction.SUCCESS:\r\n    case GetUserMeAction.SUCCESS:\r\n      return state.merge({\r\n        id: action.response.id,\r\n        email: action.response.email,\r\n        lastName: action.response.lastName,\r\n        firstName: action.response.firstName,\r\n        type: action.response.userType,\r\n      })\r\n\r\n    // reload from cookies, as cookies depend from appConfig.restaurantsGroupId\r\n    case GetAppConfigAction.SUCCESS:\r\n      return getDefaultState()\r\n\r\n    case LOGOUT_ACTION:\r\n      return state.merge({\r\n        id: null,\r\n        email: null,\r\n        lastName: null,\r\n        firstName: null,\r\n        type: null,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","export const INVALID_AUTHORIZATION_API_ERROR_CODE = '1015'\r\n\r\nexport const StorageItem = {\r\n  BASIC_TOKEN: 'STORAGE::BASIC_TOKEN',\r\n}\r\n","import { getFromStorage, removeFromStorage, saveToStorage } from '../../storage'\r\n\r\nimport { StorageItem } from '../constants'\r\n\r\nexport const saveBasicToken = token => {\r\n  saveToStorage(StorageItem.BASIC_TOKEN, token)\r\n}\r\n\r\nexport const getDefaultBasicToken = () => getFromStorage(StorageItem.BASIC_TOKEN, null)\r\n\r\nexport const getAuthorization = () => {\r\n  return getDefaultBasicToken()\r\n}\r\n\r\nexport const removeBasicToken = () => removeFromStorage(StorageItem.BASIC_TOKEN)\r\n","import ProAuthApi from '../api/calls/ProAuthApi'\r\n\r\nimport { createApiCallAction } from '../api/utils'\r\nimport { createApiEnumAction } from '../api/utils'\r\nimport createAction from '../redux/createAction'\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const AuthProAction = createApiEnumAction('AUTH::PRO::AUTHENTICATE')\r\n\r\n/**\r\n *\r\n * @param  {string} username\r\n * @param  {string} password\r\n * @param  {string} props     additional props that can be used by the middlewares.\r\n *                            - redirectTo: will redirect to the given url after the login success\r\n */\r\nexport const authenticatePro = (username, password, props) => {\r\n  const base64Credentials = btoa(`pro_${username}:${password}`)\r\n  const authorization = `Basic ${base64Credentials}`\r\n\r\n  return createApiCallAction(AuthProAction, ProAuthApi.postBasicPassword(authorization), {\r\n    username,\r\n    password,\r\n    props,\r\n    authorization,\r\n  })\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const LOGOUT_PRO = 'AUTH::PRO::LOGOUT'\r\n\r\nexport const logoutPro = () => createAction(LOGOUT_PRO, {})\r\n","import { LOCATION_CHANGE } from 'pmt-modules/routing'\r\n\r\nimport Immutable from 'immutable'\r\n\r\nimport { getDefaultBasicToken } from './utils'\r\n\r\nimport { AuthProAction } from './actions'\r\n\r\nexport * from './utils'\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  // will contains the oauth2 AccessToken\r\n  // the mobileApp can pass an AccessToken\r\n  auth: getDefaultBasicToken(),\r\n  isFetching: false,\r\n  error: null,\r\n\r\n  // for Refresh.\r\n  refreshSucceded: false,\r\n})\r\n\r\nexport const authProReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case LOCATION_CHANGE:\r\n      return state.merge({\r\n        error: null,\r\n      })\r\n\r\n    case AuthProAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        auth: null,\r\n        error: null,\r\n      })\r\n\r\n    case AuthProAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        auth: action.data.authorization,\r\n        refreshSucceded: true,\r\n        error: null,\r\n      })\r\n\r\n    case AuthProAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        auth: null,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import createMiddleware from 'pmt-modules/redux/createMiddleware'\r\n\r\n// noinspection ES6PreferShortImport (otherwise circular dependency)\r\nimport { getAppTexts } from '../appConfig/selectors'\r\nimport { setTexts } from '../i18n'\r\nimport { getCustomTextsData } from './selectors'\r\nimport { GetCustomTextsAction } from './actions'\r\n\r\nconst getCustomTextsSuccess = createMiddleware(\r\n  GetCustomTextsAction.SUCCESS,\r\n  ({ action, getState, next }) => {\r\n    // finalize action in order to wait it has fully ended (i.e: data is in reducer)\r\n    // so we can use the selectors after that\r\n    next(action)\r\n\r\n    // we set the texts after the action has been processed\r\n    // so we can access them from anywhere (especially in \"tr\" i18n function)\r\n    setTexts(getAppTexts(getState()), getCustomTextsData(getState()))\r\n  }\r\n)\r\n\r\nexport const customTextsMiddlewares = [getCustomTextsSuccess]\r\n","import { createSimpleReducer } from '../redux'\r\n\r\nimport { GetCustomTextsAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nexport const customTextsReducer = createSimpleReducer(GetCustomTextsAction)\r\n","import Immutable from 'immutable'\r\nimport { createReducer, createSimpleReducer } from 'pmt-modules/redux'\r\n\r\nimport {\r\n  GetRestaurantsGroupAction,\r\n  PostRestaurantsGroupAction,\r\n  PutGroupStoreListAction,\r\n  PutGroupGroupListAction,\r\n  PatchGroupAction,\r\n} from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './constants'\r\nexport * from './selectors'\r\nexport * from './format'\r\nexport * from './middlewares'\r\nexport * from './components'\r\n\r\n// Example of restaurantsGroup data\r\n// {\r\n//   restaurantsGroup: null,\r\n//   isFetching: false,\r\n//   lastUpdated: null,\r\n//   error: null,\r\n// }\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  list: {},\r\n  putStoreList: {\r\n    data: null,\r\n    isFetching: false,\r\n    lastUpdated: null,\r\n    error: null,\r\n  },\r\n  putGroupList: {\r\n    data: null,\r\n    isFetching: false,\r\n    lastUpdated: null,\r\n    error: null,\r\n  },\r\n  customTexts: {\r\n    data: null,\r\n    isFetching: false,\r\n    lastUpdated: null,\r\n    error: null,\r\n  },\r\n})\r\n\r\n// force id to be a string, avoid errors while retrieve the data where the id is pass as a int\r\n// immutable objects use keys as string, not int\r\nconst getRestaurantsGroupIdOnAction = action => String(action.data.restaurantsGroupId)\r\n\r\nconst onRequest = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.setIn(\r\n    ['list', restaurantsGroupId],\r\n    Immutable.fromJS({\r\n      restaurantsGroup: null,\r\n      isFetching: true,\r\n      lastUpdated: null,\r\n      error: null,\r\n    })\r\n  )\r\n}\r\n\r\nconst onSuccess = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.setIn(\r\n    ['list', restaurantsGroupId],\r\n    Immutable.fromJS({\r\n      restaurantsGroup: action.response,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: null,\r\n    })\r\n  )\r\n}\r\n\r\nconst onFailure = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.setIn(\r\n    ['list', restaurantsGroupId],\r\n    Immutable.fromJS({\r\n      restaurantsGroup: null,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: action.error,\r\n    })\r\n  )\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst onPatchRequest = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.mergeIn(['list', restaurantsGroupId], {\r\n    isFetching: true,\r\n    error: null,\r\n  })\r\n}\r\n\r\nconst onPatchFailure = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.mergeIn(['list', restaurantsGroupId], {\r\n    isFetching: false,\r\n    lastUpdated: new Date(),\r\n    error: action.error,\r\n  })\r\n}\r\n\r\nconst onRequestPutGroupStoreList = (state, action) => {\r\n  return state.merge({\r\n    putStoreList: {\r\n      data: null,\r\n      isFetching: true,\r\n      lastUpdated: null,\r\n      error: null,\r\n    },\r\n  })\r\n}\r\n\r\nconst onSuccessPutGroupStoreList = (state, action) => {\r\n  return state.merge({\r\n    putStoreList: {\r\n      data: action.response,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: null,\r\n    },\r\n  })\r\n}\r\n\r\nconst onFailurePutGroupStoreList = (state, action) => {\r\n  return state.merge({\r\n    putStoreList: {\r\n      data: null,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: action.error,\r\n    },\r\n  })\r\n}\r\n\r\nconst onRequestPutGroupGroupList = (state, action) => {\r\n  return state.merge({\r\n    putGroupList: {\r\n      data: null,\r\n      isFetching: true,\r\n      lastUpdated: null,\r\n      error: null,\r\n    },\r\n  })\r\n}\r\n\r\nconst onSuccessPutGroupGroupList = (state, action) => {\r\n  return state.merge({\r\n    putGroupList: {\r\n      data: action.response,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: null,\r\n    },\r\n  })\r\n}\r\n\r\nconst onFailurePutGroupGroupList = (state, action) => {\r\n  return state.merge({\r\n    putGroupList: {\r\n      data: null,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: action.error,\r\n    },\r\n  })\r\n}\r\n\r\nexport const restaurantsGroupReducer = createReducer(DEFAULT, {\r\n  [GetRestaurantsGroupAction.REQUEST]: onRequest,\r\n  [GetRestaurantsGroupAction.SUCCESS]: onSuccess,\r\n  [GetRestaurantsGroupAction.FAILURE]: onFailure,\r\n  [PutGroupStoreListAction.REQUEST]: onRequestPutGroupStoreList,\r\n  [PutGroupStoreListAction.SUCCESS]: onSuccessPutGroupStoreList,\r\n  [PutGroupStoreListAction.FAILURE]: onFailurePutGroupStoreList,\r\n  [PutGroupGroupListAction.REQUEST]: onRequestPutGroupGroupList,\r\n  [PutGroupGroupListAction.SUCCESS]: onSuccessPutGroupGroupList,\r\n  [PutGroupGroupListAction.FAILURE]: onFailurePutGroupGroupList,\r\n  [PatchGroupAction.REQUEST]: onPatchRequest,\r\n  [PatchGroupAction.FAILURE]: onPatchFailure,\r\n  [PatchGroupAction.SUCCESS]: onSuccess,\r\n})\r\n\r\nexport const postRestaurantsGroupReducer = createSimpleReducer(PostRestaurantsGroupAction)\r\n","import {\r\n  createApiCallAction,\r\n  createApiEnumAction,\r\n} from '../api/utils'\r\n\r\nimport UserApi from '../api/calls/UserApi'\r\n\r\nexport const FetchUserOrdersListAction = createApiEnumAction('USER::ORDERS::GET')\r\n\r\nexport const fetchUserOrdersList = (rGroupId, userId, cursor = '', limit = 50) => createApiCallAction(\r\n  FetchUserOrdersListAction,\r\n  UserApi.getOrdersList(rGroupId, userId, cursor, limit),\r\n  {\r\n    rGroupId,\r\n    userId,\r\n    cursor,\r\n    limit,\r\n  }\r\n)\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { formatOrders } from '../order/format'\r\n\r\nconst getUserOrders = state => state.entities.userOrders\r\nconst getUserOrderList = createSelector(\r\n  [ getUserOrders ],\r\n  (userOrders) => {\r\n    if (!userOrders) {\r\n      return null\r\n    }\r\n    return userOrders.get('list')\r\n  }\r\n)\r\n\r\nexport const getUserOrdersList = createSelector(\r\n  [ getUserOrderList ],\r\n  (userOrdersList) => {\r\n    if (!userOrdersList) {\r\n      return null\r\n    }\r\n\r\n    const userOrdersListData = userOrdersList.get('data')\r\n\r\n    if (!userOrdersListData) {\r\n      return null\r\n    }\r\n\r\n    return formatOrders(userOrdersListData.toJS())\r\n  }\r\n)\r\n\r\nexport const makeGetUserOrdersListPagination = () => createSelector(\r\n  [ getUserOrders ],\r\n  (userOrders) => {\r\n    if (isNil(userOrders)) {\r\n      return null\r\n    }\r\n\r\n    const pagination = userOrders.getIn(['list', 'pagination'])\r\n\r\n    if (!pagination) {\r\n      return null\r\n    }\r\n\r\n    return pagination.toJS()\r\n  }\r\n)\r\n\r\nexport const isFetchingUserOrdersList  = createSelector(\r\n  [ getUserOrderList ],\r\n  (userOrdersList) => {\r\n    return userOrdersList.get('isFetching') || false\r\n  }\r\n)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { fetchUserOrdersList } from '../../actions'\r\n\r\nimport {\r\n  getUserOrdersList,\r\n  isFetchingUserOrdersList,\r\n  makeGetUserOrdersListPagination,\r\n} from '../../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the check and pass it to the children\r\n *\r\n * Requirements:\r\n * - userId\r\n *\r\n * see `withCheck`\r\n */\r\nclass UserOrderListContainer extends React.Component {\r\n  componentWillMount() {\r\n    this.loadUserOrdersList(this.props)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n    if (nextProps.userId !== props.userId) {\r\n      this.loadUserOrdersList(nextProps)\r\n    }\r\n  }\r\n\r\n  loadUserOrdersList(props) {\r\n    const { fetchUserOrdersList, rGroupId, userId } = props\r\n\r\n    fetchUserOrdersList(rGroupId, userId)\r\n  }\r\n\r\n  loadMore = () => {\r\n    if (!this.props.isFetchingUserOrdersList) {\r\n      this.props.fetchUserOrdersList(\r\n        this.props.rGroupId,\r\n        this.props.userId,\r\n        this.props.userOrdersListPagination.cursors.after\r\n      )\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      children,\r\n      userId,\r\n      userOrdersList,\r\n      // paging,\r\n      isFetchingUserOrdersList,\r\n      userOrdersListPagination,\r\n      rGroupId,\r\n    } = this.props\r\n\r\n    return children({\r\n      userId,\r\n      rGroupId,\r\n      userOrdersList,\r\n      isFetchingUserOrdersList,\r\n      userOrdersListPagination,\r\n      onLoadMore: this.loadMore,\r\n    })\r\n  }\r\n}\r\n\r\nUserOrderListContainer.defaultProps = {}\r\n\r\nUserOrderListContainer.propTypes = {\r\n  userId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n  rGroupId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getUserOrdersListPagination = makeGetUserOrdersListPagination()\r\n\r\n  return {\r\n    userOrdersList: getUserOrdersList(state),\r\n    isFetchingUserOrdersList: isFetchingUserOrdersList(state),\r\n    userOrdersListPagination: getUserOrdersListPagination(state),\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    fetchUserOrdersList,\r\n  }\r\n)(UserOrderListContainer)\r\n","import Immutable from 'immutable'\r\nimport concat from 'lodash/concat'\r\nimport uniqWith from 'lodash/uniqWith'\r\n\r\nimport {\r\n  FetchUserOrdersListAction,\r\n} from './actions'\r\n\r\nexport * from './components'\r\nexport * from './actions'\r\nexport * from '../order/format'\r\nexport * from './selectors'\r\n\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  list: {\r\n    data: null,\r\n    isFetching: false,\r\n    paging: null,\r\n    error: null,\r\n  },\r\n})\r\n\r\nexport const userOrdersReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case FetchUserOrdersListAction.REQUEST:\r\n      return state.mergeIn(\r\n        ['list'], {\r\n          isFetching: true,\r\n          lastUpdated: null,\r\n          error: null,\r\n        }\r\n      )\r\n\r\n    case FetchUserOrdersListAction.SUCCESS:\r\n      let newList = [];\r\n\r\n      /**\r\n       * A null before cursor means we ran the action to load the first\r\n       * data page. In this case, we don't merge the data,\r\n       * we reset it.\r\n       */\r\n      if (action.response.paging.cursors.before === null) {\r\n        newList = action.response.data\r\n      } else {\r\n        let currentList = state.getIn(['list', 'data'])\r\n\r\n        if (typeof currentList !== 'undefined') {\r\n          currentList = currentList.valueSeq().toArray().map((item) => {\r\n            return item.toJS()\r\n          })\r\n        } else {\r\n          currentList = []\r\n        }\r\n\r\n        newList = concat(currentList, action.response.data);\r\n        newList = uniqWith(newList, (a, b) => a.id === b.id)\r\n      }\r\n\r\n      return state.merge({\r\n        list: {\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: null,\r\n        }\r\n      })\r\n      .mergeIn(['list', 'pagination'], action.response.paging)\r\n      .setIn(['list', 'data'], Immutable.fromJS(newList))\r\n\r\n    case FetchUserOrdersListAction.FAILURE:\r\n      return state.merge({\r\n        list: {\r\n          data: null,\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: action.error,\r\n        }\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nimport { formatPayment, formatPaymentMade } from './format'\r\n\r\nconst getPostPaymentData = state => state.entities.postPayment\r\nconst getPaymentData = state => state.entities.payment\r\nconst getPaymentMadeData = state => state.entities.payment.get('paymentMade')\r\nconst getItems = state => getPaymentData(state).getIn(['payment', 'items'])\r\n\r\nexport const getPayment = createSelector([getPaymentData], paymentData =>\r\n  formatPayment(paymentData.get('payment').toJS())\r\n)\r\n\r\nconst getIdOnProps = (state, props) => props.id\r\n\r\nexport const getItemWithId = createSelector([getItems, getIdOnProps], (items, id) => {\r\n  const item = items.get(id)\r\n\r\n  if (isNil(item)) {\r\n    return null\r\n  }\r\n\r\n  return item.toJS()\r\n})\r\n\r\nexport const getPostPayment = createSelector([getPostPaymentData], postPaymentData => {\r\n  const data = postPaymentData.get('data')\r\n\r\n  if (isNil(data)) {\r\n    return null\r\n  }\r\n\r\n  return data.toJS()\r\n})\r\n\r\nexport const getPaymentMade = createSelector([getPaymentMadeData], paymentMadeData => {\r\n  if (isNil(paymentMadeData)) {\r\n    return null\r\n  }\r\n\r\n  return formatPaymentMade(paymentMadeData.toJS())\r\n})\r\n\r\nexport const getPaymentError = createSelector([getPostPaymentData], postPaymentData => {\r\n  const error = postPaymentData.get('error')\r\n\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n\r\n  return error.toJS()\r\n})\r\n\r\nexport const getPostPaymentAtTableData = createSelector([getPostPayment], postPayment => {\r\n  return postPayment\r\n})\r\n\r\nexport const isFetchingPostPaymentAtTable = createSelector([getPostPaymentData], postPaymentData =>\r\n  postPaymentData.get('isFetching')\r\n)\r\n\r\n// TODO: unused? or on kiosk?\r\nconst postPaymentEmailSelectors = createSimpleSelector(state => state.entities.postPaymentEmail)\r\n\r\nexport const isFetchingPostPaymentEmail = postPaymentEmailSelectors.isFetching\r\nexport const getDataPostPaymentEmail = postPaymentEmailSelectors.getData\r\nexport const getErrorPostPaymentEmail = postPaymentEmailSelectors.getError\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNil from 'lodash/isNil'\r\nimport { connect } from 'react-redux'\r\nimport invariant from 'invariant'\r\n\r\nimport {\r\n  fetchCheck,\r\n  getCheck,\r\n  getCheckError,\r\n  isFetchingCheck,\r\n  fetchCheckWithCode,\r\n  fetchCheckWithPosCheckId,\r\n  fetchCheckWithTableNumber,\r\n} from '../check'\r\nimport { getPayment } from '../payment/selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the check and pass it to the children\r\n *\r\n * Requirements:\r\n * - restaurantId\r\n * - checkId\r\n *\r\n * see `withCheck`\r\n */\r\nclass CheckContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (\r\n      isNil(props.check) ||\r\n      props.forceReload ||\r\n      (!isNil(props.check) &&\r\n        ((props.checkId && parseInt(props.checkId) !== props.check.id) ||\r\n          (props.tableNumber && props.tableNumber !== props.check.tableNumber) ||\r\n          (props.posCheckId && props.posCheckId !== props.check.posCheckId)))\r\n    ) {\r\n      this.loadCheck(props, true)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n\r\n    if (\r\n      ((nextProps.checkId && nextProps.checkId !== props.checkId) ||\r\n        (nextProps.tableNumber && nextProps.tableNumber !== props.tableNumber) ||\r\n        (nextProps.posCheckId && nextProps.posCheckId !== props.posCheckId) ||\r\n        (nextProps.code && nextProps.code !== props.code)) &&\r\n      (!props.check || props.check.id)\r\n    ) {\r\n      this.loadCheck(nextProps)\r\n    }\r\n  }\r\n\r\n  loadCheck(props, forceReload = false) {\r\n    if (!props.isFetchingCheck || forceReload) {\r\n      if (props.posCheckId) {\r\n        props.fetchCheckWithPosCheckId(props.restaurantId, props.posCheckId)\r\n      } else if (props.tableNumber) {\r\n        props.fetchCheckWithTableNumber(props.restaurantId, props.tableNumber)\r\n      } else if (props.checkId) {\r\n        props.fetchCheck(props.restaurantId, props.checkId)\r\n      } else if (props.code) {\r\n        props.fetchCheckWithCode(props.restaurantId, props.code)\r\n      } else {\r\n        invariant(false, 'Invalid identifier to fetch check.')\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      CheckWrappedComponent,\r\n      check,\r\n      checkError,\r\n      isFetchingCheck,\r\n      children,\r\n      payment,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    const childrenProps = {\r\n      check,\r\n      checkError,\r\n      reloadCheck: () => this.loadCheck(this.props),\r\n      isFetchingCheck,\r\n      payment,\r\n    }\r\n\r\n    if (isNil(CheckWrappedComponent)) {\r\n      return children(childrenProps)\r\n    }\r\n\r\n    return <CheckWrappedComponent {...childrenProps} {...otherProps} />\r\n  }\r\n}\r\n\r\nCheckContainer.defaultProps = {\r\n  check: null,\r\n  checkId: null,\r\n  tableNumber: null,\r\n  posCheckId: null,\r\n  code: null,\r\n}\r\n\r\nCheckContainer.propTypes = {\r\n  check: PropTypes.object,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  check: getCheck(state),\r\n  checkError: getCheckError(state),\r\n  isFetchingCheck: isFetchingCheck(state),\r\n  payment: getPayment(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    fetchCheck,\r\n    fetchCheckWithCode,\r\n    fetchCheckWithPosCheckId,\r\n    fetchCheckWithTableNumber,\r\n  }\r\n)(CheckContainer)\r\n","var baseForOwn = require('./_baseForOwn'),\n    castFunction = require('./_castFunction');\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n  return object && baseForOwn(object, castFunction(iteratee));\n}\n\nmodule.exports = forOwn;\n","import isNull from 'lodash/isNull'\r\nimport forOwn from 'lodash/forOwn'\r\nimport Immutable from 'immutable'\r\n\r\nimport {\r\n  GetAsyncPaymentAction,\r\n  isAsyncPaymentRedirectToPspResponse,\r\n} from 'pmt-modules/asyncPayment'\r\n\r\nimport { generateIdempotencyKey } from 'pmt-utils/idempotency'\r\nimport { createSimpleReducer } from 'pmt-modules/redux'\r\n\r\nimport {\r\n  PostPaymentAction,\r\n  PostIrlPaymentAction,\r\n  PostUserLightPaymentAction,\r\n  SelectPaymentTypeAction,\r\n  PaymentAction,\r\n  PaymentItemSelection,\r\n  SharePaymentAction,\r\n  PostPaymentEmailAction,\r\n} from './actions'\r\n\r\nimport {\r\n  GetCheckWithTableNumberAction,\r\n  GetRefreshCheckAction,\r\n  GetCheckAction,\r\n  GetCheckWithCodeAction,\r\n  MergeCheckWithCodeAction,\r\n} from '../check'\r\n\r\nimport { PaymentType } from '../../global/constants'\r\nimport { GetAppConfigAction } from '../../appConfig'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\n\r\nconst CHECK = Immutable.fromJS({\r\n  outstandingBalance: 0,\r\n})\r\n\r\nexport const getDefaultShare = () => ({\r\n  enabled: false, // to know if we are in share mode or not for an item\r\n\r\n  // the dividend\r\n  divider: 1,\r\n  defaultDivider: 1,\r\n\r\n  // the divisor\r\n  multiplier: 1,\r\n  defaultMultiplier: 1,\r\n\r\n  //\r\n  dividerIsMinimum: true,\r\n  multiplierIsMinimum: true,\r\n  multiplierIsMaximum: true,\r\n})\r\n\r\nexport const getDefaultChoose = () => ({\r\n  ...getDefaultShare(),\r\n  divider: 2,\r\n  defaultDivider: 2,\r\n})\r\n\r\nconst PAYMENT = () => ({\r\n  type: PaymentType.ALL,\r\n  amount: 0,\r\n  tips: 0,\r\n\r\n  idempotencyKey: generateIdempotencyKey(),\r\n\r\n  // replace the array of entry `entries`\r\n  items: {},\r\n\r\n  cardId: null,\r\n\r\n  // the associated check\r\n  check: CHECK,\r\n\r\n  // front data to handle sharing by division\r\n  share: getDefaultShare(),\r\n\r\n  /**\r\n   * true if the requesting client can handle 3D Secure verification.\r\n   */\r\n  supportAsyncPayment: false,\r\n})\r\n\r\n/**\r\n *\r\n *\r\n */\r\nconst PAYMENT_DATA = {\r\n  payment: PAYMENT(),\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n}\r\n\r\n/**\r\n * An item is a payment's entry information.\r\n * An entry is the check's item information.\r\n */\r\nconst createItem = entry => ({\r\n  quantity: 0,\r\n  id: entry.id,\r\n  max: entry.quantity,\r\n  name: entry.name,\r\n  unitPrice: entry.price / entry.quantity,\r\n  absoluteTotal: entry.price,\r\n  total: 0,\r\n  share: getDefaultChoose(),\r\n})\r\n\r\nconst itemsPath = ['payment', 'items']\r\n\r\nconst ceilToCent = exactValue => {\r\n  return Number(Math.ceil(exactValue + 'e2') + 'e-2')\r\n}\r\n\r\nconst ceilWithRoundingValue = (exactValue, roundingValue) => {\r\n  // we must ceil, and not use exact nor round, because if we do, and everyone split the check, we\r\n  // will have some cents remaining. With ceil, the last to pay will pay less.\r\n  return Math.ceil(exactValue / roundingValue) * roundingValue\r\n}\r\n\r\n// this method is used to add share data on payment (check not null) or an item directly (share only)\r\nconst updateShareData = ({ check, share, roundingValue }) => {\r\n  if (isNull(share)) {\r\n    return null\r\n  }\r\n  // verify we are not under the minimum\r\n  share.divider = Math.max(share.defaultDivider, share.divider)\r\n  share.multiplier = Math.max(share.defaultMultiplier, share.multiplier)\r\n\r\n  // at maximum, we multiplier the number of \"divider\"\r\n  const maxMultiplier = share.divider\r\n  share.multiplier = Math.min(maxMultiplier, share.multiplier)\r\n\r\n  // update data\r\n  share.dividerIsMinimum = share.defaultDivider === share.divider\r\n  share.multiplierIsMinimum = share.defaultMultiplier === share.multiplier\r\n  share.multiplierIsMaximum = maxMultiplier === share.multiplier\r\n\r\n  // we add share data on the payment if check is not null.\r\n  // Otherwise we are adding share data on an item\r\n  if (check) {\r\n    check.tips = check.tips || 0\r\n    const checkTotal = check.total ? check.total - check.tips : 0\r\n    const exactValuePerPerson = checkTotal / share.divider\r\n    const amountPerPersonAsNumber = roundingValue\r\n      ? ceilWithRoundingValue(exactValuePerPerson, roundingValue)\r\n      : ceilToCent(exactValuePerPerson)\r\n    share.amountPerPerson = amountPerPersonAsNumber.toFixed(2)\r\n    // set the check total on share information. Used by the API to verify we have an up to date\r\n    // check when wanting to split\r\n    share.total = checkTotal\r\n  }\r\n\r\n  return share\r\n}\r\n\r\nconst getItemOnState = (state, itemId) => {\r\n  const stateItems = state.getIn(itemsPath)\r\n  const items = stateItems.toJS()\r\n\r\n  return items[itemId]\r\n}\r\n\r\nconst createItemOnState = (state, entry) => {\r\n  const stateItems = state.getIn(itemsPath)\r\n  const items = stateItems.toJS()\r\n  const item = items[entry.id] || createItem(entry)\r\n\r\n  // set object\r\n  return state.setIn(itemsPath, stateItems.set(entry.id, item))\r\n}\r\n\r\nconst removeItemOnState = (state, entry) => {\r\n  const stateItems = state.getIn(itemsPath)\r\n  let items = stateItems.toJS()\r\n  delete items[entry.id]\r\n\r\n  return state.setIn(itemsPath, items)\r\n}\r\n\r\nconst updateItem = (item, roundingValue) => {\r\n  if (item.share.enabled) {\r\n    item.share = updateShareData(item)\r\n    item.quantity = item.share.divider / item.share.multiplier\r\n\r\n    // we share for the total quantity of the entry (* item.max)\r\n    item.total = (item.unitPrice * item.max) / item.quantity\r\n    if (roundingValue) {\r\n      item.total = ceilWithRoundingValue(item.total, roundingValue)\r\n    } else {\r\n      item.total = ceilToCent(item.total)\r\n    }\r\n  } else {\r\n    // reset the share data\r\n    item.share = getDefaultShare()\r\n    // calculate total price\r\n    item.total = item.unitPrice * item.quantity\r\n  }\r\n\r\n  return item\r\n}\r\n\r\nconst updateItemOnState = (state, item) => {\r\n  const stateItems = state.getIn(itemsPath)\r\n\r\n  return state.setIn(\r\n    itemsPath,\r\n    stateItems.set(item.id, updateItem(item, state.getIn(['payment', 'roundingValue'])))\r\n  )\r\n}\r\n\r\nconst increaseItemQuantity = (state, itemId) => {\r\n  const item = getItemOnState(state, itemId)\r\n\r\n  if (item.share.enabled) {\r\n    // pass from sharing to quantity\r\n    item.share.enabled = false\r\n    item.quantity = 0\r\n  } else {\r\n    // change quantity\r\n    item.quantity++\r\n  }\r\n\r\n  // the max has reached, we pass it to 0\r\n  if (item.quantity > item.max) {\r\n    item.quantity = 0\r\n  }\r\n\r\n  return updateItemOnState(state, item)\r\n}\r\n\r\n/**\r\n * This function have to be called each time the payment on the state change.\r\n * It will calculate payment information with the new payment state:\r\n * - calculate payment's amount\r\n * - update data for each payment type\r\n */\r\nconst refreshPaymentInfo = payment => {\r\n  let total = 0\r\n  switch (payment.type) {\r\n    case PaymentType.ENTRIES:\r\n      // the total is the added total of each item\r\n      forOwn(payment.items, (item, itemKey) => {\r\n        if (item.share.enabled) {\r\n          let itemPrice = item.unitPrice * item.max * (item.share.multiplier / item.share.divider)\r\n          // to be coherent with the displayed prices (aka ceiled value for each line)\r\n          // the total is the sum of the ceiled values (and not the ceiled nor rounded value of the sum)\r\n          total += payment.roundingValue\r\n            ? ceilWithRoundingValue(itemPrice, payment.roundingValue)\r\n            : ceilToCent(itemPrice)\r\n        } else {\r\n          total += item.unitPrice * item.max\r\n        }\r\n      })\r\n\r\n      break\r\n\r\n    case PaymentType.SHARE:\r\n      payment.share = updateShareData(payment)\r\n\r\n      // calculate total and round to upper cent\r\n      // we split the original check total, without the tips\r\n      payment.check.tips = payment.check.tips || 0\r\n      const checkTotal =\r\n        payment.check && payment.check.total ? payment.check.total - payment.check.tips : 0\r\n      const exactTotal = (checkTotal / payment.share.divider) * payment.share.multiplier\r\n      if (payment.roundingValue) {\r\n        total = ceilWithRoundingValue(exactTotal, payment.roundingValue)\r\n      } else {\r\n        total = ceilToCent(exactTotal)\r\n      }\r\n\r\n      break\r\n\r\n    case PaymentType.ALL:\r\n      // we wants to pay the remaining total\r\n      total = payment.check.outstandingBalance\r\n      console.log('current outstanding balance', total)\r\n      break\r\n\r\n    default:\r\n      console.error(`not handle  type ${payment.type}`)\r\n  }\r\n\r\n  payment.amount = total\r\n\r\n  // update items\r\n  // TODO: remove selected items that are no longer in the entry\r\n  forOwn(payment.items, (item, itemKey) => {\r\n    payment.items[itemKey] = updateItem({ ...item }, payment.roundingValue)\r\n  })\r\n\r\n  // we considered there was new data enough to refreshPaymentInfo\r\n  // so we consider it's not the same payment, and generate a new idempotency key\r\n  // like that, changing tips value or splitting the check differently will allow to resubmit the payment\r\n  payment.idempotencyKey = generateIdempotencyKey()\r\n\r\n  return Immutable.fromJS(payment)\r\n}\r\n\r\nconst refreshPaymentInfoState = state => {\r\n  const payment = state.get('payment').toJS()\r\n  return state.setIn(['payment'], refreshPaymentInfo(payment))\r\n}\r\n\r\nexport const paymentReducer = (state = Immutable.fromJS(PAYMENT_DATA), action) => {\r\n  switch (action.type) {\r\n    case PaymentAction.RESET:\r\n      const paymentMade = {\r\n        amount: Number(state.get('payment').get('amount')) || 0,\r\n        tips: state.get('payment').get('tips') || state.get('payment').get('tip') || 0,\r\n      }\r\n      if (paymentMade.amount === 0 && paymentMade.tips === 0) {\r\n        // due to StrictMode in dev, the reset action is called twice,\r\n        // so we need to check if we already have copied the payment to paymentMade and reset the original payment,\r\n        // in order to not trigger a re-render (and to not copy a resetted payment to paymentMade,\r\n        // which would display 0€ on the confirm page instead of the correct amount)\r\n        return state\r\n      }\r\n      return state.merge(\r\n        Immutable.fromJS({\r\n          ...PAYMENT_DATA,\r\n          payment: {\r\n            ...PAYMENT(),\r\n            // we keep the roundingValue (from apiConsumer) on payment so we have it when we need to do calculation\r\n            roundingValue: state.get('payment').get('roundingValue'),\r\n          },\r\n          // keep data from the payment to be displayed on the confirm page.\r\n          // the rest of the data is reset above, before we display the confirm page, in order to\r\n          // have a clean payment data for the next payment flow.\r\n          paymentMade: paymentMade,\r\n        })\r\n      )\r\n\r\n    //\r\n    // check\r\n    //\r\n    case GetCheckWithTableNumberAction.SUCCESS:\r\n    case GetRefreshCheckAction.SUCCESS:\r\n    case GetCheckAction.SUCCESS:\r\n    case GetCheckWithCodeAction.SUCCESS:\r\n    case MergeCheckWithCodeAction.SUCCESS:\r\n      console.log('check received', action.response)\r\n      state = state.setIn(['payment', 'check'], action.response)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    // PaymentType\r\n    //\r\n\r\n    case SelectPaymentTypeAction.ALL:\r\n      state = state.mergeIn(['payment'], {\r\n        type: PaymentType.ALL,\r\n        amount: state.getIn(['payment', 'check', 'total']),\r\n        items: {},\r\n      })\r\n      return refreshPaymentInfoState(state)\r\n\r\n    case SelectPaymentTypeAction.SHARE:\r\n      state = state.mergeIn(['payment'], {\r\n        type: PaymentType.SHARE,\r\n        items: {},\r\n      })\r\n      return refreshPaymentInfoState(state)\r\n\r\n    case SelectPaymentTypeAction.ENTRIES:\r\n      state = state.mergeIn(['payment'], {\r\n        type: PaymentType.ENTRIES,\r\n        share: getDefaultShare(),\r\n      })\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    // Payment\r\n    //\r\n\r\n    case PaymentAction.SELECT_TIPS:\r\n      state = state.setIn(['payment', 'tips'], action.tips)\r\n      // trick API\r\n      state = state.setIn(['payment', 'tip'], action.tips)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    //\r\n    //\r\n\r\n    case PaymentItemSelection.ADD_ITEM:\r\n      state = createItemOnState(state, action.entry)\r\n      state = increaseItemQuantity(state, action.entry.id)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    case PaymentItemSelection.REMOVE_ITEM:\r\n      state = removeItemOnState(state, action.entry)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    // SHARING ITEM\r\n    //\r\n    case PaymentItemSelection.ITEM_SHARE_UPDATE:\r\n      const increaseItemShareUpdate = (state, itemId, share) => {\r\n        const item = getItemOnState(state, itemId)\r\n        // change quantity\r\n        item.share.divider = share.divider\r\n        item.share.multiplier = share.multiplier\r\n        item.share.enabled = true\r\n        return updateItemOnState(state, item)\r\n      }\r\n      state = createItemOnState(state, action.entry)\r\n      state = increaseItemShareUpdate(state, action.entry.id, action.share)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    // SHARING CHECK\r\n    //\r\n\r\n    case SharePaymentAction.INCREASE_DIVIDER:\r\n      return refreshPaymentInfoState(\r\n        state\r\n          .updateIn(['payment', 'share', 'divider'], value => value + 1)\r\n          .setIn(['payment', 'share', 'enabled'], true)\r\n      )\r\n\r\n    case SharePaymentAction.DECREASE_DIVIDER:\r\n      return refreshPaymentInfoState(\r\n        state\r\n          .updateIn(['payment', 'share', 'divider'], value => value - 1)\r\n          .setIn(['payment', 'share', 'enabled'], true)\r\n      )\r\n\r\n    case SharePaymentAction.INCREASE_MULTIPLIER:\r\n      return refreshPaymentInfoState(\r\n        state\r\n          .updateIn(['payment', 'share', 'multiplier'], value => value + 1)\r\n          .setIn(['payment', 'share', 'enabled'], true)\r\n      )\r\n\r\n    case SharePaymentAction.DECREASE_MULTIPLIER:\r\n      return refreshPaymentInfoState(\r\n        state\r\n          .updateIn(['payment', 'share', 'multiplier'], value => value - 1)\r\n          .setIn(['payment', 'share', 'enabled'], false)\r\n      )\r\n\r\n    // storing roundingValue (from apiConsumer) on payment so we have it when we need to do calculation\r\n    case GetAppConfigAction.SUCCESS:\r\n      state = state.setIn(\r\n        ['payment', 'roundingValue'],\r\n        action.response?.settings?.front?.display?.roundingValue\r\n      )\r\n      return refreshPaymentInfoState(state)\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\n/**\r\n *\r\n *\r\n */\r\nconst POST_PAYMENT_DATA = {\r\n  data: null,\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n}\r\n\r\nexport const postPaymentReducer = (state = Immutable.fromJS(POST_PAYMENT_DATA), action) => {\r\n  switch (action.type) {\r\n    case PostPaymentAction.RESET:\r\n      return state.merge(\r\n        Immutable.fromJS({\r\n          ...POST_PAYMENT_DATA,\r\n          data: {\r\n            // we keep some data to display confirm page\r\n            id: state.get('data')?.get('id'), // needed for the download receipt button\r\n          },\r\n        })\r\n      )\r\n\r\n    case GetAsyncPaymentAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n      })\r\n\r\n    case PostPaymentAction.REQUEST:\r\n    case PostIrlPaymentAction.REQUEST:\r\n    case PostUserLightPaymentAction.REQUEST:\r\n      return state.merge({\r\n        data: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case PostPaymentAction.SUCCESS:\r\n    case PostIrlPaymentAction.SUCCESS:\r\n    case PostUserLightPaymentAction.SUCCESS:\r\n      return state.merge({\r\n        data: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetAsyncPaymentAction.SUCCESS:\r\n      return state.merge({\r\n        data: {\r\n          ...action.response.linkedObject, // linkedObject is the payment\r\n        },\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetAsyncPaymentAction.FAILURE:\r\n    case PostPaymentAction.FAILURE:\r\n    case PostIrlPaymentAction.FAILURE:\r\n    case PostUserLightPaymentAction.FAILURE:\r\n      // if 3DSecure response, the error contains the order\r\n      if (isAsyncPaymentRedirectToPspResponse(action)) {\r\n        return state.merge({\r\n          data: action.error.body,\r\n          isFetching: false,\r\n          error: null,\r\n        })\r\n      }\r\n      return state.merge({\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport const postPaymentEmailReducer = createSimpleReducer(PostPaymentEmailAction)\r\n","import moment from 'moment'\r\n\r\nimport { appConfigReducer } from 'pmt-modules/appConfig'\r\nimport { authAppReducer } from 'pmt-modules/authApp'\r\nimport { authReducer } from 'pmt-modules/auth'\r\nimport { authenticatedUserReducer } from 'pmt-modules/authenticatedUser'\r\nimport { authProReducer } from 'pmt-modules/authPro'\r\nimport { cartReducer } from 'pmt-modules/cart'\r\nimport { cartDiffReducer } from 'pmt-modules/cartDiff'\r\nimport { voucherDiffReducer } from 'pmt-modules/payment/voucher'\r\nimport { catalogReducer } from 'pmt-modules/catalog'\r\nimport { upsellsReducer } from 'pmt-modules/upselling'\r\nimport { customTextsReducer } from 'pmt-modules/customTexts'\r\nimport { forgotPasswordReducer } from 'pmt-modules/forgotPassword'\r\nimport { geolocationReducer } from 'pmt-modules/geolocation'\r\nimport { meReducer, putUserMeReducer } from 'pmt-modules/userMe'\r\nimport { userAddressReducer } from 'pmt-modules/userAddress'\r\nimport { orderPluginReducer } from 'pmt-modules/orderPlugin'\r\nimport { orderPreviewReducer } from 'pmt-modules/orderPreview'\r\nimport { orderSettingsReducer } from 'pmt-modules/orderSettings'\r\nimport { registrationReducer } from 'pmt-modules/registration'\r\nimport { restaurantsGroupReducer } from 'pmt-modules/restaurantsGroup'\r\nimport { restaurantReducer } from 'pmt-modules/restaurant'\r\nimport { orderFrontReducer } from 'pmt-modules/orderFront'\r\nimport { orderProductReducer } from 'pmt-modules/orderProduct'\r\nimport { orderMenuReducer } from 'pmt-modules/orderMenu'\r\nimport { orderPostReducer } from 'pmt-modules/orderPost'\r\nimport { suggestionReducer } from 'pmt-modules/suggestion'\r\nimport { userOrdersReducer } from 'pmt-modules/userOrders'\r\nimport { appSecurityReducer } from 'pmt-modules/appSecurity'\r\nimport { userUserAccountsReducer } from 'pmt-modules/userAccount'\r\nimport { checkReducer } from 'pmt-modules/payment'\r\nimport { fetchPaymentPdfLinkReducer } from 'pmt-modules/payment/pdf'\r\nimport { orderStatusPollReducer } from 'pmt-modules/orderStatusPoll'\r\nimport { requestApiReducer } from 'pmt-modules/useApi'\r\n\r\n// Rolling expiration: this is a *duration* (in ms), not an absolute date.\r\n// The actual expiry timestamp is computed at write time by the expiration\r\n// transform (see reduxPersistTransformExpire `inbound`), so the delay always\r\n// starts from the last write instead of from app start time.\r\n// delay size = the biggest scenario we can imagine, for example a user putting an order in the cart, then leaving it for a long time before coming back to pay it.\r\n// We want to keep the cart data for a long time, but not forever.\r\nconst persistExpireDelay = moment.duration(24, 'hours').asMilliseconds()\r\n\r\nconst persistOptions = { persist: true, persistExpireDelay }\r\n\r\ncartReducer.options = { ...persistOptions }\r\ncustomTextsReducer.options = { ...persistOptions }\r\ngeolocationReducer.options = { ...persistOptions }\r\norderFrontReducer.options = { ...persistOptions }\r\norderPluginReducer.options = { ...persistOptions }\r\n// for 3DSecure we need to persist the orderPost data\r\norderPreviewReducer.options = { ...persistOptions }\r\norderPostReducer.options = { ...persistOptions }\r\norderSettingsReducer.options = { ...persistOptions }\r\nuserUserAccountsReducer.options = { ...persistOptions }\r\n\r\nexport default {\r\n  appConfig: appConfigReducer,\r\n  appSecurity: appSecurityReducer,\r\n  auth: authReducer,\r\n  authenticatedUser: authenticatedUserReducer,\r\n  authApp: authAppReducer,\r\n  authPro: authProReducer,\r\n  cart: cartReducer,\r\n  cartDiff: cartDiffReducer,\r\n  voucherDiff: voucherDiffReducer,\r\n  catalog: catalogReducer,\r\n  upsellingData: upsellsReducer,\r\n  check: checkReducer,\r\n  customTexts: customTextsReducer,\r\n  forgotPassword: forgotPasswordReducer,\r\n  geolocation: geolocationReducer,\r\n  fetchPaymentPdfLink: fetchPaymentPdfLinkReducer,\r\n  orderFront: orderFrontReducer,\r\n  orderMenu: orderMenuReducer,\r\n  orderPlugin: orderPluginReducer,\r\n  orderPost: orderPostReducer,\r\n  orderPreview: orderPreviewReducer,\r\n  orderProduct: orderProductReducer,\r\n  orderSettings: orderSettingsReducer,\r\n  orderStatusPoll: orderStatusPollReducer,\r\n  putUserMe: putUserMeReducer,\r\n  registration: registrationReducer,\r\n  requestApi: requestApiReducer,\r\n  restaurant: restaurantReducer,\r\n  restaurantsGroup: restaurantsGroupReducer,\r\n  suggestion: suggestionReducer,\r\n  userAddress: userAddressReducer,\r\n  userMe: meReducer,\r\n  userOrders: userOrdersReducer,\r\n  userAccounts: userUserAccountsReducer,\r\n}\r\n","import concat from 'lodash/concat'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport {\r\n  sendEvent,\r\n  sendAddDeliveryInfo,\r\n  sendRemoveFromCart,\r\n  sendLogin,\r\n  sendPaymentSubmitted,\r\n  sendPaymentSucceeded,\r\n  sendAddPaymentInfo,\r\n  sendAddToCart,\r\n  sendCartSubmitted,\r\n  sendViewCart,\r\n  sendViewItem,\r\n} from 'pmt-modules/analytics'\r\n\r\nconst events = {\r\n  ON_PAGE_LOADED: 'EVENT::GLOBAL::ON_PAGE_LOADED',\r\n\r\n  // HEADER\r\n  ON_HEADER_MODE_SELECT: 'EVENT::ORDER::HEADER::MODE_SELECT',\r\n  ON_HEADER_BUTTON_CHANGE: 'EVENT::ORDER::HEADER::BUTTON_CHANGE',\r\n\r\n  // BREADCRUMB\r\n  ON_BREADCRUMB_LINK: 'EVENT::ORDER::BREADCRUMB::LINK',\r\n\r\n  // MODE\r\n  ON_MODE_SELECT: 'EVENT::ORDER::MODE::SELECT',\r\n\r\n  // STORE_LOCATOR\r\n  ON_STORE_LOCATOR_GEOLOCATION: 'EVENT::ORDER::STORE_LOCATOR::GEOLOCATION',\r\n  ON_STORE_LOCATOR_RESTAURANT_SELECT: 'EVENT::ORDER::STORE_LOCATOR::RESTAURANT::SELECT',\r\n  ON_STORE_LOCATOR_SUBMIT: 'EVENT::ORDER::STORE_LOCATOR::SUBMIT',\r\n\r\n  // CATALOG\r\n  ON_CATALOG_CATEGORY_SELECT: 'EVENT::ORDER::CATALOG::CATEGORY::SELECT',\r\n\r\n  // CATALOG ITEM\r\n  ON_CATALOG_ITEM_DETAIL: 'EVENT::ORDER::CATALOG::ITEM::DETAIL',\r\n  ON_CATALOG_ITEM_ADD_PRODUCT: 'EVENT::ORDER::CATALOG::ITEM::ADD_PRODUCT',\r\n  ON_CATALOG_ITEM_ADD_MENU: 'EVENT::ORDER::CATALOG::ITEM::ADD_MENU',\r\n\r\n  // CATALOG MENU\r\n  ON_CATALOG_MENU_ADD_PRODUCT: 'EVENT::ORDER::CATAOLOG:LMENU::ADD_PRODUCT',\r\n  ON_CATALOG_MENU_BREADCRUMB: 'EVENT::ORDER::CATALOG::MENU::BREADCRUMB',\r\n  ON_CATALOG_MENU_DETAIL: 'EVENT::ORDER::CATALOG::MENU::DETAIL',\r\n  ON_CATALOG_MENU_ITEM_DETAIL: 'EVENT::ORDER::CATALOG::MENU::ITEM_DETAIL',\r\n  ON_CATALOG_MENU_ADD_TOP: 'EVENT::ORDER::CATALOG::MENU::ADD_TOP',\r\n  ON_CATALOG_MENU_ADD_BOTTOM: 'EVENT::ORDER::CATALOG::MENU::ADD_BOTTOM',\r\n  ON_CATALOG_MENU_ADD_STICKY: 'EVENT::ORDER::CATALOG::MENU::ADD_STICKY',\r\n\r\n  // CATALOG CART\r\n  ON_CATALOG_CART_SUBMIT: 'EVENT::ORDER::CATALOG::CART::SUBMIT',\r\n\r\n  // CART\r\n  ON_CART_ITEM_DETAIL: 'EVENT::ORDER::CART::ITEM_DETAIL',\r\n  ON_CART_ITEM_DELETE: 'EVENT::ORDER::CART::ITEM_DELETE',\r\n  ON_CART_ITEM_INCREASE: 'EVENT::ORDER::CART::ITEM_INCREASE',\r\n  ON_CART_ITEM_DECREASE: 'EVENT::ORDER::CART::ITEM_DECREASE',\r\n  ON_CART_ADD_COMMENT: 'EVENT::ORDER::CART::ADD_COMMENT',\r\n  ON_CART_SUBMIT: 'EVENT::ORDER::CART::SUBMIT',\r\n\r\n  // REGISTER\r\n  ON_REGISTER_SUBMIT_REGISTER: 'EVENT::ORDER::REGISTER::SUBMIT_REGISTER',\r\n\r\n  // LOGIN\r\n  ON_LOGIN_SUBMIT_LOGIN: 'EVENT::ORDER::LOGIN::SUBMIT_LOGIN',\r\n\r\n  // FORGOT PASSWORD\r\n  ON_FORGOT_PASSWORD_SUBMIT: 'EVENT::ORDER::FORGOT_PASSWORD::SUBMIT',\r\n\r\n  // PROFILE\r\n  ON_PROFILE_SUBMIT: 'EVENT::ORDER::PROFILE::SUBMIT',\r\n\r\n  // DELIVERY ADDRESS\r\n  ON_DELIVERY_ADDRESS_ADD_ADDRESS: 'EVENT::ORDER::DELIVERY_ADDRESS::ADD_ADDRESS',\r\n  ON_DELIVERY_ADDRESS_ADD_GEOLOCATION: 'EVENT::ORDER::DELIVERY_ADDRESS::ADD_GEOLOCATION',\r\n  ON_DELIVERY_ADDRESS_EDIT_ADDRESS: 'EVENT::ORDER::DELIVERY_ADDRESS::EDIT_ADDRESS',\r\n  ON_DELIVERY_ADDRESS_EDIT_GEOLOCATION: 'EVENT::ORDER::DELIVERY_ADDRESS::EDIT_GEOLOCATION',\r\n  ON_DELIVERY_ADDRESS_DELETE_ADDRESS: 'EVENT::ORDER::DELIVERY_ADDRESS::DELETE_ADDRESS',\r\n  ON_DELIVERY_ADDRESS_CONFIRM: 'EVENT::ORDER::DELIVERY_ADDRESS::SUBMIT',\r\n\r\n  // PAYMENT\r\n  ON_PAYMENT_MODE_SELECT: 'EVENT::ORDER::PAYMENT::MODE_SELECT',\r\n  ON_PAYMENT_SUBMIT: 'EVENT::ORDER::PAYMENT::SUBMIT',\r\n\r\n  // CONFIRM\r\n  ON_CONFIRM_ORDER_DETAIL: 'EVENT::ORDER::CONFIRM::ORDER_DETAIL',\r\n  ON_CONFIRM_CALLBACK: 'EVENT::ORDER::CONFIRM::CALLBACK',\r\n\r\n  // OTHER\r\n  ON_CHANGE_SLOT: 'EVENT::ORDER::OTHER::CHANGE_SLOT',\r\n  ON_CHANGE_TABLE: 'EVENT::ORDER::OTHER::CHANGE_TABLE',\r\n  ON_SET_DUE_DATE_ASAP: 'EVENT::ORDER::OTHER::SET_DUE_DATE::ASAP',\r\n  ON_SET_DUE_DATE_SLOT: 'EVENT::ORDER::OTHER::SET_DUE_DATE::SLOT',\r\n}\r\n\r\nconst ACTION = {\r\n  CTA: 'calls-to-action',\r\n  SEC_CTA: 'secondary-calls-to-action',\r\n  LINKS: 'links',\r\n}\r\n\r\nconst formatItem = (item, category, restaurant) => ({\r\n  item_id: item.id,\r\n  item_name: item.name,\r\n  item_category: !isNil(category) ? category.name : null,\r\n  item_brand: !isNil(restaurant) ? restaurant.name : null,\r\n  price: (!isNil(item.totalPriceWithQuantity) ? item.totalPriceWithQuantity : item.price).toFixed(\r\n    2\r\n  ),\r\n  quantity: item.quantity || 1,\r\n})\r\n\r\nconst makeEvent = (catPrefix = '', action, label, value) =>\r\n  sendEvent({\r\n    category: `${catPrefix}${window.location.pathname.replace(/\\//g, '-')}`,\r\n    action,\r\n    label,\r\n    value,\r\n  })\r\n\r\nconst getLabelForMode = (mode) => {\r\n  switch (mode) {\r\n    case 0:\r\n      return 'on-site'\r\n    case 1:\r\n      return 'take-away'\r\n    case 2:\r\n      return 'delivery'\r\n    default:\r\n      return 'unknown'\r\n  }\r\n}\r\n\r\nconst listeners = {\r\n  [EventManager.Events.ON_ANALYTICS_INIT]: () => {\r\n    // init plugin if needed\r\n  },\r\n  [events.ON_HEADER_MODE_SELECT]: ({ data }) => {\r\n    makeEvent('header', ACTION.SEC_CTA, 'select-mode', data.mode)\r\n  },\r\n  [events.ON_HEADER_BUTTON_CHANGE]: ({ data }) => {\r\n    makeEvent('header', ACTION.SEC_CTA, 'change-button', data.mode)\r\n  },\r\n  [events.ON_BREADCRUMB_LINK]: ({ data }) => {\r\n    makeEvent('breadcrumb', ACTION.LINKS, data.link)\r\n  },\r\n  [events.ON_MODE_SELECT]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, getLabelForMode(data.mode), data.mode)\r\n  },\r\n  [events.ON_STORE_LOCATOR_GEOLOCATION]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'geolocation', data.mode)\r\n  },\r\n  [events.ON_STORE_LOCATOR_RESTAURANT_SELECT]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, data.restaurant.id, data.mode)\r\n  },\r\n  [events.ON_STORE_LOCATOR_SUBMIT]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, 'main-validate-store', data.mode)\r\n  },\r\n  [events.ON_CATALOG_CATEGORY_SELECT]: ({ data }) => {\r\n    makeEvent('page', ACTION.LINKS, 'catalog-category')\r\n  },\r\n  [events.ON_CATALOG_ITEM_DETAIL]: ({ data }) => {\r\n    sendViewItem(formatItem(data.item, data.category, data.restaurant))\r\n    makeEvent('page', ACTION.LINKS, 'details-items')\r\n  },\r\n  [events.ON_CATALOG_ITEM_ADD_PRODUCT]: ({ data }) => {\r\n    sendAddToCart(formatItem(data.item, data.category, data.restaurant))\r\n    makeEvent('page', ACTION.CTA, 'add-product')\r\n  },\r\n  [events.ON_CATALOG_ITEM_ADD_MENU]: ({ data }) => {\r\n    sendAddToCart(formatItem(data.item, data.category, data.restaurant))\r\n    makeEvent('page', ACTION.CTA, 'add-menu')\r\n  },\r\n  [events.ON_CATALOG_MENU_ADD_PRODUCT]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, 'add-product-menu')\r\n  },\r\n  [events.ON_CATALOG_MENU_BREADCRUMB]: ({ data }) => {\r\n    makeEvent('page', ACTION.LINKS, 'menu-part-side-breadcrumbs')\r\n  },\r\n  [events.ON_CATALOG_MENU_DETAIL]: ({ data }) => {\r\n    makeEvent('page', ACTION.LINKS, 'details-menu')\r\n  },\r\n  [events.ON_CATALOG_MENU_ITEM_DETAIL]: ({ data }) => {\r\n    makeEvent('page', ACTION.LINKS, 'details-menu-item')\r\n  },\r\n  [events.ON_CATALOG_MENU_ADD_TOP]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, 'add-cart-top')\r\n  },\r\n  [events.ON_CATALOG_MENU_ADD_BOTTOM]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, 'add-cart-bottom')\r\n  },\r\n  [events.ON_CATALOG_MENU_ADD_STICKY]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, 'add-cart-sticky')\r\n  },\r\n  [events.ON_CATALOG_CART_SUBMIT]: ({ data }) => {\r\n    const formattedItems = data.items.map((item) => formatItem(item, '', data.restaurant))\r\n    sendViewCart(formattedItems, 1)\r\n    makeEvent('page', ACTION.CTA, 'main-order-cart')\r\n  },\r\n  [events.ON_CART_ITEM_DETAIL]: ({ data }) => {\r\n    makeEvent('page', ACTION.LINKS, 'details-items')\r\n  },\r\n  [events.ON_CART_ITEM_DELETE]: ({ data }) => {\r\n    sendRemoveFromCart(formatItem(data.item, '', data.restaurant))\r\n    makeEvent('page', ACTION.SEC_CTA, 'delete-item')\r\n  },\r\n  [events.ON_CART_ITEM_INCREASE]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'increase-item-quantity')\r\n  },\r\n  [events.ON_CART_ITEM_DECREASE]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'decrease-item-quantity')\r\n  },\r\n  [events.ON_CART_ADD_COMMENT]: ({ data }) => {\r\n    makeEvent('page', ACTION.LINKS, 'add-global-comment')\r\n  },\r\n  [events.ON_CART_SUBMIT]: ({ data }) => {\r\n    const formattedItems = data.items.map((item) => formatItem(item, '', data.restaurant))\r\n    sendCartSubmitted(formattedItems, 2)\r\n    makeEvent('page', ACTION.CTA, 'main-order-final')\r\n  },\r\n  [events.ON_REGISTER_SUBMIT_REGISTER]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, 'main-signup')\r\n  },\r\n  [events.ON_LOGIN_SUBMIT_LOGIN]: ({ data }) => {\r\n    sendLogin(3)\r\n    makeEvent('page', ACTION.CTA, 'main-login')\r\n  },\r\n  [events.ON_FORGOT_PASSWORD_SUBMIT]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, 'main-reset-password')\r\n  },\r\n  [events.ON_PROFILE_SUBMIT]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, 'main-update-profile')\r\n  },\r\n  [events.ON_DELIVERY_ADDRESS_ADD_ADDRESS]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'add-address')\r\n  },\r\n  [events.ON_DELIVERY_ADDRESS_ADD_GEOLOCATION]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'add-geolocation')\r\n  },\r\n  [events.ON_DELIVERY_ADDRESS_EDIT_ADDRESS]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'edit-address')\r\n  },\r\n  [events.ON_DELIVERY_ADDRESS_EDIT_GEOLOCATION]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'edit-geolocation')\r\n  },\r\n  [events.ON_DELIVERY_ADDRESS_DELETE_ADDRESS]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'delete-address')\r\n  },\r\n  [events.ON_DELIVERY_ADDRESS_CONFIRM]: ({ data }) => {\r\n    sendAddDeliveryInfo([], 4)\r\n    makeEvent('page', ACTION.CTA, 'main-validate-address')\r\n  },\r\n  [events.ON_PAYMENT_MODE_SELECT]: ({ data }) => {\r\n    sendAddPaymentInfo([], data.paymentMode, 4 )\r\n    makeEvent('page', ACTION.SEC_CTA, 'payment-mode-select', data.paymentMode)\r\n  },\r\n  [events.ON_PAYMENT_SUBMIT]: ({ data }) => {\r\n    const formattedItems = data.items.map((item) => formatItem(item, '', data.restaurant))\r\n    sendPaymentSubmitted(formattedItems, 5)\r\n    makeEvent('page', ACTION.CTA, 'main-pay')\r\n  },\r\n  [EventManager.Events.ON_PAYMENT_SUCCESS]: ({ data }) => {\r\n    const formattedItems = concat(data.order.products, data.order.menus).map(\r\n      (item) => item && formatItem(item, '', data.restaurant)\r\n    )\r\n    sendPaymentSucceeded(\r\n      formattedItems,\r\n      data.order.id,\r\n      data.order.totalPrice.toFixed(2),\r\n      data.order.currency\r\n    )\r\n    makeEvent('page', ACTION.CTA, 'payment-success')\r\n  },\r\n  [events.ON_CONFIRM_ORDER_DETAIL]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'order-details')\r\n  },\r\n  [events.ON_CONFIRM_CALLBACK]: ({ data }) => {\r\n    makeEvent('page', ACTION.CTA, 'callback')\r\n  },\r\n  [events.ON_SET_DUE_DATE_ASAP]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'asap', data.mode)\r\n  },\r\n  [events.ON_SET_DUE_DATE_SLOT]: ({ data }) => {\r\n    makeEvent('page', ACTION.SEC_CTA, 'time-slot', data.mode)\r\n  },\r\n  [events.ON_CHANGE_SLOT]: ({ data }) => {\r\n    makeEvent('side', ACTION.SEC_CTA, 'change-slot', data.mode)\r\n  },\r\n  [events.ON_CHANGE_TABLE]: ({ data }) => {\r\n    makeEvent('side', ACTION.SEC_CTA, 'change-table', data.mode)\r\n  },\r\n}\r\n\r\nconst EventsConfig = {\r\n  events,\r\n  listeners,\r\n}\r\n\r\nexport default EventsConfig\r\n","import createForm from 'pmt-modules/form/createForm'\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nimport Diet from '../../constants/Diet'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {}\r\n\r\nconst defaultData = {\r\n  allergens: [],\r\n  diet: Diet.NONE,\r\n}\r\n\r\nexport default createForm(FormType.USER_PROFILE_DIETARY, {}, defaultData, devData)\r\n","import createForm from 'pmt-modules/form/createForm'\r\nimport { notEmpty } from 'pmt-modules/form/validation'\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {}\r\n\r\nconst defaultData = {\r\n  street: null,\r\n  postCode: null,\r\n  city: null,\r\n  country: null,\r\n  complement: null,\r\n  name: null,\r\n}\r\n\r\n// TODO: I18n\r\nconst validationRules = {\r\n  street: [[notEmpty, 'global.addUserAddress.validation.street']],\r\n  postCode: [[notEmpty, 'global.addUserAddress.validation.postCode']],\r\n  city: [[notEmpty, 'global.addUserAddress.validation.city']],\r\n  country: [[notEmpty, 'global.addUserAddress.validation.country']],\r\n  name: [[notEmpty, 'global.addUserAddress.validation.name']],\r\n}\r\n\r\nexport default createForm(FormType.ADD_USER_ADDRESS, validationRules, defaultData, devData, {})\r\n","import createForm from 'pmt-modules/form/createForm'\r\nimport { notEmpty } from 'pmt-modules/form/validation'\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {}\r\n\r\nconst defaultData = {\r\n  street: null,\r\n  postCode: null,\r\n  city: null,\r\n  country: null,\r\n  complement: null,\r\n  name: null,\r\n}\r\n\r\n// TODO: I18n\r\nconst validationRules = {\r\n  street: [[notEmpty, 'global.addUserAddress.validation.street']],\r\n  postCode: [[notEmpty, 'global.addUserAddress.validation.postCode']],\r\n  city: [[notEmpty, 'global.addUserAddress.validation.city']],\r\n  country: [[notEmpty, 'global.addUserAddress.validation.country']],\r\n  name: [[notEmpty, 'global.addUserAddress.validation.name']],\r\n}\r\n\r\nexport default createForm(FormType.EDIT_USER_ADDRESS, validationRules, defaultData, devData, {})\r\n","import forgotPassword from 'pmt-modules/forgotPassword/forms/forgotPassword'\r\nimport login from 'pmt-modules/auth/forms/login'\r\nimport register from 'pmt-modules/registration/forms/register'\r\nimport incognito from 'pmt-modules/registration/forms/incognito'\r\nimport userLight from 'pmt-modules/registration/forms/userLight'\r\nimport userProfile from 'pmt-modules/user/forms/profile'\r\nimport userProfileDietary from 'pmt-modules/user/forms/profile/dietary'\r\nimport addUserAddress from 'pmt-modules/userAddress/forms/add'\r\nimport editUserAddress from 'pmt-modules/userAddress/forms/edit'\r\n\r\nconst forms = [\r\n  forgotPassword,\r\n  login,\r\n  register,\r\n  userLight,\r\n  incognito,\r\n  userProfile,\r\n  addUserAddress,\r\n  editUserAddress,\r\n  userProfileDietary,\r\n]\r\n\r\nexport default forms\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { getApiUrl, getApiConsumer } from 'pmt-modules/environment'\r\nimport { getAppTokenCodeOnUrl } from 'pmt-modules/appSecurity'\r\n\r\nconst getApiManagerOptions = state => ({\r\n  apiUrl: getApiUrl(),\r\n\r\n  headersMiddleware: () => {\r\n    const headers = {\r\n      'api-consumer': getApiConsumer(),\r\n    }\r\n\r\n    //\r\n    // Add the `at` header that contains the app token code if exists\r\n    //\r\n    const appTokenCode = getAppTokenCodeOnUrl()\r\n    if (!isEmpty(appTokenCode)) {\r\n      headers.at = appTokenCode\r\n    }\r\n\r\n    return headers\r\n  },\r\n})\r\n\r\nexport default getApiManagerOptions\r\n","// import manually the language files we need\r\n// TODO: do this dynamically\r\nimport 'moment/locale/fr'\r\nimport 'moment/locale/de'\r\nimport 'moment/locale/it'\r\nimport 'moment/locale/es'\r\n\r\nexport default {\r\n  defaultLocale: 'en',\r\n  locales: ['fr', 'en', 'de', 'it', 'es'],\r\n  calendar: false, // true if we use flatpickr\r\n}\r\n","import { AsyncPaymentMiddlewares } from 'pmt-modules/asyncPayment'\r\nimport { appConfigMiddlewares } from 'pmt-modules/appConfig'\r\nimport { appSecurityMiddlewares } from 'pmt-modules/appSecurity'\r\nimport { authMiddlewares } from 'pmt-modules/auth'\r\nimport { cartDiffMiddlewares } from 'pmt-modules/cartDiff'\r\nimport { cartMiddlewares } from 'pmt-modules/cart'\r\nimport { dialogMiddlewares } from 'pmt-modules/dialog'\r\nimport { orderFrontMiddlewares } from 'pmt-modules/orderFront'\r\nimport { orderMenuMiddlewares } from 'pmt-modules/orderMenu'\r\nimport { orderPluginMiddlewares } from 'pmt-modules/orderPlugin'\r\nimport { orderPreviewMiddlewares } from 'pmt-modules/orderPreview'\r\nimport { orderSettingsMiddlewares } from 'pmt-modules/orderSettings'\r\nimport { registrationMiddlewares } from 'pmt-modules/registration'\r\nimport { upsellingMiddlewares } from 'pmt-modules/upselling'\r\nimport { voucherMiddlewares } from 'pmt-modules/payment/voucher'\r\nimport { customTextsMiddlewares } from 'pmt-modules/customTexts'\r\n\r\nexport default [\r\n  ...AsyncPaymentMiddlewares,\r\n  ...appConfigMiddlewares,\r\n  ...appSecurityMiddlewares,\r\n  ...authMiddlewares,\r\n  ...cartDiffMiddlewares,\r\n  ...cartMiddlewares,\r\n  ...customTextsMiddlewares,\r\n  ...dialogMiddlewares,\r\n  ...orderFrontMiddlewares,\r\n  ...orderMenuMiddlewares,\r\n  ...orderPluginMiddlewares,\r\n  ...orderPreviewMiddlewares,\r\n  ...orderSettingsMiddlewares,\r\n  ...registrationMiddlewares,\r\n  ...upsellingMiddlewares,\r\n  ...voucherMiddlewares,\r\n]\r\n","import { createMuiTheme, dark, light, getLuminance, darken, getContrastRatio } from 'pmt-ui/styles'\r\n\r\nimport grey from 'pmt-ui/colors/grey'\r\nimport blue from 'pmt-ui/colors/blue'\r\nimport green from 'pmt-ui/colors/green'\r\nimport yellow from 'pmt-ui/colors/yellow'\r\nimport red from 'pmt-ui/colors/red'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nconst WCAG_AA_NORMAL_TEXT_RATIO = 4.5\r\n\r\nexport const getAccessibleTextColor = (\r\n  color,\r\n  background = '#fff',\r\n  minRatio = WCAG_AA_NORMAL_TEXT_RATIO\r\n) => {\r\n  let result = color\r\n  let ratio = getContrastRatio(result, background)\r\n  let coefficient = 0\r\n\r\n  // progressively darken the color until it reaches the minimum contrast ratio\r\n  // (max coefficient of 0.95 to avoid ever fully reaching black)\r\n  while (ratio < minRatio && coefficient < 0.95) {\r\n    coefficient += 0.05\r\n    result = darken(color, coefficient)\r\n    ratio = getContrastRatio(result, background)\r\n  }\r\n\r\n  return result\r\n}\r\n\r\nconst PMTColors = {\r\n  grey100: grey[100],\r\n  grey300: grey[300],\r\n  grey500: grey[500],\r\n  grey600: grey[600],\r\n  grey700: grey[700],\r\n  blue800: blue[800],\r\n  green500: green[500],\r\n  green800: green[800],\r\n  yellow900: yellow[900],\r\n  red800: red[800],\r\n  red900: red[900],\r\n  white: '#fff',\r\n  greyBackground: '#efeff4',\r\n  grey91: '#919ca7',\r\n  grey97: '#979797',\r\n  darkGrey: '#262626',\r\n  // https://paymytable.atlassian.net/browse/PP-158\r\n  itemPlaceholderBackground: '#EFEFF4',\r\n  itemPlaceholderBackgroundSecondary: 'rgba(239, 239, 244, 0.4)',\r\n}\r\n\r\nconst getPMTColor = color => PMTColors[color]\r\n\r\nconst getPMTColors = () => PMTColors\r\n\r\n// Restaurant brand colors (may be overridden per api consumer/restaurant) - made accessible\r\n// as text color on white/light backgrounds (see getAccessibleTextColor above).\r\nconst rawPrimaryColor = '#387651' //'#85a60f'\r\nconst rawSecondaryColor = '#00A695'\r\n\r\nconst accessiblePrimaryColor = getAccessibleTextColor(rawPrimaryColor)\r\nconst accessibleSecondaryColor = getAccessibleTextColor(rawSecondaryColor)\r\n\r\nconst muiTheme = createMuiTheme({\r\n  palette: {\r\n    type: getQueryParam('theme', window.location.uri) || 'light', // Switching the dark mode on is a single property value change.\r\n    primary: {\r\n      main: accessiblePrimaryColor,\r\n    },\r\n    secondary: {\r\n      main: accessibleSecondaryColor,\r\n    },\r\n    contrastThreshold: 0.5,\r\n    text: {\r\n      primary: getPMTColor('darkGrey'),\r\n    },\r\n  },\r\n  shape: {\r\n    borderRadius: 8,\r\n    borderRadiusLg: 16,\r\n    borderRadiusXl: 24,\r\n  },\r\n  pmt: {\r\n    appConfig: {}, // can be overwritten by api consumer theme settings\r\n    colors: getPMTColors(),\r\n    status: {\r\n      info: getPMTColor('blue800'),\r\n      error: getPMTColor('red800'),\r\n      warning: getPMTColor('yellow900'),\r\n      inactive: getPMTColor('grey500'),\r\n      valid: getPMTColor('green800'),\r\n    },\r\n    alert: {\r\n      error: getPMTColor('red800'),\r\n      warning: getPMTColor('yellow900'),\r\n      info: getPMTColor('blue800'),\r\n      success: getPMTColor('green800'),\r\n    },\r\n    // Modern design tokens\r\n    modern: {\r\n      surface: {\r\n        glass: {\r\n          background: 'rgba(255, 255, 255, 0.72)',\r\n          backdropFilter: 'blur(12px)',\r\n          border: '1px solid rgba(255, 255, 255, 0.3)',\r\n        },\r\n        elevated: {\r\n          background: '#ffffff',\r\n          boxShadow: '0 4px 24px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04)',\r\n        },\r\n        subtle: {\r\n          background: '#f8faf9',\r\n        },\r\n      },\r\n      gradient: {\r\n        success: 'linear-gradient(135deg, #e8f5e9 0%, #f1f8e9 100%)',\r\n        page: 'linear-gradient(180deg, #f5f9f6 0%, #ffffff 100%)',\r\n      },\r\n      shadows: {\r\n        sm: '0 1px 3px rgba(0, 0, 0, 0.04)',\r\n        md: '0 4px 16px rgba(0, 0, 0, 0.06)',\r\n        lg: '0 8px 32px rgba(0, 0, 0, 0.08)',\r\n        focus: '0 0 0 3px rgba(56, 118, 81, 0.2)',\r\n      },\r\n      transitions: {\r\n        smooth: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\r\n        bounce: 'all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1)',\r\n      },\r\n      spacing: {\r\n        section: 32,\r\n        card: 24,\r\n      },\r\n    },\r\n    circularProgress: {\r\n      width: 50,\r\n    },\r\n    overlay: {\r\n      background: 'rgba(255, 255, 255, .6)',\r\n      backgroundBlack: 'rgba(0, 0, 0, .7)',\r\n    },\r\n    loading: {\r\n      color: getPMTColor('grey500'),\r\n    },\r\n    header: {\r\n      mobile: {\r\n        height: 48,\r\n        verticalPadding: 8,\r\n        horizontalPadding: 8,\r\n        contentHeight: 40, // height - verticalPadding\r\n      },\r\n    },\r\n    // a set of css mixins\r\n    mixins: {\r\n      textEllipsis: {\r\n        whiteSpace: 'nowrap',\r\n        overflow: 'hidden',\r\n        textOverflow: 'ellipsis',\r\n      },\r\n    },\r\n    // https://material.io/guidelines/components/buttons-floating-action-button.html#buttons-floating-action-button-floating-action-button\r\n    floatingActionButton: {\r\n      fromLeftEdge: {\r\n        default: 24,\r\n        xs: 16,\r\n        sm: 24,\r\n        md: 24,\r\n        lg: 24,\r\n        xl: 24,\r\n      },\r\n      fromBottomEdge: {\r\n        default: 24,\r\n        xs: 16,\r\n        sm: 24,\r\n        md: 24,\r\n        lg: 24,\r\n        xl: 24,\r\n      },\r\n    },\r\n    typography: {\r\n      fonts: {\r\n        '107': {\r\n          style: {\r\n            fontSize: 10,\r\n            fontWeight: 700,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '124': {\r\n          style: {\r\n            fontSize: 12,\r\n            fontWeight: 400,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '127': {\r\n          style: {\r\n            fontSize: 12,\r\n            fontWeight: 700,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '144': {\r\n          style: {\r\n            fontSize: 14,\r\n            fontWeight: 400,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '147': {\r\n          style: {\r\n            fontSize: 14,\r\n            fontWeight: 700,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '164': {\r\n          style: {\r\n            fontSize: 16,\r\n            fontWeight: 400,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '167': {\r\n          style: {\r\n            fontSize: 16,\r\n            fontWeight: 700,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '204': {\r\n          style: {\r\n            fontSize: 20,\r\n            fontWeight: 400,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '207': {\r\n          style: {\r\n            fontSize: 20,\r\n            fontWeight: 700,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '244': {\r\n          style: {\r\n            fontSize: 24,\r\n            fontWeight: 400,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '247': {\r\n          style: {\r\n            fontSize: 24,\r\n            fontWeight: 700,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '284': {\r\n          style: {\r\n            fontSize: 28,\r\n            fontWeight: 400,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '287': {\r\n          style: {\r\n            fontSize: 28,\r\n            fontWeight: 700,\r\n            margin: 0,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n      },\r\n    },\r\n  },\r\n  typography: {\r\n    fontFamily: \"'Lato', sans-serif\",\r\n  },\r\n  overrides: {\r\n    MuiCard: {\r\n      root: {\r\n        borderRadius: 16,\r\n        boxShadow: '0 4px 24px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04)',\r\n        border: '1px solid rgba(0, 0, 0, 0.04)',\r\n        transition: 'box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\r\n      },\r\n    },\r\n    MuiCardContent: {\r\n      root: {\r\n        padding: 24,\r\n        '&:last-child': {\r\n          paddingBottom: 24,\r\n        },\r\n      },\r\n    },\r\n    MuiButton: {\r\n      root: {\r\n        borderRadius: 12,\r\n        textTransform: 'none',\r\n        fontWeight: 600,\r\n        transition: 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',\r\n      },\r\n      contained: {\r\n        boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\r\n        '&:hover': {\r\n          boxShadow: '0 4px 16px rgba(0, 0, 0, 0.15)',\r\n          transform: 'translateY(-1px)',\r\n        },\r\n        '&:active': {\r\n          transform: 'translateY(0)',\r\n        },\r\n      },\r\n      containedPrimary: {\r\n        '&:focus-visible': {\r\n          boxShadow: '0 0 0 3px rgba(56, 118, 81, 0.3)',\r\n        },\r\n      },\r\n    },\r\n\r\n    MuiDialog: {\r\n      paper: {\r\n        borderRadius: 16,\r\n        boxShadow: '0 8px 32px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04)',\r\n        overflow: 'hidden', // ensures rounded corners clip children\r\n      },\r\n    },\r\n\r\n    MuiDialogTitle: {\r\n      root: {\r\n        padding: '20px 24px 12px',\r\n        fontWeight: 600,\r\n      },\r\n    },\r\n\r\n    MuiDialogContent: {\r\n      root: {\r\n        padding: '12px 24px 20px',\r\n      },\r\n    },\r\n\r\n    MuiDialogActions: {\r\n      root: {\r\n        padding: '16px 24px',\r\n        gap: 8,\r\n        justifyContent: 'center',\r\n      },\r\n    },\r\n\r\n  },\r\n  zIndex: {\r\n    stickyButton: 1200,\r\n  },\r\n})\r\n\r\nconst theme = {\r\n  muiTheme,\r\n}\r\n\r\n// https://github.com/callemall/material-ui/issues/8183\r\n// override getContrastText function to have a white color on green buttons\r\n// TODO : check the evolution of the issue above\r\ntheme.muiTheme.palette.getContrastText = color => {\r\n  if (getLuminance(color) <= theme.muiTheme.palette.contrastThreshold) {\r\n    return dark.text.primary\r\n  } else {\r\n    return light.text.primary\r\n  }\r\n}\r\n\r\n// exposed so any component can darken an arbitrary (eg. restaurant-provided) color enough\r\n// to be used as readable text on a light/white background (WCAG AA, 4.5:1 by default)\r\ntheme.muiTheme.palette.getAccessibleTextColor = getAccessibleTextColor\r\n\r\nexport default theme\r\n","//\r\n// https://github.com/prescottprue/react-redux-firebase/\r\n//\r\n// Warning: we use the v2, be carefull with the version of the doc:\r\n// http://docs.react-redux-firebase.com/history/v2.0.0/docs/recipes/upload.html\r\n//\r\n\r\nconst rrfConfig = {\r\n  // http://docs.react-redux-firebase.com/history/v1.5.0/docs/recipes/upload.html\r\n  fileMetadataFactory: uploadRes => {\r\n    // upload response from Firebase's storage upload\r\n    const {\r\n      metadata: { name, fullPath },\r\n    } = uploadRes\r\n    // default factory includes name, fullPath, downloadURL\r\n    return {\r\n      name,\r\n      fullPath,\r\n    }\r\n  },\r\n}\r\n\r\nexport default {\r\n  // for key we use the `ENV` from our config\r\n  PREPROD: {\r\n    // Firebase config\r\n    credentials: {\r\n      apiKey: 'AIzaSyA9op6DM3NoXxvirxtgbxr7HkJazN97K-o',\r\n      authDomain: 'paymytable-eu-preprod.firebaseapp.com',\r\n      projectId: 'paymytable-eu-preprod',\r\n      storageBucket: 'paymytable-eu-preprod-firebase-com',\r\n      messagingSenderId: '517015730789',\r\n      appId: '1:517015730789:web:f130cb8f7023633054a48c',\r\n      databaseURL: 'paymytable-eu-preprod-default-rtdb.europe-west1.firebasedatabase.app',\r\n    },\r\n    //\r\n    rrfConfig,\r\n  },\r\n  PROD: {\r\n    // Firebase config\r\n    credentials: {\r\n      apiKey: 'AIzaSyC0GlY9SiWH-zDZL4AHDZsbZXIp2SNqIIw',\r\n      authDomain: 'paymytable-eu.firebaseapp.com',\r\n      databaseURL: 'https://paymytable-eu-default-rtdb.europe-west1.firebasedatabase.app',\r\n      projectId: 'paymytable-eu',\r\n      storageBucket: 'paymytable-eu-firebase-com',\r\n      messagingSenderId: '177135918636',\r\n      appId: '1:177135918636:web:807ac0e2a3deb3f9f7bb89',\r\n    },\r\n    //\r\n    rrfConfig,\r\n  },\r\n}\r\n","import Application from 'pmt-modules/archi/Application'\r\n\r\nimport appConfig from './config/appConfig'\r\nimport analytics from './config/analytics'\r\nimport devMiddlewares from './config/devMiddlewares'\r\nimport dialogs from './config/dialogs'\r\nimport entities from './config/entities'\r\nimport environment from './config/environment'\r\nimport events from './config/events'\r\nimport forms from './config/forms'\r\nimport getApiManagerOptions from './config/getApiManagerOptions'\r\nimport i18n from './config/i18n'\r\nimport middlewares from './config/middlewares'\r\nimport theme from './config/theme'\r\nimport routingEnum from './config/routingEnum'\r\nimport firebase from './config/firebase'\r\n\r\nimport 'pmt-modules/archi/styles/fontLato.scss'\r\n\r\nconst appOptions = {\r\n  appConfig,\r\n  analytics,\r\n  devMiddlewares,\r\n  dialogs,\r\n  entities,\r\n  environment,\r\n  events,\r\n  forms,\r\n  getApiManagerOptions,\r\n  i18n,\r\n  middlewares,\r\n  theme,\r\n  routingEnum,\r\n  firebase,\r\n}\r\n\r\nApplication(appOptions)\r\n"],"file":"index-Ca-dz1sa.mjs"}