ready to deploy !

This commit is contained in:
Aliberk Sandıkçı 2024-12-11 21:25:54 +03:00
parent 9ec9189a18
commit 12f4d84fb5
Signed by: asandikci
GPG key ID: A3B47D76845BEDF3
32 changed files with 2017 additions and 27 deletions

691
package-lock.json generated
View file

@ -8,11 +8,18 @@
"name": "quickabdest", "name": "quickabdest",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@fontsource/poppins": "^5.1.0",
"@mui/icons-material": "^6.2.0",
"@mui/lab": "^6.0.0-beta.19",
"@mui/material": "^6.2.0",
"@testing-library/jest-dom": "^5.17.0", "@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0", "@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0", "@testing-library/user-event": "^13.5.0",
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
"react-router-dom": "^7.0.2",
"react-scripts": "5.0.1", "react-scripts": "5.0.1",
"web-vitals": "^2.1.4" "web-vitals": "^2.1.4"
}, },
@ -2373,6 +2380,167 @@
"postcss-selector-parser": "^6.0.10" "postcss-selector-parser": "^6.0.10"
} }
}, },
"node_modules/@emotion/babel-plugin": {
"version": "11.13.5",
"resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
"integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.16.7",
"@babel/runtime": "^7.18.3",
"@emotion/hash": "^0.9.2",
"@emotion/memoize": "^0.9.0",
"@emotion/serialize": "^1.3.3",
"babel-plugin-macros": "^3.1.0",
"convert-source-map": "^1.5.0",
"escape-string-regexp": "^4.0.0",
"find-root": "^1.1.0",
"source-map": "^0.5.7",
"stylis": "4.2.0"
}
},
"node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
"license": "MIT"
},
"node_modules/@emotion/babel-plugin/node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@emotion/cache": {
"version": "11.14.0",
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
"integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
"license": "MIT",
"dependencies": {
"@emotion/memoize": "^0.9.0",
"@emotion/sheet": "^1.4.0",
"@emotion/utils": "^1.4.2",
"@emotion/weak-memoize": "^0.4.0",
"stylis": "4.2.0"
}
},
"node_modules/@emotion/hash": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
"integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
"license": "MIT"
},
"node_modules/@emotion/is-prop-valid": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz",
"integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==",
"license": "MIT",
"dependencies": {
"@emotion/memoize": "^0.9.0"
}
},
"node_modules/@emotion/memoize": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
"integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
"license": "MIT"
},
"node_modules/@emotion/react": {
"version": "11.14.0",
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
"integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.13.5",
"@emotion/cache": "^11.14.0",
"@emotion/serialize": "^1.3.3",
"@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
"@emotion/utils": "^1.4.2",
"@emotion/weak-memoize": "^0.4.0",
"hoist-non-react-statics": "^3.3.1"
},
"peerDependencies": {
"react": ">=16.8.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@emotion/serialize": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
"integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
"license": "MIT",
"dependencies": {
"@emotion/hash": "^0.9.2",
"@emotion/memoize": "^0.9.0",
"@emotion/unitless": "^0.10.0",
"@emotion/utils": "^1.4.2",
"csstype": "^3.0.2"
}
},
"node_modules/@emotion/sheet": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
"integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
"license": "MIT"
},
"node_modules/@emotion/styled": {
"version": "11.14.0",
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz",
"integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.13.5",
"@emotion/is-prop-valid": "^1.3.0",
"@emotion/serialize": "^1.3.3",
"@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
"@emotion/utils": "^1.4.2"
},
"peerDependencies": {
"@emotion/react": "^11.0.0-rc.0",
"react": ">=16.8.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@emotion/unitless": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
"integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
"license": "MIT"
},
"node_modules/@emotion/use-insertion-effect-with-fallbacks": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
"integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
"license": "MIT",
"peerDependencies": {
"react": ">=16.8.0"
}
},
"node_modules/@emotion/utils": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
"integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
"license": "MIT"
},
"node_modules/@emotion/weak-memoize": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
"integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
"license": "MIT"
},
"node_modules/@eslint-community/eslint-utils": { "node_modules/@eslint-community/eslint-utils": {
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
@ -2499,6 +2667,50 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
} }
}, },
"node_modules/@floating-ui/core": {
"version": "1.6.8",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
"integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
"license": "MIT",
"dependencies": {
"@floating-ui/utils": "^0.2.8"
}
},
"node_modules/@floating-ui/dom": {
"version": "1.6.12",
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
"integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
"license": "MIT",
"dependencies": {
"@floating-ui/core": "^1.6.0",
"@floating-ui/utils": "^0.2.8"
}
},
"node_modules/@floating-ui/react-dom": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
"integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
"license": "MIT",
"dependencies": {
"@floating-ui/dom": "^1.0.0"
},
"peerDependencies": {
"react": ">=16.8.0",
"react-dom": ">=16.8.0"
}
},
"node_modules/@floating-ui/utils": {
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
"integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
"license": "MIT"
},
"node_modules/@fontsource/poppins": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@fontsource/poppins/-/poppins-5.1.0.tgz",
"integrity": "sha512-tpLXlnNi2fwQjiipvuj4uNFHCdoLA8izRsKdoexZuEzjx0r/g1aKLf4ta6lFgF7L+/+AFdmaXFlUwwvmDzYH+g==",
"license": "OFL-1.1"
},
"node_modules/@humanwhocodes/config-array": { "node_modules/@humanwhocodes/config-array": {
"version": "0.13.0", "version": "0.13.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
@ -3028,6 +3240,325 @@
"integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@mui/base": {
"version": "5.0.0-beta.66",
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.66.tgz",
"integrity": "sha512-1SzcNbtIms0o/Dx+599B6QbvR5qUMBUjwc2Gs47h1HsF7RcEFXxqaq7zrWkIWbvGctIIPx0j330oGx/SkF+UmA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
"@floating-ui/react-dom": "^2.1.1",
"@mui/types": "^7.2.19",
"@mui/utils": "^6.2.0",
"@popperjs/core": "^2.11.8",
"clsx": "^2.1.1",
"prop-types": "^15.8.1"
},
"engines": {
"node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/core-downloads-tracker": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.2.0.tgz",
"integrity": "sha512-Nn5PSkUqbDrvezpiiiYZiAbX4SFEiy3CbikUL6pWOXEUsq+L1j50OOyyUIHpaX2Hr+5V5UxTh+fPeC4nsGNhdw==",
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
}
},
"node_modules/@mui/icons-material": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.2.0.tgz",
"integrity": "sha512-WR1EEhGOSvxAsoTSzWZBlrWFjul8wziDrII4rC3PvMBHhBYBqEc2n/0aamfFbwkH5EiYb96aqc6kYY6tB310Sw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0"
},
"engines": {
"node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@mui/material": "^6.2.0",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/lab": {
"version": "6.0.0-beta.19",
"resolved": "https://registry.npmjs.org/@mui/lab/-/lab-6.0.0-beta.19.tgz",
"integrity": "sha512-t7iub8kjpLdA5uDGwGnNRjtGc1vYEUnDwSROjKrnYqjOlCQhBajFa8uoQtaST6jE/VEk6cxpDMnN5MalC6YpCg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
"@mui/base": "5.0.0-beta.66",
"@mui/system": "^6.2.0",
"@mui/types": "^7.2.19",
"@mui/utils": "^6.2.0",
"clsx": "^2.1.1",
"prop-types": "^15.8.1"
},
"engines": {
"node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
"@mui/material": "^6.2.0",
"@mui/material-pigment-css": "^6.2.0",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@emotion/react": {
"optional": true
},
"@emotion/styled": {
"optional": true
},
"@mui/material-pigment-css": {
"optional": true
},
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/material": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/@mui/material/-/material-6.2.0.tgz",
"integrity": "sha512-7FXXUPIyYzP02a7GvqwJ7ocmdP+FkvLvmy/uxG1TDmTlsr8nEClQp75uxiVznJqAY/jJy4d+Rj/fNWNxwidrYQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
"@mui/core-downloads-tracker": "^6.2.0",
"@mui/system": "^6.2.0",
"@mui/types": "^7.2.19",
"@mui/utils": "^6.2.0",
"@popperjs/core": "^2.11.8",
"@types/react-transition-group": "^4.4.11",
"clsx": "^2.1.1",
"csstype": "^3.1.3",
"prop-types": "^15.8.1",
"react-is": "^19.0.0",
"react-transition-group": "^4.4.5"
},
"engines": {
"node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
"@mui/material-pigment-css": "^6.2.0",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@emotion/react": {
"optional": true
},
"@emotion/styled": {
"optional": true
},
"@mui/material-pigment-css": {
"optional": true
},
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/material/node_modules/react-is": {
"version": "19.0.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz",
"integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==",
"license": "MIT"
},
"node_modules/@mui/private-theming": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.2.0.tgz",
"integrity": "sha512-lYd2MrVddhentF1d/cMXKnwlDjr/shbO3A2eGq22PCYUoZaqtAGZMc0U86KnJ/Sh5YzNYePqTOaaowAN8Qea8A==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
"@mui/utils": "^6.2.0",
"prop-types": "^15.8.1"
},
"engines": {
"node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/styled-engine": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.2.0.tgz",
"integrity": "sha512-rV4YCu6kcCjMnHFXU/tQcL6XfYVfFVR8n3ZVNGnk2rpXnt/ctOPJsF+eUQuhkHciueLVKpI06+umr1FxWWhVmQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
"@emotion/cache": "^11.13.5",
"@emotion/serialize": "^1.3.3",
"@emotion/sheet": "^1.4.0",
"csstype": "^3.1.3",
"prop-types": "^15.8.1"
},
"engines": {
"node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@emotion/react": "^11.4.1",
"@emotion/styled": "^11.3.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@emotion/react": {
"optional": true
},
"@emotion/styled": {
"optional": true
}
}
},
"node_modules/@mui/system": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/@mui/system/-/system-6.2.0.tgz",
"integrity": "sha512-DCeqev9Cd4f4pm3O1lqSGW/DIHHBG6ZpqMX9iIAvN4asYv+pPWv2/lKov9kWk5XThhxFnGSv93SRNE1kNRRg5Q==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
"@mui/private-theming": "^6.2.0",
"@mui/styled-engine": "^6.2.0",
"@mui/types": "^7.2.19",
"@mui/utils": "^6.2.0",
"clsx": "^2.1.1",
"csstype": "^3.1.3",
"prop-types": "^15.8.1"
},
"engines": {
"node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@emotion/react": {
"optional": true
},
"@emotion/styled": {
"optional": true
},
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/types": {
"version": "7.2.19",
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.19.tgz",
"integrity": "sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA==",
"license": "MIT",
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/utils": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.2.0.tgz",
"integrity": "sha512-77CaFJi+OIi2SjbPwCis8z5DXvE0dfx9hBz5FguZHt1VYFlWEPCWTHcMsQCahSErnfik5ebLsYK8+D+nsjGVfw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
"@mui/types": "^7.2.19",
"@types/prop-types": "^15.7.14",
"clsx": "^2.1.1",
"prop-types": "^15.8.1",
"react-is": "^19.0.0"
},
"engines": {
"node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/utils/node_modules/react-is": {
"version": "19.0.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz",
"integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==",
"license": "MIT"
},
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1", "version": "5.1.1-v1",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
@ -3152,6 +3683,16 @@
} }
} }
}, },
"node_modules/@popperjs/core": {
"version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/@rollup/plugin-babel": { "node_modules/@rollup/plugin-babel": {
"version": "5.3.1", "version": "5.3.1",
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
@ -3700,6 +4241,12 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/cookie": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
"license": "MIT"
},
"node_modules/@types/eslint": { "node_modules/@types/eslint": {
"version": "8.56.12", "version": "8.56.12",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz",
@ -4051,6 +4598,12 @@
"integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/prop-types": {
"version": "15.7.14",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
"integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==",
"license": "MIT"
},
"node_modules/@types/q": { "node_modules/@types/q": {
"version": "1.5.8", "version": "1.5.8",
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz",
@ -4078,6 +4631,15 @@
"@types/react": "^18.0.0" "@types/react": "^18.0.0"
} }
}, },
"node_modules/@types/react-transition-group": {
"version": "4.4.12",
"resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
"integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*"
}
},
"node_modules/@types/resolve": { "node_modules/@types/resolve": {
"version": "1.17.1", "version": "1.17.1",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
@ -5872,6 +6434,15 @@
"wrap-ansi": "^7.0.0" "wrap-ansi": "^7.0.0"
} }
}, },
"node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/co": { "node_modules/co": {
"version": "4.6.0", "version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@ -6602,6 +7173,12 @@
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"license": "MIT"
},
"node_modules/damerau-levenshtein": { "node_modules/damerau-levenshtein": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
@ -6951,6 +7528,16 @@
"utila": "~0.4" "utila": "~0.4"
} }
}, },
"node_modules/dom-helpers": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
"integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.8.7",
"csstype": "^3.0.2"
}
},
"node_modules/dom-serializer": { "node_modules/dom-serializer": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
@ -8472,6 +9059,12 @@
"url": "https://github.com/avajs/find-cache-dir?sponsor=1" "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
} }
}, },
"node_modules/find-root": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
"integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
"license": "MIT"
},
"node_modules/find-up": { "node_modules/find-up": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@ -9161,6 +9754,21 @@
"he": "bin/he" "he": "bin/he"
} }
}, },
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"license": "BSD-3-Clause",
"dependencies": {
"react-is": "^16.7.0"
}
},
"node_modules/hoist-non-react-statics/node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
"node_modules/hoopy": { "node_modules/hoopy": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@ -14242,6 +14850,55 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/react-router": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.0.2.tgz",
"integrity": "sha512-m5AcPfTRUcjwmhBzOJGEl6Y7+Crqyju0+TgTQxoS4SO+BkWbhOrcfZNq6wSWdl2BBbJbsAoBUb8ZacOFT+/JlA==",
"license": "MIT",
"dependencies": {
"@types/cookie": "^0.6.0",
"cookie": "^1.0.1",
"set-cookie-parser": "^2.6.0",
"turbo-stream": "2.4.0"
},
"engines": {
"node": ">=20.0.0"
},
"peerDependencies": {
"react": ">=18",
"react-dom": ">=18"
},
"peerDependenciesMeta": {
"react-dom": {
"optional": true
}
}
},
"node_modules/react-router-dom": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.0.2.tgz",
"integrity": "sha512-VJOQ+CDWFDGaWdrG12Nl+d7yHtLaurNgAQZVgaIy7/Xd+DojgmYLosFfZdGz1wpxmjJIAkAMVTKWcvkx1oggAw==",
"license": "MIT",
"dependencies": {
"react-router": "7.0.2"
},
"engines": {
"node": ">=20.0.0"
},
"peerDependencies": {
"react": ">=18",
"react-dom": ">=18"
}
},
"node_modules/react-router/node_modules/cookie": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
"integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/react-scripts": { "node_modules/react-scripts": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz",
@ -14315,6 +14972,22 @@
} }
} }
}, },
"node_modules/react-transition-group": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
"integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
"license": "BSD-3-Clause",
"dependencies": {
"@babel/runtime": "^7.5.5",
"dom-helpers": "^5.0.1",
"loose-envify": "^1.4.0",
"prop-types": "^15.6.2"
},
"peerDependencies": {
"react": ">=16.6.0",
"react-dom": ">=16.6.0"
}
},
"node_modules/read-cache": { "node_modules/read-cache": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@ -15117,6 +15790,12 @@
"node": ">= 0.8.0" "node": ">= 0.8.0"
} }
}, },
"node_modules/set-cookie-parser": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
"integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
"license": "MIT"
},
"node_modules/set-function-length": { "node_modules/set-function-length": {
"version": "1.2.2", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@ -15790,6 +16469,12 @@
"postcss": "^8.2.15" "postcss": "^8.2.15"
} }
}, },
"node_modules/stylis": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
"integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
"license": "MIT"
},
"node_modules/sucrase": { "node_modules/sucrase": {
"version": "3.35.0", "version": "3.35.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
@ -16480,6 +17165,12 @@
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"license": "0BSD" "license": "0BSD"
}, },
"node_modules/turbo-stream": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
"integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==",
"license": "ISC"
},
"node_modules/type-check": { "node_modules/type-check": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",

View file

@ -3,11 +3,18 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@fontsource/poppins": "^5.1.0",
"@mui/icons-material": "^6.2.0",
"@mui/lab": "^6.0.0-beta.19",
"@mui/material": "^6.2.0",
"@testing-library/jest-dom": "^5.17.0", "@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0", "@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0", "@testing-library/user-event": "^13.5.0",
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
"react-router-dom": "^7.0.2",
"react-scripts": "5.0.1", "react-scripts": "5.0.1",
"web-vitals": "^2.1.4" "web-vitals": "^2.1.4"
}, },

