diff --git a/BMI_Calculator/.gitignore b/BMI_Calculator/.gitignore new file mode 100644 index 000000000..a88639f82 --- /dev/null +++ b/BMI_Calculator/.gitignore @@ -0,0 +1,15 @@ +# Ignore node_modules directory +node_modules/ + +# Ignore build output +build/ + +# Ignore IDE and editor files +.vscode/ +.idea/ + +# Ignore environment-specific files +.env + +# Ignore log files +*.log diff --git a/BMI_Calculator/README.md b/BMI_Calculator/README.md new file mode 100644 index 000000000..4ba07f600 --- /dev/null +++ b/BMI_Calculator/README.md @@ -0,0 +1,34 @@ +# BMI - Calculator + +## Tech Stack + +- React +- JavaScript +- HTML +- CSS + +## How to Run the Code + +To run the code, follow these steps: + +1. Clone the repository. +2. Navigate to the project directory. +3. Install the dependencies by running the following command in your terminal: + + ```bash + npm install + ``` + +4. Start the development server by running the following command: + + ```bash + npm start + ``` + +5. Open your browser and visit `http://localhost:3000` to view the application. + +## Demo Video + +Check out the demo video below to see the BMI Calculator in action: + +[![BMI Calculator Demo](https://youtu.be/WEU9jhG0hSE?si=4_XtXizDHEUxOh85/0.jpg)](https://youtu.be/WEU9jhG0hSE?si=4_XtXizDHEUxOh85) diff --git a/BMI_Calculator/package.json b/BMI_Calculator/package.json new file mode 100644 index 000000000..2355e8f50 --- /dev/null +++ b/BMI_Calculator/package.json @@ -0,0 +1,28 @@ +{ + "name": "simple-bmi-calculatorreact", + "version": "1.0.0", + "description": "", + "keywords": [], + "main": "src/index.js", + "dependencies": { + "react": "17.0.2", + "react-dom": "17.0.2", + "react-scripts": "4.0.0" + }, + "devDependencies": { + "@babel/runtime": "7.13.8", + "typescript": "4.1.3" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test --env=jsdom", + "eject": "react-scripts eject" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ] + } \ No newline at end of file diff --git a/BMI_Calculator/public/index.html b/BMI_Calculator/public/index.html new file mode 100644 index 000000000..9e3546dd6 --- /dev/null +++ b/BMI_Calculator/public/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + React App + + + + +
+ + + \ No newline at end of file diff --git a/BMI_Calculator/src/App.jsx b/BMI_Calculator/src/App.jsx new file mode 100644 index 000000000..788fb4228 --- /dev/null +++ b/BMI_Calculator/src/App.jsx @@ -0,0 +1,177 @@ +import React, { Component } from "react"; +import "./styles.css"; +// class App extends Component { +// constructor(props) { +// super(props); +// this.state = { +// fullName: '', +// weight: '', +// height: '', +// bmi: '', +// message: '', +// optimalWeight: '' +// }; + +// this.handleChange = this.handleChange.bind(this); +// this.calculateBMI = this.calculateBMI.bind(this); +// this.handleSubmit = this.handleSubmit.bind(this); +// } + +// handleChange(e) { +// this.setState({ [e.target.name]: e.target.value }); +// } + +// calculateBMI() { +// let heightSquared = ((this.state.height / 100) * this.state.height) / 100; +// let bmi = this.state.weight / heightSquared; +// let low = Math.round(18.5 * heightSquared); +// let high = Math.round(24.99 * heightSquared); +// let message = ''; +// if (bmi >= 18.5 && bmi <= 24.99) { +// message = 'You are in a healthy weight range'; +// } else if (bmi >= 25 && bmi <= 29.9) { +// message = 'You are overweight'; +// } else if (bmi >= 30) { +// message = 'You are obese'; +// } else if (bmi < 18.5) { +// message = 'You are under weight'; +// } + +// this.setState({ message: message }); +// this.setState({ +// optimalWeight: +// 'Your suggested weight range is between ' + low + ' - ' + high +// }); +// this.setState({ bmi: Math.round(bmi * 100) / 100 }); +// } + +// handleSubmit(e) { +// this.calculateBMI(); +// e.preventDefault(); +// // console.log(this.state); +// } + +// render() { +// return ( +//
+//
+//
+//

BMI calculator

+//
+// +// +//
+//
+// +// +//
+ +//
+// +// +//
+//
+//
+// {/* */} +// +//

{this.state.message}

+//

{this.state.bmi}

+//
+//
+//
+// ); +// } +// } + +// export default App; + +class App extends React.Component { + constructor() { + super(); + this.state = { + height: "", + weight: "", + bmi: "", + msg: "" + }; + + // this.handleChange = this.handleChange.bind(this); + // this.handleSubmit = this.handleSubmit.bind(this); + // this.calculateBMI = this.calculateBMI.bind(this); + } + + handleChange = (e) => { + this.setState({ [e.target.name]: e.target.value }); + }; + + calculateBMI = () => { + let heightSq = (this.state.height / 100) * (this.state.height / 100); + let bmi = this.state.weight / heightSq; + let msg = ""; + if (bmi < 18.5) { + msg = "under Weight"; + } else if (bmi >= 18.5 && bmi <= 24.9) { + msg = "Normal Weight"; + } else if (bmi >= 25 && bmi <= 29.9) { + msg = "Over Weight"; + } else if (bmi >= 30) { + msg = "Obesity"; + } + this.setState({ msg: msg }); + this.setState({ bmi: Math.round(bmi * 100) / 100 }); + }; + + handleSubmit = (e) => { + this.calculateBMI(); + e.preventDefault(); + }; + + render() { + return ( +
+
+

