Compare commits

..

No commits in common. "master" and "feature/article-component" have entirely different histories.

487 changed files with 75800 additions and 81776 deletions

0
.dockerignore Executable file → Normal file
View File

8
.env.development Executable file → Normal file
View File

@ -1,6 +1,6 @@
REACT_APP_CMS_BASE_URL=http://scipaper.ru
REACT_APP_CMS_APP_NAME=scipaper
REACT_APP_CMS_BASE_URL=https://cms.techpal.ru/api
REACT_APP_CMS_APP_NAME=techpal
REACT_APP_OPENID_PROVIDER_URL=http://auth.techpal.ru/auth/realms/master/protocol/openid-connect/auth?client_id=techpal&response_type=code
REACT_APP_INTEGRATOR_URL=http://scipaper.ru
REACT_APP_INTEGRATOR_API_VERSION=/v1
REACT_APP_INTEGRATOR_URL=http://integrator.techpal.ru
REACT_APP_INTEGRATOR_API_VERSION=/api/1
REACT_APP_GRAPHQL_URL=/graphql

12
.env.production Executable file → Normal file
View File

@ -1,6 +1,6 @@
REACT_APP_CMS_BASE_URL=http://scipaper.ru
REACT_APP_CMS_APP_NAME=scipaper
REACT_APP_OPENID_PROVIDER_URL=http://auth.techpal.ru/auth/realms/master/protocol/openid-connect/auth?client_id=techpal&response_type=code
REACT_APP_INTEGRATOR_URL=http://scipaper.ru
REACT_APP_INTEGRATOR_API_VERSION=/v1
REACT_APP_GRAPHQL_URL=/graphql
REACT_APP_CMS_BASE_URL=EXT_CMS_BASE_URL
REACT_APP_CMS_APP_NAME=EXT_CMS_APP_NAME
REACT_APP_OPENID_PROVIDER_URL=EXT_OPENID_PROVIDER_URL
REACT_APP_INTEGRATOR_URL=EXT_INTEGRATOR_URL
REACT_APP_INTEGRATOR_API_VERSION=EXT_INTEGRATOR_API_VERSION
REACT_APP_GRAPHQL_URL=EXT_GRAPHQL_URL

0
.gitignore vendored Executable file → Normal file
View File

0
.npmrc Executable file → Normal file
View File

0
.nvmrc Executable file → Normal file
View File

0
.storybook/index.css Executable file → Normal file
View File

0
.storybook/main.js Executable file → Normal file
View File

0
.storybook/main.ts Executable file → Normal file
View File

0
.storybook/preview.js Executable file → Normal file
View File

0
.storybook/preview.ts Executable file → Normal file
View File

25
Dockerfile Executable file → Normal file
View File

@ -17,25 +17,22 @@ COPY . .
RUN npm run build
# Bundle static assets with nginx
FROM node:16-alpine as production
FROM nginx:1.21.6 as production
# Copy built assets from builder
WORKDIR /app
COPY --from=builder /app/build .
COPY --from=builder /app/build /usr/share/nginx/html
# Add nginx.config
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Expose ports
EXPOSE 3000
EXPOSE 80
COPY entrypoint.sh .
COPY .env.production .
ENV NODE_ENV production
ENV USER_NAME=node_user USER_UID=2000 GROUP_NAME=node_group GROUP_UID=2000
RUN npm i -g serve \
&& deluser --remove-home node \
&& addgroup --g ${GROUP_UID} -S ${GROUP_NAME} \
&& adduser -D -S -s /sbin/nologin -u ${USER_UID} -G ${GROUP_NAME} ${USER_NAME}\
&& chown -R ${USER_NAME}:${GROUP_NAME} "/app/"
# Execute script
RUN ["chmod", "+x", "./entrypoint.sh"]
ENTRYPOINT ["./entrypoint.sh"]
USER "${USER_NAME}"
CMD serve -s .
# Start serving
CMD ["nginx", "-g", "daemon off;"]

2
Makefile Executable file → Normal file
View File

@ -1,4 +1,4 @@
PROJECT_NAME=scipaper-frontend
PROJECT_NAME=freeland-frontend
setup:
npm i

0
README.md Executable file → Normal file
View File