View file

@ -1,24 +1,15 @@
import logo from './logo.svg'; import Home from "./components/Home";
import './App.css'; import { ThemeProvider as MuiThemeProvider } from "@mui/material";
import createTheme from "./theme";
import "./App.css";
import useTheme from "./hooks/useTheme";
function App() { function App() {
const { theme } = useTheme();
return ( return (
<div className="App"> <MuiThemeProvider theme={createTheme(theme)}>
<header className="App-header"> <Home />
<img src={logo} className="App-logo" alt="logo" /> </MuiThemeProvider>
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
); );
} }

62
src/components/Home.js Normal file
View file

@ -0,0 +1,62 @@
import {
CssBaseline,
Dialog,
DialogContent,
DialogTitle,
Grid,
Paper as MuiPaper,
Typography,
} from "@mui/material";
import NavMenu from "./Menu.js";
import { useRoutes } from "react-router-dom";
import { routes } from "../routes";
import React from "react";
import styled from "@emotion/styled";
import { spacing } from "@mui/system";
import "./pages/Texts.css";
import BlockIcon from "@mui/icons-material/Block";
// import Social from "./Social";
const Paper = styled(MuiPaper)(spacing);
const AppContent = styled.div`
flex: 1;
display: flex;
flex-direction: column;
max-width: 100%;
`;
const MainContent = styled(Paper)`
flex: 1;
background: ${(props) => props.theme.palette.background.default};
margin: 20px 20px;
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
flex: none;
}
.MuiPaper-root .MuiPaper-root {
box-shadow: none;
}
`;
export default function Home() {
const content = useRoutes(routes);
return (
<React.Fragment>
<CssBaseline />
<AppContent>
<NavMenu />
{/* <Social /> */}
<Grid
item
sx={{
marginLeft: { xs: 0, lg: 45 },
marginRight: { xs: 0, lg: 45 },
overflow: "hidden",
}}>
<MainContent>{content}</MainContent>
</Grid>
</AppContent>
</React.Fragment>
);
}