BMI calculator

+
+ + +
+ +
+ + +
+ +

{this.state.bmi}

+

{this.state.msg}

+
+
+ ); + } +} +export default App; diff --git a/BMI_Calculator/src/index.jsx b/BMI_Calculator/src/index.jsx new file mode 100644 index 000000000..d65892e7f --- /dev/null +++ b/BMI_Calculator/src/index.jsx @@ -0,0 +1,12 @@ +import { StrictMode } from "react"; +import ReactDOM from "react-dom"; + +import App from "./App"; + +const rootElement = document.getElementById("root"); +ReactDOM.render( + + + , + rootElement +); diff --git a/BMI_Calculator/src/styles.css b/BMI_Calculator/src/styles.css new file mode 100644 index 000000000..a45ab8367 --- /dev/null +++ b/BMI_Calculator/src/styles.css @@ -0,0 +1,28 @@ +.App { + display: flex; + justify-content: center; + border-radius: 5px; + background-color: lightcoral; + padding: 20px; + border: 1px solid cadetblue; + border-radius: 100px; + } + + input { + width: 100%; + padding: 5px; + margin: 8px 0; + box-sizing: border-box; + } + + button { + width: 100%; + padding: 5px; + margin: 8px 0; + box-sizing: border-box; + background-color: lightslategray; + } + button:hover { + background-color: lightsteelblue; + } + \ No newline at end of file diff --git a/TODO_DjangoReact/Django-React-NotesApp/.dockerignore b/TODO_DjangoReact/Django-React-NotesApp/.dockerignore new file mode 100644 index 000000000..946d80c58 --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/.dockerignore @@ -0,0 +1,4 @@ +__pycache__/ +node_modules/ +db.sqlite3 +venv diff --git a/TODO_DjangoReact/Django-React-NotesApp/.gitignore b/TODO_DjangoReact/Django-React-NotesApp/.gitignore new file mode 100644 index 000000000..2c57255ba --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/.gitignore @@ -0,0 +1,6 @@ +__pycache__/ +node_modules/ +db.sqlite3 +.env +venv +env \ No newline at end of file diff --git a/TODO_DjangoReact/Django-React-NotesApp/Dockerfile b/TODO_DjangoReact/Django-React-NotesApp/Dockerfile new file mode 100644 index 000000000..0bd966a96 --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/Dockerfile @@ -0,0 +1,8 @@ +FROM python:3.9-slim + +WORKDIR /app +COPY . . + +RUN pip install -r requirements.txt + +CMD ["python","manage.py","runserver","0.0.0.0:8000"] \ No newline at end of file diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/__init__.py b/TODO_DjangoReact/Django-React-NotesApp/api/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/admin.py b/TODO_DjangoReact/Django-React-NotesApp/api/admin.py new file mode 100644 index 000000000..187953b82 --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/api/admin.py @@ -0,0 +1,8 @@ +from django.contrib import admin + +# Register your models here. + +from .models import Note + + +admin.site.register(Note) diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/apps.py b/TODO_DjangoReact/Django-React-NotesApp/api/apps.py new file mode 100644 index 000000000..66656fd29 --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/api/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ApiConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'api' diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/migrations/0001_initial.py b/TODO_DjangoReact/Django-React-NotesApp/api/migrations/0001_initial.py new file mode 100644 index 000000000..0d305fb7e --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/api/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.7 on 2021-09-09 14:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Note', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('body', models.TextField(blank=True, null=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ], + ), + ] diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/migrations/__init__.py b/TODO_DjangoReact/Django-React-NotesApp/api/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/models.py b/TODO_DjangoReact/Django-React-NotesApp/api/models.py new file mode 100644 index 000000000..7cee397e8 --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/api/models.py @@ -0,0 +1,12 @@ +from django.db import models + +# Create your models here. + + +class Note(models.Model): + body = models.TextField(null=True, blank=True) + updated = models.DateTimeField(auto_now=True) + created = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return self.body[0:50] diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/serializers.py b/TODO_DjangoReact/Django-React-NotesApp/api/serializers.py new file mode 100644 index 000000000..8c8a585e3 --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/api/serializers.py @@ -0,0 +1,8 @@ +from rest_framework.serializers import ModelSerializer +from .models import Note + + +class NoteSerializer(ModelSerializer): + class Meta: + model = Note + fields = '__all__' diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/tests.py b/TODO_DjangoReact/Django-React-NotesApp/api/tests.py new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/urls.py b/TODO_DjangoReact/Django-React-NotesApp/api/urls.py new file mode 100644 index 000000000..babf3360d --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/api/urls.py @@ -0,0 +1,12 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.getRoutes, name="routes"), + path('notes/', views.getNotes, name="notes"), + # path('notes/create/', views.createNote, name="create-note"), + #path('notes//update/', views.updateNote, name="update-note"), + #path('notes//delete/', views.deleteNote, name="delete-note"), + + path('notes//', views.getNote, name="note"), +] diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/utils.py b/TODO_DjangoReact/Django-React-NotesApp/api/utils.py new file mode 100644 index 000000000..3841e9b9e --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/api/utils.py @@ -0,0 +1,40 @@ +from rest_framework.response import Response +from .models import Note +from .serializers import NoteSerializer + + +def getNotesList(request): + notes = Note.objects.all().order_by('-updated') + serializer = NoteSerializer(notes, many=True) + return Response(serializer.data) + + +def getNoteDetail(request, pk): + notes = Note.objects.get(id=pk) + serializer = NoteSerializer(notes, many=False) + return Response(serializer.data) + + +def createNote(request): + data = request.data + note = Note.objects.create( + body=data['body'] + ) + serializer = NoteSerializer(note, many=False) + return Response(serializer.data) + +def updateNote(request, pk): + data = request.data + note = Note.objects.get(id=pk) + serializer = NoteSerializer(instance=note, data=data) + + if serializer.is_valid(): + serializer.save() + + return serializer.data + + +def deleteNote(request, pk): + note = Note.objects.get(id=pk) + note.delete() + return Response('Note was deleted!') diff --git a/TODO_DjangoReact/Django-React-NotesApp/api/views.py b/TODO_DjangoReact/Django-React-NotesApp/api/views.py new file mode 100644 index 000000000..c6e88d46f --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/api/views.py @@ -0,0 +1,106 @@ +from django.http import response +from django.shortcuts import render +from rest_framework.response import Response +from rest_framework.decorators import api_view +from rest_framework.serializers import Serializer +from .models import Note +from .serializers import NoteSerializer +from api import serializers +from .utils import updateNote, getNoteDetail, deleteNote, getNotesList, createNote +# Create your views here. + + +@api_view(['GET']) +def getRoutes(request): + + routes = [ + { + 'Endpoint': '/notes/', + 'method': 'GET', + 'body': None, + 'description': 'Returns an array of notes' + }, + { + 'Endpoint': '/notes/id', + 'method': 'GET', + 'body': None, + 'description': 'Returns a single note object' + }, + { + 'Endpoint': '/notes/create/', + 'method': 'POST', + 'body': {'body': ""}, + 'description': 'Creates new note with data sent in post request' + }, + { + 'Endpoint': '/notes/id/update/', + 'method': 'PUT', + 'body': {'body': ""}, + 'description': 'Creates an existing note with data sent in post request' + }, + { + 'Endpoint': '/notes/id/delete/', + 'method': 'DELETE', + 'body': None, + 'description': 'Deletes and exiting note' + }, + ] + return Response(routes) + + +# /notes GET +# /notes POST +# /notes/ GET +# /notes/ PUT +# /notes/ DELETE + +@api_view(['GET', 'POST']) +def getNotes(request): + + if request.method == 'GET': + return getNotesList(request) + + if request.method == 'POST': + return createNote(request) + + +@api_view(['GET', 'PUT', 'DELETE']) +def getNote(request, pk): + + if request.method == 'GET': + return getNoteDetail(request, pk) + + if request.method == 'PUT': + return updateNote(request, pk) + + if request.method == 'DELETE': + return deleteNote(request, pk) + + +# @api_view(['POST']) +# def createNote(request): +# data = request.data +# note = Note.objects.create( +# body=data['body'] +# ) +# serializer = NoteSerializer(note, many=False) +# return Response(serializer.data) + + +# @api_view(['PUT']) +# def updateNote(request, pk): +# data = request.data +# note = Note.objects.get(id=pk) +# serializer = NoteSerializer(instance=note, data=data) + +# if serializer.is_valid(): +# serializer.save() + +# return Response(serializer.data) + + +# @api_view(['DELETE']) +# def deleteNote(request, pk): +# note = Note.objects.get(id=pk) +# note.delete() +# return Response('Note was deleted!') diff --git a/TODO_DjangoReact/Django-React-NotesApp/desktop wallpaper.jpg b/TODO_DjangoReact/Django-React-NotesApp/desktop wallpaper.jpg new file mode 100644 index 000000000..660c2aaea Binary files /dev/null and b/TODO_DjangoReact/Django-React-NotesApp/desktop wallpaper.jpg differ diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/README.md b/TODO_DjangoReact/Django-React-NotesApp/frontend/README.md new file mode 100644 index 000000000..0c83cde2c --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/frontend/README.md @@ -0,0 +1,70 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +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. + +### `npm 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. + +### `npm run 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. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## 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 Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `npm run build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/asset-manifest.json b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/asset-manifest.json new file mode 100644 index 000000000..604966afe --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/asset-manifest.json @@ -0,0 +1,22 @@ +{ + "files": { + "main.css": "/static/css/main.138a22f4.chunk.css", + "main.js": "/static/js/main.5b159992.chunk.js", + "main.js.map": "/static/js/main.5b159992.chunk.js.map", + "runtime-main.js": "/static/js/runtime-main.4eab1d6a.js", + "runtime-main.js.map": "/static/js/runtime-main.4eab1d6a.js.map", + "static/js/2.bbb5d1f5.chunk.js": "/static/js/2.bbb5d1f5.chunk.js", + "static/js/2.bbb5d1f5.chunk.js.map": "/static/js/2.bbb5d1f5.chunk.js.map", + "index.html": "/index.html", + "static/css/main.138a22f4.chunk.css.map": "/static/css/main.138a22f4.chunk.css.map", + "static/js/2.bbb5d1f5.chunk.js.LICENSE.txt": "/static/js/2.bbb5d1f5.chunk.js.LICENSE.txt", + "static/media/add.3ceadee7.svg": "/static/media/add.3ceadee7.svg", + "static/media/arrow-left.a94dd897.svg": "/static/media/arrow-left.a94dd897.svg" + }, + "entrypoints": [ + "static/js/runtime-main.4eab1d6a.js", + "static/js/2.bbb5d1f5.chunk.js", + "static/css/main.138a22f4.chunk.css", + "static/js/main.5b159992.chunk.js" + ] +} \ No newline at end of file diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/favicon.ico b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/favicon.ico new file mode 100644 index 000000000..a11777cc4 Binary files /dev/null and b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/favicon.ico differ diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/index.html b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/index.html new file mode 100644 index 000000000..ff1e85e2a --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/index.html @@ -0,0 +1 @@ +React App
\ No newline at end of file diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/logo192.png b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/logo192.png new file mode 100644 index 000000000..fc44b0a37 Binary files /dev/null and b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/logo192.png differ diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/logo512.png b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/logo512.png new file mode 100644 index 000000000..a4e47a654 Binary files /dev/null and b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/logo512.png differ diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/manifest.json b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/manifest.json new file mode 100644 index 000000000..080d6c77a --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/manifest.json @@ -0,0 +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" +} diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/robots.txt b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/static/css/main.138a22f4.chunk.css b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/static/css/main.138a22f4.chunk.css new file mode 100644 index 000000000..ec0087341 --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/static/css/main.138a22f4.chunk.css @@ -0,0 +1,2 @@ +@import url(https://fonts.googleapis.com/css2?family=Lexend:wght@400;600;700&display=swap);:root{--color-text:#383a3f;--color-dark:#1f2124;--color-gray:#677;--color-bg:#f3f6f9;--color-light:#acb4bd;--color-lighter:#f9f9f9;--color-white:#fff;--color-border:#e0e3e6}.dark,:root{--color-main:#f68657}.dark{--color-text:#d6d1d1;--color-dark:#f5f6f7;--color-gray:#999;--color-bg:#1f2124;--color-lighter:#292a2c;--color-white:#2e3235;--color-border:#252629}*{margin:0;padding:0;box-sizing:border-box;font-family:"Lexend",sans-serif;color:inherit;font-size:inherit;scroll-behavior:smooth}body{line-height:1.8em;font-weight:400;font-size:16px}a{text-decoration:none}.container{width:100%;height:100vh;color:#383a3f;color:var(--color-text);background-color:#f3f6f9;background-color:var(--color-bg);display:flex;align-items:center}.app{width:100%;max-width:480px;height:88vh;margin:0 auto;background-color:#fff;background-color:var(--color-white);box-shadow:1px 1px 6px rgba(0,0,0,.05);position:relative}.app-header{display:flex;align-items:center;padding:16px;justify-content:space-between;background-color:#f9f9f9;background-color:var(--color-lighter);box-shadow:0 1px 3px rgba(0,0,0,.1)}.app-header h1{font-size:30px;color:#1f2124;color:var(--color-dark);font-weight:800;text-align:center}.app-header button{border:0;background:transparent;cursor:pointer}.app-header button>svg{fill:#1f2124;fill:var(--color-dark);height:25px;width:25px;object-fit:cover}.app-body{padding:16px}.notes-header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px}.notes-count,.notes-title{color:#f68657;color:var(--color-main);font-size:24px;font-weight:600}.notes-count{font-size:18px;color:#677;color:var(--color-gray)}.notes-list{padding:0;margin:16px 0;height:70vh;overflow-y:auto;scrollbar-width:none}.notes-list::-webkit-scrollbar{display:none}.notes-list-item{border-bottom:1px solid #e0e3e6;border-bottom:1px solid var(--color-border);margin-bottom:12px;padding:8px 16px;transition:all .2s ease-in-out}.notes-list-item:hover{background-color:#f3f6f9;background-color:var(--color-bg);cursor:pointer}.notes-list-item h3,.notes-list-item p span{font-weight:600}.notes-list-item p span{color:#677;color:var(--color-gray);display:inline-block;margin-right:8px}.notes-list-item p{font-size:14px;color:#acb4bd;color:var(--color-light)}.floating-button{font-size:48px;position:absolute;bottom:24px;right:16px;background:#f68657;background:var(--color-main);border:none;width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:1px 1px 10px rgba(0,0,0,.2)}.floating-button>svg{fill:#f3f6f9;fill:var(--color-bg)}.note-header{justify-content:space-between;color:#f68657;color:var(--color-main);padding:10px}.note-header,.note-header h3{display:flex;align-items:center}.note-header h3{font-size:24px;cursor:pointer}.note-header h3 svg{fill:#f68657;fill:var(--color-main);width:20px;margin-right:8px}.note-header button{border:none;outline:none;font-weight:600;background-color:transparent;font-size:18px;cursor:pointer}.note textarea{background-color:#fff;background-color:var(--color-white);border:none;padding:16px 12px;width:100%;height:70vh;resize:none;scrollbar-width:none}.note textarea:active,.note textarea:focus{outline:none;border:none}.note textarea::-webkit-scrollbar{display:none} +/*# sourceMappingURL=main.138a22f4.chunk.css.map */ \ No newline at end of file diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/static/css/main.138a22f4.chunk.css.map b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/static/css/main.138a22f4.chunk.css.map new file mode 100644 index 000000000..0b51df904 --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/static/css/main.138a22f4.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["main.138a22f4.chunk.css","webpack://src/App.css"],"names":[],"mappings":"AAAA,0FAA0F,CCI1F,MAEE,oBAAqB,CACrB,oBAAqB,CACrB,iBAAkB,CAClB,kBAAmB,CACnB,qBAAsB,CACtB,uBAAwB,CACxB,kBAAmB,CACnB,sBACF,CAEA,YAXE,oBAoBF,CATA,MAEE,oBAAqB,CACrB,oBAAqB,CACrB,iBAAkB,CAClB,kBAAmB,CACnB,uBAAwB,CACxB,qBAAsB,CACtB,sBACF,CAKA,EACE,QAAS,CACT,SAAU,CACV,qBAAsB,CACtB,+BAAiC,CACjC,aAAc,CACd,iBAAkB,CAClB,sBACF,CAGA,KACE,iBAAkB,CAClB,eAAgB,CAChB,cACF,CAEA,EACE,oBACF,CAKA,WACE,UAAW,CACX,YAAa,CACb,aAAwB,CAAxB,uBAAwB,CACxB,wBAAiC,CAAjC,gCAAiC,CACjC,YAAa,CACb,kBACF,CAGA,KACE,UAAW,CACX,eAAgB,CAChB,WAAY,CACZ,aAAc,CACd,qBAAoC,CAApC,mCAAoC,CACpC,sCAA2C,CAC3C,iBACF,CAGA,YACE,YAAa,CACb,kBAAmB,CACnB,YAAa,CACb,6BAA8B,CAC9B,wBAAsC,CAAtC,qCAAsC,CACtC,mCACF,CAEA,eACE,cAAe,CACf,aAAwB,CAAxB,uBAAwB,CACxB,eAAgB,CAChB,iBACF,CAEA,mBACE,QAAS,CACT,sBAAuB,CACvB,cACF,CAEA,uBACE,YAAuB,CAAvB,sBAAuB,CACvB,WAAY,CACZ,UAAW,CACX,gBACF,CAEA,UACE,YACF,CAKA,cACE,YAAa,CACb,kBAAmB,CACnB,6BAA8B,CAC9B,iBACF,CAEA,0BAEE,aAAwB,CAAxB,uBAAwB,CACxB,cAAe,CACf,eACF,CAEA,aACE,cAAe,CACf,UAAwB,CAAxB,uBACF,CAGA,YACE,SAAU,CACV,aAAc,CACd,WAAY,CACZ,eAAgB,CAChB,oBACF,CAEA,+BACE,YACF,CAEA,iBACE,+BAA6C,CAA7C,2CAA6C,CAC7C,kBAAmB,CACnB,gBAAiB,CACjB,8BACF,CAEA,uBACE,wBAAiC,CAAjC,gCAAiC,CACjC,cACF,CAEA,4CAEE,eACF,CAGA,wBACE,UAAwB,CAAxB,uBAAwB,CACxB,oBAAqB,CACrB,gBACF,CAEA,mBACE,cAAe,CACf,aAAyB,CAAzB,wBACF,CAEA,iBACE,cAAe,CACf,iBAAkB,CAClB,WAAY,CACZ,UAAW,CACX,kBAA6B,CAA7B,4BAA6B,CAC7B,WAAY,CACZ,UAAW,CACX,WAAY,CACZ,iBAAkB,CAClB,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,cAAe,CACf,sCACF,CAGA,qBACE,YAAqB,CAArB,oBACF,CAQA,aAGE,6BAA8B,CAC9B,aAAwB,CAAxB,uBAAwB,CACxB,YACF,CAEA,6BAPE,YAAa,CACb,kBAWF,CALA,gBAGE,cAAe,CACf,cACF,CAEA,oBACE,YAAuB,CAAvB,sBAAuB,CACvB,UAAW,CACX,gBACF,CAEA,oBACE,WAAY,CACZ,YAAa,CACb,eAAgB,CAChB,4BAA6B,CAC7B,cAAe,CACf,cACF,CAEA,eACE,qBAAoC,CAApC,mCAAoC,CACpC,WAAY,CACZ,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,WAAY,CACZ,oBACF,CAEA,2CAEE,YAAa,CACb,WACF,CAEA,kCACE,YACF","file":"main.138a22f4.chunk.css","sourcesContent":["@import url(https://fonts.googleapis.com/css2?family=Lexend:wght@400;600;700&display=swap);\n:root {\r\n --color-main: #f68657;\r\n --color-text: #383a3f;\r\n --color-dark: #1f2124;\r\n --color-gray: #677;\r\n --color-bg: #f3f6f9;\r\n --color-light: #acb4bd;\r\n --color-lighter: #f9f9f9;\r\n --color-white: #fff;\r\n --color-border:#e0e3e6;\r\n}\r\n\r\n.dark {\r\n --color-main: #f68657;\r\n --color-text: #d6d1d1;\r\n --color-dark: #f5f6f7;\r\n --color-gray: #999;\r\n --color-bg: #1f2124;\r\n --color-lighter: #292a2c;\r\n --color-white: #2e3235;\r\n --color-border:#252629;\r\n}\r\n\r\n/* BASE STYLES */\r\n\r\n\r\n*{\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n font-family: 'Lexend', sans-serif;\r\n color: inherit;\r\n font-size: inherit;\r\n scroll-behavior: smooth;\r\n}\r\n\r\n\r\nbody{\r\n line-height: 1.8em;\r\n font-weight: 400;\r\n font-size: 16px;\r\n}\r\n\r\na {\r\n text-decoration: none;\r\n}\r\n\r\n/* APP STYLES */\r\n\r\n\r\n.container {\r\n width: 100%;\r\n height: 100vh;\r\n color: #383a3f;\r\n color: var(--color-text);\r\n background-color: #f3f6f9;\r\n background-color: var(--color-bg);\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n\r\n.app {\r\n width: 100%;\r\n max-width: 480px;\r\n height: 88vh;\r\n margin: 0 auto;\r\n background-color: #fff;\r\n background-color: var(--color-white);\r\n box-shadow: 1px 1px 6px rgba(0, 0, 0, 0.05);\r\n position: relative;\r\n}\r\n\r\n\r\n.app-header {\r\n display: flex;\r\n align-items: center;\r\n padding: 16px;\r\n justify-content: space-between;\r\n background-color: #f9f9f9;\r\n background-color: var(--color-lighter);\r\n box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.app-header h1 {\r\n font-size: 30px;\r\n color: #1f2124;\r\n color: var(--color-dark);\r\n font-weight: 800;\r\n text-align: center;\r\n}\r\n\r\n.app-header button {\r\n border: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n}\r\n\r\n.app-header button > svg {\r\n fill: #1f2124;\r\n fill: var(--color-dark);\r\n height: 25px;\r\n width: 25px;\r\n object-fit: cover;\r\n}\r\n\r\n.app-body {\r\n padding: 16px;\r\n}\r\n\r\n\r\n/* NOTES STYLES */\r\n\r\n.notes-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 10px 16px;\r\n}\r\n\r\n.notes-title,\r\n.notes-count {\r\n color: #f68657;\r\n color: var(--color-main);\r\n font-size: 24px;\r\n font-weight: 600;\r\n}\r\n\r\n.notes-count {\r\n font-size: 18px;\r\n color: #677;\r\n color: var(--color-gray);\r\n}\r\n\r\n\r\n.notes-list {\r\n padding: 0;\r\n margin: 16px 0;\r\n height: 70vh;\r\n overflow-y: auto;\r\n scrollbar-width: none; /* Firefox */\r\n}\r\n\r\n.notes-list::-webkit-scrollbar {\r\n display: none;\r\n}\r\n\r\n.notes-list-item {\r\n border-bottom: 1px solid #e0e3e6;\r\n border-bottom: 1px solid var(--color-border);\r\n margin-bottom: 12px;\r\n padding: 8px 16px;\r\n transition: all 0.2s ease-in-out;\r\n}\r\n\r\n.notes-list-item:hover {\r\n background-color: #f3f6f9;\r\n background-color: var(--color-bg);\r\n cursor: pointer;\r\n}\r\n\r\n.notes-list-item h3,\r\n.notes-list-item p span {\r\n font-weight: 600;\r\n}\r\n\r\n\r\n.notes-list-item p span {\r\n color: #677;\r\n color: var(--color-gray);\r\n display: inline-block;\r\n margin-right: 8px;\r\n}\r\n\r\n.notes-list-item p {\r\n font-size: 14px;\r\n color: #acb4bd;\r\n color: var(--color-light);\r\n}\r\n\r\n.floating-button {\r\n font-size: 48px;\r\n position: absolute;\r\n bottom: 24px;\r\n right: 16px;\r\n background: #f68657;\r\n background: var(--color-main);\r\n border: none;\r\n width: 60px;\r\n height: 60px;\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n\r\n.floating-button > svg {\r\n fill: #f3f6f9;\r\n fill: var(--color-bg);\r\n}\r\n\r\n\r\n\r\n/*==============================\r\n=> Note Styles\r\n================================*/\r\n\r\n.note-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n color: #f68657;\r\n color: var(--color-main);\r\n padding: 10px;\r\n}\r\n\r\n.note-header h3 {\r\n display: flex;\r\n align-items: center;\r\n font-size: 24px;\r\n cursor: pointer;\r\n}\r\n\r\n.note-header h3 svg {\r\n fill: #f68657;\r\n fill: var(--color-main);\r\n width: 20px;\r\n margin-right: 8px;\r\n}\r\n\r\n.note-header button {\r\n border: none;\r\n outline: none;\r\n font-weight: 600;\r\n background-color: transparent;\r\n font-size: 18px;\r\n cursor: pointer;\r\n}\r\n\r\n.note textarea {\r\n background-color: #fff;\r\n background-color: var(--color-white);\r\n border: none;\r\n padding: 16px 12px;\r\n width: 100%;\r\n height: 70vh;\r\n resize: none;\r\n scrollbar-width: none; /* Firefox */\r\n}\r\n\r\n.note textarea:active,\r\n.note textarea:focus {\r\n outline: none;\r\n border: none;\r\n}\r\n\r\n.note textarea::-webkit-scrollbar {\r\n display: none;\r\n}\n","@import url('https://fonts.googleapis.com/css2?family=Lexend:wght@400;600;700&display=swap');\r\n\r\n\r\n\r\n:root {\r\n --color-main: #f68657;\r\n --color-text: #383a3f;\r\n --color-dark: #1f2124;\r\n --color-gray: #677;\r\n --color-bg: #f3f6f9;\r\n --color-light: #acb4bd;\r\n --color-lighter: #f9f9f9;\r\n --color-white: #fff;\r\n --color-border:#e0e3e6;\r\n}\r\n\r\n.dark {\r\n --color-main: #f68657;\r\n --color-text: #d6d1d1;\r\n --color-dark: #f5f6f7;\r\n --color-gray: #999;\r\n --color-bg: #1f2124;\r\n --color-lighter: #292a2c;\r\n --color-white: #2e3235;\r\n --color-border:#252629;\r\n}\r\n\r\n/* BASE STYLES */\r\n\r\n\r\n*{\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n font-family: 'Lexend', sans-serif;\r\n color: inherit;\r\n font-size: inherit;\r\n scroll-behavior: smooth;\r\n}\r\n\r\n\r\nbody{\r\n line-height: 1.8em;\r\n font-weight: 400;\r\n font-size: 16px;\r\n}\r\n\r\na {\r\n text-decoration: none;\r\n}\r\n\r\n/* APP STYLES */\r\n\r\n\r\n.container {\r\n width: 100%;\r\n height: 100vh;\r\n color: var(--color-text);\r\n background-color: var(--color-bg);\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n\r\n.app {\r\n width: 100%;\r\n max-width: 480px;\r\n height: 88vh;\r\n margin: 0 auto;\r\n background-color: var(--color-white);\r\n box-shadow: 1px 1px 6px rgba(0, 0, 0, 0.05);\r\n position: relative;\r\n}\r\n\r\n\r\n.app-header {\r\n display: flex;\r\n align-items: center;\r\n padding: 16px;\r\n justify-content: space-between;\r\n background-color: var(--color-lighter);\r\n box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.app-header h1 {\r\n font-size: 30px;\r\n color: var(--color-dark);\r\n font-weight: 800;\r\n text-align: center;\r\n}\r\n\r\n.app-header button {\r\n border: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n}\r\n\r\n.app-header button > svg {\r\n fill: var(--color-dark);\r\n height: 25px;\r\n width: 25px;\r\n object-fit: cover;\r\n}\r\n\r\n.app-body {\r\n padding: 16px;\r\n}\r\n\r\n\r\n/* NOTES STYLES */\r\n\r\n.notes-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 10px 16px;\r\n}\r\n\r\n.notes-title,\r\n.notes-count {\r\n color: var(--color-main);\r\n font-size: 24px;\r\n font-weight: 600;\r\n}\r\n\r\n.notes-count {\r\n font-size: 18px;\r\n color: var(--color-gray);\r\n}\r\n\r\n\r\n.notes-list {\r\n padding: 0;\r\n margin: 16px 0;\r\n height: 70vh;\r\n overflow-y: auto;\r\n scrollbar-width: none; /* Firefox */\r\n}\r\n\r\n.notes-list::-webkit-scrollbar {\r\n display: none;\r\n}\r\n\r\n.notes-list-item {\r\n border-bottom: 1px solid var(--color-border);\r\n margin-bottom: 12px;\r\n padding: 8px 16px;\r\n transition: all 0.2s ease-in-out;\r\n}\r\n\r\n.notes-list-item:hover {\r\n background-color: var(--color-bg);\r\n cursor: pointer;\r\n}\r\n\r\n.notes-list-item h3,\r\n.notes-list-item p span {\r\n font-weight: 600;\r\n}\r\n\r\n\r\n.notes-list-item p span {\r\n color: var(--color-gray);\r\n display: inline-block;\r\n margin-right: 8px;\r\n}\r\n\r\n.notes-list-item p {\r\n font-size: 14px;\r\n color: var(--color-light);\r\n}\r\n\r\n.floating-button {\r\n font-size: 48px;\r\n position: absolute;\r\n bottom: 24px;\r\n right: 16px;\r\n background: var(--color-main);\r\n border: none;\r\n width: 60px;\r\n height: 60px;\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n\r\n.floating-button > svg {\r\n fill: var(--color-bg);\r\n}\r\n\r\n\r\n\r\n/*==============================\r\n=> Note Styles\r\n================================*/\r\n\r\n.note-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n color: var(--color-main);\r\n padding: 10px;\r\n}\r\n\r\n.note-header h3 {\r\n display: flex;\r\n align-items: center;\r\n font-size: 24px;\r\n cursor: pointer;\r\n}\r\n\r\n.note-header h3 svg {\r\n fill: var(--color-main);\r\n width: 20px;\r\n margin-right: 8px;\r\n}\r\n\r\n.note-header button {\r\n border: none;\r\n outline: none;\r\n font-weight: 600;\r\n background-color: transparent;\r\n font-size: 18px;\r\n cursor: pointer;\r\n}\r\n\r\n.note textarea {\r\n background-color: var(--color-white);\r\n border: none;\r\n padding: 16px 12px;\r\n width: 100%;\r\n height: 70vh;\r\n resize: none;\r\n scrollbar-width: none; /* Firefox */\r\n}\r\n\r\n.note textarea:active,\r\n.note textarea:focus {\r\n outline: none;\r\n border: none;\r\n}\r\n\r\n.note textarea::-webkit-scrollbar {\r\n display: none;\r\n}"]} \ No newline at end of file diff --git a/TODO_DjangoReact/Django-React-NotesApp/frontend/build/static/js/2.bbb5d1f5.chunk.js b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/static/js/2.bbb5d1f5.chunk.js new file mode 100644 index 000000000..f14c6f328 --- /dev/null +++ b/TODO_DjangoReact/Django-React-NotesApp/frontend/build/static/js/2.bbb5d1f5.chunk.js @@ -0,0 +1,3 @@ +/*! For license information please see 2.bbb5d1f5.chunk.js.LICENSE.txt */ +(this.webpackJsonpfrontend=this.webpackJsonpfrontend||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(21)},function(e,t,n){"use strict";e.exports=n(26)},function(e,t,n){"use strict";n.d(t,"a",(function(){return w})),n.d(t,"b",(function(){return v})),n.d(t,"c",(function(){return m})),n.d(t,"d",(function(){return b}));var r=n(6),a=n(0),o=n.n(a),l=(n(11),n(4)),i=n(19),u=n(5),c=n(3),s=n(15),f=n.n(s),d=(n(17),n(10)),p=(n(20),function(e){var t=Object(i.a)();return t.displayName=e,t}),h=p("Router-History"),m=p("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._isMounted?n.setState({location:e}):n._pendingLocation=e}))),n}Object(r.a)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.a.createElement(m.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.a.createElement(h.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.a.Component);o.a.Component;o.a.Component;var y={},g=0;function b(e,t){void 0===t&&(t={}),("string"===typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,l=n.strict,i=void 0!==l&&l,u=n.sensitive,c=void 0!==u&&u;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=y[n]||(y[n]={});if(r[e])return r[e];var a=[],o={regexp:f()(e,a,t),keys:a};return g<1e4&&(r[e]=o,g++),o}(n,{end:o,strict:i,sensitive:c}),a=r.regexp,l=r.keys,u=a.exec(e);if(!u)return null;var s=u[0],d=u.slice(1),p=e===s;return o&&!p?null:{path:n,url:"/"===n&&""===s?"/":s,isExact:p,params:l.reduce((function(e,t,n){return e[t.name]=d[n],e}),{})}}),null)}var w=function(e){function t(){return e.apply(this,arguments)||this}return Object(r.a)(t,e),t.prototype.render=function(){var e=this;return o.a.createElement(m.Consumer,null,(function(t){t||Object(u.a)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?b(n.pathname,e.props):t.match,a=Object(c.a)({},t,{location:n,match:r}),l=e.props,i=l.children,s=l.component,f=l.render;return Array.isArray(i)&&function(e){return 0===o.a.Children.count(e)}(i)&&(i=null),o.a.createElement(m.Provider,{value:a},a.match?i?"function"===typeof i?i(a):i:s?o.a.createElement(s,a):f?f(a):null:"function"===typeof i?i(a):null)}))},t}(o.a.Component);function k(e){return"/"===e.charAt(0)?e:"/"+e}function E(e,t){if(!e)return t;var n=k(e);return 0!==t.pathname.indexOf(n)?t:Object(c.a)({},t,{pathname:t.pathname.substr(n.length)})}function S(e){return"string"===typeof e?e:Object(l.e)(e)}function x(e){return function(){Object(u.a)(!1)}}function _(){}o.a.Component;o.a.Component;o.a.useContext},function(e,t,n){"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t=0;d--){var p=l[d];"."===p?o(l,d):".."===p?(o(l,d),f++):f&&(o(l,d),f--)}if(!c)for(;f--;f)l.unshift("..");!c||""===l[0]||l[0]&&a(l[0])||l.unshift("");var h=l.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function i(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var u=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"===typeof t||"object"===typeof n){var r=i(t),a=i(n);return r!==t||a!==n?e(r,a):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1},c=n(5);function s(e){return"/"===e.charAt(0)?e:"/"+e}function f(e){return"/"===e.charAt(0)?e.substr(1):e}function d(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function h(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function m(e,t,n,a){var o;"string"===typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e)).state=t:(void 0===(o=Object(r.a)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(i){throw i instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):i}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=l(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function v(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&u(e.state,t.state)}function y(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"===typeof e?e(t,n):e;"string"===typeof o?"function"===typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),f({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=m(e,t,d(),w.location);s.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,f({action:r,location:a}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=w.index+e;return t>=0&&t=0||(a[n]=e[n]);return a}n.d(t,"a",(function(){return r}))},function(e,t,n){e.exports=n(28)()},function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n