{"version":3,"sources":["locales/i18n.ts","constants/config.ts","hooks/useSettings.ts","hooks/useLocales.ts","contexts/SettingsContext.tsx","redux/index.tsx","layout/Sidebar.tsx","layout/MainLayout.tsx","routes/NoAuth.tsx","routes/RequireAuth.tsx","routes/index.tsx","theme/breakpoints.ts","theme/palette.ts","theme/typography.ts","theme/index.tsx","index.tsx","redux/slices/user.tsx","routes/paths.ts"],"names":["i18n","use","LanguageDetector","initReactI18next","init","resources","en","dashboard","enDashboard","fallbackLng","debug","ns","defaultNS","interpolation","escapeValue","cookiesKey","defaultSettings","themeMode","themeDirection","useSettings","useContext","SettingsContext","LangValues","LANGS","label","value","En","systemValue","enUS","direction","Fa","faIR","initialState","onToggleMode","setDirection","createContext","SettingsProvider","_ref","children","Cookies","get","settings","setSettings","useState","onChangeSetting","set","expires","onChangeLang","useTranslation","lang","language","changeLanguage","currentLang","find","_lang","allLang","useLocales","useEffect","useSettingCookies","_jsx","Provider","dir","store","configureStore","reducer","user","userReducer","Wrapper","styled","Box","theme","minWidth","height","background","borderRadius","spacing","padding","display","flexDirection","justifyContent","overflowY","ListItem","_ref2","selected","disabled","alignItems","cursor","color","palette","grey","marginBottom","textAlign","userSelect","SidebarIcon","Icon","fontSize","Sidebar","navigate","useNavigate","location","useLocation","isSelectedTab","route","pathname","currentImageId","useSelector","currentImageIdSelector","t","keyPrefix","_jsxs","Tooltip","title","PATH_DASHBOARD","selectImage","onClick","icon","undefined","improvement","boundaries","sx","WebkitTextStrokeWidth","WebkitTextStrokeColor","treatments","analysis","position","paddingTop","backgroundRepeat","backgroundImage","backgroundPosition","backgroundSize","backgroundColor","DentalLogo","top","left","HeaderLine","border","InfoBar","Stack","_ref3","width","IconButton","Button","_ref4","MainLayout","userInfo","userSelector","isSplashPage","mb","src","alt","splash","_Fragment","Typography","variant","concat","file_name","image_date","code_melli","patient_birth","patient_name","localStorage","removeItem","login","Outlet","NoAuth","getItem","Navigate","to","RequireAuth","Loadable","Component","props","Suspense","fallback","Splash","lazy","SelectImage","ImageImprovement","Boundaries","Treatments","Analysis","Login","Router","Routes","Route","element","path","root","breakpoints","values","xs","sm","md","lg","xl","GREY","COMMON","common","black","white","primary","light","main","dark","contrastText","secondary","info","success","warning","error","divider","action","active","hover","disabledBackground","focus","hoverOpacity","disabledOpacity","mode","text","tertiary","caption","paper","default","darkest","card","neutral","shade","alpha","typography","button","textTransform","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","h1","fontWeight","lineHeight","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","overline","buttonSmall","buttonLarge","tiny","ThemeProvider","themeOptions","useMemo","fontFamily","shape","createTheme","MUIThemeProvider","CssBaseline","ReactDOM","createRoot","document","getElementById","render","React","StrictMode","BrowserRouter","Toaster","createSlice","name","reducers","setUser","state","payload","setCurrentImageId","actions","subLink","ROOTS_DASHBOARD"],"mappings":"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","file":"static/js/main.994ec043.chunk.js","sourcesContent":["import { initReactI18next } from \"react-i18next\"\nimport i18n from \"i18next\"\nimport LanguageDetector from \"i18next-browser-languagedetector\"\nimport enDashboard from \"./en/index.json\"\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources: {\n en: {\n dashboard: enDashboard,\n },\n },\n fallbackLng: \"en\",\n debug: false,\n ns: [\"dashboard\"],\n defaultNS: \"dashboard\",\n interpolation: {\n escapeValue: false,\n },\n })\n\nexport default i18n\n","import { SettingsValueProps } from \"../types/contexts\"\n\nexport const cookiesExpires = 3\n\nexport const cookiesKey = {\n themeMode: \"themeMode\",\n themeDirection: \"themeDirection\",\n}\n\nexport const defaultSettings: SettingsValueProps = {\n themeMode: \"dark\",\n themeDirection: \"ltr\",\n}\n","import React, { useContext } from \"react\"\nimport { SettingsContext } from \"../contexts/SettingsContext\"\n\nconst useSettings = (): React.ContextType =>\n useContext(SettingsContext)\n\nexport default useSettings\n","import { useTranslation } from \"react-i18next\"\nimport { enUS, faIR, Localization } from \"@mui/material/locale\"\nimport { ThemeDirection } from \"../types/contexts\"\nimport useSettings from \"./useSettings\"\n\nexport enum LangValues {\n Fa = \"fa-IR\",\n En = \"en-UK\",\n}\n\nexport type LangSpec = {\n label: string\n value: LangValues\n systemValue: Localization\n direction: ThemeDirection\n}\n\nconst LANGS: LangSpec[] = [\n {\n label: \"English\",\n value: LangValues.En,\n systemValue: enUS,\n direction: \"ltr\",\n },\n {\n label: \"فارسی\",\n value: LangValues.Fa,\n systemValue: faIR,\n direction: \"rtl\",\n },\n]\n\ntype UseLocalesReturn = {\n onChangeLang: (lang?: string) => void\n currentLang: LangSpec\n allLang: LangSpec[]\n}\n\nexport default function useLocales(): UseLocalesReturn {\n const { setDirection } = useSettings()\n\n const { i18n } = useTranslation()\n\n const currentLang =\n LANGS.find((_lang) => _lang.value === i18n.language) || LANGS[0]\n\n const handleChangeLanguage = (lang?: string) => {\n const language =\n lang === LangValues.Fa || lang === LangValues.En\n ? lang\n : i18n.language === LangValues.En\n ? LangValues.Fa\n : LangValues.En\n\n setDirection(\n language === LangValues.Fa ? LANGS[1].direction : LANGS[0].direction\n )\n i18n.changeLanguage(language)\n }\n\n return {\n onChangeLang: handleChangeLanguage,\n currentLang,\n allLang: LANGS,\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport {\n ReactNode,\n createContext,\n Dispatch,\n SetStateAction,\n useEffect,\n useState,\n} from \"react\"\nimport Cookies from \"js-cookie\"\nimport {\n cookiesExpires,\n cookiesKey,\n defaultSettings,\n} from \"../constants/config\"\nimport useLocales, { LangValues } from \"../hooks/useLocales\"\nimport {\n SettingsContextProps,\n SettingsValueProps,\n ThemeDirection,\n} from \"../types/contexts\"\n\nconst initialState: SettingsContextProps = {\n ...defaultSettings,\n onToggleMode: () => {},\n setDirection: () => {},\n}\n\nconst SettingsContext = createContext(initialState)\n\ntype SettingsProviderProps = {\n children: ReactNode\n}\n\nfunction SettingsProvider({ children }: SettingsProviderProps): JSX.Element {\n const direction = Cookies.get(\"themeDirection\")\n\n const [settings, setSettings] = useSettingCookies({\n ...defaultSettings,\n themeDirection: direction === \"ltr\" ? \"ltr\" : \"rtl\",\n })\n\n const onToggleMode = () => {\n setSettings({\n ...settings,\n themeMode: settings.themeMode === \"light\" ? \"dark\" : \"light\",\n })\n }\n\n const setDirection = (dir: ThemeDirection) => {\n setSettings({\n ...settings,\n themeDirection: dir as ThemeDirection,\n })\n }\n\n return (\n \n {children}\n \n )\n}\n\nexport { SettingsProvider, SettingsContext }\n\nfunction useSettingCookies(\n defaultSettings: SettingsValueProps\n): [SettingsValueProps, Dispatch>] {\n const [settings, setSettings] = useState(defaultSettings)\n\n const onChangeSetting = () => {\n Cookies.set(cookiesKey.themeMode, settings.themeMode, {\n expires: cookiesExpires,\n })\n\n Cookies.set(cookiesKey.themeDirection, settings.themeDirection, {\n expires: cookiesExpires,\n })\n }\n\n const { onChangeLang } = useLocales()\n\n useEffect(() => {\n const lang = Cookies.get(\"language\")\n\n if (!lang) {\n Cookies.set(\"language\", LangValues.Fa)\n onChangeLang(LangValues.Fa)\n } else\n lang === LangValues.En\n ? onChangeLang(LangValues.En)\n : onChangeLang(LangValues.Fa)\n }, [])\n\n useEffect(() => {\n onChangeSetting()\n }, [settings])\n\n return [settings, setSettings]\n}\n","import { configureStore } from \"@reduxjs/toolkit\"\nimport userReducer from \"./slices/user\"\n\nconst store = configureStore({\n reducer: {\n user: userReducer,\n },\n})\n\nexport default store\n\nexport type RootState = ReturnType\n","import { useTranslation } from \"react-i18next\"\nimport { useSelector } from \"react-redux\"\nimport { useNavigate, useLocation } from \"react-router-dom\"\nimport { styled, Box, Tooltip } from \"@mui/material\"\nimport { Icon } from \"@iconify/react\"\nimport { currentImageIdSelector } from \"../redux/slices/user\"\nimport { PATH_DASHBOARD } from \"../routes/paths\"\n\ninterface ListItemProps {\n selected: boolean\n disabled?: boolean\n}\n\nconst Wrapper = styled(Box)(({ theme }) => ({\n minWidth: 108,\n height: \"100%\",\n background: \"rgba(12, 47, 82, 0.50)\",\n borderRadius: theme.spacing(3),\n padding: theme.spacing(3),\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n overflowY: \"auto\",\n}))\n\nconst ListItem = styled(Box)(\n ({ theme, selected, disabled }) => ({\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n cursor: !disabled ? \"pointer\" : \"initial\",\n color: disabled\n ? theme.palette.grey[700]\n : selected\n ? \"#05c9df\"\n : theme.palette.grey[400],\n marginBottom: theme.spacing(10),\n justifyContent: \"center\",\n padding: theme.spacing(3),\n textAlign: \"center\",\n borderRadius: theme.spacing(3),\n userSelect: \"none\",\n\n \"&:hover\": {\n color: !disabled ? \"##0580C0\" : \"intial\",\n },\n })\n)\n\nconst SidebarIcon = styled(Icon)(() => ({\n fontSize: 50,\n}))\n\nfunction Sidebar(): JSX.Element {\n const navigate = useNavigate()\n\n const location = useLocation()\n\n const isSelectedTab = (route: string): boolean => {\n return location.pathname === route\n }\n\n const currentImageId = useSelector(currentImageIdSelector)\n\n const { t } = useTranslation(\"dashboard\", { keyPrefix: \"sidebar\" })\n\n return (\n \n \n navigate(PATH_DASHBOARD.selectImage)}\n >\n \n \n \n \n {\n if (currentImageId !== undefined && currentImageId !== null)\n navigate(PATH_DASHBOARD.improvement)\n }}\n >\n \n \n \n \n {\n if (currentImageId !== undefined && currentImageId !== null)\n navigate(PATH_DASHBOARD.boundaries)\n }}\n >\n \n \n \n \n {\n if (currentImageId !== undefined && currentImageId !== null)\n navigate(PATH_DASHBOARD.treatments)\n }}\n >\n \n \n \n \n {\n if (currentImageId !== undefined && currentImageId !== null)\n navigate(PATH_DASHBOARD.analysis)\n }}\n >\n \n \n \n \n )\n}\n\nexport default Sidebar\n","import { useTranslation } from \"react-i18next\"\nimport { useSelector } from \"react-redux\"\nimport { Outlet, useNavigate, useLocation } from \"react-router-dom\"\nimport { Box, Button, Stack, styled, Tooltip, Typography } from \"@mui/material\"\nimport { Icon } from \"@iconify/react\"\nimport { userSelector } from \"../redux/slices/user\"\nimport { PATH_DASHBOARD } from \"../routes/paths\"\nimport Sidebar from \"./Sidebar\"\n\nconst Wrapper = styled(Box)(({ theme }) => ({\n padding: theme.spacing(10),\n height: \"100%\",\n position: \"relative\",\n paddingTop: theme.spacing(24),\n alignItems: \"center\",\n backgroundRepeat: \"no-repeat\",\n backgroundImage: 'url(\"/static/images/mainBackground.png\")',\n backgroundPosition: \"center\",\n backgroundSize: \"cover\",\n backgroundColor: theme.palette.grey[900],\n}))\n\nconst DentalLogo = styled(\"img\")(() => ({\n position: \"absolute\",\n top: 28,\n left: 60,\n height: 80,\n cursor: \"pointer\",\n}))\n\nconst HeaderLine = styled(\"hr\")(({ theme }) => ({\n backgroundColor: \"#B7ECEA\",\n height: 2,\n marginBottom: theme.spacing(2),\n border: \"unset\",\n}))\n\nconst InfoBar = styled(Stack)(({ theme }) => ({\n height: 36,\n width: \"100%\",\n position: \"relative\",\n background:\n \"linear-gradient(to right, #05C9DF 0%, #0580C0 26%, #05C9DF 50%) bottom right / 50% 50% no-repeat, linear-gradient(to bottom left, #05C9DF 0%, #0580C0 26%, #05C9DF 50%) bottom left / 50% 50% no-repeat, linear-gradient(to top left, #05C9DF 0%, #0580C0 26%, #05C9DF 50%) top left / 50% 50% no-repeat, linear-gradient(to top right, #05C9DF 0%, #0580C0 26%, #05C9DF 50%) top right / 50% 50% no-repeat\",\n backgroundSize: \"100% 36px\",\n borderRadius: theme.spacing(2),\n marginBottom: theme.spacing(4),\n display: \"flex\",\n justifyContent: \"space-evenly\",\n alignItems: \"center\",\n}))\n\nconst IconButton = styled(Button)(({ theme }) => ({\n minWidth: \"0px\",\n position: \"absolute\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: theme.spacing(1),\n color: theme.palette.grey[900],\n}))\n\nfunction MainLayout(): JSX.Element {\n const navigate = useNavigate()\n\n const location = useLocation()\n\n const userInfo = useSelector(userSelector)\n\n const isSplashPage = location.pathname === \"/splash\"\n\n const logout = () => {\n localStorage.removeItem(\"dental-access-token\")\n localStorage.removeItem(\"dental-refresh-token\")\n navigate(PATH_DASHBOARD.login)\n }\n\n const { t } = useTranslation(\"dashboard\", { keyPrefix: \"mainLayout\" })\n\n return (\n \n \n navigate(PATH_DASHBOARD.splash)}\n />\n \n \n \n {!!userInfo && !isSplashPage && (\n <>\n \n {`${userInfo.file_name} :نام فایل تصویر`}\n \n \n {`${userInfo.image_date} :تاریخ ایجاد رادیوگرافی`}\n \n \n {`${userInfo.code_melli} :شماره ملی`}\n \n \n {`${userInfo.patient_birth} :تاریخ تولد`}\n \n \n {`نام بیمار: ${userInfo.patient_name} `}\n \n \n )}\n \n logout()} sx={{ left: \"10px\" }}>\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default MainLayout\n","import { Navigate, Outlet } from \"react-router-dom\"\nimport { PATH_DASHBOARD } from \"./paths\"\n\nexport function NoAuth(): JSX.Element {\n if (localStorage.getItem(\"dental-access-token\"))\n return \n\n return \n}\n","import { Navigate, Outlet } from \"react-router-dom\"\nimport { PATH_DASHBOARD } from \"./paths\"\n\nexport function RequireAuth(): JSX.Element {\n if (!localStorage.getItem(\"dental-access-token\"))\n return \n\n return \n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Suspense, lazy, LazyExoticComponent } from \"react\"\nimport { Route, Routes } from \"react-router-dom\"\nimport MainLayout from \"../layout/MainLayout\"\nimport { NoAuth } from \"./NoAuth\"\nimport { RequireAuth } from \"./RequireAuth\"\nimport { PATH_DASHBOARD } from \"./paths\"\n\nconst Loadable = (Component: LazyExoticComponent<() => JSX.Element>) =>\n function load(props: any) {\n return (\n \n \n \n )\n }\n\nconst Splash = Loadable(lazy(() => import(\"../pages/Splash\")))\n\nconst SelectImage = Loadable(lazy(() => import(\"../pages/SelectImage\")))\n\nconst ImageImprovement = Loadable(\n lazy(() => import(\"../pages/ImageImprovement\"))\n)\n\nconst Boundaries = Loadable(lazy(() => import(\"../pages/Boundaries\")))\n\nconst Treatments = Loadable(lazy(() => import(\"../pages/Treatments\")))\n\nconst Analysis = Loadable(lazy(() => import(\"../pages/Analysis\")))\n\nconst Login = Loadable(lazy(() => import(\"../pages/Login\")))\n\nexport default function Router(): React.ReactElement<\n any,\n string | React.JSXElementConstructor\n> {\n return (\n \n }>\n } />\n } />\n \n\n }>\n }>\n } />\n } />\n }\n />\n } />\n } />\n } />\n \n \n \n )\n}\n","const breakpoints = {\n values: {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1400,\n xl: 1400,\n },\n}\n\nexport default breakpoints\n","import { alpha } from \"@mui/material/styles\"\n\ndeclare module \"@mui/material/styles/createPalette\" {\n interface TypeBackground {\n neutral: string\n shadeNeutral: string\n darkest: string\n }\n interface TypeText {\n primary: string\n secondary: string\n tertiary: string\n disabled: string\n title: string\n }\n}\n\nexport const GREY = {\n 100: \"#FFFFFF\",\n 200: \"#F4F6F8\",\n 300: \"#E0E0E0\",\n 400: \"#CDCDCD\",\n 500: \"#B8B8B8\",\n 600: \"#9E9E9E\",\n 700: \"#757575\",\n 800: \"#505050\",\n 900: \"#373737\",\n}\n\nexport const PRIMARY = {\n light: \"#FEBA4D\",\n main: \"#F05123\",\n dark: \"#C32C00\",\n contrastText: \"#3C2517\",\n}\nexport const SECONDARY = {\n light: \"#D68452\",\n main: \"#3C2517\",\n dark: \"#632B09\",\n contrastText: GREY[200],\n}\nexport const INFO = {\n light: \"#29FFFF\",\n main: \"#14E4E4\",\n dark: \"#259E9E\",\n contrastText: \"\",\n}\nexport const SUCCESS = {\n light: \"#A0EECF\",\n main: \"#00D17E\",\n dark: \"#009D5F\",\n contrastText: \"\",\n}\nexport const WARNING = {\n light: \"#F1F101\",\n main: \"#FAC107\",\n dark: \"#E4B003\",\n contrastText: \"\",\n}\nexport const ERROR = {\n light: \"#F44336\",\n main: \"#ED1B2F\",\n dark: \"#B71C1C\",\n contrastText: \"\",\n}\n\nconst COMMON = {\n common: { black: \"#000\", white: \"#fff\" },\n primary: PRIMARY,\n secondary: SECONDARY,\n info: INFO,\n success: SUCCESS,\n warning: WARNING,\n error: ERROR,\n grey: GREY,\n divider: GREY[500],\n action: {\n active: GREY[500],\n hover: GREY[900],\n selected: GREY[800],\n disabled: GREY[900],\n disabledBackground: GREY[500],\n focus: GREY[500],\n hoverOpacity: 0.08,\n disabledOpacity: 0.48,\n },\n}\n\nconst palette = {\n light: {\n ...COMMON,\n mode: \"light\",\n text: {\n primary: GREY[800],\n secondary: GREY[600],\n tertiary: \"#f0f0f0\",\n caption: \"#D2D2D2\",\n title: \"#9E9E9E\",\n icon: \"#494949\",\n },\n background: {\n paper: GREY[100],\n default: GREY[100],\n darkest: GREY[900],\n card: GREY[800],\n neutral: GREY[600],\n shade: alpha(\"#000000\", 0.6),\n },\n },\n dark: {\n ...COMMON,\n mode: \"dark\",\n text: {\n primary: \"#fff\",\n secondary: \"#B8B8B8\",\n tertiary: \"#f0f0f0\",\n caption: \"#D2D2D2\",\n title: \"#9E9E9E\",\n icon: \"#494949\",\n },\n background: {\n paper: GREY[100],\n default: GREY[100],\n darkest: GREY[200],\n card: GREY[800],\n neutral: GREY[600],\n shade: alpha(\"#000000\", 0.6),\n },\n },\n} as const\n\nexport default palette\n","declare module \"@mui/material/Typography\" {\n interface TypographyPropsVariantOverrides {\n tiny: true\n buttonSmall: true\n buttonLarge: true\n }\n}\n\nconst typography = {\n button: {\n textTransform: \"none\",\n },\n // fontFamily: \"IRANSans\",\n fontWeightLight: 300,\n fontWeightRegular: 400,\n fontWeightMedium: 500,\n fontWeightBold: 700,\n h1: {\n fontWeight: 300,\n fontSize: 48,\n lineHeight: \"64px\",\n },\n h2: {\n fontWeight: 300,\n fontSize: 40,\n lineHeight: \"48px\",\n },\n h3: {\n fontWeight: 500,\n fontSize: 32,\n lineHeight: \"48px\",\n },\n h4: {\n fontWeight: 500,\n fontSize: 24,\n lineHeight: \"36px\",\n },\n h5: {\n fontWeight: 400,\n fontSize: 20,\n lineHeight: \"30px\",\n },\n h6: {\n fontWeight: 400,\n fontSize: 18,\n lineHeight: \"28px\",\n },\n subtitle1: {\n fontWeight: 400,\n fontSize: 16,\n lineHeight: \"24px\",\n },\n subtitle2: {\n fontWeight: 500,\n fontSize: 14,\n lineHeight: \"22px\",\n },\n body1: {\n fontWeight: 400,\n fontSize: 16,\n lineHeight: \"24px\",\n },\n body2: {\n fontWeight: 400,\n fontSize: 14,\n lineHeight: \"22px\",\n },\n caption: {\n fontWeight: 400,\n fontSize: 12,\n lineHeight: \"18px\",\n },\n overline: {\n fontWeight: 400,\n fontSize: 12,\n lineHeight: \"18px\",\n textTransform: \"uppercase\",\n },\n buttonSmall: {\n fontWeight: 400,\n fontSize: 12,\n lineHeight: \"22px\",\n },\n buttonLarge: {\n fontWeight: 500,\n fontSize: 14,\n lineHeight: \"24px\",\n },\n tiny: {\n fontWeight: 400,\n fontSize: 10,\n lineHeight: \"14px\",\n },\n} as const\n\nexport default typography\n","import { useMemo, ReactNode } from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport { CssBaseline } from \"@mui/material\"\nimport {\n createTheme,\n ThemeOptions,\n ThemeProvider as MUIThemeProvider,\n} from \"@mui/material/styles\"\nimport breakpoints from \"./breakpoints\"\nimport palette from \"./palette\"\nimport typography from \"./typography\"\n\ntype Props = {\n children: ReactNode\n}\n\nexport default function ThemeProvider({ children }: Props): JSX.Element {\n const { t } = useTranslation(\"dashboard\", { keyPrefix: \"mainLayout\" })\n\n const themeOptions: ThemeOptions = useMemo(\n () => ({\n palette: palette.light,\n typography: { ...typography, fontFamily: t(\"font\") },\n breakpoints,\n shape: { borderRadius: 8 },\n spacing: 4,\n }),\n [t(\"font\")]\n )\n\n const theme = createTheme(themeOptions)\n\n return (\n \n \n {children}\n \n )\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom/client\"\nimport { Toaster } from \"react-hot-toast\"\nimport { Provider } from \"react-redux\"\nimport { BrowserRouter } from \"react-router-dom\"\nimport { SettingsProvider } from \"./contexts/SettingsContext\"\nimport \"./locales/i18n\"\nimport store from \"./redux\"\nimport Router from \"./routes\"\nimport ThemeProvider from \"./theme\"\n\nconst root = ReactDOM.createRoot(document.getElementById(\"root\"))\n\nroot.render(\n \n \n \n \n \n \n \n \n \n \n \n \n)\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\"\nimport { RootState } from \"..\"\nimport InitialState, { UserInfoType } from \"../../types/redux/user\"\n\nconst initialState: InitialState = {\n userInfo: null,\n currentImageId: null,\n}\n\nexport const userReducer = createSlice({\n name: \"user\",\n initialState,\n reducers: {\n setUser: (state: InitialState, action: PayloadAction) => {\n state.userInfo = action.payload\n },\n setCurrentImageId: (state: InitialState, action: PayloadAction) => {\n state.currentImageId = action.payload\n },\n },\n})\n\nexport const userSelector = (state: RootState): UserInfoType =>\n state.user.userInfo\n\nexport const currentImageIdSelector = (state: RootState): number =>\n state.user.currentImageId\n\n// Action creators are generated for each case reducer function\nexport const { setUser, setCurrentImageId } = userReducer.actions\n// You must export the reducer as follows for it to be able to be read by the store.\nexport default userReducer.reducer\n","function path(root: string, subLink: string) {\n return `${root}${subLink}`\n}\n\nconst ROOTS_DASHBOARD = \"/\"\n\nexport const PATH_DASHBOARD = {\n root: ROOTS_DASHBOARD,\n splash: path(ROOTS_DASHBOARD, \"splash\"),\n selectImage: path(ROOTS_DASHBOARD, \"select-image\"),\n improvement: path(ROOTS_DASHBOARD, \"improvement\"),\n boundaries: path(ROOTS_DASHBOARD, \"boundaries\"),\n treatments: path(ROOTS_DASHBOARD, \"treatments\"),\n analysis: path(ROOTS_DASHBOARD, \"analysis\"),\n login: path(ROOTS_DASHBOARD, \"login\"),\n}\n"],"sourceRoot":""}