143
src/components/Menu.js Normal file
View file

@ -0,0 +1,143 @@
import * as React from "react";
import Box from "@mui/material/Box";
import IconButton from "@mui/material/IconButton";
import Typography from "@mui/material/Typography";
import Menu from "@mui/material/Menu";
import MenuIcon from "@mui/icons-material/Menu";
import Container from "@mui/material/Container";
import MenuItem from "@mui/material/MenuItem";
import { useNavigate } from "react-router-dom";
import Settings from "./Settings";
import { AppBar, Button, Grid, Toolbar } from "@mui/material";
const pages = [
{ name: "Abdest Hakkında", href: "/abdesthakkinda" },
{ name: "Abdest Nasıl Alınır?", href: "/abdestnasilalinir" },
{ name: "Abdestin Etimolojisi", href: "/abdestetimoloji" },
{ name: "Abdestin Hükümleri", href: "/abdestinhukumleri" },
{ name: "Abdestin Farzları", href: "/abdestinfarzlari" },
{ name: "Abdestin Sünnetleri", href: "/abdestinsunnetleri" },
{ name: "Abdestin Mehrukları", href: "/abdestinmehruklari" },
{ name: "Abdesti Bozan Durumlar", href: "/abdestbozandurumlar" },
{ name: "Engelli Abdesti Nasıl Alınır?", href: "/engelliabdesti" },
{
name: "Teyemmüm Abdesti Nasıl Alınır?",
href: "/teyemmumabdesti",
},
];
function NavMenu() {
const [anchorElNav, setAnchorElNav] = React.useState(null);
const navigate = useNavigate();
const handleOpenNavMenu = (event) => {
setAnchorElNav(event.currentTarget);
};
const handleCloseNavMenu = (href) => {
setAnchorElNav(null);
if (href) {
navigate(href);
}
};
return (
<React.Fragment>
<AppBar position="sticky" sx={{ zIndex: 99 }}>
<Container maxWidth="xxl">
<Toolbar disableGutters>
<Grid
item
width={300}
textAlign={"center"}
sx={{
display: { xs: "none", lg: "block" },
}}>
<Typography
variant="h6"
noWrap
component="a"
href="/"
sx={{
fontFamily: "monospace",
fontWeight: 700,
letterSpacing: ".3rem",
color: "inherit",
textDecoration: "none",
}}>
quickabdest
</Typography>
</Grid>
<Box sx={{ flexGrow: 1, display: { xs: "flex", lg: "none" } }}>
<IconButton
size="large"
aria-label="account of current user"
aria-controls="menu-appbar"
aria-haspopup="true"
onClick={handleOpenNavMenu}
color="inherit">
<MenuIcon />
</IconButton>
<Menu
id="menu-appbar"
anchorEl={anchorElNav}
anchorOrigin={{
vertical: "bottom",
horizontal: "left",
}}
keepMounted
transformOrigin={{
vertical: "top",
horizontal: "left",
}}
open={Boolean(anchorElNav)}
onClose={handleCloseNavMenu}
sx={{
display: { xs: "block", lg: "none" },
}}>
{pages.map((page) => (
<MenuItem
key={page.name}
onClick={() => handleCloseNavMenu(page.href)}>
<Typography textAlign="center">{page.name}</Typography>
</MenuItem>
))}
</Menu>
</Box>
<Typography
variant="h5"
noWrap
component="a"
href="/"
sx={{
mr: 2,
display: { xs: "flex", lg: "none" },
flexGrow: 1,
fontFamily: "monospace",
fontWeight: 700,
letterSpacing: ".5rem",
color: "inherit",
textDecoration: "none",
}}>
quickabdest
</Typography>
<Box sx={{ flexGrow: 4, display: { xs: "none", lg: "flex" } }}>
{pages.map((page) => (
<Button
key={page.name}
onClick={() => handleCloseNavMenu(page.href)}
sx={{ color: "white", display: "block" }}
noWrap>
{page.name}
</Button>
))}
</Box>
<Settings />
</Toolbar>
</Container>
</AppBar>
</React.Fragment>
);
}
export default NavMenu;