View File

@ -1,4 +1,4 @@
#! /bin/bash
#!/bin/bash
# no verbose
set +x
# config

0
global.d.ts vendored Executable file → Normal file
View File

0
nginx.conf Executable file → Normal file
View File

7563
package-lock.json generated

File diff suppressed because it is too large Load Diff

17
package.json Executable file → Normal file
View File

@ -3,17 +3,11 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.2.0",
"@fortawesome/free-brands-svg-icons": "^6.2.0",
"@fortawesome/free-solid-svg-icons": "^6.2.0",
"@fortawesome/react-fontawesome": "^0.2.0",
"@headlessui/react": "^1.6.6",
"@reduxjs/toolkit": "^1.8.3",
"@types/node": "^16.11.47",
"@types/react": "^18.0.15",
"@types/react-copy-to-clipboard": "^5.0.4",
"@types/react-dom": "^18.0.6",
"@uiw/react-md-editor": "^3.18.1",
"axios": "^0.27.2",
"classnames": "^2.3.1",
"formik": "^2.2.9",
@ -25,22 +19,14 @@
"jwt-decode": "^3.1.2",
"lodash": "^4.17.21",
"react": "^18.2.0",
"react-copy-to-clipboard": "^5.1.0",
"react-dom": "^18.2.0",
"react-hotkeys": "^2.0.0",
"react-i18next": "^11.18.3",
"react-loading-skeleton": "^3.1.0",
"react-lottie": "^1.2.3",
"react-markdown": "^8.0.3",
"react-redux": "^8.0.2",
"react-router-dom": "^6.3.0",
"react-scripts": "5.0.1",
"react-scrollbars-custom": "^4.1.0",
"react-syntax-highlighter": "^15.5.0",
"remark-code-blocks": "^2.0.1",
"remark-gfm": "^3.0.1",
"storybook-addon-pseudo-states": "^1.15.1",
"swiper": "^8.3.2",
"tailwindcss": "^3.1.7",
"tsconfig-paths-webpack-plugin": "^4.0.0",
"typescript": "^4.7.4",
@ -110,15 +96,12 @@
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.5.2",
"@types/react-lottie": "^1.2.6",
"@types/react-syntax-highlighter": "^15.5.5",
"autoprefixer": "^10.4.8",
"babel-plugin-named-exports-order": "^0.0.2",
"jest": "^28.1.3",
"postcss": "^8.4.14",
"prop-types": "^15.8.1",
"react-test-renderer": "^18.2.0",
"tailwind-scrollbar": "^2.0.1",
"webpack": "^5.74.0"
}
}

0
postcss.config.js Executable file → Normal file
View File

0
public/favicon.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

2
public/index.html Executable file → Normal file
View File

@ -24,7 +24,7 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>Scipaper</title>
<title>Freeland</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>

121
public/locales/en/translation.json Executable file → Normal file
View File

