{"version":3,"sources":["generated/index.ts","generated/configuration.ts","generated/models/index.ts","generated/base.ts","generated/common.ts","generated/api/auth-api.ts","generated/api/review-sessions-api.ts","generated/api/users-api.ts","generated/api/words-api.ts","providers/env.ts","pages/ProfileEdit.tsx","components/AdminLayout.tsx","pages/Wordlists.tsx","components/authStyles.tsx","components/Auth.tsx","pages/Login.tsx","pages/Practice.tsx","pages/Register.tsx","pages/Users.tsx","providers/authProvider.ts","pages/Dummy.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["Configuration","param","apiKey","username","password","accessToken","basePath","baseOptions","formDataCtor","this","mime","jsonMime","RegExp","test","toLowerCase","BASE_PATH","replace","BaseAPI","configuration","axios","globalAxios","RequiredError","field","msg","name","Error","DUMMY_BASE_URL","assertParamExists","functionName","paramName","paramValue","undefined","setOAuthToObject","object","scopes","a","localVarAccessTokenValue","setSearchParams","url","searchParams","URLSearchParams","search","objects","key","Array","isArray","delete","item","append","set","toString","serializeDataIfNeeded","value","requestOptions","nonString","isJsonMime","headers","JSON","stringify","toPathString","pathname","hash","createRequestFunction","axiosArgs","axiosRequestArgs","options","request","AuthApiFp","localVarAxiosParamCreator","login","grantType","scope","clientId","clientSecret","localVarUrlObj","URL","localVarRequestOptions","method","localVarHeaderParameter","localVarQueryParameter","localVarFormParams","query","headersFromBaseOptions","data","register","userCreate","AuthApiAxiosParamCreator","localVarAxiosArgs","AuthApi","requestParameters","then","ReviewSessionsApiFp","getOrCreateReviewSession","wordlistId","localVarPath","encodeURIComponent","String","ReviewSessionsApiAxiosParamCreator","ReviewSessionsApi","UsersApiFp","deleteUser","id","getUser","getUsers","skip","limit","me","updateMe","userUpdate","updateUser","UsersApiAxiosParamCreator","UsersApi","WordsApiFp","getNextWord","reviewSessionId","reviewWord","quality","WordsApiAxiosParamCreator","WordsApi","document","location","host","startsWith","process","REACT_APP_API_BASE","readAccessToken","localStorage","getItem","apiConfig","authApi","userApi","reviewSessionsApi","wordsApi","ProfileContext","createContext","profileVersion","refreshProfile","ProfileProvider","children","useState","setProfileVersion","context","useMemo","currentVersion","Provider","CustomToolbar","props","Toolbar","SaveButton","ProfileEdit","notify","useNotify","usePermissions","permissionsLoaded","loaded","permissions","redirect","useRedirect","saving","setSaving","useContext","useGetIdentity","identity","handleSave","useCallback","values","catch","e","response","detail","saveContext","useSaveContext","save","email","to","SaveContext","SimpleForm","record","toolbar","TextInput","source","disabled","validate","required","MyUserMenu","ItemLink","MenuItemLink","UserMenu","primaryText","leftIcon","MyMenu","resources","useSelector","getResources","filter","resource","authenticated","useAuthState","Menu","map","label","icon","onClick","onMenuClick","MyAppBar","AppBar","userMenu","MyLayout","Layout","appBar","menu","validateName","minLength","maxLength","hiddenStyle","display","width","WordlistTitle","WordlistListActionToolbar","button","cloneElement","uniqueWords","words","wordSet","Set","word","has","add","PracticeButton","useRecordContext","Button","alignIcon","ConditionalEdit","user_id","EditButton","WordlistList","List","filters","Datagrid","TextField","BooleanField","WordlistEdit","Edit","title","BooleanInput","helperText","NumberInput","ArrayInput","style","debounce","SimpleFormIterator","disableReordering","type","WordlistCreate","Create","defaultValue","AutocompleteInput","choices","useStyles","makeStyles","theme","main","flexDirection","minHeight","alignItems","justifyContent","backgroundColor","card","minWidth","marginTop","header","textAlign","avatar","margin","palette","secondary","form","padding","actions","createTheme","defaultTheme","Auth","submit","setEmail","setPassword","actionName","extraActions","classes","ThemeProvider","noValidate","onSubmit","className","Card","Avatar","CardHeader","onChange","target","fullWidth","CardActions","variant","color","Notification","Login","useLogin","history","useHistory","preventDefault","push","centeredCard","maxWidth","fetchNextWord","setNextWord","setNextWordLoaded","reviewSession","exp","status","BackFlashcardContent","pronunciation","results","Typography","component","length","definition","index","partOfSpeech","example","NotLoggedInCTA","CardContent","Link","Practice","useParams","isAuthStateLoaded","setReviewSession","useEffect","fetchReviewSession","useReviewSessionsAsync","isReviewing","setIsReviewing","nextWord","nextWordLoaded","useNextWordAsync","rateNextWord","definitions","all","gutterBottom","size","Register","formData","errorMsg","UserList","EmailField","UserEdit","authProvider","resp","setItem","access_token","Promise","resolve","logout","removeItem","checkError","error","reject","checkAuth","getPermissions","role","parse","getIdentity","DummyList","loading","dataProvider","simpleRestProvider","user","token","includes","fetchUtils","fetchJson","customRoutes","RouteWithoutLayout","exact","path","noLayout","render","App","Admin","loginPage","LoginPage","createHistory","layout","Resource","list","is_superuser","edit","UserIcon","create","PostIcon","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode","getElementById"],"mappings":"sGAAA,sQ,uFCyBaA,EAAb,WAmDI,aAAkD,IAAtCC,EAAqC,uDAAJ,GAAI,yBA7CjDC,YA6CiD,OAtCjDC,cAsCiD,OA/BjDC,cA+BiD,OAxBjDC,iBAwBiD,OAjBjDC,cAiBiD,OAVjDC,iBAUiD,OAFjDC,kBAEiD,EAC7CC,KAAKP,OAASD,EAAMC,OACpBO,KAAKN,SAAWF,EAAME,SACtBM,KAAKL,SAAWH,EAAMG,SACtBK,KAAKJ,YAAcJ,EAAMI,YACzBI,KAAKH,SAAWL,EAAMK,SACtBG,KAAKF,YAAcN,EAAMM,YACzBE,KAAKD,aAAeP,EAAMO,aA1DlC,8CAuEI,SAAkBE,GACd,IAAMC,EAAmB,IAAIC,OAAO,8DAAiE,KACrG,OAAgB,OAATF,IAAkBC,EAASE,KAAKH,IAAgC,gCAAvBA,EAAKI,mBAzE7D,M,iCCzBA,qF,+fCoBaC,EAAY,mBAAmBC,QAAQ,OAAQ,IA4B/CC,EAGT,WAAYC,GAAsH,IAA7EZ,EAA4E,uDAAzDS,EAAqBI,EAAoC,uDAAbC,IAAa,yBAA5Ed,WAA4E,KAApCa,QAAoC,KAFvHD,mBAEuH,EACzHA,IACAT,KAAKS,cAAgBA,EACrBT,KAAKH,SAAWY,EAAcZ,UAAYG,KAAKH,WAW9Ce,EAAb,kDAEI,WAAmBC,EAAeC,GAAe,IAAD,8BAC5C,cAAMA,IADSD,QAA6B,EADhDE,KAAwB,gBACwB,EAFpD,sBAAmCC,QC1CtBC,EAAiB,sBAOjBC,EAAoB,SAAUC,EAAsBC,EAAmBC,GAChF,GAAmB,OAAfA,QAAsCC,IAAfD,EACvB,MAAM,IAAIT,EAAcQ,EAAlB,6BAAmDA,EAAnD,+CAAmGD,EAAnG,OA4CDI,EAAgB,uCAAG,WAAgBC,EAAaT,EAAcU,EAAkBhB,GAA7D,eAAAiB,EAAA,0DACxBjB,IAAiBA,EAAcb,YADP,oBAE8C,oBAA9Ba,EAAcb,YAF9B,gCAGZa,EAAcb,YAAYmB,EAAMU,GAHpB,0DAIZhB,EAAcb,YAJF,2BAElB+B,EAFkB,KAKxBH,EAAM,cAAoB,UAAYG,EALd,4CAAH,4DAahBC,EAAkB,SAAUC,GAA6B,IAClE,IAAMC,EAAe,IAAIC,gBAAgBF,EAAIG,QADqB,mBAAhBC,EAAgB,iCAAhBA,EAAgB,kBAElE,cAAqBA,EAArB,eAA8B,CAAzB,IAAMT,EAAM,KACb,IAAK,IAAMU,KAAOV,EACd,GAAIW,MAAMC,QAAQZ,EAAOU,IAAO,CAC5BJ,EAAaO,OAAOH,GADQ,oBAETV,EAAOU,IAFE,IAE5B,2BAAgC,CAAC,IAAtBI,EAAqB,QAC5BR,EAAaS,OAAOL,EAAKI,IAHD,oCAM5BR,EAAaU,IAAIN,EAAKV,EAAOU,IAIzCL,EAAIG,OAASF,EAAaW,YAOjBC,EAAwB,SAAUC,EAAYC,EAAqBnC,GAC5E,IAAMoC,EAA6B,kBAAVF,EAIzB,OAH2BE,GAAapC,GAAiBA,EAAcqC,WACjErC,EAAcqC,WAAWF,EAAeG,QAAQ,iBAChDF,GAEAG,KAAKC,eAAoB3B,IAAVqB,EAAsBA,EAAQ,IAC5CA,GAAS,IAOPO,EAAe,SAAUrB,GAClC,OAAOA,EAAIsB,SAAWtB,EAAIG,OAASH,EAAIuB,MAO9BC,EAAwB,SAAUC,EAAwB3C,EAA4BL,EAAmBG,GAClH,OAAO,WAAuE,IAAtEC,EAAqE,uDAA9CC,EAAad,EAAiC,uDAAdS,EACrDiD,EAAgB,2BAAOD,EAAUE,SAAjB,IAA0B3B,MAAmB,OAAbpB,QAAa,IAAbA,OAAA,EAAAA,EAAeZ,WAAYA,GAAYyD,EAAUzB,MACvG,OAAOnB,EAAM+C,QAAQF,KCUhBG,EAAY,SAASjD,GAC9B,IAAMkD,EAlH8B,SAAUlD,GAC9C,MAAO,CAaHmD,MAAM,WAAD,4BAAE,WAAOlE,EAAkBC,EAAkBkE,EAAoBC,EAAgBC,EAAmBC,GAAlG,yCAAAtC,EAAA,6DAAyH8B,EAAzH,+BAAwI,GAE3ItC,EAAkB,QAAS,WAAYxB,GAEvCwB,EAAkB,QAAS,WAAYvB,GAGjCsE,EAAiB,IAAIC,IAPxB,yBAO0CjD,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EAbH,yBAa8BC,OAAQ,QAAWtE,GAAgB0D,GAC9Da,EAA0B,GAC1BC,EAAyB,GACzBC,EAAqB,IAAIxC,qBAGbT,IAAduC,GACAU,EAAmB/B,IAAI,aAAcqB,QAGxBvC,IAAb5B,GACA6E,EAAmB/B,IAAI,WAAY9C,QAGtB4B,IAAb3B,GACA4E,EAAmB/B,IAAI,WAAY7C,QAGzB2B,IAAVwC,GACAS,EAAmB/B,IAAI,QAASsB,QAGnBxC,IAAbyC,GACAQ,EAAmB/B,IAAI,YAAauB,QAGnBzC,IAAjB0C,GACAO,EAAmB/B,IAAI,gBAAiBwB,GAI5CK,EAAwB,gBAAkB,oCAE1CzC,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SACpGoB,EAAuBO,KAAOH,EAAmB9B,WAjD9C,kBAmDI,CACHZ,IAAKqB,EAAae,GAClBT,QAASW,IArDV,4CAAF,6DAAC,GA+DNQ,SAAS,WAAD,4BAAE,WAAOC,GAAP,uCAAAlD,EAAA,6DAA+B8B,EAA/B,+BAA8C,GAEpDtC,EAAkB,WAAY,aAAc0D,GAGtCX,EAAiB,IAAIC,IALrB,wBAKuCjD,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EAXA,yBAW2BC,OAAQ,QAAWtE,GAAgB0D,GAE9Dc,EAAyB,IADzBD,EAA0B,IAKR,gBAAkB,mBAE1CzC,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SACpGoB,EAAuBO,KAAOhC,EAAsBkC,EAAYT,EAAwB1D,GAtBlF,kBAwBC,CACHoB,IAAKqB,EAAae,GAClBT,QAASW,IA1BP,4CAAF,mDAAC,IAqCqBU,CAAyBpE,GAC3D,MAAO,CAaGmD,MAbH,SAaSlE,EAAkBC,EAAkBkE,EAAoBC,EAAgBC,EAAmBC,EAAuBR,GAA0F,OAAD,0HACnLG,EAA0BC,MAAMlE,EAAUC,EAAUkE,EAAWC,EAAOC,EAAUC,EAAcR,GADqF,cAC7MsB,EAD6M,yBAE5MzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAF2I,8CAWjNkE,SAxBH,SAwBYC,EAAwBpB,GAA2F,OAAD,0HAC7FG,EAA0BgB,SAASC,EAAYpB,GAD8C,cACvHsB,EADuH,yBAEtHzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAFqD,gDA+G5HsE,EAAb,2JASI,SAAaC,EAAwCxB,GAAgB,IAAD,OAChE,OAAOE,EAAU1D,KAAKS,eAAemD,MAAMoB,EAAkBtF,SAAUsF,EAAkBrF,SAAUqF,EAAkBnB,UAAWmB,EAAkBlB,MAAOkB,EAAkBjB,SAAUiB,EAAkBhB,aAAcR,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,eAVjR,sBAqBI,SAAgBmF,EAA2CxB,GAAgB,IAAD,OACtE,OAAOE,EAAU1D,KAAKS,eAAekE,SAASK,EAAkBJ,WAAYpB,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,iBAtBxI,GAA6BW,GC7MhB0E,EAAsB,SAASzE,GACxC,IAAMkD,EAhDwC,SAAUlD,GACxD,MAAO,CAQH0E,yBAAyB,WAAD,4BAAE,WAAOC,GAAP,yCAAA1D,EAAA,6DAA2B8B,EAA3B,+BAA0C,GAEhEtC,EAAkB,2BAA4B,aAAckE,GACtDC,EAAe,wCAChB9E,QADgB,WACJ,cADI,KACc+E,mBAAmBC,OAAOH,KAEvDnB,EAAiB,IAAIC,IAAImB,EAAcpE,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EAZgB,yBAYWC,OAAQ,QAAWtE,GAAgB0D,GAC9Da,EAA0B,GAC1BC,EAAyB,GAdT,UAkBhB/C,EAAiB8C,EAAyB,uBAAwB,GAAI5D,GAlBtD,eAsBtBmB,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SAxB9E,kBA0Bf,CACHlB,IAAKqB,EAAae,GAClBT,QAASW,IA5BS,4CAAF,mDAAC,IAuCKqB,CAAmC/E,GACrE,MAAO,CAQG0E,yBARH,SAQ4BC,EAAoB5B,GAAoG,OAAD,0HAClHG,EAA0BwB,yBAAyBC,EAAY5B,GADmD,cAC5IsB,EAD4I,yBAE3IzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAF0E,gDA+CjJgF,EAAb,8KASI,SAAgCT,EAAqExB,GAAgB,IAAD,OAChH,OAAO0B,EAAoBlF,KAAKS,eAAe0E,yBAAyBH,EAAkBI,WAAY5B,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,iBAVlK,GAAuCW,GCiJ1BkF,EAAa,SAASjF,GAC/B,IAAMkD,EAxP+B,SAAUlD,GAC/C,MAAO,CAQHkF,WAAW,WAAD,4BAAE,WAAOC,GAAP,yCAAAlE,EAAA,6DAAmB8B,EAAnB,+BAAkC,GAE1CtC,EAAkB,aAAc,KAAM0E,GAChCP,EAAe,qBAChB9E,QADgB,WACJ,KADI,KACK+E,mBAAmBC,OAAOK,KAE9C3B,EAAiB,IAAIC,IAAImB,EAAcpE,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EAZE,yBAYyBC,OAAQ,UAAatE,GAAgB0D,GAChEa,EAA0B,GAC1BC,EAAyB,GAdvB,UAkBF/C,EAAiB8C,EAAyB,uBAAwB,GAAI5D,GAlBpE,eAsBRmB,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SAxB5F,kBA0BD,CACHlB,IAAKqB,EAAae,GAClBT,QAASW,IA5BL,4CAAF,mDAAC,GAsCX0B,QAAQ,WAAD,4BAAE,WAAOD,GAAP,yCAAAlE,EAAA,6DAAmB8B,EAAnB,+BAAkC,GAEvCtC,EAAkB,UAAW,KAAM0E,GAC7BP,EAAe,qBAChB9E,QADgB,WACJ,KADI,KACK+E,mBAAmBC,OAAOK,KAE9C3B,EAAiB,IAAIC,IAAImB,EAAcpE,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EAZD,yBAY4BC,OAAQ,OAAUtE,GAAgB0D,GAC7Da,EAA0B,GAC1BC,EAAyB,GAd1B,UAkBC/C,EAAiB8C,EAAyB,uBAAwB,GAAI5D,GAlBvE,eAsBLmB,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SAxB/F,kBA0BE,CACHlB,IAAKqB,EAAae,GAClBT,QAASW,IA5BR,4CAAF,mDAAC,GAuCR2B,SAAS,WAAD,4BAAE,WAAOC,EAAeC,GAAtB,uCAAAtE,EAAA,6DAAsC8B,EAAtC,+BAAqD,GAGrDS,EAAiB,IAAIC,IAHrB,gBAGuCjD,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EATA,yBAS2BC,OAAQ,OAAUtE,GAAgB0D,GAC7Da,EAA0B,GAC1BC,EAAyB,GAXzB,SAeA/C,EAAiB8C,EAAyB,uBAAwB,GAAI5D,GAftE,mBAiBOa,IAATyE,IACAzB,EAAsB,KAAWyB,QAGvBzE,IAAV0E,IACA1B,EAAsB,MAAY0B,GAKtCpE,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SA7B9F,kBA+BC,CACHlB,IAAKqB,EAAae,GAClBT,QAASW,IAjCP,4CAAF,qDAAC,GA0CT8B,GAAG,WAAD,4BAAE,oDAAAvE,EAAA,6DAAO8B,EAAP,+BAAsB,GAGhBS,EAAiB,IAAIC,IAH3B,mBAG6CjD,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EATN,yBASiCC,OAAQ,OAAUtE,GAAgB0D,GAC7Da,EAA0B,GAC1BC,EAAyB,GAX/B,SAeM/C,EAAiB8C,EAAyB,uBAAwB,GAAI5D,GAf5E,cAmBAmB,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SArBpG,kBAuBO,CACHlB,IAAKqB,EAAae,GAClBT,QAASW,IAzBb,4CAAF,kDAAC,GAmCH+B,SAAS,WAAD,4BAAE,WAAOC,GAAP,uCAAAzE,EAAA,6DAA+B8B,EAA/B,+BAA8C,GAEpDtC,EAAkB,WAAY,aAAciF,GAGtClC,EAAiB,IAAIC,IALrB,mBAKuCjD,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EAXA,yBAW2BC,OAAQ,SAAYtE,GAAgB0D,GAC/Da,EAA0B,GAC1BC,EAAyB,GAbzB,UAiBA/C,EAAiB8C,EAAyB,uBAAwB,GAAI5D,GAjBtE,eAqBN4D,EAAwB,gBAAkB,mBAE1CzC,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SACpGoB,EAAuBO,KAAOhC,EAAsByD,EAAYhC,EAAwB1D,GA1BlF,kBA4BC,CACHoB,IAAKqB,EAAae,GAClBT,QAASW,IA9BP,4CAAF,mDAAC,GAyCTiC,WAAW,WAAD,4BAAE,WAAOR,EAAYO,GAAnB,yCAAAzE,EAAA,6DAA2C8B,EAA3C,+BAA0D,GAElEtC,EAAkB,aAAc,KAAM0E,GAEtC1E,EAAkB,aAAc,aAAciF,GACxCd,EAAe,qBAChB9E,QADgB,WACJ,KADI,KACK+E,mBAAmBC,OAAOK,KAE9C3B,EAAiB,IAAIC,IAAImB,EAAcpE,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EAdE,yBAcyBC,OAAQ,SAAYtE,GAAgB0D,GAC/Da,EAA0B,GAC1BC,EAAyB,GAhBvB,UAoBF/C,EAAiB8C,EAAyB,uBAAwB,GAAI5D,GApBpE,eAwBR4D,EAAwB,gBAAkB,mBAE1CzC,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SACpGoB,EAAuBO,KAAOhC,EAAsByD,EAAYhC,EAAwB1D,GA7BhF,kBA+BD,CACHoB,IAAKqB,EAAae,GAClBT,QAASW,IAjCL,4CAAF,qDAAC,IA4CmBkC,CAA0B5F,GAC5D,MAAO,CAQGkF,WARH,SAQcC,EAAYpC,GAA2F,OAAD,0HACnFG,EAA0BgC,WAAWC,EAAIpC,GAD0C,cAC7GsB,EAD6G,yBAE5GzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAF2C,8CAWjHoF,QAnBH,SAmBWD,EAAYpC,GAA2F,OAAD,0HAChFG,EAA0BkC,QAAQD,EAAIpC,GAD0C,cAC1GsB,EAD0G,yBAEzGzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAFwC,8CAY9GqF,SA/BH,SA+BYC,EAAeC,EAAgBxC,GAAkG,OAAD,0HAC3GG,EAA0BmC,SAASC,EAAMC,EAAOxC,GAD2D,cACrIsB,EADqI,yBAEpIzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAFmE,8CAUzIwF,GAzCH,SAyCMzC,GAA2F,OAAD,0HAC/DG,EAA0BsC,GAAGzC,GADkC,cACzFsB,EADyF,yBAExFzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAFuB,8CAW7FyF,SApDH,SAoDYC,EAAwB3C,GAA2F,OAAD,0HAC7FG,EAA0BuC,SAASC,EAAY3C,GAD8C,cACvHsB,EADuH,yBAEtHzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAFqD,8CAY3H2F,WAhEH,SAgEcR,EAAYO,EAAwB3C,GAA2F,OAAD,0HAC3GG,EAA0ByC,WAAWR,EAAIO,EAAY3C,GADsD,cACrIsB,EADqI,yBAEpIzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAFmE,gDAwK1I6F,EAAb,gKASI,SAAkBtB,EAA8CxB,GAAgB,IAAD,OAC3E,OAAOkC,EAAW1F,KAAKS,eAAekF,WAAWX,EAAkBY,GAAIpC,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,eAVnI,qBAqBI,SAAemF,EAA2CxB,GAAgB,IAAD,OACrE,OAAOkC,EAAW1F,KAAKS,eAAeoF,QAAQb,EAAkBY,GAAIpC,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,eAtBhI,sBAiCI,WAAiF,IAAD,OAAhEmF,EAAgE,uDAAnB,GAAIxB,EAAe,uCAC5E,OAAOkC,EAAW1F,KAAKS,eAAeqF,SAASd,EAAkBe,KAAMf,EAAkBgB,MAAOxC,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,eAlC5J,gBA4CI,SAAU2D,GAAgB,IAAD,OACrB,OAAOkC,EAAW1F,KAAKS,eAAewF,GAAGzC,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,eA7CrG,sBAwDI,SAAgBmF,EAA4CxB,GAAgB,IAAD,OACvE,OAAOkC,EAAW1F,KAAKS,eAAeyF,SAASlB,EAAkBmB,WAAY3C,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,eAzDzI,wBAoEI,SAAkBmF,EAA8CxB,GAAgB,IAAD,OAC3E,OAAOkC,EAAW1F,KAAKS,eAAe2F,WAAWpB,EAAkBY,GAAIZ,EAAkBmB,WAAY3C,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,iBArEjK,GAA8BW,GC1YjB+F,EAAa,SAAS9F,GAC/B,IAAMkD,EA1F+B,SAAUlD,GAC/C,MAAO,CAQH+F,YAAY,WAAD,4BAAE,WAAOC,GAAP,yCAAA/E,EAAA,6DAAgC8B,EAAhC,+BAA+C,GAExDtC,EAAkB,cAAe,kBAAmBuF,GAC9CpB,EAAe,yCAChB9E,QADgB,WACJ,oBADI,KACoB+E,mBAAmBC,OAAOkB,KAE7DxC,EAAiB,IAAIC,IAAImB,EAAcpE,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EAZG,yBAYwBC,OAAQ,OAAUtE,GAAgB0D,GAC7Da,EAA0B,GAC1BC,EAAyB,GAdtB,UAkBH/C,EAAiB8C,EAAyB,uBAAwB,GAAI5D,GAlBnE,eAsBTmB,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SAxB3F,kBA0BF,CACHlB,IAAKqB,EAAae,GAClBT,QAASW,IA5BJ,4CAAF,mDAAC,GAuCZuC,WAAW,WAAD,4BAAE,WAAOC,EAAiBF,GAAxB,yCAAA/E,EAAA,6DAAiD8B,EAAjD,+BAAgE,GAExEtC,EAAkB,aAAc,UAAWyF,GAE3CzF,EAAkB,aAAc,kBAAmBuF,GAC7CpB,EAAe,qDAChB9E,QADgB,WACJ,UADI,KACU+E,mBAAmBC,OAAOoB,KACpDpG,QAFgB,WAEJ,oBAFI,KAEoB+E,mBAAmBC,OAAOkB,KAE7DxC,EAAiB,IAAIC,IAAImB,EAAcpE,GAEzCR,IACAX,EAAcW,EAAcX,aAG1BqE,EAfE,yBAeyBC,OAAQ,QAAWtE,GAAgB0D,GAC9Da,EAA0B,GAC1BC,EAAyB,GAjBvB,UAqBF/C,EAAiB8C,EAAyB,uBAAwB,GAAI5D,GArBpE,eAyBRmB,EAAgBqC,EAAgBK,EAAwBd,EAAQgB,OAC5DC,EAAyB3E,GAAeA,EAAYiD,QAAUjD,EAAYiD,QAAU,GACxFoB,EAAuBpB,QAAvB,uCAAqCsB,GAA4BI,GAA2BjB,EAAQT,SA3B5F,kBA6BD,CACHlB,IAAKqB,EAAae,GAClBT,QAASW,IA/BL,4CAAF,qDAAC,IA0CmByC,CAA0BnG,GAC5D,MAAO,CAQG+F,YARH,SAQeC,EAAyBjD,GAAyG,OAAD,0HAC/GG,EAA0B6C,YAAYC,EAAiBjD,GADwD,cACzIsB,EADyI,yBAExIzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAFuE,8CAY7IiG,WApBH,SAoBcC,EAAiBF,EAAyBjD,GAA0F,OAAD,0HAChHG,EAA0B+C,WAAWC,EAASF,EAAiBjD,GADiD,cAC1IsB,EAD0I,yBAEzIzB,EAAsByB,EAAmBnE,IAAaL,EAAWG,IAFwE,gDA+E/IoG,EAAb,iKASI,SAAmB7B,EAA+CxB,GAAgB,IAAD,OAC7E,OAAO+C,EAAWvG,KAAKS,eAAe+F,YAAYxB,EAAkByB,gBAAiBjD,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,eAVjJ,wBAqBI,SAAkBmF,EAA8CxB,GAAgB,IAAD,OAC3E,OAAO+C,EAAWvG,KAAKS,eAAeiG,WAAW1B,EAAkB2B,QAAS3B,EAAkByB,gBAAiBjD,GAASyB,MAAK,SAACxB,GAAD,OAAaA,EAAQ,EAAK/C,MAAO,EAAKb,iBAtB3K,GAA8BW,I,kbCvMjBX,EAVRiH,SAASC,SAASC,KAAKC,WAAW,aAG1BC,mIAAYC,mBACdD,mIAAYC,mBAEd,wBAJC,WAAN,OAAkBL,SAASC,SAASC,MAUlCI,EAAe,uCAAG,sBAAA1F,EAAA,+EACf2F,aAAaC,QAAQ,UAAY,IADlB,2CAAH,qDAIfC,EAA2B,IAAIhI,gBAAc,CACjDM,WACAD,YAAawH,IAGFI,EAAmB,IAAIzC,UAAQwC,GAC/BE,EAAoB,IAAInB,WAASiB,GACjCG,EAAuC,IAAIjC,oBACtD8B,GAEWI,EAAqB,IAAId,WAASU,G,OCdzCK,EAAiBC,wBAAc,CACnCC,eAAgB,EAChBC,eAAgB,eAGLC,EAAkB,SAAC,GAAqC,IAAnCC,EAAkC,EAAlCA,SAAkC,EACtBC,mBAAS,GADa,mBAC3DJ,EAD2D,KAC3CK,EAD2C,KAE5DC,EAAUC,mBACd,iBAAO,CACLP,iBACAC,eAAgB,WACdI,GAAkB,SAACG,GAAD,OAAoBA,EAAiB,SAG3D,CAACR,IAGH,OACE,cAACF,EAAeW,SAAhB,CAAyB5F,MAAOyF,EAAhC,SACGH,KAODO,EAAgB,SAACC,GAAD,OACpB,cAACC,EAAA,EAAD,2BAAaD,GAAb,aACE,cAACE,EAAA,EAAD,QAISC,EAAc,SAAC,GAAiB,oBAAC,IACtCC,EAASC,cAD4B,EAEQC,cAAnCC,EAF2B,EAEnCC,OAA2BC,EAFQ,EAERA,YAC7BC,EAAWC,cAH0B,EAIflB,oBAAS,GAJM,mBAIpCmB,EAJoC,KAI5BC,EAJ4B,OARbC,qBAAW3B,GAajCG,EALmC,EAKnCA,eAAgBD,EALmB,EAKnBA,eALmB,EAMd0B,cAArBP,EANmC,EAMnCA,OAAQQ,EAN2B,EAM3BA,SAEVC,EAAaC,uBACjB,SAACC,GACCN,GAAU,GACV7B,EACGvB,SAAS,CAAEC,WAAYyD,IACvB3E,MAAK,WAIJ,OAHAqE,GAAU,GACVT,EAAO,gCAAiC,QACxCd,IACOoB,EAAS,QAEjBU,OAAM,SAACC,GAAO,IAAD,IACZR,GAAU,GACVT,GACE,UAAAiB,EAAEC,gBAAF,mBAAYrF,YAAZ,eAAkBsF,SAAU,wCAC5B,cAIR,CAACnB,EAAQd,EAAgBoB,IAGrBc,EAAcC,YAAe,CAAEC,KAAMT,EAAYL,WAEvD,OAAIL,KAAqB,OAACE,QAAD,IAACA,OAAD,EAACA,EAAakB,OAC9B,cAAC,IAAD,CAAUC,GAAG,WAEjBpB,EAKH,cAACqB,EAAA,EAAD,CAAqB3H,MAAOsH,EAA5B,SACE,eAACM,EAAA,EAAD,CACEJ,KAAMT,EACNc,OAAQf,GAAsB,GAC9BgB,QAAS,cAAC,EAAD,IAHX,UAKE,cAACC,EAAA,EAAD,CAAWC,OAAO,KAAKC,UAAQ,IAC/B,cAACF,EAAA,EAAD,CAAWC,OAAO,QAAQE,SAAUC,oBAPMhD,GAJvC,M,qBC5ELiD,GAAa,SAACtC,GAElB,IAAMuC,EAAWC,IACjB,OACE,cAACC,EAAA,EAAD,2BAAczC,GAAd,aACE,cAACuC,EAAD,CACEX,GAAG,cACHc,YAAY,aACZC,SAAU,cAAC,KAAD,UAMLC,GAAS,SAAC5C,GACrB,IAAMuC,EAAWC,IACXK,EAAYC,YAAYC,KAAcC,QAC1C,SAACC,GAAD,MAAgC,UAAlBA,EAAS3K,QAEjB4K,EAAkBC,cAAlBD,cACR,OACE,eAACE,EAAA,EAAD,2BAAUpD,GAAV,eACqB,IAAlBkD,EACC,cAACX,EAAD,CACEX,GAAG,SACHc,YAAa,QAEbC,SAAU,cAAC,IAAD,KADN,SAGJ,MACe,IAAlBO,GACCL,EAAUQ,KAAI,SAACJ,GAAD,OACZ,cAACV,EAAD,CAEEX,GAAE,WAAMqB,EAAS3K,MACjBoK,YACGO,EAASlI,SAAWkI,EAASlI,QAAQuI,OAAUL,EAAS3K,KAE3DqK,SAAUM,EAASM,KAAO,cAACN,EAASM,KAAV,IAAoB,cAAC,IAAD,IAC9CC,QAASxD,EAAMyD,aANVR,EAAS3K,cAcpBoL,GAAW,SAAC1D,GAAD,OACf,cAAC2D,EAAA,EAAD,2BAAY3D,GAAZ,IAAmB4D,SAAU,cAAC,GAAD,QAShBC,GANE,SAAC7D,GAAD,OACf,cAAC,EAAD,UACE,cAAC8D,EAAA,EAAD,2BAAY9D,GAAZ,IAAmB+D,OAAQL,GAAUM,KAAMpB,S,yMCvCzCqB,GAAe,CAAC5B,cAAY6B,YAAU,GAAIC,YAAU,KACpDC,GAAc,CAAEC,QAAS,QACzBC,GAAQ,CAAE,YAAa,SAEvBC,GAAgB,SAAC,GAAiC,IAA/BxC,EAA8B,EAA9BA,OACvB,OAAO,6CAAgBA,EAAM,WAAOA,EAAOzJ,KAAd,KAAwB,OAGjDkM,GAA4B,SAAC,GAK5B,IAJLhF,EAII,EAJJA,SACGQ,EAGC,6BACJ,OACE,8BACGR,EAAS6D,KAAI,SAACoB,GAAD,OAAiBC,uBAAaD,EAAD,eAAczE,UAKzD2E,GAAc,SAACC,GACnB,IADsD,EAChDC,EAAU,IAAIC,IADkC,eAEnCF,GAFmC,IAEtD,2BAA0B,CAAC,IAAhBG,EAAe,QACxB,QAAalM,IAATkM,QAAoClM,IAAdkM,EAAKA,KAA/B,CAGA,GAAIF,EAAQG,IAAID,EAAKA,MACnB,MAAM,GAAN,OAAUA,EAAKA,KAAf,2CAEFF,EAAQI,IAAIF,EAAKA,QATmC,gCAclDG,GAAiB,SAAClF,GACtB,IAAM+B,EAASoD,aAAiBnF,GAC1BU,EAAWC,cACjB,OACE,cAACyE,GAAA,EAAD,CACE9B,MAAM,WACN+B,UAAU,OACV7B,QAAS,kBAAM9C,EAAS,aAAD,OAAcqB,EAAO5E,MAH9C,SAKE,cAAC,KAAD,OAKOmI,GAAkB,SAACtF,GAAgB,IAAD,EACMM,cAAnCC,EAD6B,EACrCC,OAA2BC,EADU,EACVA,YACnC,OAAIF,IAAgC,OAAXE,QAAW,IAAXA,OAAA,EAAAA,EAAatD,MAAO6C,EAAM+B,OAAOwD,QACjD,cAACC,GAAA,EAAD,eAAgBxF,IAElB,yBAGIyF,GAAe,SAACzF,GAC3B,OACE,cAAC0F,GAAA,EAAD,2BAAU1F,GAAV,IAAiB2F,QAAS,GAA1B,SACE,eAACC,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAW3D,OAAO,SAClB,cAAC4D,GAAA,EAAD,CAAc5D,OAAO,WACrB,eAAC,GAAD,WACE,cAAC,GAAD,GAAoB,YACpB,cAAC,GAAD,CAAiBoB,MAAM,QAAW,kBAO/ByC,GAAe,SAAC/F,GAAD,OAC1B,cAACgG,GAAA,EAAD,yBAAMC,MAAO,cAAC,GAAD,CAAelE,OAAQ/B,KAAeA,GAAnD,aACE,eAAC8B,EAAA,EAAD,CAAYpB,SAAS,OAArB,UACE,cAACuB,EAAA,EAAD,CAAWC,OAAO,OAAOE,SAAU6B,KACnC,cAACiC,GAAA,EAAD,CACEhE,OAAO,SACPiE,WAAW,iEAEb,cAACC,GAAA,EAAD,CAAalE,OAAO,oBAAoBE,SAAUC,gBAClD,cAACgE,GAAA,EAAD,CACEnE,OAAO,QACPoE,MAAOhC,GACPlC,SAAU,CAACC,cAAYkE,KAAS5B,GAAa,MAH/C,SAKE,eAAC6B,GAAA,EAAD,CAAoBC,mBAAmB,EAAvC,UACE,cAACxE,EAAA,EAAD,CACEC,OAAO,KACPwE,KAAK,SACLpD,OAAO,EACPgD,MAAOlC,KAET,cAACnC,EAAA,EAAD,CAAWC,OAAO,OAAOoB,MAAM,qBAO5BqD,GAAiB,SAAC3G,GAAD,OAC5B,cAAC4G,GAAA,EAAD,2BAAY5G,GAAZ,aACE,eAAC8B,EAAA,EAAD,CAAYpB,SAAS,OAArB,UACE,cAACuB,EAAA,EAAD,CAAWC,OAAO,OAAOE,SAAU6B,KACnC,cAACiC,GAAA,EAAD,CACEhE,OAAO,SACPiE,WAAW,iEAEb,cAACC,GAAA,EAAD,CACElE,OAAO,oBACPE,SAAUC,cACVwE,aAAc,KAEhB,cAACC,GAAA,EAAD,CACEX,WAAW,kEACXjE,OAAO,WACP2E,aAAc,KACdzE,SAAUC,cACV0E,QAAS,CAAC,CAAE5J,GAAI,KAAM7E,KAAM,cAE9B,cAAC+N,GAAA,EAAD,CAAYnE,OAAO,QAAQE,SAAU,CAACC,eAAtC,SACE,cAACmE,GAAA,EAAD,CAAoBC,mBAAmB,EAAvC,SACE,cAACxE,EAAA,EAAD,CAAWC,OAAO,OAAOoB,MAAM,oB,4ICrH1B0D,GAhCGC,cAAW,SAACC,GAAD,MAAY,CACvCC,KAAM,CACJ9C,QAAS,OACT+C,cAAe,SACfC,UAAW,QACXC,WAAY,SACZC,eAAgB,aAChBC,gBAAiB,WAEnBC,KAAM,CACJC,SAAU,IACVC,UAAW,OAEbC,OAAQ,CACNC,UAAW,UAEbC,OAAQ,CACNC,OAAQ,MACR1D,QAAS,OACTkD,eAAgB,UAElBhE,KAAM,CACJiE,gBAAiBN,EAAMc,QAAQC,UAAUd,MAE3Ce,KAAM,CACJC,QAAS,iBAEXC,QAAS,CACPD,QAAS,qBCdPjB,GAAQmB,aAAYC,MA6EXC,GAnEmB,SAAC,GAM5B,IALLC,EAKI,EALJA,OACAC,EAII,EAJJA,SACAC,EAGI,EAHJA,YACAC,EAEI,EAFJA,WACAC,EACI,EADJA,aAEMC,EAAU7B,KAEhB,OACE,cAAC8B,GAAA,EAAD,CAAe5B,MAAOmB,aAAYnB,IAAlC,SACE,sBAAM6B,YAAU,EAACC,SAAUR,EAA3B,SACE,sBAAKS,UAAWJ,EAAQ1B,KAAxB,UACE,eAAC+B,GAAA,EAAD,CAAMD,UAAWJ,EAAQpB,KAAzB,UACE,qBAAKwB,UAAWJ,EAAQf,OAAxB,SACE,cAACqB,GAAA,EAAD,CAAQF,UAAWJ,EAAQtF,KAA3B,SACE,cAAC,KAAD,QAGJ,cAAC6F,GAAA,EAAD,CACEnD,MAAK,yBAAoB0C,GACzBM,UAAWJ,EAAQjB,SAErB,sBAAKqB,UAAWJ,EAAQX,KAAxB,UACE,8BACE,cAAC,KAAD,CACE/K,GAAG,QACHmG,MAAM,QACNoD,KAAK,QACL2C,SAAU,SAAChI,GAAD,OAAOoH,EAASpH,EAAEiI,OAAOpP,QACnCqP,WAAS,MAIZb,GACC,8BACE,cAAC,KAAD,CACEvL,GAAG,WACHmG,MAAM,WACNoD,KAAK,WACL6C,WAAS,EACTF,SAAU,SAAChI,GAAD,OAAOqH,EAAYrH,EAAEiI,OAAOpP,eAK9C,cAACsP,GAAA,EAAD,CAAaP,UAAWJ,EAAQT,QAAhC,SACE,cAAC,KAAD,CACEqB,QAAQ,YACR/C,KAAK,SACLgD,MAAM,UACNH,WAAS,EAJX,SAMGZ,MAGL,cAACa,GAAA,EAAD,CAAaP,UAAWJ,EAAQT,QAAhC,SACGQ,OAGL,cAACe,GAAA,EAAD,YCjCKC,GAxCD,WAAO,IAAD,EACQnK,mBAAS,IADjB,mBACXkC,EADW,KACJ8G,EADI,OAEchJ,mBAAS,IAFvB,mBAEXvI,EAFW,KAEDwR,EAFC,KAGZvN,EAAQ0O,eACRzJ,EAASC,cACTyJ,EAAUC,cALE,EAOgB5G,cAA1BD,EAPU,EAOVA,cAER,GATkB,EAOK1C,QAET0C,EACZ,OAAO,cAAC,IAAD,CAAUtB,GAAG,eAetB,OACE,cAAC,GAAD,CACE6G,SAAUA,EACVC,YAAaA,EACbC,WAAW,UACXH,OAjBW,SAACnH,GACdA,EAAE2I,iBACF7O,EAAM,CAAEwG,QAAOzK,aAAYkK,OAAM,SAACC,GAAO,IAAD,IAChChJ,EAAG,UAAGgJ,EAAEC,gBAAL,iBAAG,EAAYrF,YAAf,aAAG,EAAkBsF,OAE5BnB,EADE/H,GAGK,gBAFK,aAaduQ,aACE,cAAC,KAAD,CAAQc,MAAM,YAAYlG,QAAS,kBAAMsG,EAAQG,KAAK,cAAtD,yB,uCCpCFC,GAAe,CAAEnC,OAAQ,YAAaoC,SAAU,IAAKzC,SAAU,K,SAkBtD0C,G,uFAAf,WACEC,EACAC,EACAC,EACAnK,GAJF,mBAAAnH,EAAA,8DAMwBJ,IAAlB0R,EANN,wDASED,GAAkB,GATpB,kBAWuBpL,EAASnB,YAAY,CACtCC,gBAAiBuM,EAAcpN,KAZrC,OAWU4H,EAXV,OAcIsF,EAAYtF,EAAK9I,MACjBqO,GAAkB,GAftB,kDAiBUE,EAjBV,KAkBiC,OAAzB,UAAAA,EAAIlJ,gBAAJ,eAAcmJ,SAChBJ,OAAYxR,GACZyR,GAAkB,IAElBlK,EAAO,gBAAiB,SAtB9B,2D,sBA2BA,IAaMsK,GAAuB,SAAC,GAAkB,IAAb1K,EAAY,oBACrC2K,EAA2B3K,EAA3B2K,cAAeC,EAAY5K,EAAZ4K,QACvB,OACE,gCACGD,EACC,eAACE,GAAA,EAAD,CAAYC,UAAU,MAAtB,cAA8BH,EAA9B,OACE,KACgB,IAAnBC,EAAQG,OAAe,2CAA6C,GACpEH,EAAQvH,KAAI,SAAC2H,EAAiBC,GAAlB,OACX,gCACE,eAACJ,GAAA,EAAD,WACGD,EAAQG,OAAS,EAAjB,UAAwBE,EAAQ,EAAhC,MAAwC,GACxCD,EAAWE,gBAEd,eAACL,GAAA,EAAD,CAAYpB,QAAQ,QAApB,UACGuB,EAAWA,YACV,kDACF,uBACCA,EAAWG,WAEd,iCAOGC,GAAiB,WAC5B,OACE,cAAClC,GAAA,EAAD,CAAM5C,MAAO4D,GAAcT,QAAQ,WAAnC,SACE,eAAC4B,GAAA,EAAD,gEAC2C,IACzC,cAACC,GAAA,EAAD,CAAM1J,GAAG,YAAT,qBAFF,gHASO2J,GAAW,SAAC,GAAiB,oBAAC,IAAD,EAChC5O,EAAe6O,cAAf7O,WADgC,EAEawG,cAA7CD,EAFgC,EAEhCA,cAAuBuI,EAFS,EAEjBjL,OACjBJ,EAASC,cACTkK,EApGuB,SAAC5N,GAAwB,IAAD,EACX8C,wBACxC5G,GAFmD,mBAC9C0R,EAD8C,KAC/BmB,EAD+B,KAcrD,OAVAC,qBAAU,WAAM,4CACd,4BAAA1S,EAAA,sEAC8BgG,EAAkBvC,yBAAyB,CACrEC,eAFJ,OACQ4N,EADR,OAIEmB,EAAiBnB,EAActO,MAJjC,4CADc,uBAAC,WAAD,wBAOd2P,KACC,CAACjP,IAEG4N,EAsFesB,CAAuBlP,GAJL,EAKF8C,oBAAS,GALP,mBAKjCqM,EALiC,KAKpBC,EALoB,OApDjB,SAACxB,GAA8C,IAAD,EACrC9K,wBAC9B5G,GAFmE,mBAC9DmT,EAD8D,KACpD3B,EADoD,OAIzB5K,oBAAkB,GAJO,mBAI9DwM,EAJ8D,KAI9C3B,EAJ8C,KAK/DlK,EAASC,cAKf,OAJAsL,qBAAU,WACRvB,GAAcC,EAAaC,EAAmBC,EAAenK,KAC5D,CAACmK,EAAenK,IAEZ,CAAE4L,WAAU3B,cAAa4B,iBAAgB3B,qBAiD9C4B,CAAiB3B,GADXyB,EANgC,EAMhCA,SAAU3B,EANsB,EAMtBA,YAAa4B,EANS,EAMTA,eAAgB3B,EANP,EAMOA,kBAE/C,QAAsBzR,IAAlB0R,EACF,OAAO,0CAET,IAAM4B,EAAe,SAACjO,GACpB6N,GAAe,GACf7M,EAASjB,WAAW,CAAED,gBAAiBuM,EAAcpN,GAAIe,aAE3D,IAAuB,IAAnB+N,EACF,OACE,eAAC/C,GAAA,EAAD,WACGuC,IAAsBvI,EAAgB,cAAC,GAAD,IAAqB,KAC5D,cAACmI,GAAA,EAAD,yBAIN,QAAiBxS,IAAbmT,EACF,OACE,eAAC9C,GAAA,EAAD,WACGuC,IAAsBvI,EAAgB,cAAC,GAAD,IAAqB,KAC5D,cAACmI,GAAA,EAAD,8DAIN,IAAMe,EAAmBJ,EAASI,YAC5BxB,GAAqB,OAAXwB,QAAW,IAAXA,OAAA,EAAAA,EAAaxB,UAAW,GAClCD,EAAa,OAAGyB,QAAH,IAAGA,GAAH,UAAGA,EAAazB,qBAAhB,aAAG,EAA4B0B,IAClD,OACE,eAACnD,GAAA,EAAD,WACGuC,IAAsBvI,EAAgB,cAAC,GAAD,IAAqB,KAC5D,eAACgG,GAAA,EAAD,CAAMO,QAAQ,WAAWnD,MAAO4D,GAAhC,UACE,eAACmB,GAAA,EAAD,WACE,cAACR,GAAA,EAAD,CAAYyB,cAAY,IACxB,cAACzB,GAAA,EAAD,CAAYpB,QAAQ,KAAKqB,UAAU,MAAnC,SACGkB,EAASjH,QAEK,IAAhB+G,EACC,cAAC,GAAD,CACElB,QAASA,EACTD,cAAeA,IAEf,QAEN,cAAC,KAAD,WACmB,IAAhBmB,EACC,gCACE,cAAC,KAAD,CACEpC,MAAM,UACN6C,KAAK,QACL/I,QAAS,kBAAM2I,EAAa,IAH9B,kBAOA,cAAC,KAAD,CACEzC,MAAM,UACN6C,KAAK,QACL/I,QAAS,kBAAM2I,EAAa,IAH9B,oBAOA,cAAC,KAAD,CACEzC,MAAM,UACN6C,KAAK,QACL/I,QAAS,kBAAM2I,EAAa,IAH9B,0BASF,cAAC,KAAD,CACEzC,MAAM,UACNlG,QAAS,WACPuI,GAAe,GACf3B,GACEC,EACAC,EACAC,EACAnK,IARN,2BC7HGoM,GAhDE,WAAO,IAAD,EACK/M,mBAAS,IADd,mBACdkC,EADc,KACP8G,EADO,OAEWhJ,mBAAS,IAFpB,mBAEdvI,EAFc,KAEJwR,EAFI,KAGftI,EAASC,cACTyJ,EAAUC,cAJK,EAKa5G,cAA1BD,EALa,EAKbA,cAER,GAPqB,EAKE1C,QAET0C,EACZ,OAAO,cAAC,IAAD,CAAUtB,GAAG,eAGtB,IAAM4G,EAAM,uCAAG,WAAOnH,GAAP,qBAAApI,EAAA,6DACboI,EAAE2I,iBACIyC,EAAW,CAAE9K,QAAOzK,YAFb,kBAIY6H,EAAQ7C,SAAS,CACtCC,WAAYsQ,IALH,cAOExQ,KAAKkB,KAChBiD,EAAO,8CAA+C,WACtD0J,EAAQG,KAAK,WATJ,gDAYLO,EAZK,KAaLkC,EAbK,UAaMlC,EAAIlJ,gBAbV,aAaM,EAAcrF,KAAKsF,OAAO,GAAGlJ,IAE5C+H,EADEsM,GAGK,gBAFU,SAfR,yDAAH,sDAsBZ,OACE,cAAC,GAAD,CACEjE,SAAUA,EACVC,YAAaA,EACbC,WAAW,WACXH,OAAQA,EACRI,aACE,cAAC,KAAD,CAAQc,MAAM,YAAYlG,QAAS,kBAAMsG,EAAQG,KAAK,WAAtD,wB,UCpCK0C,GAAW,SAAC3M,GAAD,OACtB,cAAC0F,GAAA,EAAD,2BAAU1F,GAAV,aACE,eAAC4F,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAW3D,OAAO,OAClB,cAAC0K,GAAA,EAAD,CAAY1K,OAAO,UACnB,cAAC4D,GAAA,EAAD,CAAc5D,OAAO,cACrB,cAAC4D,GAAA,EAAD,CAAc5D,OAAO,iBACrB,cAACsD,GAAA,EAAD,WAKOqH,GAAW,SAAC7M,GAAD,OACtB,cAACgG,GAAA,EAAD,2BAAUhG,GAAV,aACE,eAAC8B,EAAA,EAAD,WACE,cAACG,EAAA,EAAD,CAAWC,OAAO,OAClB,cAACD,EAAA,EAAD,CAAWC,OAAO,UAClB,cAACgE,GAAA,EAAD,CAAchE,OAAO,cACrB,cAACgE,GAAA,EAAD,CAAchE,OAAO,wBCYZ4K,GAnCM,CACnB3R,MAAM,WAAD,4BAAE,mCAAAlC,EAAA,6DAAS0I,EAAT,EAASA,MAAOzK,EAAhB,EAAgBA,SACfuV,EAAW,CAAExV,SAAU0K,EAAOzK,YAD/B,SAEc6H,EAAQ5D,MAAMsR,GAF5B,cAECM,EAFD,OAGLnO,aAAaoO,QAAQ,QAASD,EAAK9Q,KAAKgR,cAHnC,kBAIEC,QAAQC,WAJV,2CAAF,mDAAC,GAMNC,OAAQ,WAGN,OAFAxO,aAAayO,WAAW,SACxBzO,aAAayO,WAAW,eACjBH,QAAQC,WAEjBG,WAAY,SAACC,GACX,IAAM9C,EAAS8C,EAAM9C,OACrB,OAAe,MAAXA,GAA6B,MAAXA,GACpB7L,aAAayO,WAAW,SACxBzO,aAAayO,WAAW,eACjBH,QAAQM,UAEVN,QAAQC,WAEjBM,UAAW,WACT,OAAO7O,aAAaC,QAAQ,SAAWqO,QAAQC,UAAYD,QAAQM,UAErEE,eAAgB,WACd,IAAMC,EAAOpT,KAAKqT,MAAMhP,aAAaC,QAAQ,gBAAkB,MAC/D,OAAO8O,EAAOT,QAAQC,QAAQQ,GAAQT,QAAQM,UAEhDK,YAAY,WAAD,4BAAE,4BAAA5U,EAAA,sEACQ+F,EAAQxB,KADhB,cACLuP,EADK,OAEXnO,aAAaoO,QAAQ,cAAezS,KAAKC,UAAUuS,EAAK9Q,OAF7C,kBAGJ8Q,EAAK9Q,MAHD,2CAAF,kDAAC,I,qBCjCD6R,GAAY,SAAC9N,GAAgB,IAAD,EACImD,cAAnC4K,EAD+B,EAC/BA,QAASvN,EADsB,EACtBA,OAAQ0C,EADc,EACdA,cAEzB,OAAI6K,EACK,0CAELvN,EACE0C,EACK,cAAC,IAAD,CAAUtB,GAAG,eAEb,cAAC,IAAD,CAAUA,GAAG,WAGjB,yBCaHoM,GAAeC,YAAmB,GAAD,OAAI7W,EAAJ,YAZpB,SAACgC,GAAoC,IAAvB2B,EAAsB,uDAAP,GAS9C,OARAA,EAAQmT,KAAO,CACbhL,eAAe,EACfiL,MAAM,UAAD,OAAYvP,aAAaC,QAAQ,WAEpCzF,EAAIgV,SAAS,YAAiC,QAAnBrT,EAAQY,SAErCZ,EAAQY,OAAS,SAEZ0S,IAAWC,UAAUlV,EAAK2B,MAK7BwT,GAAe,CACnB,cAACC,EAAA,EAAD,CAAoBC,OAAK,EAACC,KAAK,YAAY5D,UAAW0B,GAAUmC,UAAQ,IACxE,cAAC,IAAD,CAAwBD,KAAK,cAAcE,OAAQ,kBAAM,cAAC,EAAD,MAA9C,cACX,cAAC,IAAD,CAEEF,KAAK,wBACLE,OAAQ,kBAAM,cAAC,GAAD,MAFV,aAyCOC,GAnCH,WACV,OACE,cAACC,EAAA,EAAD,CACEd,aAAcA,GACdlB,aAAcA,GACdiC,UAAWC,GACXT,aAAcA,GACdzE,QAASmF,cACTC,OAAQrL,GANV,SAQG,SAACpD,GAAD,MAAiB,CAChB,cAAC0O,EAAA,EAAD,CAAU7W,KAAK,QAAQ8W,KAAMtB,MACA,IAA7BrN,EAAY4O,aACV,cAACF,EAAA,EAAD,CACEpU,QAAS,CAAEuI,MAAO,SAClBhL,KAAK,QACL8W,KAAMzC,GACN2C,KAAMzC,GACNtJ,KAAMgM,MAEN,KAEJ,cAACJ,EAAA,EAAD,CACE7W,KAAK,YACLyC,QAAS,CAAEuI,MAAO,aAClB8L,KAAM3J,GACN6J,KAAMvJ,GACNyJ,OAAQ7I,GACRpD,KAAMkM,YCvDDC,GAZS,SAACC,GACnBA,GAAeA,aAAuBC,UACxC,8BAAqBpT,MAAK,YAAkD,IAA/CqT,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC3DJ,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAQN,OCHdO,IAAStB,OACP,cAAC,IAAMuB,WAAP,UACE,cAAC,GAAD,MAEF9R,SAAS+R,eAAe,SAM1BV,O","file":"static/js/main.19cc6d29.chunk.js","sourcesContent":["/* tslint:disable */\n/* eslint-disable */\n/**\n * Word Cabinet\n * Word Cabinet API\n *\n * The version of the OpenAPI document: 0.1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nexport * from \"./api\";\nexport * from \"./configuration\";\nexport * from \"./models\";\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Word Cabinet\n * Word Cabinet API\n *\n * The version of the OpenAPI document: 0.1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nexport interface ConfigurationParameters {\n apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise);\n username?: string;\n password?: string;\n accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise);\n basePath?: string;\n baseOptions?: any;\n formDataCtor?: new () => any;\n}\n\nexport class Configuration {\n /**\n * parameter for apiKey security\n * @param name security name\n * @memberof Configuration\n */\n apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise);\n /**\n * parameter for basic security\n *\n * @type {string}\n * @memberof Configuration\n */\n username?: string;\n /**\n * parameter for basic security\n *\n * @type {string}\n * @memberof Configuration\n */\n password?: string;\n /**\n * parameter for oauth2 security\n * @param name security name\n * @param scopes oauth2 scope\n * @memberof Configuration\n */\n accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise);\n /**\n * override base path\n *\n * @type {string}\n * @memberof Configuration\n */\n basePath?: string;\n /**\n * base options for axios calls\n *\n * @type {any}\n * @memberof Configuration\n */\n baseOptions?: any;\n /**\n * The FormData constructor that will be used to create multipart form data\n * requests. You can inject this here so that execution environments that\n * do not support the FormData class can still run the generated client.\n *\n * @type {new () => FormData}\n */\n formDataCtor?: new () => any;\n\n constructor(param: ConfigurationParameters = {}) {\n this.apiKey = param.apiKey;\n this.username = param.username;\n this.password = param.password;\n this.accessToken = param.accessToken;\n this.basePath = param.basePath;\n this.baseOptions = param.baseOptions;\n this.formDataCtor = param.formDataCtor;\n }\n\n /**\n * Check if the given MIME is a JSON MIME.\n * JSON MIME examples:\n * application/json\n * application/json; charset=UTF8\n * APPLICATION/JSON\n * application/vnd.company+json\n * @param mime - MIME (Multipurpose Internet Mail Extensions)\n * @return True if the given MIME is JSON, false otherwise.\n */\n public isJsonMime(mime: string): boolean {\n const jsonMime: RegExp = new RegExp('^(application\\/json|[^;/ \\t]+\\/[^;/ \\t]+[+]json)[ \\t]*(;.*)?$', 'i');\n return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');\n }\n}\n","export * from './httpvalidation-error';\nexport * from './review-session';\nexport * from './user';\nexport * from './user-create';\nexport * from './user-update';\nexport * from './validation-error';\nexport * from './word';\nexport * from './word-update';\nexport * from './word-with-definition';\nexport * from './wordlist';\nexport * from './wordlist-create';\nexport * from './wordlist-update';\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Word Cabinet\n * Word Cabinet API\n *\n * The version of the OpenAPI document: 0.1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport { Configuration } from \"./configuration\";\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport globalAxios, { AxiosPromise, AxiosInstance } from 'axios';\n\nexport const BASE_PATH = \"http://localhost\".replace(/\\/+$/, \"\");\n\n/**\n *\n * @export\n */\nexport const COLLECTION_FORMATS = {\n csv: \",\",\n ssv: \" \",\n tsv: \"\\t\",\n pipes: \"|\",\n};\n\n/**\n *\n * @export\n * @interface RequestArgs\n */\nexport interface RequestArgs {\n url: string;\n options: any;\n}\n\n/**\n *\n * @export\n * @class BaseAPI\n */\nexport class BaseAPI {\n protected configuration: Configuration | undefined;\n\n constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) {\n if (configuration) {\n this.configuration = configuration;\n this.basePath = configuration.basePath || this.basePath;\n }\n }\n};\n\n/**\n *\n * @export\n * @class RequiredError\n * @extends {Error}\n */\nexport class RequiredError extends Error {\n name: \"RequiredError\" = \"RequiredError\";\n constructor(public field: string, msg?: string) {\n super(msg);\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Word Cabinet\n * Word Cabinet API\n *\n * The version of the OpenAPI document: 0.1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport { Configuration } from \"./configuration\";\nimport { RequiredError, RequestArgs } from \"./base\";\nimport { AxiosInstance } from 'axios';\n\n/**\n *\n * @export\n */\nexport const DUMMY_BASE_URL = 'https://example.com'\n\n/**\n *\n * @throws {RequiredError}\n * @export\n */\nexport const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) {\n if (paramValue === null || paramValue === undefined) {\n throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`);\n }\n}\n\n/**\n *\n * @export\n */\nexport const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) {\n if (configuration && configuration.apiKey) {\n const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n ? await configuration.apiKey(keyParamName)\n : await configuration.apiKey;\n object[keyParamName] = localVarApiKeyValue;\n }\n}\n\n/**\n *\n * @export\n */\nexport const setBasicAuthToObject = function (object: any, configuration?: Configuration) {\n if (configuration && (configuration.username || configuration.password)) {\n object[\"auth\"] = { username: configuration.username, password: configuration.password };\n }\n}\n\n/**\n *\n * @export\n */\nexport const setBearerAuthToObject = async function (object: any, configuration?: Configuration) {\n if (configuration && configuration.accessToken) {\n const accessToken = typeof configuration.accessToken === 'function'\n ? await configuration.accessToken()\n : await configuration.accessToken;\n object[\"Authorization\"] = \"Bearer \" + accessToken;\n }\n}\n\n/**\n *\n * @export\n */\nexport const setOAuthToObject = async function (object: any, name: string, scopes: string[], configuration?: Configuration) {\n if (configuration && configuration.accessToken) {\n const localVarAccessTokenValue = typeof configuration.accessToken === 'function'\n ? await configuration.accessToken(name, scopes)\n : await configuration.accessToken;\n object[\"Authorization\"] = \"Bearer \" + localVarAccessTokenValue;\n }\n}\n\n/**\n *\n * @export\n */\nexport const setSearchParams = function (url: URL, ...objects: any[]) {\n const searchParams = new URLSearchParams(url.search);\n for (const object of objects) {\n for (const key in object) {\n if (Array.isArray(object[key])) {\n searchParams.delete(key);\n for (const item of object[key]) {\n searchParams.append(key, item);\n }\n } else {\n searchParams.set(key, object[key]);\n }\n }\n }\n url.search = searchParams.toString();\n}\n\n/**\n *\n * @export\n */\nexport const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) {\n const nonString = typeof value !== 'string';\n const needsSerialization = nonString && configuration && configuration.isJsonMime\n ? configuration.isJsonMime(requestOptions.headers['Content-Type'])\n : nonString;\n return needsSerialization\n ? JSON.stringify(value !== undefined ? value : {})\n : (value || \"\");\n}\n\n/**\n *\n * @export\n */\nexport const toPathString = function (url: URL) {\n return url.pathname + url.search + url.hash\n}\n\n/**\n *\n * @export\n */\nexport const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) {\n return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n const axiosRequestArgs = {...axiosArgs.options, url: (configuration?.basePath || basePath) + axiosArgs.url};\n return axios.request(axiosRequestArgs);\n };\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Word Cabinet\n * Word Cabinet API\n *\n * The version of the OpenAPI document: 0.1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport globalAxios, { AxiosPromise, AxiosInstance } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common';\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\n// @ts-ignore\nimport { HTTPValidationError } from '../models';\n// @ts-ignore\nimport { User } from '../models';\n// @ts-ignore\nimport { UserCreate } from '../models';\n/**\n * AuthApi - axios parameter creator\n * @export\n */\nexport const AuthApiAxiosParamCreator = function (configuration?: Configuration) {\n return {\n /**\n * \n * @summary Login\n * @param {string} username \n * @param {string} password \n * @param {string} [grantType] \n * @param {string} [scope] \n * @param {string} [clientId] \n * @param {string} [clientSecret] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n login: async (username: string, password: string, grantType?: string, scope?: string, clientId?: string, clientSecret?: string, options: any = {}): Promise => {\n // verify required parameter 'username' is not null or undefined\n assertParamExists('login', 'username', username)\n // verify required parameter 'password' is not null or undefined\n assertParamExists('login', 'password', password)\n const localVarPath = `/api/v1/auth/jwt/login`;\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n const localVarFormParams = new URLSearchParams();\n\n\n if (grantType !== undefined) { \n localVarFormParams.set('grant_type', grantType as any);\n }\n \n if (username !== undefined) { \n localVarFormParams.set('username', username as any);\n }\n \n if (password !== undefined) { \n localVarFormParams.set('password', password as any);\n }\n \n if (scope !== undefined) { \n localVarFormParams.set('scope', scope as any);\n }\n \n if (clientId !== undefined) { \n localVarFormParams.set('client_id', clientId as any);\n }\n \n if (clientSecret !== undefined) { \n localVarFormParams.set('client_secret', clientSecret as any);\n }\n \n \n localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded';\n \n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n localVarRequestOptions.data = localVarFormParams.toString();\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Register\n * @param {UserCreate} userCreate \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n register: async (userCreate: UserCreate, options: any = {}): Promise => {\n // verify required parameter 'userCreate' is not null or undefined\n assertParamExists('register', 'userCreate', userCreate)\n const localVarPath = `/api/v1/auth/register`;\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n\n \n localVarHeaderParameter['Content-Type'] = 'application/json';\n\n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n localVarRequestOptions.data = serializeDataIfNeeded(userCreate, localVarRequestOptions, configuration)\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n }\n};\n\n/**\n * AuthApi - functional programming interface\n * @export\n */\nexport const AuthApiFp = function(configuration?: Configuration) {\n const localVarAxiosParamCreator = AuthApiAxiosParamCreator(configuration)\n return {\n /**\n * \n * @summary Login\n * @param {string} username \n * @param {string} password \n * @param {string} [grantType] \n * @param {string} [scope] \n * @param {string} [clientId] \n * @param {string} [clientSecret] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async login(username: string, password: string, grantType?: string, scope?: string, clientId?: string, clientSecret?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.login(username, password, grantType, scope, clientId, clientSecret, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Register\n * @param {UserCreate} userCreate \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async register(userCreate: UserCreate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.register(userCreate, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n }\n};\n\n/**\n * AuthApi - factory interface\n * @export\n */\nexport const AuthApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n const localVarFp = AuthApiFp(configuration)\n return {\n /**\n * \n * @summary Login\n * @param {string} username \n * @param {string} password \n * @param {string} [grantType] \n * @param {string} [scope] \n * @param {string} [clientId] \n * @param {string} [clientSecret] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n login(username: string, password: string, grantType?: string, scope?: string, clientId?: string, clientSecret?: string, options?: any): AxiosPromise {\n return localVarFp.login(username, password, grantType, scope, clientId, clientSecret, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Register\n * @param {UserCreate} userCreate \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n register(userCreate: UserCreate, options?: any): AxiosPromise {\n return localVarFp.register(userCreate, options).then((request) => request(axios, basePath));\n },\n };\n};\n\n/**\n * Request parameters for login operation in AuthApi.\n * @export\n * @interface AuthApiLoginRequest\n */\nexport interface AuthApiLoginRequest {\n /**\n * \n * @type {string}\n * @memberof AuthApiLogin\n */\n readonly username: string\n\n /**\n * \n * @type {string}\n * @memberof AuthApiLogin\n */\n readonly password: string\n\n /**\n * \n * @type {string}\n * @memberof AuthApiLogin\n */\n readonly grantType?: string\n\n /**\n * \n * @type {string}\n * @memberof AuthApiLogin\n */\n readonly scope?: string\n\n /**\n * \n * @type {string}\n * @memberof AuthApiLogin\n */\n readonly clientId?: string\n\n /**\n * \n * @type {string}\n * @memberof AuthApiLogin\n */\n readonly clientSecret?: string\n}\n\n/**\n * Request parameters for register operation in AuthApi.\n * @export\n * @interface AuthApiRegisterRequest\n */\nexport interface AuthApiRegisterRequest {\n /**\n * \n * @type {UserCreate}\n * @memberof AuthApiRegister\n */\n readonly userCreate: UserCreate\n}\n\n/**\n * AuthApi - object-oriented interface\n * @export\n * @class AuthApi\n * @extends {BaseAPI}\n */\nexport class AuthApi extends BaseAPI {\n /**\n * \n * @summary Login\n * @param {AuthApiLoginRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof AuthApi\n */\n public login(requestParameters: AuthApiLoginRequest, options?: any) {\n return AuthApiFp(this.configuration).login(requestParameters.username, requestParameters.password, requestParameters.grantType, requestParameters.scope, requestParameters.clientId, requestParameters.clientSecret, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Register\n * @param {AuthApiRegisterRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof AuthApi\n */\n public register(requestParameters: AuthApiRegisterRequest, options?: any) {\n return AuthApiFp(this.configuration).register(requestParameters.userCreate, options).then((request) => request(this.axios, this.basePath));\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Word Cabinet\n * Word Cabinet API\n *\n * The version of the OpenAPI document: 0.1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport globalAxios, { AxiosPromise, AxiosInstance } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common';\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\n// @ts-ignore\nimport { HTTPValidationError } from '../models';\n// @ts-ignore\nimport { ReviewSession } from '../models';\n/**\n * ReviewSessionsApi - axios parameter creator\n * @export\n */\nexport const ReviewSessionsApiAxiosParamCreator = function (configuration?: Configuration) {\n return {\n /**\n * \n * @summary Get Or Create Review Session\n * @param {string} wordlistId \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n getOrCreateReviewSession: async (wordlistId: string, options: any = {}): Promise => {\n // verify required parameter 'wordlistId' is not null or undefined\n assertParamExists('getOrCreateReviewSession', 'wordlistId', wordlistId)\n const localVarPath = `/api/v1/review_sessions/{wordlist_id}`\n .replace(`{${\"wordlist_id\"}}`, encodeURIComponent(String(wordlistId)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication OAuth2PasswordBearer required\n // oauth required\n await setOAuthToObject(localVarHeaderParameter, \"OAuth2PasswordBearer\", [], configuration)\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n }\n};\n\n/**\n * ReviewSessionsApi - functional programming interface\n * @export\n */\nexport const ReviewSessionsApiFp = function(configuration?: Configuration) {\n const localVarAxiosParamCreator = ReviewSessionsApiAxiosParamCreator(configuration)\n return {\n /**\n * \n * @summary Get Or Create Review Session\n * @param {string} wordlistId \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async getOrCreateReviewSession(wordlistId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.getOrCreateReviewSession(wordlistId, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n }\n};\n\n/**\n * ReviewSessionsApi - factory interface\n * @export\n */\nexport const ReviewSessionsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n const localVarFp = ReviewSessionsApiFp(configuration)\n return {\n /**\n * \n * @summary Get Or Create Review Session\n * @param {string} wordlistId \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n getOrCreateReviewSession(wordlistId: string, options?: any): AxiosPromise {\n return localVarFp.getOrCreateReviewSession(wordlistId, options).then((request) => request(axios, basePath));\n },\n };\n};\n\n/**\n * Request parameters for getOrCreateReviewSession operation in ReviewSessionsApi.\n * @export\n * @interface ReviewSessionsApiGetOrCreateReviewSessionRequest\n */\nexport interface ReviewSessionsApiGetOrCreateReviewSessionRequest {\n /**\n * \n * @type {string}\n * @memberof ReviewSessionsApiGetOrCreateReviewSession\n */\n readonly wordlistId: string\n}\n\n/**\n * ReviewSessionsApi - object-oriented interface\n * @export\n * @class ReviewSessionsApi\n * @extends {BaseAPI}\n */\nexport class ReviewSessionsApi extends BaseAPI {\n /**\n * \n * @summary Get Or Create Review Session\n * @param {ReviewSessionsApiGetOrCreateReviewSessionRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof ReviewSessionsApi\n */\n public getOrCreateReviewSession(requestParameters: ReviewSessionsApiGetOrCreateReviewSessionRequest, options?: any) {\n return ReviewSessionsApiFp(this.configuration).getOrCreateReviewSession(requestParameters.wordlistId, options).then((request) => request(this.axios, this.basePath));\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Word Cabinet\n * Word Cabinet API\n *\n * The version of the OpenAPI document: 0.1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport globalAxios, { AxiosPromise, AxiosInstance } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common';\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\n// @ts-ignore\nimport { HTTPValidationError } from '../models';\n// @ts-ignore\nimport { User } from '../models';\n// @ts-ignore\nimport { UserUpdate } from '../models';\n/**\n * UsersApi - axios parameter creator\n * @export\n */\nexport const UsersApiAxiosParamCreator = function (configuration?: Configuration) {\n return {\n /**\n * \n * @summary Delete User\n * @param {string} id \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n deleteUser: async (id: string, options: any = {}): Promise => {\n // verify required parameter 'id' is not null or undefined\n assertParamExists('deleteUser', 'id', id)\n const localVarPath = `/api/v1/users/{id}`\n .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication OAuth2PasswordBearer required\n // oauth required\n await setOAuthToObject(localVarHeaderParameter, \"OAuth2PasswordBearer\", [], configuration)\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Get User\n * @param {string} id \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n getUser: async (id: string, options: any = {}): Promise => {\n // verify required parameter 'id' is not null or undefined\n assertParamExists('getUser', 'id', id)\n const localVarPath = `/api/v1/users/{id}`\n .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication OAuth2PasswordBearer required\n // oauth required\n await setOAuthToObject(localVarHeaderParameter, \"OAuth2PasswordBearer\", [], configuration)\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Get Users\n * @param {number} [skip] \n * @param {number} [limit] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n getUsers: async (skip?: number, limit?: number, options: any = {}): Promise => {\n const localVarPath = `/api/v1/users`;\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication OAuth2PasswordBearer required\n // oauth required\n await setOAuthToObject(localVarHeaderParameter, \"OAuth2PasswordBearer\", [], configuration)\n\n if (skip !== undefined) {\n localVarQueryParameter['skip'] = skip;\n }\n\n if (limit !== undefined) {\n localVarQueryParameter['limit'] = limit;\n }\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Me\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n me: async (options: any = {}): Promise => {\n const localVarPath = `/api/v1/users/me`;\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication OAuth2PasswordBearer required\n // oauth required\n await setOAuthToObject(localVarHeaderParameter, \"OAuth2PasswordBearer\", [], configuration)\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Update Me\n * @param {UserUpdate} userUpdate \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n updateMe: async (userUpdate: UserUpdate, options: any = {}): Promise => {\n // verify required parameter 'userUpdate' is not null or undefined\n assertParamExists('updateMe', 'userUpdate', userUpdate)\n const localVarPath = `/api/v1/users/me`;\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication OAuth2PasswordBearer required\n // oauth required\n await setOAuthToObject(localVarHeaderParameter, \"OAuth2PasswordBearer\", [], configuration)\n\n\n \n localVarHeaderParameter['Content-Type'] = 'application/json';\n\n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n localVarRequestOptions.data = serializeDataIfNeeded(userUpdate, localVarRequestOptions, configuration)\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Update User\n * @param {string} id \n * @param {UserUpdate} userUpdate \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n updateUser: async (id: string, userUpdate: UserUpdate, options: any = {}): Promise => {\n // verify required parameter 'id' is not null or undefined\n assertParamExists('updateUser', 'id', id)\n // verify required parameter 'userUpdate' is not null or undefined\n assertParamExists('updateUser', 'userUpdate', userUpdate)\n const localVarPath = `/api/v1/users/{id}`\n .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication OAuth2PasswordBearer required\n // oauth required\n await setOAuthToObject(localVarHeaderParameter, \"OAuth2PasswordBearer\", [], configuration)\n\n\n \n localVarHeaderParameter['Content-Type'] = 'application/json';\n\n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n localVarRequestOptions.data = serializeDataIfNeeded(userUpdate, localVarRequestOptions, configuration)\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n }\n};\n\n/**\n * UsersApi - functional programming interface\n * @export\n */\nexport const UsersApiFp = function(configuration?: Configuration) {\n const localVarAxiosParamCreator = UsersApiAxiosParamCreator(configuration)\n return {\n /**\n * \n * @summary Delete User\n * @param {string} id \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async deleteUser(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.deleteUser(id, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Get User\n * @param {string} id \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async getUser(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.getUser(id, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Get Users\n * @param {number} [skip] \n * @param {number} [limit] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async getUsers(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.getUsers(skip, limit, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Me\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async me(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.me(options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Update Me\n * @param {UserUpdate} userUpdate \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async updateMe(userUpdate: UserUpdate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.updateMe(userUpdate, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Update User\n * @param {string} id \n * @param {UserUpdate} userUpdate \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async updateUser(id: string, userUpdate: UserUpdate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.updateUser(id, userUpdate, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n }\n};\n\n/**\n * UsersApi - factory interface\n * @export\n */\nexport const UsersApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n const localVarFp = UsersApiFp(configuration)\n return {\n /**\n * \n * @summary Delete User\n * @param {string} id \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n deleteUser(id: string, options?: any): AxiosPromise {\n return localVarFp.deleteUser(id, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Get User\n * @param {string} id \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n getUser(id: string, options?: any): AxiosPromise {\n return localVarFp.getUser(id, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Get Users\n * @param {number} [skip] \n * @param {number} [limit] \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n getUsers(skip?: number, limit?: number, options?: any): AxiosPromise> {\n return localVarFp.getUsers(skip, limit, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Me\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n me(options?: any): AxiosPromise {\n return localVarFp.me(options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Update Me\n * @param {UserUpdate} userUpdate \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n updateMe(userUpdate: UserUpdate, options?: any): AxiosPromise {\n return localVarFp.updateMe(userUpdate, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Update User\n * @param {string} id \n * @param {UserUpdate} userUpdate \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n updateUser(id: string, userUpdate: UserUpdate, options?: any): AxiosPromise {\n return localVarFp.updateUser(id, userUpdate, options).then((request) => request(axios, basePath));\n },\n };\n};\n\n/**\n * Request parameters for deleteUser operation in UsersApi.\n * @export\n * @interface UsersApiDeleteUserRequest\n */\nexport interface UsersApiDeleteUserRequest {\n /**\n * \n * @type {string}\n * @memberof UsersApiDeleteUser\n */\n readonly id: string\n}\n\n/**\n * Request parameters for getUser operation in UsersApi.\n * @export\n * @interface UsersApiGetUserRequest\n */\nexport interface UsersApiGetUserRequest {\n /**\n * \n * @type {string}\n * @memberof UsersApiGetUser\n */\n readonly id: string\n}\n\n/**\n * Request parameters for getUsers operation in UsersApi.\n * @export\n * @interface UsersApiGetUsersRequest\n */\nexport interface UsersApiGetUsersRequest {\n /**\n * \n * @type {number}\n * @memberof UsersApiGetUsers\n */\n readonly skip?: number\n\n /**\n * \n * @type {number}\n * @memberof UsersApiGetUsers\n */\n readonly limit?: number\n}\n\n/**\n * Request parameters for updateMe operation in UsersApi.\n * @export\n * @interface UsersApiUpdateMeRequest\n */\nexport interface UsersApiUpdateMeRequest {\n /**\n * \n * @type {UserUpdate}\n * @memberof UsersApiUpdateMe\n */\n readonly userUpdate: UserUpdate\n}\n\n/**\n * Request parameters for updateUser operation in UsersApi.\n * @export\n * @interface UsersApiUpdateUserRequest\n */\nexport interface UsersApiUpdateUserRequest {\n /**\n * \n * @type {string}\n * @memberof UsersApiUpdateUser\n */\n readonly id: string\n\n /**\n * \n * @type {UserUpdate}\n * @memberof UsersApiUpdateUser\n */\n readonly userUpdate: UserUpdate\n}\n\n/**\n * UsersApi - object-oriented interface\n * @export\n * @class UsersApi\n * @extends {BaseAPI}\n */\nexport class UsersApi extends BaseAPI {\n /**\n * \n * @summary Delete User\n * @param {UsersApiDeleteUserRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof UsersApi\n */\n public deleteUser(requestParameters: UsersApiDeleteUserRequest, options?: any) {\n return UsersApiFp(this.configuration).deleteUser(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Get User\n * @param {UsersApiGetUserRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof UsersApi\n */\n public getUser(requestParameters: UsersApiGetUserRequest, options?: any) {\n return UsersApiFp(this.configuration).getUser(requestParameters.id, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Get Users\n * @param {UsersApiGetUsersRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof UsersApi\n */\n public getUsers(requestParameters: UsersApiGetUsersRequest = {}, options?: any) {\n return UsersApiFp(this.configuration).getUsers(requestParameters.skip, requestParameters.limit, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Me\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof UsersApi\n */\n public me(options?: any) {\n return UsersApiFp(this.configuration).me(options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Update Me\n * @param {UsersApiUpdateMeRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof UsersApi\n */\n public updateMe(requestParameters: UsersApiUpdateMeRequest, options?: any) {\n return UsersApiFp(this.configuration).updateMe(requestParameters.userUpdate, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Update User\n * @param {UsersApiUpdateUserRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof UsersApi\n */\n public updateUser(requestParameters: UsersApiUpdateUserRequest, options?: any) {\n return UsersApiFp(this.configuration).updateUser(requestParameters.id, requestParameters.userUpdate, options).then((request) => request(this.axios, this.basePath));\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Word Cabinet\n * Word Cabinet API\n *\n * The version of the OpenAPI document: 0.1.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport globalAxios, { AxiosPromise, AxiosInstance } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common';\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\n// @ts-ignore\nimport { HTTPValidationError } from '../models';\n// @ts-ignore\nimport { WordWithDefinition } from '../models';\n/**\n * WordsApi - axios parameter creator\n * @export\n */\nexport const WordsApiAxiosParamCreator = function (configuration?: Configuration) {\n return {\n /**\n * \n * @summary Get Next Word\n * @param {string} reviewSessionId \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n getNextWord: async (reviewSessionId: string, options: any = {}): Promise => {\n // verify required parameter 'reviewSessionId' is not null or undefined\n assertParamExists('getNextWord', 'reviewSessionId', reviewSessionId)\n const localVarPath = `/api/v1/words/next/{review_session_id}`\n .replace(`{${\"review_session_id\"}}`, encodeURIComponent(String(reviewSessionId)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication OAuth2PasswordBearer required\n // oauth required\n await setOAuthToObject(localVarHeaderParameter, \"OAuth2PasswordBearer\", [], configuration)\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n /**\n * \n * @summary Review Word\n * @param {number} quality \n * @param {string} reviewSessionId \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n reviewWord: async (quality: number, reviewSessionId: string, options: any = {}): Promise => {\n // verify required parameter 'quality' is not null or undefined\n assertParamExists('reviewWord', 'quality', quality)\n // verify required parameter 'reviewSessionId' is not null or undefined\n assertParamExists('reviewWord', 'reviewSessionId', reviewSessionId)\n const localVarPath = `/api/v1/words/review/{review_session_id}/{quality}`\n .replace(`{${\"quality\"}}`, encodeURIComponent(String(quality)))\n .replace(`{${\"review_session_id\"}}`, encodeURIComponent(String(reviewSessionId)));\n // use dummy base URL string because the URL constructor only accepts absolute URLs.\n const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n let baseOptions;\n if (configuration) {\n baseOptions = configuration.baseOptions;\n }\n\n const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};\n const localVarHeaderParameter = {} as any;\n const localVarQueryParameter = {} as any;\n\n // authentication OAuth2PasswordBearer required\n // oauth required\n await setOAuthToObject(localVarHeaderParameter, \"OAuth2PasswordBearer\", [], configuration)\n\n\n \n setSearchParams(localVarUrlObj, localVarQueryParameter, options.query);\n let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n return {\n url: toPathString(localVarUrlObj),\n options: localVarRequestOptions,\n };\n },\n }\n};\n\n/**\n * WordsApi - functional programming interface\n * @export\n */\nexport const WordsApiFp = function(configuration?: Configuration) {\n const localVarAxiosParamCreator = WordsApiAxiosParamCreator(configuration)\n return {\n /**\n * \n * @summary Get Next Word\n * @param {string} reviewSessionId \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async getNextWord(reviewSessionId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.getNextWord(reviewSessionId, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n /**\n * \n * @summary Review Word\n * @param {number} quality \n * @param {string} reviewSessionId \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n async reviewWord(quality: number, reviewSessionId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {\n const localVarAxiosArgs = await localVarAxiosParamCreator.reviewWord(quality, reviewSessionId, options);\n return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);\n },\n }\n};\n\n/**\n * WordsApi - factory interface\n * @export\n */\nexport const WordsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n const localVarFp = WordsApiFp(configuration)\n return {\n /**\n * \n * @summary Get Next Word\n * @param {string} reviewSessionId \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n getNextWord(reviewSessionId: string, options?: any): AxiosPromise {\n return localVarFp.getNextWord(reviewSessionId, options).then((request) => request(axios, basePath));\n },\n /**\n * \n * @summary Review Word\n * @param {number} quality \n * @param {string} reviewSessionId \n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n */\n reviewWord(quality: number, reviewSessionId: string, options?: any): AxiosPromise {\n return localVarFp.reviewWord(quality, reviewSessionId, options).then((request) => request(axios, basePath));\n },\n };\n};\n\n/**\n * Request parameters for getNextWord operation in WordsApi.\n * @export\n * @interface WordsApiGetNextWordRequest\n */\nexport interface WordsApiGetNextWordRequest {\n /**\n * \n * @type {string}\n * @memberof WordsApiGetNextWord\n */\n readonly reviewSessionId: string\n}\n\n/**\n * Request parameters for reviewWord operation in WordsApi.\n * @export\n * @interface WordsApiReviewWordRequest\n */\nexport interface WordsApiReviewWordRequest {\n /**\n * \n * @type {number}\n * @memberof WordsApiReviewWord\n */\n readonly quality: number\n\n /**\n * \n * @type {string}\n * @memberof WordsApiReviewWord\n */\n readonly reviewSessionId: string\n}\n\n/**\n * WordsApi - object-oriented interface\n * @export\n * @class WordsApi\n * @extends {BaseAPI}\n */\nexport class WordsApi extends BaseAPI {\n /**\n * \n * @summary Get Next Word\n * @param {WordsApiGetNextWordRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof WordsApi\n */\n public getNextWord(requestParameters: WordsApiGetNextWordRequest, options?: any) {\n return WordsApiFp(this.configuration).getNextWord(requestParameters.reviewSessionId, options).then((request) => request(this.axios, this.basePath));\n }\n\n /**\n * \n * @summary Review Word\n * @param {WordsApiReviewWordRequest} requestParameters Request parameters.\n * @param {*} [options] Override http request option.\n * @throws {RequiredError}\n * @memberof WordsApi\n */\n public reviewWord(requestParameters: WordsApiReviewWordRequest, options?: any) {\n return WordsApiFp(this.configuration).reviewWord(requestParameters.quality, requestParameters.reviewSessionId, options).then((request) => request(this.axios, this.basePath));\n }\n}\n","import {\n AuthApi,\n Configuration,\n ReviewSessionsApi,\n UsersApi,\n WordsApi,\n} from \"../generated\";\n\nconst readApiBaseFromEnv = (): string => {\n if (\n process.env.NODE_ENV === \"production\" &&\n !document.location.host.startsWith(\"localhost\")\n ) {\n return `https://${document.location.host}`;\n } else if (process.env.REACT_APP_API_BASE) {\n return process.env.REACT_APP_API_BASE;\n }\n return \"http://localhost:8000\";\n};\n\n// prettier-ignore\nexport const basePath = readApiBaseFromEnv();\n\nconst readAccessToken = async (): Promise => {\n return localStorage.getItem(\"token\") || \"\";\n};\n\nconst apiConfig: Configuration = new Configuration({\n basePath,\n accessToken: readAccessToken,\n});\n\nexport const authApi: AuthApi = new AuthApi(apiConfig);\nexport const userApi: UsersApi = new UsersApi(apiConfig);\nexport const reviewSessionsApi: ReviewSessionsApi = new ReviewSessionsApi(\n apiConfig\n);\nexport const wordsApi: WordsApi = new WordsApi(apiConfig);\n","import {\n createContext,\n useState,\n useCallback,\n useMemo,\n useContext,\n} from \"react\";\nimport {\n TextInput,\n SimpleForm,\n required,\n useNotify,\n SaveContextProvider,\n useGetIdentity,\n useSaveContext,\n usePermissions,\n useRedirect,\n Toolbar,\n SaveButton,\n} from \"react-admin\";\nimport { Redirect } from \"react-router\";\nimport { userApi } from \"../providers/env\";\n\nconst ProfileContext = createContext({\n profileVersion: 0,\n refreshProfile: () => {},\n});\n\nexport const ProfileProvider = ({ children }: { children: any }) => {\n const [profileVersion, setProfileVersion] = useState(0);\n const context = useMemo(\n () => ({\n profileVersion,\n refreshProfile: () => {\n setProfileVersion((currentVersion) => currentVersion + 1);\n },\n }),\n [profileVersion]\n );\n\n return (\n \n {children}\n \n );\n};\n\nexport const useProfile = () => useContext(ProfileContext);\n\nconst CustomToolbar = (props: any) => (\n \n \n \n);\n\nexport const ProfileEdit = ({ ...props }) => {\n const notify = useNotify();\n const { loaded: permissionsLoaded, permissions } = usePermissions();\n const redirect = useRedirect();\n const [saving, setSaving] = useState(false);\n const { refreshProfile, profileVersion } = useProfile();\n const { loaded, identity } = useGetIdentity();\n\n const handleSave = useCallback(\n (values) => {\n setSaving(true);\n userApi\n .updateMe({ userUpdate: values })\n .then(() => {\n setSaving(false);\n notify(\"Your profile has been updated\", \"info\");\n refreshProfile();\n return redirect(\"/\");\n })\n .catch((e) => {\n setSaving(false);\n notify(\n e.response?.data?.detail || \"Unknown error, please try again later\",\n \"error\"\n );\n });\n },\n [notify, refreshProfile, redirect]\n );\n\n const saveContext = useSaveContext({ save: handleSave, saving });\n\n if (permissionsLoaded && !permissions?.email) {\n return ;\n }\n if (!loaded) {\n return null;\n }\n\n return (\n \n }\n >\n \n \n \n \n );\n};\n","import UserIcon from \"@material-ui/icons/Group\";\nimport {\n UserMenu,\n MenuItemLink,\n AppBar,\n Layout,\n getResources,\n Menu,\n useAuthState,\n} from \"react-admin\";\nimport DefaultIcon from \"@material-ui/icons/ViewList\";\nimport { useSelector } from \"react-redux\";\nimport { ProfileProvider } from \"../pages/ProfileEdit\";\nimport SettingsIcon from \"@material-ui/icons/Settings\";\n\nconst MyUserMenu = (props: any) => {\n // Forcing MenuItemLink to any because of some weird type mismatch, not sure what's going on\n const ItemLink = MenuItemLink as any;\n return (\n \n }\n />\n \n );\n};\n\nexport const MyMenu = (props: any) => {\n const ItemLink = MenuItemLink as any;\n const resources = useSelector(getResources).filter(\n (resource) => resource.name !== \"dummy\"\n );\n const { authenticated } = useAuthState();\n return (\n \n {authenticated === false ? (\n }\n />\n ) : null}\n {authenticated === true &&\n resources.map((resource: any) => (\n : }\n onClick={props.onMenuClick}\n />\n ))}\n\n {/* add your custom menus here */}\n \n );\n};\nconst MyAppBar = (props: any) => (\n } />\n);\n\nconst MyLayout = (props: any) => (\n \n \n \n);\n\nexport default MyLayout;\n","import {\n ArrayInput,\n AutocompleteInput,\n BooleanField,\n BooleanInput,\n Button,\n Create,\n Datagrid,\n Edit,\n EditButton,\n List,\n maxLength,\n minLength,\n NumberInput,\n required,\n SimpleForm,\n SimpleFormIterator,\n TextField,\n TextInput,\n usePermissions,\n useRecordContext,\n useRedirect,\n} from \"react-admin\";\nimport debounce from \"lodash/debounce\";\nimport PlayArrow from \"@material-ui/icons/PlayArrow\";\nimport { cloneElement } from \"react\";\nimport { Wordlist } from \"../generated\";\nimport { Word } from \"../generated\";\n\nconst validateName = [required(), minLength(2), maxLength(50)];\nconst hiddenStyle = { display: \"none\" };\nconst width = { \"max-width\": \"500px\" };\n\nconst WordlistTitle = ({ record }: { record: any }) => {\n return Wordlist {record ? `\"${record.name}\"` : \"\"};\n};\n\nconst WordlistListActionToolbar = ({\n children,\n ...props\n}: {\n children: any;\n}) => {\n return (\n
\n {children.map((button: any) => cloneElement(button, { ...props }))}\n
\n );\n};\n\nconst uniqueWords = (words: Array) => {\n const wordSet = new Set();\n for (const word of words) {\n if (word === undefined || word.word === undefined) {\n continue;\n }\n if (wordSet.has(word.word)) {\n return `${word.word} appears more than once in the wordlist`;\n }\n wordSet.add(word.word);\n }\n return undefined;\n};\n\nconst PracticeButton = (props: any) => {\n const record = useRecordContext(props);\n const redirect = useRedirect();\n return (\n redirect(`/practice/${record.id}`)}\n >\n \n \n );\n};\n\nexport const ConditionalEdit = (props: any) => {\n const { loaded: permissionsLoaded, permissions } = usePermissions();\n if (permissionsLoaded && permissions?.id === props.record.user_id) {\n return ;\n }\n return
;\n};\n\nexport const WordlistList = (props: any) => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport const WordlistEdit = (props: any) => (\n } {...props}>\n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport const WordlistCreate = (props: any) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n","import { makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n main: {\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: \"100vh\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n backgroundColor: \"#fcf7e1\",\n },\n card: {\n minWidth: 300,\n marginTop: \"6em\",\n },\n header: {\n textAlign: \"center\",\n },\n avatar: {\n margin: \"1em\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n icon: {\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n padding: \"0 1em 1em 1em\",\n },\n actions: {\n padding: \"0 1em 1em 1em\",\n },\n}));\n\nexport default useStyles;\n","import { FormEvent, ReactElement } from \"react\";\n\nimport {\n Avatar,\n Button,\n Card,\n CardHeader,\n CardActions,\n TextField,\n} from \"@material-ui/core\";\nimport { createTheme } from \"@material-ui/core/styles\";\nimport { ThemeProvider } from \"@material-ui/styles\";\nimport LockIcon from \"@material-ui/icons/Lock\";\nimport { defaultTheme, Notification } from \"react-admin\";\nimport useStyles from \"./authStyles\";\n\nconst theme = createTheme(defaultTheme);\n\ninterface AuthProps {\n submit(event: FormEvent): void;\n setEmail(value: string): void;\n setPassword?(value: string): void;\n actionName: string;\n extraActions?: ReactElement;\n}\n\nconst Auth: React.FC = ({\n submit,\n setEmail,\n setPassword,\n actionName,\n extraActions,\n}) => {\n const classes = useStyles();\n\n return (\n \n
\n
\n \n
\n \n \n \n
\n \n
\n
\n setEmail(e.target.value)}\n fullWidth\n />\n
\n\n {setPassword && (\n
\n setPassword(e.target.value)}\n />\n
\n )}\n
\n \n \n {actionName}\n \n \n \n {extraActions}\n \n
\n \n
\n
\n
\n );\n};\n\nexport default Auth;\n","import { FormEvent, useEffect, useState } from \"react\";\n\nimport {\n useAuthenticated,\n useAuthState,\n useCheckAuth,\n useLogin,\n useNotify,\n} from \"react-admin\";\nimport Auth from \"../components/Auth\";\n\nimport { Button } from \"@material-ui/core\";\nimport { Redirect, useHistory } from \"react-router\";\nconst Login = () => {\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const login = useLogin();\n const notify = useNotify();\n const history = useHistory();\n\n const { authenticated, loaded } = useAuthState();\n\n if (loaded && authenticated) {\n return ;\n }\n\n const submit = (e: FormEvent) => {\n e.preventDefault();\n login({ email, password }).catch((e) => {\n const msg = e.response?.data?.detail;\n if (msg) {\n notify(msg, \"error\");\n } else {\n notify(\"Network error\", \"error\");\n }\n });\n };\n\n return (\n history.push(\"/register\")}>\n Register\n \n }\n />\n );\n};\n\nexport default Login;\n","import { Card, CardContent, Typography } from \"@material-ui/core\";\nimport { useParams } from \"react-router\";\nimport { reviewSessionsApi, wordsApi } from \"../providers/env\";\nimport { Dispatch, SetStateAction, useEffect, useState } from \"react\";\nimport { ReviewSession, WordWithDefinition } from \"../generated\";\nimport { CardActions, Link, useAuthState, useNotify } from \"react-admin\";\nimport { AxiosError } from \"axios\";\nimport { Button as MuiButton } from \"@material-ui/core\";\n\nconst centeredCard = { margin: \"25px auto\", maxWidth: 400, minWidth: 300 };\nconst useReviewSessionsAsync = (wordlistId: string) => {\n const [reviewSession, setReviewSession] = useState(\n undefined\n );\n useEffect(() => {\n async function fetchReviewSession() {\n const reviewSession = await reviewSessionsApi.getOrCreateReviewSession({\n wordlistId,\n });\n setReviewSession(reviewSession.data);\n }\n fetchReviewSession();\n }, [wordlistId]);\n\n return reviewSession;\n};\n\nasync function fetchNextWord(\n setNextWord: Dispatch>,\n setNextWordLoaded: Dispatch>,\n reviewSession: ReviewSession | undefined,\n notify: any\n) {\n if (reviewSession === undefined) {\n return;\n }\n setNextWordLoaded(false);\n try {\n const word = await wordsApi.getNextWord({\n reviewSessionId: reviewSession.id,\n });\n setNextWord(word.data);\n setNextWordLoaded(true);\n } catch (e) {\n const exp = e as AxiosError;\n if (exp.response?.status === 404) {\n setNextWord(undefined);\n setNextWordLoaded(true);\n } else {\n notify(\"Network error\", \"error\");\n }\n }\n}\n\nconst useNextWordAsync = (reviewSession: ReviewSession | undefined) => {\n const [nextWord, setNextWord] = useState(\n undefined\n );\n const [nextWordLoaded, setNextWordLoaded] = useState(false);\n const notify = useNotify();\n useEffect(() => {\n fetchNextWord(setNextWord, setNextWordLoaded, reviewSession, notify);\n }, [reviewSession, notify]);\n\n return { nextWord, setNextWord, nextWordLoaded, setNextWordLoaded };\n};\n\nconst BackFlashcardContent = ({ ...props }) => {\n const { pronunciation, results } = props;\n return (\n
\n {pronunciation ? (\n /{pronunciation}/\n ) : null}\n {results.length === 0 ? \"Sorry, no definition found for this word\" : \"\"}\n {results.map((definition: any, index: number) => (\n
\n \n {results.length > 1 ? `${index + 1}. ` : \"\"}\n {definition.partOfSpeech}\n \n \n {definition.definition ||\n \"We're sorry! No definition found for this word.\"}\n
\n {definition.example}\n
\n
\n
\n ))}\n
\n );\n};\n\nexport const NotLoggedInCTA = () => {\n return (\n \n \n Hi 👋, your progress is not being saved.{\" \"}\n Sign up to save your progress, create your\n own word lists and be the first to know when new features are added\n \n \n );\n};\n\nexport const Practice = ({ ...props }) => {\n const { wordlistId } = useParams<{ wordlistId: string }>();\n const { authenticated, loaded: isAuthStateLoaded } = useAuthState();\n const notify = useNotify();\n const reviewSession = useReviewSessionsAsync(wordlistId);\n const [isReviewing, setIsReviewing] = useState(true);\n const { nextWord, setNextWord, nextWordLoaded, setNextWordLoaded } =\n useNextWordAsync(reviewSession);\n if (reviewSession === undefined) {\n return
Loading
;\n }\n const rateNextWord = (quality: number) => {\n setIsReviewing(false);\n wordsApi.reviewWord({ reviewSessionId: reviewSession.id, quality });\n };\n if (nextWordLoaded !== true) {\n return (\n \n {isAuthStateLoaded && !authenticated ? : null}\n Loading\n \n );\n }\n if (nextWord === undefined) {\n return (\n \n {isAuthStateLoaded && !authenticated ? : null}\n That's it! You've reached the end for today.\n \n );\n }\n const definitions: any = nextWord.definitions;\n const results = definitions?.results || [];\n const pronunciation = definitions?.pronunciation?.all;\n return (\n \n {isAuthStateLoaded && !authenticated ? : null}\n \n \n \n \n {nextWord.word}\n \n {isReviewing === false ? (\n \n ) : null}\n \n \n {isReviewing === true ? (\n
\n rateNextWord(5)}\n >\n Easy\n \n rateNextWord(3)}\n >\n Medium\n \n rateNextWord(0)}\n >\n Difficult\n \n
\n ) : (\n {\n setIsReviewing(true);\n fetchNextWord(\n setNextWord,\n setNextWordLoaded,\n reviewSession,\n notify\n );\n }}\n >\n Next\n \n )}\n
\n
\n
\n );\n};\n","import { FormEvent, useState } from \"react\";\n\nimport { Button } from \"@material-ui/core\";\nimport { useAuthState, useNotify } from \"react-admin\";\nimport Auth from \"../components/Auth\";\nimport { Redirect, useHistory } from \"react-router\";\nimport { authApi } from \"../providers/env\";\nimport { AxiosError } from \"axios\";\n\nconst Register = () => {\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const notify = useNotify();\n const history = useHistory();\n const { authenticated, loaded } = useAuthState();\n\n if (loaded && authenticated) {\n return ;\n }\n\n const submit = async (e: FormEvent) => {\n e.preventDefault();\n const formData = { email, password };\n try {\n const response = await authApi.register({\n userCreate: formData,\n });\n if (response.data.id) {\n notify(\"Successfully registered, you can now log in\", \"success\");\n history.push(\"/login\");\n }\n } catch (e) {\n const exp = e as AxiosError;\n const errorMsg = exp.response?.data.detail[0].msg;\n if (errorMsg) {\n notify(errorMsg, \"error\");\n } else {\n notify(\"Network error\", \"error\");\n }\n }\n };\n\n return (\n history.push(\"/login\")}>\n Sign in\n \n }\n />\n );\n};\n\nexport default Register;\n","import {\n BooleanField,\n BooleanInput,\n Datagrid,\n Edit,\n EditButton,\n EmailField,\n List,\n SimpleForm,\n TextField,\n TextInput,\n} from \"react-admin\";\n\nexport const UserList = (props: any) => (\n \n \n \n \n \n \n \n \n \n);\n\nexport const UserEdit = (props: any) => (\n \n \n \n \n \n \n \n \n);\n","import { UserIdentity } from \"react-admin\";\nimport { authApi, userApi } from \"./env\";\n\ntype loginFormType = {\n email: string;\n password: string;\n};\n\nconst authProvider = {\n login: async ({ email, password }: loginFormType) => {\n const formData = { username: email, password };\n const resp = await authApi.login(formData);\n localStorage.setItem(\"token\", resp.data.access_token);\n return Promise.resolve();\n },\n logout: () => {\n localStorage.removeItem(\"token\");\n localStorage.removeItem(\"permissions\");\n return Promise.resolve();\n },\n checkError: (error: { status: number }) => {\n const status = error.status;\n if (status === 401 || status === 403) {\n localStorage.removeItem(\"token\");\n localStorage.removeItem(\"permissions\");\n return Promise.reject();\n }\n return Promise.resolve();\n },\n checkAuth: () => {\n return localStorage.getItem(\"token\") ? Promise.resolve() : Promise.reject();\n },\n getPermissions: () => {\n const role = JSON.parse(localStorage.getItem(\"permissions\") || \"{}\");\n return role ? Promise.resolve(role) : Promise.reject();\n },\n getIdentity: async (): Promise => {\n const resp = await userApi.me();\n localStorage.setItem(\"permissions\", JSON.stringify(resp.data));\n return resp.data as UserIdentity;\n },\n};\n\nexport default authProvider;\n","import { useAuthState } from \"react-admin\";\nimport { Redirect } from \"react-router\";\n\nexport const DummyList = (props: any) => {\n const { loading, loaded, authenticated } = useAuthState();\n\n if (loading) {\n return
Loading
;\n }\n if (loaded) {\n if (authenticated) {\n return ;\n } else {\n return ;\n }\n }\n return
;\n};\n","import UserIcon from \"@material-ui/icons/Group\";\nimport { createBrowserHistory as createHistory } from \"history\";\nimport simpleRestProvider from \"ra-data-simple-rest\";\nimport { Admin, fetchUtils, Resource, RouteWithoutLayout } from \"react-admin\";\nimport { Route } from \"react-router\";\nimport MyLayout from \"./components/AdminLayout\";\nimport { WordlistList, WordlistCreate, WordlistEdit } from \"./pages/Wordlists\";\nimport LoginPage from \"./pages/Login\";\nimport { ProfileEdit } from \"./pages/ProfileEdit\";\nimport { Practice } from \"./pages/Practice\";\nimport Register from \"./pages/Register\";\nimport { UserEdit, UserList } from \"./pages/Users\";\nimport authProvider from \"./providers/authProvider\";\nimport { basePath } from \"./providers/env\";\nimport PostIcon from \"@material-ui/icons/Book\";\nimport { DummyList } from \"./pages/Dummy\";\n\nconst httpClient = (url: string, options: any = {}) => {\n options.user = {\n authenticated: true,\n token: `Bearer ${localStorage.getItem(\"token\")}`,\n };\n if (url.includes(\"/users/\") && options.method === \"PUT\") {\n // We use PATCH for update on the backend for users, since PATCH is selective PUT, this change should be fine\n options.method = \"PATCH\";\n }\n return fetchUtils.fetchJson(url, options);\n};\n\nconst dataProvider = simpleRestProvider(`${basePath}/api/v1`, httpClient);\n\nconst customRoutes = [\n ,\n } />,\n }\n />,\n];\n\nconst App = () => {\n return (\n \n {(permissions) => [\n ,\n permissions.is_superuser === true ? (\n \n ) : null,\n\n ,\n ]}\n \n );\n};\n\nexport default App;\n","import { ReportHandler } from \"web-vitals\";\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}