Merge pull request '(feature/complete-develop-merge) Resolving multiple merges' (#138) from feature/complete-develop-merge into develop

Reviewed-on: http://85.143.176.51:3000/free-land/front-end/pulls/138
This commit is contained in:
Daniel Weissmall 2022-10-12 12:15:01 +00:00
commit 50a42955d6
461 changed files with 79728 additions and 77460 deletions

14
.dockerignore Normal file → Executable file
View File

@ -1,8 +1,8 @@
.env*
!.env.production
node_modules
build
.vscode
.cache
.nvmrc
.env*
!.env.production
node_modules
build
.vscode
.cache
.nvmrc
README.MD

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

@ -1,6 +1,6 @@
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://integrator.techpal.ru
REACT_APP_INTEGRATOR_API_VERSION=/api/1
REACT_APP_GRAPHQL_URL=/graphql
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

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

@ -1,6 +1,6 @@
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
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

50
.gitignore vendored Normal file → Executable file
View File

@ -1,25 +1,25 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
.vscode
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
.vscode
npm-debug.log*
yarn-debug.log*
yarn-error.log*

2
.npmrc Normal file → Executable file
View File

@ -1 +1 @@
legacy-peer-deps=true
legacy-peer-deps=true

2
.nvmrc Normal file → Executable file
View File

@ -1 +1 @@
v16.14.0
v16.14.0

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

@ -1,134 +1,134 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Bold.eot");
src: url("assets/fonts/Poppins-Bold.eot?#iefix") format("embedded-opentype"),
url("assets/fonts/Poppins-Bold.woff2") format("woff2"),
url("assets/fonts/Poppins-Bold.ttf") format("truetype");
font-weight: 700;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Medium.eot");
src: url("assets/fonts/Poppins-Medium.eot?#iefix") format("embedded-opentype"),
url("assets/fonts/Poppins-Medium.woff2") format("woff2"),
url("assets/fonts/Poppins-Medium.ttf") format("truetype");
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Regular.eot");
src: url("assets/fonts/Poppins-Regular.eot?#iefix") format("embedded-opentype"),
url("assets/fonts/Poppins-Regular.woff2") format("woff2"),
url("assets/fonts/Poppins-Regular.ttf") format("truetype");
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Thin.eot");
src: url("assets/fonts/Poppins-Thin.eot?#iefix") format("embedded-opentype"),
url("assets/fonts/Poppins-Thin.woff2") format("woff2"),
url("assets/fonts/Poppins-Thin.ttf") format("truetype");
font-weight: 300;
font-style: normal;
font-display: swap;
}
html {
font-family: "Poppins", -apple-system, "Segoe UI", system-ui, "Roboto",
"Helvetica Neue", "Arial";
color: var(--color-text);
}
*,
::before,
::after,
.theme-dark *,
.theme-dark::before,
.theme-dark::after {
/* ------------------------------- Body color ------------------------------- */
--color-aside: #0a0e1a;
--color-footer: 10 10 10;
--color-text: rgb(38, 38, 38);
/* -------------------------------------------------------------------------- */
--color-serv: 25 29 43;
--color-serv-50: 227 230 237;
--color-serv-100: 200 205 223;
--color-serv-200: 142 152 189;
--color-serv-300: 90 104 155;
--color-serv-400: 58 67 100;
--color-serv-500: 25 29 43;
--color-serv-600: 21 24 35;
--color-serv-700: 15 17 26;
--color-serv-800: 9 11 16;
--color-serv-900: 6 7 10;
/* ---------------------------------- Blue ---------------------------------- */
--color-blue-50: 240 247 254;
--color-blue-100: 221 237 254;
--color-blue-200: 182 216 252;
--color-blue-300: 137 192 250;
--color-blue-400: 74 158 247;
--color-blue-500: 9 109 217;
--color-blue-600: 8 99 196;
--color-blue-700: 7 87 171;
--color-blue-800: 6 69 137;
--color-blue-900: 4 49 98;
/* ---------------------------------- Gray ---------------------------------- */
--color-gray-50: 250 250 250;
--color-gray-75: 240 240 240;
--color-gray-100: 235 235 235;
;
--color-gray-200: 214 214 214;
--color-gray-300: 191 191 191;
--color-gray-400: 166 166 166;
--color-gray-500: 140 140 140;
--color-gray-600: 115 115 115;
--color-gray-700: 89 89 89;
--color-gray-800: 64 64 64;
--color-gray-900: 38 38 38;
}
/* Dark theme */
@media (prefers-color-scheme: dark) {
:root {
--bg: hsl(var(--hue), 10%, 10%);
--fg: hsl(var(--hue), 10%, 90%);
}
}
}
@layer components {
/* Separate
======================================================================== */
.separate {
@apply flex items-center text-center;
}
.separate::after,
.separate::before {
content: '';
@apply border-b border-gray-300 flex-1;
}
.separate:not(:empty)::after {
@apply ml-2;
}
.separate:not(:empty)::before {
@apply mr-2;
}
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Bold.eot");
src: url("assets/fonts/Poppins-Bold.eot?#iefix") format("embedded-opentype"),
url("assets/fonts/Poppins-Bold.woff2") format("woff2"),
url("assets/fonts/Poppins-Bold.ttf") format("truetype");
font-weight: 700;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Medium.eot");
src: url("assets/fonts/Poppins-Medium.eot?#iefix") format("embedded-opentype"),
url("assets/fonts/Poppins-Medium.woff2") format("woff2"),
url("assets/fonts/Poppins-Medium.ttf") format("truetype");
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Regular.eot");
src: url("assets/fonts/Poppins-Regular.eot?#iefix") format("embedded-opentype"),
url("assets/fonts/Poppins-Regular.woff2") format("woff2"),
url("assets/fonts/Poppins-Regular.ttf") format("truetype");
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Poppins";
src: url("assets/fonts/Poppins-Thin.eot");
src: url("assets/fonts/Poppins-Thin.eot?#iefix") format("embedded-opentype"),
url("assets/fonts/Poppins-Thin.woff2") format("woff2"),
url("assets/fonts/Poppins-Thin.ttf") format("truetype");
font-weight: 300;
font-style: normal;
font-display: swap;
}
html {
font-family: "Poppins", -apple-system, "Segoe UI", system-ui, "Roboto",
"Helvetica Neue", "Arial";
color: var(--color-text);
}
*,
::before,
::after,
.theme-dark *,
.theme-dark::before,
.theme-dark::after {
/* ------------------------------- Body color ------------------------------- */
--color-aside: #0a0e1a;
--color-footer: 10 10 10;
--color-text: rgb(38, 38, 38);
/* -------------------------------------------------------------------------- */
--color-serv: 25 29 43;
--color-serv-50: 227 230 237;
--color-serv-100: 200 205 223;
--color-serv-200: 142 152 189;
--color-serv-300: 90 104 155;
--color-serv-400: 58 67 100;
--color-serv-500: 25 29 43;
--color-serv-600: 21 24 35;
--color-serv-700: 15 17 26;
--color-serv-800: 9 11 16;
--color-serv-900: 6 7 10;
/* ---------------------------------- Blue ---------------------------------- */
--color-blue-50: 240 247 254;
--color-blue-100: 221 237 254;
--color-blue-200: 182 216 252;
--color-blue-300: 137 192 250;
--color-blue-400: 74 158 247;
--color-blue-500: 9 109 217;
--color-blue-600: 8 99 196;
--color-blue-700: 7 87 171;
--color-blue-800: 6 69 137;
--color-blue-900: 4 49 98;
/* ---------------------------------- Gray ---------------------------------- */
--color-gray-50: 250 250 250;
--color-gray-75: 240 240 240;
--color-gray-100: 235 235 235;
;
--color-gray-200: 214 214 214;
--color-gray-300: 191 191 191;
--color-gray-400: 166 166 166;
--color-gray-500: 140 140 140;
--color-gray-600: 115 115 115;
--color-gray-700: 89 89 89;
--color-gray-800: 64 64 64;
--color-gray-900: 38 38 38;
}
/* Dark theme */
@media (prefers-color-scheme: dark) {
:root {
--bg: hsl(var(--hue), 10%, 10%);
--fg: hsl(var(--hue), 10%, 90%);
}
}
}
@layer components {
/* Separate
======================================================================== */
.separate {
@apply flex items-center text-center;
}
.separate::after,
.separate::before {
content: '';
@apply border-b border-gray-300 flex-1;
}
.separate:not(:empty)::after {
@apply ml-2;
}
.separate:not(:empty)::before {
@apply mr-2;
}
}

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