@ -1,7 +1,7 @@
{
"serv": {
"goHome": "Home page",
"noSuchPath": "We don't have such a page"
"goHome": "Home",
"noSuchPath": "We don't have this page"
},
"sidemenu": {
"dashboard": "Dashboard",
@ -19,130 +19,45 @@
"hellousr": "Hello, {{username}}",
"edit": "Edit",
"language": "Language",
"selectLanguage": "Select a language",
"selectLanguage": "Select language",
"save": "Save",
"cancel": "Cancel",
"account": {
"info": "Personal Information",
"info": "Personal information",
"mail": "Mail",
"connect": "Add Account",
"connectedAccounts_one": "Linked Account",
"connectedAccounts_other": "Linked Accounts",
"settings": "Account Settings"
"connect": "Add account",
"connectedAccounts_one": "Connected account",
"connectedAccounts_other": "Connected accounts",
"settings": "Account settings"
},
"security": {
"password": {
"caption": "Password",
"twoFactor": "Two-factor authentication (2FA)",
"description": "Protect your account by enabling 2FA via SMS or using a temporary one-time password (OTP) from the authentication app."
"twoFactor": "Two factor authentication (2FA)",
"description": "Keep your account secure by enabling 2FA via SMS or using a temporary one-time passcode (TOTP) from an authenticator app."
},
"activity": {
"caption": "Device activity"
}
},
"search": {
"label": "We will find something.."
"label": "Search for something.."
},
"subscriptions": {
"subscribed": "The service is attached to the account"
"subscribed": "Service have been connected"
},
"viewHistory": "View history",
"logOutEverywhere": "Log out from all devices",
"logOutEverywhere": "log out from all devices",
"back": "Back",
"logOut": "Exit",
"logOut": "Log out",
"failures": {
"subscriptions": {
"failure": "Failed to attach the service to your account",
"exists": "The service was already attached to your account earlier",
"confirmation": "Invalid password"
"failure": "Failed to connect service",
"exists": "Service have already been connected",
"confirmation": "Invalid confirmation information provided"
},
"services": {
"fork": "Failed to perform authorization in the service"
"fork": "Failed to authenticate in service"
}
},
"articlePage": {
"abstract": "Abstract",
"keywords": "Keywords",
"interactionButtons":{
"abstract": "Abstract",
"readFile": "Read File",
"download" : "Download",
"share" : "Share",
"cite" : "Cite",
"copied": "Copied"
}
},
"navbar": {
"createNew": "Create New",
"about": {
"navTitle": "About",
"aboutProject": "About Scipaper",
"contacts": "Contacts",
"help": "Help"
},
"library": {
"navTitle": "My library",
"publications": "Publications",
"favorites": "Favorites",
"collections": "Collections",
"recentViewed": "History"
},
"auth": {
"signIn": "Sign In",
"signUp": "Sign Up"
}
},
"footer": {
"accountSettings": "Account Settings",
"about": "About Scipaper",
"help": "Help",
"contactUs": "Contacts",
"allRightsReserved": "All rights reserved",
"termsOfUse": "Terms of Use",
"privacyPolicy": "Privacy Policy",
"coockiesPolicy": "coockies Usage Policy",
"supportedBy": "Created"
},
"mainPage": {
"title": "Scientific Library with Free Access",
"search": "Search",
"article_one": "Articles",
"article_few": "Articles",
"article_many": "Articles",
"advancedSearch": "Advanced search",
"featuredArticles": {
"title": "Featured articles",
"descriptionPart1": "Select the category of science you are interested in",
"descriptionPart2": "Scientific category",
"categories": {
"Medical": "Medical",
"TechnicsAndTechlonogies": "Technics and Technology",
"Fundamental": "Fundamental",
"Humanitarian": "Humanitarian",
"Agricultural": "Agricultural",
"Social": "Social"
}
},
"featuredAuthors": "Featured authors",
"more": "See More ",
"showAll": "Show all"
},
"searchResults": {
"title": "Search results",
"totalResults":"Total results",
"nothingFound": "Nothing found"
},
"filters": {
"authors":"Authors",
"publicationsType": "Publications Type",
"content":"Content",
"publisher":"Publisher",
"publicationTopic":"Publication Topic",
"appliedFitlers":"Applied Fitlers",
"clearAll":"Clear All",
"enterAuthorsName":"Enter Author Name",
"showAll":"Show All"
}
}

82
public/locales/ru/translation.json Executable file → Normal file
View File

@ -59,87 +59,5 @@
"services": {
"fork": "Не удалось выполнить авторизацию в сервисе"
}
},
"articlePage": {
"abstract": "Введение",
"keywords": "Ключевые слова",
"interactionButtons":{
"abstract": "Развернуть",
"readFile": "Читать",
"download" : "Скачать",
"share" : "Поделиться",
"cite" : "Цитировать",
"copied": "Скопировано"
}
},
"navbar": {
"createNew": "Создать статью",
"about": {
"navTitle": "О проекте",
"aboutProject": "О Scipaper",
"contacts": "Контакты",
"help": "Помощь"
},
"library": {
"navTitle": "Моя библиотека",
"publications": "Публикации",
"favorites": "Избранное",
"collections": "Коллекции",
"recentViewed": "История"
},
"auth": {
"signIn": "Вход",
"signUp": "Регистрация"
}
},
"footer": {
"accountSettings": "Настройки аккаунта",
"about": "О scipaper",
"help": "Помощь",
"contactUs": "Контакты",
"allRightsReserved": "Все права защищены",
"termsOfUse": "Правила использования",
"privacyPolicy": "Политика конфиденциальности",
"coockiesPolicy": "Политика использования coockies",
"supportedBy": "Создано"
},
"mainPage": {
"title": "Библиотека научных статей с бесплатным доступом",
"search": "Поиск",
"article_one": "статьи",
"article_few": "статей",
"article_many": "статей",
"advancedSearch": "Расширенный поиск",
"featuredArticles": {
"title": "Популярные статьи",
"descriptionPart1": "Выберете интересующую вас ",
"descriptionPart2": "научную категорию",
"categories": {
"Medical": "Медицина",
"TechnicsAndTechlonogies": "Техника и технологии",
"Fundamental": "Естественые",
"Humanitarian": "Гуманитарные",
"Agricultural": "Аuрокультурa",
"Social": "Социальные"
}
},
"featuredAuthors": "Популярные авторы",
"more": "Больше",
"showAll": "Показать все"
},
"searchResults": {
"title": "Результаты поиска",
"totalResults":"Всего найдено",
"nothingFound": "Ничего не найдено"
},
"filters": {
"authors":"Авторы",
"publicationsType": "Публикации",
"publisher":"Издатель",
"publicationTopic":"Тема публикации",
"appliedFitlers":"Фильтры",
"clearAll":"Очистить всё",
"enterAuthorsName":"Введите имя автора",
"showAll":"Показать все"
}
}

