From 5d54f2985bfa993b9a9a2d508e667702880f0e62 Mon Sep 17 00:00:00 2001 From: Andrzej Stepien Date: Fri, 7 Jul 2023 19:28:27 +0200 Subject: [PATCH] styling mostly done --- public/index.html | 4 +- src/App.css | 147 +++++++++++++++++++++++++++++++++-- src/Components/Calculator.js | 140 +++++++++++++++++---------------- src/Components/KeyPad.js | 30 ++++--- src/DS-DIGIB.TTF | Bin 0 -> 24896 bytes src/digital-7 (mono).ttf | Bin 0 -> 34404 bytes 6 files changed, 232 insertions(+), 89 deletions(-) create mode 100644 src/DS-DIGIB.TTF create mode 100644 src/digital-7 (mono).ttf diff --git a/public/index.html b/public/index.html index eb020eb..1b78027 100644 --- a/public/index.html +++ b/public/index.html @@ -40,6 +40,8 @@ To create a production bundle, use `npm run build` or `yarn build`. --> - + + + diff --git a/src/App.css b/src/App.css index 83cfb0c..77596ac 100644 --- a/src/App.css +++ b/src/App.css @@ -1,11 +1,144 @@ -button{ - width:100px; - height:100px; - background-color: gray; - margin: 10px; - font-size: 30px; + + +*, +*::before, +*::after { + box-sizing: border-box; +} + +@font-face { + font-family: calculator; + src: url("DS-DIGIB.TTF"); +} + +html{ + font-size: 16px; +} + +#calculator{ + width:550px; + margin:auto; + background: rgb(68,64,64); +background: linear-gradient(351deg, rgba(68,64,64,1) 0%, rgba(156,150,150,1) 100%); + padding: 1rem; + border-radius: 2rem; +} + +#calculator-content{ + display: grid; + grid-template-columns: repeat(4,1fr); + grid-template-rows: 1fr 1.6fr repeat(5,1fr); + grid-template-areas: + "header header header header" + "display display display display" + "functions functions functions operators" + "numbers numbers numbers operators" + "numbers numbers numbers operators" + "numbers numbers numbers operators" + "numbers numbers numbers operators" + ; + gap:1rem; +} + + +#calculator-content > header{ + grid-area: header; + font-family: 'Roboto', sans-serif; + +} + +#calculator-content > header > h1{ + font-size: 3rem; + margin:0.5rem auto; + color: aliceblue; + + opacity: 0.8; +} + +#display-container{ + grid-area: display; + justify-self: end; + align-self: end; + height:100%; + width:100%; + display: grid; + grid-template-rows: 1fr 6fr 1fr; + grid-template-areas: + "memory" + "main" + "operator" + ; + + + background: linear-gradient(351deg, rgba(15,93,53,1) 0%, rgba(194,228,185,1) 100%); + font-family: 'VT323', monospace; + font-size: 1rem; + border-radius: 0.5rem; + padding:0.5rem; + box-shadow: 0.5rem 0.5rem 2rem inset; +} + +#display-container > p { + margin:auto 0; + text-align: right; + line-height:1em; + opacity: 0.8; } #display{ - font-size: 26px;; + font-family: calculator; + font-size: 6rem; + grid-area: main; + align-self: center; + +} + +#memory{ + grid-area: memory; + align-self: center; + +} + +#operator{ + grid-area: operator; + align-self: center; + +} + + + + + +.num-pad{ + grid-area: numbers; + display: grid; + grid-template-columns: repeat(3,1fr); + grid-template-rows: repeat(4,1fr); + gap: 0.2rem; +} + +.operator-pad{ + grid-area: operators; + display: grid; + grid-template-rows: repeat(3,1fr) 2fr; + gap: 0.2rem; +} + +.function-pad{ + grid-area: functions; + display: grid; + grid-template-columns: repeat(3,1fr); + gap: 0.2rem; +} + + + +button{ + + background: rgb(92,92,92); +background: linear-gradient(351deg, rgba(92,92,92,1) 0%, rgba(224,224,224,1) 100%); + font-size: 30px; + place-self: stretch; + border-radius: 1.5rem; + } \ No newline at end of file diff --git a/src/Components/Calculator.js b/src/Components/Calculator.js index ef5cafb..d5d7c5d 100644 --- a/src/Components/Calculator.js +++ b/src/Components/Calculator.js @@ -1,107 +1,109 @@ import { useState } from "react"; import KeyPad from "./KeyPad"; -export default function Calculator(props){ - const [main,setMain] = useState("0") - const [memory,setMemory] = useState("") - const [operation,setOperation] = useState("") +export default function Calculator(props) { + const [main, setMain] = useState("0") + const [memory, setMemory] = useState("") + const [operation, setOperation] = useState("") const map = { - conc:(numberString)=>{ - if(main[0]==="0"){ - setMain(prev=>prev.slice(1)+numberString) - }else{ - setMain(prev=>prev+numberString) + conc: (numberString) => { + if (main[0] === "0") { + setMain(prev => prev.slice(1) + numberString) + } else { + setMain(prev => prev + numberString) } - + }, - zero:function(){this.conc("0")}, - one:function(){this.conc("1")}, - two:function(){this.conc("2")}, - three:function(){this.conc("3")}, - four:function(){this.conc("4")}, - five:function(){this.conc("5")}, - six:function(){this.conc("6")}, - seven:function(){this.conc("7")}, - eight:function(){this.conc("8")}, - nine:function(){this.conc("9")}, - decimal:function(){ - if(!/\./g.test(main)){ + zero: function () { this.conc("0") }, + one: function () { this.conc("1") }, + two: function () { this.conc("2") }, + three: function () { this.conc("3") }, + four: function () { this.conc("4") }, + five: function () { this.conc("5") }, + six: function () { this.conc("6") }, + seven: function () { this.conc("7") }, + eight: function () { this.conc("8") }, + nine: function () { this.conc("9") }, + decimal: function () { + if (!/\./g.test(main)) { this.conc(".") - } + } }, - add:function(){this.rcvOperator("add")}, - subtract:function(){this.rcvOperator("subtract")}, - multiply:function(){this.rcvOperator("multiply")}, - divide:function(){this.rcvOperator("divide")}, + add: function () { this.rcvOperator("add") }, + subtract: function () { this.rcvOperator("subtract") }, + multiply: function () { this.rcvOperator("multiply") }, + divide: function () { this.rcvOperator("divide") }, - rcvOperator:function(operator){ - if(main==="-"){ + rcvOperator: function (operator) { + if (main === "-") { setMain("") - }else if(main!==""){ - if(memory===""){ + } else if (main !== "") { + if (memory === "") { setMemory(main) - }else{ - setMemory(prev=>{return this.calculate(main,prev)}) + } else { + setMemory(prev => { return this.calculate(main, prev) }) } setMain("") } - if(main==="" && operator==="subtract"){ - setMain(prev=>{ - if(prev[0]!=="-"){ - return "-"+prev - } - }) - }else{ + if (main === "" && operator === "subtract") { + setMain(prev => { + if (prev[0] !== "-") { + return "-" + prev + } + }) + } else { setOperation(operator) } - + }, - operations:{ - add:(a,b)=>{return a+b}, - subtract:(a,b)=>{return b-a}, - multiply:(a,b)=>{return a*b}, - divide:(a,b)=>{return b/a}, - }, - - clear:()=>{ + operations: { + add: (a, b) => { return a + b }, + subtract: (a, b) => { return b - a }, + multiply: (a, b) => { return a * b }, + divide: (a, b) => { return b / a }, + }, + + clear: () => { setMain("0") setMemory("") setOperation("") }, - equals:function(){ - if(operation!=="" && main !==""){ - setMain(prev=>{ - return this.calculate(prev,memory) + equals: function () { + if (operation !== "" && main !== "") { + setMain(prev => { + return this.calculate(prev, memory) }) setMemory("") setOperation("") } - - }, - calculate:function(a,b){ - return this.operations[operation](parseFloat(a),parseFloat(b)).toString() - } - } - function handleInput(content){ + }, + calculate: function (a, b) { + return this.operations[operation](parseFloat(a), parseFloat(b)).toString() + } + } + + function handleInput(content) { map[content]() } - return( - <> -
-

{"memory: "+memory}

-

{main}

-

{"operation: "+operation}

+ return ( +
+
+

CALCULATOR

+
+

{memory}

+

{main}

+

{operation}

+
+ +
- - - ) } \ No newline at end of file diff --git a/src/Components/KeyPad.js b/src/Components/KeyPad.js index ebd24b2..ec1aae7 100644 --- a/src/Components/KeyPad.js +++ b/src/Components/KeyPad.js @@ -1,30 +1,36 @@ import Button from "./Button" export default function NumPad(props){ const numberMap = { - zero:0, - one:1, - two:2, - three:3, - four:4, - five:5, - six:6, + seven:7, eight:8, nine:9, - decimal:"." + four:4, + five:5, + six:6, + one:1, + two:2, + three:3, + zero:0, + decimal:".", + equals:"=" + } const operatorMap = { - add:"+", + subtract:"-", multiply:"x", divide:"/", + add:"+", } const functionMap = { + on:"on", + off:"off", clear:"C", - equals:"=" + } function buildButtons(map){ @@ -43,7 +49,7 @@ export default function NumPad(props){ return( -
+ <>
{buildButtons(numberMap)}
@@ -53,6 +59,6 @@ export default function NumPad(props){
{buildButtons(functionMap)}
-
+ ) } \ No newline at end of file diff --git a/src/DS-DIGIB.TTF b/src/DS-DIGIB.TTF new file mode 100644 index 0000000000000000000000000000000000000000..064ad478a510a9c581bb16d295f659256e1f920a GIT binary patch literal 24896 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