{"version":3,"sources":["Logo.js","App.js","serviceWorker.js","index.js"],"names":["Logo","props","react_default","a","createElement","xmlns","viewBox","version","style","id","transform","points","fill","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontFamily","default_chart_data","name","value","color","cyan","gapi_base","theme","createMuiTheme","palette","primary","light","orange","main","dark","contrastText","to_params","dict","Object","entries","map","_ref","_ref2","slicedToArray","k","v","concat","encodeURIComponent","join","getCalendars","token","fetch","access_token","method","async","then","response","json","data","items","getColors","customizedLabel","cx","cy","x","y","stroke","anchor","dx","dy","textAnchor","ChromiclePieChart","Grid_default","container","spacing","item","xs","lg","className","classes","patternTableWrapper","PieChart","width","height","pieChart","Pie","patternGraphData","outerRadius","deepOrange","label","Tooltip","formatter","toFixed","calendarGraphData","innerRadius","d","Cell","RegexField","_this","this","pitems","regex","push","MenuItem_default","key","FormControl_default","Select_default","onChange","event","target","fieldStyles","noRegex","TextField_default","React","Component","Dashboard","state","open","patterns","page","rowsPerPage","timeRange","Promise","resolver","chrome","identity","getAuthToken","interactive","activePattern","cached","calendars","handleChangePage","_this2","setState","handleChangeRowsPerPage","updatePattern","field","idx","removePattern","splice","i","length","newPattern","cal","toConsumableArray","analyze","startDate","endDate","start","toISOString","end","event_pms","_loop","calId","timeMin","timeMax","events","all","results","cal_results","_loop2","calName","filter","p","RegExp","test","filterPatterns","forEach","status","summary","undefined","duration","Date","dateTime","background","alert","loadPatterns","colors","calendar","cals","_ref3","_ref4","colorId","_this3","_this$state","rows","nDummy","Math","min","styles","root","AppBar_default","position","appBar","Toolbar_default","disableGutters","toolbar","Typography_default","component","variant","noWrap","title","verticalAlign","marginRight","content","appBarSpacer","CssBaseline_default","md","fullWidth","FormGroup_default","gutterBottom","IconButton_default","marginBottom","marginLeft","onClick","AddCircle_default","Table_default","patternTable","TableHead_default","TableRow_default","patternHead","s","TableCell_default","TableBody_default","slice","onMouseOver","onMouseOut","CustomText","elem","fieldNoRegex","fieldRegex","right","display","DeleteOutlined_default","cursor","colSpan","TablePagination_default","rowsPerPageOptions","count","backIconButtonProps","aria-label","nextIconButtonProps","onChangePage","onChangeRowsPerPage","textAlign","react_dates","startDateId","endDateId","onDatesChange","_ref5","focusedInput","onFocusChange","isOutsideRange","buttonSpacer","Button_default","TextField","App_RegexField","any","withStyles","zIndex","drawer","transition","transitions","create","easing","sharp","leavingScreen","flexGrow","sectionTitle","flex","mixins","padding","unit","overflow","overflowX","overflowY","minWidth","margin","fab","Boolean","window","location","hostname","match","ReactDOM","render","App","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"iuBACeA,GAAA,SAACC,GAAD,OACbC,EAAAC,EAAAC,cAAA,OACGC,MAAM,6BACNC,QAAQ,0BACRC,QAAQ,MACRC,MAAOP,EAAMO,OACdN,EAAAC,EAAAC,cAAA,KAAGK,GAAG,MACHC,UAAU,gCACXR,EAAAC,EAAAC,cAAA,KAAGK,GAAG,OACJP,EAAAC,EAAAC,cAAA,KACGK,GAAG,OACJP,EAAAC,EAAAC,cAAA,WACGK,GAAG,WACHE,OAAO,mGACPH,MAAO,CAACI,KAAM,aACjBV,EAAAC,EAAAC,cAAA,KACGK,GAAG,MACHC,UAAU,kCACXR,EAAAC,EAAAC,cAAA,QACGK,GAAG,QACFD,MAAO,CAACK,UAAU,SACdC,YAAY,SACZC,WAAW,SACXC,YAAY,SACZC,SAAS,GACTC,WAAW,8BACXN,KAAK,WACVF,UAAU,2BATb,YCgBNS,GAAqB,CAAC,CAACC,KAAM,OAAQC,MAAO,GAAIC,MAAOC,IAAK,MACtC,CAACH,KAAM,SAAUC,MAAO,GAAIC,MAAOC,IAAK,OAE9DC,GAAY,yCAEZC,GAAQC,yBAAe,CACzBC,QAAS,CACLC,QAAS,CACLC,MAAOC,IAAO,KACdC,KAAMD,IAAO,KACbE,KAAMF,IAAO,KACbG,aAAc,WAO1B,SAASC,GAAUC,GACf,OAAOC,OAAOC,QAAQF,GAAMG,IAAI,SAAAC,GAAA,IAAAC,EAAAJ,OAAAK,EAAA,EAAAL,CAAAG,EAAA,GAAEG,EAAFF,EAAA,GAAKG,EAALH,EAAA,YAAAI,OAAeC,mBAAmBH,GAAlC,KAAAE,OAAwCC,mBAAmBF,MAAMG,KAAK,KAS1G,SAASC,GAAaC,GAClB,OAAOC,MAAMzB,GAAY,0BAA4BU,GAAU,CAACgB,aAAcF,IACtE,CAAEG,OAAQ,MAAOC,OAAO,IAC3BC,KAAK,SAAAC,GAAQ,OAAIA,EAASC,SAC1BF,KAAK,SAAAG,GAAI,OAAIA,EAAKC,QAa3B,SAASC,GAAUV,GACf,OAAOC,MAAMzB,GAAY,WAAaU,GAAU,CAACgB,aAAcF,IAAS,CAAEG,OAAQ,MAAOC,OAAO,IAC3FC,KAAK,SAAAC,GAAQ,OAAIA,EAASC,SA0DnC,SAASI,GAAgB1D,GAAO,IACrB2D,EAA2C3D,EAA3C2D,GAAIC,EAAuC5D,EAAvC4D,GAAIC,EAAmC7D,EAAnC6D,EAAGC,EAAgC9D,EAAhC8D,EAAWnD,GAAqBX,EAA7B+D,OAA6B/D,EAArBW,MAAMQ,EAAenB,EAAfmB,KAC/B6C,GAD8ChE,EAAToB,MAC5B,UAET6C,EAAK,EACLC,EAAK,EAeT,OAdIL,EAAIF,EAHI,GAIRM,GAAM,EACND,EAAS,OACFH,EAAIF,EANH,IAORM,EAAK,EACLD,EAAS,SAGTF,EAAIF,EAXI,EAYRM,GAAM,EACCJ,EAAIF,EAbH,IAcRM,EAAK,IAGDjE,EAAAC,EAAAC,cAAA,QAAM0D,EAAGA,EAAGC,EAAGA,EAAGG,GAAIA,EAAIC,GAAIA,EAAIvD,KAAMA,EAAMwD,WAAYH,GAA1D,GAAArB,OAAsExB,IAGlF,SAASiD,GAAkBpE,GACvB,OACAC,EAAAC,EAAAC,cAACkE,EAAAnE,EAAD,CAAMoE,WAAS,EAACC,QAAS,GACvBtE,EAAAC,EAAAC,cAACkE,EAAAnE,EAAD,CAAMsE,MAAI,EAACC,GAAI,GAAIC,GAAI,GACrBzE,EAAAC,EAAAC,cAAA,OAAKwE,UAAW3E,EAAM4E,QAAQC,qBAC9B5E,EAAAC,EAAAC,cAAC2E,GAAA,EAAD,CAAUC,MAAO,IAAKC,OAAQ,IAAKL,UAAW3E,EAAM4E,QAAQK,UAC1DhF,EAAAC,EAAAC,cAAC+E,GAAA,EAAD,CAAK3B,KAAMvD,EAAMmF,iBACZxB,GAAI,IACJC,GAAI,IACJwB,YAAa,GACbzE,KAAM0E,IAAW,KACjBC,MAAO5B,KACZzD,EAAAC,EAAAC,cAACoF,GAAA,EAAD,CAASC,UAAW,SAACpE,GAAD,SAAAuB,OAAcvB,EAAMqE,QAAQ,GAA5B,aAIxBxF,EAAAC,EAAAC,cAACkE,EAAAnE,EAAD,CAAMsE,MAAI,EAACC,GAAI,GAAIC,GAAI,GACrBzE,EAAAC,EAAAC,cAAA,OAAKwE,UAAW3E,EAAM4E,QAAQC,qBAC9B5E,EAAAC,EAAAC,cAAC2E,GAAA,EAAD,CAAUC,MAAO,IAAKC,OAAQ,IAAKL,UAAW3E,EAAM4E,QAAQK,UAC1DhF,EAAAC,EAAAC,cAAC+E,GAAA,EAAD,CAAK3B,KAAMvD,EAAM0F,kBACZ/B,GAAI,IACJC,GAAI,IACJ+B,YAAa,GACbP,YAAa,GACbzE,KAAMW,IAAK,KACXgE,MAAO5B,IACT1D,EAAM0F,kBAAkBrD,IAAI,SAAAuD,GAAC,OAAI3F,EAAAC,EAAAC,cAAC0F,GAAA,EAAD,CAAMlF,KAAMiF,EAAEvE,WAElDpB,EAAAC,EAAAC,cAACoF,GAAA,EAAD,CAASC,UAAW,SAACpE,GAAD,SAAAuB,OAAcvB,EAAMqE,QAAQ,GAA5B,kBAYxBK,oLACO,IAAAC,EAAAC,KACDC,EAASD,KAAKhG,MAAMwD,MACpBA,EAAQ,GAEZ,IAAK,IAAIhD,KADTyF,EAAO,GAAO,CAACC,OAAO,EAAMZ,MAAO,KAAM9E,GAAI,KAC9ByF,EAEXzC,EAAM2C,KACFlG,EAAAC,EAAAC,cAACiG,GAAAlG,EAAD,CAAUmG,IAAK7F,EAAIY,MAAOZ,GACD,MAApByF,EAAOzF,GAAI8E,MAAgBW,EAAOzF,GAAI8E,MACnCrF,EAAAC,EAAAC,cAAA,QAAMI,MAAO,CAACc,MAAOG,GAAME,QAAQC,QAAQI,OAA3C,YAGhB,OACI9B,EAAAC,EAAAC,cAACmG,EAAApG,EAAD,KACAD,EAAAC,EAAAC,cAAA,YACAF,EAAAC,EAAAC,cAACoG,GAAArG,EAAD,CACIkB,MAAO4E,KAAKhG,MAAMoB,MAAMZ,GACxBgG,SAAU,SAAAC,GACN,IAAIrF,EAGIA,EAFgC,MAApC6E,EAAOQ,EAAMC,OAAOtF,OAAOkE,MACvBS,EAAK/F,MAAMoB,MAAM8E,MACT,CAACA,OAAO,EAAM9E,MAAO2E,EAAK/F,MAAMoB,MAAMA,MAAOkE,MAAO,KAAM9E,GAAI,KAE9D,CAAC0F,OAAO,EAAM9E,MAAK,IAAAuB,OAAMoD,EAAK/F,MAAMoB,MAAMA,MAAvB,KAAiCkE,MAAO,KAAM9E,GAAI,KAEzEyF,EAAOQ,EAAMC,OAAOtF,OAEhC2E,EAAK/F,MAAMwG,SAAS,CAACE,OAAQ,CAACtF,YAElCuD,UAAWqB,KAAKhG,MAAMoB,MAAM8E,MACpBF,KAAKhG,MAAM2G,YAAYT,MACvBF,KAAKhG,MAAM2G,YAAYC,SAAUpD,GAClB,MAA1BwC,KAAKhG,MAAMoB,MAAMkE,OACdrF,EAAAC,EAAAC,cAAC0G,EAAA3G,EAAD,CACCkB,MAAO4E,KAAKhG,MAAMoB,MAAMA,MACxBoF,SAAU,SAAAC,GAAK,OACZV,EAAK/F,MAAMwG,SAAS,CAACE,OAAQ,CAAEtF,MAAO,CAAC8E,OAAO,EAAM9E,MAAOqF,EAAMC,OAAOtF,MAAOkE,MAAO,KAAM9E,GAAI,oBArC3FsG,IAAMC,eA0EzBC,8MACFC,MAAQ,CACJC,MAAM,EACNC,SAAU,GACVC,KAAM,EACNC,YAAa,EACbC,UAAW,KACXvE,MAlOG,IAAIwE,QAAQ,SAAAC,GAAQ,OACvBC,OAAOC,SAASC,aACZ,CAACC,aAAa,GAAO,SAAA7E,GAAK,OAAIyE,EAASzE,OAiO3CoC,iBAAkBjE,GAClBwE,kBAAmBxE,GACnB2G,cAAe,QAGnBC,OAAS,CACLC,UAAW,MAQfC,iBAAmB,SAACvB,EAAOW,GACvBa,EAAKC,SAAS,CAAEd,YAGpBe,wBAA0B,SAAA1B,GACtBwB,EAAKC,SAAS,CAAEb,YAAaZ,EAAMC,OAAOtF,WAG9CgH,cAAgB,SAACC,EAAOC,EAAKlH,GACzB,IAAI+F,EAAWc,EAAKhB,MAAME,SAC1BA,EAASmB,GAAKD,GAASjH,EACvB6G,EAAKC,SAAS,CAAEf,gBAGpBoB,cAAgB,SAAAD,GACZ,IAAInB,EAAWc,EAAKhB,MAAME,SAC1BA,EAASqB,OAAOF,EAAK,GACrB,IAAK,IAAIG,EAAI,EAAGA,EAAItB,EAASuB,OAAQD,IACjCtB,EAASsB,GAAGH,IAAMG,EACtBR,EAAKC,SAAS,CAAEf,gBAGpBwB,WAAa,WAKT,IAJA,IAAIxB,EAAQ,CAAI,CAAChG,KAAM,GACnByH,IAAK,CAAE1C,OAAO,EAAMZ,MAAO,KAAM9E,GAAI,KACrCiG,MAAO,CAAEP,OAAO,EAAM9E,MAAO,KAAMkE,MAAO,MAAO9E,GAAI,OACrD8H,IAAK,IAHG3F,OAAAR,OAAA0G,EAAA,EAAA1G,CAGK8F,EAAKhB,MAAME,WACnBsB,EAAI,EAAGA,EAAItB,EAASuB,OAAQD,IACjCtB,EAASsB,GAAGH,IAAMG,EACzBR,EAAKC,SAAS,CAAEf,gBAGjB2B,QAAU,WACN,GAAMb,EAAKhB,MAAM8B,WAAad,EAAKhB,MAAM+B,QAAzC,CAIA,IAAIC,EAAQhB,EAAKhB,MAAM8B,UAAUG,cAC7BC,EAAMlB,EAAKhB,MAAM+B,QAAQE,cACzBE,EAAY,GAPJC,EAAA,SAQH7I,GA7QjB,IAAyB8I,EAAOC,EAASC,EA8Q7BJ,EAAUjD,KACN8B,EAAKhB,MAAMlE,MACVK,MAhRQkG,EAgRa9I,EAhRN+I,EAgRUN,EAhRDO,EAgRQL,EA/QtC,SAAApG,GAAK,OAAIC,MAAMzB,GAAY,cAAgB+H,EAAQ,WAAarH,GAAU,CAC7EgB,aAAcF,EACdwG,UACAC,YACA,CAAEtG,OAAQ,MAAOC,OAAO,IACvBC,KAAK,SAAAC,GAAQ,OAAIA,EAASC,SAC1BF,KAAK,SAAAG,GAAI,OAAIA,EAAKC,WA0QVJ,KAAK,SAAAI,GAAK,OAAIyE,EAAKH,OAAOC,UAAUvH,GAAIiJ,OAASjG,MAJ1D,IAAK,IAAIhD,KAAMyH,EAAKH,OAAOC,UAAWsB,EAA7B7I,GAOT+G,QAAQmC,IAAIN,GAAWhG,KAAK,WAGxB,IAFA,IAAIuG,EAAU,GACVC,EAAc,GACTnB,EAAI,EAAGA,EAAIR,EAAKhB,MAAME,SAASuB,OAAQD,IAC5CkB,EAAQlB,GAAK,EAJa,IAAAoB,EAAA,SAKrBrJ,GACL,IAAI2G,EA3QpB,SAAwBA,EAAU2C,GAC9B,OAAO3C,EAAS4C,OAAO,SAAAC,GAEnB,OADS,IAAIC,OAAOD,EAAEpB,IAAI1C,MAAQ8D,EAAEpB,IAAIxH,MAApB,IAAAuB,OAAgCqH,EAAEpB,IAAIxH,MAAtC,MACV8I,KAAKJ,KAwQQK,CAAelC,EAAKhB,MAAME,SAAUc,EAAKH,OAAOC,UAAUvH,GAAIW,MACxEkB,IAAI,SAAA2H,GAAO,MAAO,CAAE9D,MAAO,IAAI+D,OAAOD,EAAEvD,MAAMrF,OAAQkH,IAAK0B,EAAE1B,OAClE,IAAKL,EAAKH,OAAOC,UAAUvH,GAAIiJ,OAAQ,iBACvCxB,EAAKH,OAAOC,UAAUvH,GAAIiJ,OAAOW,QAAQ,SAAA3D,GAChB,cAAjBA,EAAM4D,QACVlD,EAASiD,QAAQ,SAAAJ,GACb,GAAKA,EAAE9D,MAAMgE,KAAKzD,EAAM6D,SAAxB,MACwBC,IAApBX,EAAYpJ,KACZoJ,EAAYpJ,GAAM,GAEtB,IAAIgK,GAAY,IAAIC,KAAKhE,EAAM0C,IAAIuB,UAAY,IAAID,KAAKhE,EAAMwC,MAAMyB,WAAa,IACjFf,EAAQK,EAAE1B,MAAQkC,EAClBZ,EAAYpJ,IAAOgK,QAb/B,IAAK,IAAIhK,KAAMyH,EAAKH,OAAOC,UAAW8B,EAA7BrJ,GAmBT,IAFA,IAAI2E,EAAmB,GACnBO,EAAoB,GACf+C,EAAI,EAAGA,EAAIR,EAAKhB,MAAME,SAASuB,OAAQD,IAC5CtD,EAAiBgB,KAAK,CAAEhF,KAAM8G,EAAKhB,MAAME,SAASsB,GAAGtH,KAAMC,MAAOuI,EAAQlB,GAAK,KAEnF,IAAK,IAAIjI,KAAMoJ,EACXlE,EAAkBS,KAAK,CACnBhF,KAAM8G,EAAKH,OAAOC,UAAUvH,GAAIW,KAChCC,MAAQwI,EAAYpJ,GAAM,GAC1Ba,MAAO4G,EAAKH,OAAOC,UAAUvH,GAAIa,MAAMsJ,aAE/C1C,EAAKC,SAAS,CAAE/C,mBAAkBO,6BA9ClCkF,MAAM,wCAkDdC,aAAe,WACX,IAAI9H,EAAQkF,EAAKhB,MAAMlE,MACnB+H,EAAS/H,EAAMK,KAAKK,IAAWL,KAAK,SAAA/B,GACpC,OAAOA,EAAM0J,WAEbC,EAAOjI,EAAMK,KAAKN,IACtByE,QAAQmC,IAAI,CAACoB,EAAQE,IAAO5H,KAAK,SAAA6H,GAAqB,IAAAC,EAAA/I,OAAAK,EAAA,EAAAL,CAAA8I,EAAA,GAAnBH,EAAmBI,EAAA,GAAX1H,EAAW0H,EAAA,GAClD1H,EAAM4G,QAAQ,SAAA5F,GACVyD,EAAKH,OAAOC,UAAUvD,EAAKhE,IAAM,CAC7BW,KAAMqD,EAAK8F,QACXb,OAAQ,GACRpI,MAAOyJ,EAAOtG,EAAK2G,YAG3BlD,EAAKC,SAAS,CAAEf,SAAU3D,EAAMnB,IAAI,SAACmC,EAAM8D,GACvC,MAAO,CAAEnH,KAAMqD,EAAK8F,QACX1B,IAAK,CAAE1C,OAAO,EAAO9E,MAAOoD,EAAK8F,QAAShF,MAAOd,EAAK8F,QAAS9J,GAAIgE,EAAKhE,IACxEiG,MAAO,CAAEP,OAAO,EAAM9E,MAAO,KAAMkE,MAAO,MAAO9E,GAAI,OACrD8H,sFAKZ,IAAA8C,EAAApF,KACCpB,EAAYoB,KAAKhG,MAAjB4E,QADDyG,EAEuCrF,KAAKiB,MAA3CE,EAFDkE,EAEClE,SAAgBE,GAFjBgE,EAEWC,KAFXD,EAEiBhE,aAAaD,EAF9BiE,EAE8BjE,KAC/BmE,EAASlE,EAAcmE,KAAKC,IAAIpE,EAAaF,EAASuB,OAAStB,EAAOC,GAE5E,OACApH,EAAAC,EAAAC,cAACuL,EAAA,iBAAD,CAAkBlK,MAAOA,IACvBvB,EAAAC,EAAAC,cAAA,OAAKwE,UAAWC,EAAQ+G,MACtB1L,EAAAC,EAAAC,cAACyL,EAAA1L,EAAD,CACC2L,SAAS,WACTlH,UAAWC,EAAQkH,QAClB7L,EAAAC,EAAAC,cAAC4L,EAAA7L,EAAD,CAAS8L,gBAAiBhG,KAAKiB,MAAMC,KAAMvC,UAAWC,EAAQqH,SAC5DhM,EAAAC,EAAAC,cAAC+L,EAAAhM,EAAD,CAAYiM,UAAU,KAAKC,QAAQ,KAAK/K,MAAM,UAAUgL,QAAM,EAAC1H,UAAWC,EAAQ0H,OAChFrM,EAAAC,EAAAC,cAACJ,GAAD,CAAMQ,MAAO,CAACwE,MAAO,MAAOwH,cAAe,SAAUC,YAAa,WADpE,eAKJvM,EAAAC,EAAAC,cAAA,QAAMwE,UAAWC,EAAQ6H,SACvBxM,EAAAC,EAAAC,cAAA,OAAKwE,UAAWC,EAAQ8H,eACtBzM,EAAAC,EAAAC,cAACkE,EAAAnE,EAAD,CAAMoE,WAAS,EAAEC,QAAS,IAC1BtE,EAAAC,EAAAC,cAACwM,EAAAzM,EAAD,MACAD,EAAAC,EAAAC,cAACkE,EAAAnE,EAAD,CAAMsE,MAAI,EAACoI,GAAI,EAAGnI,GAAI,IACpBxE,EAAAC,EAAAC,cAACmG,EAAApG,EAAD,CAAa2M,WAAW,GACtB5M,EAAAC,EAAAC,cAAC2M,EAAA5M,EAAD,KACED,EAAAC,EAAAC,cAAC+L,EAAAhM,EAAD,CAAYkM,QAAQ,KAAKD,UAAU,KAAKY,cAAY,GAApD,iBAEE9M,EAAAC,EAAAC,cAAC6M,GAAA9M,EAAD,CACCK,MAAO,CAAC0M,aAAc,SAAUC,WAAY,SAC5CC,QAAS,kBAAM/B,EAAKzC,eAAc1I,EAAAC,EAAAC,cAACiN,GAAAlN,EAAD,QAErCD,EAAAC,EAAAC,cAAA,OAAKwE,UAAWC,EAAQC,qBACxB5E,EAAAC,EAAAC,cAACkN,EAAAnN,EAAD,CAAOyE,UAAWC,EAAQ0I,cACxBrN,EAAAC,EAAAC,cAACoN,EAAArN,EAAD,KACED,EAAAC,EAAAC,cAACqN,EAAAtN,EAAD,KAAW8G,EAAUyG,YAAYpL,IAAI,SAAAqL,GAAC,OAAKzN,EAAAC,EAAAC,cAACwN,EAAAzN,EAAD,KAAYwN,EAAEpI,WAE3DrF,EAAAC,EAAAC,cAACyN,EAAA1N,EAAD,KACGiH,EAAS0G,MAAMzG,EAAOC,GAAcD,EAAO,GAAKC,GAAahF,IAAI,SAAA2H,GAAC,OAC/D/J,EAAAC,EAAAC,cAACqN,EAAAtN,EAAD,CACC4N,YAAa,kBAAM1C,EAAKlD,SAAS,CAAEL,cAAemC,EAAE1B,OACpDyF,WAAY,kBAAM3C,EAAKlD,SAAS,CAAEL,cAAe,SAC7Cb,EAAUyG,YAAYpL,IAAI,SAAAqL,GACvB,IAAMM,EAAaN,EAAEO,KACrB,OACJhO,EAAAC,EAAAC,cAACwN,EAAAzN,EAAD,KACED,EAAAC,EAAAC,cAAC6N,EAAD,CACC5M,MAAO4I,EAAE0D,EAAErF,OACXP,OAAQsD,EAAKtD,OACbnB,YAAa,CAACC,QAAShC,EAAQsJ,aAAchI,MAAOtB,EAAQuJ,YAC5D3H,SAAU,SAAAC,GAAK,OAAI2E,EAAKhD,cAAcsF,EAAErF,MAAO2B,EAAE1B,IAAK7B,EAAMC,OAAOtF,aAEpEnB,EAAAC,EAAAC,cAAA,QAAMI,MAAQ6K,EAAKnE,MAAMY,gBAAkBmC,EAAE1B,KAC7B,CAAEuD,SAAU,WAAYuC,MAAO,EAAGpJ,OAAQ,KAC1C,CAAEqJ,QAAS,SACzBpO,EAAAC,EAAAC,cAACmO,EAAApO,EAAD,CACCK,MAAO,CAAEyE,OAAQ,OAAQuJ,OAAQ,WACjCpB,QAAS,kBAAM/B,EAAK7C,cAAcyB,EAAE1B,YAGhDiD,EAAS,GACNtL,EAAAC,EAAAC,cAACqN,EAAAtN,EAAD,CAAUK,MAAO,CAAEyE,OAAQ,GAAKuG,IAC9BtL,EAAAC,EAAAC,cAACwN,EAAAzN,EAAD,CAAWsO,QAASxH,EAAUyG,YAAY/E,aAKpDzI,EAAAC,EAAAC,cAACsO,EAAAvO,EAAD,CACGwO,mBAAoB,CAAC,EAAG,GAAI,IAC5BvC,UAAU,MACVwC,MAAOxH,EAASuB,OAChBrB,YAAaA,EACbD,KAAMA,EACNwH,oBAAqB,CAACC,aAAc,iBACpCC,oBAAqB,CAACD,aAAc,aACpCE,aAAc/I,KAAKgC,iBACnBgH,oBAAqBhJ,KAAKmC,2BAE/BlI,EAAAC,EAAAC,cAAC2M,EAAA5M,EAAD,KACDD,EAAAC,EAAAC,cAAC+L,EAAAhM,EAAD,CAAYkM,QAAQ,KAAKD,UAAU,KAAKY,cAAY,GAApD,cAGG9M,EAAAC,EAAAC,cAAA,OAAKI,MAAO,CAAC0O,UAAW,WACtBhP,EAAAC,EAAAC,cAAC+O,EAAA,gBAAD,CACRnG,UAAW/C,KAAKiB,MAAM8B,UACtBoG,YAAY,4BACZnG,QAAShD,KAAKiB,MAAM+B,QACpBoG,UAAU,0BACVC,cAAe,SAAAC,GAA4B,IAAzBvG,EAAyBuG,EAAzBvG,UAAWC,EAAcsG,EAAdtG,QAGlBoC,EAAKlD,SAAS,CAAEa,YAAWC,aAEtCuG,aAAcvJ,KAAKiB,MAAMsI,aACzBC,cAAe,SAAAD,GAAY,OAAInE,EAAKlD,SAAS,CAAEqH,kBACtCE,eAAgB,kBAAM,OAG3BxP,EAAAC,EAAAC,cAAA,OAAKwE,UAAWC,EAAQ8K,eACxBzP,EAAAC,EAAAC,cAACkE,EAAAnE,EAAD,CAAMoE,WAAS,EAACC,QAAS,IACvBtE,EAAAC,EAAAC,cAACkE,EAAAnE,EAAD,CAAMsE,MAAI,EAACoI,GAAI,EAAGnI,GAAI,IACpBxE,EAAAC,EAAAC,cAAC2M,EAAA5M,EAAD,KACED,EAAAC,EAAAC,cAACwP,EAAAzP,EAAD,CAAQkM,QAAQ,YAAY/K,MAAM,UAAU8L,QAASnH,KAAK6E,cAA1D,UAGJ5K,EAAAC,EAAAC,cAACkE,EAAAnE,EAAD,CAAMsE,MAAI,EAACoI,GAAI,EAAGnI,GAAI,IACpBxE,EAAAC,EAAAC,cAAC2M,EAAA5M,EAAD,KACED,EAAAC,EAAAC,cAACwP,EAAAzP,EAAD,CAAQkM,QAAQ,YAAY/K,MAAM,UAAU8L,QAASnH,KAAK8C,SAA1D,gBAMV7I,EAAAC,EAAAC,cAACkE,EAAAnE,EAAD,CAAMsE,MAAI,EAACoI,GAAI,EAAGnI,GAAI,IACpBxE,EAAAC,EAAAC,cAAC+L,EAAAhM,EAAD,CAAYkM,QAAQ,KAAKD,UAAU,KAAKY,cAAY,GAApD,SAGE9M,EAAAC,EAAAC,cAACiE,GAAD,CACCe,iBAAkBa,KAAKiB,MAAM9B,iBAC7BO,kBAAmBM,KAAKiB,MAAMvB,kBAC9Bd,QAASA,gBAvPJkC,IAAMC,WAAxBC,GAiBKyG,YAAc,CACjB,CAACnI,MAAO,OAAQ+C,MAAO,OAAQ4F,KAAM2B,KACrC,CAACtK,MAAO,WAAY+C,MAAO,MAAO4F,KAhD1C,SAAuBjO,GACnB,IAAIwD,EAAQ,GACZ,IAAK,IAAIhD,KAAMR,EAAM8H,OAAOC,UACxBvE,EAAMhD,GAAM,CACR0F,OAAO,EACP9E,MAAOpB,EAAM8H,OAAOC,UAAUvH,GAAIW,KAClCmE,MAAOtF,EAAM8H,OAAOC,UAAUvH,GAAIW,KAAMX,MAEhD,OACIP,EAAAC,EAAAC,cAAC0P,GAAD,CACIzO,MAAOpB,EAAMoB,MACboC,MAAOA,EACPmD,YAAa3G,EAAM2G,YACnBH,SAAUxG,EAAMwG,aAoCpB,CAAClB,MAAO,QAAS+C,MAAO,QAAS4F,KAjCzC,SAAoBjO,GAKhB,OACIC,EAAAC,EAAAC,cAAC0P,GAAD,CACIzO,MAAOpB,EAAMoB,MACboC,MAPI,CAACsM,IAAO,CAChB5J,OAAO,EACP9E,MAAO,KACPkE,MAAO,MAAO9E,GAAI,QAKdmG,YAAa3G,EAAM2G,YACnBH,SAAUxG,EAAMwG,cAuQbuJ,4BA7bA,SAAAvO,GAAK,MAAK,CACrBmK,KAAM,CACF0C,QAAS,OACTrJ,OAAQ,SAEZ8G,OAAQ,CACJkE,OAAQxO,EAAMwO,OAAOC,OAAS,EAC9BC,WAAY1O,EAAM2O,YAAYC,OAAO,CAAC,QAAS,UAAW,CACtDC,OAAQ7O,EAAM2O,YAAYE,OAAOC,MACjC9F,SAAUhJ,EAAM2O,YAAY3F,SAAS+F,iBAG7CjE,MAAO,CACHkE,SAAU,GAEdC,aAAc,CACVC,KAAM,YAEVhE,aAAclL,EAAMmP,OAAO1E,QAC3BQ,QAAS,CACL+D,SAAU,EACVI,QAA8B,EAArBpP,EAAM+C,QAAQsM,KACvBC,SAAU,QAEdpB,aAAc,CACVzC,aAAmC,EAArBzL,EAAM+C,QAAQsM,MAEhChM,oBAAqB,CACjBkM,UAAW,OACXC,UAAW,UAEf1D,aAAc,CACV2D,SAAU,KAEdhM,SAAU,CACNiM,OAAQ,UAEZC,IAAK,CACDD,OAAQ1P,EAAM+C,QAAQsM,MAE1B3C,aAAc,CACVnJ,MAAO,KAEXoJ,WAAY,CACR3B,YAAa,WAiZNuD,CAAmB/I,IC7gBdoK,QACW,cAA7BC,OAAOC,SAASC,UAEe,UAA7BF,OAAOC,SAASC,UAEhBF,OAAOC,SAASC,SAASC,MACvB,2DCbNC,IAASC,OAAOzR,EAAAC,EAAAC,cAACwR,GAAD,MAASC,SAASC,eAAe,SD4H3C,kBAAmBC,WACrBA,UAAUC,cAAcC,MAAM5O,KAAK,SAAA6O,GACjCA,EAAaC","file":"static/js/main.d77dadbb.chunk.js","sourcesContent":["import React from 'react';\nexport default (props) =>\n \n \n \n \n \n \n Cr\n \n \n \n \n \n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport 'typeface-roboto';\nimport 'react-dates/initialize';\nimport 'react-dates/lib/css/_datepicker.css';\nimport { DateRangePicker } from 'react-dates';\nimport { withStyles } from '@material-ui/core/styles';\nimport { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';\nimport orange from '@material-ui/core/colors/orange';\nimport cyan from '@material-ui/core/colors/cyan';\nimport deepOrange from '@material-ui/core/colors/deepOrange';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableRow from '@material-ui/core/TableRow';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport Paper from '@material-ui/core/Paper';\nimport Button from '@material-ui/core/Button';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport Grid from '@material-ui/core/Grid';\nimport DeleteOutlinedIcon from '@material-ui/icons/DeleteOutlined';\nimport AddCircleIcon from '@material-ui/icons/AddCircle';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Select from '@material-ui/core/Select';\nimport { PieChart, Pie, Cell, Tooltip } from 'recharts';\nimport Logo from './Logo';\n\nconst default_chart_data = [{name: 'Work', value: 10, color: cyan[300]},\n {name: 'Wasted', value: 10, color: cyan[300]}];\n\nconst gapi_base = 'https://www.googleapis.com/calendar/v3';\n\nconst theme = createMuiTheme({\n palette: {\n primary: {\n light: orange[300],\n main: orange[500],\n dark: orange[700],\n contrastText: \"#fff\"\n }\n }\n});\n\n/* eslint-disable no-undef */\n\nfunction to_params(dict) {\n return Object.entries(dict).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join('&');\n}\n\nfunction getAuthToken() {\n return new Promise(resolver =>\n chrome.identity.getAuthToken(\n {interactive: true}, token => resolver(token)));\n}\n\nfunction getCalendars(token) {\n return fetch(gapi_base + '/users/me/calendarList?' + to_params({access_token: token}),\n { method: 'GET', async: true })\n .then(response => response.json())\n .then(data => data.items);\n}\n\nfunction genEventsGetter(calId, timeMin, timeMax) {\n return token => fetch(gapi_base + '/calendars/' + calId + '/events?' + to_params({\n access_token: token,\n timeMin,\n timeMax\n }), { method: 'GET', async: true })\n .then(response => response.json())\n .then(data => data.items);\n}\n\nfunction getColors(token) {\n return fetch(gapi_base + '/colors?' + to_params({access_token: token}), { method: 'GET', async: true })\n .then(response => response.json());\n}\n\nfunction filterPatterns(patterns, calName) {\n return patterns.filter(p => {\n let re = new RegExp(p.cal.regex ? p.cal.value : `^${p.cal.value}$`);\n return re.test(calName);\n });\n}\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n height: '100vh',\n },\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n title: {\n flexGrow: 1,\n },\n sectionTitle: {\n flex: '0 0 auto'\n },\n appBarSpacer: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n padding: theme.spacing.unit * 3,\n overflow: 'auto',\n },\n buttonSpacer: {\n marginBottom: theme.spacing.unit * 4,\n },\n patternTableWrapper: {\n overflowX: 'auto',\n overflowY: 'hidden'\n },\n patternTable: {\n minWidth: 600\n },\n pieChart: {\n margin: '0 auto',\n },\n fab: {\n margin: theme.spacing.unit,\n },\n fieldNoRegex: {\n width: 200\n },\n fieldRegex: {\n marginRight: '0.5em'\n }\n});\n\nfunction customizedLabel(props) {\n const {cx, cy, x, y, stroke, fill, name, value} = props;\n let anchor = \"middle\";\n const EPS = 2;\n let dx = 0;\n let dy = 0;\n if (x < cx - EPS) {\n dx = -5;\n anchor = \"end\"\n } else if (x > cx + EPS) {\n dx = 5;\n anchor = \"start\";\n }\n\n if (y < cy - EPS) {\n dy = -5;\n } else if (y > cy + EPS) {\n dy = 10;\n }\n\n return ({`${name}`});\n}\n\nfunction ChromiclePieChart(props) {\n return (\n \n \n
\n \n \n `${value.toFixed(2)} hr`}/>\n \n
\n
\n \n
\n \n \n {props.calendarGraphData.map(d => )}\n \n `${value.toFixed(2)} hr`}/>\n \n
\n
\n
);\n}\n\nChromiclePieChart.propTypes = {\n patternGraphData: PropTypes.object.isRequired,\n patterncalendarData: PropTypes.object.isRequired,\n};\n\nclass RegexField extends React.Component {\n render() {\n var pitems = this.props.items;\n let items = [];\n pitems['0'] = {regex: true, label: null, id: '0'};\n for (let id in pitems)\n {\n items.push(\n \n {pitems[id].label != null ? pitems[id].label :\n Custom}\n );\n }\n return (\n \n \n {\n let value;\n if (pitems[event.target.value].label == null) {\n if (this.props.value.regex)\n value = {regex: true, value: this.props.value.value, label: null, id: '0'};\n else\n value = {regex: true, value: `^${this.props.value.value}$`, label: null, id: '0'};\n } else {\n value = pitems[event.target.value];\n }\n this.props.onChange({target: {value}});\n }}\n className={this.props.value.regex ?\n this.props.fieldStyles.regex :\n this.props.fieldStyles.noRegex}>{items}\n {this.props.value.label == null && (\n \n this.props.onChange({target: { value: {regex: true, value: event.target.value, label: null, id: '0'}}})} />\n )}\n \n \n );\n }\n}\n\nfunction CalendarField(props) {\n let items = {};\n for (let id in props.cached.calendars) {\n items[id] = {\n regex: false,\n value: props.cached.calendars[id].name,\n label: props.cached.calendars[id].name, id}\n }\n return (\n );\n}\n\nfunction EventField(props) {\n let items = {'any': {\n regex: true,\n value: '.*',\n label: 'Any', id: 'any'}};\n return (\n );\n}\n\nclass Dashboard extends React.Component {\n state = {\n open: true,\n patterns: [],\n page: 0,\n rowsPerPage: 5,\n timeRange: null,\n token: getAuthToken(),\n patternGraphData: default_chart_data,\n calendarGraphData: default_chart_data,\n activePattern: null\n };\n\n cached = {\n calendars: {}\n };\n\n static patternHead = [\n {label: \"Name\", field: \"name\", elem: TextField},\n {label: \"Calendar\", field: \"cal\", elem: CalendarField},\n {label: \"Event\", field: 'event', elem: EventField}];\n\n handleChangePage = (event, page) => {\n this.setState({ page });\n };\n\n handleChangeRowsPerPage = event => {\n this.setState({ rowsPerPage: event.target.value });\n };\n\n updatePattern = (field, idx, value) => {\n let patterns = this.state.patterns;\n patterns[idx][field] = value;\n this.setState({ patterns });\n };\n\n removePattern = idx => {\n let patterns = this.state.patterns;\n patterns.splice(idx, 1);\n for (let i = 0; i < patterns.length; i++)\n patterns[i].idx = i;\n this.setState({ patterns });\n };\n\n newPattern = () => {\n let patterns = [{name: '',\n cal: { regex: true, label: null, id: '0' },\n event: { regex: true, value: '.*', label: 'Any', id: 'any' },\n idx: 0 }, ...this.state.patterns];\n for (let i = 1; i < patterns.length; i++)\n patterns[i].idx = i;\n \tthis.setState({ patterns });\n };\n\n analyze = () => {\n if (!(this.state.startDate && this.state.endDate)) {\n alert(\"Please choose a valid time range.\");\n return;\n }\n let start = this.state.startDate.toISOString();\n let end = this.state.endDate.toISOString();\n let event_pms = [];\n for (let id in this.cached.calendars) {\n event_pms.push(\n this.state.token\n .then(genEventsGetter(id, start, end))\n .then(items => this.cached.calendars[id].events = items));\n }\n\n Promise.all(event_pms).then(() => {\n let results = {}; // pattern idx => time\n let cal_results = {}; // cal id => time\n for (let i = 0; i < this.state.patterns.length; i++)\n results[i] = 0;\n for (let id in this.cached.calendars) {\n let patterns = filterPatterns(this.state.patterns, this.cached.calendars[id].name)\n .map(p => { return { regex: new RegExp(p.event.value), idx: p.idx } });\n if (!this.cached.calendars[id].events) continue;\n this.cached.calendars[id].events.forEach(event => {\n if (event.status !== \"confirmed\") return;\n patterns.forEach(p => {\n if (!p.regex.test(event.summary)) return;\n if (cal_results[id] === undefined) {\n cal_results[id] = 0;\n }\n let duration = (new Date(event.end.dateTime) - new Date(event.start.dateTime)) / 60000;\n results[p.idx] += duration;\n cal_results[id] += duration;\n });\n });\n }\n let patternGraphData = [];\n let calendarGraphData = [];\n for (let i = 0; i < this.state.patterns.length; i++) {\n patternGraphData.push({ name: this.state.patterns[i].name, value: results[i] / 60.0 });\n }\n for (let id in cal_results) {\n calendarGraphData.push({\n name: this.cached.calendars[id].name,\n value: (cal_results[id] / 60.0),\n color: this.cached.calendars[id].color.background});\n }\n this.setState({ patternGraphData, calendarGraphData });\n });\n };\n\n loadPatterns = () => {\n let token = this.state.token;\n let colors = token.then(getColors).then(color => {\n return color.calendar;\n });\n let cals = token.then(getCalendars);\n Promise.all([colors, cals]).then(([colors, items]) => {\n items.forEach(item => {\n this.cached.calendars[item.id] = {\n name: item.summary,\n events: {},\n color: colors[item.colorId]\n };\n });\n this.setState({ patterns: items.map((item, idx) => {\n return { name: item.summary,\n cal: { regex: false, value: item.summary, label: item.summary, id: item.id },\n event: { regex: true, value: '.*', label: 'Any', id: 'any' },\n idx }\n })});\n });\n };\n\n render() {\n const { classes } = this.props;\n const { patterns, rows, rowsPerPage, page } = this.state;\n const nDummy = rowsPerPage - Math.min(rowsPerPage, patterns.length - page * rowsPerPage);\n\n return (\n \n
\n \n \n \n Chromicle\n \n \n \n
\n
\n \n \n \n \n \n \n Event Patterns\n this.newPattern()}>\n \n
\n \n \n {Dashboard.patternHead.map(s => ({s.label}))}\n \n \n {patterns.slice(page * rowsPerPage, (page + 1) * rowsPerPage).map(p => (\n this.setState({ activePattern: p.idx })}\n onMouseOut={() => this.setState({ activePattern: null })}>\n {Dashboard.patternHead.map(s => {\n const CustomText = s.elem;\n return (\n \n this.updatePattern(s.field, p.idx, event.target.value)}/>\n )})}\n \n this.removePattern(p.idx)} />\n \n ))}\n {nDummy > 0 && (\n \n \n )}\n \n
\n
\n \n
\n \n \t \n \t Time Range\n \t \n
\n {\n //if (startDate && endDate)\n // this.setState({ timeRange: [startDate.toISOString(), endDate.toISOString()]});\n this.setState({ startDate, endDate });\n }} // PropTypes.func.isRequired,\n \t\t\t focusedInput={this.state.focusedInput} // PropTypes.oneOf([START_DATE, END_DATE]) or null,\n \t\t\t onFocusChange={focusedInput => this.setState({ focusedInput })} // PropTypes.func.isRequired,\n isOutsideRange={() => false}/>\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Graph\n \n \n \n \n
\n
\n
);\n }\n}\n\nDashboard.propTypes = {\n classes: PropTypes.object.isRequired,\n};\n\nexport default withStyles(styles)(Dashboard);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}