0
public/logo192.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

0
public/logo512.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

0
public/manifest.json Executable file → Normal file
View File

0
public/robots.txt Executable file → Normal file
View File

0
src/.storybook/main.js Executable file → Normal file
View File

0
src/.storybook/preview.js Executable file → Normal file
View File

0
src/App.css Executable file → Normal file
View File

0
src/App.test.tsx Executable file → Normal file
View File

4
src/App.tsx Executable file → Normal file
View File

@ -2,8 +2,6 @@
/* Libraries */
/* -------------------------------------------------------------------------- */
import React from "react";
import MainPage from "pages/MainPage";
/* -------------------------------------------------------------------------- */
/* Application root component */
/* -------------------------------------------------------------------------- */
@ -12,7 +10,7 @@ import MainPage from "pages/MainPage";
* @return {JSX.Element}
*/
function App() {
return <MainPage />;
return <div>Hello world!</div>;
}
export default App;

View File

@ -1,24 +0,0 @@
import type { ArticleStore } from "../domain/articleStore";
import { getArticleUseCase } from "../useCases/getArticleUseCase";
import { useCallback, useEffect } from "react";
function useArticleViewModel(store: ArticleStore) {
const _getArticle = useCallback(
(id: string) => getArticleUseCase(store.getArticle, store.setArticle, id),
[store.getArticle, store.setArticle]
);
useEffect(() => {
if (store.article != undefined) {
_getArticle(store.article.id);
}
}, [store.article?.id]);
return {
article: store.article,
shouldShowLoading: typeof store.article === "undefined" || store.isLoading,
hasError: store.hasError,
};
}
export { useArticleViewModel };

View File

@ -1,36 +0,0 @@
import axios from "axios";
import { Article } from "../domain/articleEntity";
import { create } from "../domain/articleModel";
import { FetchArticleByIdDTO } from "./dto/fetch_article_by_id_dto";
import Failure from "core/failure";
import { integratorApiClient } from "core/httpClient";
const articleEndpoint = "/papers/"
async function getArticle(id: string): Promise<Article> {
try {
const response = await integratorApiClient.get<FetchArticleByIdDTO>(
// `https://run.mocky.io/v3/62cd4581-d864-4d46-b1d6-02b45b5d1994/${id}`
// `https://jsonplaceholder.typicode.com/posts/${id}`
// `https://run.mocky.io/v3/066be3d8-0568-439a-8b20-062deed49a97`
articleEndpoint + id
);
const dto = response.data;
return create({
id: dto.id,
topic: [dto.topic],
title: dto.title,
authors: dto.authors,
tags: dto.tags,
summary: dto.summary,
content: dto.content,
});
} catch (reason) {
if (axios.isAxiosError(reason)) {
throw Failure.fromReason(reason, "failures.services.load");
}
throw reason;
}
}
export { getArticle };