View file

@ -0,0 +1,66 @@
import styled from "@emotion/styled";
import { Switch } from "@mui/material";
import useTheme from "../hooks/useTheme";
const MaterialUISwitch = styled(Switch)(({ theme }) => ({
width: 50,
height: 25,
padding: 7,
"& .MuiSwitch-switchBase": {
margin: 1,
padding: 0,
transform: "translateX(6px)",
"&.Mui-checked": {
color: "#fff",
transform: "translateX(22px)",
"& .MuiSwitch-thumb:before": {
backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="20" width="20" viewBox="0 0 20 20"><path fill="${encodeURIComponent(
"#fff"
)}" d="M4.2 2.5l-.7 1.8-1.8.7 1.8.7.7 1.8.6-1.8L6.7 5l-1.9-.7-.6-1.8zm15 8.3a6.7 6.7 0 11-6.6-6.6 5.8 5.8 0 006.6 6.6z"/></svg>')`,
},
"& + .MuiSwitch-track": {
opacity: 1,
backgroundColor: theme.palette.mode === "DARK" ? "#8796A5" : "#aab4be",
},
},
},
"& .MuiSwitch-thumb": {
backgroundColor: theme.palette.mode === "DARK" ? "#003892" : "#001e3c",
width: 22,
height: 22,
"&:before": {
content: "''",
position: "absolute",
width: "100%",
height: "100%",
left: 0,
top: 0,
backgroundRepeat: "no-repeat",
backgroundPosition: "center",
backgroundImage: `url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="20" width="20" viewBox="0 0 20 20"><path fill="${encodeURIComponent(
"#fff"
)}" d="M9.305 1.667V3.75h1.389V1.667h-1.39zm-4.707 1.95l-.982.982L5.09 6.072l.982-.982-1.473-1.473zm10.802 0L13.927 5.09l.982.982 1.473-1.473-.982-.982zM10 5.139a4.872 4.872 0 00-4.862 4.86A4.872 4.872 0 0010 14.862 4.872 4.872 0 0014.86 10 4.872 4.872 0 0010 5.139zm0 1.389A3.462 3.462 0 0113.471 10a3.462 3.462 0 01-3.473 3.472A3.462 3.462 0 016.527 10 3.462 3.462 0 0110 6.528zM1.665 9.305v1.39h2.083v-1.39H1.666zm14.583 0v1.39h2.084v-1.39h-2.084zM5.09 13.928L3.616 15.4l.982.982 1.473-1.473-.982-.982zm9.82 0l-.982.982 1.473 1.473.982-.982-1.473-1.473zM9.305 16.25v2.083h1.389V16.25h-1.39z"/></svg>')`,
},
},
"& .MuiSwitch-track": {
opacity: 1,
backgroundColor: theme.palette.mode === "DARK" ? "#8796A5" : "#aab4be",
borderRadius: 20 / 2,
},
}));
function Settings() {
const { setTheme, theme } = useTheme(
localStorage.getItem("theme") || "DEFAULT"
);
return (
<MaterialUISwitch
sx={{ m: 1 }}
defaultValue={theme}
defaultChecked
onChange={() => setTheme(theme === "DARK" ? "DEFAULT" : "DARK")}
/>
);
}
export default Settings;

View file

@ -0,0 +1,135 @@
import feelsGood from "../../files/feels.png";
import feelsBad from "../../files/feelsbad.png";
import { useEffect, useState } from "react";
import abdestSound from "../../files/sound.m4a";
import { Grid, Typography } from "@mui/material";
function Abdest() {
const [abdest, setAbdest] = useState(localStorage.getItem("cd"));
const [timeLeft, setTimeLeft] = useState(localStorage.getItem("timeleft"));
const [minutes, setMinutes] = useState(0);
const [seconds, setSeconds] = useState(0);
var audio = new Audio(abdestSound);
const changeAbdestState = () => {
if (!abdest) {
audio.play();
setAbdest(true);
const currentTime = new Date().getTime();
setTimeLeft(currentTime + 300000);
setMinutes(5);
setSeconds(0);
}
};
useEffect(() => {
localStorage.setItem("cd", abdest);
localStorage.setItem("timeleft", timeLeft);
}, [abdest, timeLeft]);
useEffect(() => {
let timer;
if (abdest) {
const storedTimeLeft = localStorage.getItem("timeleft");
const currentTime = new Date().getTime();
if (storedTimeLeft && currentTime < storedTimeLeft) {
const timeDifference = Math.floor(
(storedTimeLeft - currentTime) / 1000
);
const updatedMinutes = Math.floor(timeDifference / 60);
const updatedSeconds = timeDifference % 60;
setMinutes(updatedMinutes);
setSeconds(updatedSeconds);
setTimeLeft(storedTimeLeft);
timer = setInterval(() => {
const currentTime = new Date().getTime();
if (currentTime >= storedTimeLeft) {
setAbdest(false);
setTimeLeft(null);
setMinutes(0);
setSeconds(0);
clearInterval(timer);
} else {
const timeDifference = Math.floor(
(storedTimeLeft - currentTime) / 1000
);
const updatedMinutes = Math.floor(timeDifference / 60);
const updatedSeconds = timeDifference % 60;
setMinutes(updatedMinutes);
setSeconds(updatedSeconds);
}
}, 1000);
} else {
setAbdest(false);
setTimeLeft(null);
setMinutes(0);
setSeconds(0);
localStorage.removeItem("cd");
localStorage.removeItem("timeleft");
}
}
return () => {
clearInterval(timer);
};
}, [abdest]);
return (
<Grid container textAlign="center">
<Grid item onClick={changeAbdestState} xs={12} mt={7}>
<img
src={abdest ? feelsGood : feelsBad}
alt=""
height={"auto"}
style={{ width: "clamp(12.5rem, 45%, 50rem)" }}
/>
</Grid>
<Grid
item
xs={12}
m={2}
sx={{ display: abdest ? "none" : "block", fontSize: "2rem" }}>
abdest almak için{" "}
<Typography
component="a"
style={{ color: "red", fontSize: "2rem" }}
onClick={changeAbdestState}>
tıkla
</Typography>
</Grid>
<Grid item xs={12} m={2}>
<Typography
component="h2"
style={{ fontSize: "2rem" }}
className={abdest ? "abdestTrue" : "abdestFalse"}>
{abdest ? "ABDESTLENDİN" : "abdest almanın doğru adresi"}
</Typography>
</Grid>
<Grid container>
<Grid item xs={12} m={2}>
{abdest && (
<Typography component="h2" style={{ fontSize: "2rem" }}>
Abdestin geçerlilik süresi:{" "}
{minutes < 10 ? "0" + minutes : minutes}:
{seconds < 10 ? "0" + seconds : seconds}
</Typography>
)}
</Grid>
<Grid item xs={12} m={2}>
<Typography variant="h5">
Site tamamen eğlence amacıyla hazırlanmıştır
</Typography>
</Grid>
</Grid>
</Grid>
);
}
export function QuickAbdest() {
return (
<>
<Abdest />
</>
);
}

View file

