diff --git a/.gitignore b/.gitignore index b512c09..1dcef2d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +.env \ No newline at end of file diff --git a/README.md b/README.md index 0eb1f61..ff026e3 100644 --- a/README.md +++ b/README.md @@ -1,384 +1,2 @@ - - -# FULL STACK COURSE 2023 - -## React JS MasterClass - -Hi, This is course page of **CoderDost Youtube Channel** React JS 2023 Course [Course Link ](https://youtu.be/6l8RWV8D-Yo), - -### How to use this code : - -#### You can **download code** in 2 ways : - -1. **Git Commands** - - - use `git clone ` - - - checkout branch according to Chapter number `git checkout react-1` - - - run `npm install` inside the root directory before running the code - - - -2. If you are not comfortable with git, directly **download the branch as Zip**. - - - Choose branch related to the Chapter e.g. `react-1` - - - run `npm install` inside the root directory before running the code - - - - -# React JS Series - - - - -## Chapter 1 - Introduction to React & Setup - - -- **Assignment 1** : If we delete `node_modules`. How to run our app again successfully ? - - -- **Assignment 2** : How to remove double `console.logs` from React ? [ it is not needed in real life to remove them, its just an assignment problem ]. [ *Hint: Some special Component at top level is of App is causing it* ]. We explore more about - why this is needed in later videos. - -### Special Assignments ============== - -- **Assignment 3** : Create a Page with multiple React Apps. Both React Apps should be independent of each other. - -- **Assignment 4** : Try to build a react app using other toolchains like `Vite` - - - -### Related Videos : -1. De-structuring Assignment : [Long Video](https://youtu.be/sNhqFofQhFs) | [Object De-structure Short Video](https://youtube.com/shorts/H3MKXE69_c8) | [Array De-structure Short Video](https://youtube.com/shorts/ONGyMq49kZY) -2. Import/Export : [Long Video](https://youtu.be/7P5JUMc1cI4) | [Short Video](https://youtube.com/shorts/sUUOSWlwfM8) - - - -## Chapter 2 - Components - JSX and Props - - -- **Assignment 1** : Create a simple React app for **RESUME Builder**. It will be static website. You have to make components like **Resume** as top level and under it - **Skills**, **Education**, **Experience** etc as components. All resume data will be under 1 big JavaScript object like which you can us in components via props. You can fix the number of items in **Skills**, **Education**, **Experience** or any section. Example you can say that only 3 experience items is allowed. - - ``` - resume = { - experience : [ { year:2012, company:'xyz', role:'something' }], - education:[ ], - skills : [ 'react js', 'node js'] - ..... - ... - } - ``` - - > You can choose any simple HTML layout and convert it to React Components - - Example Link : [ Resume HTML ](https://codepen.io/emzarts/pen/OXzmym) - - ### Special Assignments ============== - -- **Assignment 2** : Create a Parent Component called **Border** which can provide some CSS border to any component nested into it. [Hint : You will need to use `children` props here - < Border> - < Component > - < Border /> - - -### Related Videos : -1. De-structuring Assignment : [Long Video](https://youtu.be/sNhqFofQhFs) | [Object De-structure Short Video](https://youtube.com/shorts/H3MKXE69_c8) | [Array De-structure Short Video](https://youtube.com/shorts/ONGyMq49kZY) -2. Import/Export : [Long Video](https://youtu.be/7P5JUMc1cI4) | [Short Video](https://youtube.com/shorts/sUUOSWlwfM8) -3. Spread Operator : [Long Video](https://youtu.be/X4Iv0TBHDQ4) | [Short Video](https://youtube.com/shorts/5dBZGyXutx8) - - -## Chapter 3 - Conditional Rendering & Lists - - -- **Assignment 1** : Make a simple component which can conditionally render a list with **number** or **alphabets** or ***bullets*** in HTML for number. e..g. use a prop like `layout` for this. Also use a prop `items` for array of items in list. - ``` -< List layout="numbered" items={items}/> -< List layout="alpha" items={items}/> -< List layout="bullet" items={items}/> - ``` - -- **Assignment 2** : This is continuation of previous assignment **RESUME Builder** - 1. In this part you have to make some conditional rendering. Suppose if any section doesn't exist you have to remove that section from **Resume**. Example if `skills` is empty array than don't display `skills` section in Resume. - 2. You have to use `map` in most places where there are arrays. Like **Skills**, **Education**, **Experience** if there are 3 entries, use `map` to display 3 experience items. You don't need fix number of items. Any array can have 1 to 10(or some Limit) any number of items. You can put some Limit, so that your layout is not affected. - 3. Conditionally put some styling to **Resume**. Like `light` theme or `dark` theme or any other way you can switch the CSS layouts. - - ``` - resume = { - experience : [ { year:2012, company:'xyz', role:'something' }], - education:[ ], - skills : [ 'react js', 'node js'] - ..... - ... - } - ``` - - > You can choose any simple HTML layout and convert it to React Components - - Example Link : [ Resume HTML ](https://codepen.io/emzarts/pen/OXzmym) - - - - -### Related Videos : -1. Ternary Operator : [Video](https://youtu.be/F_95TPUIA2c) -2. Logical AND (&&) : [Video](https://youtu.be/7dXLYWWTRXI) -3. Higher Order functions (map, filter, reduce) : [Video](https://youtu.be/oGpA98nNx6Y) -4. Import/Export : [Long Video](https://youtu.be/7P5JUMc1cI4) | [Short Video](https://youtube.com/shorts/sUUOSWlwfM8) - - -## Chapter 4 - Events && Event Bubbling - - -- **Assignment 1** : Make a simple page with 1 Image, 1button, 1 form Input text box and try to apply these events . - - - Image : **onMouseOver** : when you hover on image. Image should increase in size. Think of any way where you can do it. Also, try that when you "move out" the mouse, it should be back to normal size. - - Button : **onDoubleClick**: when you doubleClick a button. show some alert box. Also make a console.log for single click event. Is console.log printed twice on double click ? check this ? - - Input Textbox : **onFocus**, **onBlur** are 2 events which occur when you enter or exit an input text box by click of mouse etc. Use it to display some console.log, which print "focused on the textbox", "out of textbox". - - **onCopy, onCut, onPaste** are 3 events which you can use on any text value etc. try to use it on a paragraph and just alert the user that something is copied, cut or pasted. - - - -- **Assignment 2** : Make a form using `` < Form> `` tag and put an textbox and button inside this form. try to click the button after entering into textbox. Does form reloads ? Can you try to stop is using `e.preventDefault`. Try it. - -- **Assignment 3** : use an Input Textbox : after you enter some text. try to press **ENTER** button and show the an alert or console.log. You can capture the **onKeyPress** event, button how you will you make it work only for "Enter" ? It should not work on pressing of other keys. [*Hint: Explore the synthetic event object* ] - - -- **Assignment 4** : This is continuation of previous assignment **RESUME Builder**. - - Add a **print** button to print the current resume. You can use a DOM method ``window.print`` to print the PDF. - - -- **Assignment 5** : Can you try the challenge of passing the function in one Prop like `onPlay` and the message inside that function to be accessed from other prop `message` [ As shown in Chapter Video ] - -### Special Assignments ============== - -- **Assignment 6** : Using **event bubbling** concept print the name of Parents to Child of any clicked element. It should be order in "**GrandParent >Parent > Child**" this kind of order. Where "Child" represents the current clicked element. - -- **Assignment 7** : Make a custom event called **onClose**. this event should close the current browser tab. you can apply it to a button on click or anywhere. - -### Related Videos : - -1. HTML DOM Elements and manipulation [Video](https://youtu.be/kwfbaHNZ_aU) -2. HTML DOM Events and manipulation : [Video](https://youtu.be/5kpe_tg_Cis) - - - - -## Chapter 5 - State, useState Hooks - -- **Assignment 1** : Make a digital **CLOCK** Component using useEffect Hook. We need to only update the time Upto seconds in it. HH:MM:SS format can be used. Can you make it send a Console.log at end of every minute ? - -- **Assignment 2** : Implement a simple **TIMER** that displays the elapsed time since the start button was pressed, and it can be stopped and reset. Like a stopwatch. - - - - -## Chapter 6 - Form , Synthetic Event Object & Lifting State up - - -- **Assignment 1** : Create a Dropdown (< Select >) menu which is formed by a `nations` array. You can push to this array new items using a 2 **input textbox** (for country name and code) and **button**. -On selection of the any option from dropdown, its value should be displayed on console.log - ``` - const nations = [ -{ name: 'India', value: 'IN' }, -{ name: 'Pak', value: 'PK' }, -{ name: 'Bangladesh', value: 'BG' }, -] - ``` - - -- **Assignment 2** : **FILTERED LIST** : Make a **List** of something using an Array (a list can of cricket player /countries/ movie name etc). Now make this list it searchable, you have to put a **input textbox** at top of list. When you type in **textbox** it should only show you items matching from text typed. For example - -If you type only "in" it should show things like "India" / "China" as both have `in` in it. -- **Assignment 2.1** : **FILTERED LIST** : Make above **List** as separate components for List, Input form and pass the states from each other using concepts learnt till now. - - -- **Assignment 3** : - - This is continuation of previous assignment **RESUME Builder**. Now you have to make a separate component **ResumeEditor** which has a **FORM**. This form will have many **input boxes**. Each one related to one section. For example you can have one input box or **experience** section. Another input box for **skill** section and like this. Every input box should have an **Add** button in front of it. Once you press this add button that information is stored in the state , which you can update at top of the App level. Now this state should update the **Resume** Component and its child you have built. - - first component will be your **RESUME** document which is only for reading purpose. -- second component will be this **FORM** -- you have to manage the state in between -- only Add functionality is required in this assignment -- you can change input boxes according to your need depending on your format of Resume. You can have multiple textboxes also for same section. Like for date + experience item etc. - -- **Assignment 4** : Try this challenge : https://beta.reactjs.org/learn/state-a-components-memory#challenges - -### Related Videos : - -1. HTML Forms-1 [Video](https://youtu.be/DUJEpSkzrVA) -2. HTML Forms-2 : [Video](https://youtu.be/Nj6Omw6zOok) - - - -## MINI PROJECT - - -# Project 1 - TODO App - -Todo app can be used to maintain a list of your pending daily items. A Simple todo list must have these features - - -* You can add any new item to TODO list -* You can click on any item to mark it as done, if you have done that by mistake - you can click again to undo. -* You can delete any item (completed or pending) -* You get a total of completed items and overall items on the list. -* You can move list items "Up" or "Down" using buttons. - - -![Output](https://raw.githubusercontent.com/abhishekrathore/fullstackbootcamp2019/master/01_REACT/2_PROJECT_1/images/todo-project.gif) - - -## Additional Features - - **KEYBOARD BASED Features** : - -- use **ENTER** key on keyboard to add a new item. -- when you click on an item, it should be selected (you can change style to show it is selected) -- If you press the **DELETE** key on the keyboard after selecting the list item it should delete that list item. If you have not selected any item the last item should be deleted. -- You can select list item and press **UP** arrow key to Move It Up. And you can press the **DOWN** key to move it down. - - -**Other Features** : - -* **Pin element to Top of List** : On double click make element reach top of list. You can show a different color also to show that element is pinned. -* **Show the date & time** at which list item was added. -* **Order** by : Todo Item names, Date added, Completed. -* **Due date feature** : Add a due date of task of any todo item. You will need to add another input box for this at top. Whenever you are in 24 hour limit of due date - Task outline will be shown in ORANGE color. e.g if a task is due on 23 May - from 22nd May it should show in ORANGE outline color. If a due date is passed task should show RED Outline. -* Use some component like `https://github.com/react-component/progress` to show a **progress bar** at top of list. This progress bar will show how much of total percent of tasks are completed. -* **Delete item via swipe gesture** - like swipe to right on mobile phone. [*Hint: You have to find an event type for this* ] - -**Advanced Features** : - -* **Use localStorage** in browser using libraries like `https://github.com/localForage/localForage` to make your todo list permanent in browser. This will have your list stored in browser database and will not delete it on refresh or closing of browser. -[LocalStorage Video](https://youtu.be/OTkQVPVYW7w) -[LocalForage Video](https://youtu.be/Rqyu9qzydoc) - - **ANIMATION BASED Features [optional]** : - -* Enter Animation : Animate list item on adding. -* Exit Animation : Animate list item at removal. - - - - - - - -## Chapter 7 - More State & useEffect hooks - -- **Assignment 1** : The method shown in this video was just to introduce **useEffect** hook. However that was not the correct use of useEffect hook. Can you change the code to remove useEffect and still have the editVideo functionality. [ *Hint : use the concept that Component is rendered every time prop changes* ] - -- **Assignment 2** : This is continuation of previous assignment **RESUME Builder**. - - Add functionality to **delete** the items from resume. - - Add functionality to **update** the items from resume. - - you have to manage the state in between - - you can change input boxes according to your need depending on your format of Resume. You can have multiple textboxes also for same section. Like for date + experience item etc. - - Check the output can be printed perfectly in PDF. - - -## Chapter 8 - useReducer - -- **Assignment 1** : Try this challenge : https://beta.reactjs.org/learn/extracting-state-logic-into-a-reducer#challenges - -- **Assignment 2** : Convert your **RESUME BUILDER** Application from `useState` to `useReducer` by converting states logic to a common reducer. Your reducer can have as many switch cases as you want. You can also divide them based on sections. `ADD_SKILL`, `ADD_EXPERIENCE` etc. to make logic even simpler for developer. - -### Related Videos : - -1. REDUX - Understand it in Simple way [Video](https://youtu.be/WdEQNzUMP_M) - - - -## Chapter 9 - Context API & useContext - -- **Assignment 1** : Try this challenge : -https://beta.reactjs.org/learn/passing-data-deeply-with-context#challenges - -- **Assignment 2** : Add a Context to your **RESUME BUILDER** to change font-size, font-color and some other font-properties. Also add a form to changed these property at top of App. - -- **Assignment 3** : Add a Context to your **RESUME BUILDER** to change Dark Mode and Light Mode. You can also use a `React Switch` kind of library to make it more user friendly to switch. - - -## Chapter 10 - Context API with useReducer [Redux architecture] - -### Special Assignments - -- **Assignment 1** : Make a **useCounter** Hook: To keep track of a number that can be incremented or decremented. -``` const [count, increment, decrement] = useCounter(0);``` - - -## Chapter 11 - useRef - -- **Assignment 1** : Try this challenge: - -https://beta.reactjs.org/learn/referencing-values-with-refs#challenges - -- **Assignment 2** : Try this challenge: -https://beta.reactjs.org/learn/manipulating-the-dom-with-refs#challenges - -- **Assignment 3** : Make a **useWindowSize** Hook: which returns size of current browser window. -``` const [width, height] = useWindowSize();``` - - - -### Related Videos : - -1. Complete DOM Course playlist [Video](https://bit.ly/35nMKB7) - - - -## Chapter 12 - useEffect and API calling - -- **Assignment 1** : Try this challenge : - -https://beta.reactjs.org/learn/synchronizing-with-effects#challenges - -- **Assignment 2** : Try this challenge : - -https://beta.reactjs.org/learn/removing-effect-dependencies#challenges - -- **Assignment 3** : Try this challenge : - -https://beta.reactjs.org/learn/reusing-logic-with-custom-hooks#challenges - -- **Assignment 4** Use **JSON Placeholder API** (link given below). - - You have to create a button which can get some posts and show them in a List. - - You have to a **show comments** button on each list item. On click of show comments, Post's comments should be fetched below that list item. [ Comments are available for each post in API] - - When you click on a particular list item's show comments, it should expand and **show** comments, otherwise it should collapse and **hide** the comments. - - Try to optimize by : - - - Only getting comments of required Post items (not all at a time) - - Storing somehow the old comments of closed list items. So you will not fetch them again, when your show comments again. - -![enter image description here](https://raw.githubusercontent.com/coderdost/full-stack-dev-2023/main/json-placeholder.png) - -### Related Links : - -1. Mockaroo fake data APIs [Link](https://www.mockaroo.com/) -2. JSON placeholder API [Link](https://jsonplaceholder.typicode.com/) - - - -## Chapter 13 - Memoization - useMemo, useCallback, memo - -- **Assignment 1** : Implement a component that displays a list of items. The component should memoize the list of items to prevent unnecessary re-rendering. - -- **Assignment 2**: How to use memoization in the **JSON Placeholder API** assignment in previous problem. Can you try to **optimize** it using **useMemo/useCallback** ? - -- **Assignment 3**: **useMemo** and **useCallback** are same hook. useCallback is just a convenient hook way to write **useMemo** for functions. Prove this using **useMemo** in place of **useCallback** in any previous problem. *[ Hint : you will have to change the useMemo callback and return the function definition ]* - - - -## Chapter 14 - Advanced React - Part 1 - - -- **Assignment 1** : -Try to apply `useDeferredValue` and `useTransistion` hooks on API based components. Either make a new one or use any existing code you have from other assignments. You can use `Chrome Network throttling` from **Devtools** > **Performance** Tabs and use **Slow 3G** option to see the effects - - - -## Chapter 15 - Advanced React - Part 2 - -- **Assignment 1** : -Try to use `window.print` functionality as show in code without flushSync and see if really make a difference. Also, try the same on `alert` functionality, can it also work ? +# Please download REACT-APP from THIS branch diff --git a/build/asset-manifest.json b/build/asset-manifest.json new file mode 100644 index 0000000..113f190 --- /dev/null +++ b/build/asset-manifest.json @@ -0,0 +1,15 @@ +{ + "files": { + "main.css": "/static/css/main.f68cec7f.css", + "main.js": "/static/js/main.c6996d8b.js", + "static/js/787.1ba05064.chunk.js": "/static/js/787.1ba05064.chunk.js", + "index.html": "/index.html", + "main.f68cec7f.css.map": "/static/css/main.f68cec7f.css.map", + "main.c6996d8b.js.map": "/static/js/main.c6996d8b.js.map", + "787.1ba05064.chunk.js.map": "/static/js/787.1ba05064.chunk.js.map" + }, + "entrypoints": [ + "static/css/main.f68cec7f.css", + "static/js/main.c6996d8b.js" + ] +} \ No newline at end of file diff --git a/build/favicon.ico b/build/favicon.ico new file mode 100644 index 0000000..a11777c Binary files /dev/null and b/build/favicon.ico differ diff --git a/build/index.html b/build/index.html new file mode 100644 index 0000000..57279a8 --- /dev/null +++ b/build/index.html @@ -0,0 +1 @@ +React App
\ No newline at end of file diff --git a/build/logo192.png b/build/logo192.png new file mode 100644 index 0000000..fc44b0a Binary files /dev/null and b/build/logo192.png differ diff --git a/build/logo512.png b/build/logo512.png new file mode 100644 index 0000000..a4e47a6 Binary files /dev/null and b/build/logo512.png differ diff --git a/build/manifest.json b/build/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/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/build/robots.txt b/build/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/build/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/build/static/css/main.f68cec7f.css b/build/static/css/main.f68cec7f.css new file mode 100644 index 0000000..80efc4d --- /dev/null +++ b/build/static/css/main.f68cec7f.css @@ -0,0 +1,2 @@ +body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}body{background:linear-gradient(90deg,#ccc,#999 35%)}.container{width:900px}.card{background-color:#fff;border:none;border-radius:10px;box-shadow:0 4px 8px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19);width:250px}.image-container{position:relative}.thumbnail-image{border-radius:10px!important}.discount{background-color:red;border-radius:6px;color:#fff;font-size:10px;padding:1px 4px}.wishlist{align-items:center;background-color:#eee;border-radius:50%;box-shadow:0 4px 8px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19);cursor:pointer;display:flex;height:25px;justify-content:center;width:25px}.wishlist:hover{background-color:red}.first{padding:9px;position:absolute;width:100%}.dress-name{width:75%}.dress-name,.new-price{font-size:13px;font-weight:700}.new-price{color:red}.old-price{color:grey;font-size:8px;font-weight:700}.creme{background-color:#fff;border:2px solid grey}.creme:hover{border:3px solid grey}.creme:focus{background-color:grey}.red{background-color:#fff;border:2px solid red}.red:hover{border:3px solid red}.red:focus{background-color:red}.blue{background-color:#fff;border:2px solid #40c4ff}.blue:hover{border:3px solid #40c4ff}.blue:focus{background-color:#40c4ff}.darkblue{background-color:#fff;border:2px solid #01579b}.darkblue:hover{border:3px solid #01579b}.darkblue:focus{background-color:#01579b}.yellow{background-color:#fff;border:2px solid #ffca28}.yellow:hover{border-radius:3px solid #ffca28}.yellow:focus{background-color:#ffca28}.item-size{align-items:center;background:#fff;border:1px solid grey;border-radius:50%;color:grey;display:flex;font-size:10px;height:15px;justify-content:center;text-align:center;width:15px}.rating-star{font-size:10px!important}.rating-number{color:grey;font-size:10px}.buy{color:purple;cursor:pointer;font-size:16px;font-weight:500}.buy:hover{color:#000;font-size:16px;font-weight:700}.discount-percent{font-size:12px;font-weight:700;position:relative;top:5px}.off{bottom:5px;font-size:14px;position:relative} +/*# sourceMappingURL=main.f68cec7f.css.map*/ \ No newline at end of file diff --git a/build/static/css/main.f68cec7f.css.map b/build/static/css/main.f68cec7f.css.map new file mode 100644 index 0000000..1753343 --- /dev/null +++ b/build/static/css/main.f68cec7f.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/main.f68cec7f.css","mappings":"AAAA,KAKE,kCAAmC,CACnC,iCAAkC,CAJlC,mIAEY,CAHZ,QAMF,CAEA,KACE,uEAEF,CCZA,KACE,+CAEF,CCFA,WACE,WACF,CAEA,MACE,qBAAsB,CACtB,WAAY,CACZ,kBAAmB,CAEnB,kEAA4E,CAD5E,WAEF,CAEA,iBACE,iBACF,CAEA,iBACE,4BACF,CAEA,UACE,oBAAqB,CAMrB,iBAAkB,CAClB,UAAW,CAFX,cAAe,CADf,eAIF,CAEA,UAME,kBAAmB,CAHnB,qBAAsB,CAItB,iBAAkB,CAClB,kEAA4E,CAC5E,cAAe,CALf,YAAa,CAHb,WAAY,CAIZ,sBAAuB,CAHvB,UAQF,CAEA,gBACI,oBACJ,CAEA,OAGE,WAAY,CAFZ,iBAAkB,CAClB,UAEF,CAEA,YAGE,SACF,CAEA,uBALE,cAAe,CACf,eAQF,CAJA,WAGE,SACF,CACA,WAGE,UAAW,CAFX,aAAc,CACd,eAEF,CASA,OACE,qBAAsB,CACtB,qBACF,CACA,aACE,qBACF,CAEA,aACE,qBACF,CAEA,KACE,qBAAsB,CACtB,oBACF,CAEA,WACE,oBACF,CACA,WACE,oBACF,CAEA,MACE,qBAAsB,CACtB,wBACF,CAEA,YACE,wBACF,CACA,YACE,wBACF,CACA,UACE,qBAAsB,CACtB,wBACF,CACA,gBACE,wBACF,CACA,gBACE,wBACF,CACA,QACE,qBAAsB,CACtB,wBACF,CACA,cACE,+BACF,CACA,cACE,wBACF,CAEA,WASE,kBAAmB,CALnB,eAAgB,CAChB,qBAAsB,CAFtB,iBAAkB,CAGlB,UAAW,CAIX,YAAa,CAHb,cAAe,CALf,WAAY,CASZ,sBAAuB,CAHvB,iBAAkB,CAPlB,UAWF,CAEA,aACE,wBACF,CACA,eAEE,UAAW,CADX,cAEF,CACA,KAEE,YAAa,CAEb,cAAe,CAHf,cAAe,CAEf,eAEF,CACA,WAEI,UAAY,CADZ,cAAe,CAEf,eACF,CAIF,kBACE,cAAe,CACf,eAAiB,CACjB,iBAAkB,CAClB,OACF,CACA,KAGE,UAAW,CAFX,cAAe,CACf,iBAEF","sources":["index.css","App.css","Product.css"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n","body {\n background: linear-gradient(90deg, rgba(204,204,204,1) 0%, rgba(153,153,153,1) 35%);\n\n}","\n.container {\n width: 900px;\n}\n\n.card {\n background-color: #fff;\n border: none;\n border-radius: 10px;\n width: 250px;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n\n.image-container {\n position: relative;\n}\n\n.thumbnail-image {\n border-radius: 10px !important;\n}\n\n.discount {\n background-color: red;\n padding-top: 1px;\n padding-bottom: 1px;\n padding-left: 4px;\n padding-right: 4px;\n font-size: 10px;\n border-radius: 6px;\n color: #fff;\n}\n\n.wishlist {\n height: 25px;\n width: 25px;\n background-color: #eee;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 50%;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n cursor: pointer;\n}\n\n.wishlist:hover {\n background-color: red;\n}\n\n.first {\n position: absolute;\n width: 100%;\n padding: 9px;\n}\n\n.dress-name {\n font-size: 13px;\n font-weight: bold;\n width: 75%;\n}\n\n.new-price {\n font-size: 13px;\n font-weight: bold;\n color: red;\n}\n.old-price {\n font-size: 8px;\n font-weight: bold;\n color: grey;\n}\n/* \n.btn {\n width: 14px;\n height: 14px;\n border-radius: 50%;\n padding: 3px;\n} */\n\n.creme {\n background-color: #fff;\n border: 2px solid grey;\n}\n.creme:hover {\n border: 3px solid grey;\n}\n\n.creme:focus {\n background-color: grey;\n}\n\n.red {\n background-color: #fff;\n border: 2px solid red;\n}\n\n.red:hover {\n border: 3px solid red;\n}\n.red:focus {\n background-color: red;\n}\n\n.blue {\n background-color: #fff;\n border: 2px solid #40c4ff;\n}\n\n.blue:hover {\n border: 3px solid #40c4ff;\n}\n.blue:focus {\n background-color: #40c4ff;\n}\n.darkblue {\n background-color: #fff;\n border: 2px solid #01579b;\n}\n.darkblue:hover {\n border: 3px solid #01579b;\n}\n.darkblue:focus {\n background-color: #01579b;\n}\n.yellow {\n background-color: #fff;\n border: 2px solid #ffca28;\n}\n.yellow:hover {\n border-radius: 3px solid #ffca28;\n}\n.yellow:focus {\n background-color: #ffca28;\n}\n\n.item-size {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: #fff;\n border: 1px solid grey;\n color: grey;\n font-size: 10px;\n text-align: center;\n align-items: center;\n display: flex;\n justify-content: center;\n}\n\n.rating-star {\n font-size: 10px !important;\n}\n.rating-number {\n font-size: 10px;\n color: grey;\n}\n.buy {\n font-size: 16px;\n color: purple;\n font-weight: 500;\n cursor: pointer;\n}\n.buy:hover {\n font-size: 16px;\n color: black;\n font-weight: bold;\n }\n\n\n\n.discount-percent {\n font-size: 12px;\n font-weight: bold;\n position: relative;\n top: 5px;\n}\n.off {\n font-size: 14px;\n position: relative;\n bottom: 5px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/build/static/js/787.1ba05064.chunk.js b/build/static/js/787.1ba05064.chunk.js new file mode 100644 index 0000000..304197f --- /dev/null +++ b/build/static/js/787.1ba05064.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkreact_app_ecomm=self.webpackChunkreact_app_ecomm||[]).push([[787],{787:function(e,t,n){n.r(t),n.d(t,{getCLS:function(){return y},getFCP:function(){return g},getFID:function(){return C},getLCP:function(){return P},getTTFB:function(){return D}});var i,r,a,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=-1,p=function(){return"hidden"===document.visibilityState?0:1/0},d=function(){f((function(e){var t=e.timeStamp;v=t}),!0)},l=function(){return v<0&&(v=p(),d(),s((function(){setTimeout((function(){v=p(),d()}),0)}))),{get firstHiddenTime(){return v}}},g=function(e,t){var n,i=l(),r=u("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime-1&&e(t)},r=u("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var t=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,n())}},p=c("layout-shift",v);p&&(n=m(i,r,t),f((function(){p.takeRecords().map(v),n(!0)})),s((function(){a=0,T=-1,r=u("CLS",0),n=m(i,r,t)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,t){i||(i=t,r=e,a=new Date,F(removeEventListener),S())},S=function(){if(r>=0&&r1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){L(e,t),r()},i=function(){r()},r=function(){removeEventListener("pointerup",n,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",n,E),addEventListener("pointercancel",i,E)}(t,e):L(t,e)}},F=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,b,E)}))},C=function(e,t){var n,a=l(),v=u("FID"),p=function(e){e.startTimeperformance.now())return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("load",(function(){return setTimeout(t,0)}))}}}]); +//# sourceMappingURL=787.1ba05064.chunk.js.map \ No newline at end of file diff --git a/build/static/js/787.1ba05064.chunk.js.map b/build/static/js/787.1ba05064.chunk.js.map new file mode 100644 index 0000000..8fb0fb6 --- /dev/null +++ b/build/static/js/787.1ba05064.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/787.1ba05064.chunk.js","mappings":"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","sources":["../node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["var e,t,n,i,r=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:\"v2-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)}},a=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if(\"first-input\"===e&&!(\"PerformanceEventTiming\"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},o=function(e,t){var n=function n(i){\"pagehide\"!==i.type&&\"hidden\"!==document.visibilityState||(e(i),t&&(removeEventListener(\"visibilitychange\",n,!0),removeEventListener(\"pagehide\",n,!0)))};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},u=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&e(t)}),!0)},c=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},f=-1,s=function(){return\"hidden\"===document.visibilityState?0:1/0},m=function(){o((function(e){var t=e.timeStamp;f=t}),!0)},v=function(){return f<0&&(f=s(),m(),u((function(){setTimeout((function(){f=s(),m()}),0)}))),{get firstHiddenTime(){return f}}},d=function(e,t){var n,i=v(),o=r(\"FCP\"),f=function(e){\"first-contentful-paint\"===e.name&&(m&&m.disconnect(),e.startTime-1&&e(t)},f=r(\"CLS\",0),s=0,m=[],v=function(e){if(!e.hadRecentInput){var t=m[0],i=m[m.length-1];s&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(s+=e.value,m.push(e)):(s=e.value,m=[e]),s>f.value&&(f.value=s,f.entries=m,n())}},h=a(\"layout-shift\",v);h&&(n=c(i,f,t),o((function(){h.takeRecords().map(v),n(!0)})),u((function(){s=0,l=-1,f=r(\"CLS\",0),n=c(i,f,t)})))},T={passive:!0,capture:!0},y=new Date,g=function(i,r){e||(e=r,t=i,n=new Date,w(removeEventListener),E())},E=function(){if(t>=0&&t1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){g(e,t),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",n,T),removeEventListener(\"pointercancel\",i,T)};addEventListener(\"pointerup\",n,T),addEventListener(\"pointercancel\",i,T)}(t,e):g(t,e)}},w=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,S,T)}))},L=function(n,f){var s,m=v(),d=r(\"FID\"),p=function(e){e.startTimeperformance.now())return;n.entries=[t],e(n)}catch(e){}},\"complete\"===document.readyState?setTimeout(t,0):addEventListener(\"load\",(function(){return setTimeout(t,0)}))};export{h as getCLS,d as getFCP,L as getFID,F as getLCP,P as getTTFB};\n"],"names":["e","t","n","i","r","name","value","delta","entries","id","concat","Date","now","Math","floor","random","a","PerformanceObserver","supportedEntryTypes","includes","self","getEntries","map","observe","type","buffered","o","document","visibilityState","removeEventListener","addEventListener","u","persisted","c","f","s","m","timeStamp","v","setTimeout","firstHiddenTime","d","disconnect","startTime","push","window","performance","getEntriesByName","requestAnimationFrame","p","l","h","hadRecentInput","length","takeRecords","T","passive","capture","y","g","w","E","entryType","target","cancelable","processingStart","forEach","S","L","b","F","once","P","getEntriesByType","timing","max","navigationStart","responseStart","readyState"],"sourceRoot":""} \ No newline at end of file diff --git a/build/static/js/main.c6996d8b.js b/build/static/js/main.c6996d8b.js new file mode 100644 index 0000000..7368f3f --- /dev/null +++ b/build/static/js/main.c6996d8b.js @@ -0,0 +1,3 @@ +/*! For license information please see main.c6996d8b.js.LICENSE.txt */ +!function(){"use strict";var e={463:function(e,t,n){var r=n(791),a=n(296);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n