View File

@ -1,4 +0,0 @@
export const SET_ARTICLE = "SET_ARTICLE";
export const GET_ARTICLE = "GET_ARTICLE";
export const GET_ARTICLE_SUCCESS = "GET_ARTICLE.success";
export const GET_ARTICLE_FAILURE = "GET_ARTICLE.failure";

View File

@ -1,23 +0,0 @@
import type { Article } from "../domain/articleEntity";
import { getArticle as getArticleAPI } from "./articleAPIService";
import * as actionTypes from "./articleActionTypes";
import { dispatchStatus } from "../../store/index";
const setArticleAction = (article: Article) => (dispatch: any) =>
dispatch({ type: actionTypes.SET_ARTICLE, article });
const getArticleAction = (id: string) => (dispatch: any) => {
dispatch({ type: actionTypes.GET_ARTICLE });
return getArticleAPI(id)
.then((article) => {
dispatchStatus(actionTypes.GET_ARTICLE, ".success", article)(dispatch);
return article;
})
.catch((reason) => {
dispatchStatus(actionTypes.GET_ARTICLE, ".failure", reason)(dispatch);
return reason;
});
};
export { setArticleAction, getArticleAction };

View File

@ -1,39 +0,0 @@
import React, { useCallback, useState } from "react";
import { useDispatch } from "react-redux";
import { ArticleStore } from "../domain/articleStore";
import type { Article } from "../domain/articleEntity";
import { getArticle as getArticleAPI } from "./articleAPIService";
const useArticleCommonStore = (): ArticleStore => {
const [isLoading, setLoading] = useState<boolean>(false);
const [hasError, setError] = useState<boolean>(false);
const [article, setArticleState] = useState<Article | undefined>();
const dispatch = useDispatch();
const getArticle = useCallback(
async (id: string) => {
setLoading(true);
try {
const article = await getArticleAPI(id);
setArticleState(article);
setLoading(false);
return article;
} catch (error) {
setError(true);
return null;
}
},
[dispatch]
);
return {
article: article,
isLoading,
hasError,
setArticle: setArticleState,
getArticle,
};
};
export { useArticleCommonStore };

View File

@ -1,32 +0,0 @@
import { AnyAction } from "@reduxjs/toolkit";
import type { ArticleStore } from "../domain/articleStore";
import * as actionTypes from "./articleActionTypes";
type ArticleStoreState = Omit<ArticleStore, "getArticle" | "setArticle">;
const INITIAL_STATE: ArticleStoreState = {
article: undefined,
isLoading: false,
hasError: false,
};
const articleReducer = (
state: ArticleStoreState = INITIAL_STATE,
action: AnyAction
): ArticleStoreState => {
switch (action.type) {
case actionTypes.SET_ARTICLE:
return { ...state, article: action.article };
case actionTypes.GET_ARTICLE:
return { ...state, isLoading: true };
case actionTypes.GET_ARTICLE_SUCCESS:
return { ...state, isLoading: false, article: action.payload };
case actionTypes.GET_ARTICLE_FAILURE:
return { ...state, hasError: true, isLoading: false };
default:
return state;
}
};
export { articleReducer };
export type { ArticleStoreState };

View File