@ -0,0 +1,31 @@
import "./Texts.css";
export function AbdestBozan() {
return (
<>
<h1>Abdesti Bozan Durumlar</h1>
<p>
Nisa Suresi, 43 ayetine göre sekerat (şuuru yerinde olmamak:
delilik/cinnet, esriklik/sarhoşluk, bayılmak-baygınlık, uyku-uyumak...)
durumu ile boşaltım organlarından çıkış olması durumu namaza dolayısıyla
da abdestin varlığına engeldir. Maide Suresi 6. ayetine göre namaz için
abdest ya da teyemmüm şarttır.
</p>
<ul>
<li>
Boşaltım organlarından idrar, kan, meni, gaita (dışkı), yel gibi katı,
sıvı veya gaz çıkması,
</li>
<li>
Uyumak, delirmek, bayılmak, sarhoş olmak gibi idrak gücünün
kaybedildiği durumlar,
</li>
<li>Kanama,</li>
<li>Cinsî münasebet,</li>
<li>ız dolusu kusmak,</li>
<li>Teyemmüm almış birinin su bulması,</li>
<li>Yellenmek.</li>
</ul>
</>
);
}

View file

@ -0,0 +1,22 @@
export function AbdestEngelli() {
return (
<>
<h1>Engelli abdesti</h1>
<p>
Normal abdest almasına engel bir durumu olan Müslüman'ın, rahatsızlığına
göre farklı yönlerden eksik kalan abdesttir.
</p>
<p>
Vücudunun belli yerlerini tıbbi sebeplerden yıkayamayan insanlar normal
abdest almaktan muhaf tutulur. Örnek olarak, kolu kırılan ve alçıya
alınan kişi abdestini alır; ancak kolunu yıkayamadığından sadece alçının
üstünü suyla mesh edebilir. O da zararlıysa, onu da yapmaz. Vücudunda
devamlı kanayan yara olan Müslümanlar da engelli abdesti alır. Buna
göre, normal abdest alırlar, fakat bu abdestle sadece tek vakit namaz
kılabilirler. Engelli abdesti alan Müslüman'ın, tam abdest alan
Müslüman'a cemaatle kılınan namazlarda imamlık yapması uygun
görülmemiştir.
</p>
</>
);
}

View file

@ -0,0 +1,22 @@
export function AbdestEtimiloji() {
return (
<>
<h1>Abdestin Etimolojisi</h1>
<p>
&quot;Abdest&quot; sözcüğü Türkçeye Selçuklular zamanında Farsça'dan
geçmiştir. Anlamı &quot;su tutmak&quot;tır. âb (su) ve dest (tutmak,
kavramak) kelimelerinin birleşiminden oluşmuştur. İran ve bazı diğer
Müslüman ülkeler ile İngilizce konuşan ülkelerde abdest yerine
&quot;vudu&quot; kelimesi kullanılır.
</p>
<p>
Abdest Kur'an' da gasil veya gusül olarak geçer. Bu sözcük, Arapça'da
&quot;bir sıvıyı bir nesne üzerinden akıtmak, koku sürünmek&quot;
anlamlarına gelir. Bazı hadisçiler ve fıkıılar vudû kelimesini abdest
anlamında kullanmakta ve gusül kelimesini boy abdesti için
kullanmaktadırlar. Kur'an'da boy abdesti için ıttıhar yani taharlanma
(temizlik) sözcüğü kullanılmaktadır.
</p>
</>
);
}

View file

@ -0,0 +1,14 @@
export function AbdestFarz() {
return (
<>
<h1>Abdestin Farzları</h1>
<p>Sünni alimlere göre abdestin farzları dörttür:</p>
<ul>
<li>Başın dörtte birini meshetmek, yani ıslak elle sıvazlamak.</li>
<li>Kolları (dirsekleriyle beraber) yıkamak.</li>
<li>Yüzü yıkamak.</li>
<li>Ayakları (topuklarıyla beraber) yıkamak.</li>
</ul>
</>
);
}

View file

