diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..6a8d28c --- /dev/null +++ b/.env.development @@ -0,0 +1 @@ +VITE_SMARTMENUISERIE_URL=https://localhost/SmartMenuiserieTemplate \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..5f358de --- /dev/null +++ b/.env.production @@ -0,0 +1,2 @@ + +VITE_SMARTMENUISERIE_URL=https://localhost/SmartMenuiserieTemplate \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs index e3d6aa1..d1b6e75 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -20,5 +20,7 @@ module.exports = { '@typescript-eslint' ], rules: { + 'space-before-function-paren': ['error', 'never'], + semi: ['warn', 'always'] } -} +}; diff --git a/package-lock.json b/package-lock.json index 170ea07..2b88a08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,6 +95,15 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", @@ -153,6 +162,15 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", @@ -650,21 +668,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/parser": { "version": "5.31.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", @@ -775,21 +778,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils": { "version": "5.31.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", @@ -814,28 +802,6 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.31.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", @@ -875,9 +841,9 @@ } }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -906,6 +872,18 @@ "xtend": "^4.0.2" } }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -1148,21 +1126,6 @@ "semver": "^7.0.0" } }, - "node_modules/builtins/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -2106,21 +2069,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-promise": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz", @@ -2190,17 +2138,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" } }, "node_modules/eslint-utils": { @@ -2300,6 +2266,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/eslint/node_modules/globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", @@ -2350,18 +2329,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -3919,12 +3886,18 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/shebang-command": { @@ -4466,6 +4439,14 @@ "gensync": "^1.0.0-beta.2", "json5": "^2.2.1", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/generator": { @@ -4511,6 +4492,14 @@ "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.20.2", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-environment-visitor": { @@ -4883,17 +4872,6 @@ "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/parser": { @@ -4948,17 +4926,6 @@ "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/utils": { @@ -4973,24 +4940,6 @@ "@typescript-eslint/typescript-estree": "5.31.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } } }, "@typescript-eslint/visitor-keys": { @@ -5019,9 +4968,9 @@ } }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, "acorn-jsx": { @@ -5040,6 +4989,14 @@ "acorn": "^7.0.0", "acorn-walk": "^7.0.0", "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } } }, "acorn-walk": { @@ -5204,17 +5161,6 @@ "dev": true, "requires": { "semver": "^7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "call-bind": { @@ -5728,6 +5674,16 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, "globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", @@ -5891,17 +5847,6 @@ "minimatch": "^3.1.2", "resolve": "^1.10.1", "semver": "^7.3.7" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "eslint-plugin-promise": { @@ -5952,17 +5897,31 @@ "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } } }, "eslint-utils": { @@ -5997,14 +5956,6 @@ "acorn": "^8.7.1", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - } } }, "esquery": { @@ -7087,10 +7038,13 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "shebang-command": { "version": "2.0.0", diff --git a/src/App.scss b/src/App.scss index 2c5e2ef..e69de29 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1,41 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/src/App.tsx b/src/App.tsx index bc13c83..36091b0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,10 +1,58 @@ -import './App.scss' +import React from 'react'; +import './App.scss'; +import Sidebar from './Components/Sidebar/Sidebar'; +import { IAvailableContainerModel } from './Interfaces/IAvailableContainerModel'; +import { IConfigurationResponseModel } from './Interfaces/IConfigurationResponseModel'; + +interface IAppProps { -function App() { - return ( -
-
- ) } -export default App +interface IAppState { + componentOptions: IAvailableContainerModel[] +} +class App extends React.Component { + public state: IAppState; + + constructor(props: IAppProps) { + super(props); + this.state = { + componentOptions: [] + }; + } + + componentDidMount() { + fetchConfiguration().then((configuration: IConfigurationResponseModel) => { + this.setState({ + componentOptions: configuration.AvailableContainers + }); + }); + } + + render() { + return ( +
+ +
+ ); + } +} + +async function fetchConfiguration(): Promise { + const url = `${import.meta.env.VITE_SMARTMENUISERIE_URL}`; + const myHeaders = new Headers({ + 'Content-Type': 'application/json' + }); + + const myInit = { + method: 'POST', + headers: myHeaders + }; + + return await fetch(url, myInit) + .then((response) => + response.json() + ) as IConfigurationResponseModel; +} + +export default App; diff --git a/src/Components/Sidebar/Sidebar.tsx b/src/Components/Sidebar/Sidebar.tsx new file mode 100644 index 0000000..62da392 --- /dev/null +++ b/src/Components/Sidebar/Sidebar.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import { IAvailableContainerModel } from '../../Interfaces/IAvailableContainerModel'; + +interface ISidebarProps { + componentOptions: IAvailableContainerModel[] +} + +export default class Sidebar extends React.PureComponent { + public render() { + return ( + + ); + } +} diff --git a/src/Components/SidebarRow/SidebarRow.tsx b/src/Components/SidebarRow/SidebarRow.tsx new file mode 100644 index 0000000..c9e9b45 --- /dev/null +++ b/src/Components/SidebarRow/SidebarRow.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; + +interface ISidebarRowProps { +} + +export const SidebarRow: React.FC = (props) => { + return ( +
+ +
+ ); +}; diff --git a/src/Enums/AddingBehavior.ts b/src/Enums/AddingBehavior.ts new file mode 100644 index 0000000..ddf722e --- /dev/null +++ b/src/Enums/AddingBehavior.ts @@ -0,0 +1,4 @@ +export enum AddingBehavior { + InsertInto, + Replace +} diff --git a/src/Enums/XPositionReference.ts b/src/Enums/XPositionReference.ts new file mode 100644 index 0000000..ec8108a --- /dev/null +++ b/src/Enums/XPositionReference.ts @@ -0,0 +1,5 @@ +export enum XPositionReference { + Left, + Center, + Right +} diff --git a/src/Interfaces/ActionContainerModel.ts b/src/Interfaces/ActionContainerModel.ts new file mode 100644 index 0000000..1f398b0 --- /dev/null +++ b/src/Interfaces/ActionContainerModel.ts @@ -0,0 +1,11 @@ +import { AddingBehavior } from '../Enums/AddingBehavior'; +import { IImageModel } from './IImageModel'; + +export interface IActionContainerModel { + Id: string + CustomLogo: IImageModel + Label: string + Description: string + Action: string + AddingBehavior: AddingBehavior +} diff --git a/src/Interfaces/IAvailableContainerModel.ts b/src/Interfaces/IAvailableContainerModel.ts new file mode 100644 index 0000000..1a1c1fe --- /dev/null +++ b/src/Interfaces/IAvailableContainerModel.ts @@ -0,0 +1,28 @@ +import { IActionContainerModel } from './ActionContainerModel' +import { IAvailableDefaultContainerModel } from './IAvailableDefaultContainerModel' + +/** Model of available container used in application configuration */ +export interface IAvailableContainerModel { + Type: string + BodyColor: string + BorderColor: string + BorderWidth: number + Width: number + Height: number + Padding: number + MinWidth: number + MaxWidth: number + MinHeight: number + MaxHeight: number + IsWidthFixed: boolean + IsPositionFixed: boolean + + ShowCotation: boolean + + /** Default Type container to add with this container (Priority on DefaultChildrenContainers property) */ + TypeChildContainerDefault: string + + /** Default children container to add with this container */ + DefaultChildrenContainers: IAvailableDefaultContainerModel[] + ContainerActions: IActionContainerModel[] +} diff --git a/src/Interfaces/IAvailableDefaultContainerModel.ts b/src/Interfaces/IAvailableDefaultContainerModel.ts new file mode 100644 index 0000000..097fff2 --- /dev/null +++ b/src/Interfaces/IAvailableDefaultContainerModel.ts @@ -0,0 +1,4 @@ +export interface IAvailableDefaultContainerModel { + Type: string + DefaultChildrenContainers: IAvailableDefaultContainerModel[] +} diff --git a/src/Interfaces/IAvailableSymbolModel.ts b/src/Interfaces/IAvailableSymbolModel.ts new file mode 100644 index 0000000..865d49f --- /dev/null +++ b/src/Interfaces/IAvailableSymbolModel.ts @@ -0,0 +1,12 @@ +import { XPositionReference } from '../Enums/XPositionReference'; +import { IImageModel } from './IImageModel'; + +/** + * Model of available symbol to configure the application */ +export interface IAvailableSymbolModel { + Name: string + XPositionReference: XPositionReference + Image: IImageModel + Width: number + Height: number +} diff --git a/src/Interfaces/IConfigurationResponseModel.ts b/src/Interfaces/IConfigurationResponseModel.ts new file mode 100644 index 0000000..1f92dc7 --- /dev/null +++ b/src/Interfaces/IConfigurationResponseModel.ts @@ -0,0 +1,9 @@ +import { IAvailableContainerModel } from './IAvailableContainerModel'; +import { IAvailableSymbolModel } from './IAvailableSymbolModel'; + +/** Model of configuration for the application to configure it */ +export interface IConfigurationResponseModel { + AvailableContainers: IAvailableContainerModel[]; + AvailableSymbols: IAvailableSymbolModel[]; + MainContainer: IAvailableContainerModel; +} diff --git a/src/Interfaces/IImageModel.ts b/src/Interfaces/IImageModel.ts new file mode 100644 index 0000000..58598cb --- /dev/null +++ b/src/Interfaces/IImageModel.ts @@ -0,0 +1,7 @@ +/** Model of an image with multiple source */ +export interface IImageModel { + Name: string; + Url: string; + Base64Image: string; + Svg: string; +} diff --git a/src/main.tsx b/src/main.tsx index 611e848..a2bf01b 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,10 +1,10 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App' -import './index.css' +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import './index.css'; ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( -) +); diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 11f02fe..443847d 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1 +1,10 @@ /// + +interface ImportMetaEnv { + readonly VITE_SMARTMENUISERIE_URL: string + // more env variables... +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/tailwind.config.cjs b/tailwind.config.cjs index 7849f91..2aea43d 100644 --- a/tailwind.config.cjs +++ b/tailwind.config.cjs @@ -1,11 +1,11 @@ /** @type {import('tailwindcss').Config} */ module.exports = { content: [ - "./index.html", - "./src/**/*.{vue,js,ts,jsx,tsx}", + './index.html', + './src/**/*.{vue,js,ts,jsx,tsx}' ], theme: { - extend: {}, + extend: {} }, - plugins: [], + plugins: [] } diff --git a/test-server/http.js b/test-server/http.js new file mode 100644 index 0000000..e764f40 --- /dev/null +++ b/test-server/http.js @@ -0,0 +1,49 @@ +// http.js +import { serve } from 'bun'; + +serve({ + port: 5000, + fetch(request) { + console.log(`${request.method}: ${request.url}`); + if (request.method === 'POST') { + const json = JSON.stringify( + { + AvailableContainers: [ + { + Type: 'Chassis', + BorderColor: '#ff0000', + TypeChildContainerDefault: 'Trou', + BorderWidth: 48, + MinWidth: 500, + MaxWidth: 3000 + } + ], + AvailableSymbolModels: [], + MainContainer: { + Type: 'Trou', + BorderColor: '#ffffff', + Height: 1600, + Width: 20000 + } + } + ); + return new Response(json, { + status: 200, + headers: { + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Headers': '*' + } + }); + } + + return new Response('Welcome to Bun!', { + status: 200, + headers: { + 'Content-Type': 'text/plain', + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Headers': '*' + } + }); + } +}); diff --git a/tsconfig.json b/tsconfig.json index 3d0a51a..323bf45 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,5 +17,6 @@ "jsx": "react-jsx" }, "include": ["src"], + "exclude": ["test-server"], "references": [{ "path": "./tsconfig.node.json" }] }