@ -1,35 +0,0 @@
import React, { useCallback, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { ArticleStore } from "../domain/articleStore";
import type { Article } from "../domain/articleEntity";
import type { ArticleStoreState } from "../data/articleReducer";
import { getArticleAction, setArticleAction } from "./articleActions";
import { RootState, useAppSelector } from "store";
const articleSelector = (state: RootState): ArticleStoreState => state.article;
const useArticleStore = (): ArticleStore => {
const { isLoading, article, hasError } = useAppSelector(articleSelector);
const dispatch = useDispatch();
const setArticle = useCallback(
(article: Article) => setArticleAction(article)(dispatch),
[dispatch]
);
const getArticle = useCallback(
(id: string) => getArticleAction(id)(dispatch),
[dispatch]
);
return {
article: article,
isLoading,
hasError,
setArticle,
getArticle,
};
};
export { useArticleStore };

View File

@ -1,9 +0,0 @@
export interface FetchArticleByIdDTO {
id: string;
topic: string;
title: string;
authors: string[];
tags: string[];
summary: string;
content: string;
}

View File

@ -1,9 +0,0 @@
export interface Article {
id: string;
title: string;
content: string;
topic?: string[];
authors?: string[];
tags?: string[];
summary?: string;
}

View File

@ -1,14 +0,0 @@
import { CreateArticleParams } from "article/useCases/params/create_article_params";
import { Article } from "./articleEntity";
const create = (props: CreateArticleParams): Article => ({
id: props.id,
topic: props.topic,
title: props.title,
authors: props.authors,
tags: props.tags,
summary: props.summary,
content: props.content,
});
export { create };

View File

@ -1,13 +0,0 @@
import { Article } from './articleEntity';
interface ArticleStore {
// State
article: Article | undefined;
isLoading: boolean;
hasError: boolean;
// Actions
setArticle(article?: Article): void;
getArticle(identifier: string): Promise<Article | null>;
}
export type { ArticleStore };

View File

@ -1,16 +0,0 @@
import { Article } from "article/domain/articleEntity";
import type { ArticleStore } from "../domain/articleStore";
const getArticleUseCase = async (
getArticle: ArticleStore["getArticle"],
setArticle: ArticleStore["setArticle"],
id: Article["id"]
): Promise<Article | null> => {
const article = await getArticle(id);
if (article) {
await setArticle(article);
}
return article;
};
export { getArticleUseCase };

View File

@ -1,9 +0,0 @@
export interface CreateArticleParams {
id: string;
topic: string[];
title: string;
authors: string[];
tags: string[];
summary: string;
content: string;
}

0
src/assets/fonts/Inter-Black.ttf Executable file → Normal file
View File

0
src/assets/fonts/Inter-Bold.ttf Executable file → Normal file
View File

0
src/assets/fonts/Inter-ExtraBold.ttf Executable file → Normal file
View File

0
src/assets/fonts/Inter-ExtraLight.ttf Executable file → Normal file
View File

0
src/assets/fonts/Inter-Light.ttf Executable file → Normal file
View File

0
src/assets/fonts/Inter-Medium.ttf Executable file → Normal file
View File

0
src/assets/fonts/Inter-Regular.ttf Executable file → Normal file
View File

0
src/assets/fonts/Inter-SemiBold.ttf Executable file → Normal file
View File

0
src/assets/fonts/Inter-Thin.ttf Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Bold.eot Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Bold.ttf Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Bold.woff2 Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Medium.eot Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Medium.ttf Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Medium.woff2 Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Regular.eot Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Regular.ttf Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Regular.woff2 Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Thin.eot Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Thin.ttf Executable file → Normal file
View File

0
src/assets/fonts/Poppins-Thin.woff2 Executable file → Normal file
View File

File diff suppressed because one or more lines are too long

0
src/assets/svg/agricultural.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

0
src/assets/svg/arrow-big-right.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 513 B

After

Width:  |  Height:  |  Size: 510 B

0
src/assets/svg/arrow-down.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 345 B

After

Width:  |  Height:  |  Size: 341 B

0
src/assets/svg/arrow-left.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 345 B

After

Width:  |  Height:  |  Size: 341 B

0
src/assets/svg/arrow-right.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 311 B

After

Width:  |  Height:  |  Size: 307 B

0
src/assets/svg/arrow-up.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 315 B

After

Width:  |  Height:  |  Size: 311 B

View File

@ -1,7 +0,0 @@
<svg width="1187" height="1234" viewBox="0 0 1187 1234" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M408.998 745.256C206.829 467.159 -0.745132 678.488 53.4493 872.858C189.728 1182.79 541.828 1319.16 839.898 1177.41C942.643 1128.57 1029.84 1050.24 1091.25 951.643C934.96 1103.83 651.196 1078.4 408.998 745.208V745.256Z" fill="#F0F0F0"/>
<path d="M589.732 553.768C311.677 115.242 0.000483082 348.859 0.000483082 616.83C-0.108684 705.549 18.2856 793.237 53.9153 873.85C16.9159 692.296 217.547 552.363 404.339 812.896C675.684 1191.27 941.763 1124.69 1090.72 952.538C1138.53 876.188 1169.42 789.736 1181.14 699.443V700.63C1117.18 906.92 834.959 940.474 589.732 553.768Z" fill="#F5F5F5"/>
<path d="M780.298 357.556C573.819 3.33809 311.98 35.3415 134.904 225.06C47.4877 335.363 -0.21692 473.901 0.000741558 616.829C18.6403 357.604 320.112 177.116 593.041 616.829C835.635 1008.16 1137.87 906.216 1180.86 701.744V699.781C1184.64 671.939 1186.24 643.826 1185.66 615.715V587.685C1080.6 665.864 942.439 635.678 780.252 357.532L780.298 357.556Z" fill="#FAFAFA"/>
<path d="M781.72 420.618C970.818 736.727 1133.84 655.859 1186.06 588.242C1183.96 540.989 1176.61 494.146 1164.16 448.648C1076.01 450.611 1055.46 435.275 968.721 297.983C836.17 86.7264 669.183 -55.8716 377.451 42.2463C282.888 80.7758 199.359 143.787 134.788 225.303C335.256 33.4762 581.228 85.5393 781.72 420.618Z" fill="white"/>
<path d="M955.787 325.116C1042.25 462.675 1094.88 469.676 1164.15 448.672C1074.33 120.595 745.743 -69.6327 430.245 23.761C412.352 29.0424 394.753 35.204 377.449 42.2459C638.053 -43.2499 822.887 113.86 955.787 325.116Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

0
src/assets/svg/bell-notification.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 735 B

After

Width:  |  Height:  |  Size: 730 B

0
src/assets/svg/bell.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 637 B

After

Width:  |  Height:  |  Size: 633 B

0
src/assets/svg/bookmark-filled.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 347 B

After

Width:  |  Height:  |  Size: 344 B

0
src/assets/svg/bookmark-outlined.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 359 B

After

Width:  |  Height:  |  Size: 356 B

0
src/assets/svg/caret-down.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 306 B

After

Width:  |  Height:  |  Size: 303 B

0
src/assets/svg/caret-left.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 315 B

0
src/assets/svg/caret-right.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 317 B

After

Width:  |  Height:  |  Size: 314 B

0
src/assets/svg/caret-up.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 312 B

After

Width:  |  Height:  |  Size: 309 B

0
src/assets/svg/chart.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 345 B

After

Width:  |  Height:  |  Size: 339 B

0
src/assets/svg/chevrones-left.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 645 B

After

Width:  |  Height:  |  Size: 639 B

0
src/assets/svg/chevrones-right.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 594 B

After

Width:  |  Height:  |  Size: 588 B

0
src/assets/svg/circle.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 148 B

After

Width:  |  Height:  |  Size: 145 B

0
src/assets/svg/cite.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 915 B

After

Width:  |  Height:  |  Size: 906 B

0
src/assets/svg/copy.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 430 B

After

Width:  |  Height:  |  Size: 426 B

0
src/assets/svg/delete.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 542 B

After

Width:  |  Height:  |  Size: 537 B

0
src/assets/svg/download.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 490 B

After

Width:  |  Height:  |  Size: 485 B

0
src/assets/svg/duplicate.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 645 B

After

Width:  |  Height:  |  Size: 639 B

0
src/assets/svg/edit1.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 578 B

After

Width:  |  Height:  |  Size: 575 B

0
src/assets/svg/edit2.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 725 B

After

Width:  |  Height:  |  Size: 721 B

0
src/assets/svg/error.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 485 B

After

Width:  |  Height:  |  Size: 480 B

0
src/assets/svg/eye.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 445 B

After

Width:  |  Height:  |  Size: 441 B

0
src/assets/svg/facebook.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 651 B

After

Width:  |  Height:  |  Size: 648 B

0
src/assets/svg/favorite-filled.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 259 B

After

Width:  |  Height:  |  Size: 256 B

0
src/assets/svg/favorite-outlined.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 285 B

After

Width:  |  Height:  |  Size: 282 B

0
src/assets/svg/file.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 486 B

Some files were not shown because too many files have changed in this diff Show More