@ -0,0 +1,181 @@
export function AbdestHakkinda() {
return (
<>
<h1>Abdest</h1>
<p>
Abdest, Müslümanların, namaz gibi belli ibadetleri yapabilmek için bir
düzen içerisinde bazı organları yıkayıp bazılarını mesh etme yoluyla
yaptıkları arınma ve temizliktir. Kur'ana göre her namazın yanında
bedensel temizlenme amacıyla belli organları yıkamak (gasil) ve
meshetmek (mesih) şeklinde anlatılır. Suyun abdeste uygun olması
önemlidir. Su abdeste tadı, bulanıklığı ve kokusunun olağan olması ile
uygun olmaktadır.
</p>
<h2>Etimolojisi</h2>
<p>
&quot;Abdest&quot; sözcüğü Türkçeye Selçuklular zamanında Farsça'dan
geçmiştir. Anlamı &quot;su tutmak&quot;tır. âb (su) ve dest (tutmak,
kavramak) kelimelerinin birleşiminden oluşmuştur. İran ve bazı diğer
Müslüman ülkeler ile İngilizce konuşan ülkelerde abdest yerine
&quot;vudu&quot; kelimesi kullanılır.
</p>
<p>
Abdest Kur'an' da gasil veya gusül olarak geçer. Bu sözcük, Arapça'da
&quot;bir sıvıyı bir nesne üzerinden akıtmak, koku sürünmek&quot;
anlamlarına gelir. Bazı hadisçiler ve fıkıılar vudû kelimesini abdest
anlamında kullanmakta ve gusül kelimesini boy abdesti için
kullanmaktadırlar. Kur'an'da boy abdesti için ıttıhar yani taharlanma
(temizlik) sözcüğü kullanılmaktadır.
</p>
<h2>Teyemmüm</h2>
<p>
Fakihlere (fıkıh alimi) göre namaz kılmak için abdest yerine bazı
durumlarda teyemmüm yapılabilir. Ayrıca teyemmüm, hastalık, yolculuk, su
bulmama/suyun olmaması veya erişilememesi gibi durumlarda boy abdesti
yerine de yapılır. Kur'an'da teyemmüm yapmak için türâb (toprak) sözcüğü
kullanılmaz, bunun yerine said sözcüğü kullanılır ki bu sözcük
&quot;toz, toprak, taş vs.&quot; anlamına gelmektedir. Kullanıma uygun
su bulunduğu zaman bozulmaktadır.
</p>
<h2>Abdest Ayeti</h2>
<p>
Kur'anda; (Maide Suresi, 6), (Nisa suresi, 43), (Müddessir suresi, 4-5),
(Bakara suresi, 222), (Tevbe suresi, 108), (Vakıa suresi, 79)'da geçer.
</p>
<p>
Ayetin ayakları anlatan ercüleküm kelimesinin okunuşu kıraat
mezhepleri arasında ihtilaflı bir konudur. Kelime iki şekilde
okunabilir; ercüleküm şeklinde okunduğunda abdest alırken ayakların
yıkanması gerektiği anlaşılır, ercüliküm şeklinde okunmasında ise
ayakların yıkanmıyacağı, sadece meshedileceği anlaşılır.
</p>
<p>
Ayette kullanılan vücûhe küm (vecihleriniz) ibaresi, başın ön yanı için
kullanılır, bu yüzden başta saçların döküldüğü ön kısım, yüz, boyun altı
demektir. Baş sıvazlanırken, ayette sınır koymadığı için, baş adlı
organın başın ön yanı dışındaki her yanı, kulaklar, ense, boyun
sıvazlanır.
</p>
<h2>Abdestin hükümleri</h2>
<p>
Fıkıh alimleri, Kur'an ve Sünneti referans göstererek abdestin
hükümlerini (farz, sünnet, mendup, müstehab, mekruh vs.) şunlar olarak
belirtirler:
</p>
<h3>Abdestin farzları</h3>
<p>Sünni alimlere göre abdestin farzları dörttür:</p>
<ul>
<li>Başın dörtte birini meshetmek, yani ıslak elle sıvazlamak.</li>
<li>Kolları (dirsekleriyle beraber) yıkamak.</li>
<li>Yüzü yıkamak.</li>
<li>Ayakları (topuklarıyla beraber) yıkamak.</li>
</ul>
<p>
Şia alimlerden bazıları &quot;ayaklara meshetmenin&quot; abdestin
farzlarından olduğuna, bazı alimler meshin farz, yıkamanın sünnet
olduğuna, diğer bir kısmı ise her iki uygulamadan birisini yerine
getirmenin yeterli olacağına inanmışlardır.
</p>
<h3>Abdestin sünnetleri</h3>
<ul>
<li>Niyet etmek</li>
<li>Eûzü ve Besmele ile başlamak</li>
<li>Evvela ellerini bileklerine kadar yıkamak</li>
<li>Misvak kullanmak</li>
<li>Bir âzâ kurumadan diğerini yıkamak</li>
<li>Ağzına ve burnuna üç kere su vermek</li>
<li>Kulağını meshetmek</li>
<li>
Parmaklarını hilâllemek; yâni bir elin parmaklarını diğer elin
parmakları arasına geçirip çekmek
</li>
<li>Âzâları üçer kere yıkamak</li>
<li>Başını kaplama meshetmek</li>
<li>
Abdesti tertip üzere almak; yâni abdest âzâlarını sırasıyla yıkamak
</li>
<li>El ve ayaklarını yıkamakta parmak uçlarından başlamak</li>
<li>
Abdest alırken okunacak birçok duâ olmakla beraber evlâ olan bütün
âzâlarını yıkarken besmele çekip şehâdet getirmektir
</li>
</ul>
<h3>Abdestin mekruhları</h3>
<ul>
<li>Sağ el ile sümkürmek</li>
<li>Abdest âzâlarından birini üç defadan az veya fazla yıkamak</li>
<li>Suyu yüzüne çarpmak</li>
<li>Güneşte ısınmış su ile abdest almak</li>
<li>Suyu çok az kullanmak veya israf etmek</li>
<li>Abdest alırken konuşmak</li>
<li>Sünnetlerini terk etmek</li>
</ul>
<h3>Abdesti bozan durumlar</h3>
<p>
Nisa Suresi, 43 ayetine göre sekerat (şuuru yerinde olmamak:
delilik/cinnet, esriklik/sarhoşluk, bayılmak-baygınlık, uyku-uyumak...)
durumu ile boşaltım organlarından çıkış olması durumu namaza dolayısıyla
da abdestin varlığına engeldir. Maide Suresi 6. ayetine göre namaz için
abdest ya da teyemmüm şarttır.
</p>
<ul>
<li>
Boşaltım organlarından idrar, kan, meni, gaita (dışkı), yel gibi katı,
sıvı veya gaz çıkması,
</li>
<li>
Uyumak, delirmek, bayılmak, sarhoş olmak gibi idrak gücünün
kaybedildiği durumlar,
</li>
<li>Kanama,</li>
<li>Cinsî münasebet,</li>
<li>ız dolusu kusmak,</li>
<li>Teyemmüm almış birinin su bulması,</li>
<li>Yellenmek.</li>
</ul>
<h3>Abdest nasıl alınır</h3>
<ol>
<li>Eller bileklere kadar Üç kere oğusturularak yıkanır.</li>
<li>
Sağ elle, ilkin ağza, sonra buruna olmak üzere, üçer kere su alınır.
</li>
<li>Yüz, Üç kere yıkanır.</li>
<li>
Dirseği biraz aşacak şekilde önce sağ kol, sonra sol kol üçer kere
yıkanır.
</li>
<li>
Sağ elin içi ıslatılıp, alından enseye doğru sıvazlanarak baş mesh
edilir.
</li>
<li>
Islak elin başparmağıyla, serçeparmağıyla sıvazlanarak kulaklar mesh
edilir.
</li>
<li>
Islak parmakların tersiyle, ense ortasından yanlara doğru boyun da
mesh edilir.
</li>
<li>
Topuğu biraz geçmek üzere, sol elle ilkin sağ, sonra sol ayak yıkanır.
</li>
</ol>
<h3>Engelli abdesti</h3>
<p>
Normal abdest almasına engel bir durumu olan Müslüman'ın, rahatsızlığına
göre farklı yönlerden eksik kalan abdesttir.
</p>
<p>
Vücudunun belli yerlerini tıbbi sebeplerden yıkayamayan insanlar normal
abdest almaktan muhaf tutulur. Örnek olarak, kolu kırılan ve alçıya
alınan kişi abdestini alır; ancak kolunu yıkayamadığından sadece alçının
üstünü suyla mesh edebilir. O da zararlıysa, onu da yapmaz. Vücudunda
devamlı kanayan yara olan Müslümanlar da engelli abdesti alır. Buna
göre, normal abdest alırlar, fakat bu abdestle sadece tek vakit namaz
kılabilirler. Engelli abdesti alan Müslüman'ın, tam abdest alan
Müslüman'a cemaatle kılınan namazlarda imamlık yapması uygun
görülmemiştir.
</p>
</>
);
}

View file

@ -0,0 +1,26 @@
export function AbdestHukum() {
return (
<>
<h1>Abdestin Hükümleri</h1>
<p>
Fıkıh alimleri, Kur'an ve Sünneti referans göstererek abdestin
hükümlerini (farz, sünnet, mendup, müstehab, mekruh vs.) şunlar olarak
belirtirler:
</p>
<h3>Abdestin farzları</h3>
<p>Sünni alimlere göre abdestin farzları dörttür:</p>
<ul>
<li>Başın dörtte birini meshetmek, yani ıslak elle sıvazlamak.</li>
<li>Kolları (dirsekleriyle beraber) yıkamak.</li>
<li>Yüzü yıkamak.</li>
<li>Ayakları (topuklarıyla beraber) yıkamak.</li>
</ul>
<p>
Şia alimlerden bazıları &quot;ayaklara meshetmenin&quot; abdestin
farzlarından olduğuna, bazı alimler meshin farz, yıkamanın sünnet
olduğuna, diğer bir kısmı ise her iki uygulamadan birisini yerine
getirmenin yeterli olacağına inanmışlardır.
</p>
</>
);
}

View file

@ -0,0 +1,16 @@
export function AbdestMekruh() {
return (
<>
<h1>Abdestin Mekruhları</h1>
<ul>
<li>Sağ el ile sümkürmek</li>
<li>Abdest âzâlarından birini üç defadan az veya fazla yıkamak</li>
<li>Suyu yüzüne çarpmak</li>
<li>Güneşte ısınmış su ile abdest almak</li>
<li>Suyu çok az kullanmak veya israf etmek</li>
<li>Abdest alırken konuşmak</li>
<li>Sünnetlerini terk etmek</li>
</ul>
</>
);
}

View file

@ -0,0 +1,49 @@
export function AbdestNasil() {
return (
<>
<h1>Abdest Nasıl Alınır?</h1>
<ol>
<li>Eller bileklere kadar Üç kere oğusturularak yıkanır.</li>
<li>
Sağ elle, ilkin ağza, sonra buruna olmak üzere, üçer kere su alınır.
</li>
<li>Yüz, Üç kere yıkanır.</li>
<li>
Dirseği biraz aşacak şekilde önce sağ kol, sonra sol kol üçer kere
yıkanır.
</li>
<li>
Sağ elin içi ıslatılıp, alından enseye doğru sıvazlanarak baş mesh
edilir.
</li>
<li>
Islak elin başparmağıyla, serçeparmağıyla sıvazlanarak kulaklar mesh
edilir.
</li>
<li>
Islak parmakların tersiyle, ense ortasından yanlara doğru boyun da
mesh edilir.
</li>
<li>
Topuğu biraz geçmek üzere, sol elle ilkin sağ, sonra sol ayak yıkanır.
</li>
</ol>
<h2>Engelli Abdesti Nasıl Alınır?</h2>
<p>
Normal abdest almasına engel bir durumu olan Müslüman'ın, rahatsızlığına
göre farklı yönlerden eksik kalan abdesttir.
</p>
<p>
Vücudunun belli yerlerini tıbbi sebeplerden yıkayamayan insanlar normal
abdest almaktan muhaf tutulur. Örnek olarak, kolu kırılan ve alçıya
alınan kişi abdestini alır; ancak kolunu yıkayamadığından sadece alçının
üstünü suyla mesh edebilir. O da zararlıysa, onu da yapmaz. Vücudunda
devamlı kanayan yara olan Müslümanlar da engelli abdesti alır. Buna
göre, normal abdest alırlar, fakat bu abdestle sadece tek vakit namaz
kılabilirler. Engelli abdesti alan Müslüman'ın, tam abdest alan
Müslüman'a cemaatle kılınan namazlarda imamlık yapması uygun
görülmemiştir.
</p>
</>
);
}

View file

@ -0,0 +1,30 @@
export function AbdestSunnet() {
return (
<>
<h1>Abdestin Sünnetleri</h1>
<ul>
<li>Niyet etmek</li>
<li>Eûzü ve Besmele ile başlamak</li>
<li>Evvela ellerini bileklerine kadar yıkamak</li>
<li>Misvak kullanmak</li>
<li>Bir âzâ kurumadan diğerini yıkamak</li>
<li>Ağzına ve burnuna üç kere su vermek</li>
<li>Kulağını meshetmek</li>
<li>
Parmaklarını hilâllemek; yâni bir elin parmaklarını diğer elin
parmakları arasına geçirip çekmek
</li>
<li>Âzâları üçer kere yıkamak</li>
<li>Başını kaplama meshetmek</li>
<li>
Abdesti tertip üzere almak; yâni abdest âzâlarını sırasıyla yıkamak
</li>
<li>El ve ayaklarını yıkamakta parmak uçlarından başlamak</li>
<li>
Abdest alırken okunacak birçok duâ olmakla beraber evlâ olan bütün
âzâlarını yıkarken besmele çekip şehâdet getirmektir
</li>
</ul>
</>
);
}

View file

@ -0,0 +1,16 @@
export function AbdestTeyemmum() {
return (
<>
<h1>Teyemmüm</h1>
<p>
Fakihlere (fıkıh alimi) göre namaz kılmak için abdest yerine bazı
durumlarda teyemmüm yapılabilir. Ayrıca teyemmüm, hastalık, yolculuk, su
bulmama/suyun olmaması veya erişilememesi gibi durumlarda boy abdesti
yerine de yapılır. Kur'an'da teyemmüm yapmak için türâb (toprak) sözcüğü
kullanılmaz, bunun yerine said sözcüğü kullanılır ki bu sözcük
&quot;toz, toprak, taş vs.&quot; anlamına gelmektedir. Kullanıma uygun
su bulunduğu zaman bozulmaktadır.
</p>
</>
);
}

View file

5
src/constants.js Normal file
View file

@ -0,0 +1,5 @@
export const THEMES = {
DEFAULT: "DEFAULT",
GREEN: "GREEN",
DARK: "DARK",
};

34
src/contexts/Themes.js Normal file
View file

@ -0,0 +1,34 @@
import React, { useEffect, useState, createContext } from "react";
import { THEMES } from "../constants";
const initialState = {
theme: THEMES.DEFAULT,
setTheme: (theme) => {},
};
const ThemeContext = createContext(initialState);
function ThemeProvider({ children }) {
const [theme, setTheme] = useState(initialState.theme);
useEffect(() => {
const storedTheme = localStorage.getItem("theme");
if (storedTheme) {
setTheme(JSON.parse(storedTheme));
}
}, []);
const updateTheme = (theme) => {
localStorage.setItem("theme", JSON.stringify(theme));
setTheme(theme);
};
return (
<ThemeContext.Provider value={{ theme, setTheme: updateTheme }}>
{children}
</ThemeContext.Provider>
);
}
export { ThemeProvider, ThemeContext };

BIN
src/files/feels.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
src/files/feelsbad.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
src/files/sound.m4a Normal file

Binary file not shown.

6
src/hooks/useTheme.js Normal file
View file

@ -0,0 +1,6 @@
import { useContext } from "react";
import { ThemeContext } from "../contexts/Themes";
const useTheme = () => useContext(ThemeContext);
export default useTheme;

View file

@ -1,14 +1,18 @@
import React from 'react'; import React from "react";
import ReactDOM from 'react-dom/client'; import ReactDOM from "react-dom/client";
import './index.css'; import App from "./App";
import App from './App'; import "@fontsource/poppins";
import reportWebVitals from './reportWebVitals'; import reportWebVitals from "./reportWebVitals";
import { BrowserRouter } from "react-router-dom";
import { ThemeProvider } from "./contexts/Themes";
const root = ReactDOM.createRoot(document.getElementById('root')); const root = ReactDOM.createRoot(document.getElementById("root"));
root.render( root.render(
<React.StrictMode> <BrowserRouter>
<App /> <ThemeProvider>
</React.StrictMode> <App />
</ThemeProvider>
</BrowserRouter>
); );
// If you want to start measuring performance in your app, pass a function // If you want to start measuring performance in your app, pass a function

30
src/routes.js Normal file
View file

@ -0,0 +1,30 @@
import { QuickAbdest } from "./components/pages/Abdest";
import { AbdestBozan } from "./components/pages/AbdestBozan";
import { AbdestEngelli } from "./components/pages/AbdestEngelli";
import { AbdestEtimiloji } from "./components/pages/AbdestEtimoloji";
import { AbdestFarz } from "./components/pages/AbdestFarz";
import { AbdestHakkinda } from "./components/pages/AbdestHakkında";
import { AbdestHukum } from "./components/pages/AbdestHükümleri";
import { AbdestMekruh } from "./components/pages/AbdestMekruh";
import { AbdestNasil } from "./components/pages/AbdestNasılAlınır";
import { AbdestSunnet } from "./components/pages/AbdestSunnet";
import { AbdestTeyemmum } from "./components/pages/AbdestTeyemmüm";
export const routes = [
{
path: "/",
children: [
{ path: "", element: <QuickAbdest /> },
{ path: "abdesthakkinda", element: <AbdestHakkinda /> },
{ path: "abdestnasilalinir", element: <AbdestNasil /> },
{ path: "abdestetimoloji", element: <AbdestEtimiloji /> },
{ path: "abdestinhukumleri", element: <AbdestHukum /> },
{ path: "abdestinfarzlari", element: <AbdestFarz /> },
{ path: "abdestinsunnetleri", element: <AbdestSunnet /> },
{ path: "abdestinmehruklari", element: <AbdestMekruh /> },
{ path: "abdestbozandurumlar", element: <AbdestBozan /> },
{ path: "engelliabdesti", element: <AbdestEngelli /> },
{ path: "teyemmumabdesti", element: <AbdestTeyemmum /> },
],
},
];

11
src/theme/breakpoints.js Normal file
View file

@ -0,0 +1,11 @@
const breakpoints = {
values: {
xs: 0,
sm: 600,
md: 960,
lg: 1280,
xl: 1440,
},
};
export default breakpoints;

138
src/theme/components.js Normal file
View file

@ -0,0 +1,138 @@
const components = {
MuiButtonBase: {
defaultProps: {
disableRipple: true,
},
},
MuiLink: {
defaultProps: {
underline: "hover",
},
},
MuiCardHeader: {
defaultProps: {
titleTypographyProps: {
variant: "h6",
},
},
styleOverrides: {
action: {
marginTop: "-4px",
marginRight: "-4px",
},
},
},
MuiCard: {
styleOverrides: {
root: {
borderRadius: "6px",
boxShadow:
"rgba(50, 50, 93, 0.025) 0px 2px 5px -1px, rgba(0, 0, 0, 0.05) 0px 1px 3px -1px",
backgroundImage: "none",
},
},
},
MuiPaper: {
styleOverrides: {
root: {
backgroundImage: "none",
},
},
},
MuiPickersDay: {
styleOverrides: {
day: {
fontWeight: "300",
},
},
},
MuiPickersYear: {
styleOverrides: {
root: {
height: "64px",
},
},
},
MuiPickersCalendar: {
styleOverrides: {
transitionContainer: {
marginTop: "6px",
},
},
},
MuiPickersCalendarHeader: {
styleOverrides: {
iconButton: {
backgroundColor: "transparent",
"& > *": {
backgroundColor: "transparent",
},
},
switchHeader: {
marginTop: "2px",
marginBottom: "4px",
},
},
},
MuiPickersClock: {
styleOverrides: {
container: {
margin: `32px 0 4px`,
},
},
},
MuiPickersClockNumber: {
styleOverrides: {
clockNumber: {
left: `calc(50% - 16px)`,
width: "32px",
height: "32px",
},
},
},
MuiPickerDTHeader: {
styleOverrides: {
dateHeader: {
"& h4": {
fontSize: "2.125rem",
fontWeight: 400,
},
},
timeHeader: {
"& h3": {
fontSize: "3rem",
fontWeight: 400,
},
},
},
},
MuiPickersTimePicker: {
styleOverrides: {
hourMinuteLabel: {
"& h2": {
fontSize: "3.75rem",
fontWeight: 300,
},
},
},
},
MuiPickersToolbar: {
styleOverrides: {
toolbar: {
"& h4": {
fontSize: "2.125rem",
fontWeight: 400,
},
},
},
},
MuiChip: {
styleOverrides: {
root: {
borderRadius: "6px",
},
},
},
};
export default components;

35
src/theme/index.js Normal file
View file

@ -0,0 +1,35 @@
import "@mui/lab/themeAugmentation";
import { createTheme as createMuiTheme } from "@mui/material/styles";
import variants from "./variants";
import typography from "./typography";
import breakpoints from "./breakpoints";
import components from "./components";
import shadows from "./shadows";
const createTheme = (name) => {
let themeConfig = variants.find((variant) => variant.name === name);
if (!themeConfig) {
console.warn(new Error(`The theme ${name} is not valid`));
themeConfig = variants[0];
}
return createMuiTheme(
{
spacing: 4,
breakpoints: breakpoints,
components: components,
typography: typography,
shadows: shadows,
palette: themeConfig.palette,
},
{
name: themeConfig.name,
header: themeConfig.header,
footer: themeConfig.footer,
sidebar: themeConfig.sidebar,
}
);
};
export default createTheme;

33
src/theme/shadows.js Normal file
View file

@ -0,0 +1,33 @@
function createShadow() {
return `box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.05);`;
}
const shadows = [
"none",
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
createShadow(),
];
export default shadows;

58
src/theme/typography.js Normal file
View file

@ -0,0 +1,58 @@
const typography = {
fontFamily: [
"Inter",
"-apple-system",
"BlinkMacSystemFont",
'"Segoe UI"',
"Roboto",
'"Helvetica Neue"',
"Arial",
"sans-serif",
'"Apple Color Emoji"',
'"Segoe UI Emoji"',
'"Segoe UI Symbol"',
].join(","),
fontSize: 13,
fontWeightLight: 300,
fontWeightRegular: 400,
fontWeightMedium: 500,
fontWeightBold: 600,
h1: {
fontSize: "2rem",
fontWeight: 600,
lineHeight: 1.25,
},
h2: {
fontSize: "1.75rem",
fontWeight: 600,
lineHeight: 1.25,
},
h3: {
fontSize: "1.5rem",
fontWeight: 600,
lineHeight: 1.25,
},
h4: {
fontSize: "1.125rem",
fontWeight: 500,
lineHeight: 1.25,
},
h5: {
fontSize: "1.0625rem",
fontWeight: 500,
lineHeight: 1.25,
},
h6: {
fontSize: "1rem",
fontWeight: 500,
lineHeight: 1.25,
},
body1: {
fontSize: 13,
},
button: {
textTransform: "none",
},
};
export default typography;

134
src/theme/variants.js Normal file
View file

@ -0,0 +1,134 @@
import merge from "deepmerge";
import { green, grey } from "@mui/material/colors";
import { THEMES } from "../constants";
const customBlue = {
50: "#e9ebf0",
100: "#cbced4",
200: "#a4a9b3",
300: "#858b94",
400: "#6a6f76",
500: "#5c6066",
600: "#3c3f43",
700: "#24441c",
800: "#1a1d24",
900: "#0f131a ",
};
const defaultVariant = {
name: THEMES.DEFAULT,
palette: {
mode: "light",
primary: {
main: customBlue[700],
contrastText: "#FFF",
},
secondary: {
main: customBlue[500],
contrastText: "#FFF",
},
background: {
paper: customBlue[700],
contrastText: "#FFF",
},
},
header: {
color: grey[500],
background: "#FFF",
search: {
color: grey[800],
},
indicator: {
background: customBlue[600],
},
},
footer: {
color: grey[500],
background: "#FFF",
},
sidebar: {
color: grey[200],
background: "#233044",
header: {
color: grey[200],
background: "#233044",
brand: {
color: customBlue[500],
},
},
footer: {
color: grey[200],
background: "#1E2A38",
online: {
background: green[500],
},
},
badge: {
color: "#FFF",
background: customBlue[500],
},
},
};
const darkVariant = merge(defaultVariant, {
name: THEMES.DARK,
palette: {
mode: "dark",
primary: {
main: customBlue[400],
contrastText: "#FFF",
},
background: {
default: customBlue[800],
paper: customBlue[900],
},
text: {
primary: "rgba(255, 255, 255, 0.95)",
secondary: "rgba(255, 255, 255, 0.5)",
},
},
header: {
color: grey[300],
background: "#1B2635",
search: {
color: grey[200],
},
},
footer: {
color: grey[300],
background: "#233044",
},
});
const variants = [defaultVariant, darkVariant];
export default variants;
/**
* @typedef {object} VariantType
* @property {string} name
* @property {object} palette
* @property {MainContrastTextType} palette.primary
* @property {MainContrastTextType} palette.secondary
* @property {ColorBgType} palette.background
* @property {ColorBgType} header
* @property {object} header.search
* @property {ColorBgType} header.indicator
* @property {ColorBgType} footer
* @property {ColorBgType} sidebar
* @property {ColorBgType} sidebar.header
* @property {ColorBgType} sidebar.footer
* @property {ColorBgType} sidebar.badge
*/
/**
* @typedef {object} MainContrastTextType
* @property {string} main
* @property {string} contrastText
*/
/**
* @typedef {object} ColorBgType
* @property {string} color
* @property {string} background
*/