@ -1,16 +1,16 @@
module.exports = {
"stories": [
"../src/**/*.stories.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
"@storybook/preset-create-react-app"
],
"framework": "@storybook/react",
"core": {
"builder": "@storybook/builder-webpack5"
}
module.exports = {
"stories": [
"../src/**/*.stories.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
"@storybook/preset-create-react-app"
],
"framework": "@storybook/react",
"core": {
"builder": "@storybook/builder-webpack5"
}
}

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

@ -1,31 +1,31 @@
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
const Path = require('path');
const AppSourceDir = Path.join(__dirname, '..', 'src');
module.exports = {
stories: ["../src/**/*.stories.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"],
addons: [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
"@storybook/preset-create-react-app",
"storybook-addon-pseudo-states",
],
framework: "@storybook/react",
core: {
builder: "@storybook/builder-webpack5",
},
webpackFinal: async (config, { configType }) => {
config.resolve.plugins = [
...(config.resolve.plugins || []),
new TsconfigPathsPlugin({
extensions: config.resolve.extensions,
}),
];
config.resolve.alias["@assets"] = Path.resolve(__dirname, '..', 'src', 'assets')
console.log(config);
return config;
},
};
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
const Path = require('path');
const AppSourceDir = Path.join(__dirname, '..', 'src');
module.exports = {
stories: ["../src/**/*.stories.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"],
addons: [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
"@storybook/preset-create-react-app",
"storybook-addon-pseudo-states",
],
framework: "@storybook/react",
core: {
builder: "@storybook/builder-webpack5",
},
webpackFinal: async (config, { configType }) => {
config.resolve.plugins = [
...(config.resolve.plugins || []),
new TsconfigPathsPlugin({
extensions: config.resolve.extensions,
}),
];
config.resolve.alias["@assets"] = Path.resolve(__dirname, '..', 'src', 'assets')
console.log(config);
return config;
},
};

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

@ -1,9 +1,9 @@
export const parameters = {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
export const parameters = {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
}

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

@ -1,68 +1,68 @@
import "./index.css";
/**
* Read https://storybook.js.org/docs/react/configure/overview#configure-story-rendering
* for more information about the purpose of this file.
*
* Use preview.js for global code (such as CSS imports or JavaScript mocks)
* that applies to all stories. For example, `import thirdPartyCss.css`.
*
* This file can have three exports:
* - decorators - an array of global decorators
* - parameters - an object of global parameters
* - globalTypes - definition of globalTypes
*/
/**
* Decorators
*
* A decorator is a way to wrap a story in extra rendering functionality.
*
* Example:
*
* import React from 'react';
* export const decorators = [(Story) => <div style={{ margin: '3em' }}><Story/></div>];
*
* Each story throughout the library will be wrapped in a div with a margin of 3
*/
/**
* Parameters
*
* Most Storybook addons are configured via a parameter-based API.
* You can set global parameters in this file
*
* export const parameters = {
* backgrounds: {
* values: [
* { name: 'red', value: '#f00' },
* { name: 'green', value: '#0f0' },
* ],
* },
* };
*
* With backgrounds, you configure the list of backgrounds that every story can render in.
*/
/**
* Global Types
*
* Global Types allow you to add your own toolbars by creating
* globalTypes with a toolbar annotation:
*
* For example:
*
* export const globalTypes = {
* theme: {
* name: 'Theme',
* description: 'Global theme for components',
* defaultValue: 'light',
* toolbar: {
* icon: 'circlehollow',
* // array of plain string values or MenuItem shape
* items: ['light', 'dark'],
* },
* },
* };
*
* Will add a new dropdown in your toolbar with options light and dark.
**/
import "./index.css";
/**
* Read https://storybook.js.org/docs/react/configure/overview#configure-story-rendering
* for more information about the purpose of this file.
*
* Use preview.js for global code (such as CSS imports or JavaScript mocks)
* that applies to all stories. For example, `import thirdPartyCss.css`.
*
* This file can have three exports:
* - decorators - an array of global decorators
* - parameters - an object of global parameters
* - globalTypes - definition of globalTypes
*/
/**
* Decorators
*
* A decorator is a way to wrap a story in extra rendering functionality.
*
* Example:
*
* import React from 'react';
* export const decorators = [(Story) => <div style={{ margin: '3em' }}><Story/></div>];
*
* Each story throughout the library will be wrapped in a div with a margin of 3
*/
/**
* Parameters
*
* Most Storybook addons are configured via a parameter-based API.
* You can set global parameters in this file
*
* export const parameters = {
* backgrounds: {
* values: [
* { name: 'red', value: '#f00' },
* { name: 'green', value: '#0f0' },
* ],
* },
* };
*
* With backgrounds, you configure the list of backgrounds that every story can render in.
*/
/**
* Global Types
*
* Global Types allow you to add your own toolbars by creating
* globalTypes with a toolbar annotation:
*
* For example:
*
* export const globalTypes = {
* theme: {
* name: 'Theme',
* description: 'Global theme for components',
* defaultValue: 'light',
* toolbar: {
* icon: 'circlehollow',
* // array of plain string values or MenuItem shape
* items: ['light', 'dark'],
* },
* },
* };
*
* Will add a new dropdown in your toolbar with options light and dark.
**/

74
Dockerfile Normal file → Executable file
View File

@ -1,38 +1,38 @@
# Install dependencies only when needed
FROM node:16-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# Rebuild the source code only when needed
FROM node:16-alpine AS builder
ENV NODE_ENV production
WORKDIR /app
# Copy dependencies from deps stage
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build
# Bundle static assets with nginx
FROM nginx:1.21.6 as production
# Copy built assets from builder
COPY --from=builder /app/build /usr/share/nginx/html
# Add nginx.config
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Expose ports
EXPOSE 80
COPY entrypoint.sh .
COPY .env.production .
ENV NODE_ENV production
# Execute script
RUN ["chmod", "+x", "./entrypoint.sh"]
ENTRYPOINT ["./entrypoint.sh"]
# Start serving
# Install dependencies only when needed
FROM node:16-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# Rebuild the source code only when needed
FROM node:16-alpine AS builder
ENV NODE_ENV production
WORKDIR /app
# Copy dependencies from deps stage
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build
# Bundle static assets with nginx
FROM nginx:1.21.6 as production
# Copy built assets from builder
COPY --from=builder /app/build /usr/share/nginx/html
# Add nginx.config
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Expose ports
EXPOSE 80
COPY entrypoint.sh .
COPY .env.production .
ENV NODE_ENV production
# Execute script
RUN ["chmod", "+x", "./entrypoint.sh"]
ENTRYPOINT ["./entrypoint.sh"]
# Start serving
CMD ["nginx", "-g", "daemon off;"]

50
Makefile Normal file → Executable file
View File

@ -1,26 +1,26 @@
PROJECT_NAME=freeland-frontend
setup:
npm i
build: setup
npm run build
dev: setup
npm run start
test: setup
npm run test
container: setup
docker build -t ${PROJECT_NAME} .
clean:
rm -rf ./build
build-docker: build container
stories: setup
npm run storybook
PROJECT_NAME=freeland-frontend
setup:
npm i
build: setup
npm run build
dev: setup
npm run start
test: setup
npm run test
container: setup
docker build -t ${PROJECT_NAME} .
clean:
rm -rf ./build
build-docker: build container
stories: setup
npm run storybook
.PHONY: build dev test container

222
README.md Normal file → Executable file
View File

@ -1,112 +1,112 @@
# Getting Started with Freeland
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
In the project directory, you can run:
### `make stories`
Runs the Storybook server for component-driven isolated development.
Open [http://localhost:6006](http://localhost:6006) to view it in the browser.
The page will reload on edits.\
For further information about how to create stories and UI-testing, \
please follow [this link](https://storybook.js.org/docs/react/writing-stories/introduction).
### `make dev`
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
The page will reload if you make edits.\
You will also see any lint errors in the console.
### `make test`
Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `make build`
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `make container`
Builds up application container for production and tags it with a `freeland-frontend` tag.\
After process completion port `80` will be exposed inside a container to access files generated by `make build`
### `make build-docker`
Creates docker container ready for deployment
## `make clean`
Drops **build** process artifacts. It will not remove docker containers due to possible other project named\
containers intercections.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
## Code sections division
We care about our code appearance in text editor. That's why we are placing some
additional comments to seperate code parts using next style:
/\* -------------------------------------------------------------------------- \*/
/\*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User service functions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*/
/\* -------------------------------------------------------------------------- \*/
Or
/\*-------------------------------- Hello --------------------------------\*/
Or
/\*-----------------------------------------------------------------------\*/
To place such comments for division code sections use [this](https://marketplace.visualstudio.com/items?itemName=stackbreak.comment-divider) extention.
## Domain folder structure
Inside specific domain you can see that we have next folders structure:
- domain folder (e.g.: user)
- controller
- some specific or general domain models (e.g. `userViewModel.ts`)
- data
- Data transfer objects
- Possible actions (e.g. `userActions.ts`) and action types definitions
- Reducer rules for redux (e.g. `userReducer.ts`, rules to change your Redux state on specific action type)
- Service (e.g. `userService.ts`, API interactions)
- Repository/Store implementation (e.g. `userSlice.ts`)
- domain
- Entity definition
- Domain model definition
- Repository/Store interface
- useCases (e.g. `getUserUseCase.ts`, use cases of domain)
- views
- pages
- specific components
## Network layer
We use [Axios](https://github.com/axios/axios) for network interactions
## Css styles and interactive components
As a CSS framework we are using [TailwindCSS](https://tailwindcss.com/)
# Getting Started with Freeland
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
In the project directory, you can run:
### `make stories`
Runs the Storybook server for component-driven isolated development.
Open [http://localhost:6006](http://localhost:6006) to view it in the browser.
The page will reload on edits.\
For further information about how to create stories and UI-testing, \
please follow [this link](https://storybook.js.org/docs/react/writing-stories/introduction).
### `make dev`
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
The page will reload if you make edits.\
You will also see any lint errors in the console.
### `make test`
Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `make build`
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `make container`
Builds up application container for production and tags it with a `freeland-frontend` tag.\
After process completion port `80` will be exposed inside a container to access files generated by `make build`
### `make build-docker`
Creates docker container ready for deployment
## `make clean`
Drops **build** process artifacts. It will not remove docker containers due to possible other project named\
containers intercections.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
## Code sections division
We care about our code appearance in text editor. That's why we are placing some
additional comments to seperate code parts using next style:
/\* -------------------------------------------------------------------------- \*/
/\*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User service functions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*/
/\* -------------------------------------------------------------------------- \*/
Or
/\*-------------------------------- Hello --------------------------------\*/
Or
/\*-----------------------------------------------------------------------\*/
To place such comments for division code sections use [this](https://marketplace.visualstudio.com/items?itemName=stackbreak.comment-divider) extention.
## Domain folder structure
Inside specific domain you can see that we have next folders structure:
- domain folder (e.g.: user)
- controller
- some specific or general domain models (e.g. `userViewModel.ts`)
- data
- Data transfer objects
- Possible actions (e.g. `userActions.ts`) and action types definitions
- Reducer rules for redux (e.g. `userReducer.ts`, rules to change your Redux state on specific action type)
- Service (e.g. `userService.ts`, API interactions)
- Repository/Store implementation (e.g. `userSlice.ts`)
- domain
- Entity definition
- Domain model definition
- Repository/Store interface
- useCases (e.g. `getUserUseCase.ts`, use cases of domain)
- views
- pages
- specific components
## Network layer
We use [Axios](https://github.com/axios/axios) for network interactions
## Css styles and interactive components
As a CSS framework we are using [TailwindCSS](https://tailwindcss.com/)
For UI/UX elements use [HeadlessUI](https://headlessui.com/)

View File

@ -1,35 +1,35 @@
#!/bin/bash
# no verbose
set +x
# config
envFilename='.env.production'
resolvingPath='/usr/share/nginx/html'
function apply_path {
# read all config file
while read line; do
# no comment or not empty
if [ "${line:0:1}" == "#" ] || [ "${line}" == "" ]; then
echo "Skiped line $line"
continue
fi
# split
configName="$(cut -d'=' -f1 <<<"$line")"
configValue="$(cut -d'=' -f2 <<<"$line")"
# get system env
envValue=$(env | grep "^$configName=" | grep -oP '(?!=)(?<==).*$');
if [ -z "$configValue" ]; then
echo "Empty env value met: $configName:$configValue"
fi
# if config found
if [ -n "$configValue" ] && [ -n "$envValue" ]; then
# replace all
echo "Replace: ${configValue} with: ${envValue}"
find $resolvingPath \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i "s#$configValue#$envValue#g"
fi
done < $envFilename
}
apply_path
echo "Starting React Application"
#!/bin/bash
# no verbose
set +x
# config
envFilename='.env.production'
resolvingPath='/usr/share/nginx/html'
function apply_path {
# read all config file
while read line; do
# no comment or not empty
if [ "${line:0:1}" == "#" ] || [ "${line}" == "" ]; then
echo "Skiped line $line"
continue
fi
# split
configName="$(cut -d'=' -f1 <<<"$line")"
configValue="$(cut -d'=' -f2 <<<"$line")"
# get system env
envValue=$(env | grep "^$configName=" | grep -oP '(?!=)(?<==).*$');
if [ -z "$configValue" ]; then
echo "Empty env value met: $configName:$configValue"
fi
# if config found
if [ -n "$configValue" ] && [ -n "$envValue" ]; then
# replace all
echo "Replace: ${configValue} with: ${envValue}"
find $resolvingPath \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i "s#$configValue#$envValue#g"
fi
done < $envFilename
}
apply_path
echo "Starting React Application"
exec "$@"

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

@ -1,15 +1,15 @@
declare module '*.svg' {
import React = require('react');
export const ReactComponent: React.FC<React.SVGProps<SVGSVGElement>>;
const src: string;
export default src;
}
export declare global {
interface Window {
state: any & {idx: number}
}
}
declare module '*.svg' {
import React = require('react');
export const ReactComponent: React.FC<React.SVGProps<SVGSVGElement>>;
const src: string;
export default src;
}
export declare global {
interface Window {
state: any & {idx: number}
}
}
declare module "svg-inline-react"

40
nginx.conf Normal file → Executable file
View File

@ -1,21 +1,21 @@
server {
listen *:80;
location / {
root /usr/share/nginx/html/;
include /etc/nginx/mime.types;
try_files $uri $uri/ /index.html;
# Cache static assets
location ~* \.(?:jpg|jpeg|gif|png|ico|svg)$ {
expires 7d;
add_header Cache-Control "public";
}
# Cache css and js bundle
location ~* \.(?:css|js)$ {
add_header Cache-Control "no-cache, public, must-revalidate, proxy-revalidate";
}
}
server {
listen *:80;
location / {
root /usr/share/nginx/html/;
include /etc/nginx/mime.types;
try_files $uri $uri/ /index.html;
# Cache static assets
location ~* \.(?:jpg|jpeg|gif|png|ico|svg)$ {
expires 7d;
add_header Cache-Control "public";
}
# Cache css and js bundle
location ~* \.(?:css|js)$ {
add_header Cache-Control "no-cache, public, must-revalidate, proxy-revalidate";
}
}
}

133391
package-lock.json generated

File diff suppressed because it is too large Load Diff

231
package.json Normal file → Executable file
View File

@ -1,115 +1,116 @@
{
"name": "freeland",
"version": "0.1.0",
"private": true,
"dependencies": {
"@headlessui/react": "^1.6.6",
"@reduxjs/toolkit": "^1.8.3",
"@types/node": "^16.11.47",
"@types/react": "^18.0.15",
"@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",
"graphql": "^16.5.0",
"graphql-tag": "^2.12.6",
"i18next": "^21.8.16",
"i18next-browser-languagedetector": "^6.1.4",
"i18next-http-backend": "^1.4.1",
"jwt-decode": "^3.1.2",
"lodash": "^4.17.21",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-hotkeys": "^2.0.0",
"react-i18next": "^11.18.3",
"react-loading-skeleton": "^3.1.0",
"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",
"web-vitals": "^2.1.4",
"yup": "^0.32.11"
},
"scripts": {
"dev-tools": "redux-devtools --hostname=localhost --port=8000",
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"storybook": "start-storybook -p 6006 -s public",
"build-storybook": "build-storybook -s public"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
"overrides": [
{
"files": [
"**/*.stories.*"
],
"rules": {
"import/no-anonymous-default-export": "off"
}
},
{
"files": [
"**/*.stories.*"
],
"rules": {
"import/no-anonymous-default-export": "off"
}
}
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/preset-typescript": "^7.18.6",
"@storybook/addon-actions": "^6.5.9",
"@storybook/addon-essentials": "^6.5.9",
"@storybook/addon-interactions": "^6.5.9",
"@storybook/addon-links": "^6.5.9",
"@storybook/builder-webpack5": "^6.5.9",
"@storybook/manager-webpack5": "^6.5.9",
"@storybook/node-logger": "^6.5.9",
"@storybook/preset-create-react-app": "^4.1.2",
"@storybook/react": "^6.5.9",
"@storybook/testing-library": "^0.0.13",
"@svgr/webpack": "^6.3.1",
"@tailwindcss/line-clamp": "^0.4.0",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.5.2",
"@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",
"webpack": "^5.74.0"
}
}
{
"name": "freeland",
"version": "0.1.0",
"private": true,
"dependencies": {
"@headlessui/react": "^1.6.6",
"@reduxjs/toolkit": "^1.8.3",
"@types/node": "^16.11.47",
"@types/react": "^18.0.15",
"@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",
"graphql": "^16.5.0",
"graphql-tag": "^2.12.6",
"i18next": "^21.8.16",
"i18next-browser-languagedetector": "^6.1.4",
"i18next-http-backend": "^1.4.1",
"jwt-decode": "^3.1.2",
"lodash": "^4.17.21",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-hotkeys": "^2.0.0",
"react-i18next": "^11.18.3",
"react-loading-skeleton": "^3.1.0",
"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",
"web-vitals": "^2.1.4",
"yup": "^0.32.11"
},
"scripts": {
"dev-tools": "redux-devtools --hostname=localhost --port=8000",
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"storybook": "start-storybook -p 6006 -s public",
"build-storybook": "build-storybook -s public"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
"overrides": [
{
"files": [
"**/*.stories.*"
],
"rules": {
"import/no-anonymous-default-export": "off"
}
},
{
"files": [
"**/*.stories.*"
],
"rules": {
"import/no-anonymous-default-export": "off"
}
}
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/preset-typescript": "^7.18.6",
"@storybook/addon-actions": "^6.5.9",
"@storybook/addon-essentials": "^6.5.9",
"@storybook/addon-interactions": "^6.5.9",
"@storybook/addon-links": "^6.5.9",
"@storybook/builder-webpack5": "^6.5.9",
"@storybook/manager-webpack5": "^6.5.9",
"@storybook/node-logger": "^6.5.9",
"@storybook/preset-create-react-app": "^4.1.2",
"@storybook/react": "^6.5.9",
"@storybook/testing-library": "^0.0.13",
"@svgr/webpack": "^6.3.1",
"@tailwindcss/line-clamp": "^0.4.0",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.3.0",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.5.2",
"@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"
}
}

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

@ -1,6 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

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

@ -1,7 +1,7 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.4144 23.7511C8.27781 15.6345 1.97719 21.8024 3.62218 27.4753C7.75871 36.521 18.4462 40.5011 27.4937 36.364C30.6123 34.9384 33.2592 32.6525 35.1232 29.7747C30.3791 34.2166 21.7659 33.4741 14.4144 23.7497V23.7511Z" fill="#003A8C"/>
<path d="M19.9003 18.1624C11.4604 5.36349 1.99988 12.1819 1.99988 20.0029C1.99656 22.5922 2.55489 25.1515 3.63638 27.5043C2.51332 22.2054 8.60318 18.1213 14.273 25.7253C22.5092 36.7685 30.5857 34.8254 35.1069 29.8009C36.5583 27.5725 37.4959 25.0493 37.8517 22.414V22.4487C35.9103 28.4695 27.3438 29.4488 19.9003 18.1624Z" fill="#0050B3"/>
<path d="M25.6847 12.4357C19.4173 2.09743 11.4696 3.03149 6.09469 8.56864C3.44128 11.7879 1.99328 15.8313 1.99989 20.0028C2.56566 12.4371 11.7164 7.16932 20.0007 20.0028C27.3643 31.4243 36.5384 28.4489 37.8432 22.4812V22.4239C37.9578 21.6113 38.0065 20.7908 37.9889 19.9703V19.1522C34.8 21.434 30.6062 20.5529 25.6832 12.435L25.6847 12.4357Z" fill="#096DD9"/>
<path d="M25.7278 14.2762C31.4676 23.5022 36.416 21.142 38.0009 19.1685C37.9371 17.7894 37.714 16.4222 37.3361 15.0943C34.6607 15.1516 34.0369 14.704 31.404 10.697C27.3806 4.53122 22.3119 0.369342 13.4568 3.23302C10.5865 4.35754 8.05111 6.19659 6.09116 8.57572C12.1761 2.97705 19.6422 4.49657 25.7278 14.2762Z" fill="#40A9FF"/>
<path d="M31.0114 11.4889C33.6359 15.5037 35.2335 15.708 37.336 15.095C34.6097 5.51969 24.6358 -0.0323048 15.0593 2.69349C14.5162 2.84763 13.982 3.02747 13.4568 3.23299C21.367 0.737706 26.9774 5.32312 31.0114 11.4889Z" fill="#91D5FF"/>
</svg>
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.4144 23.7511C8.27781 15.6345 1.97719 21.8024 3.62218 27.4753C7.75871 36.521 18.4462 40.5011 27.4937 36.364C30.6123 34.9384 33.2592 32.6525 35.1232 29.7747C30.3791 34.2166 21.7659 33.4741 14.4144 23.7497V23.7511Z" fill="#003A8C"/>
<path d="M19.9003 18.1624C11.4604 5.36349 1.99988 12.1819 1.99988 20.0029C1.99656 22.5922 2.55489 25.1515 3.63638 27.5043C2.51332 22.2054 8.60318 18.1213 14.273 25.7253C22.5092 36.7685 30.5857 34.8254 35.1069 29.8009C36.5583 27.5725 37.4959 25.0493 37.8517 22.414V22.4487C35.9103 28.4695 27.3438 29.4488 19.9003 18.1624Z" fill="#0050B3"/>
<path d="M25.6847 12.4357C19.4173 2.09743 11.4696 3.03149 6.09469 8.56864C3.44128 11.7879 1.99328 15.8313 1.99989 20.0028C2.56566 12.4371 11.7164 7.16932 20.0007 20.0028C27.3643 31.4243 36.5384 28.4489 37.8432 22.4812V22.4239C37.9578 21.6113 38.0065 20.7908 37.9889 19.9703V19.1522C34.8 21.434 30.6062 20.5529 25.6832 12.435L25.6847 12.4357Z" fill="#096DD9"/>
<path d="M25.7278 14.2762C31.4676 23.5022 36.416 21.142 38.0009 19.1685C37.9371 17.7894 37.714 16.4222 37.3361 15.0943C34.6607 15.1516 34.0369 14.704 31.404 10.697C27.3806 4.53122 22.3119 0.369342 13.4568 3.23302C10.5865 4.35754 8.05111 6.19659 6.09116 8.57572C12.1761 2.97705 19.6422 4.49657 25.7278 14.2762Z" fill="#40A9FF"/>
<path d="M31.0114 11.4889C33.6359 15.5037 35.2335 15.708 37.336 15.095C34.6097 5.51969 24.6358 -0.0323048 15.0593 2.69349C14.5162 2.84763 13.982 3.02747 13.4568 3.23299C21.367 0.737706 26.9774 5.32312 31.0114 11.4889Z" fill="#91D5FF"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

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

@ -1,43 +1,43 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
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>Freeland</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
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>Freeland</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

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

@ -1,63 +1,63 @@
{
"serv": {
"goHome": "Home",
"noSuchPath": "We don't have this page"
},
"sidemenu": {
"dashboard": "Dashboard",
"account": "Account",
"security": "Security",
"services": "Services"
},
"dialogues": {
"confirmAction": {
"title": "Confirm action",
"description": "Enter your techpal account password",
"confirm": "Confirm"
}
},
"hellousr": "Hello, {{username}}",
"edit": "Edit",
"language": "Language",
"selectLanguage": "Select language",
"save": "Save",
"cancel": "Cancel",
"account": {
"info": "Personal information",
"mail": "Mail",
"connect": "Add account",
"connectedAccounts_one": "Connected account",
"connectedAccounts_other": "Connected accounts",
"settings": "Account settings"
},
"security": {
"password": {
"caption": "Password",
"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": "Search for something.."
},
"subscriptions": {
"subscribed": "Service have been connected"
},
"viewHistory": "View history",
"logOutEverywhere": "log out from all devices",
"back": "Back",
"logOut": "Log out",
"failures": {
"subscriptions": {
"failure": "Failed to connect service",
"exists": "Service have already been connected",
"confirmation": "Invalid confirmation information provided"
},
"services": {
"fork": "Failed to authenticate in service"
}
}
{
"serv": {
"goHome": "Home",
"noSuchPath": "We don't have this page"
},
"sidemenu": {
"dashboard": "Dashboard",
"account": "Account",
"security": "Security",
"services": "Services"
},
"dialogues": {
"confirmAction": {
"title": "Confirm action",
"description": "Enter your techpal account password",
"confirm": "Confirm"
}
},
"hellousr": "Hello, {{username}}",
"edit": "Edit",
"language": "Language",
"selectLanguage": "Select language",
"save": "Save",
"cancel": "Cancel",
"account": {
"info": "Personal information",
"mail": "Mail",
"connect": "Add account",
"connectedAccounts_one": "Connected account",
"connectedAccounts_other": "Connected accounts",
"settings": "Account settings"
},
"security": {
"password": {
"caption": "Password",
"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": "Search for something.."
},
"subscriptions": {
"subscribed": "Service have been connected"
},
"viewHistory": "View history",
"logOutEverywhere": "log out from all devices",
"back": "Back",
"logOut": "Log out",
"failures": {
"subscriptions": {
"failure": "Failed to connect service",
"exists": "Service have already been connected",
"confirmation": "Invalid confirmation information provided"
},
"services": {
"fork": "Failed to authenticate in service"
}
}
}

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

@ -1,63 +1,63 @@
{
"serv": {
"goHome": "На главную",
"noSuchPath": "Такой страницы у нас нет"
},
"sidemenu": {
"dashboard": "Панель",
"account": "Аккаунт",
"security": "Безопасность",
"services": "Сервисы"
},
"dialogues": {
"confirmAction": {
"title": "Подтвердите действие",
"description": "Введите ваш пароль от аккаунта techpal",
"confirm": "Подтвердить"
}
},
"hellousr": "Привет, {{username}}",
"edit": "Изменить",
"language": "Язык",
"selectLanguage": "Выберите язык",
"save": "Сохранить",
"cancel": "Отмена",
"account": {
"info": "Личная информация",
"mail": "Почта",
"connect": "Добавить аккаунт",
"connectedAccounts_one": "Связанный аккаунт",
"connectedAccounts_other": "Связанные аккаунты",
"settings": "Настройки аккаунта"
},
"security": {
"password": {
"caption": "Пароль",
"twoFactor": "Двухфакторная аутентификация (2FA)",
"description": "Защитите свою учетную запись, включив 2FA с помощью SMS или используя временный одноразовый пароль (OTP) из приложения для проверки подлинности."
},
"activity": {
"caption": "Активность устройств"
}
},
"search": {
"label": "Найдём что-нибудь.."
},
"subscriptions": {
"subscribed": "Сервис прикреплён к аккаунту"
},
"viewHistory": "просмотреть историю",
"logOutEverywhere": "выйти со всех устройств",
"back": "Назад",
"logOut": "Выйти",
"failures": {
"subscriptions": {
"failure": "Не удалось прикрепить сервис к аккаунту",
"exists": "Сервис уже был прикреплён к вашему аккаунту ранее",
"confirmation": "Неверный пароль"
},
"services": {
"fork": "Не удалось выполнить авторизацию в сервисе"
}
}
{
"serv": {
"goHome": "На главную",
"noSuchPath": "Такой страницы у нас нет"
},
"sidemenu": {
"dashboard": "Панель",
"account": "Аккаунт",
"security": "Безопасность",
"services": "Сервисы"
},
"dialogues": {
"confirmAction": {
"title": "Подтвердите действие",
"description": "Введите ваш пароль от аккаунта techpal",
"confirm": "Подтвердить"
}
},
"hellousr": "Привет, {{username}}",
"edit": "Изменить",
"language": "Язык",
"selectLanguage": "Выберите язык",
"save": "Сохранить",
"cancel": "Отмена",
"account": {
"info": "Личная информация",
"mail": "Почта",
"connect": "Добавить аккаунт",
"connectedAccounts_one": "Связанный аккаунт",
"connectedAccounts_other": "Связанные аккаунты",
"settings": "Настройки аккаунта"
},
"security": {
"password": {
"caption": "Пароль",
"twoFactor": "Двухфакторная аутентификация (2FA)",
"description": "Защитите свою учетную запись, включив 2FA с помощью SMS или используя временный одноразовый пароль (OTP) из приложения для проверки подлинности."
},
"activity": {
"caption": "Активность устройств"
}
},
"search": {
"label": "Найдём что-нибудь.."
},
"subscriptions": {
"subscribed": "Сервис прикреплён к аккаунту"
},
"viewHistory": "просмотреть историю",
"logOutEverywhere": "выйти со всех устройств",
"back": "Назад",
"logOut": "Выйти",
"failures": {
"subscriptions": {
"failure": "Не удалось прикрепить сервис к аккаунту",
"exists": "Сервис уже был прикреплён к вашему аккаунту ранее",
"confirmation": "Неверный пароль"
},
"services": {
"fork": "Не удалось выполнить авторизацию в сервисе"
}
}
}

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

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

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

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

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

@ -1,25 +1,25 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

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

@ -1,3 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

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

@ -1,23 +1,23 @@
module.exports = {
stories: ['../**/*.stories.mdx', '../**/*.stories.@(js|jsx|ts|tsx)'],
/** Expose public folder to storybook as static */
staticDirs: ['../public'],
addons: [
'@storybook/addon-links',
'@storybook/addon-essentials',
'@storybook/addon-interactions',
'storybook-css-modules-preset',
{
name: '@storybook/addon-postcss',
options: {
postcssLoaderOptions: {
implementation: require('postcss'),
},
},
},
],
framework: '@storybook/react',
core: {
builder: '@storybook/builder-webpack5',
},
module.exports = {
stories: ['../**/*.stories.mdx', '../**/*.stories.@(js|jsx|ts|tsx)'],
/** Expose public folder to storybook as static */
staticDirs: ['../public'],
addons: [
'@storybook/addon-links',
'@storybook/addon-essentials',
'@storybook/addon-interactions',
'storybook-css-modules-preset',
{
name: '@storybook/addon-postcss',
options: {
postcssLoaderOptions: {
implementation: require('postcss'),
},
},
},
],
framework: '@storybook/react',
core: {
builder: '@storybook/builder-webpack5',
},
};

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

@ -1,3 +1,3 @@
export const parameters = {
actions: { argTypesRegex: "^on[A-Z].*" },
export const parameters = {
actions: { argTypesRegex: "^on[A-Z].*" },
}

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

@ -1,38 +1,38 @@
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

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

@ -1,9 +1,9 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
import React from 'react';
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});

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

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

View File

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5495 18.1523C20.0358 21.1083 21.1165 25.66 19.7396 29.9152H30.4102C31.4258 26.9366 34.4857 25.2281 37.9199 26.6722L39.1536 19.4836C39.362 18.2715 38.138 17.2497 36.8978 17.2497H30.0098V11.8372C30.0098 11.415 29.668 11.0636 29.2448 11.0442V8.24616H28.1901V11.0442C27.7767 11.0733 27.4479 11.4182 27.4479 11.834V17.2497H22.0703C23.099 12.4304 21.8978 10.7831 21.2044 5.88004C20.931 5.1773 20.3939 5.01934 19.7884 5H7.25586C6.6276 5.00645 6.19141 5.31591 5.96354 5.96063L5.11393 14.068L3.42122 16.0473C2.68229 16.8951 2.89714 16.6984 3.57747 17.7106C3.69466 17.6268 3.81185 17.543 3.93229 17.4656C7.49349 15.1576 13.1966 15.5734 16.5495 18.1523ZM29.0951 6.74397C29.1439 6.69561 29.222 6.69239 29.2741 6.74074C29.3229 6.7891 29.3262 6.86646 29.2773 6.91804C29.1829 7.01475 29.2188 7.15336 29.2513 7.28231C29.3099 7.50151 29.362 7.70137 29.0951 7.85288C29.0332 7.88834 28.9583 7.86578 28.9225 7.80775C28.8867 7.74973 28.9128 7.67236 28.9714 7.6369C29.069 7.5821 29.0397 7.46928 29.0072 7.34678C28.9583 7.15336 28.903 6.94383 29.0951 6.74397ZM28.3333 6.74397C28.3822 6.69561 28.4603 6.69239 28.5124 6.74074C28.5612 6.7891 28.5645 6.86646 28.5156 6.91804C28.4212 7.01475 28.457 7.15336 28.4896 7.28231C28.5482 7.50151 28.6003 7.70137 28.3333 7.85288C28.2715 7.88834 28.1966 7.86578 28.1608 7.80775C28.125 7.7465 28.1478 7.67236 28.2064 7.6369C28.304 7.5821 28.2747 7.46928 28.2422 7.34678C28.1934 7.15336 28.138 6.94383 28.3333 6.74397ZM14.4694 7.68203V13.6618C15.8659 13.9745 17.2461 14.4032 18.6035 14.9512C19.3132 15.2381 20.1497 14.313 20 13.5683L19.0885 9.06173C18.9388 8.31708 18.4603 7.67881 17.6921 7.67881H14.4694V7.68203ZM13.0827 13.3878V7.68203H9.63216C8.86393 7.68203 8.41146 8.32353 8.23568 9.06496L7.63021 11.6503C7.45768 12.3917 8.25846 13.0203 9.02669 13.0332C10.3939 13.0461 11.7448 13.1654 13.0827 13.3878ZM35.7585 27.2428C38.099 27.2428 40 29.1222 40 31.4432C40 33.7609 38.1022 35.6403 35.7585 35.6403C33.4147 35.6403 31.5202 33.7609 31.5202 31.4432C31.5202 29.1222 33.418 27.2428 35.7585 27.2428ZM9.05925 17.8267C14.0625 17.8267 18.1185 21.8433 18.1185 26.798C18.1185 31.7526 14.0625 35.7692 9.05925 35.7692C4.05599 35.7692 0 31.7526 0 26.798C0 21.8433 4.05599 17.8267 9.05925 17.8267ZM9.05925 21.9755C11.748 21.9755 13.929 24.1353 13.929 26.798C13.929 29.4607 11.748 31.6205 9.05925 31.6205C6.37044 31.6205 4.18945 29.4607 4.18945 26.798C4.18945 24.1353 6.37044 21.9755 9.05925 21.9755ZM35.7585 29.3124C36.9466 29.3124 37.9069 30.2666 37.9069 31.4399C37.9069 32.6166 36.9434 33.5675 35.7585 33.5675C34.5703 33.5675 33.61 32.6133 33.61 31.4399C33.61 30.2666 34.5736 29.3124 35.7585 29.3124ZM29.4564 19.8737H34.8112L34.6908 20.4862H29.3522L29.4564 19.8737ZM27.5781 23.1746H34.8112L34.6908 23.7871H27.4707L27.5781 23.1746ZM28.2454 21.5242H34.8145L34.694 22.1366H28.138L28.2454 21.5242Z" fill="#8C8C8C"/>
</svg>
<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5495 18.1523C20.0358 21.1083 21.1165 25.66 19.7396 29.9152H30.4102C31.4258 26.9366 34.4857 25.2281 37.9199 26.6722L39.1536 19.4836C39.362 18.2715 38.138 17.2497 36.8978 17.2497H30.0098V11.8372C30.0098 11.415 29.668 11.0636 29.2448 11.0442V8.24616H28.1901V11.0442C27.7767 11.0733 27.4479 11.4182 27.4479 11.834V17.2497H22.0703C23.099 12.4304 21.8978 10.7831 21.2044 5.88004C20.931 5.1773 20.3939 5.01934 19.7884 5H7.25586C6.6276 5.00645 6.19141 5.31591 5.96354 5.96063L5.11393 14.068L3.42122 16.0473C2.68229 16.8951 2.89714 16.6984 3.57747 17.7106C3.69466 17.6268 3.81185 17.543 3.93229 17.4656C7.49349 15.1576 13.1966 15.5734 16.5495 18.1523ZM29.0951 6.74397C29.1439 6.69561 29.222 6.69239 29.2741 6.74074C29.3229 6.7891 29.3262 6.86646 29.2773 6.91804C29.1829 7.01475 29.2188 7.15336 29.2513 7.28231C29.3099 7.50151 29.362 7.70137 29.0951 7.85288C29.0332 7.88834 28.9583 7.86578 28.9225 7.80775C28.8867 7.74973 28.9128 7.67236 28.9714 7.6369C29.069 7.5821 29.0397 7.46928 29.0072 7.34678C28.9583 7.15336 28.903 6.94383 29.0951 6.74397ZM28.3333 6.74397C28.3822 6.69561 28.4603 6.69239 28.5124 6.74074C28.5612 6.7891 28.5645 6.86646 28.5156 6.91804C28.4212 7.01475 28.457 7.15336 28.4896 7.28231C28.5482 7.50151 28.6003 7.70137 28.3333 7.85288C28.2715 7.88834 28.1966 7.86578 28.1608 7.80775C28.125 7.7465 28.1478 7.67236 28.2064 7.6369C28.304 7.5821 28.2747 7.46928 28.2422 7.34678C28.1934 7.15336 28.138 6.94383 28.3333 6.74397ZM14.4694 7.68203V13.6618C15.8659 13.9745 17.2461 14.4032 18.6035 14.9512C19.3132 15.2381 20.1497 14.313 20 13.5683L19.0885 9.06173C18.9388 8.31708 18.4603 7.67881 17.6921 7.67881H14.4694V7.68203ZM13.0827 13.3878V7.68203H9.63216C8.86393 7.68203 8.41146 8.32353 8.23568 9.06496L7.63021 11.6503C7.45768 12.3917 8.25846 13.0203 9.02669 13.0332C10.3939 13.0461 11.7448 13.1654 13.0827 13.3878ZM35.7585 27.2428C38.099 27.2428 40 29.1222 40 31.4432C40 33.7609 38.1022 35.6403 35.7585 35.6403C33.4147 35.6403 31.5202 33.7609 31.5202 31.4432C31.5202 29.1222 33.418 27.2428 35.7585 27.2428ZM9.05925 17.8267C14.0625 17.8267 18.1185 21.8433 18.1185 26.798C18.1185 31.7526 14.0625 35.7692 9.05925 35.7692C4.05599 35.7692 0 31.7526 0 26.798C0 21.8433 4.05599 17.8267 9.05925 17.8267ZM9.05925 21.9755C11.748 21.9755 13.929 24.1353 13.929 26.798C13.929 29.4607 11.748 31.6205 9.05925 31.6205C6.37044 31.6205 4.18945 29.4607 4.18945 26.798C4.18945 24.1353 6.37044 21.9755 9.05925 21.9755ZM35.7585 29.3124C36.9466 29.3124 37.9069 30.2666 37.9069 31.4399C37.9069 32.6166 36.9434 33.5675 35.7585 33.5675C34.5703 33.5675 33.61 32.6133 33.61 31.4399C33.61 30.2666 34.5736 29.3124 35.7585 29.3124ZM29.4564 19.8737H34.8112L34.6908 20.4862H29.3522L29.4564 19.8737ZM27.5781 23.1746H34.8112L34.6908 23.7871H27.4707L27.5781 23.1746ZM28.2454 21.5242H34.8145L34.694 22.1366H28.138L28.2454 21.5242Z" fill="#8C8C8C"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M3 10.5C2.44772 10.5 2 10.9477 2 11.5C2 12.0523 2.44772 12.5 3 12.5V10.5ZM20.7071 12.2071C21.0976 11.8166 21.0976 11.1834 20.7071 10.7929L14.3431 4.42893C13.9526 4.03841 13.3195 4.03841 12.9289 4.42893C12.5384 4.81946 12.5384 5.45262 12.9289 5.84315L18.5858 11.5L12.9289 17.1569C12.5384 17.5474 12.5384 18.1805 12.9289 18.5711C13.3195 18.9616 13.9526 18.9616 14.3431 18.5711L20.7071 12.2071ZM3 12.5H20V10.5H3V12.5Z" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M3 10.5C2.44772 10.5 2 10.9477 2 11.5C2 12.0523 2.44772 12.5 3 12.5V10.5ZM20.7071 12.2071C21.0976 11.8166 21.0976 11.1834 20.7071 10.7929L14.3431 4.42893C13.9526 4.03841 13.3195 4.03841 12.9289 4.42893C12.5384 4.81946 12.5384 5.45262 12.9289 5.84315L18.5858 11.5L12.9289 17.1569C12.5384 17.5474 12.5384 18.1805 12.9289 18.5711C13.3195 18.9616 13.9526 18.9616 14.3431 18.5711L20.7071 12.2071ZM3 12.5H20V10.5H3V12.5Z" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 510 B

After

Width:  |  Height:  |  Size: 513 B

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

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 0.707107 0.707107 -0.707107 10.2001 16)" stroke="none" />
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 -0.707107 -0.707107 -0.707107 12 17.8)" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 0.707107 0.707107 -0.707107 10.2001 16)" stroke="none" />
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 -0.707107 -0.707107 -0.707107 12 17.8)" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 341 B

After

Width:  |  Height:  |  Size: 345 B

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

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(-0.707107 0.707107 0.707107 0.707107 8.80005 10.2001)" stroke="none" />
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 0.707107 0.707107 -0.707107 7 12)" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(-0.707107 0.707107 0.707107 0.707107 8.80005 10.2001)" stroke="none" />
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 0.707107 0.707107 -0.707107 7 12)" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 341 B

After

Width:  |  Height:  |  Size: 345 B

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

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect x="16" y="10.2001" width="2.54558" height="12.7279" rx="1.27279" transform="rotate(45 16 10.2001)" stroke="none" />
<rect x="17.8" y="12" width="2.54558" height="12.7279" rx="1.27279" transform="rotate(135 17.8 12)" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect x="16" y="10.2001" width="2.54558" height="12.7279" rx="1.27279" transform="rotate(45 16 10.2001)" stroke="none" />
<rect x="17.8" y="12" width="2.54558" height="12.7279" rx="1.27279" transform="rotate(135 17.8 12)" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 311 B

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

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect x="10.2001" y="8.79999" width="2.54558" height="12.7279" rx="1.27279" transform="rotate(-45 10.2001 8.79999)" stroke="none" />
<rect x="12" y="7" width="2.54558" height="12.7279" rx="1.27279" transform="rotate(45 12 7)" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect x="10.2001" y="8.79999" width="2.54558" height="12.7279" rx="1.27279" transform="rotate(-45 10.2001 8.79999)" stroke="none" />
<rect x="12" y="7" width="2.54558" height="12.7279" rx="1.27279" transform="rotate(45 12 7)" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 311 B

After

Width:  |  Height:  |  Size: 315 B

14
src/assets/svg/background.svg Normal file → Executable file
View File

@ -1,7 +1,7 @@
<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>
<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

After

Width:  |  Height:  |  Size: 1.6 KiB

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

@ -1,5 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 8C18 6.4087 17.3679 4.88258 16.2426 3.75736C15.1174 2.63214 13.5913 2 12 2C10.4087 2 8.88258 2.63214 7.75736 3.75736C6.63214 4.88258 6 6.4087 6 8C6 15 3 17 3 17H21C21 17 18 15 18 8Z" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.73 21C13.5542 21.3031 13.3018 21.5547 12.9982 21.7295C12.6946 21.9044 12.3504 21.9965 12 21.9965C11.6496 21.9965 11.3054 21.9044 11.0018 21.7295C10.6981 21.5547 10.4458 21.3031 10.27 21" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="13" y="1" width="10" height="10" rx="5" stroke="white" fill="#FF4D4F" stroke-width="2"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 8C18 6.4087 17.3679 4.88258 16.2426 3.75736C15.1174 2.63214 13.5913 2 12 2C10.4087 2 8.88258 2.63214 7.75736 3.75736C6.63214 4.88258 6 6.4087 6 8C6 15 3 17 3 17H21C21 17 18 15 18 8Z" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.73 21C13.5542 21.3031 13.3018 21.5547 12.9982 21.7295C12.6946 21.9044 12.3504 21.9965 12 21.9965C11.6496 21.9965 11.3054 21.9044 11.0018 21.7295C10.6981 21.5547 10.4458 21.3031 10.27 21" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="13" y="1" width="10" height="10" rx="5" stroke="white" fill="#FF4D4F" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 730 B

After

Width:  |  Height:  |  Size: 735 B

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

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 8C18 6.4087 17.3679 4.88258 16.2426 3.75736C15.1174 2.63214 13.5913 2 12 2C10.4087 2 8.88258 2.63214 7.75736 3.75736C6.63214 4.88258 6 6.4087 6 8C6 15 3 17 3 17H21C21 17 18 15 18 8Z" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.73 21C13.5542 21.3031 13.3018 21.5547 12.9982 21.7295C12.6946 21.9044 12.3504 21.9965 12 21.9965C11.6496 21.9965 11.3054 21.9044 11.0018 21.7295C10.6981 21.5547 10.4458 21.3031 10.27 21" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 8C18 6.4087 17.3679 4.88258 16.2426 3.75736C15.1174 2.63214 13.5913 2 12 2C10.4087 2 8.88258 2.63214 7.75736 3.75736C6.63214 4.88258 6 6.4087 6 8C6 15 3 17 3 17H21C21 17 18 15 18 8Z" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.73 21C13.5542 21.3031 13.3018 21.5547 12.9982 21.7295C12.6946 21.9044 12.3504 21.9965 12 21.9965C11.6496 21.9965 11.3054 21.9044 11.0018 21.7295C10.6981 21.5547 10.4458 21.3031 10.27 21" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 633 B

After

Width:  |  Height:  |  Size: 637 B

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

@ -1,3 +1,3 @@
<svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M6 21.3242V4C6 3.44772 6.44772 3 7 3H17C17.5523 3 18 3.44771 18 4V21.3242C18 21.5563 17.7112 21.6631 17.5602 21.4869L12.7593 15.8858C12.3602 15.4202 11.6398 15.4202 11.2407 15.8858L6.43981 21.4869C6.28876 21.6631 6 21.5563 6 21.3242Z" stroke-width="2" />
</svg>
<svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M6 21.3242V4C6 3.44772 6.44772 3 7 3H17C17.5523 3 18 3.44771 18 4V21.3242C18 21.5563 17.7112 21.6631 17.5602 21.4869L12.7593 15.8858C12.3602 15.4202 11.6398 15.4202 11.2407 15.8858L6.43981 21.4869C6.28876 21.6631 6 21.5563 6 21.3242Z" stroke-width="2" />
</svg>

Before

Width:  |  Height:  |  Size: 344 B

After

Width:  |  Height:  |  Size: 347 B

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

@ -1,3 +1,3 @@
<svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M6 21.3242V4C6 3.44772 6.44772 3 7 3H17C17.5523 3 18 3.44771 18 4V21.3242C18 21.5563 17.7112 21.6631 17.5602 21.4869L12.7593 15.8858C12.3602 15.4202 11.6398 15.4202 11.2407 15.8858L6.43981 21.4869C6.28876 21.6631 6 21.5563 6 21.3242Z" stroke-width="2" fill="none" />
</svg>
<svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M6 21.3242V4C6 3.44772 6.44772 3 7 3H17C17.5523 3 18 3.44771 18 4V21.3242C18 21.5563 17.7112 21.6631 17.5602 21.4869L12.7593 15.8858C12.3602 15.4202 11.6398 15.4202 11.2407 15.8858L6.43981 21.4869C6.28876 21.6631 6 21.5563 6 21.3242Z" stroke-width="2" fill="none" />
</svg>

Before

Width:  |  Height:  |  Size: 356 B

After

Width:  |  Height:  |  Size: 359 B

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.1315 4.6875H2.86897C2.56116 4.6875 2.38929 5.0125 2.57991 5.23438L7.71116 11.1844C7.85804 11.3547 8.14085 11.3547 8.28929 11.1844L13.4205 5.23438C13.6112 5.0125 13.4393 4.6875 13.1315 4.6875Z" stroke="none" />
</svg>
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.1315 4.6875H2.86897C2.56116 4.6875 2.38929 5.0125 2.57991 5.23438L7.71116 11.1844C7.85804 11.3547 8.14085 11.3547 8.28929 11.1844L13.4205 5.23438C13.6112 5.0125 13.4393 4.6875 13.1315 4.6875Z" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 303 B

After

Width:  |  Height:  |  Size: 306 B

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.3125 13.131L11.3125 2.86855C11.3125 2.56073 10.9875 2.38886 10.7657 2.57948L4.81566 7.71073C4.64534 7.85761 4.64534 8.14042 4.81566 8.28886L10.7657 13.4201C10.9875 13.6107 11.3125 13.4389 11.3125 13.131Z" stroke="none" />
</svg>
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.3125 13.131L11.3125 2.86855C11.3125 2.56073 10.9875 2.38886 10.7657 2.57948L4.81566 7.71073C4.64534 7.85761 4.64534 8.14042 4.81566 8.28886L10.7657 13.4201C10.9875 13.6107 11.3125 13.4389 11.3125 13.131Z" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 315 B

After

Width:  |  Height:  |  Size: 318 B

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.68793 2.86853L4.68793 13.131C4.68793 13.4388 5.01293 13.6107 5.2348 13.4201L11.1848 8.28884C11.3551 8.14196 11.3551 7.85915 11.1848 7.71071L5.2348 2.57946C5.01293 2.38884 4.68793 2.56071 4.68793 2.86853Z" stroke="none" />
</svg>
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.68793 2.86853L4.68793 13.131C4.68793 13.4388 5.01293 13.6107 5.2348 13.4201L11.1848 8.28884C11.3551 8.14196 11.3551 7.85915 11.1848 7.71071L5.2348 2.57946C5.01293 2.38884 4.68793 2.56071 4.68793 2.86853Z" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 314 B

After

Width:  |  Height:  |  Size: 317 B

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.1315 11.3121H2.86897C2.56116 11.3121 2.38929 10.9871 2.57991 10.7653L7.71116 4.81526C7.85804 4.64495 8.14085 4.64495 8.28929 4.81526L13.4205 10.7653C13.6112 10.9871 13.4393 11.3121 13.1315 11.3121Z" stroke="none" />
</svg>
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.1315 11.3121H2.86897C2.56116 11.3121 2.38929 10.9871 2.57991 10.7653L7.71116 4.81526C7.85804 4.64495 8.14085 4.64495 8.28929 4.81526L13.4205 10.7653C13.6112 10.9871 13.4393 11.3121 13.1315 11.3121Z" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 309 B

After

Width:  |  Height:  |  Size: 312 B

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

@ -1,6 +1,6 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="5" y="12" width="2" height="8" rx="1" stroke="none" />
<rect x="9" y="6" width="2" height="14" rx="1" stroke="none" />
<rect x="13" y="8" width="2" height="12" rx="1" stroke="none" />
<rect x="17" y="4" width="2" height="16" rx="1" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="5" y="12" width="2" height="8" rx="1" stroke="none" />
<rect x="9" y="6" width="2" height="14" rx="1" stroke="none" />
<rect x="13" y="8" width="2" height="12" rx="1" stroke="none" />
<rect x="17" y="4" width="2" height="16" rx="1" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 339 B

After

Width:  |  Height:  |  Size: 345 B

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

@ -1,6 +1,6 @@
<svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(-0.707107 0.707107 0.707107 0.707107 12.8 10.2001)" stroke="none" />
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 0.707107 0.707107 -0.707107 11 12)" stroke="none" />
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(-0.707107 0.707107 0.707107 0.707107 3.79999 10.2001)" stroke="none"/>
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 0.707107 0.707107 -0.707107 2 12)" stroke="none" />
</svg>
<svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(-0.707107 0.707107 0.707107 0.707107 12.8 10.2001)" stroke="none" />
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 0.707107 0.707107 -0.707107 11 12)" stroke="none" />
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(-0.707107 0.707107 0.707107 0.707107 3.79999 10.2001)" stroke="none"/>
<rect width="2.54558" height="12.7279" rx="1.27279" transform="matrix(0.707107 0.707107 0.707107 -0.707107 2 12)" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 639 B

After

Width:  |  Height:  |  Size: 645 B

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

@ -1,6 +1,6 @@
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="2" height="10" rx="1" transform="matrix(0.707107 -0.707107 -0.707107 -0.707107 13.8284 9.41425)" stroke="none" />
<rect width="2" height="10" rx="1" transform="matrix(-0.707107 -0.707107 -0.707107 0.707107 15.2426 8.00006)" stroke="none" />
<rect width="2" height="10" rx="1" transform="matrix(0.707107 -0.707107 -0.707107 -0.707107 7.82843 9.41425)" stroke="none" />
<rect width="2" height="10" rx="1" transform="matrix(-0.707107 -0.707107 -0.707107 0.707107 9.24265 8.00006)" stroke="none" />
</svg>
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="2" height="10" rx="1" transform="matrix(0.707107 -0.707107 -0.707107 -0.707107 13.8284 9.41425)" stroke="none" />
<rect width="2" height="10" rx="1" transform="matrix(-0.707107 -0.707107 -0.707107 0.707107 15.2426 8.00006)" stroke="none" />
<rect width="2" height="10" rx="1" transform="matrix(0.707107 -0.707107 -0.707107 -0.707107 7.82843 9.41425)" stroke="none" />
<rect width="2" height="10" rx="1" transform="matrix(-0.707107 -0.707107 -0.707107 0.707107 9.24265 8.00006)" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 588 B

After

Width:  |  Height:  |  Size: 594 B

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="3" y="3" width="18" height="18" rx="9" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="3" y="3" width="18" height="18" rx="9" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 145 B

After

Width:  |  Height:  |  Size: 148 B

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

@ -1,9 +1,9 @@
<svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M19 12V4C19 2.89543 18.1046 2 17 2H5C3.89543 2 3 2.89543 3 4V20C3 21.1046 3.89543 22 5 22H8" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M7 6H15" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M7 10H11" stroke-width="2" stroke-linecap="round"/>
<path d="M11.5 19.5H15C15.2761 19.5 15.5 19.7239 15.5 20V22C15.5 22.2761 15.2761 22.5 15 22.5H12C11.7239 22.5 11.5 22.2761 11.5 22V19.5Z"/>
<path fill="none" d="M12 20V18C12 16.8954 12.8954 16 14 16L15 16" stroke-width="2" stroke-linecap="round"/>
<path d="M17.5 19.5H21C21.2761 19.5 21.5 19.7239 21.5 20V22C21.5 22.2761 21.2761 22.5 21 22.5H18C17.7239 22.5 17.5 22.2761 17.5 22V19.5Z"/>
<path fill="none" d="M18 20V18C18 16.8954 18.8954 16 20 16L21 16" stroke-width="2" stroke-linecap="round"/>
</svg>
<svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M19 12V4C19 2.89543 18.1046 2 17 2H5C3.89543 2 3 2.89543 3 4V20C3 21.1046 3.89543 22 5 22H8" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M7 6H15" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M7 10H11" stroke-width="2" stroke-linecap="round"/>
<path d="M11.5 19.5H15C15.2761 19.5 15.5 19.7239 15.5 20V22C15.5 22.2761 15.2761 22.5 15 22.5H12C11.7239 22.5 11.5 22.2761 11.5 22V19.5Z"/>
<path fill="none" d="M12 20V18C12 16.8954 12.8954 16 14 16L15 16" stroke-width="2" stroke-linecap="round"/>
<path d="M17.5 19.5H21C21.2761 19.5 21.5 19.7239 21.5 20V22C21.5 22.2761 21.2761 22.5 21 22.5H18C17.7239 22.5 17.5 22.2761 17.5 22V19.5Z"/>
<path fill="none" d="M18 20V18C18 16.8954 18.8954 16 20 16L21 16" stroke-width="2" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 906 B

After

Width:  |  Height:  |  Size: 915 B

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

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17 8V20C17 21.1046 16.1046 22 15 22H10H5C3.89543 22 3 21.1046 3 20V8C3 6.89543 3.89543 6 5 6H15C16.1046 6 17 6.89543 17 8Z" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M7 6V4C7 2.89543 7.89543 2 9 2H19C20.1046 2 21 2.89543 21 4V17C21 18.1046 20.1046 19 19 19H17" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17 8V20C17 21.1046 16.1046 22 15 22H10H5C3.89543 22 3 21.1046 3 20V8C3 6.89543 3.89543 6 5 6H15C16.1046 6 17 6.89543 17 8Z" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M7 6V4C7 2.89543 7.89543 2 9 2H19C20.1046 2 21 2.89543 21 4V17C21 18.1046 20.1046 19 19 19H17" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 426 B

After

Width:  |  Height:  |  Size: 430 B

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

@ -1,5 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M17.0689 21H6.93112C6.40648 21 5.97104 20.5946 5.93366 20.0712L5.07652 8.07125C5.03517 7.49238 5.49363 7 6.07398 7H17.926C18.5064 7 18.9648 7.49238 18.9235 8.07125L18.0663 20.0712C18.029 20.5946 17.5935 21 17.0689 21Z" stroke-width="2"/>
<path fill="none" d="M3 7H21" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M7 7V4C7 3.44772 7.44772 3 8 3H16C16.5523 3 17 3.44772 17 4V7" stroke-width="2" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M17.0689 21H6.93112C6.40648 21 5.97104 20.5946 5.93366 20.0712L5.07652 8.07125C5.03517 7.49238 5.49363 7 6.07398 7H17.926C18.5064 7 18.9648 7.49238 18.9235 8.07125L18.0663 20.0712C18.029 20.5946 17.5935 21 17.0689 21Z" stroke-width="2"/>
<path fill="none" d="M3 7H21" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M7 7V4C7 3.44772 7.44772 3 8 3H16C16.5523 3 17 3.44772 17 4V7" stroke-width="2" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 537 B

After

Width:  |  Height:  |  Size: 542 B

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

@ -1,5 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M4 12V18C4 19.1046 4.89543 20 6 20H18C19.1046 20 20 19.1046 20 18V12" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M12 4L12 13" stroke-width="2" stroke-linecap="round"/>
<path d="M8.36682 12.6402C7.82405 11.9889 8.2872 11 9.13504 11H14.865C15.7128 11 16.176 11.9889 15.6332 12.6402L12.7682 16.0781C12.3684 16.5579 11.6316 16.5579 11.2318 16.0781L8.36682 12.6402Z"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M4 12V18C4 19.1046 4.89543 20 6 20H18C19.1046 20 20 19.1046 20 18V12" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M12 4L12 13" stroke-width="2" stroke-linecap="round"/>
<path d="M8.36682 12.6402C7.82405 11.9889 8.2872 11 9.13504 11H14.865C15.7128 11 16.176 11.9889 15.6332 12.6402L12.7682 16.0781C12.3684 16.5579 11.6316 16.5579 11.2318 16.0781L8.36682 12.6402Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 485 B

After

Width:  |  Height:  |  Size: 490 B

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

@ -1,6 +1,6 @@
<svg viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 20.5V8.5C8 7.39543 8.89543 6.5 10 6.5H15.5H18C19.1046 6.5 20 7.39543 20 8.5L20 11.3V20.5C20 21.6046 19.1046 22.5 18 22.5H10C8.89543 22.5 8 21.6046 8 20.5Z" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M11 14.5H17" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M11 18.5H17" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M16 6.3L16 4.50001C16 3.39543 15.1046 2.5 14 2.5H11.5H6C4.89543 2.5 4 3.39543 4 4.5V16.5C4 17.6046 4.89543 18.5 6 18.5H8" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 20.5V8.5C8 7.39543 8.89543 6.5 10 6.5H15.5H18C19.1046 6.5 20 7.39543 20 8.5L20 11.3V20.5C20 21.6046 19.1046 22.5 18 22.5H10C8.89543 22.5 8 21.6046 8 20.5Z" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M11 14.5H17" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M11 18.5H17" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M16 6.3L16 4.50001C16 3.39543 15.1046 2.5 14 2.5H11.5H6C4.89543 2.5 4 3.39543 4 4.5V16.5C4 17.6046 4.89543 18.5 6 18.5H8" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 639 B

After

Width:  |  Height:  |  Size: 645 B

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M5 15L3.5 16.5L2 22L7.5 20.5L9 19M5 15L17 3C17.2626 2.73735 17.5744 2.52901 17.9176 2.38687C18.2608 2.24473 18.6286 2.17157 19 2.17157C19.3714 2.17157 19.7392 2.24473 20.0824 2.38687C20.4256 2.52901 20.7374 2.73735 21 3C21.2626 3.26264 21.471 3.57444 21.6131 3.9176C21.7553 4.26077 21.8284 4.62856 21.8284 5C21.8284 5.37143 21.7553 5.73923 21.6131 6.08239C21.471 6.42555 21.2626 6.73735 21 7L9 19M5 15L9 19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M5 15L3.5 16.5L2 22L7.5 20.5L9 19M5 15L17 3C17.2626 2.73735 17.5744 2.52901 17.9176 2.38687C18.2608 2.24473 18.6286 2.17157 19 2.17157C19.3714 2.17157 19.7392 2.24473 20.0824 2.38687C20.4256 2.52901 20.7374 2.73735 21 3C21.2626 3.26264 21.471 3.57444 21.6131 3.9176C21.7553 4.26077 21.8284 4.62856 21.8284 5C21.8284 5.37143 21.7553 5.73923 21.6131 6.08239C21.471 6.42555 21.2626 6.73735 21 7L9 19M5 15L9 19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 575 B

After

Width:  |  Height:  |  Size: 578 B

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

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M11 4H4C3.46957 4 2.96086 4.21071 2.58579 4.58579C2.21071 4.96086 2 5.46957 2 6V19C2 19.5304 2.21071 20.0391 2.58579 20.4142C2.96086 20.7893 3.46957 21 4 21H18C18.5304 21 19.0391 20.7893 19.4142 20.4142C19.7893 20.0391 20 19.5304 20 19V13" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path fill="none" d="M18.5 2.49998C18.8978 2.10216 19.4374 1.87866 20 1.87866C20.5626 1.87866 21.1022 2.10216 21.5 2.49998C21.8978 2.89781 22.1213 3.43737 22.1213 3.99998C22.1213 4.56259 21.8978 5.10216 21.5 5.49998L12 15L8 16L9 12L18.5 2.49998Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M11 4H4C3.46957 4 2.96086 4.21071 2.58579 4.58579C2.21071 4.96086 2 5.46957 2 6V19C2 19.5304 2.21071 20.0391 2.58579 20.4142C2.96086 20.7893 3.46957 21 4 21H18C18.5304 21 19.0391 20.7893 19.4142 20.4142C19.7893 20.0391 20 19.5304 20 19V13" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path fill="none" d="M18.5 2.49998C18.8978 2.10216 19.4374 1.87866 20 1.87866C20.5626 1.87866 21.1022 2.10216 21.5 2.49998C21.8978 2.89781 22.1213 3.43737 22.1213 3.99998C22.1213 4.56259 21.8978 5.10216 21.5 5.49998L12 15L8 16L9 12L18.5 2.49998Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 725 B

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

@ -1,5 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path fill="none" d="M12 8V12" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path fill="none" d="M12 16H12.01" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path fill="none" d="M12 8V12" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path fill="none" d="M12 16H12.01" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 480 B

After

Width:  |  Height:  |  Size: 485 B

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

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M1 12C1 12 5 4 12 4C19 4 23 12 23 12C23 12 19 20 12 20C5 20 1 12 1 12Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path fill="none" d="M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M1 12C1 12 5 4 12 4C19 4 23 12 23 12C23 12 19 20 12 20C5 20 1 12 1 12Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path fill="none" d="M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 441 B

After

Width:  |  Height:  |  Size: 445 B

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.8576 1.28333H2.14328C1.66917 1.28333 1.28613 1.66636 1.28613 2.14047V21.8548C1.28613 22.3289 1.66917 22.7119 2.14328 22.7119H21.8576C22.3317 22.7119 22.7147 22.3289 22.7147 21.8548V2.14047C22.7147 1.66636 22.3317 1.28333 21.8576 1.28333ZM21.0004 20.9976H16.0692V14.4137H18.8549L19.2727 11.1806H16.0692V9.11547C16.0692 8.17797 16.329 7.54047 17.671 7.54047H19.3826V4.64761C19.0852 4.60743 18.0701 4.51904 16.8861 4.51904C14.4165 4.51904 12.7263 6.02708 12.7263 8.79404V11.178H9.93524V14.411H12.729V20.9976H3.00042V2.99761H21.0004V20.9976Z" stroke="none"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.8576 1.28333H2.14328C1.66917 1.28333 1.28613 1.66636 1.28613 2.14047V21.8548C1.28613 22.3289 1.66917 22.7119 2.14328 22.7119H21.8576C22.3317 22.7119 22.7147 22.3289 22.7147 21.8548V2.14047C22.7147 1.66636 22.3317 1.28333 21.8576 1.28333ZM21.0004 20.9976H16.0692V14.4137H18.8549L19.2727 11.1806H16.0692V9.11547C16.0692 8.17797 16.329 7.54047 17.671 7.54047H19.3826V4.64761C19.0852 4.60743 18.0701 4.51904 16.8861 4.51904C14.4165 4.51904 12.7263 6.02708 12.7263 8.79404V11.178H9.93524V14.411H12.729V20.9976H3.00042V2.99761H21.0004V20.9976Z" stroke="none"/>
</svg>

Before

Width:  |  Height:  |  Size: 648 B

After

Width:  |  Height:  |  Size: 651 B

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 3L14.9048 9.50932L22 10.2574L16.7 15.0284L18.1803 22L12 18.4393L5.81966 22L7.3 15.0284L2 10.2574L9.09524 9.50932L12 3Z" stroke-width="2" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 3L14.9048 9.50932L22 10.2574L16.7 15.0284L18.1803 22L12 18.4393L5.81966 22L7.3 15.0284L2 10.2574L9.09524 9.50932L12 3Z" stroke-width="2" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 256 B

After

Width:  |  Height:  |  Size: 259 B

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

@ -1,3 +1,3 @@
<svg viewBox="0 0 24 24" fill="none" stroke="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M12 3L14.9048 9.50932L22 10.2574L16.7 15.0284L18.1803 22L12 18.4393L5.81966 22L7.3 15.0284L2 10.2574L9.09524 9.50932L12 3Z" stroke-width="2" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" stroke="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M12 3L14.9048 9.50932L22 10.2574L16.7 15.0284L18.1803 22L12 18.4393L5.81966 22L7.3 15.0284L2 10.2574L9.09524 9.50932L12 3Z" stroke-width="2" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 285 B

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

@ -1,5 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4 20V4C4 2.89543 4.89543 2 6 2H13.1716C13.702 2 14.2107 2.21071 14.5858 2.58579L19.4142 7.41421C19.7893 7.78929 20 8.29799 20 8.82843V20C20 21.1046 19.1046 22 18 22H6C4.89543 22 4 21.1046 4 20Z" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M14 8L19 8" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M14 3V8" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4 20V4C4 2.89543 4.89543 2 6 2H13.1716C13.702 2 14.2107 2.21071 14.5858 2.58579L19.4142 7.41421C19.7893 7.78929 20 8.29799 20 8.82843V20C20 21.1046 19.1046 22 18 22H6C4.89543 22 4 21.1046 4 20Z" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M14 8L19 8" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M14 3V8" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 486 B

After

Width:  |  Height:  |  Size: 491 B

14
src/assets/svg/filetext.svg Normal file → Executable file
View File

@ -1,7 +1,7 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M4 20V4C4 2.89543 4.89543 2 6 2H13.1716C13.702 2 14.2107 2.21071 14.5858 2.58579L19.4142 7.41421C19.7893 7.78929 20 8.29799 20 8.82843V20C20 21.1046 19.1046 22 18 22H6C4.89543 22 4 21.1046 4 20Z" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M8 14H16" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M14 8L19 8" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M14 3V8" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M8 18H16" stroke-width="2" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill="none" d="M4 20V4C4 2.89543 4.89543 2 6 2H13.1716C13.702 2 14.2107 2.21071 14.5858 2.58579L19.4142 7.41421C19.7893 7.78929 20 8.29799 20 8.82843V20C20 21.1046 19.1046 22 18 22H6C4.89543 22 4 21.1046 4 20Z" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M8 14H16" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M14 8L19 8" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M14 3V8" stroke-width="2" stroke-linecap="round"/>
<path fill="none" d="M8 18H16" stroke-width="2" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 632 B

After

Width:  |  Height:  |  Size: 639 B

16
src/assets/svg/filter.svg Normal file → Executable file
View File

@ -1,8 +1,8 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="2" y="4" width="20" height="2" rx="1" stroke="none" />
<rect x="5" y="2" width="6" height="6" rx="3" stroke="none" />
<rect width="20" height="2" rx="1" transform="matrix(-1 0 0 1 22 11)" stroke="none" />
<rect width="6" height="6" rx="3" transform="matrix(-1 0 0 1 19 9)" stroke="none" />
<rect x="2" y="18" width="20" height="2" rx="1" stroke="none" />
<rect x="5" y="16" width="6" height="6" rx="3" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="2" y="4" width="20" height="2" rx="1" stroke="none" />
<rect x="5" y="2" width="6" height="6" rx="3" stroke="none" />
<rect width="20" height="2" rx="1" transform="matrix(-1 0 0 1 22 11)" stroke="none" />
<rect width="6" height="6" rx="3" transform="matrix(-1 0 0 1 19 9)" stroke="none" />
<rect x="2" y="18" width="20" height="2" rx="1" stroke="none" />
<rect x="5" y="16" width="6" height="6" rx="3" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 508 B

After

Width:  |  Height:  |  Size: 516 B

8
src/assets/svg/flag.svg Normal file → Executable file
View File

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4 3L4 21" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M15 3H16C16 2.44772 15.5523 2 15 2V3ZM4 3V2C3.44772 2 3 2.44772 3 3H4ZM15 6H14C14 6.55228 14.4477 7 15 7V6ZM20 6H21C21 5.44772 20.5523 5 20 5V6ZM20 16V17C20.5523 17 21 16.5523 21 16H20ZM9 16H8C8 16.5523 8.44772 17 9 17V16ZM9 13H10C10 12.4477 9.55228 12 9 12V13ZM4 13H3C3 13.5523 3.44772 14 4 14V13ZM15 2H4V4H15V2ZM16 6V3H14V6H16ZM20 5H15V7H20V5ZM21 16V6H19V16H21ZM9 17H20V15H9V17ZM8 13V16H10V13H8ZM4 14H9V12H4V14ZM3 3V13H5V3H3Z" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4 3L4 21" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M15 3H16C16 2.44772 15.5523 2 15 2V3ZM4 3V2C3.44772 2 3 2.44772 3 3H4ZM15 6H14C14 6.55228 14.4477 7 15 7V6ZM20 6H21C21 5.44772 20.5523 5 20 5V6ZM20 16V17C20.5523 17 21 16.5523 21 16H20ZM9 16H8C8 16.5523 8.44772 17 9 17V16ZM9 13H10C10 12.4477 9.55228 12 9 12V13ZM4 13H3C3 13.5523 3.44772 14 4 14V13ZM15 2H4V4H15V2ZM16 6V3H14V6H16ZM20 5H15V7H20V5ZM21 16V6H19V16H21ZM9 17H20V15H9V17ZM8 13V16H10V13H8ZM4 14H9V12H4V14ZM3 3V13H5V3H3Z" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 609 B

After

Width:  |  Height:  |  Size: 613 B

10
src/assets/svg/folder.svg Normal file → Executable file
View File

@ -1,5 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20 19H4C3.44772 19 3 18.5523 3 18V6C3 5.44772 3.44772 5 4 5H8.58579C8.851 5 9.10536 5.10536 9.29289 5.29289L11.7071 7.70711C11.8946 7.89464 12.149 8 12.4142 8H20C20.5523 8 21 8.44772 21 9V18C21 18.5523 20.5523 19 20 19Z" fill="none" stroke-width="2"/>
<path stroke="none" d="M13 11C13 10.4477 12.5523 10 12 10C11.4477 10 11 10.4477 11 11H13ZM11 16C11 16.5523 11.4477 17 12 17C12.5523 17 13 16.5523 13 16H11ZM11 11V16H13V11H11Z" />
<path stroke="none" d="M14.5 14.5C15.0523 14.5 15.5 14.0523 15.5 13.5C15.5 12.9477 15.0523 12.5 14.5 12.5L14.5 14.5ZM9.5 12.5C8.94772 12.5 8.5 12.9477 8.5 13.5C8.5 14.0523 8.94772 14.5 9.5 14.5L9.5 12.5ZM14.5 12.5L9.5 12.5L9.5 14.5L14.5 14.5L14.5 12.5Z" />
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20 19H4C3.44772 19 3 18.5523 3 18V6C3 5.44772 3.44772 5 4 5H8.58579C8.851 5 9.10536 5.10536 9.29289 5.29289L11.7071 7.70711C11.8946 7.89464 12.149 8 12.4142 8H20C20.5523 8 21 8.44772 21 9V18C21 18.5523 20.5523 19 20 19Z" fill="none" stroke-width="2"/>
<path stroke="none" d="M13 11C13 10.4477 12.5523 10 12 10C11.4477 10 11 10.4477 11 11H13ZM11 16C11 16.5523 11.4477 17 12 17C12.5523 17 13 16.5523 13 16H11ZM11 11V16H13V11H11Z" />
<path stroke="none" d="M14.5 14.5C15.0523 14.5 15.5 14.0523 15.5 13.5C15.5 12.9477 15.0523 12.5 14.5 12.5L14.5 14.5ZM9.5 12.5C8.94772 12.5 8.5 12.9477 8.5 13.5C8.5 14.0523 8.94772 14.5 9.5 14.5L9.5 12.5ZM14.5 12.5L9.5 12.5L9.5 14.5L14.5 14.5L14.5 12.5Z" />
</svg>

Before

Width:  |  Height:  |  Size: 778 B

After

Width:  |  Height:  |  Size: 783 B

6
src/assets/svg/formula.svg Normal file → Executable file
View File

@ -1,3 +1,3 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.53306 7.59408L5.8649 8.34277L5.93056 8.62598H7.65104C7.29972 10.641 7.03705 12.4574 6.53306 15.2568C5.93056 18.8278 5.58417 19.7051 5.37896 20.0257C5.19838 20.3431 4.93899 20.5075 4.58768 20.5075C4.20188 20.5075 3.50417 20.2048 3.12987 19.8613C2.99525 19.7702 2.83601 19.793 2.66692 19.9036C2.32873 20.1868 2.0004 20.623 2.0004 21.0137C1.9807 21.541 2.69154 22 3.36956 22C3.96712 22 4.84706 21.6289 5.77296 20.7565C7.03869 19.5667 7.98594 17.9342 8.77722 14.4056C9.28614 12.153 9.52583 10.6882 9.88371 8.6276L12.0212 8.43555L12.4841 7.59408H10.0774C10.6996 3.71387 11.1856 3.13932 11.7831 3.13932C12.1804 3.13932 12.6434 3.44206 13.1753 4.03776C13.3329 4.2526 13.5693 4.22982 13.7499 4.08333C14.0536 3.9043 14.4279 3.44531 14.4525 3.02865C14.4705 2.56966 13.9189 2 12.9701 2C12.1098 2 10.7916 2.56966 9.68343 3.68945C8.71156 4.70996 8.20264 5.98438 7.85132 7.59408H6.53306ZM13.3723 10.1917C14.0355 9.31608 14.4328 9.02474 14.638 9.02474C14.8498 9.02474 15.0189 9.23145 15.3817 10.3936L16.0022 12.3776C14.8022 14.1973 13.9239 15.2113 13.3903 15.2113C13.213 15.2113 13.0341 15.1559 12.9077 15.0322C12.7829 14.9085 12.645 14.806 12.5104 14.806C12.0704 14.806 11.5254 15.335 11.5155 15.9909C11.5057 16.6598 11.9785 17.1383 12.599 17.1383C13.6645 17.1383 14.5658 16.1016 16.3059 13.3525L16.8149 15.0534C17.2515 16.515 17.7637 17.1383 18.404 17.1383C19.1953 17.1383 20.2591 16.4694 21.4197 14.6611L20.9338 14.111C20.2361 14.9443 19.7731 15.335 19.499 15.335C19.1936 15.335 18.926 14.8727 18.5731 13.7367L17.8294 11.3392C18.2694 10.6963 18.7028 10.1559 19.0836 9.72461C19.5367 9.21191 19.8864 8.99382 20.1245 8.99382C20.3247 8.99382 20.4988 9.07845 20.6071 9.19727C20.7499 9.35352 20.8353 9.42676 21.0044 9.42676C21.3869 9.42676 21.9779 8.94499 21.9993 8.30697C22.019 7.71452 21.6479 7.20996 21.0044 7.20996C20.0325 7.20996 19.1756 8.04004 17.5257 10.4717L17.1859 9.42839C16.7098 7.96354 16.3946 7.20996 15.7313 7.20996C14.9598 7.20996 13.8992 8.15072 12.8617 9.6416L13.3723 10.1917Z" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.53306 7.59408L5.8649 8.34277L5.93056 8.62598H7.65104C7.29972 10.641 7.03705 12.4574 6.53306 15.2568C5.93056 18.8278 5.58417 19.7051 5.37896 20.0257C5.19838 20.3431 4.93899 20.5075 4.58768 20.5075C4.20188 20.5075 3.50417 20.2048 3.12987 19.8613C2.99525 19.7702 2.83601 19.793 2.66692 19.9036C2.32873 20.1868 2.0004 20.623 2.0004 21.0137C1.9807 21.541 2.69154 22 3.36956 22C3.96712 22 4.84706 21.6289 5.77296 20.7565C7.03869 19.5667 7.98594 17.9342 8.77722 14.4056C9.28614 12.153 9.52583 10.6882 9.88371 8.6276L12.0212 8.43555L12.4841 7.59408H10.0774C10.6996 3.71387 11.1856 3.13932 11.7831 3.13932C12.1804 3.13932 12.6434 3.44206 13.1753 4.03776C13.3329 4.2526 13.5693 4.22982 13.7499 4.08333C14.0536 3.9043 14.4279 3.44531 14.4525 3.02865C14.4705 2.56966 13.9189 2 12.9701 2C12.1098 2 10.7916 2.56966 9.68343 3.68945C8.71156 4.70996 8.20264 5.98438 7.85132 7.59408H6.53306ZM13.3723 10.1917C14.0355 9.31608 14.4328 9.02474 14.638 9.02474C14.8498 9.02474 15.0189 9.23145 15.3817 10.3936L16.0022 12.3776C14.8022 14.1973 13.9239 15.2113 13.3903 15.2113C13.213 15.2113 13.0341 15.1559 12.9077 15.0322C12.7829 14.9085 12.645 14.806 12.5104 14.806C12.0704 14.806 11.5254 15.335 11.5155 15.9909C11.5057 16.6598 11.9785 17.1383 12.599 17.1383C13.6645 17.1383 14.5658 16.1016 16.3059 13.3525L16.8149 15.0534C17.2515 16.515 17.7637 17.1383 18.404 17.1383C19.1953 17.1383 20.2591 16.4694 21.4197 14.6611L20.9338 14.111C20.2361 14.9443 19.7731 15.335 19.499 15.335C19.1936 15.335 18.926 14.8727 18.5731 13.7367L17.8294 11.3392C18.2694 10.6963 18.7028 10.1559 19.0836 9.72461C19.5367 9.21191 19.8864 8.99382 20.1245 8.99382C20.3247 8.99382 20.4988 9.07845 20.6071 9.19727C20.7499 9.35352 20.8353 9.42676 21.0044 9.42676C21.3869 9.42676 21.9779 8.94499 21.9993 8.30697C22.019 7.71452 21.6479 7.20996 21.0044 7.20996C20.0325 7.20996 19.1756 8.04004 17.5257 10.4717L17.1859 9.42839C16.7098 7.96354 16.3946 7.20996 15.7313 7.20996C14.9598 7.20996 13.8992 8.15072 12.8617 9.6416L13.3723 10.1917Z" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

6
src/assets/svg/fundamental.svg Normal file → Executable file

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

14
src/assets/svg/grid.svg Normal file → Executable file
View File

@ -1,7 +1,7 @@
<svg viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" transform="translate(0 0.5)" fill="white"/>
<rect x="2" y="7.5" width="20" height="2" rx="1" stroke="none"/>
<rect x="2" y="15.5" width="20" height="2" rx="1" stroke="none"/>
<rect x="7" y="22.5" width="20" height="2" rx="1" transform="rotate(-90 7 22.5)" stroke="none"/>
<rect x="15" y="22.5" width="20" height="2" rx="1" transform="rotate(-90 15 22.5)" stroke="none"/>
</svg>
<svg viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" transform="translate(0 0.5)" fill="white"/>
<rect x="2" y="7.5" width="20" height="2" rx="1" stroke="none"/>
<rect x="2" y="15.5" width="20" height="2" rx="1" stroke="none"/>
<rect x="7" y="22.5" width="20" height="2" rx="1" transform="rotate(-90 7 22.5)" stroke="none"/>
<rect x="15" y="22.5" width="20" height="2" rx="1" transform="rotate(-90 15 22.5)" stroke="none"/>
</svg>

Before

Width:  |  Height:  |  Size: 480 B

After

Width:  |  Height:  |  Size: 487 B

10
src/assets/svg/hamburger.svg Normal file → Executable file
View File

@ -1,5 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 6L21 6" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M3 12L21 12" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M3 18L21 18" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 6L21 6" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M3 12L21 12" fill="none" stroke-width="2" stroke-linecap="round"/>
<path d="M3 18L21 18" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 306 B

After

Width:  |  Height:  |  Size: 311 B

10
src/assets/svg/help.svg Normal file → Executable file
View File

@ -1,5 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M9.09 9.00002C9.3251 8.33169 9.78915 7.76813 10.4 7.40915C11.0108 7.05018 11.7289 6.91896 12.4272 7.03873C13.1255 7.15851 13.7588 7.52154 14.2151 8.06355C14.6713 8.60555 14.9211 9.29154 14.92 10C14.92 12 11.92 13 11.92 13" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 17H12.01" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M9.09 9.00002C9.3251 8.33169 9.78915 7.76813 10.4 7.40915C11.0108 7.05018 11.7289 6.91896 12.4272 7.03873C13.1255 7.15851 13.7588 7.52154 14.2151 8.06355C14.6713 8.60555 14.9211 9.29154 14.92 10C14.92 12 11.92 13 11.92 13" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 17H12.01" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 693 B

After

Width:  |  Height:  |  Size: 698 B

6
src/assets/svg/horizontal.svg Normal file → Executable file
View File

@ -1,3 +1,3 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 16V8C3 6.89543 3.89543 6 5 6H14.25H19C20.1046 6 21 6.89543 21 8V9.6V16C21 17.1046 20.1046 18 19 18H5C3.89543 18 3 17.1046 3 16Z" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 16V8C3 6.89543 3.89543 6 5 6H14.25H19C20.1046 6 21 6.89543 21 8V9.6V16C21 17.1046 20.1046 18 19 18H5C3.89543 18 3 17.1046 3 16Z" fill="none" stroke-width="2" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 275 B

After

Width:  |  Height:  |  Size: 278 B

20
src/assets/svg/humanitarian.svg Normal file → Executable file

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

8
src/assets/svg/image.svg Normal file → Executable file
View File

@ -1,4 +1,4 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="3" y="4.5" width="18" height="15" rx="1" fill="none" stroke-width="2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5 7.5C15.6716 7.5 15 8.17157 15 9C15 9.82843 15.6716 10.5 16.5 10.5C17.3284 10.5 18 9.82843 18 9C18 8.17157 17.3284 7.5 16.5 7.5ZM8.65881 10.8085C9.05244 10.1962 9.94753 10.1962 10.3412 10.8085L12.3333 13.9074L13.7567 12.3259C14.1539 11.8845 14.846 11.8845 15.2433 12.3259L17.4979 14.831C18.0771 15.4746 17.6204 16.5 16.7546 16.5H12.2453C12.2324 16.5 12.2194 16.4998 12.2066 16.4993C12.1939 16.4998 12.1812 16.5 12.1683 16.5H6.83165C6.04049 16.5 5.56265 15.6248 5.99047 14.9592L8.65881 10.8085Z" stroke="none" />
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="3" y="4.5" width="18" height="15" rx="1" fill="none" stroke-width="2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.5 7.5C15.6716 7.5 15 8.17157 15 9C15 9.82843 15.6716 10.5 16.5 10.5C17.3284 10.5 18 9.82843 18 9C18 8.17157 17.3284 7.5 16.5 7.5ZM8.65881 10.8085C9.05244 10.1962 9.94753 10.1962 10.3412 10.8085L12.3333 13.9074L13.7567 12.3259C14.1539 11.8845 14.846 11.8845 15.2433 12.3259L17.4979 14.831C18.0771 15.4746 17.6204 16.5 16.7546 16.5H12.2453C12.2324 16.5 12.2194 16.4998 12.2066 16.4993C12.1939 16.4998 12.1812 16.5 12.1683 16.5H6.83165C6.04049 16.5 5.56265 15.6248 5.99047 14.9592L8.65881 10.8085Z" stroke="none" />
</svg>

Before

Width:  |  Height:  |  Size: 727 B

After

Width:  |  Height:  |  Size: 731 B

10
src/assets/svg/info.svg Normal file → Executable file
View File

@ -1,5 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 16V12" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 8H12.01" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 16V12" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 8H12.01" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 481 B

After

Width:  |  Height:  |  Size: 486 B

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