Commit 8e86035b authored by Emre Can Yalçın's avatar Emre Can Yalçın
Browse files

update to ts

parent 756ece2e
Showing with 14811 additions and 15442 deletions
+14811 -15442
......@@ -2,7 +2,7 @@
**Sass: Syntactically Awesome Style Sheets**
https://sass-lang.com/
<https://sass-lang.com/>
[Sass](https://sass-lang.com/documentation) is a backwards-compatible language extension for CSS. Because Sass looks just like CSS, learning it is easy. Sass only makes a few convenient additions to the CSS language, which is one of the reasons it can be learned so quickly. It allows you to use variables, nested rules, mixins, functions, and more, all with a fully CSS-compatible syntax. Sass helps keep large stylesheets well-organized and makes it easy to share design within and across projects.
Sass comes built-in with [create-react-app](https://facebook.github.io/create-react-app/docs/getting-started). Not much configuration is needed.
......@@ -42,21 +42,19 @@ The directory contains two folders named **setup** and **solution**:
* **solution** - contains the completed version of the project.
Run `npm run start` to launch the project on localhost. You'll be able to see the output at http://localhost:3000/ in your browser.
You can rename `App.css` to `app.scss` and update `App.js` to import `app.scss`. This file and any other file will be automatically compiled if imported with the extension .scss or .sass.
Run `npm run start` to launch the project on localhost. You'll be able to see the output at <http://localhost:3000/> in your browser.
You can rename `App.css` to `app.scss` and update `App.tsx` to import `app.scss`. This file and any other file will be automatically compiled if imported with the extension .scss or .sass.
Open `app.scss` and add the following class:
```css
.text-center {
text-align: center;
text-align: center;
}
```
Now import the style in `App.js` and use it:
Now import the style in `App.tsx` and use it:
```html
import './app.scss';
......@@ -69,7 +67,8 @@ import './app.scss';
## Variables
SASS lets you define variables that you can reuse throughout the app. Create the following theme files to keep the common theme variables.
```
```folder
theme
├── colors.scss
└── dimens.scss
......@@ -77,7 +76,7 @@ theme
Adding and using a variable is done with `$` character. Add the following variable definitions to colors:
```
```scss
$primary-dark: #111111;
$primary-light: #DDDDDD;
$light-gray: #EEEEEE;
......@@ -86,7 +85,8 @@ $white: #FFFFFF;
```
And create the following dimensions:
```
```scss
$default-padding: 16px;
$default-weight: 300;
```
......@@ -99,14 +99,14 @@ Importing works pretty much as expected. You can import a `.scss` file, and all
You can import use the colors in `app.scss`:
```
```scss
@import './theme/colors.scss';
@import './theme/dimens.scss';
h1 {
font-family: 'Open Sans', sans-serif;
font-weight: $default-weight;
color: $primary-dark;
font-family: 'Open Sans', sans-serif;
font-weight: $default-weight;
color: $primary-dark;
}
```
......@@ -116,19 +116,19 @@ h1 {
Mixins are a way of including a bunch of properties from one rule-set into another rule-set. You can define a rule set with `@mixin` and use it with `@include`. So say we have the following class:
```
```scss
@mixin bordered {
border: 1px solid $primary-light;
border-radius: 2px;
border-spacing: 0;
border: 1px solid $primary-light;
border-radius: 2px;
border-spacing: 0;
}
```
You can just call this in another style:
```
```scss
table {
@include bordered;
@include bordered;
}
```
......@@ -138,46 +138,46 @@ table {
Sass gives you the ability to use nesting instead of, or in combination with cascading. Let's say we have the following CSS:
```
```scss
th {
font-family: 'Open Sans', sans-serif;
color: $primary-dark;
padding: $default-padding;
font-family: 'Open Sans', sans-serif;
color: $primary-dark;
padding: $default-padding;
}
th img{
@include bordered;
@include bordered;
}
tbody th {
font-weight: $default-weight;
font-weight: $default-weight;
}
tbody tr:nth-child(odd){
background-color: $light-gray;
background-color: $light-gray;
}
```
You can nest `img` within `th` as follows:
```
```scss
th {
font-family: 'Open Sans', sans-serif;
color: $primary-dark;
padding: $default-padding;
img {
@include bordered;
}
font-family: 'Open Sans', sans-serif;
color: $primary-dark;
padding: $default-padding;
img {
@include bordered;
}
}
tbody {
th {
font-weight: $default-weight;
}
tr:nth-child(odd){
background-color: $light-gray;
}
th {
font-weight: $default-weight;
}
tr:nth-child(odd){
background-color: $light-gray;
}
}
```
......@@ -189,37 +189,38 @@ At-rules such as `@media` or `@supports` can be nested in the same way as select
Add the following style rule:
```
```scss
tr {
background-color: $white;
th:nth-child(1){
@media (min-width: 768px) {
display: block
}
@media (max-width: 768px) {
display: none;
}
background-color: $white;
th:nth-child(1){
@media (min-width: 768px) {
display: block
}
@media (max-width: 768px) {
display: none;
}
}
}
```
It's the same as the following rule:
```
```scss
tr {
background-color: $white;
background-color: $white;
}
@media (min-width: 768px) {
tr th:nth-child(1){
display: block;
}
tr th:nth-child(1){
display: block;
}
}
@media (max-width: 768px) {
tr th:nth-child(1){
display: none;
}
tr th:nth-child(1){
display: none;
}
}
```
......@@ -227,19 +228,19 @@ tr {
## Operations
Arithmetical operations `+, -, *, /` can operate on any number, color or variable without needing to use `calc()` as in CSS. If it is possible, mathematical operations take units into account and convert numbers before adding, subtracting or comparing them.
Arithmetical operations `+, -, *, /` can operate on any number, color or variable without needing to use `calc()` as in CSS. If it is possible, mathematical operations take units into account and convert numbers before adding, subtracting or comparing them.
You can use a variable with an arithmetic expression as follows:
```
```scss
.App {
padding: $default-padding * 2;
padding: $default-padding * 2;
}
h1 {
font-family: 'Open Sans', sans-serif;
font-weight: $default-weight * 2;
color: $primary-dark;
font-family: 'Open Sans', sans-serif;
font-weight: $default-weight * 2;
color: $primary-dark;
}
```
......@@ -249,19 +250,20 @@ h1 {
Both block-style and inline comments may be used:
```
```scss
tr {
background-color: $white;
th:nth-child(1){
// Show first column for large devices
@media (min-width: 768px) {
display: block;
}
/* Hide first column for large devices */
@media (max-width: 768px) {
display: none;
}
background-color: $white;
th:nth-child(1){
// Show first column for large devices
@media (min-width: 768px) {
display: block;
}
/* Hide first column for large devices */
@media (max-width: 768px) {
display: none;
}
}
}
```
......@@ -270,6 +272,3 @@ tr {
## Conclusion
For further information and advanced features, you can refer to the [complete documentation](https://sass-lang.com/documentation) of SASS
# 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
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# 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/).
This diff is collapsed.
{
"name": "my-app",
"name": "setup",
"version": "0.1.0",
"private": true,
"dependencies": {
"node-sass": "^4.12.0",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-scripts": "2.1.8"
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.5.2",
"@types/node": "^16.18.69",
"@types/react": "^18.2.46",
"@types/react-dom": "^18.2.18",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"typescript": "^4.9.5",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
......@@ -15,12 +23,26 @@
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
]
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"sass": "^1.69.7",
"sass-loader": "^13.3.3",
"webpack": "^5.89.0"
}
}
......@@ -2,14 +2,15 @@
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
name="description"
content="Web site created using create-react-app"
/>
<meta name="theme-color" content="#000000" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet">
<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/
......
setup/public/logo192.png

5.22 KB

setup/public/logo512.png

9.44 KB

......@@ -6,6 +6,16 @@
"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": ".",
......
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
......@@ -30,4 +30,4 @@
to {
transform: rotate(360deg);
}
}
}
\ No newline at end of file
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div className="App">
<h1 className="text-center">Products</h1>
<table>
<thead>
<tr>
<th>Image</th>
<th>Name</th>
<th>Price</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<th><img src={require('./images/tablet.jpg')} alt="img-tablet" width="100" height="100"/></th>
<th>10-Inch Tablet</th>
<th>269</th>
<th>Android 4.3 Jelly Bean, 10.1-inch Full HD (1920 x 1200) Display</th>
</tr>
<tr>
<th><img src={require('./images/shoe.jpg')} alt="img-shoe" width="100" height="100"/></th>
<th>Running Shoe</th>
<th>48</th>
<th>Synthetic and Mesh, Imported, Rubber sole, Flex Film welded upper, HydraMAX moisture-wicking collar lining</th>
</tr>
<tr>
<th><img src={require('./images/watch.jpg')} alt="img-watch" width="100" height="100"/></th>
<th>Slim Bracelet Watch</th>
<th>27</th>
<th>A narrow gold-tone bracelet supports the round case of this watch, which features three rhinestones marking each hour and a sparkling halo on the bezel</th>
</tr>
</tbody>
</table>
</div>
);
}
}
export default App;
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 './App.css';
const App = () => {
return (
<div className="App">
<h1 className="text-center">Products</h1>
<table>
<thead>
<tr>
<th>Image</th>
<th>Name</th>
<th>Price</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src={require('./images/tablet.jpg')} alt="img-tablet" width="100" height="100" /></td>
<td>10-Inch Tablet</td>
<td>269</td>
<td>Android 4.3 Jelly Bean, 10.1-inch Full HD (1920 x 1200) Display</td>
</tr>
<tr>
<td><img src={require('./images/shoe.jpg')} alt="img-shoe" width="100" height="100" /></td>
<td>Running Shoe</td>
<td>48</td>
<td>Synthetic and Mesh, Imported, Rubber sole, Flex Film welded upper, HydraMAX moisture-wicking collar lining</td>
</tr>
<tr>
<td><img src={require('./images/watch.jpg')} alt="img-watch" width="100" height="100" /></td>
<td>Slim Bracelet Watch</td>
<td>27</td>
<td>A narrow gold-tone bracelet supports the round case of this watch, which features three rhinestones marking each hour and a sparkling halo on the bezel</td>
</tr>
</tbody>
</table>
</div>
);
};
export default App;
const shoe = require('./shoe.jpg');
const tablet = require('./tablet.jpg');
const shoe = require('./shoe.jpg');
const watch = require('./watch.jpg');
const headphones = require('./headphones.jpg');
const images = {
shoe,
tablet,
watch,
headphones
interface imagesProps {
[key: string]: any;
}
export default images
\ No newline at end of file
const images: imagesProps = {
tablet, shoe, watch, headphones
};
export default images;
body {
margin: 0;
padding: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(<App />, document.getElementById('root'));
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement
);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
\ No newline at end of file
/// <reference types="react-scripts" />
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment